ca-grow-ops-manager/plans/phase-1-foundation.md
fullsizemalt da7729d6e4
Some checks failed
Deploy to Production / deploy (push) Failing after 0s
Test / backend-test (push) Failing after 0s
Test / frontend-test (push) Failing after 0s
Initial commit: Spec Kit foundation complete
- Constitution and project spec (spec.yml)
- 7 comprehensive feature specs (tasks, batches, labor, compliance, inventory, integrations, comms)
- Phase 1 implementation plan (6-week roadmap)
- Week 1 task breakdown (15 concrete tasks)
- Architecture and compliance documentation
- Backend and frontend setup guides
- Deployment guide for nexus-vector
- CI/CD workflows (Forgejo Actions)
- Quick start guide for developers

Project is ready for implementation with:
- Automated testing on every push
- Automatic deployment to nexus-vector on push to main
- Database migrations handled automatically
- Health checks and monitoring

Stack: TypeScript, Fastify, React, Vite, PostgreSQL, Prisma, Docker
2025-12-08 23:54:12 -08:00

530 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Implementation Plan: Phase 1 — Foundation
**Version**: 0.1.0
**Status**: Planning
**Created**: 2025-12-08
**Target Completion**: TBD
---
## Overview
Phase 1 establishes the foundational infrastructure and core features for CA Grow Ops Manager. This phase focuses on:
1. Project setup and infrastructure
2. Authentication and RBAC
3. Core data models (Users, Roles, Batches, Rooms, Tasks)
4. Basic CRUD operations for each domain
5. Minimal viable UI for each feature
**Success Criteria**: A working application where users can authenticate, create batches/rooms, schedule tasks, clock in/out, and upload compliance documents.
---
## Architecture Decisions
### Backend Framework: **Fastify**
**Rationale**:
- 2-3x faster than Express
- Built-in TypeScript support
- Better schema validation (JSON Schema)
- Modern async/await patterns
- Still lightweight and flexible
### Frontend Framework: **Vite + React**
**Rationale**:
- Faster dev server and builds than Next.js
- Simpler for v1 (no SSR needed yet)
- Better HMR experience
- Easier to migrate to Next.js later if needed
### Component Library: **shadcn/ui (Radix + Tailwind)**
**Rationale**:
- Copy-paste components (no npm bloat)
- Built on Radix (accessible primitives)
- Tailwind for styling (mobile-first)
- Highly customizable
### Database: **PostgreSQL 15 + Prisma**
**Rationale**:
- ACID compliance for compliance data
- JSON support for flexible metadata
- Prisma provides type-safe queries
- Easy migrations
---
## Implementation Phases
### Phase 1A: Infrastructure Setup (Week 1)
**Goal**: Set up development environment and CI/CD
#### Tasks
1. **Backend Setup**
- [ ] Initialize Node.js project with TypeScript
- [ ] Configure Fastify with TypeScript
- [ ] Set up Prisma with PostgreSQL
- [ ] Configure ESLint + Prettier
- [ ] Set up Jest for testing
- [ ] Create Docker Compose for local dev
- [ ] Configure environment variables
2. **Frontend Setup**
- [ ] Initialize Vite + React + TypeScript
- [ ] Install and configure Tailwind CSS
- [ ] Set up shadcn/ui components
- [ ] Configure React Router
- [ ] Set up Vitest + React Testing Library
- [ ] Configure ESLint + Prettier
3. **Infrastructure**
- [ ] Create Git repository
- [ ] Set up .gitignore files
- [ ] Create README files
- [ ] Set up Docker Compose (backend, frontend, db, redis)
- [ ] Configure VS Code workspace settings
**Deliverables**:
- Working dev environment with hot reload
- Docker Compose setup for local development
- Basic project structure for backend and frontend
---
### Phase 1B: Authentication & RBAC (Week 2)
**Goal**: Implement secure authentication and role-based access control
#### Tasks
1. **Database Schema**
- [ ] Create User model (Prisma schema)
- [ ] Create Role model
- [ ] Create Session model (optional, if not using Redis)
- [ ] Run migrations
2. **Backend Auth**
- [ ] Implement password hashing (bcrypt)
- [ ] Implement JWT generation (access + refresh tokens)
- [ ] Create auth routes (`/api/auth/register`, `/api/auth/login`, `/api/auth/refresh`, `/api/auth/logout`)
- [ ] Create auth middleware (verify JWT)
- [ ] Create RBAC middleware (check roles/permissions)
- [ ] Write unit tests for auth service
- [ ] Write integration tests for auth endpoints
3. **Frontend Auth**
- [ ] Create AuthContext and useAuth hook
- [ ] Create Login page
- [ ] Create Register page (admin-only for v1)
- [ ] Implement token storage (httpOnly cookies + localStorage)
- [ ] Implement token refresh logic
- [ ] Create ProtectedRoute component
- [ ] Create role-based UI rendering
4. **Seed Data**
- [ ] Create seed script for default roles (Owner, Compliance Manager, Head Grower, Staff, Accountant)
- [ ] Create seed script for test users
**Deliverables**:
- Working login/logout flow
- JWT-based authentication
- RBAC middleware protecting routes
- Seed data for testing
**API Endpoints**:
- `POST /api/auth/register` - Register new user (admin-only)
- `POST /api/auth/login` - Login with email/password
- `POST /api/auth/refresh` - Refresh access token
- `POST /api/auth/logout` - Logout and invalidate tokens
- `GET /api/auth/me` - Get current user
---
### Phase 1C: Core Data Models (Week 3)
**Goal**: Implement core domain models and CRUD operations
#### Tasks
1. **Batches & Rooms Module**
- [ ] Create Prisma schemas (Batch, Room, BatchNote, BatchPhoto, WeightLog)
- [ ] Run migrations
- [ ] Implement batch service (CRUD operations)
- [ ] Implement room service (CRUD operations)
- [ ] Create batch routes (`/api/batches`)
- [ ] Create room routes (`/api/rooms`)
- [ ] Write unit tests
- [ ] Write integration tests
2. **Tasks Module**
- [ ] Create Prisma schemas (Task, TaskTemplate)
- [ ] Run migrations
- [ ] Implement task service (CRUD operations)
- [ ] Implement task template service
- [ ] Create task routes (`/api/tasks`, `/api/tasks/templates`)
- [ ] Write unit tests
- [ ] Write integration tests
3. **Labor Module**
- [ ] Create Prisma schemas (TimeEntry, WageRate)
- [ ] Run migrations
- [ ] Implement timeclock service (clock in/out logic)
- [ ] Create labor routes (`/api/labor/clock-in`, `/api/labor/clock-out`, `/api/labor/time-entries`)
- [ ] Write unit tests
- [ ] Write integration tests
4. **Compliance Module**
- [ ] Create Prisma schema (ComplianceDocument, AuditLog)
- [ ] Run migrations
- [ ] Implement document storage (local filesystem or S3-compatible)
- [ ] Implement document service (upload, download, delete)
- [ ] Create compliance routes (`/api/compliance/documents`)
- [ ] Write unit tests
- [ ] Write integration tests
**Deliverables**:
- Working CRUD APIs for all core entities
- Database migrations applied
- Unit and integration tests passing
- Postman/Insomnia collection for testing
**API Endpoints Summary**:
- Batches: `GET/POST/PATCH/DELETE /api/batches`, `POST /api/batches/:id/weights`
- Rooms: `GET/POST/PATCH/DELETE /api/rooms`
- Tasks: `GET/POST/PATCH/DELETE /api/tasks`, `POST /api/tasks/:id/complete`
- Labor: `POST /api/labor/clock-in`, `POST /api/labor/clock-out`, `GET /api/labor/time-entries`
- Compliance: `GET/POST/PATCH/DELETE /api/compliance/documents`, `GET /api/compliance/documents/:id/download`
---
### Phase 1D: Frontend UI (Week 4-5)
**Goal**: Build minimal viable UI for each feature
#### Tasks
1. **Design System**
- [ ] Set up Tailwind config with design tokens (colors, spacing, fonts)
- [ ] Create base UI components (Button, Input, Card, Badge, Dialog, Dropdown)
- [ ] Create layout components (Header, Sidebar, Footer)
- [ ] Implement dark mode toggle
- [ ] Create responsive breakpoints
2. **Dashboard & Navigation**
- [ ] Create Dashboard page (overview widgets)
- [ ] Create Sidebar navigation
- [ ] Create Header with user menu
- [ ] Implement routing (React Router)
3. **Batches & Rooms UI**
- [ ] Create BatchList page
- [ ] Create BatchDetail page
- [ ] Create BatchForm (create/edit)
- [ ] Create RoomList page
- [ ] Create RoomDetail page
- [ ] Create RoomForm (create/edit)
- [ ] Create WeightLogForm component
4. **Tasks UI**
- [ ] Create TaskList page (with filters)
- [ ] Create TodayView page (mobile-optimized)
- [ ] Create TaskDetail page
- [ ] Create TaskForm (create/edit)
- [ ] Create TaskTemplateForm
5. **Labor UI**
- [ ] Create TimeclockWidget component
- [ ] Create TimeEntryList page
- [ ] Create LaborReports page (basic hours report)
6. **Compliance UI**
- [ ] Create DocumentList page
- [ ] Create DocumentUploader component
- [ ] Create DocumentPreview component (PDF/image viewer)
7. **Settings UI**
- [ ] Create SettingsPage (user preferences, notification settings)
- [ ] Create UserManagement page (admin-only)
**Deliverables**:
- Fully functional UI for all Phase 1 features
- Mobile-responsive design
- Dark mode support
- Accessible components (WCAG 2.1 AA)
---
### Phase 1E: Testing & Polish (Week 6)
**Goal**: Comprehensive testing and UX polish
#### Tasks
1. **Backend Testing**
- [ ] Achieve 80%+ code coverage for services
- [ ] Write integration tests for all API endpoints
- [ ] Test RBAC permissions for all routes
- [ ] Test error handling and edge cases
2. **Frontend Testing**
- [ ] Write component tests for all UI components
- [ ] Write integration tests for key workflows (login, create batch, clock in)
- [ ] Test responsive design on mobile/tablet/desktop
- [ ] Test dark mode
3. **UX Polish**
- [ ] Optimize mobile tap targets (44×44px minimum)
- [ ] Add loading states and skeletons
- [ ] Add error states and retry logic
- [ ] Add success toasts and confirmations
- [ ] Optimize form validation and error messages
- [ ] Add keyboard shortcuts for power users
4. **Performance**
- [ ] Optimize API response times (< 200ms p95)
- [ ] Optimize frontend bundle size
- [ ] Add pagination for large lists
- [ ] Add caching for frequently accessed data
5. **Documentation**
- [ ] Write API documentation (OpenAPI/Swagger)
- [ ] Write user guide for each feature
- [ ] Write deployment guide
- [ ] Update README files
**Deliverables**:
- 80%+ test coverage
- Polished UX with loading/error states
- API documentation
- User guide
---
## Technical Specifications
### Database Schema (Prisma)
```prisma
// User & Auth
model User {
id String @id @default(cuid())
email String @unique
password String // bcrypt hashed
name String
roleId String
role Role @relation(fields: [roleId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Role {
id String @id @default(cuid())
name String @unique
description String?
users User[]
wageRates WageRate[]
}
// Batches & Rooms
model Batch {
id String @id @default(cuid())
batchNumber String @unique
strain String
stage BatchStage @default(CLONE_IN)
plantCount Int
startDate DateTime
roomId String?
room Room? @relation(fields: [roomId], references: [id])
metrcTags String[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Room {
id String @id @default(cuid())
name String
type RoomType
capacity Int?
status RoomStatus @default(ACTIVE)
batches Batch[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
// Tasks
model Task {
id String @id @default(cuid())
name String
status TaskStatus @default(PENDING)
dueDate DateTime
assigneeId String?
assignee User? @relation(fields: [assigneeId], references: [id])
roomId String?
room Room? @relation(fields: [roomId], references: [id])
batchId String?
batch Batch? @relation(fields: [batchId], references: [id])
completedAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
// Labor
model TimeEntry {
id String @id @default(cuid())
userId String
user User @relation(fields: [userId], references: [id])
clockIn DateTime
clockOut DateTime?
duration Int?
roomId String?
room Room? @relation(fields: [roomId], references: [id])
createdAt DateTime @default(now())
}
model WageRate {
id String @id @default(cuid())
roleId String
role Role @relation(fields: [roleId], references: [id])
hourlyRate Float
effectiveDate DateTime
createdAt DateTime @default(now())
}
// Compliance
model ComplianceDocument {
id String @id @default(cuid())
type DocumentType
filename String
url String
date DateTime
uploadedBy String
user User @relation(fields: [uploadedBy], references: [id])
createdAt DateTime @default(now())
}
// Enums
enum BatchStage {
CLONE_IN
VEGETATIVE
FLOWERING
HARVEST
DRYING
CURING
FINISHED
}
enum RoomType {
VEG
FLOWER
DRY
FACILITY
}
enum RoomStatus {
ACTIVE
CLEANING
MAINTENANCE
}
enum TaskStatus {
PENDING
IN_PROGRESS
COMPLETE
OVERDUE
}
enum DocumentType {
TAX_MONTHLY
UTILITY_BILL
RENT_LEASE
INVOICE
LICENSE_PERMIT
OTHER
}
```
---
## Risk Management
| Risk | Impact | Mitigation | Owner |
|------|--------|------------|-------|
| Scope creep in Phase 1 | High | Strict adherence to Phase 1 spec; defer enhancements to Phase 2 | PM |
| Database schema changes | Medium | Use Prisma migrations; test migrations thoroughly | Backend Lead |
| Mobile UX issues | High | Test on real devices early; prioritize tablet testing | Frontend Lead |
| Authentication vulnerabilities | Critical | Security audit of auth code; use established libraries (bcrypt, jsonwebtoken) | Backend Lead |
| Performance issues with large datasets | Medium | Implement pagination early; add database indexes | Backend Lead |
---
## Success Metrics
### Phase 1 Completion Criteria
- [ ] All Phase 1 features implemented and tested
- [ ] 80%+ test coverage (backend and frontend)
- [ ] All API endpoints documented
- [ ] User guide written
- [ ] Deployment guide written
- [ ] Application deployed to staging environment
- [ ] Demo completed with stakeholders
### Performance Targets
- [ ] API response time < 200ms (p95)
- [ ] Page load time < 2s on 3G
- [ ] Time to interactive < 3s on 3G
- [ ] Lighthouse score > 90 (Performance, Accessibility)
### Quality Targets
- [ ] Zero critical security vulnerabilities
- [ ] Zero high-priority bugs
- [ ] WCAG 2.1 AA compliance
- [ ] Mobile-responsive on all pages
---
## Timeline
**Total Duration**: 6 weeks
- **Week 1**: Infrastructure Setup
- **Week 2**: Authentication & RBAC
- **Week 3**: Core Data Models
- **Week 4-5**: Frontend UI
- **Week 6**: Testing & Polish
**Milestones**:
- End of Week 2: Working auth system
- End of Week 3: All APIs functional
- End of Week 5: All UI complete
- End of Week 6: Phase 1 complete and deployed
---
## Next Steps
1. **Review this plan** with the team
2. **Break down into tasks** using `/speckit.tasks`
3. **Assign tasks** to team members
4. **Set up project tracking** (GitHub Projects, Linear, etc.)
5. **Begin Week 1**: Infrastructure Setup