48 lines
2.2 KiB
Markdown
48 lines
2.2 KiB
Markdown
# Project Context
|
|
|
|
## Concept
|
|
|
|
Interactive encyclopedia/learning app for the Primal Diet by Aajonus Vonderplanitz.
|
|
|
|
Graph-like structure as the primary navigation metaphor:
|
|
- Interactive human body map as entry point
|
|
- Body parts/systems → link to ailments
|
|
- Ailments → link to recipes
|
|
- Recipes → link to ingredients
|
|
- Ingredients → link to properties/details
|
|
|
|
## Content
|
|
|
|
Sourced from books by Aajonus Vonderplanitz. Curated by the owner only — no community editing, no authoring UI. All data hardcoded or loaded via config files, embedded in the binary at compile time.
|
|
|
|
## Deployment Targets
|
|
|
|
- Native executable (all data embedded in binary)
|
|
- Browser via WASM (same codebase, two build targets)
|
|
|
|
## UX Vision
|
|
|
|
Game-engine style — custom rendering, animations, smooth transitions, physics-based graph layouts. Not a traditional web UI.
|
|
|
|
## Tech Stack
|
|
|
|
- **Zig + raylib-zig + Emscripten** — chosen. Native binary and WASM from the same codebase. Package managed via `build.zig.zon`.
|
|
- ~~Raylib + C++ + Emscripten~~ — considered, but Zig's `@embedFile` and compile-time data embedding are a better fit.
|
|
- ~~Mach (Zig game engine)~~ — discarded, pre-1.0 and still maturing.
|
|
- ~~Three.js + Electron~~ — discarded. Electron too heavy, sidesteps WASM.
|
|
|
|
## Current Implementation State
|
|
|
|
Graph navigation is working (`src/main.zig`):
|
|
|
|
- **Data model**: nodes of five kinds — `body_part`, `ailment`, `recipe`, `ingredient`, `property` — with typed link lists, all hardcoded in the binary.
|
|
- **Navigation**: root view shows body systems in a radial ring; clicking any node drills into it, placing it at the centre with its linked nodes in orbit. Right-click or `B` navigates back. Nav history kept in a fixed-size stack.
|
|
- **Rendering**: colour-coded circles per node kind, glow on hover, selection ring on the active centre node, edge lines to linked nodes, breadcrumb trail, colour legend, navigation hints.
|
|
- **WASM path**: `emscripten_set_main_loop` hook in place; same `drawFrame` callback used for both targets.
|
|
|
|
## Constraints
|
|
|
|
- No widget toolkits — fully custom rendered
|
|
- No authoring UI — content is defined in code or config
|
|
- Same codebase must target both native and WASM
|