← All workStaged launch · Experiences page
Kyma West Palm Beach
Kyma's West Palm Beach experiences page went from a single design export to a staged, pixel-faithful launch build with a working newsletter signup.
kymawestpalmbeach.euphemios.com

The engagement
Kyma is a Greek restaurant group; its West Palm Beach location on Olive Avenue hosts Sunday brunch on the Tarrazza, weekend DJ sets, private dining rooms and full buyouts. The approved Experiences & Events page presents all of it on one long page: the four experiences, the October and November DJ lineup, the private spaces, menus, reservations through SevenRooms, an Instagram strip and a newsletter signup. This staged build runs on a Euphemios subdomain while the client wires its own domain; the restaurant's current pages remain on kymarestaurants.com.
01
The challenge
The design arrived as one self-unpacking HTML export of 18.5 MB carrying 37 embedded assets, including a 10.6 MB hero video, fifteen web fonts, a WebGL water shader and the React runtime. It had to be served exactly as designed, work on a phone, make no third-party requests, and turn a signup form that only simulated success into a real backend the restaurant could act on, all without a client Google account or domain being available yet.
02
The approach
We built a deterministic pipeline that unpacks the export into a static site with every asset self-hosted under immutable cache headers. Changes to the design are exact-string patches with required occurrence counts, so a re-export that moves a line fails the build instead of silently dropping a fix: local hero-video fallbacks, hash-free section navigation, and a signup that validates, posts once and shows the design's own thank-you state only after the backend confirms. The backend is a Google Apps Script web app writing to a Sheet with a honeypot, server-side validation, a rejected tab, a delivery log and a daily digest. The gate proves the result: build determinism, a static contract, copy checks, a render gate at 1440, 390 and 360 pixels including the menu, the empty-submit negative case and the backend-failure path, and a pixel-parity gate that compares the build against the raw export at eight scroll offsets.
0.07%worst-frame pixel mismatch vs the design export
37embedded assets unpacked and self-hosted
0third-party requests on page load
03
Scope of work
- Deterministic unpack of the Claude Design export into a static, self-hosted single-page site
- Exact-string template patches with required occurrence counts (video fallbacks, live signup, copy correction)
- Hash-free section navigation and clean URLs from the first deploy
- Newsletter signup backend: Google Apps Script web app, Sheet with Subscribers, Rejected and Delivery-log tabs, alert email and daily digest
- Five-section local gate including pixel parity against the design export and render checks at three viewports
- Vercel deployment on the Euphemios team with a Cloudflare DNS-only subdomain
04
What we delivered
- The Experiences & Events page staged at kymawestpalmbeach.euphemios.com, pixel-faithful to the approved export on desktop and verified at 390 and 360 pixels
- A committed build pipeline (source export, overrides, build script) so a re-export rebuilds the site in one command
- A live newsletter signup writing to a Google Sheet with alert emails, proven end to end with a real submission from the deployed page
- Favicons, Open Graph image and metadata derived from the export's own mark and hero frame
- A handoff runbook for moving the signup backend under the client's Google account and cutting over to the client's domain
- 01
The approved design is live on a staging subdomain, measured against the export at 0.07 percent worst-frame pixel mismatch rather than judged by eye.
- 02
The page makes zero requests to third-party hosts: fonts, React, the hero video and every photo are served from the site itself.
- 03
The signup form, which the export only simulated, now records subscribers in a Sheet and notifies the team, with bot submissions kept out of the list.
- 04
A re-export from the design tool rebuilds the site in one command, with every intentional change guarded by a hard-failing patch count.
Built with
- Claude Design export
- Python build pipeline
- Playwright render and parity gates
- Google Apps Script
- Google Sheets
- Vercel
- Cloudflare DNS