Skip to main content

test-email-sdk-docs

Launch, preview, or verify the Email SDK docs and marketing site in apps/fumadocs (TanStack Start + Fumadocs). Use for docs content, layout, blog, OG image, or docs build changes, and whenever a preview link is needed.

Source facts

Repository
opencoredev/email-sdk
Last source activity
October 5, 2026 at 17:53
Detected SKILL.md language
English
Stars
499
Forks
26

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
test-email-sdk-docs
description
Launch, preview, or verify the Email SDK docs and marketing site in apps/fumadocs (TanStack Start + Fumadocs). Use for docs content, layout, blog, OG image, or docs build changes, and whenever a preview link is needed.
# Test the Email SDK docs site The site lives in `apps/fumadocs` and deploys to Vercel. Most pages are prerendered. `/blog`, `/blog/$slug`, and `/og/blog/*` render on request from Notra (`src/lib/notra-runtime.ts`). ## Static checks From `apps/fumadocs`: ```bash bun run types:check # fumadocs-mdx + tsc bun run build # registry check, module-identity check, Vite build, client-bundle check ``` Run both for any docs-site change. A green build does not prove pages hydrate. The module-identity check exists because a duplicated `fumadocs-core` once built cleanly and then crashed every page in production. From the repo root, `bun run docs:check` also verifies adapter support tables and CLI docs consistency. Without `NOTRA_API_KEY` (read from `apps/fumadocs/.env.local`), the Notra fetch is skipped. Blog routes then show only the local posts from `localBlogPosts`, which is expected. ## Launch 1. Check for a reusable server first: `ss -ltnp | grep -E ':4000|vite'`. Reuse one only if its working directory is this checkout (`readlink /proc/<pid>/cwd`). Never stop a server another worktree owns. 2. For local-only checks: `bun run dev` (port 4000). If 4000 is taken, pass `--port <free port>`. 3. For a link Leo can open on another device, bind to the Tailscale IPv4 address instead of `0.0.0.0`: ```bash HOST=$(tailscale ip -4); bun run dev --host "$HOST" --port <free port> ``` Then confirm `curl -sI http://$HOST:<port>/docs` returns 200 from the server before sharing the link. Say which devices were actually tested. Start it as a tracked background process, wait for Vite's `Local:` or `Network:` line, and stop only the process you started. If `dev` dies with `EMFILE: too many open files, watch`, the host has run out of inotify instances, which other worktrees share. Don't change sysctl settings. Instead, serve the production build, which needs no watchers: `bun run build`, then `bunx vite preview --host "$HOST" --port <free port>`. You get no hot reload, so rebuild after each edit. This preview serves `.md` routes as `application/octet-stream`; production sets the markdown type through Vercel. ## Drive and verify Use `agent-browser` with a named headless session, for example `agent-browser --session email-sdk-docs ...`. Driving a browser needs that permission in the current task. Without it, finish the static checks and report the browser proof as NOT CHECKED. For each change: - Load the changed route and one neighboring route. Confirm the page hydrated (sidebar and search respond) and the console has no `FrameworkProvider` or hydration errors. - Check desktop (1280px) and mobile (390px) widths for any layout change. - For content changes, confirm the raw markdown endpoint (`/docs/<path>.md`) serves the same content. Agents consume that endpoint. - Capture screenshots as evidence. ## Cleanup Kill only the dev server PID you started and close your browser session. Leave `.output/` and other build artifacts alone unless you created them for this task.
View on GitHub