No description
| backend | ||
| thoughts/research | ||
| .gitignore | ||
| encryption.md | ||
| introduction.md | ||
| README.md | ||
/home/asoliver/desarrollo/normogen/README.md
1: # Normogen
2:
3: ## Overview
4:
5: Normogen is a privacy-focused health data tracking and management platform. The name comes from Mapudungun, relating to Balanced Life.
6:
7: ## Vision
8:
9: To record as many variables related to health as possible, store them in a secure, private manner, to be used by you, not by corporations. From medication reminders to pattern analysis, Normogen puts you in control of your health data.
10:
11: ## Technology Stack
12:
13: ### Backend
14: - **Framework**: Axum 0.7.x
15: - **Runtime**: Tokio 1.x
16: - **Middleware**: Tower, Tower-HTTP
17: - **Database**: MongoDB (with zero-knowledge encryption)
18: - **Language**: Rust
19:
20: ### Mobile (iOS + Android)
21: - **Framework**: React Native 0.73+
22: - **Language**: TypeScript
23: - **State Management**: Redux Toolkit 2.x
24: - **Data Fetching**: RTK Query 2.x
25: - **Health Sensors**: react-native-health, react-native-google-fit
26: - **Encryption**: react-native-quick-crypto
27:
28: ### Web
29: - **Framework**: React 18+
30: - **Language**: TypeScript
31: - **State Management**: Redux Toolkit 2.x
32: - **Data Fetching**: RTK Query 2.x
33: - **Charts**: Recharts
34:
35: ### Deployment
36: - Docker on Linux
37:
38: ## Platform Strategy
39:
40: **Primary: Mobile Apps** - Daily health tracking, sensor integration, QR scanning, push notifications
41:
42: **Secondary: Web Browser** - Extensive reporting, visualization, profile management
43:
44: ## Key Features
45:
46: - Zero-knowledge encryption
47: - Multi-person profiles
48: - Family structure management
49: - Secure sharing with expiring links
50: - Mobile apps with health sensor integration
51: - Web interface for complex visualizations
52:
53: ## Security Model
54:
55: - Client-side encryption: Data encrypted before leaving device
56: - Zero-knowledge: Server stores only encrypted data
57: - Proton-style encryption: AES-256-GCM with PBKDF2 key derivation
58: - Shareable links: Self-contained decryption keys in URLs
59: - Privacy-first: No data selling, subscription-based revenue
60:
61: ## Documentation
62:
63: - [Introduction](./introduction.md) - Project vision and detailed feature specification
64: - [Encryption Implementation Guide](./encryption.md) - Zero-knowledge encryption architecture
65: - [Research](./thoughts/research/) - Technical research and planning documents
66:
67: ## Development Status
68:
69: Phase: Planning/Documentation
70:
71: ### Completed
72: - Project vision and requirements
73: - Security architecture design
74: - Encryption implementation guide
75: - Git repository initialization
76: - **Rust framework selection: Axum**
77: - **Mobile/Web framework selection: React Native + React**
78: - **State management selection: Redux Toolkit 2.x**
79:
80: ### Next Steps
81: - Authentication system design (JWT with recovery phrases)
82: - Database schema design
83: - Create proof-of-concept with Axum
84: - Implement basic CRUD API
85: - Build mobile apps with health sensor integration
86: - Build web companion app
87: - Add encryption layer
88: - Implement sharing functionality
89:
90: ## Open Source
91:
92: Normogen is open-source. Both server and client code will be publicly available.
93:
94: Note: This project is currently in the planning phase. No implementation code has been written yet.
Monorepo Structure
This is a monorepo containing backend, mobile, web, and shared code:
normogen/
├── backend/ # Rust backend (Axum + MongoDB)
├── mobile/ # React Native (iOS + Android)
├── web/ # React web app
├── shared/ # Shared TypeScript code
└── thoughts/ # Research & design docs
Each platform has its own src/ directory to keep codebases separate while sharing common code through the shared/ directory.
Repository Management
- Git Hosting: Forgejo (self-hosted)
- CI/CD: Forgejo Actions
- Branch Strategy:
main,develop,feature/* - Deployment: Docker Compose (homelab), Kubernetes (future)
Deployment
Backend Deployment
# Clone repository
git clone <forgejo-url> normogen
cd normogen/backend
# Setup configuration
cp config/.env.example config/.env
# Edit config/.env
# Build and run
docker compose build
docker compose up -d
# Check status
curl http://localhost:6000/health
Resource Limits (Homelab):
- CPU: 1000m (1 core)
- Memory: 1000Mi (1GB RAM)
Ports:
- Backend API:
6000(host) →8000(container) - MongoDB:
27017(standard port)