Ja zu mir: photography studio site on Astro
Website for a photography studio in Germany: 18 pages on Astro, with no server, no database and no admin interface. The build drops finished files, and the site address is nowhere in the code, it comes from two environment variables. Moving to the client’s own domain therefore takes no code change at all.
Before and after

Features
- 18 pages; shoots and client testimonials live as content (MDX and JSON), not as markup
- Address never hard-wired: canonical, og:image, JSON-LD, sitemap, robots.txt and llms.txt all switch on two variables
- robots.txt and llms.txt are generated at build time, not left lying around as static files
- Photos optimised during the build, fonts served locally, no counters and no cookies at all
- The cookie bar exposes a working consent hook. Analytics can be attached so that consent actually takes effect
- Smooth scrolling and motion through Lenis and GSAP, custom column logic for the galleries
Result
- 160 commits, all by the author; build from a clean clone verified: 193 files, 18 pages
- Test run with eight testers in parallel across six screen widths, from 360 to 1920
- Found and fixed in the process: og:image and JSON-LD lost the sub-path and pointed at the root of someone else’s site; the heading Datenschutzerklärung was clipped by 66 px at 360
- Legal texts rewritten to match what the site actually does, with a list of what to put in front of a lawyer
- The contact form is deliberately switched off: the key field held a placeholder. Enquiries reached nobody, yet the data still went to an outside server
Stack: Astro 5, Tailwind, TypeScript, MDX, GSAP, Lenis, sharp, GitHub Actions