Jetpack Compose · Kotlin · Offline-first

Five apps. Zero cloud. All native.

A portfolio of production-grade Android apps — notes, focus, expenses, nutrition, and accessibility — each built on clean architecture with Room, Hilt, and Coroutines/Flow. Every app works fully offline and ships with passing test gates.

The work — 01 / 05

Five distinct
products.

Each app solves one real problem end-to-end, with its own data model, UI, and signature color. Tap through to the source.

01

KnowFlow

Notion-style notes with markdown, backlinks & full-text search.

Markdown [[Backlinks]] FTS4 search Tags Zip export
Compose · Room FTS4 · Hilt · CommonMark Source
02

FocusGrid

Tasks, recurring routines, calendar & Pomodoro focus sessions.

Tasks Routines Focus timer Reminders Analytics
Compose · Room · WorkManager · Canvas Source
03

ReceiptIQ

Snap a receipt; OCR extracts merchant, date & total, then charts it.

CameraX ML Kit OCR Auto-parse Budgets CSV export
Compose · CameraX · ML Kit Text · Room Source
04

MacroLens

Scan a barcode, look up the food, log macros & calories vs goals.

Barcode scan Open Food Facts Macro dash Favorites Trends
Compose · ML Kit Barcode · Retrofit · Room Source
05

AccessCheck

A developer tool for WCAG checks — contrast, tap targets & reports.

WCAG checklist Contrast calc Tap targets TalkBack guide Reports
Compose · AccessibilityManager · Room · Hilt Source
Under the hood

One architecture,
five times over.

Every app follows the same disciplined shape — a one-way data flow from a Room-backed data layer, through pure domain logic, to a stateless Compose UI.

UI Jetpack Compose screens & state holders Stateless, Material 3
Domain Use cases & models Pure Kotlin, unit-tested
Data Room · Repositories · remote sources Offline-first, Flow

Offline-first by default

Room is the single source of truth. Network (where present) only enriches the cache — the app never blocks on connectivity.

Unidirectional state

Compose renders immutable UI state exposed as StateFlow; events flow up, state flows down. No surprises.

Hilt-wired & testable

Dependencies are injected, domain logic is pure, and DAOs are instrumentation-tested against a real in-memory database.

The toolbox

Built with modern
Android.

A focused, current stack — no legacy Views, no XML layouts. Hover to feel it.

Kotlin Jetpack Compose Material 3 Room Room FTS4 Hilt Coroutines Flow WorkManager CameraX ML Kit · Text ML Kit · Barcode Retrofit Gson Compose Canvas CommonMark KSP JUnit
JVM unit tests
Debug build
Lint · 0 errors
DAO instrumentation
SMOKE walkthrough