JST --:--:--
arrow_back My Work
04 Home Inventory App
Once Kept logo Once Kept

A mobile app that turns your home into a searchable inventory. Photograph any object, and AI identifies it, names it, and categorises it so when you need to find something, you just search and it tells you exactly where you left it.

Built for individuals, families, and offices. Shared inventories, private items, AES-256 encrypted photos, and a subscription system through RevenueCat.
自宅を検索可能な在庫リストに変えるモバイルアプリです。物を写真に撮るだけで、AIがそれを特定・命名・分類します。次に探したいときは検索するだけで、どこに置いたかすぐわかります。

個人・家族・職場向けに設計。共有在庫・プライベートアイテム・AES-256暗号化写真・RevenueCatによるサブスクリプションシステムを搭載しています。

Visit Live Site arrow_outward
Once Kept home screen
Once Kept capture screen
200+ Object types recognised by AI
AES-256 Encryption on every photo
Camera lenses supported
iOS + Android Cross-platform via Expo

Stack

Frontend
React Native Expo SDK 52 TypeScript React Navigation v7 React Context API
Backend
Python Flask OpenCLIP (ViT-B-32) PyTorch Pillow
Infrastructure
Supabase PostgreSQL Row Level Security Google OAuth2
Payments & Security
RevenueCat AES-256-GCM JWT Sessions

Architecture

psychology

Two-Stage AI Classification

Photos are sent to a Flask backend running OpenCLIP (ViT-B-32). Stage 1 compares the image against 200+ object labels to get the item name. Stage 2 compares against the user's own category names using detailed visual prompts. Negative anchors prevent false matches. If the top category exceeds 40% confidence it is auto-selected otherwise the user picks from a ranked list.

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 & Office Sharing

Users join groups via a 6-character invite code that expires in 10 minutes. Roles are scoped to Host, Admin, and Member. A single account can belong to one family group and one office group simultaneously. Items can be marked private per-item, hiding them from others at the query level via Row Level Security.

Highlights

camera_alt

Multi-Lens Camera

Supports 0.5× ultra-wide, 1×, 2× digital, and 3× telephoto with pinch-to-zoom that automatically switches the physical lens the same behaviour as the native iOS camera.

search

Instant Search

Search across all items by name, category, or location from the home screen. Results filter in real-time as you type no server round-trip needed.

palette

Custom Locations & Categories

Each location has a custom icon auto-detected from its name. Each category has a custom colour and icon. Add, rename, or delete either at any time without losing item associations.

subscriptions

RevenueCat Subscriptions

Four-tier plan system (Free, Standard, Family, Office) gated by item count and member limits. Billing runs through the App Store and Google Play via RevenueCat no custom payment infrastructure 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.