Paavli Kvartal: interactive WordPress site for a Tallinn creative quarter
Section-snapping scroll, filterable map and a custom event importer
Risto Tõldsep built paavli.ee for Paavli Kvartal, a creative business quarter in North Tallinn. The custom WordPress theme uses ACF Gutenberg blocks, Tailwind CSS and a Vite per-block asset pipeline, with custom post types for companies, rental spaces and events, a filterable interactive map, and a full-page section-snapping scroll driven by Lenis and GSAP. He also wrote the plugin that syncs the cultural centre's event programme twice daily.
Paavli Kvartal is a creative business quarter in North Tallinn: a collection of companies, rentable spaces and a cultural programme, all on one site. The site has to work as a directory, a leasing brochure and an events calendar at once, for audiences who want completely different things from it.
The events were the awkward part. The quarter’s cultural centre publishes its programme on a separate site with no API, and nobody was going to retype every event by hand into WordPress twice a week.
What I built
A custom WordPress theme on ACF Gutenberg blocks, Tailwind CSS and a Vite per-block asset pipeline.
Custom post types for companies, rental spaces and events, so each content type has the fields it actually needs instead of being forced into pages.
A filterable interactive map of the quarter, letting visitors find a company or an available space by location rather than by scrolling a list.
A full-page section-snapping scroll experience driven by Lenis, with GSAP animations and Swiper galleries.
A custom event-importer plugin that keeps the events calendar current without anyone touching it.
Technical highlights
Reconstructing a Next.js data stream
The cultural centre’s site offers no API, so the importer reconstructs the source site’s Next.js data stream to read the programme as structured data rather than scraping rendered HTML. That is considerably more robust: a visual redesign on their side does not break the import.
Smart sync, not blind re-import
The plugin runs twice daily and reconciles rather than duplicating, so events that changed are updated, events that disappeared are handled, and the editors’ own manual additions survive.
Section snapping that still scrolls
Full-page snapping is easy to get wrong in a way that traps the user. Driving it through Lenis keeps the momentum and the scrollbar behaving normally while still landing cleanly on each section.
A map tied to real content
The interactive map reads from the company and rental-space post types, so adding a tenant in wp-admin puts them on the map. There is no second place to keep in sync.
Results
The events calendar stays current automatically, twice a day, with no editorial work.
Companies, spaces and events are each a proper content type, so the client can add a tenant or a listing without touching layout.
Tech stack
WordPressACF BlocksTailwind CSSViteGSAPSwiperLenisCustom Post TypesCustom Plugin
Can you pull in content from a site that has no API?
Often, yes. For this one the source was a Next.js site, so rather than scraping the rendered page I reconstruct its underlying data stream and read the programme as structured data. It is more work up front and far more stable afterwards.
Does a heavily animated site still perform?
It can, if the assets are split. Each ACF block builds its own CSS and JS through Vite, so a page only loads the animation code it actually uses rather than one bundle containing everything.