
How I designed and built Nept Track, a private, offline-first habit tracker, budget planner and notes app, using Expo, SQLite, Drizzle ORM, custom Kotlin modules and a privacy-first Gemini assistant.
Nept Track started with a simple frustration. I had a habit tracker, a money app, a notes app and a to-do list, and none of them talked to each other. Each one wanted an account. Each one stored my personal data somewhere I could not see. And at the end of the day, I still could not answer a basic question: how did today actually go?
So I built one app that does all of it, privately and offline. This article walks through the product decisions and the engineering behind it: the offline data layer, the native Android modules, the capture inbox and the privacy-first AI assistant.

The temptation with a "do everything" app is to build five average apps in one. I avoided that by writing down one promise first: one calm place to get your day under control. Every feature had to support a short daily loop:
Three principles came out of that loop and shaped every screen:
Offline-first is not a feature you add later. It decides the architecture from day one.
All records in Nept Track live in SQLite on the device, accessed through Drizzle ORM. Drizzle gives typed schemas, typed queries and real migrations, which matters a lot when an app ships updates to people who already have months of data. Every feature talks to SQLite through a small repository (tasks, money, notes, inbox), so screens never write raw SQL.
Tagged with
Leave a comment
Zustand handles state, but only UI state and settings. Real records never live in the store, so there is one source of truth and nothing to keep in sync. That separation also keeps the door open for optional cloud sync later: the repositories can be swapped without touching the screens.
Because the database is local, everything is instant: search across every month of transactions, habit streak calculations, 12-week heatmaps and monthly PDF reports all run on the phone without a network call.

Habit apps often punish people. Miss your rest day and the streak resets to zero. In Nept Track, a habit has the days it is scheduled for, and streaks only count those days. A rest day never breaks a streak, and only due days can be missed.
On top of that sit a few numbers people can actually understand: current and best streak, a 0–100 consistency score for any date range, done-versus-missed charts and a weekly review. Every number is explained in plain language.
Some things simply cannot be done reliably from JavaScript on Android, so I wrote six custom Expo modules in Kotlin:
The Expo modules API made this clean. Each module exposes a small typed TypeScript interface, and the rest of the app never knows there is Kotlin underneath.

The capture inbox is the feature people mention most. You type anything without choosing where it goes. Later, one tap turns it into a task, an expense or a note, with the fields already filled in. Light text parsing helps here: "Spent 450 on transport" is recognised as a likely expense, and the app offers to log it.
This removes the most common reason people stop tracking: the moment of hesitation about which app to open.

Nept Track includes Ask Nept, an optional assistant backed by Google Gemini. The important design decision was deciding exactly what leaves the phone, and keeping that decision in one place in the code.
The assistant is off until the user turns it on. When it is on, it only receives summaries the app has already computed: habit names and how often they were done, spending per category and inbox counts, plus the titles of today's open to-dos so it can help plan the day. Note text, capture text and individual transactions never leave the device.
For reliability, it tries several Gemini models in order, fastest first, and falls back to the next one when a model is busy. It can also take actions, such as creating a habit, an alarm, a note or an expense from a single sentence.
Version 2.3 added a sketch whiteboard built on React Native Skia: an endless canvas with a dot grid, hold-to-select, move, duplicate, layers and erase, plus templates such as a mind map, weekly plan, kanban board and journal. Sketches can be exported as images or PDFs and shared.

The visual system uses warm amber gradients, glass cards and springy Reanimated motion, with full light and dark themes. Each task, note and money category carries its own accent colour, so lists read as distinct objects instead of one repeated card.
The app is translated into 16 languages, including Bangla, Hindi, Urdu and Arabic with full right-to-left layout, and the Play Store listing is localised for each of them. Release notes are written for each language and kept under Google Play's character limits.
Nept Track is free on Google Play. If you are planning a mobile app that needs to be fast, private and dependable offline, get in touch. This is exactly the kind of product I enjoy building.