Back to flagship work

Case study · 2026

LaundryLens

An early-beta Android app that turns a photo of a laundry pile into wash rounds: an on-device vision model lists the items it finds, and a deterministic rule engine plans up to four washes with order, temperature, spin, duration, and reasons.

Download APK

v0.3.1 · Android 8.0+ · 53.06 MB

My role: Independent product designer and Android engineer; model integration and rule-engine implementation

Outcome

Shipped a signed early-beta APK where a Gemma vision model detects items entirely on the phone while the wash plan itself is built by deterministic Kotlin rules, not the model. Scans work offline after a one-time verified model download.

Latest signed phone release

Download LaundryLens

Download APK

Free, MIT-licensed, early beta for Android. No account, advertising, or analytics. Detection runs on your phone after a one-time, SHA-256-verified model download of about 2.6 GB, and the app also works without the model in manual mode. Optional Smart Mode is off by default.

Release
v0.3.1 · code 11
Compatibility
Android 8.0+ · phone APK
Release details (checksum, package)
Package
org.kalc.laundrylens
File size
53.06 MB (53,063,988 bytes)
SHA-256
ee83d2a5bb1bae62fca71df19a889fd362789451fd300585d4ca0ca28c67e28c

This APK installs outside Google Play. Android may ask you to allow installs from your browser. Verify the checksum above before installing, and only grant that permission for the installation.

LaundryLens early-beta results screen after a demo scan of a staged laundry photo, listing detected clothing items as cards with per-item photo crops
Android early beta · demo scan on staged laundry photos. Open full-size image

From a pile of laundry to wash rounds

Sorting a laundry pile by hand means re-reading labels, grouping similar fabrics, and deciding what can safely share a wash. LaundryLens starts from a photo instead: you photograph the pile, and the app lists the items it finds — a name, a fabric family, and a colour group for each — with a photo crop of every detected item so you can check the detection against the original picture.

Detected items stay editable. Each item can be corrected by hand, including its care-label reading through a dedicated dialog, and earlier scans remain in History. A deterministic Kotlin rule engine then builds up to four wash rounds from the reviewed items, choosing the order of rounds and each round's temperature, spin, and duration, with visible reasons for every recommendation.

Seeing on the phone, deciding in Kotlin

The work is split deliberately. Perception is the model's job: a Gemma 4 E2B vision model runs entirely on the phone through LiteRT-LM and lists the items in the photo. The wash plan is not the model's job: a deterministic Kotlin rule engine turns the reviewed items into rounds, so the same item data produces the same plan and every recommendation carries an inspectable reason instead of a language-model opinion.

The model file is a one-time, in-app download of about 2.6 GB, transferred over HTTPS and SHA-256-verified before it is used. After that, scans work offline. The app also works without the model at all: in manual mode you enter items yourself and the same rule engine plans the washes.

Smart Mode is the one optional network feature and it is off by default. When you enable it, the photo you scan is sent to my own server for item classification, and any failed request falls back silently to the on-device scan. There is no account, advertising, or analytics, and in-app telemetry stays on the device.

Early beta and its limits

This is an early beta. The English-only interface runs on Android 8.0 and later, and the published download is the signed v0.3.1 (code 11) phone APK with its exact byte size and SHA-256 shown below. Screens on this page are emulator captures of demo scans on staged laundry photos; they show the interaction, not measured recognition accuracy or care outcomes.

  • Scan time: on the emulator test builds, CPU-only scans of a pile took roughly 20–45 seconds; GPU execution is expected to be faster but is not part of this release.
  • Recognition quality: the demo scans are not a benchmark. Detection quality on physical devices, camera angles, and real wardrobes is not established by this page.
  • Source: the app is MIT-licensed, but the corresponding source is not published yet, so this release shows no source link; byte-level verification runs through the published checksum.

The release checks were emulator-based: upgrade installs, scan lanes on staged photos, Smart Mode on and off with endpoint-failure fallback, and manual mode. They establish that the shipped flows execute, not long-term physical-device reliability.

From one photo to wash rounds

  1. 01

    Photograph the pile

    The on-device Gemma model lists items with a name, fabric family, colour group, and a photo crop each.

  2. 02

    Review and edit

    Correct items by hand and read care labels; Smart Mode can classify on my server only if you turn it on.

  3. 03

    Plan the washes

    The deterministic rule engine builds up to four rounds with order, temperature, spin, duration, and reasons.

Simplified Android workflow. Screenshots are early-beta demo scans on staged laundry photos; scan time and detection quality are not established on physical devices.

Product screens

Android early-beta screens from emulator runs. Demo scans use staged laundry photos; they are not measured recognition accuracy or care outcomes.

  • LaundryLens item cards from an on-device demo scan of a staged laundry basket photo
    Android early beta · demo scan on staged laundry photos
  • LaundryLens wash plan rows listing items with thumbnails and care settings
    Android early beta · demo scan on staged laundry photos
  • LaundryLens care-label dialog opened from an item on an emulator
    Android early beta · care-label dialog on an emulator

Technology focus

  • Kotlin
  • Jetpack Compose
  • On-device AI
  • LiteRT-LM

Evidence and further reading

Evidence reviewed .

Back to top ↑