Inspiration

A progress photo can show what you made without showing where to begin again. For an embroidery piece, model or collage that takes several sittings, the missing detail may be a particular spot and one short instruction.

Benchkeep brings those two things together. It is a visual bookmark for unfinished craft work: a photo, a point on that photo and the maker's own next move. The goal is a clear return to the work, without having to reconnect a camera-roll image with a separate note. This is a product hypothesis, not a claim from a user study.

What it does

Choose a photo, place a point, name the piece and write the next move. Direction controls provide another way to position the point. Save the checkpoint, then reopen the piece with its photo, point and note together. “Look closer” focuses on the marked detail; “Whole piece” restores the context.

Each new checkpoint preserves the previous note in a trail. A finished piece remains readable and can return to the bench. Craft photos and notes are stored locally. The built-in Autumn leaves example is labeled as sample content.

Portable backups include photos and project data. Import validates the file before replacing the bench. Reading and exporting existing work remain available even when the free plan's capacity is exceeded. Native backup controls are implemented; their Android export/import flow was not part of the final emulator walkthrough.

How it was built

Benchkeep uses React Native, Expo and TypeScript. Photo points are stored relative to the image rather than screen pixels, so the location is preserved when the layout changes. Serialized writes prevent an earlier autosave from replacing a newer checkpoint. A recoverable local backup and validated portable backups address failed writes and malformed data.

The visual design gives the piece priority: quiet typography, a large image and a short next action. Focus motion respects reduced-motion preferences. The privacy notice and fonts are bundled in the app.

The final source passed 27 automated tests and TypeScript checking. The tests cover geometry, checkpoint history, capacity rules, persistence failures, purchase-state handling, backup validation and the Android embedded-development bootstrap.

RevenueCat and the business model

The free bench holds two active pieces. Full bench is a one-time unlock for more active pieces. This packaging fits a small personal tool used whenever a maker returns to a project; it does not require an ongoing subscription to keep reading their work.

RevenueCat supplies the offering, localized price and benchkeep_plus entitlement. Benchkeep does not unlock premium from a local flag. Cancellation, pending or failed responses and a response without the expected active entitlement cannot grant access. A data backup contains craft work, not a premium entitlement.

The Android demonstration uses RevenueCat Test Store and is explicitly labeled “Test purchase · no real charge.” On the final APK, the native SDK loaded the $4.99 sandbox product. Cancelling kept access locked; a valid sandbox purchase unlocked Full bench. The restore action and another app restart retained access in the same sandbox installation. These checks are not real-money sales, Google Play/Galaxy purchases or cross-device store restoration.

Challenges and evidence

Keeping a point attached to a photo involves more than drawing a marker. Letterboxing, layout changes and focus near an edge all affect where that point appears. Another boundary was separating craft data from paid capacity: importing a backup must preserve readable work without granting premium or silently discarding extra pieces.

Actual Android execution caught a bootstrap problem that passing unit tests and a compiled APK had missed: Expo's development message socket expected a Metro server. A narrowly scoped adapter now skips that tooling socket only for an embedded Test Store development bundle. The APK remains genuinely debuggable, as RevenueCat requires, while its native host loads the embedded JavaScript without Metro. Purchase guards remain intact.

The final APK was tested on an Android 16 emulator. The run covered photo-picker import, point placement, checkpoint saving, focus and resume. With networking disabled, force-stop and relaunch preserved the photo, point and next move even when RevenueCat could not connect. The sandbox purchase outcomes above were then checked with networking restored.

Current scope and next steps

This entry targets Next Gen, with public MIT-licensed source and a downloadable Android judging sandbox. Benchkeep has no public app-store release, verified paid customers or measured time-saving results. It does not provide cloud sync, collaboration or automatic interpretation of craft photos. The maker writes the next move.

The final native run did not cover camera capture, native backup export/import or the failed-purchase option. Failure/pending cases have automated coverage, with separately recorded Web SDK failure evidence. There was no physical-device test or production store restoration. Those checks, followed by a small user trial, are next steps before a production release.

The code and project materials were developed with AI assistance. The generated embroidery imagery is demonstration content, not a customer's work or evidence of adoption.

Built With

Share this project:

Updates

Submission history