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.
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 APKFree, 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.

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
- 01
Photograph the pile
The on-device Gemma model lists items with a name, fabric family, colour group, and a photo crop each.
- 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.
- 03
Plan the washes
The deterministic rule engine builds up to four rounds with order, temperature, spin, duration, and reasons.
Product screens
Android early-beta screens from emulator runs. Demo scans use staged laundry photos; they are not measured recognition accuracy or care outcomes.
Technology focus
- Kotlin
- Jetpack Compose
- On-device AI
- LiteRT-LM
Evidence and further reading
Evidence reviewed .
- Download the signed v0.3.1 APK (opens in new tab)
The exact 53,063,988-byte APK presented in this case study, hosted on this site (SHA-256 ee83d2a5…). Published 14 November 2026.
- Read the privacy policy (opens in new tab)
On-device processing, the one-time verified model download, and the optional Smart Mode request to the owner's server. Evidence reviewed 14 November 2026.


