# bottelet/daybydaycrm architecture

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

- Interactive diagram: https://gitdiagram.com/bottelet/daybydaycrm
- Repository: https://github.com/bottelet/daybydaycrm

## Overview

DaybydayCRM is a self-hosted CRM. Its central workflow is managing clients and their leads, projects, and tasks, with related billing, files, appointments, and staff operations. The README documents these capabilities; sampled controller code supports the client/task request flow and adapter resolution for file storage. Other feature modules are represented by their exact controller directories, but their internal wiring was not sampled, so uncertain connections are omitted.

Main entry points: [`app/Http/Controllers/TasksController.php`](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/TasksController.php) (Task controller), [`app/Http/Controllers/ClientsController.php`](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/ClientsController.php) (Client controller), [`app/Http/Middleware`](https://github.com/bottelet/daybydaycrm/tree/develop/app/Http/Middleware) (HTTP middleware), [`app/Events`](https://github.com/bottelet/daybydaycrm/tree/develop/app/Events) (Action events)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web entry"]
  node_routes["Web routes<br/>[web.php]"]
  node_middleware["HTTP middleware"]
end

subgraph group_crm["CRM workflow"]
  node_clientcontroller["Client controller"]
  node_clientservice["Client service<br/>[ClientService.php]"]
  node_clients[("Client records<br/>[Client.php]")]
  node_clientviews["Client views"]
  node_leads["Lead management"]
  node_projects["Project management"]
  node_taskscontroller["Task controller"]
  node_taskservice["Task service<br/>[TaskService.php]"]
  node_tasks[("Task records<br/>[Task.php]")]
  node_taskviews["Task views"]
  node_search["Global search"]
end

subgraph group_billing["Billing and files"]
  node_billingcontrollers["Invoice and payments"]
  node_billingservices["Billing services<br/>[InvoiceService.php]"]
  node_invoicedata[("Billing records<br/>[Invoice.php]")]
  node_documents["Document handling"]
  node_storage["Storage registry"]
  node_storageadapter["Storage adapters"]
end

subgraph group_staff["Staff operations"]
  node_appointments["Appointments"]
  node_absence["Absence tracking"]
  node_users["Users and roles"]
end

subgraph group_runtime["Shared runtime"]
  node_settings["CRM settings"]
  node_events["Action events"]
  node_notifications["Notifications"]
end

node_user(("CRM user"))

node_user -->|"submits requests"| node_routes
node_routes -->|"passes through"| node_middleware
node_middleware -->|"dispatches"| node_clientcontroller
node_clientcontroller -->|"creates and queries"| node_clientservice
node_clientservice -->|"reads and writes"| node_clients
node_clientcontroller -->|"renders"| node_clientviews
node_middleware -->|"dispatches"| node_taskscontroller
node_taskscontroller -->|"creates and assigns"| node_taskservice
node_taskservice -->|"updates records"| node_tasks
node_taskscontroller -->|"queries and updates"| node_tasks
node_taskscontroller -->|"renders"| node_taskviews
node_taskscontroller -->|"resolves upload driver"| node_storage
node_storage -->|"selects adapter"| node_storageadapter
node_clientcontroller -->|"dispatches action"| node_events
node_taskscontroller -->|"dispatches action"| node_events
node_events -->|"triggers processing"| node_notifications

click node_routes "https://github.com/bottelet/daybydaycrm/blob/develop/routes/web.php"
click node_middleware "https://github.com/bottelet/daybydaycrm/tree/develop/app/Http/Middleware"
click node_clientcontroller "https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/ClientsController.php"
click node_clientservice "https://github.com/bottelet/daybydaycrm/blob/develop/app/Services/Client/ClientService.php"
click node_clients "https://github.com/bottelet/daybydaycrm/blob/develop/app/Models/Client.php"
click node_clientviews "https://github.com/bottelet/daybydaycrm/tree/develop/resources/views/clients"
click node_leads "https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/LeadsController.php"
click node_projects "https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/ProjectsController.php"
click node_taskscontroller "https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/TasksController.php"
click node_taskservice "https://github.com/bottelet/daybydaycrm/blob/develop/app/Services/Task/TaskService.php"
click node_tasks "https://github.com/bottelet/daybydaycrm/blob/develop/app/Models/Task.php"
click node_taskviews "https://github.com/bottelet/daybydaycrm/tree/develop/resources/views/tasks"
click node_search "https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/SearchController.php"
click node_billingcontrollers "https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/InvoicesController.php"
click node_billingservices "https://github.com/bottelet/daybydaycrm/blob/develop/app/Services/Invoice/InvoiceService.php"
click node_invoicedata "https://github.com/bottelet/daybydaycrm/blob/develop/app/Models/Invoice.php"
click node_documents "https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/DocumentsController.php"
click node_storage "https://github.com/bottelet/daybydaycrm/blob/develop/app/Services/Storage/StorageAdapterRegistry.php"
click node_storageadapter "https://github.com/bottelet/daybydaycrm/tree/develop/app/Services/Storage"
click node_appointments "https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/AppointmentsController.php"
click node_absence "https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/AbsenceController.php"
click node_users "https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/UsersController.php"
click node_settings "https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/SettingsController.php"
click node_events "https://github.com/bottelet/daybydaycrm/tree/develop/app/Events"
click node_notifications "https://github.com/bottelet/daybydaycrm/blob/develop/app/Jobs/ProcessNotifications.php"

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_routes,node_middleware,node_user toneBlue
class node_clientcontroller,node_clientservice,node_clients,node_clientviews,node_leads,node_projects,node_taskscontroller,node_taskservice,node_tasks,node_taskviews,node_search toneAmber
class node_billingcontrollers,node_billingservices,node_invoicedata,node_documents,node_storage,node_storageadapter toneMint
class node_appointments,node_absence,node_users toneRose
class node_settings,node_events,node_notifications toneIndigo
```

## Components

### Web entry

- [Web routes](https://github.com/bottelet/daybydaycrm/blob/develop/routes/web.php): `routes/web.php`
- [HTTP middleware](https://github.com/bottelet/daybydaycrm/tree/develop/app/Http/Middleware): `app/Http/Middleware`

### CRM workflow

- [Client controller](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/ClientsController.php): `app/Http/Controllers/ClientsController.php`
- [Client service](https://github.com/bottelet/daybydaycrm/blob/develop/app/Services/Client/ClientService.php): `app/Services/Client/ClientService.php`
- [Client records](https://github.com/bottelet/daybydaycrm/blob/develop/app/Models/Client.php): `app/Models/Client.php`
- [Client views](https://github.com/bottelet/daybydaycrm/tree/develop/resources/views/clients): `resources/views/clients`
- [Lead management](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/LeadsController.php): `app/Http/Controllers/LeadsController.php`
- [Project management](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/ProjectsController.php): `app/Http/Controllers/ProjectsController.php`
- [Task controller](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/TasksController.php): `app/Http/Controllers/TasksController.php`
- [Task service](https://github.com/bottelet/daybydaycrm/blob/develop/app/Services/Task/TaskService.php): `app/Services/Task/TaskService.php`
- [Task records](https://github.com/bottelet/daybydaycrm/blob/develop/app/Models/Task.php): `app/Models/Task.php`
- [Task views](https://github.com/bottelet/daybydaycrm/tree/develop/resources/views/tasks): `resources/views/tasks`
- [Global search](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/SearchController.php): `app/Http/Controllers/SearchController.php`

### Billing and files

- [Invoice and payments](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/InvoicesController.php): `app/Http/Controllers/InvoicesController.php`
- [Billing services](https://github.com/bottelet/daybydaycrm/blob/develop/app/Services/Invoice/InvoiceService.php): `app/Services/Invoice/InvoiceService.php`
- [Billing records](https://github.com/bottelet/daybydaycrm/blob/develop/app/Models/Invoice.php): `app/Models/Invoice.php`
- [Document handling](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/DocumentsController.php): `app/Http/Controllers/DocumentsController.php`
- [Storage registry](https://github.com/bottelet/daybydaycrm/blob/develop/app/Services/Storage/StorageAdapterRegistry.php): `app/Services/Storage/StorageAdapterRegistry.php`
- [Storage adapters](https://github.com/bottelet/daybydaycrm/tree/develop/app/Services/Storage): `app/Services/Storage`

### Staff operations

- [Appointments](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/AppointmentsController.php): `app/Http/Controllers/AppointmentsController.php`
- [Absence tracking](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/AbsenceController.php): `app/Http/Controllers/AbsenceController.php`
- [Users and roles](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/UsersController.php): `app/Http/Controllers/UsersController.php`

### Shared runtime

- [CRM settings](https://github.com/bottelet/daybydaycrm/blob/develop/app/Http/Controllers/SettingsController.php): `app/Http/Controllers/SettingsController.php`
- [Action events](https://github.com/bottelet/daybydaycrm/tree/develop/app/Events): `app/Events`
- [Notifications](https://github.com/bottelet/daybydaycrm/blob/develop/app/Jobs/ProcessNotifications.php): `app/Jobs/ProcessNotifications.php`

### Other components

- **CRM user**

## Connections

- CRM user → Web routes: submits requests
- Web routes → HTTP middleware: passes through
- HTTP middleware → Client controller: dispatches
- Client controller → Client service: creates and queries
- Client service → Client records: reads and writes
- Client controller → Client views: renders
- HTTP middleware → Task controller: dispatches
- Task controller → Task service: creates and assigns
- Task service → Task records: updates records
- Task controller → Task records: queries and updates
- Task controller → Task views: renders
- Task controller → Storage registry: resolves upload driver
- Storage registry → Storage adapters: selects adapter
- Client controller → Action events: dispatches action
- Task controller → Action events: dispatches action
- Action events → Notifications: triggers processing
