feat(site): 🛬 PCBJam landing page — waitlist, sections, Tailwind

Replace the placeholder homepage with the PCBJam waitlist conversion page
(13 sections from the copy spec), shared chrome, and a real email-capture
backend, keeping the site zero-runtime-JS / zero-web-font.

- Tailwind v4 via @tailwindcss/postcss (the Vite plugin breaks on Astro 6
  rolldown-vite); Preflight skipped; brand tokens in :root + @theme inline.
- Waitlist: /api/waitlist serverless route (prerender=false) + Resend, with
  dual JSON/303 responses; WaitlistForm progressive enhancement bound on
  astro:page-load (survives ClientRouter swaps); honeypot + validation.
- New components (Icon, Placeholder, DemoVideo, SectionBand, Chip, EECredit,
  StatBar, Pillar, Step, CheckItem, WaitlistForm) + 13 section components.
- Redesigned Header (sticky, mobile menu, CTA) + 4-col Footer (KiCad
  attribution); BaseLayout gains full-bleed mode + OG/canonical meta.
- Assets scaffolded with marked placeholders; EE/generic/client SVGs copied.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Viktor Vaczi 2026-06-07 14:59:13 +02:00
commit 7f9dbdd068
61 changed files with 3459 additions and 116 deletions

View file

@ -0,0 +1,44 @@
---
import SectionBand from '../components/SectionBand.astro';
import Step from '../components/Step.astro';
---
<SectionBand id="how-it-works" labelledby="hiw-h2">
<div class="section-head">
<h2 id="hiw-h2">From link to layout in three moves.</h2>
</div>
<div class="steps">
<Step n={1} title="Open a board." icon="icons/idea.svg">
Paste a link, drag in a <code>.kicad_pcb</code>, or pull from GitHub. It opens in seconds —
no install, no account wall to <em>look</em>.
</Step>
<Step n={2} title="Start a jam." icon="icons/prototype.svg">
Share the URL. Teammates join with live cursors and presence. Everyone sees the same
board update in real time.
</Step>
<Step n={3} title="Design, route & export — together." icon="icons/product.svg">
Schematic capture, PCB layout, DRC/ERC, 3D, BOM, and Gerbers — the full flow, then hand
off to any fab. Your call.
</Step>
</div>
</SectionBand>
<style>
.steps {
display: grid;
gap: 1.5rem;
grid-template-columns: repeat(3, 1fr);
}
.steps :global(code) {
font-family: var(--font-mono);
font-size: 0.9em;
background: color-mix(in srgb, var(--bg-soft) 70%, transparent);
padding: 0.05rem 0.3rem;
border-radius: var(--radius-sm);
}
@media (max-width: 760px) {
.steps {
grid-template-columns: 1fr;
}
}
</style>