# gaitco/filament-mobile architecture

> Architecture diagram of the GitHub repository gaitco/filament-mobile, 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/gaitco/filament-mobile
- Repository: https://github.com/gaitco/filament-mobile

## Overview

gait/filament-mobile exposes opted-in Laravel Filament resources as a mobile JSON admin API. Its main workflow publishes the panel’s schema, then serves authorized lists and details and accepts validated writes based on the same form definitions; supporting branches cover reactive state, relations, uploads, dashboard data, and live updates. The excerpts establish several controller-to-core calls, while other endpoint wiring is represented at the documented capability level; unsampled implementation details are not inferred.

Main entry points: [`src/Http/MobilePanelController.php`](https://github.com/gaitco/filament-mobile/blob/main/src/Http/MobilePanelController.php) (Resource Endpoints), [`src-core/Authorizer.php`](https://github.com/gaitco/filament-mobile/blob/main/src-core/Authorizer.php) (Policy Authorization), [`src/Http/RelationController.php`](https://github.com/gaitco/filament-mobile/blob/main/src/Http/RelationController.php) (Relation Endpoints), [`src/PanelSchemaBuilder.php`](https://github.com/gaitco/filament-mobile/blob/main/src/PanelSchemaBuilder.php) (Panel Schema)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Mobile API"]
  node_panel_schema["Panel Schema"]
  node_mobile_panel["Resource Endpoints"]
  node_relations["Relation Endpoints"]
  node_state["Reactive State"]
  node_options["Field Options"]
  node_filter_options["Filter Options"]
  node_dashboard["Dashboard API"]
  node_uploads["Upload API"]
  node_reorder["Reorder API"]
  node_notifications["Notifications API"]
end

subgraph group_schema["Schema Introspection"]
  node_schema_walk["Schema Walker<br/>[SchemaWalker.php]"]
  node_form_introspection["Form Introspection"]
end

subgraph group_write["Write Processing"]
  node_record_form["Form Persistence<br/>[RecordForm.php]"]
  node_rule_extractor["Rule Extraction<br/>[RuleExtractor.php]"]
end

subgraph group_shared["Shared Services"]
  node_registry["Resource Registry"]
  node_authorizer["Policy Authorization<br/>[Authorizer.php]"]
  node_list_query["List Queries<br/>[ListQuery.php]"]
  node_serializer["Record Serialization"]
  node_widget_reader["Widget Reader<br/>[WidgetReader.php]"]
  node_realtime["Realtime Events<br/>[Realtime.php]"]
  node_change_event["Change Broadcasts"]
end

node_client(("Mobile Client"))
node_database[("Application Database")]
node_broadcast["Laravel Broadcasting"]

node_client -->|"requests schema"| node_panel_schema
node_client -->|"requests records"| node_mobile_panel
node_client -->|"requests relations"| node_relations
node_client -->|"submits state"| node_state
node_client -->|"requests options"| node_options
node_client -->|"requests options"| node_filter_options
node_client -->|"requests dashboard"| node_dashboard
node_client -->|"uploads files"| node_uploads
node_client -->|"submits order"| node_reorder
node_client -->|"requests notices"| node_notifications
node_panel_schema -->|"resolves resources"| node_registry
node_panel_schema -->|"checks access"| node_authorizer
node_panel_schema -->|"publishes schema"| node_schema_walk
node_schema_walk -->|"reads components"| node_form_introspection
node_mobile_panel -->|"resolves resources"| node_registry
node_mobile_panel -->|"checks access"| node_authorizer
node_mobile_panel -->|"builds list query"| node_list_query
node_mobile_panel -->|"serializes records"| node_serializer
node_mobile_panel -->|"saves relations"| node_record_form
node_relations -->|"checks access"| node_authorizer
node_relations -->|"settles child forms"| node_record_form
node_relations -->|"serializes rows"| node_serializer
node_state -->|"checks access"| node_authorizer
node_state -->|"evaluates form"| node_schema_walk
node_options -->|"checks access"| node_authorizer
node_options -->|"resolves fields"| node_form_introspection
node_dashboard -->|"reads widgets"| node_widget_reader
node_uploads -->|"resolves resources"| node_registry
node_uploads -->|"checks access"| node_authorizer
node_reorder -->|"resolves resources"| node_registry
node_reorder -->|"checks access"| node_authorizer
node_record_form -->|"extracts rules"| node_rule_extractor
node_mobile_panel -->|"reads and writes"| node_database
node_relations -->|"reads and writes"| node_database
node_reorder -->|"updates order"| node_database
node_change_event -->|"checks broadcast"| node_realtime
node_realtime -.->|"dispatches events"| node_broadcast
node_client -.->|"receives updates"| node_broadcast

click node_panel_schema "https://github.com/gaitco/filament-mobile/blob/main/src/PanelSchemaBuilder.php"
click node_mobile_panel "https://github.com/gaitco/filament-mobile/blob/main/src/Http/MobilePanelController.php"
click node_relations "https://github.com/gaitco/filament-mobile/blob/main/src/Http/RelationController.php"
click node_state "https://github.com/gaitco/filament-mobile/blob/main/src/Http/StateController.php"
click node_options "https://github.com/gaitco/filament-mobile/blob/main/src/Http/OptionsController.php"
click node_filter_options "https://github.com/gaitco/filament-mobile/blob/main/src/Http/FilterOptionsController.php"
click node_dashboard "https://github.com/gaitco/filament-mobile/blob/main/src/Http/DashboardController.php"
click node_uploads "https://github.com/gaitco/filament-mobile/blob/main/src/Http/UploadController.php"
click node_reorder "https://github.com/gaitco/filament-mobile/blob/main/src/Http/ReorderController.php"
click node_notifications "https://github.com/gaitco/filament-mobile/blob/main/src/Http/NotificationsController.php"
click node_schema_walk "https://github.com/gaitco/filament-mobile/blob/main/src/Introspection/SchemaWalker.php"
click node_form_introspection "https://github.com/gaitco/filament-mobile/blob/main/src/Introspection/HeadlessSchemaHost.php"
click node_registry "https://github.com/gaitco/filament-mobile/blob/main/src/ResourceRegistry.php"
click node_authorizer "https://github.com/gaitco/filament-mobile/blob/main/src-core/Authorizer.php"
click node_list_query "https://github.com/gaitco/filament-mobile/blob/main/src-core/ListQuery.php"
click node_serializer "https://github.com/gaitco/filament-mobile/blob/main/src-core/RecordSerializer.php"
click node_record_form "https://github.com/gaitco/filament-mobile/blob/main/src/Write/RecordForm.php"
click node_rule_extractor "https://github.com/gaitco/filament-mobile/blob/main/src/Validation/RuleExtractor.php"
click node_widget_reader "https://github.com/gaitco/filament-mobile/blob/main/src/Dashboard/WidgetReader.php"
click node_realtime "https://github.com/gaitco/filament-mobile/blob/main/src/Realtime.php"
click node_change_event "https://github.com/gaitco/filament-mobile/blob/main/src/BroadcastsMobileChanges.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_panel_schema,node_mobile_panel,node_relations,node_state,node_options,node_filter_options,node_dashboard,node_uploads,node_reorder,node_notifications,node_client toneBlue
class node_schema_walk,node_form_introspection,node_database toneAmber
class node_record_form,node_rule_extractor toneMint
class node_registry,node_authorizer,node_list_query,node_serializer,node_widget_reader,node_realtime,node_change_event toneRose
class node_broadcast toneIndigo
```

## Components

### Mobile API

- [Panel Schema](https://github.com/gaitco/filament-mobile/blob/main/src/PanelSchemaBuilder.php): `src/PanelSchemaBuilder.php`
- [Resource Endpoints](https://github.com/gaitco/filament-mobile/blob/main/src/Http/MobilePanelController.php): `src/Http/MobilePanelController.php`
- [Relation Endpoints](https://github.com/gaitco/filament-mobile/blob/main/src/Http/RelationController.php): `src/Http/RelationController.php`
- [Reactive State](https://github.com/gaitco/filament-mobile/blob/main/src/Http/StateController.php): `src/Http/StateController.php`
- [Field Options](https://github.com/gaitco/filament-mobile/blob/main/src/Http/OptionsController.php): `src/Http/OptionsController.php`
- [Filter Options](https://github.com/gaitco/filament-mobile/blob/main/src/Http/FilterOptionsController.php): `src/Http/FilterOptionsController.php`
- [Dashboard API](https://github.com/gaitco/filament-mobile/blob/main/src/Http/DashboardController.php): `src/Http/DashboardController.php`
- [Upload API](https://github.com/gaitco/filament-mobile/blob/main/src/Http/UploadController.php): `src/Http/UploadController.php`
- [Reorder API](https://github.com/gaitco/filament-mobile/blob/main/src/Http/ReorderController.php): `src/Http/ReorderController.php`
- [Notifications API](https://github.com/gaitco/filament-mobile/blob/main/src/Http/NotificationsController.php): `src/Http/NotificationsController.php`

### Schema Introspection

- [Schema Walker](https://github.com/gaitco/filament-mobile/blob/main/src/Introspection/SchemaWalker.php): `src/Introspection/SchemaWalker.php`
- [Form Introspection](https://github.com/gaitco/filament-mobile/blob/main/src/Introspection/HeadlessSchemaHost.php): `src/Introspection/HeadlessSchemaHost.php`

### Write Processing

- [Form Persistence](https://github.com/gaitco/filament-mobile/blob/main/src/Write/RecordForm.php): `src/Write/RecordForm.php`
- [Rule Extraction](https://github.com/gaitco/filament-mobile/blob/main/src/Validation/RuleExtractor.php): `src/Validation/RuleExtractor.php`

### Shared Services

- [Resource Registry](https://github.com/gaitco/filament-mobile/blob/main/src/ResourceRegistry.php): `src/ResourceRegistry.php`
- [Policy Authorization](https://github.com/gaitco/filament-mobile/blob/main/src-core/Authorizer.php): `src-core/Authorizer.php`
- [List Queries](https://github.com/gaitco/filament-mobile/blob/main/src-core/ListQuery.php): `src-core/ListQuery.php`
- [Record Serialization](https://github.com/gaitco/filament-mobile/blob/main/src-core/RecordSerializer.php): `src-core/RecordSerializer.php`
- [Widget Reader](https://github.com/gaitco/filament-mobile/blob/main/src/Dashboard/WidgetReader.php): `src/Dashboard/WidgetReader.php`
- [Realtime Events](https://github.com/gaitco/filament-mobile/blob/main/src/Realtime.php): `src/Realtime.php`
- [Change Broadcasts](https://github.com/gaitco/filament-mobile/blob/main/src/BroadcastsMobileChanges.php): `src/BroadcastsMobileChanges.php`

### Other components

- **Mobile Client**
- **Application Database**
- **Laravel Broadcasting**

## Connections

- Mobile Client → Panel Schema: requests schema
- Mobile Client → Resource Endpoints: requests records
- Mobile Client → Relation Endpoints: requests relations
- Mobile Client → Reactive State: submits state
- Mobile Client → Field Options: requests options
- Mobile Client → Filter Options: requests options
- Mobile Client → Dashboard API: requests dashboard
- Mobile Client → Upload API: uploads files
- Mobile Client → Reorder API: submits order
- Mobile Client → Notifications API: requests notices
- Panel Schema → Resource Registry: resolves resources
- Panel Schema → Policy Authorization: checks access
- Panel Schema → Schema Walker: publishes schema
- Schema Walker → Form Introspection: reads components
- Resource Endpoints → Resource Registry: resolves resources
- Resource Endpoints → Policy Authorization: checks access
- Resource Endpoints → List Queries: builds list query
- Resource Endpoints → Record Serialization: serializes records
- Resource Endpoints → Form Persistence: saves relations
- Relation Endpoints → Policy Authorization: checks access
- Relation Endpoints → Form Persistence: settles child forms
- Relation Endpoints → Record Serialization: serializes rows
- Reactive State → Policy Authorization: checks access
- Reactive State → Schema Walker: evaluates form
- Field Options → Policy Authorization: checks access
- Field Options → Form Introspection: resolves fields
- Dashboard API → Widget Reader: reads widgets
- Upload API → Resource Registry: resolves resources
- Upload API → Policy Authorization: checks access
- Reorder API → Resource Registry: resolves resources
- Reorder API → Policy Authorization: checks access
- Form Persistence → Rule Extraction: extracts rules
- Resource Endpoints → Application Database: reads and writes
- Relation Endpoints → Application Database: reads and writes
- Reorder API → Application Database: updates order
- Change Broadcasts → Realtime Events: checks broadcast
- Realtime Events → Laravel Broadcasting: dispatches events
- Mobile Client → Laravel Broadcasting: receives updates
