- README.md: project overview, quick start, build commands - CLAUDE.md: AI dev context, source tree, key conventions - ARCHITECTURE.md: full system spec covering data model, auth (password + FIDO2/U2F), gRPC sync API, REST API, SVG/JPG/PDF rendering, web UI, configuration, deployment, security - PROJECT_PLAN.md: 11 phases with discrete checkboxable steps - PROGRESS.md: decision log and completion tracking Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.0 KiB
5.0 KiB
PROJECT_PLAN.md — eng-pad-server Implementation Steps
This file tracks all implementation steps. Check off steps as they are completed and log them in PROGRESS.md.
Phase 0: Project Setup
- 0.1: Initialize Go module (
git.wntrmute.dev/kyle/eng-pad-server) - 0.2: Create Makefile with standard targets
- 0.3: Configure
.golangci.yaml - 0.4: Create
.gitignore - 0.5: Create example config
deploy/examples/eng-pad-server.toml - Verify:
make build
Phase 1: Database + Config
- 1.1: TOML config loading
internal/config/config.go
- 1.2: SQLite database setup (WAL, foreign keys, busy timeout)
internal/db/db.go
- 1.3: Schema migrations (users, notebooks, pages, strokes, share_links, webauthn_credentials)
internal/db/migrations.go
- 1.4: Unit tests for migrations
- Verify:
make test
Phase 2: Auth — Password
- 2.1: Argon2id password hashing + verification
internal/auth/argon2.go
- 2.2: Bearer token generation, storage, validation
internal/auth/tokens.go
- 2.3: User creation (for
initcommand) - 2.4: Unit tests for auth
- Verify:
make test
Phase 3: CLI
- 3.1: Cobra CLI scaffold
cmd/eng-pad-server/main.go
- 3.2:
initcommand — create DB, prompt for admin usercmd/eng-pad-server/init.go
- 3.3:
servercommand — start gRPC + REST + web serverscmd/eng-pad-server/server.go
- 3.4:
snapshotcommand — VACUUM INTO backup - 3.5:
statuscommand — health check - Verify:
make all && ./eng-pad-server init
Phase 4: gRPC Sync Service
- 4.1: Proto definitions
proto/engpad/v1/sync.proto
- 4.2: Generate Go code
make proto
- 4.3: gRPC server setup with TLS
internal/grpcserver/server.go
- 4.4: Auth interceptor (username/password from metadata)
internal/grpcserver/interceptors.go
- 4.5: SyncNotebook handler (upsert: delete + re-insert)
internal/grpcserver/sync.go
- 4.6: DeleteNotebook handler
- 4.7: ListNotebooks handler
- 4.8: Unit tests for sync
- Verify:
make test+ manual gRPC test withgrpcurl
Phase 5: Rendering
- 5.1: SVG rendering — strokes to SVG path elements
internal/render/svg.go
- 5.2: JPG rendering — rasterize page at 300 DPI
internal/render/jpg.go
- 5.3: PDF rendering — notebook to multi-page PDF
internal/render/pdf.go
- 5.4: Unit tests — verify SVG output, JPG dimensions, PDF page count
- Verify:
make test
Phase 6: REST API
- 6.1: chi router setup with TLS
internal/server/server.go,routes.go
- 6.2: Auth middleware (bearer token validation)
internal/server/middleware.go
- 6.3: Login endpoint
internal/server/auth.go
- 6.4: Notebook/page endpoints (JSON metadata)
internal/server/notebooks.go
- 6.5: Rendering endpoints (SVG, JPG, PDF)
- 6.6: Unit tests for API
- Verify:
make test+ manual curl
Phase 7: Share Links
- 7.1: Token generation + storage
internal/share/share.go
- 7.2: gRPC RPCs — CreateShareLink, RevokeShareLink, ListShareLinks
internal/grpcserver/share.go
- 7.3: REST endpoints — /s/:token routes
- 7.4: Expiry enforcement (check on access, periodic cleanup)
- 7.5: Unit tests
- Verify:
make test
Phase 8: Web UI
- 8.1: Template skeleton — layout.html, navigation
web/templates/layout.html
- 8.2: Login page (password + WebAuthn)
web/templates/login.html
- 8.3: Notebook list page
web/templates/notebooks.html
- 8.4: Notebook view page (page grid with SVG thumbnails)
web/templates/notebook.html
- 8.5: Page viewer (embedded SVG, export buttons)
web/templates/page.html
- 8.6: Shared notebook/page views (same templates, no auth chrome)
- 8.7: Web server setup + embed
internal/webserver/,web/embed.go
- Verify: manual browser test
Phase 9: FIDO2/U2F (WebAuthn)
- 9.1: WebAuthn integration with
go-webauthn/webauthninternal/auth/webauthn.go
- 9.2: Registration endpoints (begin/finish)
- 9.3: Login endpoints (begin/finish)
- 9.4: Key management UI (list keys, add key, remove key)
- 9.5: Unit tests
- Verify: manual test with security key
Phase 10: Deployment
- 10.1: Dockerfile (multi-stage, non-root)
- 10.2: systemd units (service, backup timer)
deploy/systemd/
- 10.3: Install script
deploy/scripts/install.sh
- 10.4: Graceful shutdown (SIGINT/SIGTERM)
- Verify:
make docker && docker run
Phase 11: Android App Sync Integration
(Implemented in the eng-pad repo, not here)
- 11.1: gRPC client dependency (protobuf-lite)
- 11.2: SyncClient.kt — gRPC channel + stub
- 11.3: SyncManager.kt — serialize notebook to proto, call sync
- 11.4: Sync settings screen (server URL, username, password)
- 11.5: Notebook overflow menu — "Sync to server"
- 11.6: Library — "Sync all" button
- 11.7: Sync status indicator on notebook cards