Files

4.8 KiB

Requirements

Overview

Implement milestones M1-M4 of the Simple Groupware project: project foundation setup (Next.js 15), DB foundation (SQL wrapper + Migration), authentication & user management, and project & member management. Each milestone is developed on a separate branch and merged to main. Unit tests and E2E tests are mandatory.

Background

The repository is currently a spec-driven-development boilerplate (vitest/eslint/prettier/husky configured, but no Next.js, no react, no SQLite). It must be transformed into the foundation of the Simple Groupware: a Next.js 15 + TypeScript + SQLite(better-sqlite3) application following the layered architecture (UI → Service → Repository → Data) defined in docs/architecture.md. M1-M4 establish the base that all subsequent milestones (M5+) depend on.

Features to Implement

1. M1: Project Foundation Setup

  • Next.js 15 (App Router, TypeScript) project configuration
  • Tailwind CSS setup
  • tsconfig with @/* path alias, strict mode
  • next.config, .env.example
  • Directory structure: app/, lib/, repositories/, services/, components/, tests/, data/, backups/
  • ESLint (with Next.js plugin), Prettier, Husky, lint-staged, Vitest, Playwright setup
  • CI config (GitHub Actions)
  • package.json scripts: lint, format, typecheck, test, test:e2e, migrate, dev, build
  • Dependencies: next, react, react-dom, better-sqlite3, bcrypt, react-markdown, remark-gfm, rehype-sanitize, tailwindcss, @types/better-sqlite3
  • Remove boilerplate src/example.ts and src/example.test.ts

2. M2: DB Foundation (SQL Wrapper + Migration)

  • lib/db/sqlite.ts: SqliteDatabase class (query/get/execute/transaction/close) + getDb() singleton (WAL, foreign_keys ON)
  • lib/db/migrator.ts: Migrator class (filename-order execution, skip applied, 1-file-1-transaction, rollback on failure)
  • lib/db/migrations/001_initial.sql: all 16 tables + indexes
  • lib/types/: all Entity type definitions + enums
  • lib/db/run-migrations.ts: migration runner script
  • API: GET /api/admin/migrations (admin-only migration status)
  • Unit tests: sqlite.test.ts, migrator.test.ts

3. M3: Authentication & User Management

  • UserRepository (findById/findByEmail/create/update)
  • AuthService (register/login/logout/getCurrentUser/updateProfile) with bcrypt password hashing
  • Role management (system_admin/project_admin/member/guest), account enable/disable
  • lib/auth/ (session.ts, getCurrentUser.ts)
  • lib/validators/userValidator.ts
  • API: register, login, logout, me, users/me
  • Login page, profile page, root layout
  • Auth middleware (redirect unauthenticated to login)
  • Unit tests: UserRepository, AuthService; E2E test: auth.spec.ts

4. M4: Project & Member Management

  • ProjectRepository, ProjectMemberRepository
  • ProjectService (createProject/updateProject/addMember/removeMember/archiveProject/getDashboard) with permission checks
  • projectValidator.ts
  • API: projects CRUD, members CRUD
  • Dashboard (project list), project overview, members page, settings page
  • Layout components (Header, Sidebar, ProjectNav)
  • Unit tests: ProjectRepository, ProjectMemberRepository, ProjectService; Integration test: project-member-permission; E2E test: project-management.spec.ts

Acceptance Criteria

M1

  • npm run dev starts the Next.js dev server
  • npm run lint, npm run typecheck, npm run build succeed
  • Directory structure matches repository-structure.md

M2

  • npm run migrate creates the initial schema
  • Migrations run in filename order and skip applied ones
  • Failed migration rolls back
  • Unit tests pass

M3

  • User registration, login, logout work
  • Password is hashed with bcrypt
  • Profile & avatar editable
  • Inactive accounts cannot log in
  • Unauthenticated access to protected screens is blocked
  • Unit & E2E tests pass

M4

  • Project create/edit/delete/archive work
  • Member add/remove/role work
  • Non-members get 403
  • Unit, Integration & E2E tests pass

Success Metrics

  • All Unit tests pass (npm test)
  • All E2E tests pass (npm run test:e2e)
  • Lint and typecheck clean
  • Each milestone merged to main on its own branch

Out of Scope

The following will not be implemented in this phase:

  • M5-M15 (notifications, board, chat, SSE, todo, files, calendar, milestones, meetings, search, dashboard completion, backup)
  • E2E tests for features beyond M3/M4 scope (board, chat, etc.)
  • Full project dashboard content (only skeleton in M4; full content in M13)

Reference Documents

  • docs/product-requirements.md - Product Requirements Document
  • docs/functional-design.md - Functional design document
  • docs/architecture.md - Architecture design document
  • docs/repository-structure.md - Repository structure document
  • docs/development-guidelines.md - Development guidelines
  • docs/milestones.md - Milestone & task definitions