Projects

Some shipped apps and open-source Compose craft.

A flagship offline-first product and a set of reusable Jetpack Compose components. Filter by what you're looking for.

Flagship · Android app

InfoRange

Offline-first Android app bringing rangeland monitoring and veterinary access to pastoralists in Northern Kenya and Namibia — engineered for zero and intermittent connectivity.

  • Kotlin
  • Jetpack Compose
  • MapLibre
  • Room + DB encryption
Read the case study
Library

CanvasWeightPicker

A reusable Jetpack Compose weight picker drawn entirely with Canvas — my highest-starred open-source component.

  • Kotlin
  • Jetpack Compose
  • Canvas
View on GitHub
Android app

ComposeCalorieTracker

Multi-module Android app that tracks calorie consumption, with data visualization drawn using Compose Canvas.

  • Kotlin
  • Jetpack Compose
  • Multi-module
  • Canvas
View on GitHub
Library

CanvasAnalogClock

A reusable analog clock component built with Jetpack Compose Canvas.

  • Kotlin
  • Jetpack Compose
  • Canvas
View on GitHub
Android app

ComposeDictionary

Clean Architecture dictionary app — remote data with local caching, following the offline-first pattern.

  • Kotlin
  • Jetpack Compose
  • Clean Architecture
View on GitHub
Android app

ComposeNotes

A note-taking app built with Jetpack Compose and Clean Architecture.

  • Kotlin
  • Jetpack Compose
  • Clean Architecture
View on GitHub
Android app

CanvasTicTacToeGame

A Tic-Tac-Toe game drawn with Jetpack Compose Canvas.

  • Kotlin
  • Jetpack Compose
  • Canvas
View on GitHub

Strictly necessary storage is always on; everything else is your call.

Strictly necessary

Needed for the site to work and remember basic choices. These never track you across sites.

Always on
  • theme (This site) — Remembers your dark/light theme preference. localStorage — kept until you clear your browser data.
  • cookie-consent (This site) — Remembers the cookie choices you make here. localStorage — kept until you clear your browser data.

Analytics

Anonymous, aggregate page-view and interaction statistics via self-hosted Plausible Analytics. Plausible sets no cookies or persistent identifiers, and analytics only runs when you allow it.