# qtaqua/hangarin architecture

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

- Interactive diagram: https://gitdiagram.com/qtaqua/hangarin
- Repository: https://github.com/qtaqua/hangarin

## Overview

Hangarin is a Django task manager. A signed-in user reaches the task board, where requests create, edit, complete, or delete tasks and their subtasks and notes; the view loads the user’s task data and renders the board. Separate capabilities include account/OAuth management, category and priority administration, and PWA installation with limited offline asset caching. Relationships reflect the sampled views, routing, settings, and service worker; OAuth and django-pwa internals are external dependencies, not inspected repository code.

Main entry points: [`hangarin_project/hangarin_project/urls.py`](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/urls.py) (Allauth Routes), [`hangarin_project/hangarin/models.py`](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin/models.py) (Tasks, Notes, Subtasks), [`hangarin_project/hangarin/views.py`](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin/views.py) (Task Board View), [`hangarin_project/hangarin_project/settings.py`](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/settings.py) (Account Configuration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Task Board"]
  node_routes["Django Routes<br/>[urls.py]"]
  node_board["Task Board View<br/>[views.py]"]
  node_board_ui["Board Template<br/>[task_board.html]"]
end

subgraph group_domain["Task Domain"]
  node_task_models["Tasks, Notes, Subtasks<br/>[models.py]"]
  node_task_store[("SQLite Database<br/>[settings.py]")]
  node_admin["Domain Admin<br/>[admin.py]"]
  node_seed["Seed Data Command<br/>[seed_data.py]"]
end

subgraph group_identity["Identity"]
  node_account_routes["Allauth Routes<br/>[urls.py]"]
  node_account_config["Account Configuration<br/>[settings.py]"]
  node_account_ui["Account Templates<br/>[login.html]"]
  node_social_ui["OAuth Templates<br/>[connections.html]"]
end

subgraph group_pwa["PWA"]
  node_pwa_routes["PWA Routes<br/>[urls.py]"]
  node_pwa_config["PWA Configuration<br/>[settings.py]"]
  node_worker["Service Worker<br/>[serviceworker.js]"]
end

node_user(("User"))
node_oauth{{"Google / GitHub OAuth"}}
node_browser(("Browser / PWA Client"))

node_user -->|"requests pages"| node_routes
node_routes -->|"routes board"| node_board
node_board -->|"reads and updates"| node_task_models
node_board -->|"renders"| node_board_ui
node_task_models -.->|"persists records"| node_task_store
node_admin -->|"registers models"| node_task_models
node_seed -->|"creates sample records"| node_task_models
node_user -->|"signs in"| node_account_routes
node_account_routes -->|"uses configuration"| node_account_config
node_account_routes -.->|"uses templates"| node_account_ui
node_account_routes -.->|"uses templates"| node_social_ui
node_account_config -->|"enables providers"| node_oauth
node_user -.->|"authenticates with"| node_oauth
node_browser -->|"requests app metadata"| node_pwa_routes
node_pwa_config -->|"configures worker path"| node_worker
node_browser -.->|"registers and fetches"| node_worker

click node_routes "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/urls.py"
click node_board "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin/views.py"
click node_board_ui "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/templates/hangarin/task_board.html"
click node_task_models "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin/models.py"
click node_task_store "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/settings.py"
click node_admin "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin/admin.py"
click node_seed "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin/management/commands/seed_data.py"
click node_account_routes "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/urls.py"
click node_account_config "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/settings.py"
click node_account_ui "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/templates/account/login.html"
click node_social_ui "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/templates/socialaccount/connections.html"
click node_pwa_routes "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/urls.py"
click node_pwa_config "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/settings.py"
click node_worker "https://github.com/qtaqua/hangarin/blob/main/hangarin_project/static/js/serviceworker.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_routes,node_board,node_board_ui,node_user,node_browser toneBlue
class node_task_models,node_task_store,node_admin,node_seed toneAmber
class node_account_routes,node_account_config,node_account_ui,node_social_ui toneMint
class node_pwa_routes,node_pwa_config,node_worker toneRose
class node_oauth toneIndigo
```

## Components

### Task Board

- [Django Routes](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/urls.py): `hangarin_project/hangarin_project/urls.py`
- [Task Board View](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin/views.py): `hangarin_project/hangarin/views.py`
- [Board Template](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/templates/hangarin/task_board.html): `hangarin_project/templates/hangarin/task_board.html`

### Task Domain

- [Tasks, Notes, Subtasks](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin/models.py): `hangarin_project/hangarin/models.py`
- [SQLite Database](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/settings.py): `hangarin_project/hangarin_project/settings.py`
- [Domain Admin](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin/admin.py): `hangarin_project/hangarin/admin.py`
- [Seed Data Command](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin/management/commands/seed_data.py): `hangarin_project/hangarin/management/commands/seed_data.py`

### Identity

- [Allauth Routes](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/urls.py): `hangarin_project/hangarin_project/urls.py`
- [Account Configuration](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/settings.py): `hangarin_project/hangarin_project/settings.py`
- [Account Templates](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/templates/account/login.html): `hangarin_project/templates/account/login.html`
- [OAuth Templates](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/templates/socialaccount/connections.html): `hangarin_project/templates/socialaccount/connections.html`

### PWA

- [PWA Routes](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/urls.py): `hangarin_project/hangarin_project/urls.py`
- [PWA Configuration](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/hangarin_project/settings.py): `hangarin_project/hangarin_project/settings.py`
- [Service Worker](https://github.com/qtaqua/hangarin/blob/main/hangarin_project/static/js/serviceworker.js): `hangarin_project/static/js/serviceworker.js`

### Other components

- **User**
- **Google / GitHub OAuth**
- **Browser / PWA Client**

## Connections

- User → Django Routes: requests pages (evidence: `hangarin_project/hangarin_project/urls.py`)
- Django Routes → Task Board View: routes board (evidence: `hangarin_project/hangarin_project/urls.py`)
- Task Board View → Tasks, Notes, Subtasks: reads and updates (evidence: `hangarin_project/hangarin/views.py`)
- Task Board View → Board Template: renders (evidence: `hangarin_project/hangarin/views.py`)
- Tasks, Notes, Subtasks → SQLite Database: persists records
- Domain Admin → Tasks, Notes, Subtasks: registers models (evidence: `hangarin_project/hangarin/admin.py`)
- Seed Data Command → Tasks, Notes, Subtasks: creates sample records (evidence: `hangarin_project/hangarin/management/commands/seed_data.py`)
- User → Allauth Routes: signs in (evidence: `hangarin_project/hangarin_project/urls.py`)
- Allauth Routes → Account Configuration: uses configuration (evidence: `hangarin_project/hangarin_project/settings.py`)
- Allauth Routes → Account Templates: uses templates
- Allauth Routes → OAuth Templates: uses templates
- Account Configuration → Google / GitHub OAuth: enables providers (evidence: `hangarin_project/hangarin_project/settings.py`)
- User → Google / GitHub OAuth: authenticates with
- Browser / PWA Client → PWA Routes: requests app metadata (evidence: `hangarin_project/hangarin_project/urls.py`)
- PWA Configuration → Service Worker: configures worker path (evidence: `hangarin_project/hangarin_project/settings.py`)
- Browser / PWA Client → Service Worker: registers and fetches
