No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A production-grade template for launching niche job boards — one fork per board, shared engine, per-niche configuration packs. Extracted from a live, SEO-hardened job board for psychiatric nurse practitioners (which remains the reference "first board" throughout the code and content).
Engine (shared across every board, niche-agnostic):
Per-board variance is confined to declared surfaces:
| Surface | What lives there |
|---|---|
config/brand.ts | Identity: name, niche descriptors, domain, legal entity (incl. ToS venue + Stripe descriptor), inboxes, storage origin, socials |
config/niche/relevance.ts | Every keyword list the relevance engine consumes (the quality-critical pack) |
config/niche/salary.ts | Every salary validation/clamp band in the pipeline |
config/niche/copy.ts | Email chrome, OG headlines/claims, hashtags, wordmark |
config/niche/content-map.ts | Blog slug maps that code links to (incl. the state-guide series prefix) |
config/niche/stats.ts | Marketing claims + placeholder/testimonial data (re-author per board) |
config/niche/credentials.ts | Credential taxonomy (certs, licenses, degrees, specialties) |
config/niche/regulatory.ts | Per-state professional-regulation surface (seam) |
lib/pseo/taxonomy-registry.ts | The category taxonomy (slugs, axes, eligibility) — drift-tested against route folders |
lib/aggregators/{search-terms,tenants}/ | Per-source queries and curated employer lists |
config/cron-schedule.ts | Declarative cron schedule → generates vercel.json |
Guardrail tests keep the boundary honest: taxonomy ⇄ route-folder drift, migrations ⇄ schema column coverage, cron schedule ⇄ vercel.json, and a brand-leak ratchet that fails CI when production code hardcodes brand strings outside the packs.
npm install # postinstall runs prisma generate (needs DIRECT_URL in .env)
cp .env.example .env # fill in at least DATABASE_URL/DIRECT_URL, Supabase, CRON_SECRET
npx prisma migrate deploy # fresh databases bootstrap end-to-end
npm run dev
Verification:
npm run type-check
npm test # vitest — unit + drift guards + ratchet
npm run test:e2e # Playwright (needs a running app)
The complete operational sequence lives in docs/pilot-fork-runbook.md.
The short version:
upstream for engine updates).config/brand.ts and every config/niche/* pack; define your
taxonomy in lib/pseo/taxonomy-registry.ts and create the matching
app/jobs/<slug>/ folders (drift test enforces agreement).config/cron-schedule.ts, then
npm run crons:generate.npm run fork:preflight — it must
exit 0 (env completeness, config coherence, leftover-brand scan, pack
integrity).| Doc | Purpose |
|---|---|
docs/templatization-plan.md | Architecture, phase history, deliberate deferrals |
docs/fork-checklist.md | The per-fork change list |
docs/pilot-fork-runbook.md | End-to-end launch sequence for a new board |
.env.example | Every environment variable, annotated |
scripts/ operator tools) — see the deferrals section of
docs/templatization-plan.md.prisma migrate deploy and
static generation query the database; email modules need RESEND_API_KEY).MIT