# mikekuriger/aviation_logbook architecture

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

## Overview

This repository contains the Flask viewer for aircraft maintenance logbooks. The principal workflow is a user browsing or searching extracted records, with results read from SQLite and rendered as pages; entry detail can include its scanned page image. The README also documents upstream scanning and image backfill, but those programs are not present in this tree, so they are shown only as documented external producers. Source excerpts are partial, so viewer relationships beyond those shown are included only where the README explicitly documents them.

Main entry points: [`app.py`](https://github.com/mikekuriger/aviation_logbook/blob/main/app.py) (Flask viewer), [`templates`](https://github.com/mikekuriger/aviation_logbook/tree/main/templates) (Jinja templates)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_viewer["Web viewer"]
  node_webapp["Flask viewer<br/>[app.py]"]
  node_overview["Overview<br/>[app.py]"]
  node_aircraft["Aircraft views<br/>[app.py]"]
  node_entrylist["Entry browsing<br/>[app.py]"]
  node_search["Search<br/>[app.py]"]
  node_adview["AD views<br/>[app.py]"]
  node_components["Component views<br/>[app.py]"]
  node_entrydetail["Entry detail<br/>[app.py]"]
  node_deletion["Entry deletion<br/>[app.py]"]
  node_templates["Jinja templates"]
end

subgraph group_records["Record access"]
  node_dbaccess["SQLite access<br/>[app.py]"]
  node_logdb[("Logbook database")]
end

subgraph group_scans["Scan artifacts"]
  node_scanner["PDF scanner"]
  node_imagebackfill["Image backfill"]
  node_imagestore["Page images"]
end

node_user(("Logbook user"))

node_user -->|"browses"| node_webapp
node_webapp -->|"routes to"| node_overview
node_webapp -->|"routes to"| node_aircraft
node_webapp -->|"routes to"| node_entrylist
node_webapp -->|"routes to"| node_search
node_webapp -->|"routes to"| node_adview
node_webapp -->|"routes to"| node_components
node_webapp -->|"routes to"| node_entrydetail
node_webapp -->|"routes to"| node_deletion
node_overview -->|"queries"| node_dbaccess
node_aircraft -->|"queries"| node_dbaccess
node_entrylist -->|"queries"| node_dbaccess
node_search -->|"queries"| node_dbaccess
node_adview -->|"queries"| node_dbaccess
node_components -->|"queries"| node_dbaccess
node_dbaccess -->|"reads"| node_logdb
node_overview -->|"renders"| node_templates
node_aircraft -->|"renders"| node_templates
node_entrylist -->|"renders"| node_templates
node_search -->|"renders"| node_templates
node_adview -->|"renders"| node_templates
node_components -->|"renders"| node_templates
node_entrydetail -->|"reads"| node_logdb
node_entrydetail -->|"shows image"| node_imagestore
node_scanner -->|"writes records"| node_logdb
node_scanner -->|"writes images"| node_imagestore
node_imagebackfill -->|"writes images"| node_imagestore

click node_webapp "https://github.com/mikekuriger/aviation_logbook/blob/main/app.py"
click node_overview "https://github.com/mikekuriger/aviation_logbook/blob/main/app.py"
click node_aircraft "https://github.com/mikekuriger/aviation_logbook/blob/main/app.py"
click node_entrylist "https://github.com/mikekuriger/aviation_logbook/blob/main/app.py"
click node_search "https://github.com/mikekuriger/aviation_logbook/blob/main/app.py"
click node_adview "https://github.com/mikekuriger/aviation_logbook/blob/main/app.py"
click node_components "https://github.com/mikekuriger/aviation_logbook/blob/main/app.py"
click node_entrydetail "https://github.com/mikekuriger/aviation_logbook/blob/main/app.py"
click node_deletion "https://github.com/mikekuriger/aviation_logbook/blob/main/app.py"
click node_templates "https://github.com/mikekuriger/aviation_logbook/tree/main/templates"
click node_dbaccess "https://github.com/mikekuriger/aviation_logbook/blob/main/app.py"

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_webapp,node_overview,node_aircraft,node_entrylist,node_search,node_adview,node_components,node_entrydetail,node_deletion,node_templates,node_user toneBlue
class node_dbaccess,node_logdb toneAmber
class node_scanner,node_imagebackfill,node_imagestore toneMint
```

## Components

### Web viewer

- [Flask viewer](https://github.com/mikekuriger/aviation_logbook/blob/main/app.py): `app.py`
- [Overview](https://github.com/mikekuriger/aviation_logbook/blob/main/app.py): `app.py`
- [Aircraft views](https://github.com/mikekuriger/aviation_logbook/blob/main/app.py): `app.py`
- [Entry browsing](https://github.com/mikekuriger/aviation_logbook/blob/main/app.py): `app.py`
- [Search](https://github.com/mikekuriger/aviation_logbook/blob/main/app.py): `app.py`
- [AD views](https://github.com/mikekuriger/aviation_logbook/blob/main/app.py): `app.py`
- [Component views](https://github.com/mikekuriger/aviation_logbook/blob/main/app.py): `app.py`
- [Entry detail](https://github.com/mikekuriger/aviation_logbook/blob/main/app.py): `app.py`
- [Entry deletion](https://github.com/mikekuriger/aviation_logbook/blob/main/app.py): `app.py`
- [Jinja templates](https://github.com/mikekuriger/aviation_logbook/tree/main/templates): `templates`

### Record access

- [SQLite access](https://github.com/mikekuriger/aviation_logbook/blob/main/app.py): `app.py`
- **Logbook database**

### Scan artifacts

- **PDF scanner**
- **Image backfill**
- **Page images**

### Other components

- **Logbook user**

## Connections

- Logbook user → Flask viewer: browses (evidence: `README.md`)
- Flask viewer → Overview: routes to (evidence: `app.py`)
- Flask viewer → Aircraft views: routes to (evidence: `app.py`)
- Flask viewer → Entry browsing: routes to (evidence: `app.py`)
- Flask viewer → Search: routes to (evidence: `app.py`)
- Flask viewer → AD views: routes to (evidence: `app.py`)
- Flask viewer → Component views: routes to (evidence: `app.py`)
- Flask viewer → Entry detail: routes to (evidence: `README.md`)
- Flask viewer → Entry deletion: routes to (evidence: `README.md`)
- Overview → SQLite access: queries (evidence: `app.py`)
- Aircraft views → SQLite access: queries (evidence: `app.py`)
- Entry browsing → SQLite access: queries (evidence: `app.py`)
- Search → SQLite access: queries (evidence: `app.py`)
- AD views → SQLite access: queries (evidence: `app.py`)
- Component views → SQLite access: queries (evidence: `app.py`)
- SQLite access → Logbook database: reads (evidence: `app.py`)
- Overview → Jinja templates: renders (evidence: `app.py`)
- Aircraft views → Jinja templates: renders (evidence: `app.py`)
- Entry browsing → Jinja templates: renders (evidence: `app.py`)
- Search → Jinja templates: renders (evidence: `README.md`)
- AD views → Jinja templates: renders (evidence: `README.md`)
- Component views → Jinja templates: renders (evidence: `README.md`)
- Entry detail → Logbook database: reads (evidence: `README.md`)
- Entry detail → Page images: shows image (evidence: `README.md`)
- PDF scanner → Logbook database: writes records (evidence: `README.md`)
- PDF scanner → Page images: writes images (evidence: `README.md`)
- Image backfill → Page images: writes images (evidence: `README.md`)
