# krishna4a6av/chirpy architecture

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

- Interactive diagram: https://gitdiagram.com/krishna4a6av/chirpy
- Repository: https://github.com/krishna4a6av/chirpy

## Overview

Chirpy is a Go REST backend for user accounts, token-based authentication, chirp CRUD, and Chirpy Red upgrades. HTTP routes in main.go dispatch requests to handlers there; those handlers use internal/auth for password and token operations and internal/database for persistent data. The README documents additional account, chirp, webhook, and admin capabilities; the excerpts do not show every handler implementation, so those features are represented at the main.go boundary without inferring unsupported internal call chains.

Main entry points: [`main.go`](https://github.com/krishna4a6av/chirpy/blob/master/main.go) (HTTP Routes), [`internal/database/users.sql.go`](https://github.com/krishna4a6av/chirpy/blob/master/internal/database/users.sql.go) (SQL Queries), [`internal/auth`](https://github.com/krishna4a6av/chirpy/tree/master/internal/auth) (Auth Utilities), [`sql/schema`](https://github.com/krishna4a6av/chirpy/tree/master/sql/schema) (Database Schema)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_router["HTTP Routes<br/>[main.go]"]
  node_admin["Admin and Metrics<br/>[main.go]"]
end

subgraph group_identity["Accounts and Auth"]
  node_accounts["Account Handlers<br/>[main.go]"]
  node_login["Login Handler<br/>[main.go]"]
  node_tokens["Token Handlers<br/>[main.go]"]
  node_auth["Auth Utilities"]
  node_webhook["Upgrade Webhook<br/>[main.go]"]
end

subgraph group_chirps["Chirp Management"]
  node_chirpwrite["Chirp Create<br/>[main.go]"]
  node_chirpread["Chirp Reads<br/>[main.go]"]
  node_chirpdelete["Chirp Delete<br/>[main.go]"]
end

subgraph group_storage["Persistence"]
  node_queries["SQL Queries<br/>[users.sql.go]"]
  node_postgres[("PostgreSQL")]
  node_schema["Database Schema"]
end

node_client(("API Client"))
node_polka(("Polka"))

node_client -->|"sends requests"| node_router
node_router -->|"dispatches"| node_accounts
node_router -->|"dispatches"| node_login
node_router -->|"dispatches"| node_tokens
node_router -->|"dispatches"| node_webhook
node_router -->|"dispatches"| node_chirpwrite
node_router -->|"dispatches"| node_chirpread
node_router -->|"dispatches"| node_chirpdelete
node_router -->|"dispatches"| node_admin
node_accounts -->|"hashes passwords"| node_auth
node_accounts -->|"validates JWT"| node_auth
node_accounts -->|"reads and updates users"| node_queries
node_login -->|"checks password and signs tokens"| node_auth
node_login -->|"reads user and saves refresh token"| node_queries
node_tokens -->|"validates bearer token"| node_auth
node_tokens -->|"reads and revokes tokens"| node_queries
node_polka -->|"posts upgrade event"| node_webhook
node_webhook -->|"upgrades user"| node_queries
node_chirpwrite -->|"validates JWT"| node_auth
node_chirpwrite -->|"creates chirp"| node_queries
node_chirpread -->|"reads chirps"| node_queries
node_chirpdelete -->|"validates JWT"| node_auth
node_chirpdelete -->|"reads and deletes chirp"| node_queries
node_admin -->|"resets user data"| node_queries
node_queries -->|"executes SQL"| node_postgres
node_schema -.->|"defines tables"| node_postgres

click node_router "https://github.com/krishna4a6av/chirpy/blob/master/main.go"
click node_accounts "https://github.com/krishna4a6av/chirpy/blob/master/main.go"
click node_login "https://github.com/krishna4a6av/chirpy/blob/master/main.go"
click node_tokens "https://github.com/krishna4a6av/chirpy/blob/master/main.go"
click node_auth "https://github.com/krishna4a6av/chirpy/tree/master/internal/auth"
click node_webhook "https://github.com/krishna4a6av/chirpy/blob/master/main.go"
click node_chirpwrite "https://github.com/krishna4a6av/chirpy/blob/master/main.go"
click node_chirpread "https://github.com/krishna4a6av/chirpy/blob/master/main.go"
click node_chirpdelete "https://github.com/krishna4a6av/chirpy/blob/master/main.go"
click node_admin "https://github.com/krishna4a6av/chirpy/blob/master/main.go"
click node_queries "https://github.com/krishna4a6av/chirpy/blob/master/internal/database/users.sql.go"
click node_schema "https://github.com/krishna4a6av/chirpy/tree/master/sql/schema"

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_router,node_admin,node_client toneBlue
class node_accounts,node_login,node_tokens,node_auth,node_webhook toneAmber
class node_chirpwrite,node_chirpread,node_chirpdelete toneMint
class node_queries,node_postgres,node_schema toneRose
class node_polka toneIndigo
```

## Components

### HTTP API

- [HTTP Routes](https://github.com/krishna4a6av/chirpy/blob/master/main.go): `main.go`
- [Admin and Metrics](https://github.com/krishna4a6av/chirpy/blob/master/main.go): `main.go`

### Accounts and Auth

- [Account Handlers](https://github.com/krishna4a6av/chirpy/blob/master/main.go): `main.go`
- [Login Handler](https://github.com/krishna4a6av/chirpy/blob/master/main.go): `main.go`
- [Token Handlers](https://github.com/krishna4a6av/chirpy/blob/master/main.go): `main.go`
- [Auth Utilities](https://github.com/krishna4a6av/chirpy/tree/master/internal/auth): `internal/auth`
- [Upgrade Webhook](https://github.com/krishna4a6av/chirpy/blob/master/main.go): `main.go`

### Chirp Management

- [Chirp Create](https://github.com/krishna4a6av/chirpy/blob/master/main.go): `main.go`
- [Chirp Reads](https://github.com/krishna4a6av/chirpy/blob/master/main.go): `main.go`
- [Chirp Delete](https://github.com/krishna4a6av/chirpy/blob/master/main.go): `main.go`

### Persistence

- [SQL Queries](https://github.com/krishna4a6av/chirpy/blob/master/internal/database/users.sql.go): `internal/database/users.sql.go`
- **PostgreSQL**
- [Database Schema](https://github.com/krishna4a6av/chirpy/tree/master/sql/schema): `sql/schema`

### Other components

- **API Client**
- **Polka**

## Connections

- API Client → HTTP Routes: sends requests
- HTTP Routes → Account Handlers: dispatches
- HTTP Routes → Login Handler: dispatches
- HTTP Routes → Token Handlers: dispatches
- HTTP Routes → Upgrade Webhook: dispatches
- HTTP Routes → Chirp Create: dispatches
- HTTP Routes → Chirp Reads: dispatches
- HTTP Routes → Chirp Delete: dispatches
- HTTP Routes → Admin and Metrics: dispatches
- Account Handlers → Auth Utilities: hashes passwords
- Account Handlers → Auth Utilities: validates JWT
- Account Handlers → SQL Queries: reads and updates users
- Login Handler → Auth Utilities: checks password and signs tokens
- Login Handler → SQL Queries: reads user and saves refresh token
- Token Handlers → Auth Utilities: validates bearer token
- Token Handlers → SQL Queries: reads and revokes tokens
- Polka → Upgrade Webhook: posts upgrade event
- Upgrade Webhook → SQL Queries: upgrades user
- Chirp Create → Auth Utilities: validates JWT
- Chirp Create → SQL Queries: creates chirp
- Chirp Reads → SQL Queries: reads chirps
- Chirp Delete → Auth Utilities: validates JWT
- Chirp Delete → SQL Queries: reads and deletes chirp
- Admin and Metrics → SQL Queries: resets user data
- SQL Queries → PostgreSQL: executes SQL
- Database Schema → PostgreSQL: defines tables
