Een desktop-first fullstack webapplicatie voor solo developers en kleine Scrum Teams die meerdere softwareprojecten parallel beheren. De app organiseert werk hiërarchisch (product → PBI → story → taak), biedt gesplitste planningsschermen met drag-and-drop, en integreert met Claude Code via een REST API en MCP https://scrum4-me.vercel.app
  • TypeScript 71.1%
  • Swift 23.6%
  • JavaScript 2.7%
  • PLpgSQL 2.1%
  • Shell 0.3%
  • Other 0.2%
Find a file
Janpeter Visser 0ecd69d04a
Some checks are pending
CI / Lint, Typecheck, Test & Build (push) Waiting to run
CI / DB Access Policy Gate (push) Waiting to run
CI / Queue Dispatch Guard Gate (push) Waiting to run
CI / DB Access Production Sentinel (push) Waiting to run
CI / Detect deploy-relevant changes (push) Blocked by required conditions
CI / Deploy Preview (PR) (push) Blocked by required conditions
CI / Deploy Production (main) (push) Blocked by required conditions
CI / Deploy Manual (workflow_dispatch) (push) Waiting to run
Merge pull request 'ci: Postgres-poort van de ci-job niet meer op de runner-host publiceren' (#305) from ci/drop-ci-postgres-host-port into main
Reviewed-on: #305
2026-10-05 10:33:05 +02:00
.agents/skills/shadcn-scrum4me docs(ST-1553): record rebase provenance 2026-08-23 19:22:41 +02:00
.claude feat(ST-1553): enforce shadcn source proof 2026-08-23 19:20:59 +02:00
.github ci: publiceer de Postgres-poort van de ci-job niet meer op de runner-host 2026-10-05 10:11:24 +02:00
.husky docs: AI-optimized docs restructure (Phases 1–8) (#61) 2026-05-03 03:21:59 +02:00
.superpowers/sdd docs(review): append code-allocation follow-up 2026-07-11 17:41:32 +02:00
__tests__ feat(jobs): toon invoer incl. cache write in het gebruikspaneel 2026-10-05 00:36:43 +02:00
actions fix(ideas): herstel 64.000-tekenlimiet voor beschrijving in web 2026-10-01 19:48:29 +02:00
app feat(T-2003): referentie-inhoud als ingeklapte accordeons 2026-10-04 11:57:53 +02:00
components feat(jobs): toon invoer incl. cache write in het gebruikspaneel 2026-10-05 00:36:43 +02:00
docs docs(plan): IDEA-235 plan revisie 3 na planronde 2 2026-10-05 00:42:49 +02:00
hooks Sprint: Jobs scherm (#209) 2026-05-15 01:25:20 +02:00
ios build(ST-1627): upload Vis-build 27 naar TestFlight 2026-10-03 23:09:03 +02:00
lib feat(T-2004): webbeelden uit een demo-dataset en scripts om ze opnieuw te maken 2026-10-04 12:25:40 +02:00
prisma feat(notes): migratie add_notes met defaults (IDEA-226) 2026-09-28 05:51:11 +02:00
public feat(T-2004): webbeelden uit een demo-dataset en scripts om ze opnieuw te maken 2026-10-04 12:25:40 +02:00
scripts feat(T-2004): webbeelden uit een demo-dataset en scripts om ze opnieuw te maken 2026-10-04 12:25:40 +02:00
stores feat(ST-1600): persist Ideas list preferences in order 2026-10-01 03:18:06 +02:00
test-fixtures fix(T-1775): complete database policy capture and migration gates 2026-09-11 12:00:09 +02:00
tests feat(IDEA-213): fence managed dispatch storage and legacy writers 2026-09-15 09:31:07 +02:00
vendor chore(notes): pin scrum4me-shared op merge-SHA 5f9afaa (PR #65) 2026-09-28 10:49:02 +02:00
.env.example feat(idea-chat): IDEA_CHAT_LOCAL_PRODUCT_IDS routeert chat-beurten naar de local_llm-worker 2026-09-26 05:46:18 +02:00
.gitattributes chore: .gitattributes toevoegen voor consistente LF regeleindes 2026-04-24 23:06:21 +02:00
.gitignore fix(hook): M34 review-fix — gitignore het s4m-hub-rules.json register + lockfile 2026-08-14 10:45:13 +02:00
.gitmodules chore: add scrum4me-shared submodule + @shared path alias 2026-05-26 13:56:09 +02:00
AGENTS.md docs: AGENTS.md-stub in lijn met Forgejo-hardstop uit CLAUDE.md 2026-08-14 21:42:44 +02:00
CHANGELOG.md docs(cleanup): archief verouderde plannen, backlog en root-duplicaten (#191) 2026-05-11 19:46:00 +02:00
CLAUDE.md docs(proxy): routes matchen per padsegment (T-1971) 2026-10-03 14:04:01 +02:00
components.json feat: ST-001–ST-005 foundation — scaffolding, Prisma, schema, seed, env 2026-04-22 21:04:48 +02:00
eslint.config.mjs feat(schema): PR_REVIEW migratie + shared-bump (Phase 2 codex PR-review) 2026-06-10 10:19:36 +02:00
instrumentation-client.ts feat(ops): Sentry error-monitoring (v1-readiness item 2) 2026-05-04 13:24:19 +02:00
instrumentation.ts feat(server): procesbreed shutdown-signaal dat SSE-streams sluit (ISS-13) 2026-09-25 21:47:11 +02:00
next.config.ts feat(ST-1546): add about dialog build metadata 2026-08-21 11:32:19 +02:00
package-lock.json fix(ST-1600): align table adapter with reviewed contract 2026-10-01 05:45:07 +02:00
package.json package.json bijwerken 2026-10-03 21:12:03 +02:00
postcss.config.mjs Initial commit from Create Next App 2026-04-22 20:25:19 +02:00
prisma.config.ts fix: url en directUrl uit schema.prisma verplaatst naar prisma.config.ts (Prisma v7) 2026-04-24 14:26:44 +02:00
proxy.ts fix(proxy): routebescherming matcht per padsegment (T-1971) 2026-10-03 14:03:38 +02:00
README.md feat(landing): update platform positioning 2026-05-31 15:44:59 +02:00
sentry.edge.config.ts feat(ops): Sentry error-monitoring (v1-readiness item 2) 2026-05-04 13:24:19 +02:00
sentry.server.config.ts feat(ops): Sentry error-monitoring (v1-readiness item 2) 2026-05-04 13:24:19 +02:00
tsconfig.json chore(IDEA-213): pin shared 5209199 and regenerate schema 2026-09-20 16:53:40 +02:00
vercel.json feat(T-553): vercel.json git.deploymentEnabled=false + GitHub-labels 2026-05-05 23:31:34 +02:00
vitest.config.ts feat(IDEA-213): fence managed dispatch storage and legacy writers 2026-09-15 09:31:07 +02:00
vitest.db-access.config.ts feat(T-1775): converge contract privileges with retry-safe database gates 2026-09-10 13:13:18 +02:00
vitest.hub-watch.config.ts fix(ci): Hub Watch-gate serieel draaien in plaats van parallel 2026-09-24 12:34:56 +02:00
vitest.queue-dispatch.config.ts feat(IDEA-213): fence managed dispatch storage and legacy writers 2026-09-15 09:31:07 +02:00

Scrum4Me

From idea to visible results.

Scrum4Me turns product intent into a verifiable delivery pipeline. Ideas become plans, tasks, agent runs, tests, commits and pull requests, all within the standards and guidelines defined for each project.

Scrum4Me is a desktop-first fullstack web application for solo developers and small Scrum teams that manage multiple software projects in parallel. It combines lightweight Scrum planning with an agent-driven execution flow that stays traceable from the first idea to the final pull request.

What It Does

  • Captures ideas and turns them into structured product work.
  • Lets Claude challenge ideas through a Grill phase and generate implementation plans.
  • Materializes approved plans into PBIs, stories and tasks.
  • Supports product backlogs, active sprints, Sprint Board and Solo Panel workflows.
  • Runs implementation jobs through a queue, MCP tool layer and Docker runner.
  • Stores implementation logs, test results, questions, commits and PR links per story.
  • Keeps source code, branches and pull requests in your own git provider.
  • Provides REST endpoints and MCP tools for controlled integrations.

Platform Overview

Scrum4Me is not a single planning screen. It is a small platform with clear boundaries between planning, execution, tools, runtime and shared schema logic.

Component Role Responsibility
Scrum4Me Planning app Products, PBIs, stories, tasks, sprints, ideas, product docs, question channel and progress views
scrum4me-workers Execution console Job queue, worker registry, API tokens, job config, repo access and worker health
scrum4me-mcp Tool and claim layer Atomic job claiming, context loading, prompts, logs, status updates, questions and verification gates
scrum4me-docker Headless runtime Daemon loop, per-job worktree, Claude Code process and runtime logs
scrum4me-shared Shared kernel Canonical Prisma schema, status mappings, job config and realtime payload types
Forgejo / git provider Source control Repositories, branches, commits and pull requests

Postgres is the shared queue and metadata layer. Source code remains in git and in temporary worktrees created by the runner.

Delivery Workflow

  1. A user captures or materializes work in Scrum4Me.
  2. Product work is represented as a PBI, stories and tasks.
  3. Clicking Execute creates a ClaudeJob in Postgres.
  4. scrum4me-docker asks scrum4me-mcp for the next job.
  5. scrum4me-mcp claims the job atomically and provides context, task plan, repo config, allowed tools and prompt.
  6. The runner starts one Claude Code invocation for that exact job.
  7. Claude writes implementation logs, test results, questions and status changes through MCP tools.
  8. Verification, terminal status, commits and PR metadata are recorded back into Scrum4Me.
  9. Scrum4Me and the workers app receive realtime updates through Postgres NOTIFY and SSE.

Core Product Areas

  • Ideas - draft product intent before it becomes backlog work.
  • Grill / Plan - asynchronous Claude jobs that challenge the idea and produce a structured YAML plan.
  • Product Backlog - PBIs grouped by priority, with stories ordered inside each PBI.
  • Sprint Board - one view for Product Backlog, Sprint Backlog and tasks.
  • Solo Panel - personal Kanban board for claimed stories and tasks.
  • Product Docs - architecture, plans, runbooks, specs, API docs and agent guidance.
  • Question Channel - agents can ask blocking questions and continue after the user answers.
  • Activity Log - implementation plan, test result and commit entries per story.

Architecture

  • Next.js App Router for frontend, route handlers and server-side rendering.
  • Server Components for data loading.
  • Server Actions for UI mutations.
  • Prisma ORM with PostgreSQL.
  • iron-session for encrypted session cookies.
  • Product access through owners and product_members.
  • Postgres LISTEN/NOTIFY plus SSE for realtime updates.
  • Vercel-compatible build and deployment.
  • Shared schema and status contracts are generated from scrum4me-shared.

Tech Stack

  • Next.js 16
  • React 19
  • TypeScript
  • Prisma
  • PostgreSQL / Neon
  • Zustand
  • dnd-kit
  • Tailwind CSS
  • shadcn/ui
  • iron-session
  • bcryptjs
  • Vitest
  • Vercel Analytics
  • Sentry integration

Getting Started

Install dependencies:

npm ci

Create local environment variables:

cp .env.example .env.local

Fill at least:

  • DATABASE_URL
  • SESSION_SECRET

DIRECT_URL is optional for local development, but useful for migrations in cloud database environments.

Generate the local Prisma schema from scrum4me-shared, synchronize the database and generate Prisma Client:

bash scripts/gen-schema.sh
npx prisma db push
npx prisma generate

Seed test data when needed:

npm run seed

Start the development server:

npm run dev

The app runs at http://localhost:3000.

Scripts

npm run dev        # local development server
npm run lint       # ESLint
npm run typecheck  # TypeScript without emit
npm test           # Vitest test suite
npm run verify     # lint + typecheck + tests
npm run build      # production build

Verification

For normal development, run:

npm run verify
npm run build

For API smoke tests, start the app and use an API token:

bash scripts/test-api.sh

See scripts/README.md and docs/qa/api-test-plan.md for the API test setup.

Environment Variables

See .env.example for the full reference.

Variable Required Purpose
DATABASE_URL Yes PostgreSQL connection string for Prisma
DIRECT_URL No Direct database connection for migrations
SESSION_SECRET Yes At least 32 characters, used by iron-session
CRON_SECRET Production Bearer secret for /api/cron/* routes
NEXT_PUBLIC_VAPID_PUBLIC_KEY No VAPID public key for Web Push
VAPID_PRIVATE_KEY No VAPID private key for Web Push
VAPID_SUBJECT No Web Push contact URI
INTERNAL_PUSH_SECRET No Bearer secret for internal push routes
NEXT_PUBLIC_SENTRY_DSN No Sentry DSN; SDK is a no-op when omitted
SENTRY_ORG / SENTRY_PROJECT / SENTRY_AUTH_TOKEN No Source-map upload during build

API Overview

All protected API endpoints require:

Authorization: Bearer <token>

Implementation tokens are managed in the workers app at workers.jp-visser.nl/api-tokens.

Method Endpoint Purpose
GET /api/health Liveness check; ?db=1 also pings the database
GET /api/products Active products where the token user is owner or member
GET /api/products/:id/next-story Highest-priority open story from the active sprint
GET /api/products/:id/claude-context Bundled product, sprint, next story, tasks and open ideas for MCP
GET /api/sprints/:id/tasks?limit=10 First sprint tasks in order
PATCH /api/stories/:id/tasks/reorder Reorder tasks; all IDs must belong to the story
POST /api/stories/:id/log Record implementation plan, test result or commit
PATCH /api/tasks/:id Update task status or implementation_plan
GET / POST /api/ideas Idea CRUD
GET / PATCH /api/ideas/:id Read or update one idea
GET /api/jobs/:id/sub-tasks Sprint task executions for a sprint implementation job
GET /api/users/:id/avatar Avatar for a specific user

Documentation

  • Scrum4Me - this planning app.
  • scrum4me-workers - execution console for jobs, workers and tokens.
  • scrum4me-mcp - MCP server and dev-flow tools.
  • scrum4me-docker - headless runner for queued jobs.
  • scrum4me-shared - shared schema and TypeScript contracts.

Commit Guidelines

Use small, focused commits:

  • feat: for new behavior.
  • fix: for bug fixes.
  • docs: for documentation-only changes.
  • chore: for tooling or configuration.
  • refactor: for code improvements without behavior changes.

Keep one logical change per commit. Do not mix schema, UI, docs and tooling changes in the same commit unless they are required for one coherent feature.