Create comprehensive AGENTS.md with 10 specialized agents covering: - P0 Critical: Authentication (NextAuth.js) and Database (Prisma/PostgreSQL) - P1 High: File Storage, Production Deployment, Testing/CI/CD - P2 Medium: Real-Time Updates, Analytics Dashboard, Notifications - P3 Enhancement: Marketplace Foundation, Mobile/PWA Optimization Each agent includes detailed tasks, file structure, dependencies, and success criteria.
1220 lines
34 KiB
Markdown
1220 lines
34 KiB
Markdown
# LocalGreenChain Agent Deployment Plan
|
|
|
|
> **Generated**: 2025-11-23
|
|
> **Purpose**: 10 parallel agents for worktree deployment
|
|
> **Branch Pattern**: `claude/agent-{N}-{task}-{session-id}`
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
This document defines 10 specialized agents to implement the critical next steps for LocalGreenChain. Each agent works independently on a dedicated worktree and can be deployed in parallel.
|
|
|
|
### Priority Matrix
|
|
|
|
| Priority | Agents | Focus Area |
|
|
|----------|--------|------------|
|
|
| **P0 - Critical** | Agent 1, 2 | Auth + Database (Blocking MVP) |
|
|
| **P1 - High** | Agent 3, 4, 5 | File Storage + Deployment + Testing |
|
|
| **P2 - Medium** | Agent 6, 7, 8 | Real-time + Analytics + Notifications |
|
|
| **P3 - Enhancement** | Agent 9, 10 | Marketplace + Mobile |
|
|
|
|
---
|
|
|
|
## Agent 1: Authentication System
|
|
|
|
**Priority**: P0 - Critical (Blocks all user features)
|
|
**Estimated Complexity**: High
|
|
**Dependencies**: None
|
|
|
|
### Objective
|
|
Implement a complete user authentication system with NextAuth.js supporting multiple providers.
|
|
|
|
### Tasks
|
|
|
|
1. **Install Dependencies**
|
|
```bash
|
|
bun add next-auth @next-auth/prisma-adapter bcryptjs
|
|
bun add -D @types/bcryptjs
|
|
```
|
|
|
|
2. **Create Auth Configuration**
|
|
- [ ] Create `pages/api/auth/[...nextauth].ts` with NextAuth configuration
|
|
- [ ] Configure providers: Credentials, GitHub, Google
|
|
- [ ] Set up JWT strategy with secure token handling
|
|
- [ ] Implement session callback for user data enrichment
|
|
|
|
3. **Create Auth Pages**
|
|
- [ ] `pages/auth/signin.tsx` - Custom sign-in page
|
|
- [ ] `pages/auth/signup.tsx` - Registration page
|
|
- [ ] `pages/auth/forgot-password.tsx` - Password reset flow
|
|
- [ ] `pages/auth/verify-email.tsx` - Email verification
|
|
|
|
4. **Create Auth Components**
|
|
- [ ] `components/auth/LoginForm.tsx`
|
|
- [ ] `components/auth/RegisterForm.tsx`
|
|
- [ ] `components/auth/PasswordResetForm.tsx`
|
|
- [ ] `components/auth/SocialLoginButtons.tsx`
|
|
- [ ] `components/auth/AuthGuard.tsx` - Route protection wrapper
|
|
|
|
5. **Create Auth Hooks & Context**
|
|
- [ ] `lib/auth/useAuth.ts` - Authentication hook
|
|
- [ ] `lib/auth/AuthContext.tsx` - Auth state provider
|
|
- [ ] `lib/auth/permissions.ts` - Role-based permissions
|
|
|
|
6. **Security Implementation**
|
|
- [ ] Password hashing with bcrypt (min 12 rounds)
|
|
- [ ] CSRF protection for forms
|
|
- [ ] Rate limiting on auth endpoints
|
|
- [ ] Secure cookie configuration
|
|
- [ ] Session invalidation on password change
|
|
|
|
7. **API Middleware**
|
|
- [ ] `lib/auth/withAuth.ts` - API route protection middleware
|
|
- [ ] `lib/auth/withRole.ts` - Role-based API protection
|
|
- [ ] Update existing API routes to require authentication where needed
|
|
|
|
### Files to Create
|
|
```
|
|
lib/auth/
|
|
├── AuthContext.tsx
|
|
├── useAuth.ts
|
|
├── permissions.ts
|
|
├── withAuth.ts
|
|
├── withRole.ts
|
|
└── types.ts
|
|
|
|
pages/api/auth/
|
|
├── [...nextauth].ts
|
|
├── register.ts
|
|
├── forgot-password.ts
|
|
└── verify-email.ts
|
|
|
|
pages/auth/
|
|
├── signin.tsx
|
|
├── signup.tsx
|
|
├── forgot-password.tsx
|
|
└── verify-email.tsx
|
|
|
|
components/auth/
|
|
├── LoginForm.tsx
|
|
├── RegisterForm.tsx
|
|
├── PasswordResetForm.tsx
|
|
├── SocialLoginButtons.tsx
|
|
└── AuthGuard.tsx
|
|
```
|
|
|
|
### Success Criteria
|
|
- [ ] Users can register with email/password
|
|
- [ ] Users can sign in with credentials or OAuth
|
|
- [ ] Protected routes redirect to sign-in
|
|
- [ ] Session persists across page refreshes
|
|
- [ ] Password reset flow works end-to-end
|
|
- [ ] All auth tests pass
|
|
|
|
---
|
|
|
|
## Agent 2: Database Integration
|
|
|
|
**Priority**: P0 - Critical (Blocks data persistence)
|
|
**Estimated Complexity**: High
|
|
**Dependencies**: None (Agent 1 can use schema once ready)
|
|
|
|
### Objective
|
|
Implement PostgreSQL database with Prisma ORM, replacing all file-based storage.
|
|
|
|
### Tasks
|
|
|
|
1. **Install Dependencies**
|
|
```bash
|
|
bun add @prisma/client
|
|
bun add -D prisma
|
|
```
|
|
|
|
2. **Initialize Prisma**
|
|
```bash
|
|
bunx prisma init
|
|
```
|
|
|
|
3. **Design Complete Schema**
|
|
- [ ] Create `prisma/schema.prisma` with all models:
|
|
|
|
```prisma
|
|
// Core Models
|
|
model User {
|
|
id String @id @default(cuid())
|
|
email String @unique
|
|
emailVerified DateTime?
|
|
passwordHash String?
|
|
name String?
|
|
image String?
|
|
role Role @default(USER)
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
plants Plant[]
|
|
farms VerticalFarm[]
|
|
preferences ConsumerPreference[]
|
|
auditLogs AuditLog[]
|
|
}
|
|
|
|
model Plant {
|
|
id String @id @default(cuid())
|
|
name String
|
|
species String
|
|
variety String?
|
|
parentId String?
|
|
generation Int @default(1)
|
|
registeredAt DateTime @default(now())
|
|
ownerId String
|
|
locationLat Float?
|
|
locationLng Float?
|
|
blockHash String?
|
|
|
|
owner User @relation(fields: [ownerId], references: [id])
|
|
parent Plant? @relation("PlantLineage", fields: [parentId], references: [id])
|
|
children Plant[] @relation("PlantLineage")
|
|
transportEvents TransportEvent[]
|
|
environment EnvironmentRecord[]
|
|
}
|
|
|
|
model TransportEvent {
|
|
id String @id @default(cuid())
|
|
plantId String
|
|
eventType TransportEventType
|
|
fromLat Float?
|
|
fromLng Float?
|
|
toLat Float?
|
|
toLng Float?
|
|
distance Float?
|
|
carbonKg Float?
|
|
timestamp DateTime @default(now())
|
|
metadata Json?
|
|
|
|
plant Plant @relation(fields: [plantId], references: [id])
|
|
}
|
|
|
|
model VerticalFarm {
|
|
id String @id @default(cuid())
|
|
name String
|
|
ownerId String
|
|
totalArea Float
|
|
zones Int
|
|
createdAt DateTime @default(now())
|
|
|
|
owner User @relation(fields: [ownerId], references: [id])
|
|
farmZones FarmZone[]
|
|
batches CropBatch[]
|
|
}
|
|
|
|
// ... additional models for zones, batches, recipes, etc.
|
|
```
|
|
|
|
4. **Create Database Service Layer**
|
|
- [ ] `lib/db/prisma.ts` - Prisma client singleton
|
|
- [ ] `lib/db/plants.ts` - Plant CRUD operations
|
|
- [ ] `lib/db/users.ts` - User CRUD operations
|
|
- [ ] `lib/db/transport.ts` - Transport event operations
|
|
- [ ] `lib/db/farms.ts` - Vertical farm operations
|
|
- [ ] `lib/db/demand.ts` - Demand/preference operations
|
|
|
|
5. **Create Migration System**
|
|
- [ ] Initial migration with all models
|
|
- [ ] Seed script for development data
|
|
- [ ] Migration script for production deployments
|
|
|
|
6. **Update Existing Code**
|
|
- [ ] Refactor `PlantChain` to use database
|
|
- [ ] Update all API routes to use Prisma
|
|
- [ ] Remove file-based storage code
|
|
- [ ] Update agents to use database queries
|
|
|
|
7. **Database Utilities**
|
|
- [ ] Connection pooling configuration
|
|
- [ ] Query logging for development
|
|
- [ ] Error handling wrapper
|
|
- [ ] Transaction helpers
|
|
|
|
### Files to Create
|
|
```
|
|
prisma/
|
|
├── schema.prisma
|
|
├── migrations/
|
|
└── seed.ts
|
|
|
|
lib/db/
|
|
├── prisma.ts
|
|
├── plants.ts
|
|
├── users.ts
|
|
├── transport.ts
|
|
├── farms.ts
|
|
├── demand.ts
|
|
├── audit.ts
|
|
└── types.ts
|
|
```
|
|
|
|
### Success Criteria
|
|
- [ ] All models defined in Prisma schema
|
|
- [ ] Migrations run successfully
|
|
- [ ] All API routes use database
|
|
- [ ] Data persists across restarts
|
|
- [ ] Seed data populates correctly
|
|
- [ ] Database tests pass
|
|
|
|
---
|
|
|
|
## Agent 3: File Upload & Storage
|
|
|
|
**Priority**: P1 - High
|
|
**Estimated Complexity**: Medium
|
|
**Dependencies**: Agent 2 (Database for metadata)
|
|
|
|
### Objective
|
|
Implement cloud-based file storage for plant photos, documents, and certificates.
|
|
|
|
### Tasks
|
|
|
|
1. **Install Dependencies**
|
|
```bash
|
|
bun add @aws-sdk/client-s3 @aws-sdk/s3-request-presigner
|
|
bun add sharp multer
|
|
bun add -D @types/multer
|
|
```
|
|
|
|
2. **Configure Storage Provider**
|
|
- [ ] `lib/storage/config.ts` - S3/R2/MinIO configuration
|
|
- [ ] Support for multiple providers (AWS S3, Cloudflare R2, local MinIO)
|
|
- [ ] Environment variable setup for credentials
|
|
|
|
3. **Create Upload Service**
|
|
- [ ] `lib/storage/uploadService.ts` - Core upload functionality
|
|
- [ ] Presigned URL generation for direct uploads
|
|
- [ ] File type validation (images, PDFs only)
|
|
- [ ] File size limits (10MB default)
|
|
- [ ] Automatic image optimization with Sharp
|
|
|
|
4. **Create Image Processing Pipeline**
|
|
- [ ] `lib/storage/imageProcessor.ts`
|
|
- [ ] Generate thumbnails (150x150, 300x300, 600x600)
|
|
- [ ] WebP conversion for optimization
|
|
- [ ] EXIF data extraction for metadata
|
|
- [ ] Image compression
|
|
|
|
5. **Create API Endpoints**
|
|
- [ ] `pages/api/upload/image.ts` - Image upload endpoint
|
|
- [ ] `pages/api/upload/document.ts` - Document upload
|
|
- [ ] `pages/api/upload/presigned.ts` - Get presigned URL
|
|
- [ ] `pages/api/upload/[fileId].ts` - Get/delete file
|
|
|
|
6. **Create UI Components**
|
|
- [ ] `components/upload/ImageUploader.tsx` - Drag & drop image upload
|
|
- [ ] `components/upload/PhotoGallery.tsx` - Plant photo gallery
|
|
- [ ] `components/upload/DocumentUploader.tsx` - PDF/document upload
|
|
- [ ] `components/upload/ProgressBar.tsx` - Upload progress
|
|
|
|
7. **Database Integration**
|
|
- [ ] Add `File` model to Prisma schema
|
|
- [ ] Track upload metadata, URLs, and associations
|
|
- [ ] Implement soft delete for files
|
|
|
|
### Files to Create
|
|
```
|
|
lib/storage/
|
|
├── config.ts
|
|
├── uploadService.ts
|
|
├── imageProcessor.ts
|
|
├── providers/
|
|
│ ├── s3.ts
|
|
│ ├── r2.ts
|
|
│ └── local.ts
|
|
└── types.ts
|
|
|
|
pages/api/upload/
|
|
├── image.ts
|
|
├── document.ts
|
|
├── presigned.ts
|
|
└── [fileId].ts
|
|
|
|
components/upload/
|
|
├── ImageUploader.tsx
|
|
├── PhotoGallery.tsx
|
|
├── DocumentUploader.tsx
|
|
└── ProgressBar.tsx
|
|
```
|
|
|
|
### Success Criteria
|
|
- [ ] Images upload successfully to cloud storage
|
|
- [ ] Thumbnails generate automatically
|
|
- [ ] Presigned URLs work for direct uploads
|
|
- [ ] Gallery displays plant photos
|
|
- [ ] File deletion works properly
|
|
- [ ] Upload tests pass
|
|
|
|
---
|
|
|
|
## Agent 4: Production Deployment
|
|
|
|
**Priority**: P1 - High
|
|
**Estimated Complexity**: Medium
|
|
**Dependencies**: Agent 1, 2 (for full deployment)
|
|
|
|
### Objective
|
|
Create complete production deployment infrastructure with Docker, logging, and monitoring.
|
|
|
|
### Tasks
|
|
|
|
1. **Docker Configuration**
|
|
- [ ] `Dockerfile` - Multi-stage production build
|
|
- [ ] `docker-compose.yml` - Full stack with DB, Redis
|
|
- [ ] `docker-compose.dev.yml` - Development environment
|
|
- [ ] `.dockerignore` - Exclude unnecessary files
|
|
|
|
2. **Create Dockerfile**
|
|
```dockerfile
|
|
# Build stage
|
|
FROM oven/bun:1 as builder
|
|
WORKDIR /app
|
|
COPY package.json bun.lockb ./
|
|
RUN bun install --frozen-lockfile
|
|
COPY . .
|
|
RUN bun run build
|
|
|
|
# Production stage
|
|
FROM oven/bun:1-slim
|
|
WORKDIR /app
|
|
COPY --from=builder /app/.next ./.next
|
|
COPY --from=builder /app/public ./public
|
|
COPY --from=builder /app/node_modules ./node_modules
|
|
COPY --from=builder /app/package.json ./
|
|
EXPOSE 3000
|
|
CMD ["bun", "run", "start"]
|
|
```
|
|
|
|
3. **Environment Configuration**
|
|
- [ ] `.env.example` - Template with all variables
|
|
- [ ] `lib/config/env.ts` - Environment validation with Zod
|
|
- [ ] Separate configs for dev/staging/production
|
|
- [ ] Secrets management documentation
|
|
|
|
4. **Logging System**
|
|
- [ ] `lib/logging/logger.ts` - Structured logging with pino
|
|
- [ ] Request/response logging middleware
|
|
- [ ] Error logging with stack traces
|
|
- [ ] Audit logging integration
|
|
- [ ] Log rotation configuration
|
|
|
|
5. **Error Tracking**
|
|
- [ ] Sentry integration setup
|
|
- [ ] `lib/monitoring/sentry.ts` - Sentry configuration
|
|
- [ ] Error boundary components
|
|
- [ ] Source map uploads for production
|
|
|
|
6. **Health Checks & Monitoring**
|
|
- [ ] `pages/api/health.ts` - Health check endpoint
|
|
- [ ] `pages/api/health/ready.ts` - Readiness probe
|
|
- [ ] `pages/api/health/live.ts` - Liveness probe
|
|
- [ ] Prometheus metrics endpoint
|
|
- [ ] Grafana dashboard configuration
|
|
|
|
7. **CI/CD Pipeline**
|
|
- [ ] `.github/workflows/ci.yml` - Test and lint on PR
|
|
- [ ] `.github/workflows/deploy.yml` - Production deployment
|
|
- [ ] `.github/workflows/preview.yml` - Preview deployments
|
|
- [ ] Automated security scanning
|
|
|
|
8. **Security Hardening**
|
|
- [ ] Security headers middleware
|
|
- [ ] Rate limiting configuration
|
|
- [ ] CORS policy setup
|
|
- [ ] CSP (Content Security Policy)
|
|
|
|
### Files to Create
|
|
```
|
|
Dockerfile
|
|
docker-compose.yml
|
|
docker-compose.dev.yml
|
|
.dockerignore
|
|
.env.example
|
|
|
|
lib/config/
|
|
├── env.ts
|
|
└── index.ts
|
|
|
|
lib/logging/
|
|
├── logger.ts
|
|
└── middleware.ts
|
|
|
|
lib/monitoring/
|
|
├── sentry.ts
|
|
├── metrics.ts
|
|
└── health.ts
|
|
|
|
.github/workflows/
|
|
├── ci.yml
|
|
├── deploy.yml
|
|
└── preview.yml
|
|
|
|
infra/
|
|
├── grafana/
|
|
│ └── dashboard.json
|
|
└── prometheus/
|
|
└── prometheus.yml
|
|
```
|
|
|
|
### Success Criteria
|
|
- [ ] Docker build succeeds
|
|
- [ ] docker-compose up runs full stack
|
|
- [ ] Health checks respond correctly
|
|
- [ ] Logs output in structured JSON
|
|
- [ ] CI pipeline runs on PRs
|
|
- [ ] Deployment to staging works
|
|
|
|
---
|
|
|
|
## Agent 5: Testing & CI/CD
|
|
|
|
**Priority**: P1 - High
|
|
**Estimated Complexity**: Medium
|
|
**Dependencies**: None
|
|
|
|
### Objective
|
|
Comprehensive test coverage and automated CI/CD pipeline.
|
|
|
|
### Tasks
|
|
|
|
1. **Expand Unit Tests**
|
|
- [ ] Test all agent classes (10 agents)
|
|
- [ ] Test blockchain operations
|
|
- [ ] Test transport tracker
|
|
- [ ] Test demand forecaster
|
|
- [ ] Test vertical farm controller
|
|
- [ ] Target: 80% code coverage
|
|
|
|
2. **API Integration Tests**
|
|
- [ ] Test all 52 API endpoints
|
|
- [ ] Test authentication flows
|
|
- [ ] Test error responses
|
|
- [ ] Test rate limiting
|
|
- [ ] Mock database for tests
|
|
|
|
3. **E2E Tests with Cypress**
|
|
- [ ] `cypress/e2e/auth.cy.ts` - Authentication flows
|
|
- [ ] `cypress/e2e/plant-registration.cy.ts` - Plant lifecycle
|
|
- [ ] `cypress/e2e/transport.cy.ts` - Transport tracking
|
|
- [ ] `cypress/e2e/vertical-farm.cy.ts` - Farm management
|
|
- [ ] `cypress/e2e/transparency.cy.ts` - Transparency dashboard
|
|
|
|
4. **Test Configuration**
|
|
- [ ] `jest.config.js` - Jest configuration
|
|
- [ ] `cypress.config.ts` - Cypress configuration
|
|
- [ ] Test utilities and mocks
|
|
- [ ] Fixtures for test data
|
|
|
|
5. **CI Pipeline**
|
|
```yaml
|
|
# .github/workflows/ci.yml
|
|
name: CI
|
|
on: [push, pull_request]
|
|
jobs:
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: oven-sh/setup-bun@v1
|
|
- run: bun install
|
|
- run: bun run lint
|
|
- run: bun run type-check
|
|
- run: bun run test --coverage
|
|
- run: bun run build
|
|
|
|
e2e:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: oven-sh/setup-bun@v1
|
|
- run: bun install
|
|
- run: bun run build
|
|
- run: bun run cypress run
|
|
```
|
|
|
|
6. **Code Quality Tools**
|
|
- [ ] ESLint configuration update
|
|
- [ ] Prettier configuration
|
|
- [ ] Husky pre-commit hooks
|
|
- [ ] lint-staged configuration
|
|
- [ ] Commitlint for commit messages
|
|
|
|
7. **Test Reporting**
|
|
- [ ] Coverage reports to Codecov
|
|
- [ ] Test result annotations on PRs
|
|
- [ ] Cypress screenshots on failure
|
|
- [ ] Performance benchmarks
|
|
|
|
### Files to Create
|
|
```
|
|
__tests__/
|
|
├── unit/
|
|
│ ├── agents/
|
|
│ │ ├── PlantLineageAgent.test.ts
|
|
│ │ ├── TransportTrackerAgent.test.ts
|
|
│ │ └── ... (8 more agent tests)
|
|
│ ├── blockchain/
|
|
│ │ └── PlantChain.test.ts
|
|
│ └── services/
|
|
│ └── ... (service tests)
|
|
├── integration/
|
|
│ ├── api/
|
|
│ │ ├── plants.test.ts
|
|
│ │ ├── transport.test.ts
|
|
│ │ ├── demand.test.ts
|
|
│ │ └── vertical-farm.test.ts
|
|
│ └── auth/
|
|
│ └── authentication.test.ts
|
|
└── e2e/
|
|
└── ... (moved to cypress/e2e)
|
|
|
|
cypress/
|
|
├── e2e/
|
|
│ ├── auth.cy.ts
|
|
│ ├── plant-registration.cy.ts
|
|
│ ├── transport.cy.ts
|
|
│ └── vertical-farm.cy.ts
|
|
├── fixtures/
|
|
│ └── ... (test data)
|
|
└── support/
|
|
└── commands.ts
|
|
|
|
.github/workflows/
|
|
├── ci.yml
|
|
└── e2e.yml
|
|
```
|
|
|
|
### Success Criteria
|
|
- [ ] 80%+ code coverage
|
|
- [ ] All unit tests pass
|
|
- [ ] All integration tests pass
|
|
- [ ] E2E tests run in CI
|
|
- [ ] PR checks block on failures
|
|
- [ ] Coverage reports generated
|
|
|
|
---
|
|
|
|
## Agent 6: Real-Time Updates
|
|
|
|
**Priority**: P2 - Medium
|
|
**Estimated Complexity**: Medium
|
|
**Dependencies**: Agent 2 (Database)
|
|
|
|
### Objective
|
|
Implement real-time updates using WebSockets with Socket.io for live data synchronization.
|
|
|
|
### Tasks
|
|
|
|
1. **Install Dependencies**
|
|
```bash
|
|
bun add socket.io socket.io-client
|
|
bun add -D @types/socket.io
|
|
```
|
|
|
|
2. **WebSocket Server Setup**
|
|
- [ ] `lib/realtime/socketServer.ts` - Socket.io server
|
|
- [ ] Integration with Next.js API routes
|
|
- [ ] Room-based subscriptions (per farm, per plant)
|
|
- [ ] Authentication middleware for sockets
|
|
|
|
3. **Event Types**
|
|
- [ ] `lib/realtime/events.ts` - Define all event types
|
|
```typescript
|
|
export enum RealtimeEvent {
|
|
PLANT_REGISTERED = 'plant:registered',
|
|
PLANT_UPDATED = 'plant:updated',
|
|
TRANSPORT_EVENT = 'transport:event',
|
|
FARM_ALERT = 'farm:alert',
|
|
BATCH_UPDATE = 'batch:update',
|
|
ENVIRONMENT_READING = 'environment:reading',
|
|
}
|
|
```
|
|
|
|
4. **Client-Side Integration**
|
|
- [ ] `lib/realtime/useSocket.ts` - Socket.io React hook
|
|
- [ ] `lib/realtime/SocketContext.tsx` - Socket provider
|
|
- [ ] Auto-reconnection handling
|
|
- [ ] Offline state management
|
|
|
|
5. **Real-Time Features**
|
|
- [ ] Live plant registration notifications
|
|
- [ ] Real-time transport tracking updates
|
|
- [ ] Live vertical farm sensor data
|
|
- [ ] Instant alert notifications
|
|
- [ ] Live auction/marketplace updates
|
|
|
|
6. **UI Components**
|
|
- [ ] `components/realtime/ConnectionStatus.tsx` - Connection indicator
|
|
- [ ] `components/realtime/LiveFeed.tsx` - Activity feed
|
|
- [ ] `components/realtime/NotificationToast.tsx` - Real-time toasts
|
|
|
|
7. **Fallback to SSE**
|
|
- [ ] Enhance existing SSE implementation
|
|
- [ ] Auto-fallback when WebSocket fails
|
|
- [ ] Graceful degradation
|
|
|
|
### Files to Create
|
|
```
|
|
lib/realtime/
|
|
├── socketServer.ts
|
|
├── socketClient.ts
|
|
├── events.ts
|
|
├── useSocket.ts
|
|
├── SocketContext.tsx
|
|
├── rooms.ts
|
|
└── types.ts
|
|
|
|
pages/api/socket.ts
|
|
|
|
components/realtime/
|
|
├── ConnectionStatus.tsx
|
|
├── LiveFeed.tsx
|
|
├── NotificationToast.tsx
|
|
└── LiveChart.tsx
|
|
```
|
|
|
|
### Success Criteria
|
|
- [ ] WebSocket connections establish successfully
|
|
- [ ] Real-time updates display instantly
|
|
- [ ] Room subscriptions work correctly
|
|
- [ ] Fallback to SSE works
|
|
- [ ] Connection status displays accurately
|
|
- [ ] Real-time tests pass
|
|
|
|
---
|
|
|
|
## Agent 7: Advanced Analytics Dashboard
|
|
|
|
**Priority**: P2 - Medium
|
|
**Estimated Complexity**: Medium
|
|
**Dependencies**: Agent 2 (Database)
|
|
|
|
### Objective
|
|
Create comprehensive analytics dashboards with charts, trends, and insights.
|
|
|
|
### Tasks
|
|
|
|
1. **Install Dependencies**
|
|
```bash
|
|
bun add recharts d3 date-fns
|
|
bun add -D @types/d3
|
|
```
|
|
|
|
2. **Analytics Data Layer**
|
|
- [ ] `lib/analytics/aggregator.ts` - Data aggregation service
|
|
- [ ] `lib/analytics/metrics.ts` - Metric calculations
|
|
- [ ] `lib/analytics/trends.ts` - Trend analysis
|
|
- [ ] Time-series data handling
|
|
- [ ] Caching for expensive calculations
|
|
|
|
3. **API Endpoints**
|
|
- [ ] `pages/api/analytics/overview.ts` - Dashboard overview
|
|
- [ ] `pages/api/analytics/plants.ts` - Plant analytics
|
|
- [ ] `pages/api/analytics/transport.ts` - Transport metrics
|
|
- [ ] `pages/api/analytics/farms.ts` - Vertical farm analytics
|
|
- [ ] `pages/api/analytics/sustainability.ts` - Environmental impact
|
|
- [ ] `pages/api/analytics/export.ts` - Export data
|
|
|
|
4. **Chart Components**
|
|
- [ ] `components/analytics/LineChart.tsx` - Time series
|
|
- [ ] `components/analytics/BarChart.tsx` - Comparisons
|
|
- [ ] `components/analytics/PieChart.tsx` - Distribution
|
|
- [ ] `components/analytics/AreaChart.tsx` - Stacked data
|
|
- [ ] `components/analytics/Heatmap.tsx` - Geographic density
|
|
- [ ] `components/analytics/Gauge.tsx` - KPI gauges
|
|
|
|
5. **Dashboard Pages**
|
|
- [ ] `pages/analytics/index.tsx` - Main dashboard
|
|
- [ ] `pages/analytics/plants.tsx` - Plant insights
|
|
- [ ] `pages/analytics/transport.tsx` - Carbon & miles
|
|
- [ ] `pages/analytics/farms.tsx` - Farm performance
|
|
- [ ] `pages/analytics/sustainability.tsx` - Environmental
|
|
|
|
6. **Dashboard Widgets**
|
|
- [ ] `components/analytics/KPICard.tsx` - Key metrics
|
|
- [ ] `components/analytics/TrendIndicator.tsx` - Up/down trends
|
|
- [ ] `components/analytics/DataTable.tsx` - Sortable tables
|
|
- [ ] `components/analytics/DateRangePicker.tsx` - Time selection
|
|
- [ ] `components/analytics/FilterPanel.tsx` - Data filtering
|
|
|
|
7. **Export Features**
|
|
- [ ] PDF report generation
|
|
- [ ] CSV data export
|
|
- [ ] Chart image download
|
|
- [ ] Scheduled reports (email)
|
|
|
|
### Files to Create
|
|
```
|
|
lib/analytics/
|
|
├── aggregator.ts
|
|
├── metrics.ts
|
|
├── trends.ts
|
|
├── cache.ts
|
|
└── types.ts
|
|
|
|
pages/api/analytics/
|
|
├── overview.ts
|
|
├── plants.ts
|
|
├── transport.ts
|
|
├── farms.ts
|
|
├── sustainability.ts
|
|
└── export.ts
|
|
|
|
pages/analytics/
|
|
├── index.tsx
|
|
├── plants.tsx
|
|
├── transport.tsx
|
|
├── farms.tsx
|
|
└── sustainability.tsx
|
|
|
|
components/analytics/
|
|
├── LineChart.tsx
|
|
├── BarChart.tsx
|
|
├── PieChart.tsx
|
|
├── AreaChart.tsx
|
|
├── Heatmap.tsx
|
|
├── Gauge.tsx
|
|
├── KPICard.tsx
|
|
├── TrendIndicator.tsx
|
|
├── DataTable.tsx
|
|
├── DateRangePicker.tsx
|
|
└── FilterPanel.tsx
|
|
```
|
|
|
|
### Success Criteria
|
|
- [ ] Dashboard loads with real data
|
|
- [ ] All chart types render correctly
|
|
- [ ] Date range filtering works
|
|
- [ ] Export generates valid files
|
|
- [ ] Performance under 3s load time
|
|
- [ ] Analytics tests pass
|
|
|
|
---
|
|
|
|
## Agent 8: Notification System
|
|
|
|
**Priority**: P2 - Medium
|
|
**Estimated Complexity**: Medium
|
|
**Dependencies**: Agent 1 (Auth), Agent 2 (Database)
|
|
|
|
### Objective
|
|
Implement multi-channel notification system with email, push, and in-app notifications.
|
|
|
|
### Tasks
|
|
|
|
1. **Install Dependencies**
|
|
```bash
|
|
bun add nodemailer @sendgrid/mail
|
|
bun add web-push
|
|
bun add -D @types/nodemailer @types/web-push
|
|
```
|
|
|
|
2. **Notification Service**
|
|
- [ ] `lib/notifications/service.ts` - Core notification service
|
|
- [ ] `lib/notifications/channels/email.ts` - Email channel
|
|
- [ ] `lib/notifications/channels/push.ts` - Web push
|
|
- [ ] `lib/notifications/channels/inApp.ts` - In-app notifications
|
|
- [ ] Notification queue with retry logic
|
|
|
|
3. **Email Templates**
|
|
- [ ] `lib/notifications/templates/welcome.ts` - Welcome email
|
|
- [ ] `lib/notifications/templates/plantReminder.ts` - Care reminders
|
|
- [ ] `lib/notifications/templates/transportAlert.ts` - Transport updates
|
|
- [ ] `lib/notifications/templates/farmAlert.ts` - Farm alerts
|
|
- [ ] React Email for template rendering
|
|
|
|
4. **Push Notifications**
|
|
- [ ] Service worker for push
|
|
- [ ] VAPID key generation
|
|
- [ ] Subscription management
|
|
- [ ] Push payload handling
|
|
|
|
5. **In-App Notifications**
|
|
- [ ] `lib/notifications/inApp.ts` - In-app notification store
|
|
- [ ] Notification preferences per user
|
|
- [ ] Mark as read/unread functionality
|
|
- [ ] Notification grouping
|
|
|
|
6. **API Endpoints**
|
|
- [ ] `pages/api/notifications/index.ts` - List notifications
|
|
- [ ] `pages/api/notifications/[id].ts` - Get/update notification
|
|
- [ ] `pages/api/notifications/preferences.ts` - User preferences
|
|
- [ ] `pages/api/notifications/subscribe.ts` - Push subscription
|
|
- [ ] `pages/api/notifications/send.ts` - Send notification (internal)
|
|
|
|
7. **UI Components**
|
|
- [ ] `components/notifications/NotificationBell.tsx` - Header bell icon
|
|
- [ ] `components/notifications/NotificationList.tsx` - Dropdown list
|
|
- [ ] `components/notifications/NotificationItem.tsx` - Single notification
|
|
- [ ] `components/notifications/PreferencesForm.tsx` - Settings
|
|
|
|
8. **Scheduled Notifications**
|
|
- [ ] Plant care reminders (watering, feeding)
|
|
- [ ] Harvest time alerts
|
|
- [ ] Weekly digest emails
|
|
- [ ] Cron job integration
|
|
|
|
### Files to Create
|
|
```
|
|
lib/notifications/
|
|
├── service.ts
|
|
├── queue.ts
|
|
├── scheduler.ts
|
|
├── channels/
|
|
│ ├── email.ts
|
|
│ ├── push.ts
|
|
│ └── inApp.ts
|
|
├── templates/
|
|
│ ├── welcome.ts
|
|
│ ├── plantReminder.ts
|
|
│ ├── transportAlert.ts
|
|
│ └── farmAlert.ts
|
|
└── types.ts
|
|
|
|
pages/api/notifications/
|
|
├── index.ts
|
|
├── [id].ts
|
|
├── preferences.ts
|
|
├── subscribe.ts
|
|
└── send.ts
|
|
|
|
components/notifications/
|
|
├── NotificationBell.tsx
|
|
├── NotificationList.tsx
|
|
├── NotificationItem.tsx
|
|
└── PreferencesForm.tsx
|
|
|
|
public/
|
|
└── sw.js (service worker)
|
|
```
|
|
|
|
### Success Criteria
|
|
- [ ] Emails send successfully
|
|
- [ ] Push notifications work
|
|
- [ ] In-app notifications display
|
|
- [ ] Preferences save correctly
|
|
- [ ] Reminders schedule properly
|
|
- [ ] Notification tests pass
|
|
|
|
---
|
|
|
|
## Agent 9: Marketplace Foundation
|
|
|
|
**Priority**: P3 - Enhancement
|
|
**Estimated Complexity**: High
|
|
**Dependencies**: Agent 1 (Auth), Agent 2 (Database)
|
|
|
|
### Objective
|
|
Create the foundation for a plant trading marketplace with listings, offers, and basic transactions.
|
|
|
|
### Tasks
|
|
|
|
1. **Database Models**
|
|
- [ ] Add marketplace models to Prisma schema:
|
|
```prisma
|
|
model Listing {
|
|
id String @id @default(cuid())
|
|
sellerId String
|
|
plantId String?
|
|
title String
|
|
description String
|
|
price Decimal
|
|
currency String @default("USD")
|
|
quantity Int
|
|
category ListingCategory
|
|
status ListingStatus
|
|
createdAt DateTime @default(now())
|
|
expiresAt DateTime?
|
|
|
|
seller User @relation(fields: [sellerId], references: [id])
|
|
plant Plant? @relation(fields: [plantId], references: [id])
|
|
offers Offer[]
|
|
images ListingImage[]
|
|
}
|
|
|
|
model Offer {
|
|
id String @id @default(cuid())
|
|
listingId String
|
|
buyerId String
|
|
amount Decimal
|
|
message String?
|
|
status OfferStatus
|
|
createdAt DateTime @default(now())
|
|
|
|
listing Listing @relation(fields: [listingId], references: [id])
|
|
buyer User @relation(fields: [buyerId], references: [id])
|
|
}
|
|
```
|
|
|
|
2. **Marketplace Service**
|
|
- [ ] `lib/marketplace/listingService.ts` - Listing CRUD
|
|
- [ ] `lib/marketplace/offerService.ts` - Offer management
|
|
- [ ] `lib/marketplace/searchService.ts` - Listing search
|
|
- [ ] `lib/marketplace/matchingService.ts` - Buyer/seller matching
|
|
|
|
3. **API Endpoints**
|
|
- [ ] `pages/api/marketplace/listings/index.ts` - List/create
|
|
- [ ] `pages/api/marketplace/listings/[id].ts` - CRUD
|
|
- [ ] `pages/api/marketplace/listings/[id]/offers.ts` - Offers
|
|
- [ ] `pages/api/marketplace/search.ts` - Search listings
|
|
- [ ] `pages/api/marketplace/my-listings.ts` - User's listings
|
|
- [ ] `pages/api/marketplace/my-offers.ts` - User's offers
|
|
|
|
4. **Marketplace Pages**
|
|
- [ ] `pages/marketplace/index.tsx` - Marketplace home
|
|
- [ ] `pages/marketplace/listings/[id].tsx` - Listing detail
|
|
- [ ] `pages/marketplace/create.tsx` - Create listing
|
|
- [ ] `pages/marketplace/my-listings.tsx` - Manage listings
|
|
- [ ] `pages/marketplace/my-offers.tsx` - Manage offers
|
|
|
|
5. **UI Components**
|
|
- [ ] `components/marketplace/ListingCard.tsx`
|
|
- [ ] `components/marketplace/ListingGrid.tsx`
|
|
- [ ] `components/marketplace/ListingForm.tsx`
|
|
- [ ] `components/marketplace/OfferForm.tsx`
|
|
- [ ] `components/marketplace/OfferList.tsx`
|
|
- [ ] `components/marketplace/SearchFilters.tsx`
|
|
- [ ] `components/marketplace/PriceDisplay.tsx`
|
|
|
|
6. **Seller Features**
|
|
- [ ] Seller profile page
|
|
- [ ] Rating and review system (model only)
|
|
- [ ] Listing analytics
|
|
- [ ] Inventory management
|
|
|
|
7. **Buyer Features**
|
|
- [ ] Saved listings (wishlist)
|
|
- [ ] Search with filters
|
|
- [ ] Offer history
|
|
- [ ] Messaging foundation (model only)
|
|
|
|
### Files to Create
|
|
```
|
|
lib/marketplace/
|
|
├── listingService.ts
|
|
├── offerService.ts
|
|
├── searchService.ts
|
|
├── matchingService.ts
|
|
└── types.ts
|
|
|
|
pages/api/marketplace/
|
|
├── listings/
|
|
│ ├── index.ts
|
|
│ └── [id]/
|
|
│ ├── index.ts
|
|
│ └── offers.ts
|
|
├── search.ts
|
|
├── my-listings.ts
|
|
└── my-offers.ts
|
|
|
|
pages/marketplace/
|
|
├── index.tsx
|
|
├── create.tsx
|
|
├── my-listings.tsx
|
|
├── my-offers.tsx
|
|
└── listings/
|
|
└── [id].tsx
|
|
|
|
components/marketplace/
|
|
├── ListingCard.tsx
|
|
├── ListingGrid.tsx
|
|
├── ListingForm.tsx
|
|
├── OfferForm.tsx
|
|
├── OfferList.tsx
|
|
├── SearchFilters.tsx
|
|
└── PriceDisplay.tsx
|
|
```
|
|
|
|
### Success Criteria
|
|
- [ ] Listings create and display
|
|
- [ ] Search with filters works
|
|
- [ ] Offers submit correctly
|
|
- [ ] Seller can manage listings
|
|
- [ ] Buyer can browse and offer
|
|
- [ ] Marketplace tests pass
|
|
|
|
---
|
|
|
|
## Agent 10: Mobile Optimization
|
|
|
|
**Priority**: P3 - Enhancement
|
|
**Estimated Complexity**: Medium
|
|
**Dependencies**: All core agents (1-5)
|
|
|
|
### Objective
|
|
Optimize the application for mobile devices with PWA capabilities and responsive improvements.
|
|
|
|
### Tasks
|
|
|
|
1. **PWA Configuration**
|
|
- [ ] `next.config.js` - PWA plugin configuration
|
|
- [ ] `public/manifest.json` - Web app manifest
|
|
- [ ] Service worker for offline support
|
|
- [ ] Install prompts
|
|
|
|
2. **Install Dependencies**
|
|
```bash
|
|
bun add next-pwa
|
|
```
|
|
|
|
3. **Mobile-First Styling**
|
|
- [ ] Audit all components for mobile responsiveness
|
|
- [ ] `styles/mobile.css` - Mobile-specific overrides
|
|
- [ ] Touch-friendly tap targets (min 44px)
|
|
- [ ] Swipe gestures for navigation
|
|
- [ ] Bottom navigation bar
|
|
|
|
4. **Mobile Components**
|
|
- [ ] `components/mobile/BottomNav.tsx` - Bottom navigation
|
|
- [ ] `components/mobile/SwipeableCard.tsx` - Swipeable cards
|
|
- [ ] `components/mobile/PullToRefresh.tsx` - Pull to refresh
|
|
- [ ] `components/mobile/MobileHeader.tsx` - Mobile header
|
|
- [ ] `components/mobile/InstallPrompt.tsx` - PWA install
|
|
|
|
5. **Offline Support**
|
|
- [ ] Cache critical pages
|
|
- [ ] Offline fallback page
|
|
- [ ] Queue actions when offline
|
|
- [ ] Sync when back online
|
|
- [ ] IndexedDB for local storage
|
|
|
|
6. **Performance Optimization**
|
|
- [ ] Image lazy loading
|
|
- [ ] Code splitting by route
|
|
- [ ] Bundle size analysis
|
|
- [ ] Critical CSS extraction
|
|
- [ ] Lighthouse score > 90
|
|
|
|
7. **Touch Interactions**
|
|
- [ ] Swipe to dismiss notifications
|
|
- [ ] Pinch to zoom on images
|
|
- [ ] Long press for context menus
|
|
- [ ] Haptic feedback (where supported)
|
|
|
|
8. **Camera Integration**
|
|
- [ ] `lib/mobile/camera.ts` - Camera access
|
|
- [ ] QR code scanning
|
|
- [ ] Photo capture for plants
|
|
- [ ] Image cropping
|
|
|
|
9. **Mobile Pages**
|
|
- [ ] `pages/m/index.tsx` - Mobile home (simplified)
|
|
- [ ] `pages/m/scan.tsx` - QR scanner
|
|
- [ ] `pages/m/quick-add.tsx` - Quick plant add
|
|
|
|
### Files to Create
|
|
```
|
|
public/
|
|
├── manifest.json
|
|
├── icons/
|
|
│ ├── icon-72x72.png
|
|
│ ├── icon-96x96.png
|
|
│ ├── icon-128x128.png
|
|
│ ├── icon-144x144.png
|
|
│ ├── icon-152x152.png
|
|
│ ├── icon-192x192.png
|
|
│ ├── icon-384x384.png
|
|
│ └── icon-512x512.png
|
|
├── offline.html
|
|
└── sw.js
|
|
|
|
lib/mobile/
|
|
├── camera.ts
|
|
├── offline.ts
|
|
├── gestures.ts
|
|
└── pwa.ts
|
|
|
|
components/mobile/
|
|
├── BottomNav.tsx
|
|
├── SwipeableCard.tsx
|
|
├── PullToRefresh.tsx
|
|
├── MobileHeader.tsx
|
|
├── InstallPrompt.tsx
|
|
└── QRScanner.tsx
|
|
|
|
pages/m/
|
|
├── index.tsx
|
|
├── scan.tsx
|
|
└── quick-add.tsx
|
|
|
|
styles/
|
|
└── mobile.css
|
|
```
|
|
|
|
### Success Criteria
|
|
- [ ] PWA installs on mobile
|
|
- [ ] Offline mode works
|
|
- [ ] All pages responsive
|
|
- [ ] Lighthouse score > 90
|
|
- [ ] Camera/QR works
|
|
- [ ] Mobile tests pass
|
|
|
|
---
|
|
|
|
## Deployment Instructions
|
|
|
|
### Setting Up Worktrees
|
|
|
|
For each agent, create a dedicated worktree:
|
|
|
|
```bash
|
|
# From the main repository
|
|
cd localgreenchain
|
|
|
|
# Create worktrees for each agent
|
|
git worktree add ../lgc-agent-1-auth claude/agent-1-auth-{session-id}
|
|
git worktree add ../lgc-agent-2-database claude/agent-2-database-{session-id}
|
|
git worktree add ../lgc-agent-3-storage claude/agent-3-storage-{session-id}
|
|
git worktree add ../lgc-agent-4-deploy claude/agent-4-deploy-{session-id}
|
|
git worktree add ../lgc-agent-5-testing claude/agent-5-testing-{session-id}
|
|
git worktree add ../lgc-agent-6-realtime claude/agent-6-realtime-{session-id}
|
|
git worktree add ../lgc-agent-7-analytics claude/agent-7-analytics-{session-id}
|
|
git worktree add ../lgc-agent-8-notifications claude/agent-8-notifications-{session-id}
|
|
git worktree add ../lgc-agent-9-marketplace claude/agent-9-marketplace-{session-id}
|
|
git worktree add ../lgc-agent-10-mobile claude/agent-10-mobile-{session-id}
|
|
```
|
|
|
|
### Agent Coordination
|
|
|
|
1. **P0 Agents (1-2)** should start immediately - no dependencies
|
|
2. **P1 Agents (3-5)** can start after database schema is ready
|
|
3. **P2 Agents (6-8)** depend on auth and database
|
|
4. **P3 Agents (9-10)** can start once core features are stable
|
|
|
|
### Merge Order
|
|
|
|
1. Agent 2 (Database) - First, as all others depend on it
|
|
2. Agent 1 (Auth) - Second, required for protected features
|
|
3. Agent 5 (Testing) - Third, to validate core
|
|
4. Agent 4 (Deployment) - Fourth, for infrastructure
|
|
5. Agent 3 (Storage) - After auth is ready
|
|
6. Agents 6-8 in parallel
|
|
7. Agents 9-10 last
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
| Agent | Task | Priority | Files | Est. LOC |
|
|
|-------|------|----------|-------|----------|
|
|
| 1 | Authentication | P0 | ~20 | ~2000 |
|
|
| 2 | Database | P0 | ~15 | ~1500 |
|
|
| 3 | File Storage | P1 | ~15 | ~1200 |
|
|
| 4 | Deployment | P1 | ~15 | ~800 |
|
|
| 5 | Testing | P1 | ~30 | ~3000 |
|
|
| 6 | Real-Time | P2 | ~15 | ~1000 |
|
|
| 7 | Analytics | P2 | ~20 | ~2500 |
|
|
| 8 | Notifications | P2 | ~20 | ~1500 |
|
|
| 9 | Marketplace | P3 | ~20 | ~2000 |
|
|
| 10 | Mobile | P3 | ~15 | ~1200 |
|
|
|
|
**Total**: ~185 new files, ~16,700 lines of code
|
|
|
|
---
|
|
|
|
*Generated for LocalGreenChain worktree deployment*
|