# jasujapratham/nudge architecture

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

## Overview

Nudge is a reminder-and-alarm web app with optional Gemini-assisted reminder creation. Its main workflow is account sign-in, creating or editing a scheduled reminder, and receiving a browser alarm when it is due. The graph includes the documented reminder lifecycle, authentication, and AI branch. Backend service and controller relationships are based on sampled source; frontend wiring beyond the sampled app entry and alarm hook is shown only where supported by module roles. The database technology is not identified in the supplied evidence.

Main entry points: [`frontend/src/pages/DashboardPage.jsx`](https://github.com/jasujapratham/nudge/blob/main/frontend/src/pages/DashboardPage.jsx) (Reminder dashboard), [`frontend/src/api/client.js`](https://github.com/jasujapratham/nudge/blob/main/frontend/src/api/client.js) (HTTP client), [`frontend/src/App.jsx`](https://github.com/jasujapratham/nudge/blob/main/frontend/src/App.jsx) (Routes and access), [`frontend/src/hooks/useReminderAlarm.js`](https://github.com/jasujapratham/nudge/blob/main/frontend/src/hooks/useReminderAlarm.js) (Alarm scheduler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web app"]
  node_app["Routes and access<br/>[App.jsx]"]
  node_auth_page["Sign-in and signup<br/>[AuthPage.jsx]"]
  node_auth_context["Session context<br/>[AuthContext.jsx]"]
  node_dashboard["Reminder dashboard<br/>[DashboardPage.jsx]"]
  node_reminder_ui["Reminder controls<br/>[ReminderForm.jsx]"]
  node_reminder_card["Reminder display<br/>[ReminderCard.jsx]"]
  node_alarm_hook["Alarm scheduler"]
  node_reminder_time["Time formatting<br/>[reminderTime.js]"]
  node_ai_panel["AI reminder panel"]
  node_api_client["HTTP client<br/>[client.js]"]
  node_auth_api["Auth requests<br/>[auth.js]"]
  node_reminder_api["Reminder requests<br/>[reminders.js]"]
  node_ai_api["AI requests<br/>[ai.js]"]
  node_alarm_outputs["Browser alert services"]
  node_local_storage[("Browser local storage")]
end

subgraph group_api["Backend API"]
end

subgraph group_identity["Identity and security"]
  node_auth_controller["Auth endpoints"]
  node_auth_service["Account service<br/>[AuthService.java]"]
  node_jwt_service["JWT service<br/>[JwtService.java]"]
  node_jwt_filter["JWT request filter"]
  node_user_details["User lookup"]
  node_user_repo["User repository"]
end

subgraph group_reminders["Reminder management"]
  node_reminder_controller["Reminder endpoints"]
  node_reminder_service["Reminder operations"]
  node_reminder_repo["Reminder repository"]
  node_reminder_entity["Reminder record<br/>[Reminder.java]"]
end

subgraph group_ai["AI assistance"]
  node_ai_controller["AI endpoint<br/>[AIController.java]"]
  node_ai_service["Reminder parser<br/>[AIService.java]"]
  node_gemini["Google Gemini"]
end

node_user(("User"))
node_database[("Application database")]

node_user -->|"uses"| node_app
node_app -->|"checks session"| node_auth_context
node_app -->|"routes to"| node_auth_page
node_app -->|"routes to"| node_dashboard
node_auth_page -->|"submits credentials"| node_auth_context
node_auth_context -->|"requests auth"| node_auth_api
node_auth_api -->|"sends requests"| node_api_client
node_dashboard -->|"manages reminders"| node_reminder_api
node_dashboard -->|"renders controls"| node_reminder_ui
node_dashboard -->|"renders reminders"| node_reminder_card
node_dashboard -->|"checks due items"| node_alarm_hook
node_dashboard -.->|"offers AI entry"| node_ai_panel
node_ai_panel -.->|"requests parsing"| node_ai_api
node_reminder_api -->|"sends requests"| node_api_client
node_ai_api -.->|"sends requests"| node_api_client
node_api_client -->|"HTTP requests"| node_auth_controller
node_api_client -->|"HTTP requests"| node_reminder_controller
node_api_client -.->|"HTTP requests"| node_ai_controller
node_alarm_hook -->|"converts due time"| node_reminder_time
node_alarm_hook -->|"reads and writes"| node_local_storage
node_alarm_hook -->|"triggers alerts"| node_alarm_outputs
node_auth_controller -->|"delegates auth"| node_auth_service
node_auth_service -->|"reads and saves"| node_user_repo
node_auth_service -->|"creates token"| node_jwt_service
node_jwt_filter -->|"verifies token"| node_jwt_service
node_jwt_filter -->|"loads principal"| node_user_details
node_user_details -->|"finds account"| node_user_repo
node_reminder_controller -->|"delegates operations"| node_reminder_service
node_reminder_service -->|"reads and writes"| node_reminder_repo
node_reminder_service -->|"loads owner"| node_user_repo
node_reminder_repo -->|"stores records"| node_reminder_entity
node_user_repo -->|"persists accounts"| node_database
node_reminder_repo -->|"persists reminders"| node_database
node_ai_controller -.->|"delegates parsing"| node_ai_service
node_ai_service -.->|"sends prompt"| node_gemini

click node_app "https://github.com/jasujapratham/nudge/blob/main/frontend/src/App.jsx"
click node_auth_page "https://github.com/jasujapratham/nudge/blob/main/frontend/src/pages/AuthPage.jsx"
click node_auth_context "https://github.com/jasujapratham/nudge/blob/main/frontend/src/context/AuthContext.jsx"
click node_dashboard "https://github.com/jasujapratham/nudge/blob/main/frontend/src/pages/DashboardPage.jsx"
click node_reminder_ui "https://github.com/jasujapratham/nudge/blob/main/frontend/src/components/ReminderForm.jsx"
click node_reminder_card "https://github.com/jasujapratham/nudge/blob/main/frontend/src/components/ReminderCard.jsx"
click node_alarm_hook "https://github.com/jasujapratham/nudge/blob/main/frontend/src/hooks/useReminderAlarm.js"
click node_reminder_time "https://github.com/jasujapratham/nudge/blob/main/frontend/src/utils/reminderTime.js"
click node_ai_panel "https://github.com/jasujapratham/nudge/blob/main/frontend/src/components/AIReminderPanel.jsx"
click node_api_client "https://github.com/jasujapratham/nudge/blob/main/frontend/src/api/client.js"
click node_auth_api "https://github.com/jasujapratham/nudge/blob/main/frontend/src/api/auth.js"
click node_reminder_api "https://github.com/jasujapratham/nudge/blob/main/frontend/src/api/reminders.js"
click node_ai_api "https://github.com/jasujapratham/nudge/blob/main/frontend/src/api/ai.js"
click node_auth_controller "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/controller/AuthController.java"
click node_auth_service "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/service/AuthService.java"
click node_jwt_service "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/security/JwtService.java"
click node_jwt_filter "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/security/JwtAuthenticationFilter.java"
click node_user_details "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/security/NudgeUserDetailsService.java"
click node_user_repo "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/repository/UserRepository.java"
click node_reminder_controller "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/controller/ReminderController.java"
click node_reminder_service "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/service/ReminderService.java"
click node_reminder_repo "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/repository/ReminderRepository.java"
click node_reminder_entity "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/entity/Reminder.java"
click node_ai_controller "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/controller/AIController.java"
click node_ai_service "https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/service/AIService.java"

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_auth_page,node_auth_context,node_dashboard,node_reminder_ui,node_reminder_card,node_alarm_hook,node_reminder_time,node_ai_panel,node_api_client,node_auth_api,node_reminder_api,node_ai_api,node_alarm_outputs,node_local_storage,node_user toneBlue
class node_auth_controller,node_auth_service,node_jwt_service,node_jwt_filter,node_user_details,node_user_repo toneMint
class node_reminder_controller,node_reminder_service,node_reminder_repo,node_reminder_entity toneRose
class node_ai_controller,node_ai_service,node_gemini toneIndigo
class node_database toneAmber
```

## Components

### Web app

- [Routes and access](https://github.com/jasujapratham/nudge/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Sign-in and signup](https://github.com/jasujapratham/nudge/blob/main/frontend/src/pages/AuthPage.jsx): `frontend/src/pages/AuthPage.jsx`
- [Session context](https://github.com/jasujapratham/nudge/blob/main/frontend/src/context/AuthContext.jsx): `frontend/src/context/AuthContext.jsx`
- [Reminder dashboard](https://github.com/jasujapratham/nudge/blob/main/frontend/src/pages/DashboardPage.jsx): `frontend/src/pages/DashboardPage.jsx`
- [Reminder controls](https://github.com/jasujapratham/nudge/blob/main/frontend/src/components/ReminderForm.jsx): `frontend/src/components/ReminderForm.jsx`
- [Reminder display](https://github.com/jasujapratham/nudge/blob/main/frontend/src/components/ReminderCard.jsx): `frontend/src/components/ReminderCard.jsx`
- [Alarm scheduler](https://github.com/jasujapratham/nudge/blob/main/frontend/src/hooks/useReminderAlarm.js): `frontend/src/hooks/useReminderAlarm.js`
- [Time formatting](https://github.com/jasujapratham/nudge/blob/main/frontend/src/utils/reminderTime.js): `frontend/src/utils/reminderTime.js`
- [AI reminder panel](https://github.com/jasujapratham/nudge/blob/main/frontend/src/components/AIReminderPanel.jsx): `frontend/src/components/AIReminderPanel.jsx`
- [HTTP client](https://github.com/jasujapratham/nudge/blob/main/frontend/src/api/client.js): `frontend/src/api/client.js`
- [Auth requests](https://github.com/jasujapratham/nudge/blob/main/frontend/src/api/auth.js): `frontend/src/api/auth.js`
- [Reminder requests](https://github.com/jasujapratham/nudge/blob/main/frontend/src/api/reminders.js): `frontend/src/api/reminders.js`
- [AI requests](https://github.com/jasujapratham/nudge/blob/main/frontend/src/api/ai.js): `frontend/src/api/ai.js`
- **Browser alert services**
- **Browser local storage**

### Identity and security

- [Auth endpoints](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/controller/AuthController.java): `backend/src/main/java/com/nudge/controller/AuthController.java`
- [Account service](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/service/AuthService.java): `backend/src/main/java/com/nudge/service/AuthService.java`
- [JWT service](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/security/JwtService.java): `backend/src/main/java/com/nudge/security/JwtService.java`
- [JWT request filter](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/security/JwtAuthenticationFilter.java): `backend/src/main/java/com/nudge/security/JwtAuthenticationFilter.java`
- [User lookup](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/security/NudgeUserDetailsService.java): `backend/src/main/java/com/nudge/security/NudgeUserDetailsService.java`
- [User repository](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/repository/UserRepository.java): `backend/src/main/java/com/nudge/repository/UserRepository.java`

### Reminder management

- [Reminder endpoints](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/controller/ReminderController.java): `backend/src/main/java/com/nudge/controller/ReminderController.java`
- [Reminder operations](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/service/ReminderService.java): `backend/src/main/java/com/nudge/service/ReminderService.java`
- [Reminder repository](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/repository/ReminderRepository.java): `backend/src/main/java/com/nudge/repository/ReminderRepository.java`
- [Reminder record](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/entity/Reminder.java): `backend/src/main/java/com/nudge/entity/Reminder.java`

### AI assistance

- [AI endpoint](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/controller/AIController.java): `backend/src/main/java/com/nudge/controller/AIController.java`
- [Reminder parser](https://github.com/jasujapratham/nudge/blob/main/backend/src/main/java/com/nudge/service/AIService.java): `backend/src/main/java/com/nudge/service/AIService.java`
- **Google Gemini**

### Other components

- **User**
- **Application database**

## Connections

- User → Routes and access: uses
- Routes and access → Session context: checks session
- Routes and access → Sign-in and signup: routes to
- Routes and access → Reminder dashboard: routes to
- Sign-in and signup → Session context: submits credentials
- Session context → Auth requests: requests auth
- Auth requests → HTTP client: sends requests
- Reminder dashboard → Reminder requests: manages reminders
- Reminder dashboard → Reminder controls: renders controls
- Reminder dashboard → Reminder display: renders reminders
- Reminder dashboard → Alarm scheduler: checks due items
- Reminder dashboard → AI reminder panel: offers AI entry
- AI reminder panel → AI requests: requests parsing
- Reminder requests → HTTP client: sends requests
- AI requests → HTTP client: sends requests
- HTTP client → Auth endpoints: HTTP requests
- HTTP client → Reminder endpoints: HTTP requests
- HTTP client → AI endpoint: HTTP requests
- Alarm scheduler → Time formatting: converts due time
- Alarm scheduler → Browser local storage: reads and writes
- Alarm scheduler → Browser alert services: triggers alerts
- Auth endpoints → Account service: delegates auth
- Account service → User repository: reads and saves
- Account service → JWT service: creates token
- JWT request filter → JWT service: verifies token
- JWT request filter → User lookup: loads principal
- User lookup → User repository: finds account
- Reminder endpoints → Reminder operations: delegates operations
- Reminder operations → Reminder repository: reads and writes
- Reminder operations → User repository: loads owner
- Reminder repository → Reminder record: stores records
- User repository → Application database: persists accounts
- Reminder repository → Application database: persists reminders
- AI endpoint → Reminder parser: delegates parsing
- Reminder parser → Google Gemini: sends prompt
