← Return to the fire

How this site
was made

An honest making-of. No mystique: the whole recipe, the way we'd read you the menu.

I

The concept

Ember & Salt is a fictional wood-fire tasting-menu restaurant, and the site treats a webpage like a dining room: one image and one thought per viewport, near-black walls (#0d0b09), candlelit amber (#e8a25a), and a menu written as poetry rather than a product list. The reference point is Michelin-site restraint and cinematic chiaroscuro: Rembrandt lighting, a single warm source, everything else falling to shadow. Nothing here rushes. That slowness is the design.

II

The techniques, honestly

III

Three passes over the fire

The site was built in an iteration loop: serve locally, screenshot desktop and 390px mobile with a headless browser, actually read the screenshots, then fix what they show. Pass one caught raw structure: spacing rhythm, font loading, image crops, and a canvas bug that silently killed every animation. Pass two was the harsh critique: type hierarchy in the menu, contrast on captions, parallax speed, the smoke reading as fog instead of wisp. Pass three was detail density: course timestamps, coordinates, hairline geometry, the sticky reserve call-to-action's timing. Console errors and failed requests were fixed at every pass. Nothing shipped unseen.

IV

Prompt your own

If you want an AI agent to build something like this, give it a world, not a wireframe:

"Build a one-page site for a wood-fire tasting-menu restaurant. Cinematic chiaroscuro: near-black #0d0b09, candlelit amber, bone text. Cormorant Garamond italics for display, a quiet letterspaced sans for labels. Generate 6 AI food photos from one shot list, with the same single light source and grade in every prompt. Write the 7-course menu as poetry, numbered with hairline rules. Canvas smoke over the hero, GSAP slow reveals and image parallax, sticky reserve CTA. One image, one thought per viewport. Screenshot and critique yourself at least three times before calling it done."

The two habits that matter most: repeat the lighting grammar in every image prompt, and make the agent look at its own output. Taste is a loop, not a setting.