Files
GlowTrack/specs/001-glowtrack-a-mood/tasks.md
2025-09-18 10:04:43 -06:00

12 KiB
Raw Blame History

Tasks: GlowTrack — Mood & Habit Wellbeing Grid

Input: /home/jawz/Development/Projects/GlowTrack/specs/001-glowtrack-a-mood/ Prerequisites: plan.md (required), research.md, data-model.md, contracts/

Execution Flow (main)

  1. Load plan.md from feature directory → Extract tech stack, libraries, structure
  2. Load optional docs: data-model.md (entities), contracts/* (contract tests), research.md (decisions), quickstart.md (integration scenarios)
  3. Generate tasks by category: Setup → Tests → Core → Integration → Polish
  4. Apply rules: Different files = [P] parallel, same file = sequential; Tests before implementation (TDD)
  5. Number T001…; define dependencies; include parallel examples and Agent Task commands

Paths below are absolute to this repo.


Phase 3.1: Setup

  • T001 Create monorepo layout

    • Create directories:
      • /home/jawz/Development/Projects/GlowTrack/apps/web
      • /home/jawz/Development/Projects/GlowTrack/packages/storage
      • /home/jawz/Development/Projects/GlowTrack/packages/viz
      • /home/jawz/Development/Projects/GlowTrack/packages/theme
      • /home/jawz/Development/Projects/GlowTrack/tools/ci
    • Add placeholder README.md in each new folder.
    • Dependencies: none
  • T002 Initialize Nix flake (devShell + build outputs)

    • Create /home/jawz/Development/Projects/GlowTrack/flake.nix providing:
      • devShell with: nodejs (LTS 20+), pnpm, git, playwright browsers (via optional separate task), jq
      • packages.app building static site from /apps/web (pnpm build)
    • Add .envrc (optional) to auto-enter devShell
    • Dependencies: T001
  • T003 Initialize pnpm workspaces

    • Create /home/jawz/Development/Projects/GlowTrack/package.json (private workspace root) with scripts: lint, test, build, typecheck, format
    • Create /home/jawz/Development/Projects/GlowTrack/pnpm-workspace.yaml listing apps/* and packages/*
    • Dependencies: T001
  • T004 Configure linting, formatting, types

    • Root: .editorconfig, .eslintrc.cjs, .prettierrc, .prettierignore, .npmrc (pnpm settings)
    • Add dev deps: eslint, eslint-config-prettier, prettier, typescript, svelte-check
    • Dependencies: T003
  • T005 Scaffold SvelteKit PWA (adapter-static)

    • In /home/jawz/Development/Projects/GlowTrack/apps/web create a SvelteKit app:
      • package.json, svelte.config.js (adapter-static), vite.config.ts, tsconfig.json
      • src/app.d.ts, src/app.css, src/routes/+layout.svelte, src/routes/+page.svelte (hello grid)
      • static/manifest.webmanifest (minimal)
    • Add scripts: dev, build, preview, test, test:e2e, check
    • Dependencies: T003, T004
  • T006 Tailwind CSS setup

    • apps/web: tailwind.config.cjs, postcss.config.cjs; integrate @tailwindcss/forms
    • Wire Tailwind into src/app.css and +layout.svelte
    • Dependencies: T005
  • T007 Vitest + Playwright test harness

    • apps/web: vitest config (vitest + svelte), playwright.config.ts with basic smoke project
    • Root CI scripts in tools/ci (stub) and package scripts wiring
    • Dependencies: T005
  • T008 PWA service worker wiring (SvelteKit)

    • Enable service worker in SvelteKit config and add minimal SW handler
    • Ensure static asset caching strategy is defined (runtime-minimal)
    • Dependencies: T005

Phase 3.2: Tests First (TDD) — MUST FAIL before 3.3

Contract files from /home/jawz/Development/Projects/GlowTrack/specs/001-glowtrack-a-mood/contracts/ → contract tests [P]

  • T009 [P] Contract test: export JSON schema

    • Create /home/jawz/Development/Projects/GlowTrack/packages/storage/tests/contract/export.spec.ts
    • Use Ajv to validate object from exportToJson() against export.schema.json at /home/jawz/Development/Projects/GlowTrack/specs/001-glowtrack-a-mood/contracts/export.schema.json
    • Expect failure until export service implemented
    • Dependencies: T007
  • T010 [P] Contract test: IndexedDB storage schema

    • Create /home/jawz/Development/Projects/GlowTrack/packages/storage/tests/contract/schema.spec.ts
    • Open DB via openDb() and assert stores/indexes per /home/jawz/Development/Projects/GlowTrack/specs/001-glowtrack-a-mood/contracts/storage.schema.md
    • Expect failure until DB module/migrations implemented
    • Dependencies: T007
  • T011 [P] Contract test: renderer API

    • Create /home/jawz/Development/Projects/GlowTrack/packages/viz/tests/contract/renderer.spec.ts
    • Assert renderGrid(container, days, theme, options) exists and draws required layers per /home/jawz/Development/Projects/GlowTrack/specs/001-glowtrack-a-mood/contracts/renderer.md
    • Expect failure until viz renderer implemented
    • Dependencies: T007

Integration scenarios from quickstart.md → e2e smoke tests [P]

  • T012 [P] E2E: mood + habits update tile

    • Create /home/jawz/Development/Projects/GlowTrack/apps/web/tests/e2e/smoke.mood-habits.spec.ts
    • Steps: open app → set day mood → add positive+negative habits → tile glow/luminance and glyphs update
    • Dependencies: T007, T005
  • T013 [P] E2E: export/import JSON roundtrip

    • Create /home/jawz/Development/Projects/GlowTrack/apps/web/tests/e2e/smoke.export-import.spec.ts
    • Steps: create few days → export JSON → clear DB → import JSON → grid identical
    • Dependencies: T007, T005
  • T014 [P] E2E: PNG export at screen resolution

    • Create /home/jawz/Development/Projects/GlowTrack/apps/web/tests/e2e/smoke.png-export.spec.ts
    • Steps: render month → export PNG (toBlob) → file within size/time budget
    • Dependencies: T007, T005
  • T015 [P] E2E: offline PWA works

    • Create /home/jawz/Development/Projects/GlowTrack/apps/web/tests/e2e/smoke.offline.spec.ts
    • Steps: install SW → go offline → app loads and writes mood/entries; on reconnect, state persists
    • Dependencies: T007, T008, T005

Phase 3.3: Core Implementation (only after tests are failing)

From data-model.md → model creation tasks [P]

  • T016 [P] Define TypeScript models

    • Create /home/jawz/Development/Projects/GlowTrack/packages/storage/src/models.ts
    • Export interfaces: WellbeingGrid, GridSettings, ExportSettings, DayTile, Mood, HabitEntry, HabitDefinition
    • Dependencies: T009-T015 (tests exist), T003
  • T017 [P] Implement IndexedDB schema v1

    • Create /home/jawz/Development/Projects/GlowTrack/packages/storage/src/db.ts with openDb(name='glowtrack', version=1)
    • Create stores: settings (key 'singleton'), habits (keyPath 'id', index by_type), days (keyPath 'date'), entries (keyPath 'id', indexes by_date, by_habit)
    • Dependencies: T016, T010
  • T018 [P] Implement export/import service

    • Create /home/jawz/Development/Projects/GlowTrack/packages/storage/src/export.ts with exportToJson(), importFromJson()
    • Ensure JSON conforms to export.schema.json (version, app, exportedAt, data)
    • Dependencies: T016, T009, T017
  • T019 [P] Compute helpers (netScore, derivations)

    • Create /home/jawz/Development/Projects/GlowTrack/packages/storage/src/compute.ts implementing netScore, clamps, updates on entry CRUD
    • Dependencies: T016

Renderer and theme [P]

  • T020 [P] Renderer: minimal Canvas/SVG hybrid

    • Create /home/jawz/Development/Projects/GlowTrack/packages/viz/src/renderer.ts exporting renderGrid(container, days, theme, options)
    • Canvas tiles with glow luminance curve; SVG overlay for glyphs/focus rings
    • Dependencies: T011, T016, T019
  • T021 [P] Theme: CSS variables + palettes

    • Create /home/jawz/Development/Projects/GlowTrack/packages/theme/src/tokens.css and /home/jawz/Development/Projects/GlowTrack/packages/theme/src/index.ts
    • Provide color-blind modes: none, protanopia, deuteranopia, tritanopia
    • Dependencies: T006

UI wiring

  • T022 Minimal UI to edit and view grid

    • apps/web components:
      • /home/jawz/Development/Projects/GlowTrack/apps/web/src/lib/components/Grid.svelte (uses packages/viz)
      • /home/jawz/Development/Projects/GlowTrack/apps/web/src/lib/components/DayEditor.svelte (set mood, add entries)
      • /home/jawz/Development/Projects/GlowTrack/apps/web/src/routes/+page.svelte (compose editor + grid)
    • Dependencies: T020, T021, T017, T019
  • T023 Wire storage + export/import + PNG export

    • Implement usage of openDb, exportToJson/importFromJson; add PNG export via renderer (toBlob)
    • Add buttons: Export JSON, Import JSON, Export PNG
    • Files: /home/jawz/Development/Projects/GlowTrack/apps/web/src/lib/actions/export.ts, import.ts, png.ts (or colocated in +page.svelte)
    • Dependencies: T018, T020, T022

Phase 3.4: Integration

  • T024 Tailwind integration and base styles

    • Ensure Tailwind classes purge safely; add base typography/forms styles in app.css
    • Files: /home/jawz/Development/Projects/GlowTrack/apps/web/src/app.css, tailwind.config.cjs
    • Dependencies: T006, T022
  • T025 PWA manifest + SW behavior

    • Ensure manifest.webmanifest, icons (placeholder), SW caching strategy aligned with offline write safety
    • Files: /home/jawz/Development/Projects/GlowTrack/apps/web/static/manifest.webmanifest, src/service-worker.ts
    • Dependencies: T008, T022
  • T026 Basic logging and error UX

    • Add simple structured console logs in dev; user-visible error toasts for import failures
    • Files: /home/jawz/Development/Projects/GlowTrack/apps/web/src/lib/stores/toast.ts, components/Toast.svelte
    • Dependencies: T022, T023

Phase 3.5: Polish

  • T027 [P] Unit tests for compute helpers

    • Create /home/jawz/Development/Projects/GlowTrack/packages/storage/tests/unit/compute.spec.ts covering netScore, clamping, entry CRUD recompute
    • Dependencies: T019
  • T028 [P] Renderer perf sanity test

    • Create /home/jawz/Development/Projects/GlowTrack/packages/viz/tests/perf/render.perf.spec.ts rendering 365 tiles under budget; assert frame time thresholds (coarse)
    • Dependencies: T020
  • T029 [P] Docs: READMEs and quickstart wiring

    • Update /home/jawz/Development/Projects/GlowTrack/README.md and /home/jawz/Development/Projects/GlowTrack/apps/web/README.md; link to spec and tasks
    • Dependencies: T022, T023
  • T030 Final build + e2e pass via Nix

    • Run nix build .#app and playwright e2e; attach artifacts
    • Dependencies: T015, T025, T029

Dependencies Summary

  • Setup (T001T008) before Tests (T009T015)
  • Tests before Core (T016T023)
  • Models (T016) before Storage services (T017T019)
  • Storage services before UI wiring (T022T023)
  • Renderer (T020) and Theme (T021) before Grid UI (T022)
  • PWA wiring (T008, T025) before Offline e2e (T015)
  • Polish (T027T030) after Core/Integration

Parallel Execution Examples

Launch independent [P] tasks together (different paths, no shared files):

Task: "T009 [P] Contract test: export JSON schema in /packages/storage/tests/contract/export.spec.ts"
Task: "T010 [P] Contract test: IndexedDB storage schema in /packages/storage/tests/contract/schema.spec.ts"
Task: "T011 [P] Contract test: renderer API in /packages/viz/tests/contract/renderer.spec.ts"
Task: "T012 [P] E2E mood+habits in /apps/web/tests/e2e/smoke.mood-habits.spec.ts"
Task: "T013 [P] E2E export/import in /apps/web/tests/e2e/smoke.export-import.spec.ts"
Task: "T014 [P] E2E PNG export in /apps/web/tests/e2e/smoke.png-export.spec.ts"
Task: "T027 [P] Unit tests compute in /packages/storage/tests/unit/compute.spec.ts"
Task: "T028 [P] Renderer perf test in /packages/viz/tests/perf/render.perf.spec.ts"
Task: "T029 [P] Docs updates in /README.md and /apps/web/README.md"

Agent Task commands (example grouping):

# Group 1: Contract + e2e tests (T009T015)
Task: "Create failing contract tests for export, storage, renderer"
Task: "Create failing e2e smoke tests for mood/habits, export/import, PNG, offline"

# Group 2: Models and services (T016T019)
Task: "Implement models.ts, db.ts, export.ts, compute.ts in packages/storage"

# Group 3: Viz + theme (T020T021)
Task: "Implement renderer.ts in packages/viz and tokens.css in packages/theme"

# Group 4: UI wiring (T022T026)
Task: "Build minimal UI and wire storage/export/PNG + PWA"

# Group 5: Polish and build (T027T030)
Task: "Add unit/perf tests, docs, and run final Nix build + e2e"

Validation Checklist

  • All contract files have corresponding tests (T009T011) → YES
  • All entities have model tasks (T016) → YES
  • All tests come before implementation → YES (Phase 3.2 precedes 3.3)
  • [P] tasks are independent and avoid same-file edits → YES
  • Each task specifies exact absolute file paths → YES
  • No task with [P] modifies the same file as another [P] task → YES

Notes

  • Use adapter-static for SvelteKit; no backend services
  • Local-first via IndexedDB (idb) with versioned migrations
  • Tailwind + CSS variables for theming and color-blind modes
  • Reproducible dev via Nix; CI can reuse flake outputs