Case study · Mobile + desktop app · 2026

BPD Capture: a field photo app for Blueprint Digital

I designed and shipped an offline Android app that lets site teams photograph and file every job by its CE number, then send a finished field report from the van. I directed the product and design; Claude, an AI coding assistant, wrote and tested the code with me. This page walks through how the work actually went, including the parts that didn't work the first time.

My roleProduct owner, designer, tester
Built withClaude Code (AI pair programmer)
StackExpo / React Native, Electron, three.js, SQLite
ShippedAndroid APK via GitHub Releases, v1.0 → v1.4.2
01 · The brief

Capture, file and report, without a server

Blueprint Digital's jobs are tracked by CE number. On site, photos ended up mixed in personal camera rolls and had to be sorted by hand later. The app needed to:

02 · How I worked with Claude

I set the direction, Claude built and tested, I judged the result

Every feature went through the same loop. I described what I wanted in plain language, often with reference screenshots from other apps. Claude wrote the code, installed the build on an Android emulator and took its own screenshots to check the result. I reviewed what it showed me and pushed back until it was right.

My brief + references→Claude builds→Emulator screenshots→My feedback→Refine or ship

Decisions were written down as they were made, so they stayed consistent between sessions: a design system document (colours, type, components, a changelog row for every visual change), a security document with rules both apps follow, and a short instruction file that tells Claude to keep both up to date.

03 · First version

The working app

Version one covered the whole job: a dashboard of jobs in progress, capture straight into each job's folder, due dates with a calendar, insights on overdue work, PDF field reports, a daily digest and full backup and restore. I picked a dark theme with a cyan-to-purple gradient from a set of reference screenshots, and tested it on my own phone.

Version 1 dashboard: dark screen, job cards with initials avatars, purple buttons and emoji tab icons
Version 1 dashboard. It worked well, but this look is what testers later called "AI-generated".
Dashboard in version 1.4.2 with the Blueprint Digital logo in the header
v1.4.2: same layout, with the real logo replacing a placeholder camera icon.
04 · The startup animation

Seven 3D concepts, two rejections, one logo drawn by its own pencil

I wanted the app to open with something that felt like Blueprint Digital, not a generic loading spinner. Claude built the concepts as live three.js scenes in one gallery so I could compare them side by side and rotate them, rather than judging still images.

That's such a boring loading screen and it is so cliché, as many people use that exact one.My feedback on the first 3D attempt, a spinning torus knot
You have combined two designs in one animation, which does not look good.My feedback on a blend of the "camera iris" and "blueprint" concepts

The answer was to use the real logo. Claude extracted the exact vector paths and gradient colours from the logo's PDF (not the outline-only cut file), and I chose concept 7: the pencil in the logo traces the outline, the colours pour in, the bulb lights up and the pencil slides into place. The last frame had to match the printed logo exactly, and it does.

Concept gallery with seven tabs; concept 7, Pencil Draws Logo, is selected and shows the finished logo
The concept gallery: seven live 3D concepts on one page. Open the interactive gallery (needs an internet connection to load three.js).
Six frames: the pencil draws the outline, blue fills in, the body fills, the bulb lights, the final logo
Six frames from the 3.5-second animation, as it runs in the app.
Original logo artwork on white beside the animation's final frame on black
Left: the original artwork. Right: the animation's final frame.
The animation exported as a video, rendered frame by frame from the same code the app runs. The app also saves it to the phone's gallery the first time it opens.
05 · Icons

One source for every logo

The app icon, the in-app logo and the desktop icon are all rendered from the animation's final frame, so they can never drift apart. Testing on the emulator caught one problem: Android crops icons to a circle, and the first version clipped the pencil tip. The logo now sits at 45% of the icon canvas instead of 58%.

Four icon variants: monochrome, adaptive, launcher and in-app logo
Themed (monochrome), adaptive, launcher and in-app versions.
Android app drawer with the BPD Capture icon fully inside its circle
After the fix, on the Android home screen.
06 · Shipping without an app store

Updates in one tap

The app is installed directly from an APK file, so it checks GitHub Releases for new versions itself. The first version of the updater asked people to save a backup zip before updating, and I found that confusing on my own phone. Now the backup is saved quietly on the device, the update downloads, and Android asks for the one confirmation it always requires. Claude tested the full path on the emulator, from an older build through to the installed new version.

Dialog: Update available v1.4.1, Update Now
One button, with no file handling for the user.
Android system dialog: Do you want to update this app?
The only other step: Android's own confirmation.
07 · Desktop companion

The same jobs on a Windows PC

A Windows version, built with Electron, mirrors the phone app's screens and data model for office work: reviewing jobs, adding photos from files or a webcam, and the same startup animation. Syncing data between the two through GitHub is planned next.

Desktop app: header with logo and tabs for Dashboard, Calendar, Insights and Clients, search bar and New Order button
The desktop app's dashboard.
08 · Security review

Testing it the way an attacker would

Before going further I asked for a security check of both apps. Claude reviewed the code, then ran ten real attack attempts inside the desktop app (reading system files, escaping the data folder, deleting files outside it, navigating to a website). All ten are now blocked, and normal use still works.

FindingSeverityOutcome
A job number like .. could point outside the jobs folder; deleting that job would have wiped every job's photosHighFixed in both apps with shared validation
Desktop accepted any file path from its own screensHighFixed: files outside the app's data folder are refused
Desktop window could be navigated to a websiteMediumFixed: navigation and pop-ups blocked
Release builds signed with a publicly known keyCriticalPlanned: a private signing key with a one-time reinstall

SQL injection was already ruled out, because every query passes typed text as data. An automatic check now fails the build if anyone ever writes a query that pastes text in.

09 · Redesign, in progress

"It looks AI-generated"

People I showed the app to said it looked like it was made by AI. They were right about why: a purple gradient, emoji used as icons, and identical rounded cards are the default look of generated apps. Redesigning is taking several rounds, and each round taught me something about how I want to brief design.

Concept A: blueprint-blue screens with grid lines and drawing title blocks
Round 1 · A
Drafting table: blueprint paper and title blocks.
Concept B: grey and safety-yellow screens with job tags
Round 1 · B
Field kit: site tags, hazard stripes, big buttons.
Concept C: light screens with ink dots and crop marks
Round 1 · C
Colour proof: the logo's inks as status colours.

Round 1 took its ideas from the business: blueprints, site work, print. I liked none of them. The design didn't need to illustrate the brand, so I shared four dashboard designs I liked instead.

Round 2 recreated those references almost exactly: number tiles, charts and filter pills everywhere. It felt overwhelming, and I realised I'd wanted their style (colours, type, shapes), not their layout.

Calm layout: a simple job list and a job screen on near-black with white text
Round 3 · A calm layout: a plain job list, one summary line and one highlighted action per screen. The layout worked, but the bright white text on black felt harsh and the colours didn't belong together.
Five versions of the same screens in Moss, Dusk, Ink and ember, Clay and Stone palettes
Round 4 · Five colour schemes on the same layout. Each tints the background with its accent and uses softer text so everything blends. Open the interactive comparison.

The chosen scheme will be built on a separate branch, so the working app stays untouched until the new design has been tested on the phone.

10 · What I learned

Directing AI is a design skill

Explore the working files