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 90.1%
  • Swift 6%
  • JavaScript 1.9%
  • PLpgSQL 1.2%
  • Shell 0.5%
  • Other 0.3%
Find a file
Janpeter Visser 011b014f5a
All checks were successful
CI / Deploy Manual (workflow_dispatch) (push) Has been skipped
CI / Lint, Typecheck, Test & Build (push) Successful in 5m12s
CI / Detect deploy-relevant changes (push) Has been skipped
CI / Deploy Preview (PR) (push) Has been skipped
CI / Deploy Production (main) (push) Has been skipped
Merge pull request 'fix(hub): note kan het deny-citaat niet sluiten + bytegrens op de intake-context' (#181) from fix/hub-ingest-hardening into main
Reviewed-on: #181
Reviewed-by: s4m-codex-reviewer <dijkhofl@gmail.com>
2026-08-19 19:25:13 +02:00
.github/workflows fix(ci): checkout submodules so @shared/* re-exports resolve 2026-05-27 00:09:55 +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__ fix(hub): note kan het deny-citaat niet sluiten + bytegrens op de intake-context 2026-08-19 18:56:49 +02:00
actions feat(issues): detailpagina met secties, close-flow, links, logboek en Sync nu 2026-08-17 07:48:08 +02:00
app fix(hub): note kan het deny-citaat niet sluiten + bytegrens op de intake-context 2026-08-19 18:56:49 +02:00
components feat(issues): detailpagina met secties, close-flow, links, logboek en Sync nu 2026-08-17 07:48:08 +02:00
docs Merge pull request 'fix(hub): note kan het deny-citaat niet sluiten + bytegrens op de intake-context' (#181) from fix/hub-ingest-hardening into main 2026-08-19 19:25:13 +02:00
hooks Sprint: Jobs scherm (#209) 2026-05-15 01:25:20 +02:00
ios chore(ios): buildnummer naar 5 voor de IDEA-182-TestFlight-build 2026-08-19 13:29:12 +02:00
lib Merge branch 'main' into claude/askuserquestion-ios-approval-c76040 2026-08-19 17:40:29 +02:00
prisma fix(issues): ontbrekende hub_permission_rules-migratie + ideeën-select user-scoped 2026-08-17 08:52:25 +02:00
public fix(push): handel pushsubscriptionchange af in de service worker 2026-08-10 20:03:02 +02:00
scripts fix(hub): note kan het deny-citaat niet sluiten + bytegrens op de intake-context 2026-08-19 18:56:49 +02:00
stores fix(order): close final concurrency gaps 2026-07-11 17:31:32 +02:00
tests feat(hub): canonicalTarget + gedeelde testvectoren voor handtekening-v2 2026-08-14 19:50:00 +02:00
vendor docs(issues): rollout-runbook, envs en agent-adoptie-snippet 2026-08-17 08:02:17 +02:00
.env.example docs(issues): rollout-runbook, envs en agent-adoptie-snippet 2026-08-17 08:02:17 +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(ios): verwijs naar npm run ios:test i.p.v. handgeschreven xcodebuild-regels 2026-08-14 11:56:23 +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(hub): in-proc runtime met listeners, reconciliatie en sweep (M31 T1.10) 2026-08-12 00:37:57 +02:00
next.config.ts fix(build): main bouwt weer — extensionAlias voor @shared + PageProps-constraint 2026-08-17 10:25:45 +02:00
package-lock.json feat(hub): APNs-laag met delivery-resultaat, relevance-score en JWT-cache (M31 T1.5) 2026-08-12 00:11:50 +02:00
package.json package.json bijwerken 2026-08-19 13:29:14 +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 feat(issues): lijstpagina met filters, badges, realtime en create-dialog + nav/proxy 2026-08-17 07:44:11 +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: add scrum4me-shared submodule + @shared path alias 2026-05-26 13:56:09 +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(db): migrate model prices to rate cards 2026-07-09 20:11:13 +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.