(and why I’m still patching bugs while you read this)
TL;DR:
- 48 h from idea → live App Store build
- Offline, AES-256-encrypted diary with a 700 MB on-device LLaMA model
- One rejection, two hot-fixes, and a running Twitter play-by-play
0. Prelude — “Why am I doing this again?”
For years I’ve kept a private journal. Every time I tried popular apps I ran into the same walls:
- Forced accounts – I don’t need yet another login just to write a paragraph.
- Cloud by default – My late-night rants don’t belong on someone else’s server.
- Feature bloat – Stickers, streaks, social widgets… no thanks.
So I earmarked a weekend for a vibe-coding experiment:
“Can I build a fully offline, encrypted diary with at least one magical feature?”
1. Day 1 – 13:00 → 18:00
Setting the stage
- Framework Expo (bare workflow) – fast iterate, still can drop to Xcode.
- Pair programmers Cursor + Claude Code (Sonnet).
- Design goal All black-&-white, minimal, one primary action on each screen.
First 5 hours: from zero to usable
Time Milestone Notes 13:10 expo init offgrid-diary
Yes, I ignored the App.js template. 14:00 6-digit PIN lock AES-256 master-key lives in Secure Enclave. 15:20 Time-warp swipe Query Realm for the same mm-dd across years; random pick if >1 match. 16:45 Ink-ripple typing react-native-skia
+ Reanimated; 1-sec fade.17:50 First Twitter screenshot Tweeted and immediately got “will it sync?” dm-questions 🙃 📸 Tweets start here → live thread
2. Day 2 – the “offline AI” rabbit hole
ChatGPT drops a bomb
I asked, “Is on-device GPT even feasible?”
ChatGPT: “Use LLaMA-7B Q4, ~700 MB.”
My reaction: 😬 → 😏 → “Let’s do it.”
Implementing Σ-analysis
- Pulled
LLaMA
.- Added
llama.rn
native module (Metal on iOS).- Added a Σ button in the editor footer.
- Prompt: “Summarize entry in one sentence + mood (Positive/Neutral/Negative) as JSON.”
⚠️ Bug #1 – TestFlight build fine, Release build refused to download model
Dev-ops in parallel
- Brainstormed names with ChatGPT → Offgrid Diary.
- Bought offgriddiary.app on GoDaddy ($10).
- One-page landing on Vercel; Resend to collect early e-mails.
3. Day 3 – App Store review saga
Resolution Center, 09:34:
“Your app appears to direct users to upgrade outside In-App Purchase.”They saw “Pro coming soon” + “AI downloads separately” and assumed I was bypassing StoreKit.
Fix: replied stating: “Current build is completely free; future Pro will use auto-renew subscription via StoreKit.”
✅ Two hours later: approved.
4. Day 4 – Production blind spot
Users downloaded v1.0 and immediately DM’ed:
“Where’s this AI button? Σ is greyed out.”
Turns out the Release build used a different bundle ID, so the model folder path broke.
5. Day 5 – First real release
- App now live: https://apps.apple.com/app/offgrid-diary/id6748696045
- AI works, but:
- Inference ~30-40 s on A15, 60-70 s on older devices.
- Summaries occasionally repeat the entry verbatim (classic small-model hallucination).
6. Current todo list (real-time)
- Replace 7B with TinyLlama-1.1B Q4 (12 MB) – lighter download.
- Flip on Pro (sub or one-time) once AI is stable.
- Write automated tests for the download layer so Release ≠ TestFlight.
7. Lessons learned
- Vibe-coding works – 80 % of UI & boilerplate came from Cursor + Claude.
- Ship then iterate – Review rejections are fixable if you communicate.
- Offline first ≠ easy – Distribution of large ML models on iOS is still clunky.
- People love nostalgia
8. Grab it & test
The current build is 100 % free.
If you value offline privacy and want to see how on-device GPT behaves in V1, give it a spin and ping me on X or Indie Hackers with feedback.More post-mortem details to follow once I squash the next bug that pops up while you’re reading this. 🙌