cp .env.example .env
pnpm installpnpm run devTo enable HMR:
pnpm run hmrpnpm run previewPreview builds the app before starting the production server.
- Production deploys from
main. - Staging deploys from the
stagetag via:
pnpm run push:stage- Create a branch from the latest target branch.
- Push your branch and open a PR.
- Run
pnpm run buildbefore shipping a PR. - See
AGENTS.mdfor repo-specific rules (routes, assets, tests). Remix framework patterns live under.agents/skills/(start withremix-overview).
app/— Remix 3 site:routes.ts(URL contract),router.ts(Vite SSR entry, middleware, route wiring),actions/,ui/,data/, etc.server.ts(repo root) — Node HTTP server in production; serves the built app frombuild/server/.data/— Blog posts and author metadata (separate fromapp/data/, which holds app-layer server modules such as blog queries).
- The
/newsletterarchive renders issues from the privateremix-run/newsletterGitHub repository at runtime via a single tarball fetch. - Because the repo is currently private, set
NEWSLETTER_GITHUB_TOKEN(see.env.example) locally and in production to enable archive rendering. Without it,/newsletterreturns a 503 when no cached snapshot exists. - Issue directories are strict integers (
newsletter-<N>); markdown filenames carry the UTC publication date (YYYY-MM-DD-remix-newsletter-N.md).
- Add a markdown file at
data/posts/{slug}.md. - Keep post author names aligned with
data/authors.yml. - Put post images under
public/blog-images/posts/{slug}/. - Put featured header images under
public/blog-images/headers/. - Use relative blog links like
[Title](post-slug)(not/blog/post-slug).