Project: WildVision - Wildlife Surveillance & Movement Analytics Platform
Client: Forest Department of India
Tech Stack: Bun.js Β· React Β· shadcn/ui Β· Google Maps API Β· PostgreSQL + PostGIS Β· MinIO Β· BLIP/FastAPI ML Service Β· Docker
Total Modules: 12 | Project Start: Jan 30, 2026
Legend: [ ] Not Started | [/] In Progress | [x] Done | P0 = Critical | P1 = High | P2 = Medium
UI Framework: shadcn/ui with muted color palette (Forest Green #4a6f4a + Beige #b39d71)
Design Philosophy: Professional Β· Simple Β· Modern Β· Government-Grade
Reference: See design_guidelines.md for complete UI/UX specifications
β οΈ Government Project Standards - This project requires the highest level of precision and accuracy.
- β Production-Ready Code Only - NO temporary solutions or placeholders
- β Integration-First Design - Every module must integrate seamlessly
- β Complete Testing - Tasks marked done only after thorough testing with no errors
- β Consistent UI/UX - Muted colors, clean layouts, professional appearance
- β Precision & Foresight - Consider integration challenges before implementation
- β No Feature Skipping - Implement all features completely, no shortcuts
Progress Tracking: Update PROGRESS.md and PROJECT_BOARD.md only after successful task completion with satisfactory results and no persisting errors.
Status: [x] Complete
Owner: DevOps Team
Completed: Jan 31, 2026
Subtasks:
- 0.1.1: Initialize Git repository with main, dev, release/* branches
- 0.1.2: Create
apps/api(Bun.js),apps/web(React),apps/ai-nodeplaceholder, andapps/ml-service(FastAPI + BLIP) - 0.1.3: Create
infra/dockerfor docker-compose and k8s manifests - 0.1.4: Create
infra/dbfor Postgres & MinIO schemas - 0.1.5: Set up monorepo tooling (Turborepo)
- 0.1.6: Configure shared TypeScript config
- 0.1.7: Create root package.json with workspace configuration
- 0.1.8: Create
docs/directory for architecture, SOPs, diagrams
Status: [x] Complete
Owner: DevOps Team
Completed: Jan 31, 2026
Subtasks:
- 0.2.1: Configure conventional commits (feat, fix, docs, etc.)
- 0.2.2: Set up branch protection rules for main (dev branch created)
- 0.2.3: Create CODEOWNERS file for Forest Dept roles
- 0.2.4: Add .gitignore for Node.js, Bun, Docker
- 0.2.5: Set up pre-commit hooks (Husky)
- 0.2.6: Configure commit message linting
- 0.2.7: Create PR template
- 0.2.8: Document Git workflow in docs/GIT_WORKFLOW.md
Status: [x] Complete
Owner: All Developers
Completed: Jan 31, 2026
Subtasks:
- 0.3.1: Install Bun.js runtime (v1.3.7 confirmed)
- 0.3.2: Configure VS Code workspace settings
- 0.3.3: Install recommended VS Code extensions (ESLint, Prettier, etc.)
- 0.3.4: Set up EditorConfig for consistent formatting
- 0.3.5: Configure ESLint for TypeScript
- 0.3.6: Configure Prettier and commitlint
- 0.3.7: Set up Husky pre-commit hooks
- 0.3.8: Create development environment documentation
Task 1.1.1 - Design RBAC Schema | P0 | Status: [x] Complete
- Task 1.1.1.1: Create roles table (id, name, description, level)
- Task 1.1.1.2: Define 4 roles: Admin (Global), Divisional Officer, Range Officer, Ground Staff
- Task 1.1.1.3: Create permissions table (id, resource, action, description)
- Task 1.1.1.4: Create role_permissions junction table
- Task 1.1.1.5: Design role inheritance matrix (Admin β Divisional β Range β Ground)
- Task 1.1.1.6: Create users table with role_id foreign key
- Task 1.1.1.7: Add division_id and range_id to users for scope limiting
- Task 1.1.1.8: Document permission matrix in docs/rbac.md
- Task 1.1.1.9: Create SQL migration for RBAC tables
- Task 1.1.1.10: Add indexes for performance (role_id, user_id)
Task 1.1.2 - Implement Authentication | P0 | Status: [x] Complete
- Task 1.1.2.1: Install JWT library for Bun.js
- Task 1.1.2.2: Create password hashing utility (bcrypt or argon2)
- Task 1.1.2.3: Implement JWT token generation (access + refresh)
- Task 1.1.2.4: Set token expiry (access: 1h, refresh: 7d)
- Task 1.1.2.5: Create POST /auth/register endpoint
- Task 1.1.2.6: Create POST /auth/login endpoint
- Task 1.1.2.7: Create POST /auth/refresh endpoint
- Task 1.1.2.8: Create POST /auth/logout endpoint
- Task 1.1.2.9: Implement device binding for ground staff (device fingerprint)
- Task 1.1.2.10: Create session audit trail table
- Task 1.1.2.11: Log all login/logout events with IP, device info
- Task 1.1.2.12: Add rate limiting to auth endpoints (5 req/min)
Task 1.1.3 - Create Auth Middleware | P0 | Status: [x] Complete
- Task 1.1.3.1: Create JWT verification middleware
- Task 1.1.3.2: Extract token from Authorization header or cookie
- Task 1.1.3.3: Validate token signature and expiry
- Task 1.1.3.4: Load user from database and attach to request context
- Task 1.1.3.5: Create role-based access control middleware
- Task 1.1.3.6: Implement @requireAuth decorator
- Task 1.1.3.7: Implement @requireRole(role) decorator
- Task 1.1.3.8: Implement @requirePermission(resource, action) decorator
- Task 1.1.3.9: Add scope checking (division/range access)
- Task 1.1.3.10: Handle unauthorized access (401/403 responses)
Task 1.1.4 - Build Auth UI | P0 | Status: [x] Complete
- Task 1.1.4.1: Create login page component (React)
- Task 1.1.4.2: Add email and password input fields
- Task 1.1.4.3: Add form validation (email format, password strength)
- Task 1.1.4.4: Implement login API call
- Task 1.1.4.5: Store tokens in httpOnly cookies or localStorage
- Task 1.1.4.6: Create registration page (if needed)
- Task 1.1.4.7: Create password reset flow
- Task 1.1.4.8: Add loading states and error messages
- Task 1.1.4.9: Implement auto-redirect after login
- Task 1.1.4.10: Create protected route wrapper component
- Task 1.1.4.11: Add role-based UI rendering
- Task 1.1.4.12: Style with modern UI library (shadcn/ui or similar)
Task 2.1.1 - Camera Master Model | P0 | Status: [x] Complete
- Task 2.1.1.1: Create cameras table with PostGIS geometry column
- Task 2.1.1.2: Add camera_id (Gov-issued unique identifier)
- Task 2.1.1.3: Add division_id, range_id, beat_id foreign keys
- Task 2.1.1.4: Add latitude/longitude columns (POINT geometry type)
- Task 2.1.1.5: Add install_date, status (active/inactive/maintenance)
- Task 2.1.1.6: Add camera model, serial number fields
- Task 2.1.1.7: Create GIST spatial index on geometry column
- Task 2.1.1.8: Add validation for GPS coordinates (India bounds)
- Task 2.1.1.9: Create SQL migration for cameras table
- Task 2.1.1.10: Document camera data model in docs/
Task 2.1.2 - Camera Movement Tracking | P0 | Status: [x] Complete
- Task 2.1.2.1: Create camera_locations table (immutable history)
- Task 2.1.2.2: Add camera_id, location (POINT), valid_from, valid_to
- Task 2.1.2.3: Implement temporal validity constraints
- Task 2.1.2.4: Create API endpoint POST /cameras/{id}/move
- Task 2.1.2.5: Validate new location (geospatial bounds check)
- Task 2.1.2.6: Close current location record (set valid_to)
- Task 2.1.2.7: Create new location record (set valid_from)
- Task 2.1.2.8: Log camera movement in audit trail
- Task 2.1.2.9: Add reason field for movement
- Task 2.1.2.10: Create GET /cameras/{id}/history endpoint
Task 2.2.1 - Administrative Boundaries | P0 | Status: [x] Complete
- Task 2.2.1.1: Create divisions table with POLYGON geometry
- Task 2.2.1.2: Create ranges table with POLYGON geometry
- Task 2.2.1.3: Create beats table with POLYGON geometry
- Task 2.2.1.4: Import Forest Department boundary data (GeoJSON/Shapefile)
- Task 2.2.1.5: Validate polygon geometries (no self-intersections)
- Task 2.2.1.6: Create spatial indexes on all geometry columns
- Task 2.2.1.7: Implement containment queries (point in polygon)
- Task 2.2.1.8: Add boundary metadata (name, area, perimeter)
- Task 2.2.1.9: Create GET /geography/divisions endpoint
- Task 2.2.1.10: Create GET /geography/ranges endpoint
- Task 2.2.1.11: Create GET /geography/beats endpoint
Task 2.2.2 - Google Maps Integration | P1 | Status: [x] Complete
- Task 2.2.2.1: Set up Google Maps API key
- Task 2.2.2.2: Install @googlemaps/js-api-loader
- Task 2.2.2.3: Create map component in React
- Task 2.2.2.4: Display camera locations as markers
- Task 2.2.2.5: Implement heatmap layer for sightings
- Task 2.2.2.6: Add marker clustering for camera density
- Task 2.2.2.7: Display administrative boundaries as polygons
- Task 2.2.2.8: Add custom map styles (forest theme)
- Task 2.2.2.9: Implement click handlers for markers
- Task 2.2.2.10: Add info windows with camera/sighting details
- Task 2.2.2.11: Optimize map performance for large datasets
Task 3.1.1 - Upload UI (Ground Staff) | P0 | Status: [x] Complete
- Task 3.1.1.1: Create upload page component (React)
- Task 3.1.1.2: Implement bulk folder upload (drag & drop)
- Task 3.1.1.3: Add file type validation (jpg, png, raw formats)
- Task 3.1.1.4: Add file size validation (max 50MB per image)
- Task 3.1.1.5: Display upload progress for each file
- Task 3.1.1.6: Implement offline-first capability (queue uploads)
- Task 3.1.1.7: Store pending uploads in IndexedDB
- Task 3.1.1.8: Auto-resume uploads on reconnection
- Task 3.1.1.9: Add camera selection dropdown
- Task 3.1.1.10: Show upload statistics (total, success, failed)
- Task 3.1.1.11: Add retry mechanism for failed uploads
Task 3.1.2 - Storage Layout (MinIO) | P0 | Status: [x] Complete
- Task 3.1.2.1: Create MinIO bucket structure: /circle/division/range/beat/camera-id/yyyy-mm-dd/
- Task 3.1.2.2: Configure MinIO bucket policies (private by default)
- Task 3.1.2.3: Set up lifecycle rules for old images (archive after 2 years)
- Task 3.1.2.4: Implement presigned URL generation for uploads
- Task 3.1.2.5: Create POST /upload/request endpoint (returns presigned URL)
- Task 3.1.2.6: Validate upload request (camera access, file metadata)
- Task 3.1.2.7: Generate unique object key with UUID
- Task 3.1.2.8: Set presigned URL expiry (15 minutes)
- Task 3.1.2.9: Create POST /upload/complete endpoint
- Task 3.1.2.10: Verify file exists in MinIO after upload
- Task 3.1.2.11: Create database record for uploaded image
Task 3.1.3 - Image Metadata Extraction | P0 | Status: [x] Complete
- Task 3.1.3.1: Install EXIF parsing library (exifr or similar)
- Task 3.1.3.2: Create metadata extraction service
- Task 3.1.3.3: Extract EXIF timestamp (DateTimeOriginal)
- Task 3.1.3.4: Extract GPS coordinates from EXIF
- Task 3.1.3.5: Extract camera serial number from EXIF
- Task 3.1.3.6: Parse image dimensions (width, height)
- Task 3.1.3.7: Bind image to camera_id based on EXIF or filename
- Task 3.1.3.8: Perform geo-consistency check (camera location vs EXIF GPS)
- Task 3.1.3.9: Store metadata in images table (JSONB column)
- Task 3.1.3.10: Handle missing EXIF data gracefully
- Task 3.1.3.11: Create background job for metadata extraction
Implementation Decision: YOLOv8/ONNX was replaced for the current project iteration with a FastAPI BLIP image-captioning service. YOLO-style object detection, bounding boxes, and fine-tuning remain deferred unless the project later requires detection boxes instead of image-level animal labels.
Task 4.1.1 - BLIP Model Integration | P0 | Status: [x] Complete
- Task 4.1.1.1: Create
apps/ml-serviceFastAPI service - Task 4.1.1.2: Add
/healthendpoint for service readiness checks - Task 4.1.1.3: Add
/predictmultipart image endpoint - Task 4.1.1.4: Integrate
Salesforce/blip-image-captioning-base - Task 4.1.1.5: Load BLIP lazily so health checks stay responsive during model warmup
- Task 4.1.1.6: Extract animal names from BLIP captions using wildlife keyword matching
- Task 4.1.1.7: Return animal label, confidence, caption, method, and metadata from ML service
- Task 4.1.1.8: Add fast mock ML service for local development/testing
- Task 4.1.1.9: Connect API upload flow to
ML_SERVICE_URL - Task 4.1.1.10: Persist detected animal, scientific name, confidence, and ML metadata on image records
- Task 4.1.1.11: Generate thumbnails for uploaded images after inference
- Task 4.1.1.12: Add ML service to Docker compose with model/cache volumes
Task 4.1.2 - Confidence-Based Detection Workflow | P0 | Status: [/] In Progress
- Task 4.1.2.1: Define configurable confidence threshold via
ML_AUTO_APPROVE_CONFIDENCE - Task 4.1.2.2: Store detection result directly on
imagesrecords - Task 4.1.2.3: Add confirmation status fields (
pending_confirmation,confirmed,rejected) - Task 4.1.2.4: Implement auto-approval logic for high-confidence detections
- Task 4.1.2.5: Queue low-confidence detections for manual confirmation/review
- Task 4.1.2.6: Add admin review endpoints under
/admin/reviews - Task 4.1.2.7: Add filtering by confidence range in admin review API
- Task 4.1.2.8: Normalize backend/frontend status naming (
pending_confirmationvspending_review,confirmedvsmanual_approved) - Task 4.1.2.9: Normalize confidence units across API and UI (0-1 vs 0-100)
- Task 4.1.2.10: Log auto-approvals and manual review actions consistently in audit trail
- Task 4.1.2.11: Add model/inference metrics for auto-approval rate and failure rate
- Task 4.1.2.12: Document current BLIP limitations and future YOLO/object-detection upgrade path
Task 4.2.1 - Verification UI (Range Officer/Admin) | P0 | Status: [x] Complete
- Task 4.2.1.1: Create admin review dashboard page
- Task 4.2.1.2: Display pending detections in review list
- Task 4.2.1.3: Implement side-by-side comparison view
- Task 4.2.1.4: Show detection bounding boxes when detector metadata exists, with BLIP unavailable state
- Task 4.2.1.5: Display AI prediction with confidence score
- Task 4.2.1.6: Add editable species/animal name field
- Task 4.2.1.7: Add Approve/Reject/Reassess actions
- Task 4.2.1.8: Implement keyboard shortcuts (A=approve, R=reject, E=edit)
- Task 4.2.1.9: Add notes/reason support for review actions
- Task 4.2.1.10: Show verification progress (X/Y reviewed)
- Task 4.2.1.11: Add filters (animal, status, confidence, sort)
- Task 4.2.1.12: Implement pagination
- Task 4.2.1.13: Fix review UI/API status mismatch and thumbnail route mismatch
Task 4.2.2 - Audit Trail | P0 | Status: [x] Complete
- Task 4.2.2.1: Keep current review state on
imagesand useaudit_logsas immutable verification history - Task 4.2.2.2: Store who confirmed/reviewed each image (
confirmed_by) - Task 4.2.2.3: Log what changed (original vs corrected species)
- Task 4.2.2.4: Store when verification occurred (
confirmed_at) - Task 4.2.2.5: Store verification reason/notes in image metadata
- Task 4.2.2.6: Create GET /detections/{id}/audit endpoint
- Task 4.2.2.7: Display audit history in UI
- Task 4.2.2.8: Add undo functionality for recent verifications
- Task 4.2.2.9: Create verification analytics (accuracy, speed)
- Task 4.2.2.10: Generate verification reports for officers
Task 5.1.1 - Flower FL Setup | P0 | Status: [ ] Not Started
- Task 5.1.1.1: Install Flower framework (flwr)
- Task 5.1.1.2: Set up Flower server at Central HQ
- Task 5.1.1.3: Create Flower client for each Range HQ
- Task 5.1.1.4: Configure secure TLS channels for communication
- Task 5.1.1.5: Implement client authentication (certificates)
- Task 5.1.1.6: Create client configuration (model path, data path)
- Task 5.1.1.7: Implement model weight serialization
- Task 5.1.1.8: Create aggregation strategy (FedAvg or custom)
- Task 5.1.1.9: Set minimum clients for aggregation (e.g., 3)
- Task 5.1.1.10: Add client availability checking
- Task 5.1.1.11: Implement graceful handling of offline clients
- Task 5.1.1.12: Create FL monitoring dashboard
Task 5.1.2 - Training Triggers | P0 | Status: [ ] Not Started
- Task 5.1.2.1: Implement time-based training schedule (e.g., weekly)
- Task 5.1.2.2: Implement data-volume-based triggers (e.g., 1000 new images)
- Task 5.1.2.3: Add manual admin override for training
- Task 5.1.2.4: Create training job queue
- Task 5.1.2.5: Implement training status tracking (pending, running, completed)
- Task 5.1.2.6: Add training notifications (email/SMS to admin)
- Task 5.1.2.7: Log all training rounds in database
- Task 5.1.2.8: Create GET /fl/training/status endpoint
- Task 5.1.2.9: Create POST /fl/training/start endpoint (admin only)
- Task 5.1.2.10: Implement training cancellation
Task 5.1.3 - Model Governance | P0 | Status: [ ] Not Started
- Task 5.1.3.1: Create model_versions table (version, weights_path, metrics, timestamp)
- Task 5.1.3.2: Implement model versioning (semantic versioning)
- Task 5.1.3.3: Store model weights in MinIO
- Task 5.1.3.4: Track model performance metrics (accuracy, F1, etc.)
- Task 5.1.3.5: Implement rollback support (revert to previous version)
- Task 5.1.3.6: Create model comparison tool
- Task 5.1.3.7: Implement drift detection (data distribution changes)
- Task 5.1.3.8: Add model validation before deployment
- Task 5.1.3.9: Create model deployment workflow
- Task 5.1.3.10: Implement A/B testing for new models
- Task 5.1.3.11: Create model performance dashboard
- Task 5.1.3.12: Document model governance process
Task 6.1.1 - Core KPIs | P0 | Status: [ ] Not Started
- Task 6.1.1.1: Create analytics dashboard page (React)
- Task 6.1.1.2: Implement role-based data filtering (division/range scope)
- Task 6.1.1.3: Calculate animal counts per species
- Task 6.1.1.4: Calculate human intrusion events
- Task 6.1.1.5: Calculate camera uptime percentage
- Task 6.1.1.6: Create GET /analytics/kpis endpoint
- Task 6.1.1.7: Add date range filtering
- Task 6.1.1.8: Display KPIs in stat cards
- Task 6.1.1.9: Add trend indicators (ββ from previous period)
- Task 6.1.1.10: Implement real-time updates (WebSocket or polling)
- Task 6.1.1.11: Cache analytics results (Redis)
Task 6.1.2 - Plotly Integration | P1 | Status: [ ] Not Started
- Task 6.1.2.1: Install Plotly.js and react-plotly.js
- Task 6.1.2.2: Create density plot component (species distribution)
- Task 6.1.2.3: Create temporal trends chart (sightings over time)
- Task 6.1.2.4: Create altitude vs species scatter plot
- Task 6.1.2.5: Create camera activity heatmap (time of day)
- Task 6.1.2.6: Add interactive tooltips and zoom
- Task 6.1.2.7: Implement chart export (PNG, SVG, PDF)
- Task 6.1.2.8: Add chart customization options
- Task 6.1.2.9: Optimize chart rendering for large datasets
- Task 6.1.2.10: Create chart templates for common analyses
Task 6.2.1 - Movement Tracking | P1 | Status: [ ] Not Started
- Task 6.2.1.1: Create movement tracking query (temporal + spatial joins)
- Task 6.2.1.2: Find sequential sightings of same species
- Task 6.2.1.3: Calculate time gaps between sightings
- Task 6.2.1.4: Calculate distance between camera locations
- Task 6.2.1.5: Implement probabilistic trail algorithm
- Task 6.2.1.6: Filter trails by max time gap (e.g., 24 hours)
- Task 6.2.1.7: Filter trails by max distance (e.g., 10 km)
- Task 6.2.1.8: Create GET /analytics/trails endpoint
- Task 6.2.1.9: Visualize trails on map (polylines)
- Task 6.2.1.10: Add animation for trail progression
Task 6.2.2 - Highlight Flagship Species | P1 | Status: [ ] Not Started
- Task 6.2.2.1: Create flagship_species table (species_id, priority)
- Task 6.2.2.2: Mark tiger and leopard as flagship species
- Task 6.2.2.3: Create special alerts for flagship sightings
- Task 6.2.2.4: Implement SMS/email notifications for officers
- Task 6.2.2.5: Add flagship species filter to dashboards
- Task 6.2.2.6: Create dedicated flagship species report
- Task 6.2.2.7: Highlight flagship trails on map (different color)
- Task 6.2.2.8: Track flagship species population trends
- Task 6.2.2.9: Generate monthly flagship species summary
Task 7.1.1 - Live Map Layers | P0 | Status: [ ] Not Started
- Task 7.1.1.1: Create map page with Google Maps
- Task 7.1.1.2: Add camera layer (markers with status colors)
- Task 7.1.1.3: Add sightings layer (species-specific icons)
- Task 7.1.1.4: Add movement paths layer (polylines)
- Task 7.1.1.5: Implement layer toggle controls
- Task 7.1.1.6: Add layer opacity controls
- Task 7.1.1.7: Create custom map legend
- Task 7.1.1.8: Implement marker clustering for performance
- Task 7.1.1.9: Add info windows for markers
- Task 7.1.1.10: Optimize map rendering for large datasets
Task 7.1.2 - Advanced Filters | P0 | Status: [ ] Not Started
- Task 7.1.2.1: Add species filter (multi-select dropdown)
- Task 7.1.2.2: Add date range filter (calendar picker)
- Task 7.1.2.3: Add confidence filter (slider)
- Task 7.1.2.4: Add "officer verified only" checkbox
- Task 7.1.2.5: Add camera filter (multi-select)
- Task 7.1.2.6: Add division/range filter (hierarchical)
- Task 7.1.2.7: Implement filter combination logic (AND/OR)
- Task 7.1.2.8: Add "clear all filters" button
- Task 7.1.2.9: Save filter presets
- Task 7.1.2.10: Update map in real-time on filter change
- Task 7.1.2.11: Add URL query params for shareable filtered views
Task 8.1.1 - API Architecture | P0 | Status: [ ] Not Started
- Task 8.1.1.1: Set up Bun.js HTTP server
- Task 8.1.1.2: Implement layered architecture (controller β service β repository)
- Task 8.1.1.3: Install Zod for request validation
- Task 8.1.1.4: Create validation schemas for all endpoints
- Task 8.1.1.5: Implement error handling middleware
- Task 8.1.1.6: Add request logging middleware
- Task 8.1.1.7: Set up CORS configuration
- Task 8.1.1.8: Create OpenAPI/Swagger documentation
- Task 8.1.1.9: Implement rate limiting
- Task 8.1.1.10: Add request ID generation
- Task 8.1.1.11: Create health check endpoints
Task 8.1.2 - Event-Driven Pipeline | P0 | Status: [ ] Not Started
- Task 8.1.2.1: Set up event bus (Redis Pub/Sub or similar)
- Task 8.1.2.2: Define event types (image.uploaded, image.inferred, etc.)
- Task 8.1.2.3: Create event publishers
- Task 8.1.2.4: Create event subscribers
- Task 8.1.2.5: Implement image upload β infer pipeline
- Task 8.1.2.6: Implement infer β verify pipeline
- Task 8.1.2.7: Implement verify β analyze pipeline
- Task 8.1.2.8: Add event logging and monitoring
- Task 8.1.2.9: Implement retry logic for failed events
- Task 8.1.2.10: Create event replay mechanism
Task 9.1.1 - Dockerize All Services | P0 | Status: [ ] Not Started
- Task 9.1.1.1: Create Dockerfile for bun-api
- Task 9.1.1.2: Create Dockerfile for React web app
- Task 9.1.1.3: Create Dockerfile for ai-node
- Task 9.1.1.4: Use official PostgreSQL + PostGIS image
- Task 9.1.1.5: Use official MinIO image
- Task 9.1.1.6: Create Dockerfile for Flower server
- Task 9.1.1.7: Optimize Docker images (multi-stage builds)
- Task 9.1.1.8: Add health checks to all containers
- Task 9.1.1.9: Configure container resource limits
- Task 9.1.1.10: Create .dockerignore files
Task 9.1.2 - Docker Compose Profiles | P0 | Status: [ ] Not Started
- Task 9.1.2.1: Create docker-compose.yml
- Task 9.1.2.2: Define 'edge' profile (Range HQ deployment)
- Task 9.1.2.3: Define 'central' profile (Central HQ deployment)
- Task 9.1.2.4: Configure service dependencies
- Task 9.1.2.5: Set up named volumes for persistence
- Task 9.1.2.6: Configure networks (frontend, backend, storage)
- Task 9.1.2.7: Add environment variable files (.env)
- Task 9.1.2.8: Create docker-compose.override.yml for local dev
- Task 9.1.2.9: Document deployment commands
- Task 9.1.2.10: Test edge and central profiles
Task 9.1.3 - Secure Secrets Management | P0 | Status: [ ] Not Started
- Task 9.1.3.1: Set up HashiCorp Vault or Docker Secrets
- Task 9.1.3.2: Store database credentials securely
- Task 9.1.3.3: Store MinIO access keys securely
- Task 9.1.3.4: Store JWT signing keys securely
- Task 9.1.3.5: Store Google Maps API key securely
- Task 9.1.3.6: Implement secret rotation policy
- Task 9.1.3.7: Add secret access logging
- Task 9.1.3.8: Create secret backup and recovery process
- Task 9.1.3.9: Document secrets management workflow
Task 10.1.1 - Compliance Alignment | P0 | Status: [ ] Not Started
- Task 10.1.1.1: Research Govt data retention norms
- Task 10.1.1.2: Implement data retention policies
- Task 10.1.1.3: Create immutable audit logs table
- Task 10.1.1.4: Log all data access and modifications
- Task 10.1.1.5: Implement GDPR-like data export
- Task 10.1.1.6: Implement data deletion workflow
- Task 10.1.1.7: Create compliance reports
- Task 10.1.1.8: Document compliance procedures
- Task 10.1.1.9: Add data encryption at rest (MinIO)
- Task 10.1.1.10: Add data encryption in transit (TLS)
Task 10.1.2 - Intrusion Detection | P1 | Status: [ ] Not Started
- Task 10.1.2.1: Monitor abnormal camera activity (too many/few images)
- Task 10.1.2.2: Detect suspicious upload patterns
- Task 10.1.2.3: Monitor failed login attempts
- Task 10.1.2.4: Implement IP-based rate limiting
- Task 10.1.2.5: Add anomaly detection for API usage
- Task 10.1.2.6: Create security alerts (email/SMS)
- Task 10.1.2.7: Log all security events
- Task 10.1.2.8: Create security dashboard
- Task 10.1.2.9: Implement automated response (block IP, etc.)
Task 11.1.1 - Synthetic Data Generator | P1 | Status: [ ] Not Started
- Task 11.1.1.1: Create fake camera feed generator
- Task 11.1.1.2: Generate synthetic wildlife images (GAN or image augmentation)
- Task 11.1.1.3: Create mock animal trails (realistic movement patterns)
- Task 11.1.1.4: Generate EXIF metadata for synthetic images
- Task 11.1.1.5: Populate database with test data
- Task 11.1.1.6: Create seed script for development environment
- Task 11.1.1.7: Document synthetic data generation process
Task 11.1.2 - Load & Failure Testing | P1 | Status: [ ] Not Started
- Task 11.1.2.1: Set up load testing framework (k6 or Artillery)
- Task 11.1.2.2: Create load test scenarios (upload, inference, queries)
- Task 11.1.2.3: Simulate camera outage scenarios
- Task 11.1.2.4: Simulate network partition for FL
- Task 11.1.2.5: Test database failover
- Task 11.1.2.6: Test MinIO failure recovery
- Task 11.1.2.7: Create chaos engineering tests
- Task 11.1.2.8: Document test results and bottlenecks
- Task 11.1.2.9: Implement performance optimizations
Task 12.1.1 - Role-Specific Manuals | P1 | Status: [ ] Not Started
- Task 12.1.1.1: Create Ground Staff SOP (image upload, camera maintenance)
- Task 12.1.1.2: Create Range Officer SOP (verification, reports)
- Task 12.1.1.3: Create Divisional Officer SOP (analytics, oversight)
- Task 12.1.1.4: Create Admin SOP (system management, FL training)
- Task 12.1.1.5: Add screenshots and videos to manuals
- Task 12.1.1.6: Translate manuals to Hindi (if required)
- Task 12.1.1.7: Create quick reference cards
- Task 12.1.1.8: Conduct user training sessions
Task 12.1.2 - Disaster Recovery Playbooks | P0 | Status: [ ] Not Started
- Task 12.1.2.1: Create database backup and restore procedures
- Task 12.1.2.2: Create MinIO backup and restore procedures
- Task 12.1.2.3: Document system recovery steps
- Task 12.1.2.4: Create incident response plan
- Task 12.1.2.5: Set up automated backups (daily)
- Task 12.1.2.6: Test backup restoration regularly
- Task 12.1.2.7: Document RTO and RPO targets
- Task 12.1.2.8: Create communication plan for outages
Total Modules: 12
Total Tasks: 100+
Critical Path: Module 0 β Module 1 β Module 2 β Module 3 β Module 4 cleanup/stabilization β Module 6/7 analytics and maps
Deployment Model: Edge (Range HQ) + Central (Forest HQ)
Key Differentiators: BLIP-assisted wildlife labeling, PostGIS geospatial, Offline-first upload, Field-optimized review workflow
Last Updated: May 1, 2026
Next Review: After Module 4 cleanup tasks are resolved