Five Things We Learned Rebuilding the Zyntel Website with Astro
We moved from a slow, hard-to-maintain marketing site to an Astro monorepo. The technical lessons were interesting. The workflow lessons were more important.
We rebuilt the Zyntel website in June 2026. The old site was built quickly, used a heavy JavaScript framework for a mostly static page, and was painful to update. Here's what we learned doing it properly.
1. Astro's island architecture is genuinely the right mental model
The idea that most of a marketing site is static HTML, with interactive "islands" only where needed, matches how marketing sites actually work. Our hero animation, sticky nav, and cookie consent are islands. Everything else — the copy, the service descriptions, the team cards — is plain HTML rendered at build time. Lighthouse scores went from the 50s to the 90s without heroic optimisation effort.
2. GSAP + ViewTransitions needs careful lifecycle management
Astro's ViewTransitions gives you client-side page navigation with cross-fade transitions. GSAP ScrollTrigger sets up observers and timeline instances that need to be killed when navigating away. If you don't clean up on astro:before-swap, you end up with stale references causing content to disappear on the next page load. We hit this and fixed it — something to watch for.
3. Sanity CMS for content is overkill for a small site, perfect for a growing one
At our current scale, we could write blog posts as MDX files. But we chose Sanity because it separates content management from code deployments. Marketing doesn't need a developer to publish a post. The schema flexibility also means we can add structured data (products, case studies, team bios) without touching Astro files. The investment pays off quickly once more than one person is creating content.
4. Dark-first design requires more CSS discipline
We switched from a healthcare-focused dark theme to a light-first agency design mid-project. Every component had to be checked against both themes. CSS custom properties with clear naming conventions (--ag-bg, --ag-text, --ag-muted) make this manageable. Scattered inline colours do not.
5. Deploy on Railway, not a VPS you maintain yourself
The previous site ran on a DigitalOcean droplet. Nginx config, SSL renewals, uptime monitoring — all manual. Railway gives us automatic deploys from the staging branch, zero-downtime deployments, and built-in metrics for a cost that's a fraction of the engineering time we were spending on ops. For a small team, managed platforms are the right call.