# Monorepo Structure ## Repository Layout ``` normogen/ # Root Forgejo repository ├── backend/ # Rust backend (Axum + MongoDB) │ ├── src/ # Source code │ │ ├── main.rs # Entry point │ │ ├── auth/ # Authentication │ │ │ ├── mod.rs │ │ │ ├── jwt_service.rs │ │ │ ├── claims.rs │ │ │ └── middleware.rs │ │ ├── api/ # API endpoints │ │ │ ├── mod.rs │ │ │ ├── users.rs │ │ │ ├── families.rs │ │ │ ├── profiles.rs │ │ │ ├── health_data.rs │ │ │ ├── lab_results.rs │ │ │ ├── medications.rs │ │ │ ├── appointments.rs │ │ │ └── shares.rs │ │ ├── db/ # Database │ │ │ ├── mod.rs │ │ │ ├── mongo.rs │ │ │ ├── models.rs │ │ │ └── repositories.rs │ │ ├── config/ # Configuration │ │ │ ├── mod.rs │ │ │ ├── app.rs │ │ │ ├── jwt.rs │ │ │ ├── mongo.rs │ │ │ └── cors.rs │ │ ├── middleware/ # Middleware │ │ │ ├── mod.rs │ │ │ ├── auth.rs │ │ │ ├── logging.rs │ │ │ └── rate_limit.rs │ │ ├── utils/ # Utilities │ │ │ ├── mod.rs │ │ │ ├── crypto.rs │ │ │ └── validation.rs │ │ └── error.rs # Error types │ ├── docker/ │ │ ├── Dockerfile # Production build │ │ └── Dockerfile.dev # Development build │ ├── config/ │ │ ├── .env.example # Environment template │ │ └── defaults.env # Default values │ ├── k8s/ # Kubernetes manifests (future) │ │ ├── base/ │ │ └── overlays/ │ ├── Cargo.toml # Dependencies │ ├── Cargo.lock # Lock file │ ├── docker-compose.yml # Production deployment │ ├── docker-compose.dev.yml # Development deployment │ └── README.md # Backend README │ ├── mobile/ # React Native (iOS + Android) │ ├── src/ # Source code │ │ ├── components/ # Reusable components │ │ │ ├── common/ │ │ │ ├── health/ │ │ │ ├── lab/ │ │ │ └── medication/ │ │ ├── screens/ # Screen components │ │ │ ├── auth/ │ │ │ ├── home/ │ │ │ ├── family/ │ │ │ ├── profile/ │ │ │ ├── health/ │ │ │ ├── lab/ │ │ │ └── settings/ │ │ ├── navigation/ # Navigation config │ │ │ ├── AppNavigator.tsx │ │ │ ├── AuthNavigator.tsx │ │ │ └── LinkingConfiguration.tsx │ │ ├── store/ # Redux store │ │ │ ├── slices/ │ │ │ │ ├── authSlice.ts │ │ │ │ ├── userSlice.ts │ │ │ │ ├── familySlice.ts │ │ │ │ ├── profileSlice.ts │ │ │ │ └── healthDataSlice.ts │ │ │ └── store.ts │ │ ├── services/ # API services │ │ │ ├── api.ts # Axios client │ │ │ ├── authService.ts │ │ │ ├── userService.ts │ │ │ └── healthDataService.ts │ │ ├── utils/ # Utilities │ │ │ ├── encryption.ts # Client-side encryption │ │ │ ├── validation.ts │ │ │ └── constants.ts │ │ ├── hooks/ # Custom hooks │ │ │ ├── useAuth.ts │ │ │ └── useEncryptedStorage.ts │ │ ├── types/ # TypeScript types │ │ │ └── index.ts │ │ └── assets/ # Images, fonts │ ├── android/ # Android native code │ │ ├── app/ │ │ └── build.gradle │ ├── ios/ # iOS native code │ │ ├── Normogen │ │ └── Podfile │ ├── package.json │ ├── tsconfig.json │ ├── App.tsx # Entry component │ ├── README.md │ └── .env.example │ ├── web/ # React web app │ ├── src/ # Source code │ │ ├── components/ # Reusable components │ │ │ ├── common/ │ │ │ ├── health/ │ │ │ ├── lab/ │ │ │ └── charts/ │ │ ├── pages/ # Page components │ │ │ ├── auth/ │ │ │ ├── home/ │ │ │ ├── family/ │ │ │ ├── profile/ │ │ │ ├── health/ │ │ │ ├── lab/ │ │ │ └── settings/ │ │ ├── store/ # Redux store (shared with mobile) │ │ │ ├── slices/ │ │ │ └── store.ts │ │ ├── services/ # API services (shared with mobile) │ │ │ ├── api.ts │ │ │ └── ... │ │ ├── utils/ # Utilities (shared with mobile) │ │ │ ├── encryption.ts │ │ │ └── ... │ │ ├── hooks/ # Custom hooks │ │ │ └── ... │ │ ├── types/ # TypeScript types (shared) │ │ │ └── index.ts │ │ ├── styles/ # CSS/global styles │ │ │ └── global.css │ │ └── App.tsx │ ├── package.json │ ├── tsconfig.json │ ├── index.html │ ├── vite.config.ts # Vite config │ └── README.md │ ├── shared/ # Shared TypeScript code │ ├── src/ │ │ ├── types/ # Shared type definitions │ │ │ ├── user.ts │ │ │ ├── family.ts │ │ │ ├── profile.ts │ │ │ ├── healthData.ts │ │ │ ├── labResults.ts │ │ │ ├── medications.ts │ │ │ ├── appointments.ts │ │ │ ├── shares.ts │ │ │ └── api.ts │ │ ├── validation/ # Zod schemas │ │ │ ├── user.ts │ │ │ ├── family.ts │ │ │ └── healthData.ts │ │ ├── encryption/ # Encryption utilities │ │ │ ├── crypto.ts │ │ │ └── keyDerivation.ts │ │ ├── api/ # Shared API client │ │ │ ├── client.ts │ │ │ └── endpoints.ts │ │ └── constants/ # Shared constants │ │ ├── routes.ts │ │ └── config.ts │ ├── package.json │ ├── tsconfig.json │ └── README.md │ ├── thoughts/ # Research & design docs │ ├── research/ │ │ ├── 2026-02-14-rust-framework-comparison.md │ │ ├── 2026-02-14-rust-framework-performance-research.md │ │ ├── 2026-02-14-performance-findings.md │ │ ├── 2026-02-14-research-summary.md │ │ ├── 2026-02-14-frontend-mobile-research.md │ │ ├── 2026-02-14-frontend-decision-summary.md │ │ ├── 2026-02-14-state-management-research.md │ │ ├── 2026-02-14-state-management-decision.md │ │ ├── 2026-02-14-jwt-authentication-research.md │ │ ├── 2026-02-14-jwt-authentication-decision.md │ │ ├── 2026-02-14-mongodb-schema-design-research.md │ │ ├── 2026-02-14-mongodb-schema-decision.md │ │ ├── 2026-02-14-backend-deployment-constraints.md │ │ └── 2026-02-14-monorepo-structure.md │ └── research/ │ ├── .gitignore # Root gitignore ├── README.md # Root README ├── docker-compose.root.yml # Run all services (optional) └── .forgejo/ # Forgejo CI/CD workflows └── workflows/ ├── backend-build.yml ├── mobile-build.yml └── web-build.yml ``` ## Directory Creation Commands ```bash # Create root directories mkdir -p backend/{src/{auth,api,db,config,middleware,utils},docker,config,k8s/base,k8s/overlays/homelab,k8s/overlays/production} mkdir -p mobile/{src/{components/{common,health,lab,medication},screens/{auth,home,family,profile,health,lab,settings},navigation,store/slices,services,utils,hooks,types,assets},android,ios} mkdir -p web/{src/{components/{common,health,lab,charts},pages/{auth,home,family,profile,health,lab,settings},store/slices,services,utils,hooks,types,styles}} mkdir -p shared/src/{types,validation,encryption,api,constants} mkdir -p thoughts/research mkdir -p .forgejo/workflows # Create placeholder files touch backend/src/{main.rs,auth/mod.rs,api/mod.rs,db/mod.rs,config/mod.rs,middleware/mod.rs,utils/mod.rs,error.rs} touch mobile/src/{App.tsx,navigation/AppNavigator.tsx,store/store.ts,services/api.ts,utils/encryption.ts} touch web/src/{App.tsx,store/store.ts,services/api.ts,utils/encryption.ts} touch shared/src/{types/index.ts,validation/index.ts,encryption/crypto.ts,api/client.ts} ``` ## Git Strategy ### Branch Strategy - `main`: Production releases - `develop`: Development integration - `feature/backend-*`: Backend features - `feature/mobile-*`: Mobile features - `feature/web-*`: Web features - `feature/shared-*`: Shared code features ### Commit Message Format ``` ():