# djkamma420/stundenplannothing architecture

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

- Interactive diagram: https://gitdiagram.com/djkamma420/stundenplannothing
- Repository: https://github.com/djkamma420/stundenplannothing

## Overview

Stundenplan Nothing is a local-first, installable school-planning PWA. A student uses its browser interface to configure a timetable, then manages school records and views day/week, calendar and grade summaries; data stays on that device. The README documents schedule import/sharing, backups, calendar export, holidays and offline use. The sampled source confirms service-worker caching and optional IndexedDB folder persistence; detailed wiring for several documented features is not present in the excerpts, so those links are kept at the app boundary.

Main entry points: [`app.js`](https://github.com/djkamma420/stundenplannothing/blob/main/app.js) (App logic), [`index.html`](https://github.com/djkamma420/stundenplannothing/blob/main/index.html) (App interface), [`sw.js`](https://github.com/djkamma420/stundenplannothing/blob/main/sw.js) (Offline runtime)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["PWA interface"]
  node_ui["App interface<br/>[index.html]"]
  node_logic["App logic<br/>[app.js]"]
  node_offline["Offline runtime<br/>[sw.js]"]
end

subgraph group_planning["School planning"]
  node_schedule["Timetable<br/>[app.js]"]
  node_views["Day and week views<br/>[app.js]"]
  node_schedule_import["Schedule import<br/>[app.js]"]
end

subgraph group_records["Personal records"]
  node_entries["Tasks and events<br/>[app.js]"]
  node_attendance["Absences and archive<br/>[app.js]"]
  node_grades["Grades and estimates<br/>[app.js]"]
  node_notes["Study sheets<br/>[app.js]"]
  node_calendar_export["Calendar export<br/>[app.js]"]
end

subgraph group_storage["Local data and integrations"]
  node_settings["Profiles and settings<br/>[app.js]"]
  node_backup_share["Backup and plan sharing<br/>[app.js]"]
  node_local_data[("Browser localStorage")]
  node_folder_data[("Browser IndexedDB")]
  node_browser_cache[("Browser Cache Storage")]
end

node_student(("Student"))
node_holidays["OpenHolidays API"]
node_calendar_app(("Calendar app"))

node_student -->|"uses"| node_ui
node_ui -->|"loads"| node_logic
node_logic -->|"manages"| node_schedule
node_logic -->|"renders"| node_views
node_logic -->|"imports"| node_schedule_import
node_logic -->|"manages"| node_entries
node_logic -->|"manages"| node_attendance
node_logic -->|"calculates"| node_grades
node_logic -->|"manages"| node_notes
node_logic -->|"generates"| node_calendar_export
node_logic -->|"configures"| node_settings
node_logic -->|"exports and imports"| node_backup_share
node_logic -->|"reads and writes"| node_local_data
node_logic -.->|"stores folder handle"| node_folder_data
node_logic -.->|"fetches holidays"| node_holidays
node_calendar_export -->|"exports ICS for"| node_calendar_app
node_offline -->|"caches app files"| node_browser_cache
node_student -->|"runs PWA"| node_offline

click node_ui "https://github.com/djkamma420/stundenplannothing/blob/main/index.html"
click node_logic "https://github.com/djkamma420/stundenplannothing/blob/main/app.js"
click node_offline "https://github.com/djkamma420/stundenplannothing/blob/main/sw.js"
click node_schedule "https://github.com/djkamma420/stundenplannothing/blob/main/app.js"
click node_views "https://github.com/djkamma420/stundenplannothing/blob/main/app.js"
click node_schedule_import "https://github.com/djkamma420/stundenplannothing/blob/main/app.js"
click node_entries "https://github.com/djkamma420/stundenplannothing/blob/main/app.js"
click node_attendance "https://github.com/djkamma420/stundenplannothing/blob/main/app.js"
click node_grades "https://github.com/djkamma420/stundenplannothing/blob/main/app.js"
click node_notes "https://github.com/djkamma420/stundenplannothing/blob/main/app.js"
click node_calendar_export "https://github.com/djkamma420/stundenplannothing/blob/main/app.js"
click node_settings "https://github.com/djkamma420/stundenplannothing/blob/main/app.js"
click node_backup_share "https://github.com/djkamma420/stundenplannothing/blob/main/app.js"

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_ui,node_logic,node_offline toneBlue
class node_schedule,node_views,node_schedule_import toneAmber
class node_entries,node_attendance,node_grades,node_notes,node_calendar_export,node_holidays toneMint
class node_settings,node_backup_share,node_local_data,node_folder_data,node_browser_cache toneRose
class node_student,node_calendar_app toneIndigo
```

## Components

### PWA interface

- [App interface](https://github.com/djkamma420/stundenplannothing/blob/main/index.html): `index.html`
- [App logic](https://github.com/djkamma420/stundenplannothing/blob/main/app.js): `app.js`
- [Offline runtime](https://github.com/djkamma420/stundenplannothing/blob/main/sw.js): `sw.js`

### School planning

- [Timetable](https://github.com/djkamma420/stundenplannothing/blob/main/app.js): `app.js`
- [Day and week views](https://github.com/djkamma420/stundenplannothing/blob/main/app.js): `app.js`
- [Schedule import](https://github.com/djkamma420/stundenplannothing/blob/main/app.js): `app.js`

### Personal records

- [Tasks and events](https://github.com/djkamma420/stundenplannothing/blob/main/app.js): `app.js`
- [Absences and archive](https://github.com/djkamma420/stundenplannothing/blob/main/app.js): `app.js`
- [Grades and estimates](https://github.com/djkamma420/stundenplannothing/blob/main/app.js): `app.js`
- [Study sheets](https://github.com/djkamma420/stundenplannothing/blob/main/app.js): `app.js`
- [Calendar export](https://github.com/djkamma420/stundenplannothing/blob/main/app.js): `app.js`

### Local data and integrations

- [Profiles and settings](https://github.com/djkamma420/stundenplannothing/blob/main/app.js): `app.js`
- [Backup and plan sharing](https://github.com/djkamma420/stundenplannothing/blob/main/app.js): `app.js`
- **Browser localStorage**
- **Browser IndexedDB**
- **Browser Cache Storage**

### Other components

- **Student**
- **OpenHolidays API**
- **Calendar app**

## Connections

- Student → App interface: uses
- App interface → App logic: loads
- App logic → Timetable: manages
- App logic → Day and week views: renders
- App logic → Schedule import: imports
- App logic → Tasks and events: manages
- App logic → Absences and archive: manages
- App logic → Grades and estimates: calculates
- App logic → Study sheets: manages
- App logic → Calendar export: generates
- App logic → Profiles and settings: configures
- App logic → Backup and plan sharing: exports and imports
- App logic → Browser localStorage: reads and writes
- App logic → Browser IndexedDB: stores folder handle
- App logic → OpenHolidays API: fetches holidays
- Calendar export → Calendar app: exports ICS for
- Offline runtime → Browser Cache Storage: caches app files
- Student → Offline runtime: runs PWA
