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:
parent
80042a0672
commit
34ae85b2b5
7 changed files with 51 additions and 22 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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%;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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`).
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
title: "Porting KiCad's Graphics to WebGL with Claude"
|
||||||
|
description: "Coming soon."
|
||||||
|
pubDate: 2026-06-07
|
||||||
|
---
|
||||||
|
|
||||||
|
Coming soon.
|
||||||
|
|
@ -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">
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue