NAFA is a journey planning app designed to help neurodiverse adventurers navigate public transport and sensory-rich environments with calm, confidence, and symbolic clarity.
We encode sensory awareness, accessibility preferences, and offline resilience into every module—making NAFA not just a tool, but a companion.
| Layer | Technology |
|---|---|
Runtime |
Deno – secure, modern JavaScript/TypeScript runtime |
Client Logic |
ReScript – type-safe, compiles to clean JavaScript, TEA pattern |
Server |
Deno HTTP – REST API with JSON responses |
Mobile |
Tauri 2.0 – Rust backend + web UI (iOS/Android) |
Desktop |
Tauri 2.0 – native performance, no Electron bloat |
Configuration |
Nickel – typed configuration language for badge logic |
Routing Data |
GraphHopper + OpenStreetMap (planned) |
Following the Hyperpolymath Standard:
| Allowed | Banned |
|---|---|
ReScript, Rust, Deno, Gleam |
TypeScript, Node.js, npm, Go |
JavaScript (Deno APIs only) |
Python (except SaltStack) |
Tauri 2.0, Dioxus (mobile) |
Kotlin, Swift, React Native, Flutter |
-
Journey Planning – Sensory-aware route segments with warnings
-
Sensory Annotations – Crowdsourced location data (noise/light/crowd levels)
-
Accessibility Settings – Text size, contrast, motion, haptics, screen reader support
-
Offline Mode – Cached journeys, sync status, works without internet
nafa-app-ambient/
├── client/ # ReScript SPA (TEA pattern)
│ ├── src/
│ │ ├── Main.res # App entry point
│ │ └── Page/
│ │ ├── JourneyView.res
│ │ ├── Annotate.res
│ │ ├── Accessibility.res
│ │ └── Offline.res
│ └── rescript.json
│
├── server/ # Deno HTTP server
│ ├── src/
│ │ ├── main.js # REST API
│ │ └── demo.js # CLI demo
│ └── deno.json
│
├── shared/ # Shared domain types
│ ├── src/
│ │ ├── Domain.res # Core types
│ │ └── Route.res # Type-safe routing
│ └── rescript.json
│
├── nickel-rituals/ # Badge/tier configuration
│ ├── badge.ncl
│ └── tier.ncl
│
├── scripts/ # Build automation
├── Justfile # Task runner
├── Containerfile # Deno container build
└── PLAN.adoc # Migration roadmapNAFA uses Rust-first mobile development via:
-
Web UI (ReScript) + Rust backend
-
Single codebase for iOS, Android, desktop
-
Native performance, minimal bundle size
-
MIT/Apache-2.0 licensed, no Big Tech dependencies
NAFA is designed to interoperate with sensory hardware:
-
Haptic Feedback – Via Rust/Tauri plugins to device APIs
-
Visual Overlays – AR glasses integration (future)
-
BLE Beacons – Calm zone detection
-
Wearables – Heart rate, stress indicators
All integrations use Rust for the native layer, exposed to the ReScript UI via Tauri commands.
NAFA uses symbolic badge logic to recognise contributors:
| Badge | Criteria |
|---|---|
Initiate |
First calm journey completed |
Curator |
Contributed sensory annotation |
Guardian |
Tested emergency fallback features |
Companion |
Assisted others in sensory-rich zones |
Badge logic is defined in nickel-rituals/badge.ncl.
| Method | Path | Description |
|---|---|---|
GET |
|
Retrieve journey by ID |
GET |
|
List all sensory annotations |
POST |
|
Create new annotation |
NAFA is dual-licensed under:
-
MIT – For maximum flexibility
-
AGPL-3.0-or-later – For copyleft protection
All source files include SPDX license headers.
-
Issues: https://github.com/hyperpolymath/nafa-app-ambient/issues
-
Hyperpolymath: https://hyperpolymath.org
NAFA is a living project. Every commit, annotation, and accessibility improvement is a step toward calmer, more inclusive travel.
Contributions welcome – see CONTRIBUTING.md.