# kickflip-labs/cissp-study-hub architecture

> Architecture diagram of the GitHub repository kickflip-labs/cissp-study-hub, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kickflip-labs/cissp-study-hub
- Repository: https://github.com/kickflip-labs/cissp-study-hub

## Overview

CISSP Study Hub is a local-first study and security-reference product with a Flask webapp and a Claude Code skills surface sharing a growing knowledge base. The webapp supports domain study, quizzes and exams, flashcards, concept maps, search, and progress analytics; the CLI skills support conversational study and knowledge growth. The graph distinguishes those user-facing capabilities from the webapp’s route, parsing, configuration, and JSON-storage layer. Relationships are limited to README statements and visible source references; unsampled feature wiring is not inferred.

Main entry points: [`webapp/app.py`](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/app.py) (Study Webapp), [`wiki/index.md`](https://github.com/kickflip-labs/cissp-study-hub/blob/main/wiki/index.md) (CISSP Wiki), [`kb/README.md`](https://github.com/kickflip-labs/cissp-study-hub/blob/main/kb/README.md) (Personal Notes), [`.claude/skills/cissp-update-weak/SKILL.md`](https://github.com/kickflip-labs/cissp-study-hub/blob/main/.claude/skills/cissp-update-weak/SKILL.md) (Knowledge Growth)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web Study"]
  node_webapp["Study Webapp<br/>[app.py]"]
  node_domain_study["Domain Study<br/>[study.html]"]
  node_quiz_exam["Quizzes &amp; Exams<br/>[quiz.html]"]
  node_flashcards["Flashcards<br/>[flashcards.html]"]
  node_concept_maps["Concept Maps<br/>[mindmap.html]"]
  node_analytics["Progress &amp; Plan<br/>[analytics.html]"]
  node_wiki_search["Wiki &amp; Search<br/>[search.html]"]
end

subgraph group_cli["CLI Skills"]
  node_cli_study["Conversational Study<br/>[SKILL.md]"]
  node_cli_counsel["Practitioner Counsel<br/>[SKILL.md]"]
  node_cli_growth["Knowledge Growth<br/>[SKILL.md]"]
end

subgraph group_knowledge["Knowledge Base"]
  node_resources["Study Materials<br/>[README.md]"]
  node_personal_kb["Personal Notes<br/>[README.md]"]
  node_wiki["CISSP Wiki<br/>[index.md]"]
  node_question_bank["Question Bank<br/>[questions.json]"]
  node_domain_content["Domain Data<br/>[domain_info.json]"]
  node_flashcard_data["Flashcard Data<br/>[flashcards.json]"]
  node_progress[("Study Progress")]
end

subgraph group_internals["Web Internals"]
  node_routes["Flask Routes<br/>[app.py]"]
  node_parsers["Wiki Parsers<br/>[parsers.py]"]
  node_config["App Configuration<br/>[config.py]"]
  node_json_store["JSON Storage<br/>[store.py]"]
end

node_learner(("Learner"))
node_practitioner(("Security Practitioner"))

node_learner -->|"uses"| node_webapp
node_practitioner -->|"seeks counsel"| node_cli_counsel
node_learner -->|"studies with"| node_cli_study
node_webapp -->|"supports"| node_domain_study
node_webapp -->|"supports"| node_quiz_exam
node_webapp -->|"supports"| node_flashcards
node_webapp -->|"supports"| node_concept_maps
node_webapp -->|"supports"| node_analytics
node_webapp -->|"supports"| node_wiki_search
node_webapp -->|"parses live"| node_wiki
node_cli_study -->|"consults"| node_wiki
node_cli_growth -->|"reads and writes"| node_personal_kb
node_cli_growth -->|"promotes insights"| node_wiki
node_resources -->|"synthesized into"| node_personal_kb
node_personal_kb -->|"promoted into"| node_wiki
node_routes -->|"imports"| node_config
node_routes -->|"imports"| node_parsers
node_routes -->|"imports"| node_json_store
node_parsers -->|"imports"| node_config
node_webapp -->|"serves through"| node_routes
node_routes -.->|"records progress"| node_progress
node_routes -.->|"uses questions"| node_question_bank
node_routes -.->|"uses domain data"| node_domain_content
node_routes -.->|"uses decks"| node_flashcard_data

click node_webapp "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/app.py"
click node_domain_study "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/study.html"
click node_quiz_exam "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/quiz.html"
click node_flashcards "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/flashcards.html"
click node_concept_maps "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/mindmap.html"
click node_analytics "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/analytics.html"
click node_wiki_search "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/search.html"
click node_cli_study "https://github.com/kickflip-labs/cissp-study-hub/blob/main/.claude/skills/cissp-explain/SKILL.md"
click node_cli_counsel "https://github.com/kickflip-labs/cissp-study-hub/blob/main/.claude/skills/cissp-counsel/SKILL.md"
click node_cli_growth "https://github.com/kickflip-labs/cissp-study-hub/blob/main/.claude/skills/cissp-update-weak/SKILL.md"
click node_resources "https://github.com/kickflip-labs/cissp-study-hub/blob/main/resources/README.md"
click node_personal_kb "https://github.com/kickflip-labs/cissp-study-hub/blob/main/kb/README.md"
click node_wiki "https://github.com/kickflip-labs/cissp-study-hub/blob/main/wiki/index.md"
click node_question_bank "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/data/questions.json"
click node_domain_content "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/data/domain_info.json"
click node_flashcard_data "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/data/flashcards.json"
click node_routes "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/app.py"
click node_parsers "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/parsers.py"
click node_config "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/config.py"
click node_json_store "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/store.py"
click node_progress "https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/data/progress.example.json"

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_domain_study,node_quiz_exam,node_flashcards,node_concept_maps,node_analytics,node_wiki_search toneBlue
class node_cli_study,node_cli_counsel,node_cli_growth toneAmber
class node_resources,node_personal_kb,node_wiki,node_question_bank,node_domain_content,node_flashcard_data,node_progress toneMint
class node_routes,node_parsers,node_config,node_json_store toneRose
class node_learner,node_practitioner toneIndigo
```

## Components

### Web Study

- [Study Webapp](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/app.py): `webapp/app.py`
- [Domain Study](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/study.html): `webapp/templates/study.html`
- [Quizzes & Exams](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/quiz.html): `webapp/templates/quiz.html`
- [Flashcards](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/flashcards.html): `webapp/templates/flashcards.html`
- [Concept Maps](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/mindmap.html): `webapp/templates/mindmap.html`
- [Progress & Plan](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/analytics.html): `webapp/templates/analytics.html`
- [Wiki & Search](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/templates/search.html): `webapp/templates/search.html`

### CLI Skills

- [Conversational Study](https://github.com/kickflip-labs/cissp-study-hub/blob/main/.claude/skills/cissp-explain/SKILL.md): `.claude/skills/cissp-explain/SKILL.md`
- [Practitioner Counsel](https://github.com/kickflip-labs/cissp-study-hub/blob/main/.claude/skills/cissp-counsel/SKILL.md): `.claude/skills/cissp-counsel/SKILL.md`
- [Knowledge Growth](https://github.com/kickflip-labs/cissp-study-hub/blob/main/.claude/skills/cissp-update-weak/SKILL.md): `.claude/skills/cissp-update-weak/SKILL.md`

### Knowledge Base

- [Study Materials](https://github.com/kickflip-labs/cissp-study-hub/blob/main/resources/README.md): `resources/README.md`
- [Personal Notes](https://github.com/kickflip-labs/cissp-study-hub/blob/main/kb/README.md): `kb/README.md`
- [CISSP Wiki](https://github.com/kickflip-labs/cissp-study-hub/blob/main/wiki/index.md): `wiki/index.md`
- [Question Bank](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/data/questions.json): `webapp/data/questions.json`
- [Domain Data](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/data/domain_info.json): `webapp/data/domain_info.json`
- [Flashcard Data](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/data/flashcards.json): `webapp/data/flashcards.json`
- [Study Progress](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/data/progress.example.json): `webapp/data/progress.example.json`

### Web Internals

- [Flask Routes](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/app.py): `webapp/app.py`
- [Wiki Parsers](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/parsers.py): `webapp/parsers.py`
- [App Configuration](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/config.py): `webapp/config.py`
- [JSON Storage](https://github.com/kickflip-labs/cissp-study-hub/blob/main/webapp/store.py): `webapp/store.py`

### Other components

- **Learner**
- **Security Practitioner**

## Connections

- Learner → Study Webapp: uses (evidence: `README.md`)
- Security Practitioner → Practitioner Counsel: seeks counsel (evidence: `README.md`)
- Learner → Conversational Study: studies with (evidence: `README.md`)
- Study Webapp → Domain Study: supports (evidence: `README.md`)
- Study Webapp → Quizzes & Exams: supports (evidence: `README.md`)
- Study Webapp → Flashcards: supports (evidence: `README.md`)
- Study Webapp → Concept Maps: supports (evidence: `README.md`)
- Study Webapp → Progress & Plan: supports (evidence: `README.md`)
- Study Webapp → Wiki & Search: supports (evidence: `README.md`)
- Study Webapp → CISSP Wiki: parses live (evidence: `README.md`)
- Conversational Study → CISSP Wiki: consults (evidence: `README.md`)
- Knowledge Growth → Personal Notes: reads and writes (evidence: `README.md`)
- Knowledge Growth → CISSP Wiki: promotes insights (evidence: `README.md`)
- Study Materials → Personal Notes: synthesized into (evidence: `README.md`)
- Personal Notes → CISSP Wiki: promoted into (evidence: `README.md`)
- Flask Routes → App Configuration: imports (evidence: `webapp/app.py`)
- Flask Routes → Wiki Parsers: imports (evidence: `webapp/app.py`)
- Flask Routes → JSON Storage: imports (evidence: `webapp/app.py`)
- Wiki Parsers → App Configuration: imports (evidence: `webapp/parsers.py`)
- Study Webapp → Flask Routes: serves through (evidence: `webapp/app.py`)
- Flask Routes → Study Progress: records progress
- Flask Routes → Question Bank: uses questions
- Flask Routes → Domain Data: uses domain data
- Flask Routes → Flashcard Data: uses decks
