# kevcav575/envirogest.mx architecture

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

- Interactive diagram: https://gitdiagram.com/kevcav575/envirogest.mx
- Repository: https://github.com/kevcav575/envirogest.mx

## Overview

EnviroGest MX is an environmental compliance workspace for client companies and their consultants, with administrative oversight. The user flow is role-based sign-in, then project work: clients complete an environmental questionnaire, review generated permits and their details, track schedules and alerts, and maintain ISO 14001 progress; consultants and administrators manage projects and users. The browser store excerpt shows project data persisted locally, while a separate Express service provides server-side user authentication and management. Several page modules are indexed but unsampled, so their internal calls are not inferred.

Main entry points: [`src/store/useAppStore.ts`](https://github.com/kevcav575/envirogest.mx/blob/main/src/store/useAppStore.ts) (App state actions), [`src/router.tsx`](https://github.com/kevcav575/envirogest.mx/blob/main/src/router.tsx) (Role routes), [`src/pages/workspace`](https://github.com/kevcav575/envirogest.mx/tree/main/src/pages/workspace) (Project workspace pages), [`src/pages/admin/AdminHomePage.tsx`](https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/admin/AdminHomePage.tsx) (Admin console)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["App entry and access"]
  node_app["React app<br/>[App.tsx]"]
  node_routing["Role routes<br/>[router.tsx]"]
  node_authguard["Role guard<br/>[AuthGuard.tsx]"]
  node_authpage["Sign-in page<br/>[AuthPage.tsx]"]
end

subgraph group_workspace["Compliance workspace"]
  node_workspacepages["Project workspace pages"]
  node_questionnaire["Environmental diagnosis"]
  node_permitcatalog["Permit catalog<br/>[tramites.ts]"]
  node_permitlogic["Permit generation<br/>[utils.ts]"]
  node_dashboard["Project dashboard<br/>[DashboardPage.tsx]"]
  node_permitdetail["Permit details"]
  node_schedule["Compliance schedule<br/>[CronogramaPage.tsx]"]
  node_alerts["Project alerts<br/>[AlertasPage.tsx]"]
  node_iso["ISO 14001 tracking<br/>[ISO14001Page.tsx]"]
end

subgraph group_management["People and oversight"]
  node_admin["Admin console<br/>[AdminHomePage.tsx]"]
  node_consultant["Consultant console"]
  node_consultantpanel["Consultant project panel"]
end

subgraph group_state["Application state"]
  node_appstore["App state actions<br/>[useAppStore.ts]"]
  node_localstore[("Browser project storage")]
  node_storageinterface["Storage contract"]
end

subgraph group_server["User service"]
  node_authservice["Auth API client<br/>[auth.service.ts]"]
  node_api["REST storage adapter<br/>[api.service.ts]"]
  node_serverentry["Express routes<br/>[index.ts]"]
  node_authroutes["Authentication routes<br/>[auth.ts]"]
  node_userroutes["User management routes<br/>[users.ts]"]
  node_middleware["JWT middleware<br/>[auth.ts]"]
  node_userstore[("JSON user store<br/>[store.ts]")]
end

node_user(("Workspace user"))
node_googlecalendar(("Google Calendar"))

node_user -->|"uses"| node_app
node_app -->|"renders"| node_routing
node_routing -->|"routes to"| node_authpage
node_routing -->|"guards routes"| node_authguard
node_routing -->|"routes to"| node_admin
node_routing -->|"routes to"| node_consultant
node_routing -->|"routes to"| node_workspacepages
node_authguard -->|"reads session"| node_appstore
node_authpage -->|"submits credentials"| node_appstore
node_questionnaire -->|"updates answers"| node_appstore
node_permitlogic -->|"filters catalog"| node_permitcatalog
node_questionnaire -.->|"generates permits"| node_permitlogic
node_workspacepages -.->|"includes"| node_dashboard
node_workspacepages -.->|"includes"| node_permitdetail
node_workspacepages -.->|"includes"| node_schedule
node_workspacepages -.->|"includes"| node_alerts
node_workspacepages -.->|"includes"| node_iso
node_dashboard -->|"reads project"| node_appstore
node_permitdetail -->|"updates permit"| node_appstore
node_schedule -->|"reads project"| node_appstore
node_alerts -->|"reads project"| node_appstore
node_admin -->|"manages records"| node_appstore
node_admin -->|"saves meeting"| node_localstore
node_consultantpanel -->|"manages projects"| node_appstore
node_appstore -.->|"persists data"| node_localstore
node_localstore -->|"implements"| node_storageinterface
node_appstore -.->|"delegates auth"| node_authservice
node_authservice -.->|"calls API"| node_serverentry
node_api -.->|"implements"| node_storageinterface
node_serverentry -->|"mounts routes"| node_authroutes
node_serverentry -->|"mounts routes"| node_userroutes
node_authroutes -->|"reads and writes"| node_userstore
node_userroutes -->|"reads and writes"| node_userstore
node_authroutes -->|"uses guard"| node_middleware
node_userroutes -->|"uses guard"| node_middleware
node_admin -->|"opens meeting link"| node_googlecalendar

click node_app "https://github.com/kevcav575/envirogest.mx/blob/main/src/App.tsx"
click node_routing "https://github.com/kevcav575/envirogest.mx/blob/main/src/router.tsx"
click node_authguard "https://github.com/kevcav575/envirogest.mx/blob/main/src/guards/AuthGuard.tsx"
click node_authpage "https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/auth/AuthPage.tsx"
click node_workspacepages "https://github.com/kevcav575/envirogest.mx/tree/main/src/pages/workspace"
click node_questionnaire "https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/QuestionnairePage.tsx"
click node_permitcatalog "https://github.com/kevcav575/envirogest.mx/blob/main/src/constants/tramites.ts"
click node_permitlogic "https://github.com/kevcav575/envirogest.mx/blob/main/src/lib/utils.ts"
click node_dashboard "https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/DashboardPage.tsx"
click node_permitdetail "https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/TramiteDetailPage.tsx"
click node_schedule "https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/CronogramaPage.tsx"
click node_alerts "https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/AlertasPage.tsx"
click node_iso "https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/ISO14001Page.tsx"
click node_admin "https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/admin/AdminHomePage.tsx"
click node_consultant "https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/consultant/ConsultantHomePage.tsx"
click node_consultantpanel "https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/ConsultorPanelPage.tsx"
click node_appstore "https://github.com/kevcav575/envirogest.mx/blob/main/src/store/useAppStore.ts"
click node_localstore "https://github.com/kevcav575/envirogest.mx/blob/main/src/services/localStorage.service.ts"
click node_storageinterface "https://github.com/kevcav575/envirogest.mx/blob/main/src/services/storage.interface.ts"
click node_authservice "https://github.com/kevcav575/envirogest.mx/blob/main/src/services/auth.service.ts"
click node_api "https://github.com/kevcav575/envirogest.mx/blob/main/src/services/api.service.ts"
click node_serverentry "https://github.com/kevcav575/envirogest.mx/blob/main/server/src/index.ts"
click node_authroutes "https://github.com/kevcav575/envirogest.mx/blob/main/server/src/routes/auth.ts"
click node_userroutes "https://github.com/kevcav575/envirogest.mx/blob/main/server/src/routes/users.ts"
click node_middleware "https://github.com/kevcav575/envirogest.mx/blob/main/server/src/middleware/auth.ts"
click node_userstore "https://github.com/kevcav575/envirogest.mx/blob/main/server/src/db/store.ts"

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_routing,node_authguard,node_authpage,node_user toneBlue
class node_workspacepages,node_questionnaire,node_permitcatalog,node_permitlogic,node_dashboard,node_permitdetail,node_schedule,node_alerts,node_iso toneAmber
class node_admin,node_consultant,node_consultantpanel toneMint
class node_appstore,node_localstore,node_storageinterface toneRose
class node_authservice,node_api,node_serverentry,node_authroutes,node_userroutes,node_middleware,node_userstore,node_googlecalendar toneIndigo
```

## Components

### App entry and access

- [React app](https://github.com/kevcav575/envirogest.mx/blob/main/src/App.tsx): `src/App.tsx`
- [Role routes](https://github.com/kevcav575/envirogest.mx/blob/main/src/router.tsx): `src/router.tsx`
- [Role guard](https://github.com/kevcav575/envirogest.mx/blob/main/src/guards/AuthGuard.tsx): `src/guards/AuthGuard.tsx`
- [Sign-in page](https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/auth/AuthPage.tsx): `src/pages/auth/AuthPage.tsx`

### Compliance workspace

- [Project workspace pages](https://github.com/kevcav575/envirogest.mx/tree/main/src/pages/workspace): `src/pages/workspace`
- [Environmental diagnosis](https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/QuestionnairePage.tsx): `src/pages/workspace/QuestionnairePage.tsx`
- [Permit catalog](https://github.com/kevcav575/envirogest.mx/blob/main/src/constants/tramites.ts): `src/constants/tramites.ts`
- [Permit generation](https://github.com/kevcav575/envirogest.mx/blob/main/src/lib/utils.ts): `src/lib/utils.ts`
- [Project dashboard](https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/DashboardPage.tsx): `src/pages/workspace/DashboardPage.tsx`
- [Permit details](https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/TramiteDetailPage.tsx): `src/pages/workspace/TramiteDetailPage.tsx`
- [Compliance schedule](https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/CronogramaPage.tsx): `src/pages/workspace/CronogramaPage.tsx`
- [Project alerts](https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/AlertasPage.tsx): `src/pages/workspace/AlertasPage.tsx`
- [ISO 14001 tracking](https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/ISO14001Page.tsx): `src/pages/workspace/ISO14001Page.tsx`

### People and oversight

- [Admin console](https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/admin/AdminHomePage.tsx): `src/pages/admin/AdminHomePage.tsx`
- [Consultant console](https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/consultant/ConsultantHomePage.tsx): `src/pages/consultant/ConsultantHomePage.tsx`
- [Consultant project panel](https://github.com/kevcav575/envirogest.mx/blob/main/src/pages/workspace/ConsultorPanelPage.tsx): `src/pages/workspace/ConsultorPanelPage.tsx`

### Application state

- [App state actions](https://github.com/kevcav575/envirogest.mx/blob/main/src/store/useAppStore.ts): `src/store/useAppStore.ts`
- [Browser project storage](https://github.com/kevcav575/envirogest.mx/blob/main/src/services/localStorage.service.ts): `src/services/localStorage.service.ts`
- [Storage contract](https://github.com/kevcav575/envirogest.mx/blob/main/src/services/storage.interface.ts): `src/services/storage.interface.ts`

### User service

- [Auth API client](https://github.com/kevcav575/envirogest.mx/blob/main/src/services/auth.service.ts): `src/services/auth.service.ts`
- [REST storage adapter](https://github.com/kevcav575/envirogest.mx/blob/main/src/services/api.service.ts): `src/services/api.service.ts`
- [Express routes](https://github.com/kevcav575/envirogest.mx/blob/main/server/src/index.ts): `server/src/index.ts`
- [Authentication routes](https://github.com/kevcav575/envirogest.mx/blob/main/server/src/routes/auth.ts): `server/src/routes/auth.ts`
- [User management routes](https://github.com/kevcav575/envirogest.mx/blob/main/server/src/routes/users.ts): `server/src/routes/users.ts`
- [JWT middleware](https://github.com/kevcav575/envirogest.mx/blob/main/server/src/middleware/auth.ts): `server/src/middleware/auth.ts`
- [JSON user store](https://github.com/kevcav575/envirogest.mx/blob/main/server/src/db/store.ts): `server/src/db/store.ts`

### Other components

- **Workspace user**
- **Google Calendar**

## Connections

- Workspace user → React app: uses
- React app → Role routes: renders (evidence: `src/App.tsx`)
- Role routes → Sign-in page: routes to (evidence: `src/router.tsx`)
- Role routes → Role guard: guards routes (evidence: `src/router.tsx`)
- Role routes → Admin console: routes to (evidence: `src/router.tsx`)
- Role routes → Consultant console: routes to (evidence: `src/router.tsx`)
- Role routes → Project workspace pages: routes to (evidence: `src/router.tsx`)
- Role guard → App state actions: reads session (evidence: `src/guards/AuthGuard.tsx`)
- Sign-in page → App state actions: submits credentials (evidence: `src/pages/auth/AuthPage.tsx`)
- Environmental diagnosis → App state actions: updates answers (evidence: `src/pages/workspace/QuestionnairePage.tsx`)
- Permit generation → Permit catalog: filters catalog (evidence: `src/lib/utils.ts`)
- Environmental diagnosis → Permit generation: generates permits (evidence: `src/pages/workspace/QuestionnairePage.tsx`)
- Project workspace pages → Project dashboard: includes
- Project workspace pages → Permit details: includes
- Project workspace pages → Compliance schedule: includes
- Project workspace pages → Project alerts: includes
- Project workspace pages → ISO 14001 tracking: includes
- Project dashboard → App state actions: reads project (evidence: `src/pages/workspace/DashboardPage.tsx`)
- Permit details → App state actions: updates permit (evidence: `src/pages/workspace/TramiteDetailPage.tsx`)
- Compliance schedule → App state actions: reads project (evidence: `src/pages/workspace/CronogramaPage.tsx`)
- Project alerts → App state actions: reads project (evidence: `src/pages/workspace/AlertasPage.tsx`)
- Admin console → App state actions: manages records (evidence: `src/pages/admin/AdminHomePage.tsx`)
- Admin console → Browser project storage: saves meeting (evidence: `src/pages/admin/AdminHomePage.tsx`)
- Consultant project panel → App state actions: manages projects (evidence: `src/pages/workspace/ConsultorPanelPage.tsx`)
- App state actions → Browser project storage: persists data (evidence: `src/store/useAppStore.ts`)
- Browser project storage → Storage contract: implements (evidence: `src/services/localStorage.service.ts`)
- App state actions → Auth API client: delegates auth (evidence: `src/store/useAppStore.ts`)
- Auth API client → Express routes: calls API
- REST storage adapter → Storage contract: implements (evidence: `src/services/api.service.ts`)
- Express routes → Authentication routes: mounts routes (evidence: `server/src/index.ts`)
- Express routes → User management routes: mounts routes (evidence: `server/src/index.ts`)
- Authentication routes → JSON user store: reads and writes (evidence: `server/src/routes/auth.ts`)
- User management routes → JSON user store: reads and writes (evidence: `server/src/routes/users.ts`)
- Authentication routes → JWT middleware: uses guard (evidence: `server/src/routes/auth.ts`)
- User management routes → JWT middleware: uses guard (evidence: `server/src/routes/users.ts`)
- Admin console → Google Calendar: opens meeting link (evidence: `src/pages/admin/AdminHomePage.tsx`)
