Case study · PickBits product · beta

Remme
reminders
that fire where you are.

A reminder at 9 a.m. to buy bolts is useless. A reminder when you're at the hardware store is a completed task. Remme tracks where your possessions live, ties them to places with geofences, and runs automations on location — with an AI assistant that can answer "where did I put the passport?". Built end-to-end by PickBits; in beta at remme.pickbits.ai.

Remme — AI-powered memory assistant, built by PickBits.AI
Product
PickBits, in-house
Category
Personal organisation
Live surface
Web app
Also in build
Android (Kotlin) · Expo
Status
Beta — open to sign-ups
Stack
React + Supabase + Vercel

The challenge.

Reminders are scheduled against the wrong axis. Time-based ones go off when you can't act — the "pick up bolts" nudge fires during a meeting, you dismiss it, and it's gone. The information you actually need is spatial: where a thing lives, and where you are when the reminder is worth having.

Building that means solving three things at once:

  • An inventory people will actually maintain. A home inventory app dies the moment logging an item costs more than losing it. Items need states that match reality — here, an item is ok, missing, or lent_out.
  • Places as first-class objects. Not a text field on a reminder — a real entity with a geofence, so the app can reason about arriving and leaving.
  • Automations, not alarms. Trigger → action chains that fire on location events, which is where the product stops being a list and starts being useful.

The approach.

Three nouns, and everything else is composition

The whole product reduces to Item, Place, and Automation. Room inventory, moving mode, a maintenance tracker, family sharing, travel assistance, seasonal items — none of those are separate subsystems, they're arrangements of the same three objects. Getting the core nouns right is what lets a solo build carry that many surfaces without collapsing.

Ship the web app first, even though it's a phone product

Remme is a four-surface repo: a React web app, a native Kotlin/Compose Android app, an Expo mobile app, and a Supabase backend they share. The web app is what's live — the mobile surfaces are still in development, and we'd rather say that than imply a store listing that doesn't exist. Shipping the web surface first buys real usage against the real backend while the geofencing platforms get their proper native treatment.

Make the product callable by an agent

Remme exposes itself as an MCP server — with scoped tokens and an audit table — so Claude can read and drive your inventory directly. It's a small piece of code with a large implication: the same product surface serves a human tapping a screen and an agent doing it on their behalf, without a bespoke integration for each. This is the pattern the University's Production MCP module teaches; it's running here first.

Change the primary key while the lights are on

The codebase migrated from Long to String UUIDs — a change that touches every entity, every route, and every screen across four surfaces at once. It's recorded as a standing rule in the repo's own guidance ("all new code must use String IDs") rather than a one-off commit message, because a half-migrated ID type is the kind of thing that silently reappears in the next feature someone writes.

The stack.

One Supabase backend, several front ends:

React 18
Vite
TypeScript
TanStack Query
Tailwind 4
Framer Motion
Supabase
Edge Functions
PostgreSQL
Stripe
Sentry
Vercel
Kotlin + Compose
Expo / React Native

Supabase carries Postgres, auth, and the edge functions, so the four front ends agree on one backend instead of each inventing its own. The web app deploys to Vercel; five GitHub Actions workflows handle edge-function deploys, migrations, linting, and generated item imagery. The Android build is native Kotlin with Jetpack Compose because background geofencing is a place where a cross-platform abstraction costs more than it saves.

The results.

In beta on the web. Build numbers, counted from the repository — Remme is early, and a fabricated user count would be worth less than an honest one.

38
Routes in the web app, 11 of them premium-gated.
15
Supabase edge functions over 15 Postgres tables.
184
Automated tests across the web and Android surfaces.
49
Active build days, across 255 commits.

What it looks like.

What the work looks like.

Remme is a PickBits product — the place where patterns from the University tracks get used before they're taught, on something with real users and real geofences. If you want that pointed at your build, scope it on a free 30-minute call.

Want this for your business?

Built in Phoenix.
Shipped to production.

One operator, end-to-end — design, build, ship, hand off. Remme went from an idea to a working memory assistant with an agent-callable API. Yours could be the next one on this page.