- Documented Docker/Kubernetes deployment requirements - Added homelab configuration (resource limits, ports) - Configured reverse proxy compatibility - Designed monorepo structure (backend/mobile/web/shared)
149 lines
4.5 KiB
Markdown
149 lines
4.5 KiB
Markdown
### /home/asoliver/desarrollo/normogen/README.md
|
|
```markdown
|
|
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
|
|
|
|
```bash
|
|
# 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)
|