Café Sidra
A scroll-driven day cycle for a tea salon on the Boujaafar corniche in Sousse. The sky is interpolated from dawn to dusk as you read, above a hand-drawn SVG seafront in parallax.
Visit live site
05
Locales
06
Routes
SVG
Seafront
Café Sidra is a salon de thé and coffee house at 14 avenue Hédi Chaker, on the Boujaafar corniche in Sousse, open from seven in the morning until late and serving a Sunday brunch. The brief was not a page of opening hours and a photo gallery. It was to make the site feel the way the room feels at different times of day, so we built the whole homepage around a single continuous idea: scrolling the page advances the clock.
A fixed sky sits behind the entire document and is interpolated across seven colour stops by one GSAP ScrollTrigger bound to the full body height. The sun climbs a parabolic arc and sinks past the horizon, a moon and forty-six seeded stars fade up in the last stretch, and a small glass clock reads out the time from 07h00 to 22h00 with the name of the current phase. Underneath the hero sits a hand-drawn SVG of the corniche itself, with the sea, feluccas, gulls, palms, street lamps, parasols and bistro tables split into depth layers that parallax at different rates. Between those anchors, pinned chapters carry the narrative: four cups crossfading through the day with a Ken Burns push, a pastry showcase that scrolls horizontally while each photograph parallaxes inside its own frame, and six polaroids that fly in from scattered positions and settle into a tidy row.
The content layer is deeper than the animation suggests. The menu, the eight signature pastries with their ingredients and allergens, and the four private-event formats are all authored as structured data in five locales — French as the source, plus English, Arabic, Russian and German — served through a bespoke i18n provider that flips the document direction for Arabic. Every motion path is gated behind gsap.matchMedia and a prefers-reduced-motion check, so the pinned chapters degrade to readable static collages and the smooth-scroll layer never initialises for visitors who ask for less movement.
The Challenge
A seafront tea salon lives on atmosphere, and atmosphere is exactly what a conventional restaurant template throws away. Café Sidra needed a site that conveyed the difference between the first capucin at seven in the morning and mint tea under the garlands at sunset, while still doing the ordinary work of a hospitality site: a full priced menu, an allergen-accurate pastry catalogue, private-event formats, and a booking flow that understands the house rules. It also had to serve a mixed coastal audience — Tunisian, French, and holiday traffic — without splitting into separate builds, and it had to stay legible on a phone and for anyone who cannot tolerate heavy motion.
What We Built
We built it in Next.js 16 with the App Router, React 19 and Tailwind CSS v4, using GSAP with ScrollTrigger and SplitText over a Lenis smooth-scroll layer. One scrub-bound timeline drives a fixed sky gradient, an arcing sun, a rising moon and a narrative clock across the entire document height. The seafront, the map of Sousse and every decorative vignette are original inline SVG rather than stock imagery, with parallax depth layers, animated wave paths and a pulsing café pin. Pinned sections handle the set pieces — a four-frame crossfade, a horizontal pastry strip using containerAnimation for per-photo parallax, and a polaroid cluster that assembles as you scroll. Menus, pastries and event formats live in typed data files localised across five languages and rendered through a custom i18n provider with RTL handling. Reservation and contact forms validate in the browser and again in Next route handlers, sharing the same rules, including the constraint that brunch can only be booked on a Sunday. Structured data, per-route metadata, a generated sitemap and robots file, a skip link, focus-visible outlines and a reduced-motion path complete the build.
The Outcome
The site is live on Vercel and ships six routes plus a custom 404: the scroll-narrative homepage, the full menu explorer, the pastry catalogue with detail sheets and a bespoke lightbox, private events, reservations and contact. It gives Café Sidra a single French-authored source of truth for its menu, allergens and event formats that renders in five languages including right-to-left Arabic, a booking flow that encodes the house rules before anything reaches the phone, CafeOrCoffeeShop structured data with geo coordinates and opening hours for local search, and an illustrated map that opens directions to the corniche in one tap. Every animated chapter has a static, readable counterpart, so the experience holds up on a phone on the promenade as well as on a desktop.
Scroll-bound day cycle
A fixed sky behind the whole document is interpolated across seven colour stops by a single GSAP ScrollTrigger tied to body height, with a sun on a parabolic arc, a moon and seeded stars that fade in at dusk, and a glass clock reading 07h00 to 22h00 with the current phase name (src/components/home/SkyJourney.tsx).
Hand-drawn corniche in parallax
The Boujaafar seafront is original inline SVG — sea gradient, animated wave paths, feluccas that bob, gliding gulls, palms, street lamps, parasols, bistro tables, mint planters and a chalkboard — split into data-depth layers that the hero parallaxes at separate rates (src/components/home/CornicheScene.tsx).
Pinned narrative chapters
Four photographs crossfade through the day with a Ken Burns push, synced captions and progress dots; six polaroids fly in from scattered offsets and settle into a row, straightening on hover. Both pin and scrub on desktop and fall back to static collages otherwise (DayInCups.tsx, PolaroidCluster.tsx).
Horizontal pastry showcase
A pinned section scrolls eight pastry cards sideways while each photograph parallaxes inside its own frame via GSAP containerAnimation, with cards fanning in on entry and native horizontal overflow scrolling on mobile (src/components/home/DessertStrip.tsx).
Reservation flow with mirrored validation
Table and Sunday-brunch modes generate their own slot tables, and the same rules run client-side and in the route handler: Tunisian phone format, one to fourteen covers, no past dates, brunch only on Sundays, then a generated SID- reference and an animated SVG confirmation (ReservationForm.tsx, api/reservation/route.ts).
Five-locale content layer with RTL
A bespoke provider serves French, English, Arabic, Russian and German from a single dictionary plus per-locale fields on every menu item, pastry and event format, persisting choice to localStorage and switching document lang and dir for Arabic (src/i18n/, src/data/).
Live in production
Café Sidra is running in production today. Open it, then tell us what you want built — BreakNRoot engineers systems like this one from first prototype to production.
BNR-CF-05Zitouna
A French-language site for a contemporary Tunisian restaurant in the medina of Sousse, built on Next.js 16 and GSAP, with a pinned horizontal signature gallery and a five-language switcher including Arabic RTL.
Open file
BNR-CF-07Clinique El Yasmine
A multidisciplinary clinic in Sahloul, Sousse, built on Next.js 16: a four-step booking flow validated against each doctor's schedule, trilingual FR/EN/AR content, and accessibility engineered throughout.
Open file