- 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
14 KiB
Tasks: Week 1 — Infrastructure Setup
Plan: Phase 1 Foundation
Week: 1 of 6
Status: Ready
Created: 2025-12-08
Overview
Week 1 focuses on setting up the development environment, project structure, and foundational tooling for both backend and frontend. By the end of this week, developers should be able to run the full stack locally with hot reload.
Success Criteria:
- ✅ Backend runs on
http://localhost:3000with hot reload - ✅ Frontend runs on
http://localhost:5173with hot reload - ✅ PostgreSQL database accessible
- ✅ Docker Compose brings up entire stack
- ✅ Linting and formatting configured
- ✅ Testing frameworks configured
Task List
Backend Setup
TASK-001: Initialize Backend Project
Priority: P0 (Blocker)
Estimated Time: 1 hour
Assignee: Backend Lead
Description: Create Node.js project with TypeScript and Fastify
Steps:
cd ca-grow-ops-manager
mkdir backend
cd backend
npm init -y
npm install fastify @fastify/cors @fastify/helmet @fastify/jwt
npm install -D typescript @types/node tsx nodemon
npm install -D @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint prettier
npx tsc --init
Acceptance Criteria:
package.jsoncreated with correct dependenciestsconfig.jsonconfigured for Node.js- TypeScript compiles without errors
- Basic Fastify server runs on port 3000
Files to Create:
backend/package.jsonbackend/tsconfig.jsonbackend/src/server.ts(basic Fastify server)backend/src/app.ts(Fastify app configuration)
TASK-002: Configure Prisma with PostgreSQL
Priority: P0 (Blocker)
Estimated Time: 1.5 hours
Assignee: Backend Lead
Depends On: TASK-001
Description: Set up Prisma ORM with PostgreSQL connection
Steps:
cd backend
npm install prisma @prisma/client
npm install -D prisma
npx prisma init
Acceptance Criteria:
- Prisma schema file created (
prisma/schema.prisma) - Database connection string configured in
.env - Prisma Client generated
- Can connect to PostgreSQL database
Files to Create:
backend/prisma/schema.prismabackend/.env.examplebackend/.env(gitignored)
Prisma Schema (Initial):
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(cuid())
email String @unique
name String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
TASK-003: Configure ESLint and Prettier (Backend)
Priority: P1
Estimated Time: 30 minutes
Assignee: Backend Lead
Depends On: TASK-001
Description: Set up code quality tools for backend
Acceptance Criteria:
- ESLint configured for TypeScript
- Prettier configured
npm run lintworksnpm run formatworks- VS Code auto-formats on save
Files to Create:
backend/.eslintrc.jsonbackend/.prettierrcbackend/.prettierignore
ESLint Config:
{
"parser": "@typescript-eslint/parser",
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"rules": {
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/no-explicit-any": "warn"
}
}
TASK-004: Configure Jest for Backend Testing
Priority: P1
Estimated Time: 1 hour
Assignee: Backend Lead
Depends On: TASK-001
Description: Set up Jest for unit and integration testing
Steps:
cd backend
npm install -D jest @types/jest ts-jest supertest @types/supertest
npx ts-jest config:init
Acceptance Criteria:
- Jest configured for TypeScript
npm testruns tests- Sample test passes
- Test coverage report generated
Files to Create:
backend/jest.config.jsbackend/src/__tests__/example.test.ts
Sample Test:
describe('Example Test', () => {
it('should pass', () => {
expect(1 + 1).toBe(2);
});
});
TASK-005: Create Backend Docker Configuration
Priority: P1
Estimated Time: 1 hour
Assignee: Backend Lead
Depends On: TASK-001, TASK-002
Description: Create Dockerfile and Docker Compose for backend
Acceptance Criteria:
- Dockerfile builds successfully
- Backend runs in Docker container
- Hot reload works in Docker
- Environment variables passed correctly
Files to Create:
backend/Dockerfilebackend/Dockerfile.devbackend/.dockerignore
Dockerfile.dev:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]
Frontend Setup
TASK-006: Initialize Frontend Project with Vite
Priority: P0 (Blocker)
Estimated Time: 1 hour
Assignee: Frontend Lead
Description: Create Vite + React + TypeScript project
Steps:
cd ca-grow-ops-manager
npm create vite@latest frontend -- --template react-ts
cd frontend
npm install
npm install react-router-dom
npm install -D @types/react-router-dom
Acceptance Criteria:
- Vite project created
- React + TypeScript configured
- Dev server runs on port 5173
- Hot reload works
Files Created (by Vite):
frontend/package.jsonfrontend/tsconfig.jsonfrontend/vite.config.tsfrontend/src/main.tsxfrontend/src/App.tsx
TASK-007: Install and Configure Tailwind CSS
Priority: P0 (Blocker)
Estimated Time: 1 hour
Assignee: Frontend Lead
Depends On: TASK-006
Description: Set up Tailwind CSS with custom design tokens
Steps:
cd frontend
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
Acceptance Criteria:
- Tailwind CSS configured
- Custom design tokens defined (colors, spacing, fonts)
- Dark mode configured
- Tailwind classes work in components
Files to Create/Modify:
frontend/tailwind.config.jsfrontend/postcss.config.jsfrontend/src/index.css
Tailwind Config:
export default {
content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
darkMode: 'class',
theme: {
extend: {
colors: {
primary: '#10b981',
secondary: '#3b82f6',
danger: '#ef4444',
warning: '#f59e0b',
success: '#10b981',
},
},
},
plugins: [],
};
TASK-008: Set Up shadcn/ui Components
Priority: P1
Estimated Time: 1.5 hours
Assignee: Frontend Lead
Depends On: TASK-007
Description: Install shadcn/ui and create base components
Steps:
cd frontend
npx shadcn-ui@latest init
npx shadcn-ui@latest add button
npx shadcn-ui@latest add input
npx shadcn-ui@latest add card
npx shadcn-ui@latest add dialog
npx shadcn-ui@latest add dropdown-menu
Acceptance Criteria:
- shadcn/ui configured
- Base components installed (Button, Input, Card, Dialog, Dropdown)
- Components render correctly
- Dark mode works with components
Files Created:
frontend/components.jsonfrontend/src/components/ui/button.tsxfrontend/src/components/ui/input.tsxfrontend/src/components/ui/card.tsx- etc.
TASK-009: Configure React Router
Priority: P1
Estimated Time: 1 hour
Assignee: Frontend Lead
Depends On: TASK-006
Description: Set up React Router with basic routes
Acceptance Criteria:
- React Router configured
- Basic routes created (/, /login, /dashboard)
- Navigation works
- 404 page created
Files to Create:
frontend/src/router.tsxfrontend/src/pages/HomePage.tsxfrontend/src/pages/LoginPage.tsxfrontend/src/pages/DashboardPage.tsxfrontend/src/pages/NotFoundPage.tsx
Router Setup:
import { createBrowserRouter } from 'react-router-dom';
import HomePage from './pages/HomePage';
import LoginPage from './pages/LoginPage';
import DashboardPage from './pages/DashboardPage';
export const router = createBrowserRouter([
{ path: '/', element: <HomePage /> },
{ path: '/login', element: <LoginPage /> },
{ path: '/dashboard', element: <DashboardPage /> },
{ path: '*', element: <NotFoundPage /> },
]);
TASK-010: Configure ESLint and Prettier (Frontend)
Priority: P1
Estimated Time: 30 minutes
Assignee: Frontend Lead
Depends On: TASK-006
Description: Set up code quality tools for frontend
Acceptance Criteria:
- ESLint configured for React + TypeScript
- Prettier configured
npm run lintworksnpm run formatworks- VS Code auto-formats on save
Files to Create:
frontend/.eslintrc.jsonfrontend/.prettierrcfrontend/.prettierignore
TASK-011: Configure Vitest for Frontend Testing
Priority: P1
Estimated Time: 1 hour
Assignee: Frontend Lead
Depends On: TASK-006
Description: Set up Vitest and React Testing Library
Steps:
cd frontend
npm install -D vitest @testing-library/react @testing-library/jest-dom @testing-library/user-event jsdom
Acceptance Criteria:
- Vitest configured
- React Testing Library configured
npm testruns tests- Sample component test passes
Files to Create:
frontend/vite.config.ts(add test config)frontend/src/setupTests.tsfrontend/src/components/__tests__/Button.test.tsx
Infrastructure & DevOps
TASK-012: Create Docker Compose Configuration
Priority: P0 (Blocker)
Estimated Time: 2 hours
Assignee: DevOps/Backend Lead
Depends On: TASK-005, TASK-006
Description: Create Docker Compose for full stack (backend, frontend, db, redis)
Acceptance Criteria:
docker-compose upstarts all services- Backend accessible at
http://localhost:3000 - Frontend accessible at
http://localhost:5173 - PostgreSQL accessible at
localhost:5432 - Redis accessible at
localhost:6379 - Hot reload works for backend and frontend
Files to Create:
docker-compose.ymldocker-compose.dev.yml
Docker Compose:
version: '3.8'
services:
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: ca_grow_ops
POSTGRES_PASSWORD: dev_password
POSTGRES_DB: ca_grow_ops_dev
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
backend:
build:
context: ./backend
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://ca_grow_ops:dev_password@db:5432/ca_grow_ops_dev
REDIS_URL: redis://redis:6379
NODE_ENV: development
volumes:
- ./backend:/app
- /app/node_modules
depends_on:
- db
- redis
frontend:
build:
context: ./frontend
dockerfile: Dockerfile.dev
ports:
- "5173:5173"
environment:
VITE_API_URL: http://localhost:3000/api
volumes:
- ./frontend:/app
- /app/node_modules
depends_on:
- backend
volumes:
postgres_data:
TASK-013: Create Git Repository and .gitignore
Priority: P0 (Blocker)
Estimated Time: 30 minutes
Assignee: Any Developer
Description: Initialize Git repository with proper .gitignore files
Acceptance Criteria:
- Git repository initialized
.gitignorefiles created for root, backend, frontend- Initial commit made
- Remote repository created (GitHub/GitLab)
Files to Create:
.gitignore(root)backend/.gitignorefrontend/.gitignore
Root .gitignore:
node_modules/
.env
.env.local
*.log
.DS_Store
dist/
build/
coverage/
TASK-014: Create VS Code Workspace Settings
Priority: P2
Estimated Time: 30 minutes
Assignee: Any Developer
Description: Configure VS Code for optimal DX
Acceptance Criteria:
- Workspace settings configured
- Recommended extensions listed
- Auto-format on save enabled
- ESLint integration working
Files to Create:
.vscode/settings.json.vscode/extensions.json
VS Code Settings:
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"typescript.tsdk": "node_modules/typescript/lib"
}
TASK-015: Create README Files
Priority: P2
Estimated Time: 1 hour
Assignee: Any Developer
Description: Update README files with setup instructions
Acceptance Criteria:
- Root README updated with quick start
- Backend README updated
- Frontend README updated
- Docker Compose instructions included
Files to Update:
README.md(root)backend/README.mdfrontend/README.md
Task Dependencies
TASK-001 (Backend Init)
├─> TASK-002 (Prisma)
├─> TASK-003 (ESLint/Prettier)
├─> TASK-004 (Jest)
└─> TASK-005 (Docker)
TASK-006 (Frontend Init)
├─> TASK-007 (Tailwind)
│ └─> TASK-008 (shadcn/ui)
├─> TASK-009 (React Router)
├─> TASK-010 (ESLint/Prettier)
└─> TASK-011 (Vitest)
TASK-005 + TASK-006
└─> TASK-012 (Docker Compose)
TASK-013 (Git) - No dependencies
TASK-014 (VS Code) - No dependencies
TASK-015 (READMEs) - After all setup tasks
Verification Checklist
At the end of Week 1, verify:
Backend
cd backend && npm installworksnpm run devstarts server on port 3000npm run lintpassesnpm testpasses- Prisma Client generated
- Can connect to PostgreSQL
Frontend
cd frontend && npm installworksnpm run devstarts server on port 5173npm run lintpassesnpm testpasses- Tailwind classes work
- shadcn/ui components render
Docker
docker-compose upstarts all services- Backend accessible at http://localhost:3000
- Frontend accessible at http://localhost:5173
- Hot reload works for both
Git
- Repository initialized
- Initial commit made
- Remote repository connected
Estimated Total Time
Backend: 6 hours
Frontend: 6.5 hours
Infrastructure: 3 hours
Total: ~15.5 hours (2 days for 1 developer, or 1 day for 2 developers)
Next Steps
After completing Week 1 tasks:
- Review all setup with the team
- Test full stack locally
- Proceed to Week 2: Authentication & RBAC