# risyad02/archizin architecture

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

- Interactive diagram: https://gitdiagram.com/risyad02/archizin
- Repository: https://github.com/risyad02/archizin

## Overview

ArchIzin is a local desktop application for managing permit records and their supporting documents. Its main workflow bootstraps an administrator and storage location, authenticates users, then creates, organizes, and reviews permit records with permit-type-specific fields and folders. The map also includes access control, audit logging, and document handling. The README is only a Tauri/React template; feature coverage is based on the source index and excerpts, so some links for unsampled modules are omitted.

Main entry points: [`src/App.tsx`](https://github.com/risyad02/archizin/blob/master/src/App.tsx) (App routing), [`src/modules/permit-records/service.ts`](https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/service.ts) (Record workflows), [`src/modules/permit-records/pages/PermitRecordFormPage.tsx`](https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/pages/PermitRecordFormPage.tsx) (Record form), [`src/modules/auth/service.ts`](https://github.com/risyad02/archizin/blob/master/src/modules/auth/service.ts) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["App entry and access"]
  node_app["App routing<br/>[App.tsx]"]
  node_authui["Login and setup<br/>[LoginPage.tsx]"]
  node_auth["Authentication<br/>[service.ts]"]
  node_session["Auth session<br/>[authStore.ts]"]
  node_guards["Route permissions<br/>[guards.tsx]"]
  node_layout["Application layout<br/>[AppLayout.tsx]"]
end

subgraph group_permits["Permit management"]
  node_types["Permit types"]
  node_typeconfig["Type configuration<br/>[service.ts]"]
  node_fields["Custom fields<br/>[service.ts]"]
  node_fieldui["Field options UI"]
  node_status["Permit status<br/>[service.ts]"]
end

subgraph group_records["Records and documents"]
  node_recordsui["Permit record screens"]
  node_recordform["Record form"]
  node_recordservice["Record workflows<br/>[service.ts]"]
  node_documents["Document handling<br/>[service.ts]"]
end

subgraph group_data["Persistence and audit"]
  node_recordrepo["Record persistence<br/>[repository.ts]"]
  node_auditui["Audit log screen<br/>[AuditLogPage.tsx]"]
  node_audit["Audit logging<br/>[audit.ts]"]
  node_database[("SQLite database<br/>[db.ts]")]
end

subgraph group_platform["Local storage"]
  node_foldersync["Folder synchronization<br/>[folderSync.ts]"]
  node_storageui["Storage setup"]
  node_storage["Storage settings<br/>[service.ts]"]
  node_filesystem["Filesystem operations<br/>[filesystem.ts]"]
end

node_user(("Staff user"))

node_user -->|"uses"| node_app
node_app -->|"checks setup"| node_auth
node_app -->|"checks settings"| node_storage
node_app -->|"routes setup"| node_storageui
node_app -->|"routes login"| node_authui
node_app -->|"protects routes"| node_guards
node_app -->|"renders"| node_layout
node_authui -->|"calls"| node_auth
node_auth -.->|"sets session"| node_session
node_layout -->|"reads session"| node_session
node_guards -->|"reads session"| node_session
node_guards -.->|"checks access"| node_types
node_app -->|"routes types"| node_types
node_app -->|"routes records"| node_recordsui
node_types -->|"configures fields"| node_fieldui
node_fieldui -->|"manages options"| node_fields
node_recordform -->|"submits records"| node_recordservice
node_recordform -->|"loads types"| node_typeconfig
node_recordform -->|"loads fields"| node_fields
node_recordform -->|"loads statuses"| node_status
node_recordservice -->|"reads and writes"| node_recordrepo
node_recordservice -->|"validates fields"| node_fields
node_recordservice -->|"syncs folders"| node_foldersync
node_recordservice -->|"records changes"| node_audit
node_documents -->|"handles files"| node_filesystem
node_storageui -->|"grants folder scope"| node_filesystem
node_storageui -->|"saves location"| node_storage
node_storage -.->|"persists settings"| node_database
node_auth -->|"records activity"| node_audit
node_fields -->|"records changes"| node_audit
node_auditui -.->|"reads audit data"| node_database
node_audit -->|"writes logs"| node_database
node_recordrepo -->|"persists records"| node_database

click node_app "https://github.com/risyad02/archizin/blob/master/src/App.tsx"
click node_authui "https://github.com/risyad02/archizin/blob/master/src/modules/auth/pages/LoginPage.tsx"
click node_auth "https://github.com/risyad02/archizin/blob/master/src/modules/auth/service.ts"
click node_session "https://github.com/risyad02/archizin/blob/master/src/store/authStore.ts"
click node_guards "https://github.com/risyad02/archizin/blob/master/src/routes/guards.tsx"
click node_layout "https://github.com/risyad02/archizin/blob/master/src/layouts/AppLayout.tsx"
click node_types "https://github.com/risyad02/archizin/blob/master/src/modules/permit-types/pages/PermitTypesPage.tsx"
click node_typeconfig "https://github.com/risyad02/archizin/blob/master/src/modules/permit-types/service.ts"
click node_fields "https://github.com/risyad02/archizin/blob/master/src/modules/custom-fields/service.ts"
click node_fieldui "https://github.com/risyad02/archizin/blob/master/src/modules/custom-fields/components/FieldOptionsManager.tsx"
click node_recordsui "https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/pages/PermitRecordsPage.tsx"
click node_recordform "https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/pages/PermitRecordFormPage.tsx"
click node_recordservice "https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/service.ts"
click node_recordrepo "https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/repository.ts"
click node_documents "https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/documents/service.ts"
click node_foldersync "https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/folderSync.ts"
click node_status "https://github.com/risyad02/archizin/blob/master/src/modules/permit-status/service.ts"
click node_storageui "https://github.com/risyad02/archizin/blob/master/src/modules/storage-settings/pages/SetupStoragePage.tsx"
click node_storage "https://github.com/risyad02/archizin/blob/master/src/modules/storage-settings/service.ts"
click node_filesystem "https://github.com/risyad02/archizin/blob/master/src/lib/filesystem.ts"
click node_auditui "https://github.com/risyad02/archizin/blob/master/src/modules/audit-log/pages/AuditLogPage.tsx"
click node_audit "https://github.com/risyad02/archizin/blob/master/src/lib/audit.ts"
click node_database "https://github.com/risyad02/archizin/blob/master/src/database/db.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_authui,node_auth,node_session,node_guards,node_layout,node_user toneBlue
class node_types,node_typeconfig,node_fields,node_fieldui,node_status toneAmber
class node_recordsui,node_recordform,node_recordservice,node_documents toneMint
class node_recordrepo,node_auditui,node_audit,node_database toneRose
class node_foldersync,node_storageui,node_storage,node_filesystem toneIndigo
```

## Components

### App entry and access

- [App routing](https://github.com/risyad02/archizin/blob/master/src/App.tsx): `src/App.tsx`
- [Login and setup](https://github.com/risyad02/archizin/blob/master/src/modules/auth/pages/LoginPage.tsx): `src/modules/auth/pages/LoginPage.tsx`
- [Authentication](https://github.com/risyad02/archizin/blob/master/src/modules/auth/service.ts): `src/modules/auth/service.ts`
- [Auth session](https://github.com/risyad02/archizin/blob/master/src/store/authStore.ts): `src/store/authStore.ts`
- [Route permissions](https://github.com/risyad02/archizin/blob/master/src/routes/guards.tsx): `src/routes/guards.tsx`
- [Application layout](https://github.com/risyad02/archizin/blob/master/src/layouts/AppLayout.tsx): `src/layouts/AppLayout.tsx`

### Permit management

- [Permit types](https://github.com/risyad02/archizin/blob/master/src/modules/permit-types/pages/PermitTypesPage.tsx): `src/modules/permit-types/pages/PermitTypesPage.tsx`
- [Type configuration](https://github.com/risyad02/archizin/blob/master/src/modules/permit-types/service.ts): `src/modules/permit-types/service.ts`
- [Custom fields](https://github.com/risyad02/archizin/blob/master/src/modules/custom-fields/service.ts): `src/modules/custom-fields/service.ts`
- [Field options UI](https://github.com/risyad02/archizin/blob/master/src/modules/custom-fields/components/FieldOptionsManager.tsx): `src/modules/custom-fields/components/FieldOptionsManager.tsx`
- [Permit status](https://github.com/risyad02/archizin/blob/master/src/modules/permit-status/service.ts): `src/modules/permit-status/service.ts`

### Records and documents

- [Permit record screens](https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/pages/PermitRecordsPage.tsx): `src/modules/permit-records/pages/PermitRecordsPage.tsx`
- [Record form](https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/pages/PermitRecordFormPage.tsx): `src/modules/permit-records/pages/PermitRecordFormPage.tsx`
- [Record workflows](https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/service.ts): `src/modules/permit-records/service.ts`
- [Document handling](https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/documents/service.ts): `src/modules/permit-records/documents/service.ts`

### Persistence and audit

- [Record persistence](https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/repository.ts): `src/modules/permit-records/repository.ts`
- [Audit log screen](https://github.com/risyad02/archizin/blob/master/src/modules/audit-log/pages/AuditLogPage.tsx): `src/modules/audit-log/pages/AuditLogPage.tsx`
- [Audit logging](https://github.com/risyad02/archizin/blob/master/src/lib/audit.ts): `src/lib/audit.ts`
- [SQLite database](https://github.com/risyad02/archizin/blob/master/src/database/db.ts): `src/database/db.ts`

### Local storage

- [Folder synchronization](https://github.com/risyad02/archizin/blob/master/src/modules/permit-records/folderSync.ts): `src/modules/permit-records/folderSync.ts`
- [Storage setup](https://github.com/risyad02/archizin/blob/master/src/modules/storage-settings/pages/SetupStoragePage.tsx): `src/modules/storage-settings/pages/SetupStoragePage.tsx`
- [Storage settings](https://github.com/risyad02/archizin/blob/master/src/modules/storage-settings/service.ts): `src/modules/storage-settings/service.ts`
- [Filesystem operations](https://github.com/risyad02/archizin/blob/master/src/lib/filesystem.ts): `src/lib/filesystem.ts`

### Other components

- **Staff user**

## Connections

- Staff user → App routing: uses
- App routing → Authentication: checks setup (evidence: `src/App.tsx`)
- App routing → Storage settings: checks settings (evidence: `src/App.tsx`)
- App routing → Storage setup: routes setup (evidence: `src/App.tsx`)
- App routing → Login and setup: routes login (evidence: `src/App.tsx`)
- App routing → Route permissions: protects routes (evidence: `src/App.tsx`)
- App routing → Application layout: renders (evidence: `src/App.tsx`)
- Login and setup → Authentication: calls (evidence: `src/modules/auth/pages/LoginPage.tsx`)
- Authentication → Auth session: sets session
- Application layout → Auth session: reads session (evidence: `src/layouts/AppLayout.tsx`)
- Route permissions → Auth session: reads session (evidence: `src/routes/guards.tsx`)
- Route permissions → Permit types: checks access
- App routing → Permit types: routes types (evidence: `src/App.tsx`)
- App routing → Permit record screens: routes records (evidence: `src/App.tsx`)
- Permit types → Field options UI: configures fields
- Field options UI → Custom fields: manages options (evidence: `src/modules/custom-fields/components/FieldOptionsManager.tsx`)
- Record form → Record workflows: submits records (evidence: `src/modules/permit-records/pages/PermitRecordFormPage.tsx`)
- Record form → Type configuration: loads types (evidence: `src/modules/permit-records/pages/PermitRecordFormPage.tsx`)
- Record form → Custom fields: loads fields (evidence: `src/modules/permit-records/pages/PermitRecordFormPage.tsx`)
- Record form → Permit status: loads statuses (evidence: `src/modules/permit-records/pages/PermitRecordFormPage.tsx`)
- Record workflows → Record persistence: reads and writes (evidence: `src/modules/permit-records/service.ts`)
- Record workflows → Custom fields: validates fields (evidence: `src/modules/permit-records/service.ts`)
- Record workflows → Folder synchronization: syncs folders (evidence: `src/modules/permit-records/service.ts`)
- Record workflows → Audit logging: records changes (evidence: `src/modules/permit-records/service.ts`)
- Document handling → Filesystem operations: handles files (evidence: `src/modules/permit-records/documents/service.ts`)
- Storage setup → Filesystem operations: grants folder scope (evidence: `src/modules/storage-settings/pages/SetupStoragePage.tsx`)
- Storage setup → Storage settings: saves location (evidence: `src/modules/storage-settings/pages/SetupStoragePage.tsx`)
- Storage settings → SQLite database: persists settings
- Authentication → Audit logging: records activity (evidence: `src/modules/auth/service.ts`)
- Custom fields → Audit logging: records changes (evidence: `src/modules/custom-fields/service.ts`)
- Audit log screen → SQLite database: reads audit data
- Audit logging → SQLite database: writes logs (evidence: `src/lib/audit.ts`)
- Record persistence → SQLite database: persists records (evidence: `src/modules/permit-records/repository.ts`)
