Static marketing site, MDX blog, and careers pages for MicroAlchemy. Astro generates complete HTML for every public route; React is limited to the circuit animation and intake forms that require browser interaction.
- Static homepage with an animated circuit-board background.
- Astro content collections for blog posts and job descriptions.
- Per-route titles, descriptions, canonicals, social metadata, and crawl directives.
- Organization, BlogPosting, and JobPosting structured data.
- Generated RSS and XML sitemaps, plus a public robots file.
- Applicant, customer, and investor intake forms backed by a Cloudflare Worker and Twenty CRM.
- A build-time SEO output check covering every public route.
npm install
npm run devBuild and validate the static site:
npm run build
npm run preview
npm run check
npm run intake:buildNode 24 or newer is required.
The Open Graph image is generated from assets/social-card.typ on an exact
1200×630 canvas. Install Typst 0.15 or newer, then regenerate it with:
npm run social-cardThe command writes public/social-card.png. Typst lays out an exact vector
canvas and converts the lettering to glyph paths; Sharp performs the final PNG
rasterization. The logo keeps its native aspect ratio, and repeated renders do
not depend on browser layout or local ImageMagick defaults.
- Homepage copy, cards, partners, and team members live in
src/components/CircuitBoardAnimation.tsx. - Blog posts live in
src/blog/*.mdxand are validated by theblogcollection insrc/content.config.ts. - Job posts live in
src/jobs/*.mdxand are validated by thejobscollection insrc/content.config.ts. - Route metadata and JSON-LD are generated by the Astro pages under
src/pages. - Copy and fact checks that require a founder decision are listed in
docs/seo-copy-review.md.
The GitHub Actions Pages workflow builds dist and publishes it to the gh-pages branch. Configure these public repository variables for the intake forms:
PUBLIC_INTAKE_API_URLPUBLIC_TURNSTILE_SITE_KEY
See docs/intake-deployment.md and docs/twenty-intake-setup.md for the Cloudflare and CRM setup.