fix(site): mobile waitlist input height, "Demo coming soon" panel, blog cleanup

- WaitlistForm: reset the input's flex when the form stacks — the 16rem
  flex-basis was applying to the height in column layout (256px-tall input).
- DemoVideo: add a comingSoon mode that shows a big "Demo coming soon" panel
  instead of the internal PRODUCE placeholder; enable it in the hero and the
  multiplayer section.
- Blog: retitle the post to "Porting KiCad's Graphics to WebGL with Claude"
  (clean slug), set body/description to "Coming soon.", and drop the
  placeholder text from the blog index.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Viktor Vaczi 2026-06-07 18:15:02 +02:00
commit 34ae85b2b5
7 changed files with 51 additions and 22 deletions

View file

@ -18,10 +18,21 @@ interface Props {
poster?: string; poster?: string;
caption?: string; caption?: string;
ratio?: string; // default 16/9 ratio?: string; // default 16/9
/** When true and no video yet, show a big "Demo coming soon" panel instead of
* the internal PRODUCE placeholder. */
comingSoon?: boolean;
class?: string; class?: string;
} }
const { mp4, webm, poster, caption, ratio = '16 / 9', class: cls = '' } = Astro.props; const {
mp4,
webm,
poster,
caption,
ratio = '16 / 9',
comingSoon = false,
class: cls = '',
} = Astro.props;
const hasVideo = Boolean(mp4 || webm); const hasVideo = Boolean(mp4 || webm);
--- ---
@ -45,6 +56,10 @@ const hasVideo = Boolean(mp4 || webm);
<Icon name="icons/play.svg" size="3.5rem" alt="" /> <Icon name="icons/play.svg" size="3.5rem" alt="" />
</button> </button>
</div> </div>
) : comingSoon ? (
<div class="demo-soon bp-grid" style={`aspect-ratio:${ratio};`}>
<span class="demo-soon-text">Demo coming soon</span>
</div>
) : ( ) : (
<Placeholder <Placeholder
label="PRODUCE: multiplayer demo loop — 2–3 live cursors, one board (§4b.2)" label="PRODUCE: multiplayer demo loop — 2–3 live cursors, one board (§4b.2)"
@ -87,6 +102,22 @@ const hasVideo = Boolean(mp4 || webm);
.demo-play[hidden] { .demo-play[hidden] {
display: none; display: none;
} }
.demo-soon {
display: grid;
place-items: center;
width: 100%;
padding: 1.5rem;
text-align: center;
border: 1px solid var(--border);
border-radius: var(--radius-lg);
background-color: var(--bg-soft);
}
.demo-soon-text {
font-size: clamp(1.6rem, 5.5vw, 3rem);
font-weight: 800;
letter-spacing: -0.01em;
color: var(--fg);
}
.demo-caption { .demo-caption {
margin-top: 0.75rem; margin-top: 0.75rem;
font-family: var(--font-mono); font-family: var(--font-mono);

View file

@ -78,6 +78,11 @@ const hpId = `wl-hp-${source}`;
flex-direction: column; flex-direction: column;
align-items: stretch; align-items: stretch;
} }
/* In a column the 16rem flex-basis would apply to the HEIGHT, ballooning the
input — reset it to content height when stacked. */
.layout-stack .wl-form input[type='email'] {
flex: 0 0 auto;
}
.wl-form input[type='email'] { .wl-form input[type='email'] {
flex: 1 1 16rem; flex: 1 1 16rem;
min-width: 0; min-width: 0;
@ -126,6 +131,10 @@ const hpId = `wl-hp-${source}`;
.wl-form { .wl-form {
flex-direction: column; flex-direction: column;
} }
/* Same column flex-basis fix as above: keep the input at content height. */
.wl-form input[type='email'] {
flex: 0 0 auto;
}
.wl-form .btn { .wl-form .btn {
width: 100%; width: 100%;
} }

View file

@ -1,19 +0,0 @@
---
title: "Hello World"
description: "First placeholder post for the KiCad WebAssembly blog."
pubDate: 2026-06-07
---
This is a placeholder blog post. Replace this body with real content.
## A heading
Markdown content is rendered to static HTML at build time, so this page ships
**zero JavaScript** to the browser.
- Bullet one
- Bullet two
- Bullet three
To add another post, drop a new `.md` file in `src/content/blog/` with the same
frontmatter fields (`title`, `description`, `pubDate`).

View file

@ -0,0 +1,7 @@
---
title: "Porting KiCad's Graphics to WebGL with Claude"
description: "Coming soon."
pubDate: 2026-06-07
---
Coming soon.

View file

@ -13,9 +13,8 @@ const dateFmt = new Intl.DateTimeFormat('en-US', {
}); });
--- ---
<BaseLayout title="Blog" description="Placeholder blog index."> <BaseLayout title="Blog" description="The PCBJam engineering blog — WebAssembly, real-time collaboration, and KiCad internals.">
<h1>Blog</h1> <h1>Blog</h1>
<p class="muted">Placeholder blog index. Posts live in src/content/blog/.</p>
<ul class="post-list"> <ul class="post-list">
{ {

View file

@ -34,6 +34,7 @@ import Icon from '../components/Icon.astro';
{/* TODO(assets): swap for hero board still w/ presence cursors (§4b.3) or the {/* TODO(assets): swap for hero board still w/ presence cursors (§4b.3) or the
multiplayer demo loop (§4b.2) once produced. */} multiplayer demo loop (§4b.2) once produced. */}
<DemoVideo <DemoVideo
comingSoon
caption="2 editors · live cursors · one board.kicad_pcb · no merge step" caption="2 editors · live cursors · one board.kicad_pcb · no merge step"
/> />
</div> </div>

View file

@ -36,6 +36,7 @@ const subpoints = [
<DemoVideo <DemoVideo
class="mp-demo" class="mp-demo"
comingSoon
caption="2 editors · live cursors · one board.kicad_pcb · no merge step" caption="2 editors · live cursors · one board.kicad_pcb · no merge step"
/> />