JST --:--:--

Once Kept

Home inventory app

A phone app for iPhone and Android that turns your home into a searchable list of everything you own. Take a photo, note where it lives, and find it again in seconds.

Visit Live Site arrow_outward
Once Kept website homepage in a desktop browser
9:41
Once Kept app showing an item page on a phone
The problem

Every home has drawers, boxes and shelves where things seem to disappear. When you need a cable, a document or a keepsake, you end up searching through everything.

Top highlights

9:41
Once Kept camera screen photographing a passport
1

Just take a photo

No lists to type. The app looks at each photo, suggests a name and sorts it into your own categories.

9:41
Once Kept item page for car keys kept in the bedroom
2

Remember exactly where

Each item keeps its room, its category and a short note like “third drawer from the top”. Type “car keys” and the answer is right there.

9:41
Once Kept documents sorted by room
3

Everything sorted by room

Items are grouped by where they are kept, with your own categories and icons. Search by name, category or place from the home screen.

What it changes at home

Found in seconds

“Where did I put that?” gets a quick answer, instead of a search through every drawer.

Shared with family

Invite family members with a short code, so everyone knows where shared things are kept, on iPhone or Android.

Private by design

Photos are stored encrypted, and items you mark private stay hidden even from the people you share with.

Project overview

Product
Once Kept, a home inventory app for iPhone and Android.
My role
Product design and development of the mobile app, the backend and the website.
Deliverables
  • One app for iPhone and Android
  • AI that names an item from a photo and suggests a category
  • Rooms, categories, notes and search
  • Family sharing with short invite codes
  • Encrypted photo storage and private items
  • Subscription plans billed through the App Store and Google Play
  • Website with pricing, privacy and terms pages

Have an idea for an app or web app? I design and build products like this from start to finish as a freelance designer and developer.

Technical details for developers

Stack, architecture and how it is built.

Stack

Frontend
React Native Expo SDK 52 TypeScript React Navigation v7 React Context API
Backend
Python Flask Gemini 2.5 Flash via OpenRouter Pillow
Infrastructure
Google Cloud Run Supabase PostgreSQL Row Level Security Google OAuth2
Payments & Security
RevenueCat AES-256-GCM JWT Sessions

Architecture

psychology

AI photo classification

Photos go to a Flask backend, which re-encodes them as small JPEGs and sends them to Gemini 2.5 Flash through OpenRouter. The model replies in strict JSON: a plain item name of one to three words and, when the user's own categories are sent along, the best match from that list. If it suggests a category the user doesn't have yet, the app offers it as a new one instead of forcing a bad match. The endpoint is rate limited.

lock

End-to-End Photo Encryption

Every image is encrypted with AES-256-GCM before touching the database. The IV, ciphertext, and auth tag are stored together as binary. The encryption key never leaves the server. Even with direct database access, images are unreadable. Photos are decrypted on-demand only when you view them.

group

Family sharing

Users join a family group with a 6-character invite code that expires in 10 minutes. Roles are Host, Admin and Member. Items can be marked private, which hides them from other members at the query level via Row Level Security.

Technical highlights

subscriptions

RevenueCat Subscriptions

Three plans (Free, Standard and Family) gated by item count and member limits. Billing runs through the App Store and Google Play via RevenueCat, so no custom payment infrastructure is needed.

devices

Cross-Platform

One codebase ships to both iOS and Android via Expo. Platform-specific camera behaviour, gesture handling, and blur effects all wired up with the correct native APIs.

shield

Privacy First

Row Level Security enforced at the Supabase layer. Cascade deletes wipe all user data atomically on account deletion. Private items hidden at the query level, not just the UI.

Want something like this?

I design and build apps and web apps from the first idea to launch.