Build a tracker that works without the network https://patrickz.ai/learn/offline-personal-tracker/ OUTCOME Save, export and restore a small set of local records. YOU NEED A coding agent, browser and three fictional journal entries. 1. Define the practice version Start with one record type, stable identifiers and local storage. Implement export before adding cloud synchronization. 2. Build step 1 Choose one record type, such as a journal entry. 3. Build step 2 Save and query it with IndexedDB. 4. Build step 3 Add export before sync. 5. Build step 4 Add a module registry so features can be enabled independently. 6. Build step 5 Add authentication and per-user cloud tables. 7. Build step 6 Resolve sync conflicts with timestamps and visible status. 8. Run the experiment Create three entries, reload, export them, remove only the disposable test copy and import into a fresh practice profile. Compare fields and identifiers. PROMPT Work in a disposable practice project. Explain any setup requirements before changing files. Build one small step at a time and show how I can check it. Design an offline-first data contract for journal entries, workouts, and tasks. Include stable IDs, created and updated timestamps, deletion markers, sync status, and conflict rules. Show TypeScript types and IndexedDB indexes. Threat-model this browser app. Identify every place a secret could leak, every user-isolation failure that could expose another person’s records, and the server-side controls required before production. My first-version boundary: Start with one record type, stable identifiers and local storage. Implement export before adding cloud synchronization. EXAMPLE / EXPERIMENT Create three entries, reload, export them, remove only the disposable test copy and import into a fresh practice profile. Compare fields and identifiers. CHECK YOUR RESULT [ ] Reload preserves records. [ ] Export/import restores the same data. [ ] Network loss does not silently discard edits. IF IT FAILS Do not add synchronization until conflict rules are explicit. Never embed production API secrets in client code. MY RESULT / NEXT CHANGE