# novix-mb/novix2 architecture

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

- Interactive diagram: https://gitdiagram.com/novix-mb/novix2
- Repository: https://github.com/novix-mb/novix2

## Overview

NOVIX is a bilingual, device-local study workspace. Its main user workflow spans the home dashboard, library and PDF reading, task and weekly planning, and focus sessions; the README also describes notes, a smart board, settings, and a coming-soon simulations section. The tree exposes only the HTML entry point and assets, so those UI domains are represented at the supported index.html path without asserting internal calls. The sampled service worker shows offline caching and reminder scheduling, backed by IndexedDB and browser notification APIs.

Main entry points: [`index.html`](https://github.com/novix-mb/novix2/blob/main/index.html) (NOVIX app), [`sw.js`](https://github.com/novix-mb/novix2/blob/main/sw.js) (Service worker), [`assets/audio`](https://github.com/novix-mb/novix2/tree/main/assets/audio) (Focus audio), [`assets/pdfjs/pdf.worker.js`](https://github.com/novix-mb/novix2/blob/main/assets/pdfjs/pdf.worker.js) (PDF.js worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_study["Study workspace"]
  node_app["NOVIX app<br/>[index.html]"]
  node_home["Home dashboard<br/>[index.html]"]
  node_library["PDF library<br/>[index.html]"]
  node_tasks["Task tracking<br/>[index.html]"]
  node_notes["Notes<br/>[index.html]"]
  node_timetable["Weekly timetable<br/>[index.html]"]
  node_focus["Focus timer<br/>[index.html]"]
  node_board["Smart board<br/>[index.html]"]
  node_simulations["Simulations<br/>[index.html]"]
  node_settings["Settings and about<br/>[index.html]"]
end

subgraph group_worker["Offline and reminders"]
  node_sw["Service worker<br/>[sw.js]"]
  node_cache[("Offline cache<br/>[sw.js]")]
  node_reminders["Reminder scheduler<br/>[sw.js]"]
  node_kv[("Reminder state<br/>[sw.js]")]
end

subgraph group_assets["Media assets"]
  node_audio["Focus audio"]
  node_pdfworker["PDF.js worker<br/>[pdf.worker.js]"]
  node_pdfassets["PDF assets"]
end

node_student(("Student"))
node_browser["Browser notifications"]

node_student -->|"uses"| node_app
node_app -->|"offers"| node_home
node_app -->|"offers"| node_library
node_app -->|"offers"| node_tasks
node_app -->|"offers"| node_notes
node_app -->|"offers"| node_timetable
node_app -->|"offers"| node_focus
node_app -->|"offers"| node_board
node_app -->|"offers"| node_simulations
node_app -->|"offers"| node_settings
node_app -.->|"registers"| node_sw
node_sw -->|"reads/writes"| node_cache
node_sw -->|"checks schedule"| node_reminders
node_reminders -->|"reads/writes"| node_kv
node_reminders -->|"shows alerts"| node_browser
node_sw -->|"handles clicks"| node_browser
node_focus -.->|"plays"| node_audio
node_library -.->|"uses"| node_pdfworker
node_library -.->|"loads"| node_pdfassets

click node_app "https://github.com/novix-mb/novix2/blob/main/index.html"
click node_home "https://github.com/novix-mb/novix2/blob/main/index.html"
click node_library "https://github.com/novix-mb/novix2/blob/main/index.html"
click node_tasks "https://github.com/novix-mb/novix2/blob/main/index.html"
click node_notes "https://github.com/novix-mb/novix2/blob/main/index.html"
click node_timetable "https://github.com/novix-mb/novix2/blob/main/index.html"
click node_focus "https://github.com/novix-mb/novix2/blob/main/index.html"
click node_board "https://github.com/novix-mb/novix2/blob/main/index.html"
click node_simulations "https://github.com/novix-mb/novix2/blob/main/index.html"
click node_settings "https://github.com/novix-mb/novix2/blob/main/index.html"
click node_sw "https://github.com/novix-mb/novix2/blob/main/sw.js"
click node_cache "https://github.com/novix-mb/novix2/blob/main/sw.js"
click node_reminders "https://github.com/novix-mb/novix2/blob/main/sw.js"
click node_kv "https://github.com/novix-mb/novix2/blob/main/sw.js"
click node_audio "https://github.com/novix-mb/novix2/tree/main/assets/audio"
click node_pdfworker "https://github.com/novix-mb/novix2/blob/main/assets/pdfjs/pdf.worker.js"
click node_pdfassets "https://github.com/novix-mb/novix2/tree/main/assets/pdfjs"

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_app,node_home,node_library,node_tasks,node_notes,node_timetable,node_focus,node_board,node_simulations,node_settings,node_browser toneBlue
class node_sw,node_cache,node_reminders,node_kv toneAmber
class node_audio,node_pdfworker,node_pdfassets toneMint
class node_student toneIndigo
```

## Components

### Study workspace

- [NOVIX app](https://github.com/novix-mb/novix2/blob/main/index.html): `index.html`
- [Home dashboard](https://github.com/novix-mb/novix2/blob/main/index.html): `index.html`
- [PDF library](https://github.com/novix-mb/novix2/blob/main/index.html): `index.html`
- [Task tracking](https://github.com/novix-mb/novix2/blob/main/index.html): `index.html`
- [Notes](https://github.com/novix-mb/novix2/blob/main/index.html): `index.html`
- [Weekly timetable](https://github.com/novix-mb/novix2/blob/main/index.html): `index.html`
- [Focus timer](https://github.com/novix-mb/novix2/blob/main/index.html): `index.html`
- [Smart board](https://github.com/novix-mb/novix2/blob/main/index.html): `index.html`
- [Simulations](https://github.com/novix-mb/novix2/blob/main/index.html): `index.html`
- [Settings and about](https://github.com/novix-mb/novix2/blob/main/index.html): `index.html`

### Offline and reminders

- [Service worker](https://github.com/novix-mb/novix2/blob/main/sw.js): `sw.js`
- [Offline cache](https://github.com/novix-mb/novix2/blob/main/sw.js): `sw.js`
- [Reminder scheduler](https://github.com/novix-mb/novix2/blob/main/sw.js): `sw.js`
- [Reminder state](https://github.com/novix-mb/novix2/blob/main/sw.js): `sw.js`

### Media assets

- [Focus audio](https://github.com/novix-mb/novix2/tree/main/assets/audio): `assets/audio`
- [PDF.js worker](https://github.com/novix-mb/novix2/blob/main/assets/pdfjs/pdf.worker.js): `assets/pdfjs/pdf.worker.js`
- [PDF assets](https://github.com/novix-mb/novix2/tree/main/assets/pdfjs): `assets/pdfjs`

### Other components

- **Student**
- **Browser notifications**

## Connections

- Student → NOVIX app: uses (evidence: `README.md`)
- NOVIX app → Home dashboard: offers (evidence: `README.md`)
- NOVIX app → PDF library: offers (evidence: `README.md`)
- NOVIX app → Task tracking: offers (evidence: `README.md`)
- NOVIX app → Notes: offers (evidence: `README.md`)
- NOVIX app → Weekly timetable: offers (evidence: `README.md`)
- NOVIX app → Focus timer: offers (evidence: `README.md`)
- NOVIX app → Smart board: offers (evidence: `README.md`)
- NOVIX app → Simulations: offers (evidence: `README.md`)
- NOVIX app → Settings and about: offers (evidence: `README.md`)
- NOVIX app → Service worker: registers
- Service worker → Offline cache: reads/writes (evidence: `sw.js`)
- Service worker → Reminder scheduler: checks schedule (evidence: `sw.js`)
- Reminder scheduler → Reminder state: reads/writes (evidence: `sw.js`)
- Reminder scheduler → Browser notifications: shows alerts (evidence: `sw.js`)
- Service worker → Browser notifications: handles clicks (evidence: `sw.js`)
- Focus timer → Focus audio: plays
- PDF library → PDF.js worker: uses
- PDF library → PDF assets: loads
