No description
Find a file
goose 8b2c13501f Phase 2.3: JWT Authentication implementation
- Implemented JWT-based authentication system with access and refresh tokens
- Added password hashing service using PBKDF2
- Created authentication handlers: register, login, refresh, logout
- Added protected routes with JWT middleware
- Created user profile handlers
- Fixed all compilation errors
- Added integration tests for authentication endpoints
- Added reqwest dependency for testing
- Created test script and environment example documentation

All changes:
- backend/src/auth/: Complete auth module (JWT, password, claims)
- backend/src/handlers/: Auth, users, and health handlers
- backend/src/middleware/: JWT authentication middleware
- backend/src/config/: Added AppState with Clone derive
- backend/src/main.rs: Fixed imports and added auth routes
- backend/src/db/mod.rs: Changed error handling to anyhow::Result
- backend/Cargo.toml: Added reqwest for testing
- backend/tests/auth_tests.rs: Integration tests
- thoughts/: Documentation updates (STATUS.md, env.example, test_auth.sh)
2026-02-14 20:03:11 -03:00
backend Phase 2.3: JWT Authentication implementation 2026-02-14 20:03:11 -03:00
thoughts Phase 2.3: JWT Authentication implementation 2026-02-14 20:03:11 -03:00
.gitignore Phase 2.1: Backend project initialized with Docker configuration 2026-02-14 15:30:06 -03:00
encryption.md Initial commit: Project setup and documentation 2026-02-14 11:11:06 -03:00
introduction.md Initial commit: Project setup and documentation 2026-02-14 11:11:06 -03:00
README.md Docs: Add backend deployment constraints and monorepo structure 2026-02-14 15:30:13 -03:00

/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)