SkazOff's Blog

Building Offgrid Diary in One Turbo-Charged Weekend

(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:

  1. Forced accounts – I don’t need yet another login just to write a paragraph.
  2. Cloud by default – My late-night rants don’t belong on someone else’s server.
  3. 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

TimeMilestoneNotes
13:10expo init offgrid-diaryYes, I ignored the App.js template.
14:006-digit PIN lockAES-256 master-key lives in Secure Enclave.
15:20Time-warp swipeQuery Realm for the same mm-dd across years; random pick if >1 match.
16:45Ink-ripple typingreact-native-skia + Reanimated; 1-sec fade.
17:50First Twitter screenshotTweeted 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

  1. Pulled LLaMA.
  2. Added llama.rn native module (Metal on iOS).
  3. Added a Σ button in the editor footer.
  4. 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


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

  1. Vibe-coding works – 80 % of UI & boilerplate came from Cursor + Claude.
  2. Ship then iterate – Review rejections are fixable if you communicate.
  3. Offline first ≠ easy – Distribution of large ML models on iOS is still clunky.
  4. 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. 🙌

Leave a comment

Your email will not be published.