22 KiB
22 KiB
1. Project Setup & Infrastructure
- 1.1 Create Docker Compose configuration (frontend, backend, postgres, redis containers)
- 1.2 Configure Dockerfile for Laravel backend (PHP 8.4-FPM, use :latest tag)
- 1.3 Configure Dockerfile for SvelteKit frontend (Node:latest)
- 1.4 Set up volume mounts for code (hot reload) and data (PostgreSQL, Redis)
- 1.5 Configure environment variables (.env files for frontend and backend)
- 1.6 Test Docker Compose startup (all 4 containers running)
- 1.7 Configure Nginx Proxy Manager routes (/api/* → Laravel, /* → SvelteKit)
2. Backend Foundation (Laravel)
- 2.1 Initialize Laravel 12 (latest) project with required dependencies
- 2.2 Install tymon/jwt-auth, predis/predis, knuckleswtf/scribe
- 2.3 Install pestphp/pest, laravel/pint for testing and linting
- 2.4 Configure PostgreSQL connection in config/database.php
- 2.5 Configure Redis connection for cache and sessions
- 2.6 Set up JWT authentication configuration (60min access, 7day refresh)
- 2.7 Configure CORS for SvelteKit frontend origin
- 2.8 Create API route structure (api.php)
3. Frontend Foundation (SvelteKit)
- 3.1 Initialize SvelteKit project with TypeScript
- 3.2 Install Tailwind CSS and DaisyUI
- 3.3 Install Recharts, TanStack Table (@tanstack/svelte-table)
- 3.4 Install Superforms (sveltekit-superforms) and Zod
- 3.5 Install Vitest and Playwright for testing
- 3.6 Configure Tailwind with DaisyUI theme
- 3.7 Create API client service (fetch wrapper with JWT token handling)
- 3.8 Create auth store (Svelte store for user, token management)
- 3.9 Create layout components (+layout.svelte, navigation)
4. Database Schema & Migrations
- 4.1 Create migration: roles table (id, name, description)
- 4.2 Create migration: project_statuses table (id, name, order, is_active, is_billable)
- 4.3 Create migration: project_types table (id, name, description)
- 4.4 Create migration: team_members table (id UUID, name, role_id, hourly_rate, active)
- 4.5 Create migration: projects table (id UUID, code unique, title, status_id, type_id, approved_estimate, forecasted_effort JSON)
- 4.6 Create migration: allocations table (id UUID, project_id, team_member_id, month, allocated_hours)
- 4.7 Create migration: actuals table (id UUID, project_id, team_member_id, month, hours_logged)
- 4.8 Create migration: holidays table (id UUID, date, name, description)
- 4.9 Create migration: ptos table (id UUID, team_member_id, start_date, end_date, reason, status)
- 4.10 Create migration: users table (id UUID, name, email, password, role enum)
- 4.11 Add indexes (composite on allocations/actuals for project+month, member+month)
- 4.12 Run migrations and verify schema
5. Database Seeders
- 5.1 Create seeder: roles (Frontend Dev, Backend Dev, QA, DevOps, UX, PM, Architect)
- 5.2 Create seeder: project_statuses (13 statuses with correct order)
- 5.3 Create seeder: project_types (Project, Support)
- 5.4 Create seeder: users (create superuser account for testing)
- 5.5 Run seeders and verify master data populated
6. Laravel Models & Relationships
- 6.1 Create TeamMember model with role relationship
- 6.2 Create Project model with status, type relationships, casts for forecasted_effort JSON
- 6.3 Create Allocation model with project, team_member relationships
- 6.4 Create Actual model with project, team_member relationships
- 6.5 Create Role, ProjectStatus, ProjectType models
- 6.6 Create Holiday, PTO models
- 6.7 Create User model with JWT authentication traits
- 6.8 Define model factories for testing (TeamMemberFactory, ProjectFactory, etc.)
7. Authentication (Backend)
- 7.1 Create AuthController (login, logout, refresh methods)
- 7.2 Implement login endpoint (validate credentials, generate JWT tokens)
- 7.3 Implement logout endpoint (invalidate refresh token in Redis)
- 7.4 Implement refresh endpoint (validate refresh token, rotate tokens)
- 7.5 Create JWT middleware for protecting routes
- 7.6 Store refresh tokens in Redis with 7-day TTL
- 7.7 Write unit tests for AuthController
- 7.8 Write feature tests for auth endpoints
8. Authentication (Frontend)
- 8.1 Create login page (/login route)
- 8.2 Create login form with Superforms + Zod validation
- 8.3 Implement auth API client methods (login, logout, refresh)
- 8.4 Create auth store (persist tokens in localStorage)
- 8.5 Implement token refresh logic (interceptor for 401 responses)
- 8.6 Create auth guard for protected routes (hooks.server.ts)
- 8.7 Add logout functionality to navigation
- 8.8 Write E2E test for login flow (Playwright)
9. Team Member Management (Backend)
- 9.1 Create TeamMemberController (index, store, show, update, destroy)
- 9.2 Create TeamMemberRequest for validation (name required, hourly_rate > 0)
- 9.3 Create TeamMemberResource for JSON transformation
- 9.4 Create TeamMemberPolicy for authorization (managers can CRUD)
- 9.5 Implement soft delete prevention (cannot delete if allocations exist)
- 9.6 Add API routes for team members
- 9.7 Write unit tests for TeamMember model
- 9.8 Write feature tests for team member endpoints
10. Team Member Management (Frontend)
- 10.1 Create team members list page (/team-members route)
- 10.2 Create team member create/edit form with Superforms + Zod
- 10.3 Implement team member API client methods (CRUD)
- 10.4 Display team members in TanStack Table (sortable, filterable)
- 10.5 Add active/inactive toggle UI
- 10.6 Add hourly rate display (formatted as currency)
- 10.7 Implement delete with confirmation modal
- 10.8 Write unit tests for team member components (Vitest)
- 10.9 Write E2E test for team member CRUD (Playwright)
11. Project Management (Backend)
- 11.1 Create ProjectController (index, store, show, update, destroy)
- 11.2 Create ProjectRequest for validation (code unique, approved_estimate > 0 if status >= Approved)
- 11.3 Create ProjectResource for JSON transformation
- 11.4 Create ProjectPolicy for authorization (managers can edit own projects)
- 11.5 Implement project status state machine validation
- 11.6 Implement forecasted effort validation (sum must equal approved estimate ±5%)
- 11.7 Add API routes for projects
- 11.8 Write unit tests for Project model and status transitions
- 11.9 Write feature tests for project endpoints
12. Project Management (Frontend)
- 12.1 Create projects list page (/projects route)
- 12.2 Create project create/edit form with Superforms + Zod
- 12.3 Implement project API client methods (CRUD)
- 12.4 Display projects in TanStack Table (sortable, filterable by status/type)
- 12.5 Add status dropdown (reflect state machine transitions)
- 12.6 Add forecasted effort input (JSON editor or month-by-month fields)
- 12.7 Display validation warnings (forecasted effort ≠ approved estimate)
- 12.8 Write unit tests for project components (Vitest)
- 12.9 Write E2E test for project creation and status transitions (Playwright)
13. Capacity Planning (Backend)
- 13.1 Create HolidayController (index, store, destroy)
- 13.2 Create PTOController (index, store, update, destroy with approval workflow)
- 13.3 Create CapacityService for capacity calculations
- 13.4 Implement calculateIndividualCapacity method (working days × availability - PTO - holidays)
- 13.5 Implement calculateTeamCapacity method (sum of individual capacities for active members)
- 13.6 Implement calculatePossibleRevenue method (capacity × hourly rates)
- 13.7 Add API routes for capacity endpoint (/api/capacity?month=YYYY-MM)
- 13.8 Implement Redis caching for capacity calculations (1 hour TTL)
- 13.9 Write unit tests for CapacityService
- 13.10 Write feature tests for capacity endpoints
14. Capacity Planning (Frontend)
- 14.1 Create capacity planning page (/capacity route)
- 14.2 Create calendar component for displaying month grid
- 14.3 Implement availability editor (click day to set 0, 0.5, 1.0)
- 14.4 Display holidays (H marker on dates)
- 14.5 Display weekends (O marker on dates)
- 14.6 Create PTO request form
- 14.7 Display individual and team capacity summary
- 14.8 Display possible revenue calculation
- 14.9 Write unit tests for capacity components (Vitest)
- 14.10 Write E2E test for capacity planning workflow (Playwright)
15. Resource Allocation (Backend)
- 15.1 Create AllocationController (index, store, update, destroy, bulk methods)
- 15.2 Create AllocationRequest for validation (hours >= 0, month format YYYY-MM)
- 15.3 Create AllocationResource for JSON transformation
- 15.4 Create AllocationPolicy for authorization (managers can allocate own team members)
- 15.5 Implement allocation validation service (check capacity, approved estimate)
- 15.6 Implement bulk allocation endpoint (create/update multiple allocations)
- 15.7 Add API routes for allocations (/api/allocations?month=YYYY-MM)
- 15.8 Implement Redis cache invalidation on allocation mutations
- 15.9 Write unit tests for allocation validation logic
- 15.10 Write feature tests for allocation endpoints
16. Resource Allocation (Frontend)
- 16.1 Create allocation matrix page (/allocations route)
- 16.2 Create allocation matrix component using TanStack Table
- 16.3 Implement inline editing for allocation hours
- 16.4 Display projects as rows, team members as columns
- 16.5 Display row totals (total hours per project)
- 16.6 Display column totals (total hours per team member)
- 16.7 Display utilization percentages per team member
- 16.8 Implement color-coded indicators (GREEN/YELLOW/RED for over/under allocation)
- 16.9 Add "Untracked" resource column
- 16.10 Implement month selector (navigate between months)
- 16.11 Add bulk allocation actions (copy previous month, clear all)
- 16.12 Write unit tests for allocation matrix logic (Vitest)
- 16.13 Write E2E test for allocation workflow (Playwright)
17. Actuals Tracking (Backend)
- 17.1 Create ActualController (index, store, update, bulk methods)
- 17.2 Create ActualRequest for validation (hours >= 0, cannot log future months)
- 17.3 Create ActualResource for JSON transformation
- 17.4 Create ActualPolicy for authorization (developers can log own hours only)
- 17.5 Implement validation: cannot log to completed/cancelled projects (configurable)
- 17.6 Implement bulk actuals endpoint
- 17.7 Add API routes for actuals (/api/actuals?month=YYYY-MM)
- 17.8 Implement Redis cache invalidation on actuals mutations
- 17.9 Write unit tests for actuals validation
- 17.10 Write feature tests for actuals endpoints
18. Actuals Tracking (Frontend)
- 18.1 Create actuals entry page (/actuals route)
- 18.2 Create actuals matrix component (similar to allocations matrix)
- 18.3 Display allocated hours vs actual hours side by side
- 18.4 Highlight variances (over/under delivery)
- 18.5 Allow developers to see only their own actuals (RBAC check)
- 18.6 Implement bulk update for multiple projects
- 18.7 Write unit tests for actuals components (Vitest)
- 18.8 Write E2E test for actuals logging (Playwright)
19. Utilization Calculations (Backend)
- 19.1 Create UtilizationService for utilization calculations
- 19.2 Implement calculateRunningUtilization method (YTD allocated / YTD capacity)
- 19.3 Implement calculateOverallUtilization method (monthly allocated / monthly capacity)
- 19.4 Implement calculateActualUtilization method (monthly actuals / monthly capacity)
- 19.5 Implement team-level utilization aggregation
- 19.6 Add utilization data to allocation and actuals responses
- 19.7 Write unit tests for UtilizationService
- 19.8 Write feature tests for utilization calculations
20. Reporting - Forecast (Backend)
- 20.1 Create ReportController with forecast method
- 20.2 Implement forecast report query (multi-period allocations)
- 20.3 Calculate revenue forecast (allocations × hourly rates)
- 20.4 Display variance indicators (forecasted vs approved estimate)
- 20.5 Implement filters (project, status, type, team, date range)
- 20.6 Create ForecastReportResource for JSON transformation
- 20.7 Add API route /api/reports/forecast
- 20.8 Implement Redis caching for forecast reports (15 min TTL)
- 20.9 Write unit tests for forecast report logic
- 20.10 Write feature tests for forecast endpoint
21. Reporting - Forecast (Frontend)
- 21.1 Create forecast report page (/reports/forecast route)
- 21.2 Create forecast report table component
- 21.3 Display multi-period view (month columns)
- 21.4 Display variance indicators (GREEN/YELLOW/RED)
- 21.5 Implement date range selector
- 21.6 Implement filters (project, status, type, team)
- 21.7 Display summary aggregations (total approved, total allocated, variance)
- 21.8 Add revenue forecast chart (Recharts line chart)
- 21.9 Write E2E test for forecast report (Playwright)
22. Reporting - Utilization (Backend)
- 22.1 Add utilization method to ReportController
- 22.2 Implement utilization report query (team and individual trends)
- 22.3 Calculate planned vs actual utilization
- 22.4 Implement filters (team member, role, date range)
- 22.5 Create UtilizationReportResource for JSON transformation
- 22.6 Add API route /api/reports/utilization
- 22.7 Implement Redis caching for utilization reports
- 22.8 Write feature tests for utilization endpoint
23. Reporting - Utilization (Frontend)
- 23.1 Create utilization report page (/reports/utilization route)
- 23.2 Display team-level utilization summary
- 23.3 Display individual utilization breakdown
- 23.4 Add utilization trend chart (Recharts line chart)
- 23.5 Color-code utilization bands (< 70% blue, 80-100% green, > 100% yellow/red)
- 23.6 Implement filters (team member, role, date range)
- 23.7 Display utilization distribution chart (how many in each band)
- 23.8 Write E2E test for utilization report (Playwright)
24. Reporting - Cost (Backend)
- 24.1 Add cost method to ReportController
- 24.2 Implement cost report query (allocations × hourly rates)
- 24.3 Calculate possible revenue (full capacity utilization)
- 24.4 Calculate forecasted revenue (current allocations)
- 24.5 Calculate revenue gap (possible - forecasted)
- 24.6 Implement filters (project, client, type, team, date range)
- 24.7 Create CostReportResource for JSON transformation
- 24.8 Add API route /api/reports/cost
- 24.9 Implement Redis caching for cost reports
- 24.10 Write feature tests for cost endpoint
25. Reporting - Cost (Frontend)
- 25.1 Create cost report page (/reports/cost route)
- 25.2 Display monthly revenue forecast
- 25.3 Display cost breakdown by project
- 25.4 Display possible revenue vs forecasted revenue
- 25.5 Display revenue gap analysis
- 25.6 Implement filters (project, type, team, date range)
- 25.7 Add revenue chart (Recharts bar chart)
- 25.8 Write E2E test for cost report (Playwright)
26. Reporting - Allocation (Backend)
- 26.1 Add allocation method to ReportController
- 26.2 Implement allocation report query (monthly matrix view)
- 26.3 Include utilization percentages
- 26.4 Implement filters (team, role, project, status)
- 26.5 Create AllocationReportResource for JSON transformation
- 26.6 Add API route /api/reports/allocation
- 26.7 Implement Redis caching for allocation reports
- 26.8 Write feature tests for allocation endpoint
27. Reporting - Allocation (Frontend)
- 27.1 Create allocation report page (/reports/allocation route)
- 27.2 Display allocation matrix with totals
- 27.3 Display utilization percentages
- 27.4 Highlight recent allocation changes (NEW/UPDATED badges)
- 27.5 Implement multi-month view option
- 27.6 Implement filters (team, role, project, status)
- 27.7 Write E2E test for allocation report (Playwright)
28. Reporting - Variance (Backend)
- 28.1 Add variance method to ReportController
- 28.2 Implement variance report query (planned vs actual comparison)
- 28.3 Calculate variance (actual - planned) and percentage
- 28.4 Flag over-delivery and under-delivery patterns
- 28.5 Implement filters (project, team, person, date range)
- 28.6 Create VarianceReportResource for JSON transformation
- 28.7 Add API route /api/reports/variance
- 28.8 Implement Redis caching for variance reports
- 28.9 Write feature tests for variance endpoint
29. Reporting - Variance (Frontend)
- 29.1 Create variance report page (/reports/variance route)
- 29.2 Display variance table (planned, actual, variance, variance %)
- 29.3 Color-code variances (positive green, negative red)
- 29.4 Display project-level variance aggregations
- 29.5 Display person-level variance aggregations
- 29.6 Add variance trend chart (Recharts)
- 29.7 Implement filters (project, team, person, date range)
- 29.8 Write E2E test for variance report (Playwright)
30. Role-Based Access Control (Backend)
- 30.1 Create role middleware for route protection
- 30.2 Implement permission checks in controllers
- 30.3 Create policies for all models (TeamMember, Project, Allocation, Actual)
- 30.4 Implement Superuser full access (bypass all checks)
- 30.5 Implement Manager permissions (own projects, own team allocations)
- 30.6 Implement Developer permissions (own allocations, own actuals)
- 30.7 Implement Top Brass permissions (read-only all reports)
- 30.8 Write unit tests for policies
- 30.9 Write feature tests for authorization (401, 403 responses)
31. Role-Based Access Control (Frontend)
- 31.1 Add role to auth store
- 31.2 Implement route guards based on role (hooks.server.ts)
- 31.3 Hide UI elements based on permissions (v-if directives)
- 31.4 Show read-only state for Top Brass users
- 31.5 Filter visible projects for Managers (own projects editable, others read-only)
- 31.6 Filter visible data for Developers (only assigned projects)
- 31.7 Write E2E tests for RBAC (different user roles)
32. Master Data Management (Backend)
- 32.1 Create MasterDataController (roles, statuses, types endpoints)
- 32.2 Create RoleController for managing roles (Superuser only)
- 32.3 Create ProjectStatusController for managing statuses (Superuser only)
- 32.4 Create ProjectTypeController for managing types (Superuser only)
- 32.5 Implement validation: cannot delete role/status/type in use
- 32.6 Add API routes for master data endpoints
- 32.7 Implement Redis caching for master data (24 hour TTL)
- 32.8 Write feature tests for master data endpoints
33. Master Data Management (Frontend)
- 33.1 Create master data management page (/admin/master-data route, Superuser only)
- 33.2 Display roles list with CRUD actions
- 33.3 Display project statuses list with reordering and CRUD actions
- 33.4 Display project types list with CRUD actions
- 33.5 Implement master data forms (create/edit)
- 33.6 Write E2E test for master data management (Playwright)
34. API Documentation (Backend)
- 34.1 Add Scribe annotations to all controllers (@group, @response tags)
- 34.2 Configure Scribe (scribe.php config file)
- 34.3 Generate API documentation (php artisan scribe:generate)
- 34.4 Verify SwaggerUI accessible at /api/documentation
- 34.5 Add example requests and responses to documentation
- 34.6 Add authentication section to API docs
35. Testing & Code Quality
- 35.1 Write comprehensive unit tests (backend models, services, utilities)
- 35.2 Write feature tests for all API endpoints (Laravel Pest)
- 35.3 Write unit tests for frontend components (Vitest)
- 35.4 Write E2E tests for critical flows (Playwright: login, allocate, report)
- 35.5 Configure pre-commit hooks (Laravel Pint, ESLint, Prettier)
- 35.6 Run PHPStan static analysis (level 5+)
- 35.7 Generate code coverage report (verify >70%)
- 35.8 Fix all linting errors (Laravel Pint, ESLint)
- 35.9 Run security audit (composer audit, npm audit)
36. Polish & UX
- 36.1 Add loading states (spinners, skeleton loaders)
- 36.2 Add error states (toast notifications, error pages)
- 36.3 Add empty states (no data placeholders)
- 36.4 Implement form validation feedback (inline errors, success messages)
- 36.5 Add confirmation modals for destructive actions (delete)
- 36.6 Implement responsive design (mobile-friendly tables, navigation)
- 36.7 Add keyboard shortcuts (ESC to close modals, etc.)
- 36.8 Add accessibility features (ARIA labels, focus management)
- 36.9 Test in multiple browsers (Chrome, Firefox, Safari)
37. Documentation & Deployment
- 37.1 Write README.md with setup instructions
- 37.2 Document environment variables (.env.example files)
- 37.3 Create Quick Start guide for managers (capacity → allocate → reports)
- 37.4 Document API authentication flow
- 37.5 Create deployment guide (Docker Compose production setup)
- 37.6 Add health check endpoints (/api/health)
- 37.7 Configure logging (Laravel logs to stdout, Svelte client errors to console)
- 37.8 Test full deployment workflow (fresh Docker Compose up)
- 37.9 Create superuser via seeder for initial login
- 37.10 Verify Nginx Proxy Manager routing
38. Final Verification
- 38.1 Run full test suite (unit + E2E) and verify all pass
- 38.2 Verify code coverage >70%
- 38.3 Run linters and fix all issues
- 38.4 Test complete user flow: capacity → allocate → log actuals → reports
- 38.5 Verify RBAC working for all 4 personas
- 38.6 Verify Redis caching working (check cache hit rate)
- 38.7 Verify API documentation accessible and accurate
- 38.8 Verify Docker Compose startup works cleanly
- 38.9 Verify database migrations and seeders work
- 38.10 Conduct final security review (no secrets in code, HTTPS enforced)