# jeraldsubiera/schedule_summarizer architecture

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

- Interactive diagram: https://gitdiagram.com/jeraldsubiera/schedule_summarizer
- Repository: https://github.com/jeraldsubiera/schedule_summarizer

## Overview

#### Purpose and Entry Points
This is a Flutter multi-platform application, likely for composing and sharing shuttle/session summaries. The Flutter runtime starts at `lib/main.dart`, applies shared presentation configuration from `lib/theme.dart`, and renders the primary application shell in `lib/views/main_view.dart`.

Native host entry points wrap the same Flutter app on Android, iOS, desktop, and web: `android/app/src/main/kotlin/com/example/shuttle_summary/MainActivity.kt`, `ios/Runner/AppDelegate.swift`, and `web/index.html`.

#### Application Shell and Navigation
`lib/views/main_view.dart` is the top-level UI coordinator. It is supported by `lib/widgets/bottom_nav_bar.dart`, which indicates a tabbed or section-based client flow. Feature views are composed as widgets rather than separate native screens, keeping navigation and state in the Dart/UI layer.

#### Session Domain and Parsing Pipeline
The core domain object is `lib/models/session_model.dart`. Raw or pasted schedule/session content is transformed by `lib/utils/parser_engine.dart` into this model layer, creating a boundary between unstructured input and UI-ready schedule data.

Input capture and parsing-oriented interaction live in `lib/widgets/accordion_input.dart`; parsed results are presented through `lib/widgets/schedule_card.dart`. This establishes the main flow: user input → parser engine → session models → schedule display.

#### Player and Search Interaction
Player/participant management is a distinct UI capability in `lib/widgets/manage_players_view.dart`. `lib/widgets/search_autocomplete.dart` provides searchable selection, likely feeding player or session-related forms. These widgets remain presentation-side consumers of the app’s in-memory domain data; no repository or backend data-access layer is present in the tree.

#### Sharing and External Integrations
Sharing is isolated behind platform-specific implementations: `lib/utils/sharing.dart` selects `lib/utils/sharing_mobile.dart` or `lib/utils/sharing_web.dart`. WhatsApp launching follows the same conditional-platform pattern via `lib/utils/whatsapp_launcher.dart`, `lib/utils/whatsapp_launcher_web.dart`, and `lib/utils/whatsapp_launcher_stub.dart`.

Google SSO is similarly abstracted: `lib/helpers/google_sso.dart` routes to web or non-web implementations in `lib/helpers/google_sso_web.dart` and `lib/helpers/google_sso_stub.dart`. These boundaries prevent platform APIs from leaking into core views.

#### Runtime and Platform Surface
Flutter/Dart is the primary runtime, with generated/native shells for Android, iOS, Linux, macOS, Windows, and web. The web target includes PWA assets and service-worker support in `web/manifest.json`, `web/sw.js`, and `web/flutter_bootstrap.js`. iOS additionally contains a share extension at `ios/ShareExtension/ShareViewController.swift`, which can receive shared content outside the main app process.

#### Firebase Infrastructure
Firebase hosting and Firestore security rules are configured in `firebase.json`, `.firebaserc`, and `firestore.rules`. The repository also contains an email extension environment file, `extensions/send-email.env`, indicating Firebase Extensions may support outbound email. No Dart Firebase service/client implementation is visible, so Firebase appears provisioned infrastructure rather than a currently explicit application data path.

Main entry points: [`lib/views/main_view.dart`](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/views/main_view.dart) (Application shell), [`lib/main.dart`](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/main.dart) (Flutter entry point), [`lib/utils/sharing.dart`](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/sharing.dart) (Sharing facade), [`lib/utils/whatsapp_launcher.dart`](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/whatsapp_launcher.dart) (WhatsApp launcher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_flutter["Flutter Client"]
  node_main(("Flutter entry point<br/>Dart entry<br/>[main.dart]"))
  node_theme["Shared theme<br/>presentation config<br/>[theme.dart]"]
  node_main_view["Application shell<br/>top-level view<br/>[main_view.dart]"]
  node_bottom_nav["Bottom navigation<br/>navigation widget"]
  node_accordion_input["Schedule input<br/>input widget"]
  node_parser{{"Parser engine<br/>parsing service<br/>[parser_engine.dart]"}}
  node_session_model["Session model<br/>domain model<br/>[session_model.dart]"]
  node_schedule_card["Schedule display<br/>presentation widget<br/>[schedule_card.dart]"]
  node_manage_players["Player management<br/>feature view"]
  node_search["Search autocomplete<br/>selection widget"]
end

subgraph group_integrations["Platform Integrations"]
  node_sharing{{"Sharing facade<br/>conditional platform API<br/>[sharing.dart]"}}
  node_sharing_mobile["Mobile sharing<br/>mobile implementation"]
  node_sharing_web["Web sharing<br/>web implementation<br/>[sharing_web.dart]"]
  node_whatsapp{{"WhatsApp launcher<br/>conditional platform API"}}
  node_whatsapp_web["Web WhatsApp launcher<br/>web implementation"]
  node_whatsapp_stub["Non-web WhatsApp launcher<br/>platform stub"]
  node_google_sso{{"Google SSO facade<br/>conditional platform API<br/>[google_sso.dart]"}}
  node_google_sso_web["Web Google SSO<br/>web implementation"]
  node_google_sso_stub["Non-web Google SSO<br/>platform stub"]
end

subgraph group_hosts["Native and Web Hosts"]
  node_native_hosts["Android and iOS hosts<br/>native entry points<br/>[MainActivity.kt]"]
  node_web_host["Web host<br/>web entry point<br/>[index.html]"]
  node_share_extension["iOS share extension<br/>separate iOS process"]
end

subgraph group_firebase["Firebase Infrastructure"]
  node_firebase_config["Firebase configuration<br/>infrastructure config<br/>[firebase.json]"]
  node_email_extension["Email extension environment<br/>Firebase Extension config<br/>[send-email.env]"]
end

node_main -->|"applies"| node_theme
node_main -->|"renders"| node_main_view
node_main_view -->|"uses"| node_bottom_nav
node_main_view -->|"hosts"| node_accordion_input
node_main_view -->|"shows"| node_schedule_card
node_main_view -->|"hosts"| node_manage_players
node_manage_players -->|"uses"| node_search
node_accordion_input -->|"submits raw content"| node_parser
node_parser -->|"produces"| node_session_model
node_session_model -->|"drives display"| node_schedule_card
node_sharing -.->|"selects on mobile"| node_sharing_mobile
node_sharing -.->|"selects on web"| node_sharing_web
node_whatsapp -.->|"selects on web"| node_whatsapp_web
node_whatsapp -.->|"selects otherwise"| node_whatsapp_stub
node_google_sso -.->|"selects on web"| node_google_sso_web
node_google_sso -.->|"selects otherwise"| node_google_sso_stub
node_native_hosts -->|"launches"| node_main
node_web_host -->|"boots"| node_main
node_email_extension -.->|"provisioned alongside"| node_firebase_config

click node_main "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/main.dart"
click node_theme "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/theme.dart"
click node_main_view "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/views/main_view.dart"
click node_bottom_nav "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/widgets/bottom_nav_bar.dart"
click node_accordion_input "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/widgets/accordion_input.dart"
click node_parser "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/parser_engine.dart"
click node_session_model "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/models/session_model.dart"
click node_schedule_card "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/widgets/schedule_card.dart"
click node_manage_players "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/widgets/manage_players_view.dart"
click node_search "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/widgets/search_autocomplete.dart"
click node_sharing "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/sharing.dart"
click node_sharing_mobile "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/sharing_mobile.dart"
click node_sharing_web "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/sharing_web.dart"
click node_whatsapp "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/whatsapp_launcher.dart"
click node_whatsapp_web "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/whatsapp_launcher_web.dart"
click node_whatsapp_stub "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/whatsapp_launcher_stub.dart"
click node_google_sso "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/helpers/google_sso.dart"
click node_google_sso_web "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/helpers/google_sso_web.dart"
click node_google_sso_stub "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/helpers/google_sso_stub.dart"
click node_native_hosts "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/android/app/src/main/kotlin/com/example/shuttle_summary/MainActivity.kt"
click node_web_host "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/web/index.html"
click node_share_extension "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/ios/ShareExtension/ShareViewController.swift"
click node_firebase_config "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/firebase.json"
click node_email_extension "https://github.com/jeraldsubiera/schedule_summarizer/blob/main/extensions/send-email.env"

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_main,node_theme,node_main_view,node_bottom_nav,node_accordion_input,node_parser,node_session_model,node_schedule_card,node_manage_players,node_search toneBlue
class node_sharing,node_sharing_mobile,node_sharing_web,node_whatsapp,node_whatsapp_web,node_whatsapp_stub,node_google_sso,node_google_sso_web,node_google_sso_stub toneAmber
class node_native_hosts,node_web_host,node_share_extension toneMint
class node_firebase_config,node_email_extension toneRose
```

## Components

### Flutter Client

Dart application UI and domain flow.

- [Flutter entry point](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/main.dart): Dart entry · `lib/main.dart`
- [Shared theme](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/theme.dart): presentation config · `lib/theme.dart`
- [Application shell](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/views/main_view.dart): top-level view · Coordinates the primary client UI. · `lib/views/main_view.dart`
- [Bottom navigation](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/widgets/bottom_nav_bar.dart): navigation widget · `lib/widgets/bottom_nav_bar.dart`
- [Schedule input](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/widgets/accordion_input.dart): input widget · `lib/widgets/accordion_input.dart`
- [Parser engine](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/parser_engine.dart): parsing service · Transforms raw schedule content into domain data. · `lib/utils/parser_engine.dart`
- [Session model](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/models/session_model.dart): domain model · `lib/models/session_model.dart`
- [Schedule display](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/widgets/schedule_card.dart): presentation widget · `lib/widgets/schedule_card.dart`
- [Player management](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/widgets/manage_players_view.dart): feature view · `lib/widgets/manage_players_view.dart`
- [Search autocomplete](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/widgets/search_autocomplete.dart): selection widget · `lib/widgets/search_autocomplete.dart`

### Platform Integrations

Conditional Dart interfaces isolate platform APIs.

- [Sharing facade](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/sharing.dart): conditional platform API · `lib/utils/sharing.dart`
- [Mobile sharing](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/sharing_mobile.dart): mobile implementation · `lib/utils/sharing_mobile.dart`
- [Web sharing](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/sharing_web.dart): web implementation · `lib/utils/sharing_web.dart`
- [WhatsApp launcher](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/whatsapp_launcher.dart): conditional platform API · `lib/utils/whatsapp_launcher.dart`
- [Web WhatsApp launcher](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/whatsapp_launcher_web.dart): web implementation · `lib/utils/whatsapp_launcher_web.dart`
- [Non-web WhatsApp launcher](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/utils/whatsapp_launcher_stub.dart): platform stub · `lib/utils/whatsapp_launcher_stub.dart`
- [Google SSO facade](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/helpers/google_sso.dart): conditional platform API · `lib/helpers/google_sso.dart`
- [Web Google SSO](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/helpers/google_sso_web.dart): web implementation · `lib/helpers/google_sso_web.dart`
- [Non-web Google SSO](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/lib/helpers/google_sso_stub.dart): platform stub · `lib/helpers/google_sso_stub.dart`

### Native and Web Hosts

Platform entry surfaces wrapping the Flutter app.

- [Android and iOS hosts](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/android/app/src/main/kotlin/com/example/shuttle_summary/MainActivity.kt): native entry points · Launch the same Flutter application on mobile. · `android/app/src/main/kotlin/com/example/shuttle_summary/MainActivity.kt`
- [Web host](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/web/index.html): web entry point · `web/index.html`
- [iOS share extension](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/ios/ShareExtension/ShareViewController.swift): separate iOS process · Receives shared content outside the main app process. · `ios/ShareExtension/ShareViewController.swift`

### Firebase Infrastructure

Provisioned hosting, rules, and extension configuration.

- [Firebase configuration](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/firebase.json): infrastructure config · Hosting and Firestore security are provisioned without a visible Dart client path. · `firebase.json`
- [Email extension environment](https://github.com/jeraldsubiera/schedule_summarizer/blob/main/extensions/send-email.env): Firebase Extension config · `extensions/send-email.env`

## Connections

- Flutter entry point → Shared theme: applies
- Flutter entry point → Application shell: renders
- Application shell → Bottom navigation: uses
- Application shell → Schedule input: hosts
- Application shell → Schedule display: shows
- Application shell → Player management: hosts
- Player management → Search autocomplete: uses
- Schedule input → Parser engine: submits raw content
- Parser engine → Session model: produces
- Session model → Schedule display: drives display
- Sharing facade → Mobile sharing: selects on mobile
- Sharing facade → Web sharing: selects on web
- WhatsApp launcher → Web WhatsApp launcher: selects on web
- WhatsApp launcher → Non-web WhatsApp launcher: selects otherwise
- Google SSO facade → Web Google SSO: selects on web
- Google SSO facade → Non-web Google SSO: selects otherwise
- Android and iOS hosts → Flutter entry point: launches
- Web host → Flutter entry point: boots
- Email extension environment → Firebase configuration: provisioned alongside
