# alexcalbri/idc architecture

> Architecture diagram of the GitHub repository alexcalbri/idc, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/alexcalbri/idc
- Repository: https://github.com/alexcalbri/idc

## Overview

IDC is a Kotlin Multiplatform, multi-tenant business application with Android, iOS, web, and desktop clients backed by a Ktor server. The principal flow is login, session restoration, dashboard navigation, and access to company or server-driven modules. Server-side branches also support company provisioning and self-service profile/backup operations, plus module metadata and module-specific routes. The README establishes the platform targets; sampled source supports the server routing, authentication, session persistence, and provisioning links shown here. Client internals and unsampled module wiring are represented only where paths and responsibilities are evident.

Main entry points: [`server/src/main/kotlin/com/ideasdeveloper/idc/server/company/application/CompanyProvisioningService.kt`](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/company/application/CompanyProvisioningService.kt) (Company provisioning), [`app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/App.kt`](https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/App.kt) (App navigation), [`server/src/main/kotlin/com/ideasdeveloper/idc/server/modules/ModuleRoutes.kt`](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/modules/ModuleRoutes.kt) (Module routes), [`server/src/main/kotlin/com/ideasdeveloper/idc/server/infrastructure/database/DatabaseFactory.kt`](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/infrastructure/database/DatabaseFactory.kt) (Central database)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Multiplatform client"]
  node_app["App navigation<br/>[App.kt]"]
  node_login_ui["Login screen<br/>[LoginScreen.kt]"]
  node_login_vm["Login view model<br/>[LoginViewModel.kt]"]
  node_login_api["Login API<br/>[LoginApi.kt]"]
  node_session_store["Session store<br/>[SessionStore.kt]"]
  node_dashboard["Dashboard<br/>[DashboardScreen.kt]"]
  node_company_ui["Company screens"]
  node_module_ui["Server-driven screen"]
  node_module_api["Module API<br/>[ModuleApi.kt]"]
end

subgraph group_auth["Authentication"]
  node_auth_routes["Auth routes<br/>[AuthRoutes.kt]"]
  node_scoped_login["Scoped login"]
  node_authentication["Credential authentication"]
  node_session_service["Session service<br/>[SessionService.kt]"]
  node_login_databases["Login databases<br/>[LoginDatabases.kt]"]
  node_user_repo["User repository"]
  node_session_repo["Session repository"]
end

subgraph group_company["Company administration"]
  node_company_routes["Company routes<br/>[CompanyRoutes.kt]"]
  node_provisioning["Company provisioning"]
  node_self_service["Company self-service"]
  node_backup_files["Backup files"]
  node_company_db[("Company databases")]
end

subgraph group_modules["Module runtime"]
  node_module_routes["Module routes<br/>[ModuleRoutes.kt]"]
  node_module_registry["Module registry<br/>[ServerModule.kt]"]
  node_module_defs["Module definitions<br/>[ClientesModule.kt]"]
end

subgraph group_server["Server platform"]
  node_central_db[("Central database<br/>[DatabaseFactory.kt]")]
  node_server_app["Ktor application<br/>[Application.kt]"]
end

node_user(("User"))
node_platforms(("App platforms<br/>[MainActivity.kt]"))

node_user -->|"enters credentials"| node_login_ui
node_app -->|"restores session"| node_session_store
node_app -->|"routes to"| node_login_ui
node_app -->|"routes to"| node_dashboard
node_login_ui -->|"handles actions"| node_login_vm
node_login_vm -->|"requests login"| node_login_api
node_login_vm -->|"stores session"| node_session_store
node_dashboard -->|"opens company"| node_company_ui
node_dashboard -->|"opens module"| node_module_ui
node_module_ui -->|"requests metadata"| node_module_api
node_platforms -->|"hosts shared app"| node_app
node_login_api -->|"posts login"| node_auth_routes
node_server_app -->|"installs routes"| node_auth_routes
node_auth_routes -->|"dispatches login"| node_scoped_login
node_scoped_login -->|"selects tenant scope"| node_login_databases
node_login_databases -->|"delegates credentials"| node_authentication
node_authentication -->|"looks up user"| node_user_repo
node_session_service -->|"creates or validates"| node_session_repo
node_session_service -->|"loads user"| node_user_repo
node_user_repo -->|"queries users"| node_central_db
node_session_repo -->|"reads and writes sessions"| node_central_db
node_server_app -->|"installs routes"| node_company_routes
node_company_routes -->|"handles administration"| node_provisioning
node_company_routes -->|"handles self-service"| node_self_service
node_provisioning -->|"records companies"| node_central_db
node_provisioning -->|"creates tenant database"| node_company_db
node_provisioning -->|"registers tenant"| node_login_databases
node_self_service -->|"reads and updates profile"| node_central_db
node_self_service -->|"writes and reads ZIPs"| node_backup_files
node_server_app -->|"installs routes"| node_module_routes
node_module_routes -->|"serves definitions"| node_module_registry
node_module_routes -->|"installs module routes"| node_module_registry
node_module_api -->|"requests module metadata"| node_module_routes
node_module_registry -.->|"registers module"| node_module_defs

click node_app "https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/App.kt"
click node_login_ui "https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/auth/ui/LoginScreen.kt"
click node_login_vm "https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/auth/presentation/LoginViewModel.kt"
click node_login_api "https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/auth/data/LoginApi.kt"
click node_session_store "https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/core/session/SessionStore.kt"
click node_dashboard "https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/dashboard/ui/DashboardScreen.kt"
click node_company_ui "https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/company/ui/CompanyManagementScreen.kt"
click node_module_ui "https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/modules/ui/ServerDrivenModuleScreen.kt"
click node_auth_routes "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/api/AuthRoutes.kt"
click node_scoped_login "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/application/ScopedLoginService.kt"
click node_authentication "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/application/AuthenticationService.kt"
click node_session_service "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/application/SessionService.kt"
click node_login_databases "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/infrastructure/database/LoginDatabases.kt"
click node_user_repo "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/infrastructure/database/ApplicationUserRepository.kt"
click node_session_repo "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/infrastructure/database/ApplicationSessionRepository.kt"
click node_company_routes "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/company/api/CompanyRoutes.kt"
click node_provisioning "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/company/application/CompanyProvisioningService.kt"
click node_self_service "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/company/application/CompanySelfService.kt"
click node_module_api "https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/modules/data/ModuleApi.kt"
click node_module_routes "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/modules/ModuleRoutes.kt"
click node_module_registry "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/modules/ServerModule.kt"
click node_module_defs "https://github.com/alexcalbri/idc/blob/develop/modules/clientes/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/modules/clientes/ClientesModule.kt"
click node_central_db "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/infrastructure/database/DatabaseFactory.kt"
click node_server_app "https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/app/Application.kt"
click node_platforms "https://github.com/alexcalbri/idc/blob/develop/app/androidApp/src/main/kotlin/com/ideasdeveloper/idc/MainActivity.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_login_ui,node_login_vm,node_login_api,node_session_store,node_dashboard,node_company_ui,node_module_ui,node_module_api,node_user toneBlue
class node_auth_routes,node_scoped_login,node_authentication,node_session_service,node_login_databases,node_user_repo,node_session_repo toneAmber
class node_company_routes,node_provisioning,node_self_service,node_backup_files,node_company_db toneMint
class node_module_routes,node_module_registry,node_module_defs toneRose
class node_central_db,node_server_app toneIndigo
class node_platforms toneTeal
```

## Components

### Multiplatform client

- [App navigation](https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/App.kt): `app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/App.kt`
- [Login screen](https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/auth/ui/LoginScreen.kt): `app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/auth/ui/LoginScreen.kt`
- [Login view model](https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/auth/presentation/LoginViewModel.kt): `app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/auth/presentation/LoginViewModel.kt`
- [Login API](https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/auth/data/LoginApi.kt): `app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/auth/data/LoginApi.kt`
- [Session store](https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/core/session/SessionStore.kt): `app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/core/session/SessionStore.kt`
- [Dashboard](https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/dashboard/ui/DashboardScreen.kt): `app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/dashboard/ui/DashboardScreen.kt`
- [Company screens](https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/company/ui/CompanyManagementScreen.kt): `app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/company/ui/CompanyManagementScreen.kt`
- [Server-driven screen](https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/modules/ui/ServerDrivenModuleScreen.kt): `app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/modules/ui/ServerDrivenModuleScreen.kt`
- [Module API](https://github.com/alexcalbri/idc/blob/develop/app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/modules/data/ModuleApi.kt): `app/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/app/features/modules/data/ModuleApi.kt`

### Authentication

- [Auth routes](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/api/AuthRoutes.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/api/AuthRoutes.kt`
- [Scoped login](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/application/ScopedLoginService.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/application/ScopedLoginService.kt`
- [Credential authentication](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/application/AuthenticationService.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/application/AuthenticationService.kt`
- [Session service](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/application/SessionService.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/application/SessionService.kt`
- [Login databases](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/infrastructure/database/LoginDatabases.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/infrastructure/database/LoginDatabases.kt`
- [User repository](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/infrastructure/database/ApplicationUserRepository.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/infrastructure/database/ApplicationUserRepository.kt`
- [Session repository](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/infrastructure/database/ApplicationSessionRepository.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/auth/infrastructure/database/ApplicationSessionRepository.kt`

### Company administration

- [Company routes](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/company/api/CompanyRoutes.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/company/api/CompanyRoutes.kt`
- [Company provisioning](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/company/application/CompanyProvisioningService.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/company/application/CompanyProvisioningService.kt`
- [Company self-service](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/company/application/CompanySelfService.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/company/application/CompanySelfService.kt`
- **Backup files**
- **Company databases**

### Module runtime

- [Module routes](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/modules/ModuleRoutes.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/modules/ModuleRoutes.kt`
- [Module registry](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/modules/ServerModule.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/modules/ServerModule.kt`
- [Module definitions](https://github.com/alexcalbri/idc/blob/develop/modules/clientes/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/modules/clientes/ClientesModule.kt): `modules/clientes/shared/src/commonMain/kotlin/com/ideasdeveloper/idc/modules/clientes/ClientesModule.kt`

### Server platform

- [Central database](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/infrastructure/database/DatabaseFactory.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/infrastructure/database/DatabaseFactory.kt`
- [Ktor application](https://github.com/alexcalbri/idc/blob/develop/server/src/main/kotlin/com/ideasdeveloper/idc/server/app/Application.kt): `server/src/main/kotlin/com/ideasdeveloper/idc/server/app/Application.kt`

### Other components

- **User**
- [App platforms](https://github.com/alexcalbri/idc/blob/develop/app/androidApp/src/main/kotlin/com/ideasdeveloper/idc/MainActivity.kt): `app/androidApp/src/main/kotlin/com/ideasdeveloper/idc/MainActivity.kt`

## Connections

- User → Login screen: enters credentials
- App navigation → Session store: restores session
- App navigation → Login screen: routes to
- App navigation → Dashboard: routes to
- Login screen → Login view model: handles actions
- Login view model → Login API: requests login
- Login view model → Session store: stores session
- Dashboard → Company screens: opens company
- Dashboard → Server-driven screen: opens module
- Server-driven screen → Module API: requests metadata
- App platforms → App navigation: hosts shared app
- Login API → Auth routes: posts login
- Ktor application → Auth routes: installs routes
- Auth routes → Scoped login: dispatches login
- Scoped login → Login databases: selects tenant scope
- Login databases → Credential authentication: delegates credentials
- Credential authentication → User repository: looks up user
- Session service → Session repository: creates or validates
- Session service → User repository: loads user
- User repository → Central database: queries users
- Session repository → Central database: reads and writes sessions
- Ktor application → Company routes: installs routes
- Company routes → Company provisioning: handles administration
- Company routes → Company self-service: handles self-service
- Company provisioning → Central database: records companies
- Company provisioning → Company databases: creates tenant database
- Company provisioning → Login databases: registers tenant
- Company self-service → Central database: reads and updates profile
- Company self-service → Backup files: writes and reads ZIPs
- Ktor application → Module routes: installs routes
- Module routes → Module registry: serves definitions
- Module routes → Module registry: installs module routes
- Module API → Module routes: requests module metadata
- Module registry → Module definitions: registers module
