Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Tech Stack

Core

TechnologyPurpose
Rust (Edition 2021)Primary development language
AxumHTTP web framework
LeptosReactive UI framework (SSR for DPE, islands for Mosaic)
DatastarSSE-based interactivity for DPE (~14KB JS, no WASM)
Tailwind CSS v4Utility-first CSS framework
DaisyUITailwind component plugin
TokioAsync runtime
figmentLayered configuration (defaults → TOML → env vars)

Data & Persistence

TechnologyPurpose
serde / serde_jsonSerialization and deserialization
Static JSON filesCurrent data storage (database TBD)

Testing & Quality

TechnologyPurpose
cargo test / nextestRust test runner
instaSnapshot testing for SSR output
PlaywrightEnd-to-end browser tests
axe-coreAccessibility scanning (WCAG 2.1 AA)
cargo-fuzzFuzz testing (nightly CI)

Build & Development

TechnologyPurpose
cargo-leptosLeptos build tool (handles Tailwind, WASM, site assets)
justCommand runner for development workflows
leptosfmtLeptos-aware code formatter
BiomeLinter/formatter for E2E test TypeScript

Documentation & Observability

TechnologyPurpose
mdBook + mdbook-alertsProject documentation
Fathom AnalyticsPrivacy-friendly web analytics (GDPR-compliant, no cookies)
tracing + tracing-subscriberStructured logging

Architecture Principles

We keep the design evolutionary, starting from the simplest possible solution and iterating on it. At first, providing data from static JSON files is sufficient. Following clean architecture principles, swapping out the persistence layer is easy.

TypeScript is used exclusively for testing and development tooling, not for production runtime code. The core application remains purely Rust-based.