dignuz

Faraday 3D

A studio's website, moved off Webflow for good.

The website of an architectural visualisation studio in Tartu. It began as a Webflow site that had already been converted once, into Eleventy with Netlify CMS. I rebuilt it from scratch as a static site on a new domain, and I designed it as well as built it.

01

How it's built

  • TypeScript
  • Astro 7
  • Tailwind 4
  • GSAP
  • Zod
  • sharp
  • AVIF
  • WebP
  • JSON-LD
  • llms.txt
  • Vitest
  • Playwright
  • Netlify

Astro 7, and nothing else at run time: no server, no database, no CMS. The build is the product. The content lives in typed collections that the build checks, so a missing field or a broken reference stops the build instead of reaching the page. Images come out as AVIF and WebP, at the sizes each screen needs. The files Netlify and the crawlers read (the redirects, the headers, robots.txt, the sitemap and llms.txt) are written by the build from the same content, never by hand.

Made to be read by AI as well as by search engines. Every page's text is in the HTML as it arrives, not assembled by JavaScript afterwards. llms.txt gives AI tools a plain summary of the site, built from the same content as the pages. Each page carries structured data (JSON-LD) saying who the studio is and what the page is for. And robots.txt lets in the crawlers that answer people's questions, while turning away the ones that only collect training data.

Every page's search basics are checked by the build. A test reads every page the build produces and fails if one of them has no h1 or more than one, skips a heading level, has no meta description, has a title outside 30 to 60 characters or a description outside 70 to 160, shares its title or description with another page, or has a canonical that does not point at its own address. The content is held to the same lengths by its Zod schema before the build starts. Internal links, Open Graph tags and the structured data are tested the same way: every internal link is checked against the pages that exist, and every JSON-LD block has to parse and resolve.

02

What was hard

Leaving Webflow completely. The old site had 164 pages, and still loaded 282 files from Webflow's servers. I pulled every one down and stored it with the site, and a build test now fails if anything the build produces loads from a third-party host. Without that test, a site can keep depending on the platform it left for months, and nothing on the page shows it.

A new domain where no link is lost by accident. Old paths answer with a permanent redirect to their new address. The one page dropped on purpose is listed in the code, so a missing page is a decision somebody made, not something nobody noticed. A second test fails the build if anything the site ships still names the old domain.

03

The trade-off

There is no CMS. Every change to the content is a change to the code, checked by the tests before it goes live. That is slower than logging into an editor to fix a typo, and it is also why nothing reaches the site unchecked.

Want a site like this, built new or moved off what you are on now?