# Losako (codename: lingala)
A browser-based tool that surfaces **one Lingala phrase every day**, wraps it in a beautifully designed culture card, and lets the user download that card as an image to share — with zero login, zero server, and zero friction. Built for the Congolese diaspora to express pride in where their family is from.
> The language is the packaging. The identity is the gift.
## Stack
- Vanilla JS (ES modules), no framework, no bundler, no dependencies.
- Static files only — serve from any web host. No build step.
- Mobile-first; designed for one-thumb use on a phone.
- The phrase database is bundled into the app — no API, no loading state.
- `Canvas` renders the downloadable image (1080×1080 + 1080×1920) entirely in the browser.
- `IndexedDB` stores streak, settings, and the view archive — on the device only.
## Project layout
```
index.html the app (today's card, archive, settings)
about.html what Losako is
privacy.html data handling
manifest.json PWA manifest
sw.js service worker (network-first, offline-ready)
css/style.css mobile-first styles; on-screen card mirrors the export
js/
app.js UI orchestration + view switching (no router)
card.js Canvas card renderer + shared palette
db.js IndexedDB: streak, settings, archive
data/phrases.js the phrase database + deterministic daily engine
```
## How "today's card" works
Deterministic, no server: `daysSince(EPOCH) % PHRASES.length` selects the day's
phrase, so **every user worldwide sees the same card on the same date**. `EPOCH`
is set to **2026-06-30** (Congolese Independence Day — the planned launch date).
⚠️ **Append-only database.** The engine keys off array order, so the archive's
day→phrase mapping is stable only if you never reorder or delete past entries.
Add new phrases by appending to the array.
## ⚠️ Content needs native-speaker review before launch
`js/data/phrases.js` ships a **seed set (~30 entries)** …