# d4niel-diaz/sonymous architecture

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

- Interactive diagram: https://gitdiagram.com/d4niel-diaz/sonymous
- Repository: https://github.com/d4niel-diaz/sonymous

## Overview

This Laravel application exposes anonymous campus messages, likes, admin moderation and announcement management through an API. The primary flow is a visitor request routed to a controller, which validates or queries domain models and returns JSON; message creation can also trigger optional real-time broadcasting. Admins can authenticate and moderate messages, while announcement endpoints manage active notices. The graph includes the scheduled cleanup command and application security middleware. Route and cleanup relationships rely on SOURCE INDEX references; unsampled implementation details are not inferred.

Main entry points: [`routes/api.php`](https://github.com/d4niel-diaz/sonymous/blob/main/routes/api.php) (API routes), [`app/Http/Controllers/MessageController.php`](https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Controllers/MessageController.php) (Message API), [`app/Http/Controllers/AdminController.php`](https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Controllers/AdminController.php) (Admin API), [`app/Models/Message.php`](https://github.com/d4niel-diaz/sonymous/blob/main/app/Models/Message.php) (Message model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["HTTP entry and security"]
  node_api_routes["API routes<br/>[api.php]"]
  node_web_routes["Web routes<br/>[web.php]"]
  node_security["Security headers"]
  node_base_controller["Base controller<br/>[Controller.php]"]
end

subgraph group_messages["Message lifecycle"]
  node_message_api["Message API"]
  node_message_model["Message model<br/>[Message.php]"]
  node_message_store[("Application database")]
  node_like_cache[("Like cache")]
  node_message_event["Message-created event<br/>[MessageCreated.php]"]
  node_cleanup["Expiry cleanup"]
end

subgraph group_admin["Admin and notices"]
  node_admin_api["Admin API"]
  node_admin_model["Admin model<br/>[Admin.php]"]
  node_user_model["User model<br/>[User.php]"]
  node_announcement_api["Announcement API"]
  node_announcement_model["Announcement model<br/>[Announcement.php]"]
end

subgraph group_runtime["Application runtime"]
  node_bootstrap["App bootstrap<br/>[app.php]"]
  node_provider["Service provider"]
end

node_visitor(("Visitor"))
node_admin_actor(("Admin"))
node_broadcast(("Broadcast service"))

node_visitor -->|"requests"| node_api_routes
node_admin_actor -->|"requests"| node_api_routes
node_api_routes -->|"routes to"| node_message_api
node_api_routes -->|"routes to"| node_admin_api
node_api_routes -->|"routes to"| node_announcement_api
node_message_api -->|"extends"| node_base_controller
node_admin_api -->|"extends"| node_base_controller
node_announcement_api -->|"extends"| node_base_controller
node_message_api -->|"queries and writes"| node_message_model
node_message_api -->|"claims likes"| node_like_cache
node_message_api -->|"dispatches"| node_message_event
node_message_event -.->|"broadcasts"| node_broadcast
node_cleanup -->|"cleans expired"| node_message_model
node_admin_api -->|"authenticates"| node_admin_model
node_admin_api -->|"moderates"| node_message_model
node_announcement_api -->|"manages"| node_announcement_model
node_bootstrap -->|"loads routes"| node_api_routes
node_bootstrap -->|"loads routes"| node_web_routes
node_bootstrap -->|"registers"| node_security
node_message_model -.->|"persists records"| node_message_store
node_admin_model -.->|"persists records"| node_message_store
node_announcement_model -.->|"persists records"| node_message_store

click node_api_routes "https://github.com/d4niel-diaz/sonymous/blob/main/routes/api.php"
click node_web_routes "https://github.com/d4niel-diaz/sonymous/blob/main/routes/web.php"
click node_bootstrap "https://github.com/d4niel-diaz/sonymous/blob/main/bootstrap/app.php"
click node_security "https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Middleware/SecurityHeaders.php"
click node_base_controller "https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Controllers/Controller.php"
click node_message_api "https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Controllers/MessageController.php"
click node_message_model "https://github.com/d4niel-diaz/sonymous/blob/main/app/Models/Message.php"
click node_message_event "https://github.com/d4niel-diaz/sonymous/blob/main/app/Events/MessageCreated.php"
click node_cleanup "https://github.com/d4niel-diaz/sonymous/blob/main/app/Console/Commands/CleanupExpiredMessages.php"
click node_admin_api "https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Controllers/AdminController.php"
click node_admin_model "https://github.com/d4niel-diaz/sonymous/blob/main/app/Models/Admin.php"
click node_user_model "https://github.com/d4niel-diaz/sonymous/blob/main/app/Models/User.php"
click node_announcement_api "https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Controllers/AnnouncementController.php"
click node_announcement_model "https://github.com/d4niel-diaz/sonymous/blob/main/app/Models/Announcement.php"
click node_provider "https://github.com/d4niel-diaz/sonymous/blob/main/app/Providers/AppServiceProvider.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_api_routes,node_web_routes,node_security,node_base_controller toneBlue
class node_message_api,node_message_model,node_message_store,node_like_cache,node_message_event,node_cleanup toneAmber
class node_admin_api,node_admin_model,node_user_model,node_announcement_api,node_announcement_model toneMint
class node_bootstrap,node_provider toneRose
class node_visitor,node_admin_actor,node_broadcast toneIndigo
```

## Components

### HTTP entry and security

- [API routes](https://github.com/d4niel-diaz/sonymous/blob/main/routes/api.php): `routes/api.php`
- [Web routes](https://github.com/d4niel-diaz/sonymous/blob/main/routes/web.php): `routes/web.php`
- [Security headers](https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Middleware/SecurityHeaders.php): `app/Http/Middleware/SecurityHeaders.php`
- [Base controller](https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Controllers/Controller.php): `app/Http/Controllers/Controller.php`

### Message lifecycle

- [Message API](https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Controllers/MessageController.php): `app/Http/Controllers/MessageController.php`
- [Message model](https://github.com/d4niel-diaz/sonymous/blob/main/app/Models/Message.php): `app/Models/Message.php`
- **Application database**
- **Like cache**
- [Message-created event](https://github.com/d4niel-diaz/sonymous/blob/main/app/Events/MessageCreated.php): `app/Events/MessageCreated.php`
- [Expiry cleanup](https://github.com/d4niel-diaz/sonymous/blob/main/app/Console/Commands/CleanupExpiredMessages.php): `app/Console/Commands/CleanupExpiredMessages.php`

### Admin and notices

- [Admin API](https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Controllers/AdminController.php): `app/Http/Controllers/AdminController.php`
- [Admin model](https://github.com/d4niel-diaz/sonymous/blob/main/app/Models/Admin.php): `app/Models/Admin.php`
- [User model](https://github.com/d4niel-diaz/sonymous/blob/main/app/Models/User.php): `app/Models/User.php`
- [Announcement API](https://github.com/d4niel-diaz/sonymous/blob/main/app/Http/Controllers/AnnouncementController.php): `app/Http/Controllers/AnnouncementController.php`
- [Announcement model](https://github.com/d4niel-diaz/sonymous/blob/main/app/Models/Announcement.php): `app/Models/Announcement.php`

### Application runtime

- [App bootstrap](https://github.com/d4niel-diaz/sonymous/blob/main/bootstrap/app.php): `bootstrap/app.php`
- [Service provider](https://github.com/d4niel-diaz/sonymous/blob/main/app/Providers/AppServiceProvider.php): `app/Providers/AppServiceProvider.php`

### Other components

- **Visitor**
- **Admin**
- **Broadcast service**

## Connections

- Visitor → API routes: requests (evidence: `routes/api.php`)
- Admin → API routes: requests (evidence: `routes/api.php`)
- API routes → Message API: routes to (evidence: `routes/api.php`)
- API routes → Admin API: routes to (evidence: `routes/api.php`)
- API routes → Announcement API: routes to (evidence: `routes/api.php`)
- Message API → Base controller: extends (evidence: `app/Http/Controllers/MessageController.php`)
- Admin API → Base controller: extends (evidence: `app/Http/Controllers/AdminController.php`)
- Announcement API → Base controller: extends (evidence: `app/Http/Controllers/AnnouncementController.php`)
- Message API → Message model: queries and writes (evidence: `app/Http/Controllers/MessageController.php`)
- Message API → Like cache: claims likes (evidence: `app/Http/Controllers/MessageController.php`)
- Message API → Message-created event: dispatches (evidence: `app/Http/Controllers/MessageController.php`)
- Message-created event → Broadcast service: broadcasts (evidence: `app/Events/MessageCreated.php`)
- Expiry cleanup → Message model: cleans expired (evidence: `app/Console/Commands/CleanupExpiredMessages.php`)
- Admin API → Admin model: authenticates (evidence: `app/Http/Controllers/AdminController.php`)
- Admin API → Message model: moderates (evidence: `app/Http/Controllers/AdminController.php`)
- Announcement API → Announcement model: manages (evidence: `app/Http/Controllers/AnnouncementController.php`)
- App bootstrap → API routes: loads routes (evidence: `bootstrap/app.php`)
- App bootstrap → Web routes: loads routes (evidence: `bootstrap/app.php`)
- App bootstrap → Security headers: registers (evidence: `bootstrap/app.php`)
- Message model → Application database: persists records
- Admin model → Application database: persists records
- Announcement model → Application database: persists records
