Amoxtli
“book”Stories, creation myths, and oral traditions. An ePub and audiobook reader whose signature Codex format scrolls horizontally, the way pre-Columbian codices unfold. Deep links: poca://amoxtli/{codex|book|audiobook}/{card_id}
POCA is an open-source suite of offline-first Android apps built for Indigenous digital sovereignty. Every story, calendar, lesson, and map lives on a community-curated PAC, a removable microSD card, and is served to every app through a single ContentProvider. Nothing leaves the device.
The suite
Each app owns a content domain on the PAC and reads only its own cards. The names come from Nahuatl; the content comes from the community that curates the card, made to be picked up by elders and kids alike.
Stories, creation myths, and oral traditions. An ePub and audiobook reader whose signature Codex format scrolls horizontally, the way pre-Columbian codices unfold. Deep links: poca://amoxtli/{codex|book|audiobook}/{card_id}
Wellness and safety hub. Offline emergency information, guided check-ins, and health education with culturally grounded support content.
Creative studio. Full painting and drawing tools, built on Krita, with community art templates, compositions, and tutorials from the PAC.
Aztec/Mexica calendar. Day signs, trecenas, and lunar phases alongside the device calendar: a community’s own calendar system overlaid on everyday scheduling.
Ceremonies, healing practices, and cultural articles. An open-source reader, never the owner, of community content, with optional Mukurtu integration that honors cultural protocols.
Land and nature field guide. Sacred places, plants, animals, and minerals. Fully offline by design: the app ships without the INTERNET permission.
Language learning and dictionary. Offline vocabulary, pronunciation audio, and full lessons. Every language database is loaded from the PAC, curated by community language-preservation departments.
Deities, spiritual entities, and mythology. Content is community-provided and community-gated.
Biblical content and Christian traditions for Latin American communities where Indigenous practice and Catholicism are syncretized.
Spirit animals and primal archetypes. A planned journaling and grounding companion.
The plumbing
The content bridge. Reads the PAC microSD card, parses its index, and re-serves everything to the suite through one read-only ContentProvider. Runs the dashboard, diagnostics, and each community’s signed update channel.
Offline digital assistant. An on-device model that answers voice and text questions using only what is on the PAC, through a typed tool contract. No cloud, no eavesdropping: it cannot know what the card doesn’t hold.
The home screen. A POCA fork of Android’s Launcher3. Its culture wheel renders a pattern served by PAC’s identity provider, so the same tablet greets each community with its own identity.
Why offline
A single card can carry tens of thousands of books, hours of elders’ voices, and an entire language. When the card comes home, the tablet speaks it, whether or not the internet ever arrives.
The content bridge
A PAC is a community-curated microSD card. PAC Reader turns it into a queryable, permission-guarded content service; client apps never touch the filesystem directly. Swap the card, and the same tablet becomes a different library.
The card is inserted. PAC Reader detects the mount, verifies the PAC fingerprint files, and locates the PAC root.
It parses poca_config.json and poca_cards_index.json, plus per-app app_config.json and identity/wheel.json, into a typed card index.
Everything is exposed through one read-only ContentProvider on two authorities, guarded by a signature-level permission.
Apps query their own cards, resolve media by relative path against the PAC root, and jump between apps with poca:// deep links.
Developer reference
Verified against the current provider source. Access to both authorities requires org.poca.pac.permission.READ_CARDS, a signature-level permission: only apps signed with the shared POCA key can query. The surface is read-only by design; the single writable endpoint is the culture-wheel override.
Card content, PAC metadata, app configuration, and raw file access.
| Endpoint | Returns |
|---|---|
| /cards | All visible cards. |
| /cards/{card_id} | A single card by id. |
| /apps/{app_id} | Cards for one app; respects provisioning and queryability. |
| /featured | Featured cards from enabled apps, for dashboard and widget hydration. |
| /index | PAC metadata: schema_version, pac_version, tribe_name, locale, generated_at, total_cards. |
| /config/{app_id} | App provision plus its app_config payload. Unlockable apps that aren’t enabled return nothing. |
| /file/{path} | openFile() read-only stream of a raw content file under the PAC root, path-traversal guarded. |
| /files/{dir} | Directory listing cursor: name, path, is_dir, size. |
Serves the Gateway launcher’s culture wheel.
| Endpoint | Returns |
|---|---|
| /wheel/designs | All wheel designs on the PAC. |
| /wheel/designs/{id}/pattern | Pattern data for one design. |
| /wheel/active | The active design. Writable via update() to set a local active-design override. |
| /wheel/active/pattern | Pattern data for the active design. |
Every piece of content on a PAC is a card with the same envelope, whatever app it belongs to. The schema is universal; the content is community-specific.
| Field | Type | Description | |
|---|---|---|---|
| card_id | String | req | Unique identifier within the PAC. |
| app_id | AppId | req | Owning POCA app. |
| type | String | req | Per-app content type (see below). |
| title | String | req | Primary localized display text. |
| description | String | opt | Secondary summary text. |
| image | String? | opt | Relative hero image path. |
| image_thumbnail | String? | opt | Small image path. |
| image_hero | String? | opt | Large image path. |
| icon | String? | opt | Material symbol name or SVG path. |
| label | String? | opt | Pill label text. |
| deep_link | String | req | poca:// deep-link target. |
| locale | String | opt | Content locale; defaults to en. |
| updated_at | String | req | ISO 8601 update timestamp. |
| featured | Boolean | opt | Dashboard featured hint. |
| schema_version | Int | opt | Forward-compat versioning. |
Each app declares its card types and the extra fields those types carry.
| app_id | Types | Type-specific fields |
|---|---|---|
| amoxtli | story, codex | author, page_count, reading_time_min, language |
| metztli | calendar_day, my_events, lunar_phase | day_number, day_sign, trecena, glyph_path |
| tlato | word, phrase, lesson | native_word, translation, pronunciation_audio, part_of_speech |
| ollin | article, profile, ceremony | author, category, reading_time_min |
| teo | entity, reflection, prayer | domain, associations |
| tlalli | location, plant, animal | coordinates, region, habitat, traditional_uses |
| cualli | exercise, checkin_prompt, support_services | duration_min, difficulty, wellness_category |
| cuilo | template, composition, tutorial | medium, materials, skill_level |
| nahual | id_profile, checkin_prompt, species_affirmations | identity_profile, prompt_group, integration_notes |
| cristo | daily_devotional, reflection, prayer | book_name, holy_days, verse |
Sits at the PAC root and declares what the card is and which apps it provisions.
| Field | Type | Description | |
|---|---|---|---|
| schema_version | Int | req | Config schema version. |
| pac_version | String | req | PAC content version. |
| tribe_name | String | req | Curating community’s name. |
| tribe_seal | String? | opt | Relative path to the community seal. |
| tribe_seal_shape | String? | opt | circle / rounded / raw rendering hint. |
| locale | String | req | Default PAC locale. |
| generated_at | String | req | ISO 8601 generation timestamp. |
| apps | Array | req | List of app_id + directory + provision + enabled. |
The PAC decides which apps exist for its holder. Communities curate not just content but the shape of the suite itself.
Always present and enabled. The backbone of every POCA tablet.
Shipped on the PAC; each person can toggle them on or off.
Community-managed. Hidden from every query until enabled; the provider returns nothing, as if the app weren’t there.
The assistant reaches PAC content only through these typed tools, published in the shared poca-pac-contract library so the provider and the assistant can never disagree.