Home / All Skills / Design & Motion / waitlist-page
Design & Motion · nexu-io/html-anything

waitlist-page

Minimalist product pre-launch landing page featuring email capture, logo, and decorative visual layers.

L1 Basic · Source registration onlyV1 Commit-PinnedDual-pass Audit
Author nexu-ioGitHub nexu-io/html-anything ↗Stars 8827License Apache-2.0(仓库根 LICENSE 文件;GitHub API license.spdx_id = Apache-2.0)Commit 553ed98c28
Control levels describe skill capabilities and suggested control measures; they do not represent quality or safety certifications, nor do they dictate usability. Usage decisions rest entirely with users and administrators. Different agent hosts apply varying constraints; do not assume hosts provide automatic protection. Third-party skill copyrights belong to their original authors. Use at your own risk.

1How It Works & Mechanism

This skill is not an executable program, but rather an html-anything "template": a directory (SKILL.md + example.html[/example.md]) scanned and loaded from disk at runtime by loader.ts—adding a template merely means adding a directory, requiring no changes to TypeScript.

next/src/lib/templates/loader.ts
Adding a template = adding a folder. No TS code change required; the API
SKILLS_DIR is fixed at src/lib/templates/skills relative to the app's cwd; listSkills() iterates through first-level subdirectories, filters them via isValidBundledId, and reads SKILL.md per directory to parse frontmatter, ensuring that "picker metadata" and the "generation prompt body" originate from the very same file.

The frontmatter provides metadata for the selector/API (zh_name/en_name/emoji/description/category/scenario/aspect_hint/featured/recommended/tags) and is mapped to SkillMeta by fmToMeta(); the body text following the frontmatter constitutes the actual specification supplied to the model.

next/src/lib/templates/loader.ts
zhName: fm.zh_name ?? fm.name ?? id,
id is derived from the directory name; example metadata (example_id/name/format/tagline/desc/source_url) only produces SkillExampleMeta when the directory includes example.md/html, and body is intentionally omitted from the list API (code comment: "Body is excluded so we can return the entire registry in one cheap fetch").

During generation, the template body serves as the prompt body: /api/convert invokes assemblePrompt() to concatenate "global design directives + this template body + user content" into a single prompt, passes it to the host's local agent CLI, and streams the HTML output captured from stdout.

next/src/app/api/convert/route.ts
prompt = assemblePrompt({ body: skill.body, content, format });
The same route also contains editFromHtml/editFromContent branches for minimal-diff editing; across this pipeline, the template body is strictly a static string—neither evaluated nor executed.

Prepended above the template body is a block of shared pre-directives (SHARED_DESIGN_DIRECTIVES) that uniformly imposes technical and content rules across all templates—external CDN/font links commonly found in example HTML originate here (injected by the host shell, not required by the template itself).

next/src/lib/templates/shared.ts
通过 CDN 引入 Tailwind v3 Play (https://cdn.tailwindcss.com) 与所需的 Google Fonts。
The template body only governs style/layout/components and does not repeat these hard requirements; grading strictly assesses the template's own directory, and this endpoint is host-shell behavior documented in security.reason for clarity.

Output is returned as stdout text: global directives explicitly forbid the agent from using the file system, leaving disk writing to the front end—consequently, the template directory contains no scripts and has no disk-writing capability.

next/src/lib/templates/shared.ts
**禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。
The directive explicitly demands: "Do not write HTML to any .html files... the front end will capture your stdout text directly, and writing files to disk is handled by the front end"; the generated artifact is ultimately saved to task history and exported by the front end.

example.html is a pre-rendered example shipped with the bundle: /api/templates/<id>/preview returns it verbatim as text/html to an iframe (for inline selector preview), while /api/templates/<id>/example returns both example.md and example.html together.

next/src/app/api/templates/[id]/preview/route.ts
return new Response(skill.exampleHtml, {
The example is used purely for preview/documentation and is not included in the generation prompt (generation uses only the SKILL.md body); therefore, its external links do not alter the template's capability boundaries.

The body uses [Layout] to structure the landing page into a four-stage "centered single-column" flow: brand logo + tagline + large-type hero, email input and submit merged into a single pill, three small selling points, and a footer with a founder's note + social links.

next/src/lib/templates/skills/waitlist-page/SKILL.md
- 邮箱捕获 input + submit 按钮 (合并成一个 pill)
The same section includes "- Centered layout: brand logo + one-line tagline + large-type hero (clearly stating what it does)" and "- 3 small selling points below (icon + single line of text)"—the layout sequence itself forms the conversion funnel.

Decorative layers are implemented inline using SVG/CSS: gradient mesh, noise texture, and a star trail, accompanied by a micro-interaction upon successful submission (✓ + copy change).

next/src/lib/templates/skills/waitlist-page/SKILL.md
- 装饰: SVG 渐变 mesh / 噪点纹理 / 一颗星轨
This implements a "minimalist yet not empty" design philosophy: decorations are drawn entirely inline without relying on external images (consistent with the global directive to "prioritize inline CSS / SVG rendering").

The email capture in the example is a pure front-end demonstration: the submit event calls preventDefault, hides the form upon validation, and adds .visible to the success message without ever submitting to any back end.

next/src/lib/templates/skills/waitlist-page/example.html
this.style.display = 'none';
The full implementation is addEventListener('submit', …) → e.preventDefault() → checkValidity()/reportValidity() → hide form + add class to success-msg; the page contains no fetch/XHR/action, meaning this "waitlist" does not actually collect emails once the user receives the HTML.

The success state is an actual DOM structure (a paragraph with role="status" + .visible class), rather than text hallucinated or dynamically improvised by the model.

next/src/lib/templates/skills/waitlist-page/example.html
<p class="success-msg" id="success-msg" role="status">You're on the list! We'll be in touch.</p>
role="status" allows screen readers to announce the status update, pairing with the body's requirement of "micro-interaction ✓ + copy change" to provide accessible success feedback.

The CLI side features a direct keyword matching channel: skills-matcher.ts directly maps keywords in user content to this template id, granting confidence = match_count × 2 + 3 upon a hit; reaching threshold 3 triggers local rules and skips asking the model to select a template.

cli/src/skills-matcher.ts
[["等候", "waitlist", "预发布", "coming soon", "即将上线", "预约"], "waitlist-page"],
Keywords such as waitlist, coming soon, reservation, etc., match directly to this template; it serves as one of the strong-signal templates in marketing scenarios (featured: 1).

Threshold constants used by the CLI fallback matcher: content length must exceed 60 characters to enable AI summary matching, while the strong-signal threshold is 3.

cli/src/skills-matcher.ts
const MIN_CONTENT_LENGTH_FOR_AI = 60;
Additionally, SCENARIO_SIGNALS weights keywords by template scenario and fallbackMatch scores using tags/zhName/description; only when both layers fail is the agent invoked for summary matching.

The host shell renders examples and outputs using an iframe configured with sandbox="allow-scripts allow-same-origin" (allowing scripts and same-origin)—this is a product shell trade-off noted under risks and does not affect this skill's grading.

next/src/components/template-picker.tsx
sandbox="allow-scripts allow-same-origin"
Shared across preview-pane.tsx and deck-viewer.tsx; inline JS in example HTML executes only during browser previews, and the skill itself executes no scripts.

2Core Capabilities

01Centered single-column minimalist landing page (logo + tagline + large-type hero)
02Pill container combining email capture input and submit button
03Three feature highlights (icon + one-line description)
04Footer founder's note + social links
05Inline SVG decorative layer (gradient mesh / noise / star trail)
06Micro-interaction upon successful submission (✓ + copy transition, role="status")
07Decorative COMING SOON marquee bar

3External Dependencies

KindDependency / Endpoint
networkGoogle Fonts(Syne / DM Sans)
networkGoogle Fonts 静态资源域(preconnect)

4Recommended Governance & Evidence

Suggested Controls for Safe Operation
For Agent Runtime
Can be auto-loaded
For Administrators
Register source and version
Evidence & Triggers (File Paths & Excerpts)
  • SKILL.md: Consists purely of prompt directives and rule text, with no script execution or external side effects
Audit Notes: Grading target = this skill directory (next/src/lib/templates/skills/waitlist-page/), verified file by file: zero scripts, zero credential access, zero disk writes; endpoints present in the directory are strictly limited to Google Fonts (Syne / DM Sans) and Google Fonts static asset domains (preconnect), all located within the example.html "artifact sample"; the SKILL.md body only specifies layout, styling, and font family names without referencing any runtime external APIs, qualifying it as a pure prompt template = green. Host-side note (not factored into grading): the html-anything product shell uses assemblePrompt() to concatenate the body into a prompt and spawn a local agent CLI, injecting cdn.tailwindcss.com + Google Fonts requirements (next/src/lib/templates/shared.ts), and the preview iframe uses sandbox="allow-scripts allow-same-origin" (next/src/components/template-picker.tsx).

5Second-Pass Verification

  • [ok] skill 目录文件清单 — find 得 SKILL.md + example.html,无 scripts/references。
  • [ok] 外部端点仅字体(示例侧) — SKILL.md 正文无 URL;example.html 仅 fonts.googleapis.com 的 css2 link 与 fonts.gstatic.com preconnect(另有产品壳注入的 Tailwind)。
  • [ok] 「邮箱捕获」是否真的外发数据 — 示例脚本只 preventDefault + 切成功态,无 fetch/XHR/action 属性;判定为纯前端演示,已在 verdict.risks 写明「不采集数据」。
  • [ok] 成功微动效是否落地 — 存在 .success-msg 与 .success-msg.visible 两态样式 + role="status" 段落 + 脚本切换,与正文「成功提交后给一个微动效 (✓ + 文案变化)」对应。
  • [ok] 装饰图层是否为内联 SVG — 示例含 logo-svg / coil-row / grid-svg 三个内联 <svg>(含 xmlns="http://www.w3.org/2000/svg"),无外链图片。
  • [ok] CLI 匹配器路由 — cli/src/skills-matcher.ts 存在 [["等候", "waitlist", "预发布", "coming soon", "即将上线", "预约"], "waitlist-page"] 行。
  • [ok] 判级 green 自证 — 目录零脚本文件(示例内联 JS 属产物示例)、零凭证、零写盘;SKILL.md 未点名运行时接口 → green。
  • [ok] official_desc 逐字 — meta.official_desc 取自 frontmatter description 原文。

6Verdict & Scenarios

  • Single and distinct conversion path: centered single-column + single CTA (email pill), tailored to the pre-launch goal of "doing only one thing well"
  • Accessible success feedback: role="status" + text transition rather than relying solely on color changes
  • Zero external assets for decorations: three inline <svg> elements + CSS gradients provide visual polish without image dependencies
  • Example serves as a robust baseline: form validation, success states, marquee, and responsive breakpoints are fully implemented, requiring the model only to substitute brand copy
  • Best for: Ideal as a visual and structural baseline for minimalist pre-launch/early bird beta landing pages, event reservation pages, and waitlist pages for new products; also suitable as a minimalist control variant for landing page experiments.
    Not for: Not suitable for use as a functional, out-of-the-box email collection system (lacks a back end); not suitable for content-heavy product marketing sites (the single CTA structure cannot accommodate feature matrices); not suitable for marketing scenarios requiring multi-form or multi-field lead capture.
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload waitlist-page.tar.gz
    sha256: f44cc710d83cf149…
    Option B · Copy Guide for Agent
    install.json
    Agents automatically download and verify mirrors from this JSON guide.
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 553ed98c28.