Elio Darras

Technical note · Published on 25 September 2026

Why Astro saved the Atelier Nicoletti website

An architect's site unpublished by Webflow, eleven days of 404s, and a rebuild as a static site, with 509 photos matched back by image fingerprint.

On 24 August 2026, Webflow unpublished the website of the Atelier d'Architecture Michel Nicoletti, in Annecy. Expired plan or refused payment, the domain returned a 404 for eleven days. An architect's showcase site with 57 projects and 509 photos, gone.

The first thing I did, before choosing anything, was to back up. The old CMS content, 63 projects, and its 884 images went into a git repository before Webflow's CDN could erase them.

Going back to Webflow would have been the short path. I preferred to rebuild in Astro, as a static site. The build computes 140 HTML pages once and for all, with no database and no application server, and four dependencies, Astro, Sharp and two fonts. The output is three CSS files, one JavaScript file, and a 48 KB home page that answers in 0.2 seconds. A site that can no longer be unpublished over a payment.

Each project is a versioned JSON file, under a content contract the build checks. An invalid JSON, an unknown category, a missing photo or a caption count that doesn't match the photo count, and the deployment fails. A content error can't reach visitors. One ordering function is used everywhere, the architect's rank, else the date, else alphabetical order.

The real problem was in the photos. The architect had named them for search engines, and the Webflow upload had renamed them, erasing everything. A Python script finds each photo's original by image content, with a perceptual hash compared only within the project's folder. 493 photos out of 493, with no approximation. A hand-written dictionary then turns those names into 509 readable captions.

A post-build sweep walks the 140 pages, follows 1,220 internal links, and refuses to pass if it finds a dead link or a page missing from the sitemap. The 509 photos yield 3,485 derived WebP images, in several widths, served with a one-year cache.

SEO was treated as a migration, not a detail. Canonical URLs, alt texts, structured data, a 73-address sitemap, and 29 permanent redirects, with all 63 old addresses checked one by one. DNS stayed at OVH, only two records changed, and the architect's e-mail never went down for a second.

Fifty commits in three weeks. What I take from it fits in three lines. Back up before deciding. Let the build refuse content errors. And prefer a platform you own to a platform you rent.