For Developers
Technical map of the repository and how to work on it.
Repository layout
| Path | Purpose |
|---|---|
KNOWLEDGE.md |
Full technical literature review (TAK, Skydio, Somewear, Meshtastic, Starlink findings) |
PLAN.md |
Phased implementation plan with completion gates |
CHANGELOG.md |
Running log of all planning and code changes |
CLAUDE.md |
Session-resume conventions for AI-assisted work |
equipment/inventory.yaml |
Inventory seed/export format (git audit trail) |
equipment/schema.yaml |
Controlled vocabulary — single source of truth for categories, fields, and allowed values |
equipment/validate.py |
CLI linter for the YAML against the schema |
src/inventory_app/ |
Flask inventory app (SQLite; forms render from the schema) |
data/ |
Local runtime data (inventory.db — git-ignored, full identifiers) |
tests/ |
Pytest suite (data layer, validation, routes, importer) |
docs/ |
This documentation site (GitHub Pages, Jekyll) |
context/ |
Original research inputs (vendor PDFs, link lists) |
Setup
git clone https://github.com/Nalaquq/atak.git && cd atak
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
Run the inventory app
pip install -e . # once, from the repo root (editable install)
python -m inventory_app.import_yaml # seed SQLite from equipment/inventory.yaml (idempotent)
python -m inventory_app.app # http://localhost:5000
Tests and style
pytest # 56 tests; isolated temp DB, never touches real data
black . && flake8 # format + lint — run before every commit
- Style: PEP 8 via
Black (config in
pyproject.toml, 88-column lines); docstrings follow PEP 257. - Design rule:
schema.yamlis the contract. The app renders forms and dropdowns from it; the validator lints against it; tests assert its completeness. Vocabulary changes are schema edits + a commit — never UI features.
Conventions
- Update
CHANGELOG.mdin every working session; commit at session end. - SQLite (
inventory.db) is the runtime source of truth and is git-ignored; the YAML export is the versioned audit trail. - Before hosting the Flask app beyond localhost: add authentication and a
real
secret_key(seesrc/inventory_app/README.md).
Key external references
- tak.gov — official TAK products
- OpenTAKServer docs — candidate server
- PyTAK — Python CoT library for future glue code
- Somewear developer docs
- Meshtastic ATAK plugin