# siddhi132/simple-slides architecture

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

- Interactive diagram: https://gitdiagram.com/siddhi132/simple-slides
- Repository: https://github.com/siddhi132/simple-slides

## Overview

Simple Slides is a text-first presentation application: users view shared or ad hoc slides, while administrators manage presentations, users, and uploaded images. The principal public flow resolves a presentation, checks its viewability, optionally records a view, and renders slide content in Vue; separate capabilities cover account access, media thumbnails, and view analytics. The graph uses sampled controllers and frontend entry points plus paths documented by the tree; unsampled admin and analytics wiring is kept at subsystem level rather than asserting internal calls.

Main entry points: [`app/Http/Controllers/PresentationController.php`](https://github.com/siddhi132/simple-slides/blob/main/app/Http/Controllers/PresentationController.php) (Presentation controller), [`resources/js/Pages/Slides.vue`](https://github.com/siddhi132/simple-slides/blob/main/resources/js/Pages/Slides.vue) (Slides page), [`app/Models/DailyView.php`](https://github.com/siddhi132/simple-slides/blob/main/app/Models/DailyView.php) (Daily view records), [`routes/web.php`](https://github.com/siddhi132/simple-slides/blob/main/routes/web.php) (Web routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Presentations"]
  node_web_routes["Web routes<br/>[web.php]"]
  node_presentation_controller["Presentation controller"]
  node_adhoc_controller["Ad hoc slides controller"]
  node_slides_page["Slides page<br/>[Slides.vue]"]
  node_slide_components["Slide components<br/>[SlideView.vue]"]
  node_slide_store["Slide state<br/>[slideStore.ts]"]
  node_app_shell["Inertia app<br/>[app.ts]"]
end

subgraph group_accounts["Accounts"]
  node_users[("Users<br/>[User.php]")]
  node_auth_routes["Auth routes<br/>[auth.php]"]
  node_session_controller["Session controller"]
  node_registration_controller["Registration controller"]
end

subgraph group_admin_media["Admin and media"]
  node_presentation_admin["Presentation admin"]
  node_image_admin["Image upload admin"]
  node_presentations[("Presentations<br/>[Presentation.php]")]
  node_image_uploads[("Image uploads<br/>[ImageUpload.php]")]
  node_thumbnail_job["Thumbnail generation"]
end

subgraph group_analytics["View analytics"]
  node_view_data[("Daily view records<br/>[DailyView.php]")]
  node_view_observer["View observer"]
  node_aggregate_job["Daily aggregation"]
  node_aggregate_data[("Aggregate views<br/>[AggregateView.php]")]
  node_analytics_widgets["View analytics widgets<br/>[ViewStats.php]"]
end

node_visitor(("Visitor"))

node_visitor -->|"requests pages"| node_web_routes
node_web_routes -->|"routes to"| node_presentation_controller
node_web_routes -->|"routes to"| node_adhoc_controller
node_presentation_controller -->|"loads owner"| node_users
node_presentation_controller -->|"queries presentation"| node_presentations
node_presentation_controller -->|"records view"| node_view_data
node_presentation_controller -->|"renders with content"| node_slides_page
node_adhoc_controller -->|"records view"| node_view_data
node_adhoc_controller -->|"renders page"| node_slides_page
node_app_shell -->|"resolves page"| node_slides_page
node_slides_page -->|"displays slides"| node_slide_components
node_slides_page -->|"uses state"| node_slide_store
node_visitor -->|"requests account access"| node_auth_routes
node_auth_routes -->|"routes login"| node_session_controller
node_auth_routes -->|"routes registration"| node_registration_controller
node_registration_controller -->|"creates account"| node_users
node_presentation_admin -->|"manages"| node_presentations
node_image_admin -->|"manages"| node_image_uploads
node_view_data -->|"triggers observer"| node_view_observer
node_aggregate_job -->|"reads views"| node_view_data
node_aggregate_job -->|"writes aggregates"| node_aggregate_data
node_analytics_widgets -->|"reads analytics"| node_aggregate_data
node_thumbnail_job -.->|"generates thumbnails"| node_presentations

click node_web_routes "https://github.com/siddhi132/simple-slides/blob/main/routes/web.php"
click node_presentation_controller "https://github.com/siddhi132/simple-slides/blob/main/app/Http/Controllers/PresentationController.php"
click node_adhoc_controller "https://github.com/siddhi132/simple-slides/blob/main/app/Http/Controllers/AdhocSlidesController.php"
click node_slides_page "https://github.com/siddhi132/simple-slides/blob/main/resources/js/Pages/Slides.vue"
click node_slide_components "https://github.com/siddhi132/simple-slides/blob/main/resources/js/Components/SlideView.vue"
click node_slide_store "https://github.com/siddhi132/simple-slides/blob/main/resources/js/store/slideStore.ts"
click node_app_shell "https://github.com/siddhi132/simple-slides/blob/main/resources/js/app.ts"
click node_users "https://github.com/siddhi132/simple-slides/blob/main/app/Models/User.php"
click node_auth_routes "https://github.com/siddhi132/simple-slides/blob/main/routes/auth.php"
click node_session_controller "https://github.com/siddhi132/simple-slides/blob/main/app/Http/Controllers/Auth/AuthenticatedSessionController.php"
click node_registration_controller "https://github.com/siddhi132/simple-slides/blob/main/app/Http/Controllers/Auth/RegisteredUserController.php"
click node_presentation_admin "https://github.com/siddhi132/simple-slides/blob/main/app/Filament/Resources/PresentationResource.php"
click node_image_admin "https://github.com/siddhi132/simple-slides/blob/main/app/Filament/Resources/ImageUploadResource.php"
click node_presentations "https://github.com/siddhi132/simple-slides/blob/main/app/Models/Presentation.php"
click node_image_uploads "https://github.com/siddhi132/simple-slides/blob/main/app/Models/ImageUpload.php"
click node_thumbnail_job "https://github.com/siddhi132/simple-slides/blob/main/app/Jobs/GenerateThumbnail.php"
click node_view_data "https://github.com/siddhi132/simple-slides/blob/main/app/Models/DailyView.php"
click node_view_observer "https://github.com/siddhi132/simple-slides/blob/main/app/Observers/DailyViewObserver.php"
click node_aggregate_job "https://github.com/siddhi132/simple-slides/blob/main/app/Jobs/AggregateDailyViews.php"
click node_aggregate_data "https://github.com/siddhi132/simple-slides/blob/main/app/Models/AggregateView.php"
click node_analytics_widgets "https://github.com/siddhi132/simple-slides/blob/main/app/Filament/Widgets/ViewStats.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_web_routes,node_presentation_controller,node_adhoc_controller,node_slides_page,node_slide_components,node_slide_store,node_app_shell toneBlue
class node_users,node_auth_routes,node_session_controller,node_registration_controller toneAmber
class node_presentation_admin,node_image_admin,node_presentations,node_image_uploads,node_thumbnail_job toneMint
class node_view_data,node_view_observer,node_aggregate_job,node_aggregate_data,node_analytics_widgets toneRose
class node_visitor toneIndigo
```

## Components

### Presentations

- [Web routes](https://github.com/siddhi132/simple-slides/blob/main/routes/web.php): `routes/web.php`
- [Presentation controller](https://github.com/siddhi132/simple-slides/blob/main/app/Http/Controllers/PresentationController.php): `app/Http/Controllers/PresentationController.php`
- [Ad hoc slides controller](https://github.com/siddhi132/simple-slides/blob/main/app/Http/Controllers/AdhocSlidesController.php): `app/Http/Controllers/AdhocSlidesController.php`
- [Slides page](https://github.com/siddhi132/simple-slides/blob/main/resources/js/Pages/Slides.vue): `resources/js/Pages/Slides.vue`
- [Slide components](https://github.com/siddhi132/simple-slides/blob/main/resources/js/Components/SlideView.vue): `resources/js/Components/SlideView.vue`
- [Slide state](https://github.com/siddhi132/simple-slides/blob/main/resources/js/store/slideStore.ts): `resources/js/store/slideStore.ts`
- [Inertia app](https://github.com/siddhi132/simple-slides/blob/main/resources/js/app.ts): `resources/js/app.ts`

### Accounts

- [Users](https://github.com/siddhi132/simple-slides/blob/main/app/Models/User.php): `app/Models/User.php`
- [Auth routes](https://github.com/siddhi132/simple-slides/blob/main/routes/auth.php): `routes/auth.php`
- [Session controller](https://github.com/siddhi132/simple-slides/blob/main/app/Http/Controllers/Auth/AuthenticatedSessionController.php): `app/Http/Controllers/Auth/AuthenticatedSessionController.php`
- [Registration controller](https://github.com/siddhi132/simple-slides/blob/main/app/Http/Controllers/Auth/RegisteredUserController.php): `app/Http/Controllers/Auth/RegisteredUserController.php`

### Admin and media

- [Presentation admin](https://github.com/siddhi132/simple-slides/blob/main/app/Filament/Resources/PresentationResource.php): `app/Filament/Resources/PresentationResource.php`
- [Image upload admin](https://github.com/siddhi132/simple-slides/blob/main/app/Filament/Resources/ImageUploadResource.php): `app/Filament/Resources/ImageUploadResource.php`
- [Presentations](https://github.com/siddhi132/simple-slides/blob/main/app/Models/Presentation.php): `app/Models/Presentation.php`
- [Image uploads](https://github.com/siddhi132/simple-slides/blob/main/app/Models/ImageUpload.php): `app/Models/ImageUpload.php`
- [Thumbnail generation](https://github.com/siddhi132/simple-slides/blob/main/app/Jobs/GenerateThumbnail.php): `app/Jobs/GenerateThumbnail.php`

### View analytics

- [Daily view records](https://github.com/siddhi132/simple-slides/blob/main/app/Models/DailyView.php): `app/Models/DailyView.php`
- [View observer](https://github.com/siddhi132/simple-slides/blob/main/app/Observers/DailyViewObserver.php): `app/Observers/DailyViewObserver.php`
- [Daily aggregation](https://github.com/siddhi132/simple-slides/blob/main/app/Jobs/AggregateDailyViews.php): `app/Jobs/AggregateDailyViews.php`
- [Aggregate views](https://github.com/siddhi132/simple-slides/blob/main/app/Models/AggregateView.php): `app/Models/AggregateView.php`
- [View analytics widgets](https://github.com/siddhi132/simple-slides/blob/main/app/Filament/Widgets/ViewStats.php): `app/Filament/Widgets/ViewStats.php`

### Other components

- **Visitor**

## Connections

- Visitor → Web routes: requests pages
- Web routes → Presentation controller: routes to
- Web routes → Ad hoc slides controller: routes to
- Presentation controller → Users: loads owner
- Presentation controller → Presentations: queries presentation
- Presentation controller → Daily view records: records view
- Presentation controller → Slides page: renders with content
- Ad hoc slides controller → Daily view records: records view
- Ad hoc slides controller → Slides page: renders page
- Inertia app → Slides page: resolves page
- Slides page → Slide components: displays slides
- Slides page → Slide state: uses state
- Visitor → Auth routes: requests account access
- Auth routes → Session controller: routes login
- Auth routes → Registration controller: routes registration
- Registration controller → Users: creates account
- Presentation admin → Presentations: manages
- Image upload admin → Image uploads: manages
- Daily view records → View observer: triggers observer
- Daily aggregation → Daily view records: reads views
- Daily aggregation → Aggregate views: writes aggregates
- View analytics widgets → Aggregate views: reads analytics
- Thumbnail generation → Presentations: generates thumbnails
