MotirBuilding in public
MOTIR · moooon
onMotir
You’re viewing a public project. Anyone can view it — no account needed. Sign in to submit, upvote, or comment on requests.View-only — you can’t edit work items
MOTIR-9

1.0.6 Create `moooon-B-V/nextjs-prisma-vercel-starter` (MIT, GitHub Template)

Done
Description

Estimate: 15m · Depends on: 1.0.5

Snapshot motir-core at the end of Story 1.0 into a brand-new public GitHub Template repo at moooon-B-V/nextjs-prisma-vercel-starter. Strip Motir-specific wording (wordmark, README references to motir-ai and Motir-the-product, planning-doc links) and re-license under MIT (not GPL-3.0 — see "License" below). Mark the new repo as a GitHub Template via is_template: true so downstream users see the "Use this template" button.

Why now (last Subtask of Story 1.0): at this commit, motir-core contains exactly the generic Next.js + Prisma + Tailwind + ESLint/Prettier + Vercel + Neon scaffolding — and nothing Motir-specific (no User model yet, no workspace tables, no work-item schema). Forking now means minimal stripping. If we waited until Stories 1.1 / 1.2 / 1.4 land, we'd have to surgically remove Motir-specific code from the starter, which is harder and easier to get wrong. This is a semantic-ordering constraint: 1.0.6 must close before Subtask 1.1.3 (User schema) merges to motir-core's main.

Mechanism: manual copy + new repo + mark as Template (NOT a GitHub fork). GitHub Templates create a new repo with a clean single-commit history when downstream users click "Use this template" — no inherited Motir git history, no "forked from" badge. This is what create-t3-app, shadcn/ui, and Vercel's own templates do. A raw fork would carry our Story 1.0 planning commits forever and make the template look like "a fork of Motir" to anyone browsing the repo.

License: MIT, not GPL-3.0. Templates ship under MIT because GPL's copyleft requirement repels would-be forkers (they'd have to GPL their derivative work). MIT maximizes adoption. motir-core stays GPL-3.0; the starter is independent and MIT-licensed.

Value proposition (for the README pitch): the starter's differentiator isn't novel scaffolding — it's discovered gotchas baked in. Specifically: (a) Vercel build-cache stales out Prisma's generated client → fixed via postinstall: prisma generate; (b) Neon-Vercel integration's pooled DATABASE_URL breaks Prisma migrations → fixed via DATABASE_URL_UNPOOLED in prisma.config.ts; (c) Prisma 7's config loads on every CLI command including generate → fixed via conditional datasource block; (d) pnpm 11 requires Node ≥22.13. The README should sell these as the value prop, not novel features.

What you'll do:

  • Create the empty public repo: gh repo create moooon-B-V/nextjs-prisma-vercel-starter --public
  • Locally: copy the entire motir-core tree (sans .git, node_modules, .next) into a new sibling directory.
  • git init, set the remote to the new repo, single initial commit.
  • Apply the strip/genericize edits (see Acceptance criteria for the full list).
  • Push to main as the initial commit. Verify all four quality gates pass.
  • Mark as template: gh repo edit moooon-B-V/nextjs-prisma-vercel-starter --template
  • Smoke-test: click "Use this template" on the GitHub repo page, create a throwaway test repo, clone it, run pnpm install && ./scripts/db-up.sh && pnpm dev, confirm it works end-to-end, then delete the throwaway repo.

Acceptance criteria

Repo + GitHub setup:

  • GitHub repo moooon-B-V/nextjs-prisma-vercel-starter exists, public, MIT-licensed.
  • Repo is marked as a GitHub Template (is_template: true) — the "Use this template" button is visible on the repo page.
  • Single initial commit; no inherited Motir git history.

License + branding strip:

  • LICENSE is the canonical MIT text (e.g., opensource.org/license/mit), copyright "© 2026 moooon B.V." or similar.
  • package.json's "license": "MIT", "name": "nextjs-prisma-vercel-starter", generic "description" (no Motir mention).
  • app/page.tsx is a generic placeholder (e.g., "Next.js + Prisma starter"); NO "Motir" wordmark.
  • app/layout.tsx metadata uses generic title and description (no Motir mention).
  • README does NOT reference Motir, motir-ai, motir-core, vision.html, feasibility.html, notes.html, or any planning docs.
  • README's value proposition leads with the discovered gotchas (postinstall fix, DATABASE_URL_UNPOOLED, conditional Prisma config, Node 22+) — that's what makes this template differentiated from create-next-app defaults.

DB naming convention:

  • DB user/password/name in docker-compose.yml, .env.example, scripts/db-up.sh, and .github/workflows/ci.yml all use nextjs_prisma_vercel_starter (snake_case for Postgres identifier rules).
  • Docker container name is nextjs-prisma-vercel-starter-postgres (hyphens fine for Docker).
  • Volume name is nextjs-prisma-vercel-starter-pg-data.

Schema:

  • prisma/schema.prisma: drop the "Motir — motir-core schema" comment; keep the placeholder model but rename MigrationMarkerMarker (or remove entirely if you prefer; flag the trade-off in PR description). Update the migration file accordingly.

Quality gates:

  • All four quality gates pass on the starter repo: pnpm lint, pnpm format:check, pnpm typecheck, pnpm build.
  • GitHub Actions CI runs on the initial commit and goes green (3 jobs: lint, typecheck, build with Postgres service container).

End-to-end smoke test (the load-bearing AC):

  • Click "Use this template" in the GitHub UI; create a throwaway test repo (e.g., moooon-B-V/_starter-smoke-test); clone it; run pnpm install && ./scripts/db-up.sh && pnpm dev; confirm localhost:3000 renders the generic placeholder; confirm pnpm prisma migrate dev --name init works; delete the throwaway repo.

Reference to planning docs:

  • Captures the lesson from notes.html mistake #20: future Motir-planned projects on this stack default to "Use this template" rather than re-deriving the bootstrap from scratch.

Context refs

  • notes.html mistake #20 — the lesson driving this Subtask
  • motir-core's current tree at the end of Story 1.0 — the source to fork from
  • GitHub's "Creating a template repository" docs
  • create-t3-app — reference starter for comparison (README shape, scope of what goes in)
Status
Done
Type
Sub-task