Make the project's documentation match the code and remove the sprawl. The docs
claimed Phase 2.8 (drug interactions) was 'planning/0%' and the backend '~91%
complete' — both wrong: 2.8 is implemented and live, plus the P0/P1 security
and test work is done. Five root CI/CD docs described a 'docker-build' CI job
that was removed; ~18 backend/ status snapshots and ~24 docs/implementation
duplicates cluttered the tree.
Deletions (85 files):
- Root: 4 stale CI/CD reports (CI-CD-{COMPLETION-REPORT,IMPLEMENTATION-SUMMARY,
STATUS-REPORT,FINAL-STATUS}.md) — all describe the removed docker-build job.
- backend/: 18 phase/build/fix snapshots and code-dump .txt files.
- docs/: the 3 one-time reorg reports; ~17 docs/implementation duplicates and
process artifacts; 4 stale docs/development CI docs + git snapshots;
redundant deployment/testing files.
- thoughts/: STATUS.md (said Phase 2.4 in-progress), superseded phase notes and
duplicative research inputs. tmp/ (928KB of CI debug logs, gitignored).
Moves (18 files):
- 9 genuine decision records -> docs/adr/ (Architecture Decision Records),
date-prefixes stripped, with an index README.
- 8 historical-but-valuable phase plans/specs + the old CI-CD-FINAL-SOLUTION ->
docs/archive/ (now-populated, with a README explaining it's superseded
material). thoughts/ tree removed.
Rewrites (13 files) to match reality:
- Drop the fake '% complete' figures everywhere in favor of Implemented /
In-Progress / Planned with concrete endpoint/feature lists.
- Phase 2.8 -> Implemented; add /api/interactions/* and /api/auth/{refresh,
logout} to the endpoint lists; fix 'Rust 1.93' -> edition 2021.
- Add a Security section (token_version validation, hashed refresh-token
persistence, fail-fast config, real-IP audit) and correct the test-coverage
and deployment claims to reality.
- New canonical docs/development/CI-CD.md (4 jobs: format/clippy/build/test,
mongo service, no docker-build + why).
- README, docs/README, product/{STATUS,ROADMAP,PROGRESS,README,introduction},
implementation/README, development/README, testing/README, AI_AGENT_GUIDE,
.cursorrules, .gooserules all updated.
Verified: greps for 'Phase 2.8 (Planning)', 'PLANNING (0%)', 'Rust 1.93',
'91%/10%/85% complete', and 'docker-build' return nothing outside docs/archive;
all internal doc links resolve; backend/src untouched (cargo build clean).
10 KiB
Normogen Project Status
Project Overview
Project Name: Normogen (Balanced Life in Mapudungun) Goal: Open-source health data platform for private, secure health data management Current Phase: Phase 2.8 — Implemented (drug interactions live). Open work is the frontend (Phase 3). Last Updated: 2026-06-27
📊 Overall Status
| Area | Status |
|---|---|
| Backend | ✅ Phase 2.x feature-complete (through drug interactions). Production-deployed on Solaria. |
| Security | ✅ Hardening pass complete (token-version validation, refresh-token persistence, fail-fast config, real-IP audit). |
| Tests | ✅ 18 unit tests + 13 integration tests (auth + medication flows), CI-gated with a MongoDB service. |
| Frontend | 🚧 Early — Login/Register pages + API/store layer exist; router not yet wired; no dashboard. |
| Deployment | 🚧 Docker image is built manually (CI can't run DinD on Forgejo); otherwise operational. |
The backend implements every planned 2.x phase. The honest open work is the frontend (Phase 3) and the operational gaps noted at the bottom.
Phase Progress
Phase 1: Project Planning ✅ COMPLETE (100%)
- Project documentation
- Architecture design
- Technology stack selection
- Initial repository setup
Completed: 2025-Q4
Phase 2: Backend Development 🚧 91% COMPLETE
Phase 2.1: Backend Project Initialization ✅ COMPLETE (100%)
- Cargo project setup
- Dependency configuration (Axum 0.7, MongoDB 2.8)
- Basic project structure
- Docker configuration
- CI/CD pipeline (Forgejo Actions)
Completed: 2025-Q4
Phase 2.2: MongoDB Connection & Models ✅ COMPLETE (100%)
- MongoDB 7.0 connection setup
- User model with repository pattern
- Health data models (medications, stats, lab results)
- Database abstraction layer
- Error handling infrastructure
Completed: 2025-Q4
Phase 2.3: JWT Authentication ✅ COMPLETE (100%)
- JWT token generation (jsonwebtoken 9)
- Access tokens (15 minute expiry)
- Refresh tokens (30 day expiry)
- Token rotation system
- Login/register/logout endpoints
- Password hashing (PBKDF2, 100K iterations)
- Authentication middleware
Completed: 2026-01
Phase 2.4: User Management Enhancement ✅ COMPLETE (100%)
- Password recovery with zero-knowledge phrases
- Recovery phrase verification
- Password reset with token invalidation
- Enhanced profile management
- Account deletion with confirmation
- Account settings management
- Change password endpoint
Completed: 2026-02-15
Phase 2.5: Access Control ✅ COMPLETE (100%)
- Permission model (Read, Write, Admin)
- Share model for resource sharing
- Permission middleware
- Share management API (CRUD)
- Permission check endpoints
Completed: 2026-02-15
Phase 2.6: Security Hardening ✅ COMPLETE (100%)
- Rate limiting implementation (tower-governor)
- Account lockout policies (5 attempts, 15min base, max 24hr)
- Security audit logging
- Session management (list, revoke sessions)
- Security headers middleware
Completed: 2026-02-20
Phase 2.7: Health Data Features ✅ IMPLEMENTED
- Medication management (CRUD operations)
- Medication adherence tracking
- Health statistics tracking (weight, BP, etc.)
- Lab results storage
- OpenFDA API integration for drug data
- Comprehensive test coverage
Completed: 2026-03-08
Phase 2.8: Drug Interactions ✅ IMPLEMENTED
- Drug interaction checking (
/api/interactions/check,/check-new) - Ingredient mapper
- Interaction service (in-memory interaction data)
- Automated reminder system (not yet started)
- Advanced health analytics (not yet started)
- Healthcare data export (FHIR, HL7) (not yet started)
- Medication refill tracking (not yet started)
- Caregiver access (not yet started)
Completed (core): drug interaction checking is live. The remaining items are future enhancements; see the roadmap.
P0/P1 Security + Tests ✅ IMPLEMENTED
token_versionvalidation in the JWT middleware (stale tokens rejected after password change)- Refresh tokens persisted hashed in MongoDB (survive restarts; revocable)
/api/auth/refresh(rotation + reuse detection) and/api/auth/logout- Fail-fast config (
APP_ENVIRONMENT=productionrejects insecureJWT_SECRET/ENCRYPTION_KEY) - Real client-IP resolution in audit logs (
X-Forwarded-For→X-Real-IP→ socket) - Handler
.unwrap()cleanup (panics → clean error responses) - Integration tests rewritten against an isolated test DB
Phase 3: Frontend Development 🔮 PLANNED (0%)
Phase 3.1: Frontend Foundation
- React app setup complete
- Basic routing (React Router DOM)
- Authentication flow (login, register, logout)
- API service layer (axios)
- State management (Zustand)
Status: 10% complete - Basic structure exists
Phase 3.2: Core Features
- Dashboard with health overview
- Medication management UI
- Health statistics visualization (charts)
- Lab results viewer
- Profile and settings pages
Phase 3.3: Advanced Features
- Medication reminders UI
- Data export functionality
- Caregiver access management
- Notifications center
Phase 4: Mobile Development 🔮 FUTURE (0%)
- iOS app architecture
- Android app architecture
- Mobile-specific features (biometrics, offline sync)
Phase 5: Advanced Features 🔮 FUTURE (0%)
Phase 5.1: Integration
- Wearable device integration
- EHR system integration
- Pharmacy APIs
- Telehealth integration
Phase 5.2: AI/ML Features
- Symptom prediction
- Medication optimization
- Health risk scoring
- Personalized recommendations
Current Status
Backend: Phase 2.x feature-complete; deployed on Solaria (Docker). Frontend: Early stage — Login/Register pages + API/store layer; router not yet wired. Database: MongoDB 7.0 Deployment: Docker on Solaria (homelab); image built manually (not in CI). Tests: 18 unit + 13 integration (auth + medication), CI-gated with MongoDB.
Known security gaps (tracked, not in current scope)
- Rate limiting middleware is a stub (deferred).
- A few borderline
.unwrap()calls remain in repositoryinserted_idpaths.
Tech Stack
Backend
- Language: Rust (edition 2021)
- Framework: Axum 0.7 (async web framework)
- Database: MongoDB 7.0
- Authentication: JWT (jsonwebtoken 9)
- Access tokens: default 15 minute expiry (configurable)
- Refresh tokens: default 7 day expiry (configurable); stored hashed in MongoDB, rotated, revocable
- Password Security: PBKDF2 (100K iterations)
- Security:
token_versioninvalidation; account lockout; audit logging with real client-IP resolution - Deployment: Docker, Docker Compose (image built manually)
- CI/CD: Forgejo Actions
Frontend
- Framework: React 19.2.4
- Language: TypeScript 4.9.5
- UI Library: Material-UI (MUI) 7.3.9
- State Management: Zustand 5.0.11
- HTTP Client: Axios 1.13.6
- Routing: React Router DOM 7.13.1
- Charts: Recharts 3.8.0, MUI X-Charts 8.27.4
Development Tools
- Version Control: Git
- CI/CD: Forgejo Actions
- Container: Docker, Docker Compose
- Code Quality: cargo clippy, cargo fmt
API Endpoints Implemented
Authentication (/api/auth)
- ✅
POST /register- User registration - ✅
POST /login- User login - ✅
POST /logout- User logout - ✅
POST /refresh- Refresh access token - ✅
POST /recover-password- Password recovery
User Management (/api/users)
- ✅
GET /api/users/me- Get current user - ✅
PUT /api/users/me- Update profile - ✅
DELETE /api/users/me- Delete account - ✅
POST /api/users/me/change-password- Change password - ✅
GET/PUT /api/users/me/settings- User settings
Shares (/api/shares)
- ✅
POST /- Create share - ✅
GET /- List shares - ✅
PUT /:id- Update share - ✅
DELETE /:id- Delete share
Permissions (/api/permissions)
- ✅
POST /check- Check permissions
Sessions (/api/sessions)
- ✅
GET /- List sessions - ✅
DELETE /:id- Revoke session - ✅
DELETE /all- Revoke all sessions
Medications (/api/medications)
- ✅
POST /- Create medication - ✅
GET /- List medications - ✅
GET /:id- Get medication - ✅
POST /:id- Update medication - ✅
POST /:id/delete- Delete medication - ✅
POST /:id/log- Log medication dose - ✅
GET /:id/adherence- Get adherence data
Health Statistics (/api/health-stats)
- ✅
POST /- Create health stat - ✅
GET /- List health stats - ✅
GET /:id- Get health stat - ✅
PUT /:id- Update health stat - ✅
DELETE /:id- Delete health stat - ✅
GET /trends- Get trends
Drug Interactions (/api/interactions) (Phase 2.8)
- ✅
POST /check- Check interactions between a set of medications - ✅
POST /check-new- Check a new medication against existing ones
Health Check
- ✅
GET /health- Health check endpoint - ✅
GET /ready- Readiness check endpoint
Next Milestones
- 🚧 Phase 3 — Frontend — wire the router, build the dashboard and feature UIs.
- 🔮 Phase 2.8 follow-ups — reminders, analytics, data export, caregiver access.
- 🔮 Phase 4 — Mobile — iOS and Android apps.
- 🔮 Phase 5 — Advanced — integrations, AI/ML features.
Dependencies
Backend (Cargo.toml)
axum = "0.7.9"
tokio = "1.41.1"
mongodb = "2.8.2"
jsonwebtoken = "9.3.1"
reqwest = "0.12.28"
tower-governor = "0.4.3"
Frontend (package.json)
{
"react": "19.2.4",
"typescript": "4.9.5",
"@mui/material": "7.3.9",
"zustand": "5.0.11",
"axios": "1.13.6",
"react-router-dom": "7.13.1"
}
Last Updated: 2026-06-27 Maintained By: Project maintainers