# srisaidhakshini/wave architecture

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

## Overview

Wave is a student task manager whose main workflow is to sign in, plan and organize deadline-driven tasks, then work through task-linked Pomodoro sessions and review progress. The client-side store coordinates task, category, session, settings, timer, and reminder state; the pages and shared shell expose the task list, board, calendar, focus, categories, and analytics. The README documents browser-local demo persistence and optional Supabase authentication, database sync, and realtime updates. Several feature-page implementations were not sampled, so their links rely on README documentation rather than inspected source.

Main entry points: [`lib/store.tsx`](https://github.com/srisaidhakshini/wave/blob/main/lib/store.tsx) (App state and timer), [`components/Shell.tsx`](https://github.com/srisaidhakshini/wave/blob/main/components/Shell.tsx) (App shell), [`app/login/page.tsx`](https://github.com/srisaidhakshini/wave/blob/main/app/login/page.tsx) (Sign in), [`app/app/tasks/page.tsx`](https://github.com/srisaidhakshini/wave/blob/main/app/app/tasks/page.tsx) (Task list)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["App experience"]
  node_login["Sign in<br/>[page.tsx]"]
  node_shell["App shell<br/>[Shell.tsx]"]
  node_context["Context panel<br/>[ContextPanel.tsx]"]
  node_settings["Settings and export<br/>[page.tsx]"]
end

subgraph group_planning["Task planning"]
  node_task_page["Task list<br/>[page.tsx]"]
  node_task_form["Task editor<br/>[TaskForm.tsx]"]
  node_task_card["Task card<br/>[TaskCard.tsx]"]
  node_board["Kanban board<br/>[page.tsx]"]
  node_calendar["Calendar view<br/>[page.tsx]"]
  node_categories["Categories<br/>[page.tsx]"]
end

subgraph group_focus_insights["Focus and insights"]
  node_dashboard["Dashboard<br/>[page.tsx]"]
  node_focus_page["Focus page<br/>[page.tsx]"]
  node_focus_dialog["Focus dialog<br/>[FocusDialog.tsx]"]
  node_analytics["Analytics<br/>[page.tsx]"]
  node_charts["Charts<br/>[Charts.tsx]"]
end

subgraph group_state_sync["State and sync"]
  node_store["App state and timer<br/>[store.tsx]"]
  node_utils["Task and stats utilities<br/>[utils.ts]"]
  node_sync["Supabase sync<br/>[db.ts]"]
end

subgraph group_platform["Browser and backend"]
  node_browser_storage[("Browser storage")]
  node_notifications["Notifications and audio"]
  node_service_worker["Service worker<br/>[sw.js]"]
  node_auth["Supabase Auth"]
  node_postgres[("Postgres with RLS")]
  node_realtime["Supabase Realtime"]
end

node_student(("Student"))
node_google["Google OAuth"]

node_student -->|"signs in"| node_login
node_student -->|"manages tasks"| node_task_page
node_login -->|"requests sign-in"| node_store
node_login -.->|"starts OAuth"| node_google
node_shell -->|"renders"| node_context
node_shell -->|"opens"| node_task_form
node_task_page -->|"reads and updates"| node_store
node_task_page -->|"renders"| node_task_card
node_task_card -->|"uses task state"| node_store
node_task_form -->|"edits task state"| node_store
node_board -->|"reads and updates"| node_store
node_calendar -->|"reads task state"| node_store
node_categories -->|"manages categories"| node_store
node_dashboard -->|"reads and updates"| node_store
node_dashboard -->|"renders"| node_charts
node_focus_page -->|"uses timer state"| node_store
node_focus_dialog -->|"controls focus"| node_store
node_analytics -->|"reads task and session state"| node_store
node_analytics -->|"renders"| node_charts
node_settings -->|"updates settings"| node_store
node_store -->|"uses helpers and seed data"| node_utils
node_store -->|"loads and persists changes"| node_sync
node_store -->|"persists demo and timer"| node_browser_storage
node_store -->|"schedules reminders and alerts"| node_notifications
node_store -->|"uses session"| node_auth
node_sync -->|"loads and writes rows"| node_postgres
node_postgres -->|"publishes changes"| node_realtime
node_realtime -->|"triggers reload"| node_sync
node_auth -->|"OAuth flow"| node_google
node_shell -.->|"registers app worker"| node_service_worker

click node_login "https://github.com/srisaidhakshini/wave/blob/main/app/login/page.tsx"
click node_shell "https://github.com/srisaidhakshini/wave/blob/main/components/Shell.tsx"
click node_context "https://github.com/srisaidhakshini/wave/blob/main/components/ContextPanel.tsx"
click node_task_page "https://github.com/srisaidhakshini/wave/blob/main/app/app/tasks/page.tsx"
click node_task_form "https://github.com/srisaidhakshini/wave/blob/main/components/TaskForm.tsx"
click node_task_card "https://github.com/srisaidhakshini/wave/blob/main/components/TaskCard.tsx"
click node_board "https://github.com/srisaidhakshini/wave/blob/main/app/app/board/page.tsx"
click node_calendar "https://github.com/srisaidhakshini/wave/blob/main/app/app/calendar/page.tsx"
click node_categories "https://github.com/srisaidhakshini/wave/blob/main/app/app/categories/page.tsx"
click node_dashboard "https://github.com/srisaidhakshini/wave/blob/main/app/app/page.tsx"
click node_focus_page "https://github.com/srisaidhakshini/wave/blob/main/app/app/focus/page.tsx"
click node_focus_dialog "https://github.com/srisaidhakshini/wave/blob/main/components/FocusDialog.tsx"
click node_analytics "https://github.com/srisaidhakshini/wave/blob/main/app/app/analytics/page.tsx"
click node_charts "https://github.com/srisaidhakshini/wave/blob/main/components/Charts.tsx"
click node_settings "https://github.com/srisaidhakshini/wave/blob/main/app/app/settings/page.tsx"
click node_store "https://github.com/srisaidhakshini/wave/blob/main/lib/store.tsx"
click node_utils "https://github.com/srisaidhakshini/wave/blob/main/lib/utils.ts"
click node_sync "https://github.com/srisaidhakshini/wave/blob/main/lib/db.ts"
click node_service_worker "https://github.com/srisaidhakshini/wave/blob/main/public/sw.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_login,node_shell,node_context,node_settings toneBlue
class node_task_page,node_task_form,node_task_card,node_board,node_calendar,node_categories toneAmber
class node_dashboard,node_focus_page,node_focus_dialog,node_analytics,node_charts toneMint
class node_store,node_utils,node_sync toneRose
class node_browser_storage,node_notifications,node_service_worker,node_auth,node_postgres,node_realtime,node_student,node_google toneIndigo
```

## Components

### App experience

- [Sign in](https://github.com/srisaidhakshini/wave/blob/main/app/login/page.tsx): `app/login/page.tsx`
- [App shell](https://github.com/srisaidhakshini/wave/blob/main/components/Shell.tsx): `components/Shell.tsx`
- [Context panel](https://github.com/srisaidhakshini/wave/blob/main/components/ContextPanel.tsx): `components/ContextPanel.tsx`
- [Settings and export](https://github.com/srisaidhakshini/wave/blob/main/app/app/settings/page.tsx): `app/app/settings/page.tsx`

### Task planning

- [Task list](https://github.com/srisaidhakshini/wave/blob/main/app/app/tasks/page.tsx): `app/app/tasks/page.tsx`
- [Task editor](https://github.com/srisaidhakshini/wave/blob/main/components/TaskForm.tsx): `components/TaskForm.tsx`
- [Task card](https://github.com/srisaidhakshini/wave/blob/main/components/TaskCard.tsx): `components/TaskCard.tsx`
- [Kanban board](https://github.com/srisaidhakshini/wave/blob/main/app/app/board/page.tsx): `app/app/board/page.tsx`
- [Calendar view](https://github.com/srisaidhakshini/wave/blob/main/app/app/calendar/page.tsx): `app/app/calendar/page.tsx`
- [Categories](https://github.com/srisaidhakshini/wave/blob/main/app/app/categories/page.tsx): `app/app/categories/page.tsx`

### Focus and insights

- [Dashboard](https://github.com/srisaidhakshini/wave/blob/main/app/app/page.tsx): `app/app/page.tsx`
- [Focus page](https://github.com/srisaidhakshini/wave/blob/main/app/app/focus/page.tsx): `app/app/focus/page.tsx`
- [Focus dialog](https://github.com/srisaidhakshini/wave/blob/main/components/FocusDialog.tsx): `components/FocusDialog.tsx`
- [Analytics](https://github.com/srisaidhakshini/wave/blob/main/app/app/analytics/page.tsx): `app/app/analytics/page.tsx`
- [Charts](https://github.com/srisaidhakshini/wave/blob/main/components/Charts.tsx): `components/Charts.tsx`

### State and sync

- [App state and timer](https://github.com/srisaidhakshini/wave/blob/main/lib/store.tsx): `lib/store.tsx`
- [Task and stats utilities](https://github.com/srisaidhakshini/wave/blob/main/lib/utils.ts): `lib/utils.ts`
- [Supabase sync](https://github.com/srisaidhakshini/wave/blob/main/lib/db.ts): `lib/db.ts`

### Browser and backend

- **Browser storage**
- **Notifications and audio**
- [Service worker](https://github.com/srisaidhakshini/wave/blob/main/public/sw.js): `public/sw.js`
- **Supabase Auth**
- **Postgres with RLS**
- **Supabase Realtime**

### Other components

- **Student**
- **Google OAuth**

## Connections

- Student → Sign in: signs in (evidence: `README.md`)
- Student → Task list: manages tasks (evidence: `README.md`)
- Sign in → App state and timer: requests sign-in (evidence: `app/login/page.tsx`)
- Sign in → Google OAuth: starts OAuth (evidence: `README.md`)
- App shell → Context panel: renders (evidence: `components/Shell.tsx`)
- App shell → Task editor: opens (evidence: `components/Shell.tsx`)
- Task list → App state and timer: reads and updates (evidence: `app/app/tasks/page.tsx`)
- Task list → Task card: renders (evidence: `app/app/tasks/page.tsx`)
- Task card → App state and timer: uses task state (evidence: `components/TaskCard.tsx`)
- Task editor → App state and timer: edits task state (evidence: `components/TaskForm.tsx`)
- Kanban board → App state and timer: reads and updates (evidence: `app/app/board/page.tsx`)
- Calendar view → App state and timer: reads task state (evidence: `app/app/calendar/page.tsx`)
- Categories → App state and timer: manages categories (evidence: `app/app/categories/page.tsx`)
- Dashboard → App state and timer: reads and updates (evidence: `app/app/page.tsx`)
- Dashboard → Charts: renders (evidence: `app/app/page.tsx`)
- Focus page → App state and timer: uses timer state (evidence: `app/app/focus/page.tsx`)
- Focus dialog → App state and timer: controls focus (evidence: `components/FocusDialog.tsx`)
- Analytics → App state and timer: reads task and session state (evidence: `app/app/analytics/page.tsx`)
- Analytics → Charts: renders (evidence: `app/app/analytics/page.tsx`)
- Settings and export → App state and timer: updates settings (evidence: `app/app/settings/page.tsx`)
- App state and timer → Task and stats utilities: uses helpers and seed data (evidence: `lib/store.tsx`)
- App state and timer → Supabase sync: loads and persists changes (evidence: `lib/store.tsx`)
- App state and timer → Browser storage: persists demo and timer (evidence: `README.md`)
- App state and timer → Notifications and audio: schedules reminders and alerts (evidence: `README.md`)
- App state and timer → Supabase Auth: uses session (evidence: `README.md`)
- Supabase sync → Postgres with RLS: loads and writes rows (evidence: `README.md`)
- Postgres with RLS → Supabase Realtime: publishes changes (evidence: `README.md`)
- Supabase Realtime → Supabase sync: triggers reload (evidence: `README.md`)
- Supabase Auth → Google OAuth: OAuth flow (evidence: `README.md`)
- App shell → Service worker: registers app worker
