Projects > Ricordea
Ricordea: Family memory time-capsule: record, share, and search stories across generations.

Ricordea

Family memory time-capsule: record, share, and search stories across generations.

Year
Jul 2026–present
Status
Live
Platforms
iOS · Android · Web · Cloudflare · GCP
Type
Web, Mobile, AI/ML
Role
Sole developer
Links
Web ↗

My son overlapped with my father for only a few short months, and our family story is something he doesn't know much about. I wanted a place where the stories themselves, told in the tellers' own voices, outlast the telling. Ricordea is private by design; it's for my family (and perhaps a few others).

Ricordea is a private family memory app where relatives record voice memos, photos, and written stories. The guiding idea is a time capsule: memories build up over years and surface for future generations. Ricordea runs on iOS and Android, with a limited web interface for invited guests.

Search is a central feature. Families can find memories by keyword, with filters for who is in them, tags, place, and date. Families can also opt in to search by meaning, so a plain question turns up the right memories even when the exact words do not match.

The app is built to work without a connection: a memory recorded offline is saved and uploads on its own once the phone is back online. Because families often span languages, voice recordings can be transcribed and translated on demand or automatically, with each person's own languages deciding when a translation is offered.

Features

  • Record voice, photo, and text memories, and choose exactly who in the family can see each one
  • "Ask someone": send a relative a question or a photo to talk over; their answer comes back as a memory linked to yours
  • Search the whole archive by keyword, or ask a plain question and the right memories turn up even when the exact words do not match
  • Voice recordings are transcribed in the language spoken; translations appear when a memory is not in a language the reader knows
  • Record anywhere: memories captured offline save immediately and upload on their own when the phone reconnects
  • A guided interview asks follow-up questions that adapt to each person and their story
  • Save works in progress as drafts and review before publishing
  • Comment and react to family memories
  • A weekly digest surfaces recent memories to the family
  • Invite someone outside the family with a one-time link: they record or write from any browser, no app install, and the link expires on its own
  • Same app on iPhone and Android

Under the hood

681Files
103,406Lines of code
474Commits
Jul 2026–presentDev window
StackTypeScript · React Native (Expo) · Hono · PostgreSQL + pgvector · Google Cloud Run · Cloudflare Workers · Vertex AI (Gemini · text-embedding-004) · Google STT v2 Chirp · sharp · FFmpeg · Terraform · pnpm workspaces
InfraGoogle Cloud Run (API) + Cloud SQL Postgres + GCS (media); Cloudflare Workers (guest web); EAS (mobile builds); Terraform IaC for dev/staging/prod
Notable
  • Offline-first sync engine with a durable on-device outbox: mutations enqueue as typed ops with dependency ordering, uploads resume across app kills, and the server keeps a ledger of already-applied operations so retries collapse into exactly-once application; stale edits arriving out of order become harmless no-ops
  • Authorization lives in Postgres, not TypeScript: the API downgrades to an unprivileged role and every read and write is enforced by row-level security policies across three privilege planes (viewer, writer, privileged system ops); a negative-write test matrix proves illegal writes die at the database boundary
  • Two search layers: keyword full-text search for all families, plus meaning-based (pgvector) search enabled per family behind organizer consent, with embedding backfill and purge on toggle; embedded chunks carry the source entry's audience rule, so semantic retrieval respects the same sharing permissions as everything else, and a query parser turns plain-language questions into structured filters with every id validated against the family roster
  • The adaptive interview keeps an append-only question-and-answer ledger; once the stable prefix passes ~5000 tokens it moves into an explicit Vertex context cache and each turn sends only the new suffix, holding per-question cost roughly flat as interviews grow, with a content-hash guard invalidating the cache when an earlier answer is edited
  • Media pipeline is color-managed and transcript-first: photos transcode via sharp to Display-P3 renditions with ICC profiles preserved and HEIC decoded; video extracts the audio track first and queues transcription before the visual encode starts, so the transcript lands in seconds, and compatible videos remux without re-encoding
  • Translations cache by content hash and target language, with script-aware passthrough (Traditional and Simplified Chinese stay distinct, regional English variants collapse) and single-flight coalescing so concurrent readers trigger one model call
  • Guest contributions use one-time links with the token in the URL fragment, so it never appears in server logs; the server stores only a hash, links expire in 48 hours, and guest submissions land as drafts for the asker to review
  • Tests across API, auth, search (full-text and semantic), embeddings, sync engine, and storage adapters; a three-member test family end-to-end sequence is the canonical integration check

The original prompt

Ricordea began as a stream-of-consciousness spec written before any code. Reproduced verbatim below, it is the seed everything above grew from. This prompt was dictated while I was in the car, driving.

A family-first connected app that guides individual members in recording specific memories that become a time capsule for future generations. This could start with an extensive interview that is voice recorded or typed, based on user preference, so each person gets this interview in an age-appropriate way when they sign up. Also, images and videos could be added, but I think the dictated answers would be the core of what gets recorded over time.

The interview process would need to be adaptive. While there may be a set of questions that are used to seed the interview, they are really topics that will have to be figured out that can be used to get a good snapshot of a person at that moment, in the moment of starting to use the service. The interview process should then be dynamic, based on answers after that point, until a certain number of questions has been reached.

After that, there would be reminders to do periodic snapshots based on questions that are either canned in a formulaic way but also adaptive based on the existing timeline, or questions that can be seeded by other members of the family group based on interests. For example, for the older generation, common questions would be about their young life, the questions that kids never ask their parents until it's too late. These sorts of things could also be proposed or suggested to family members so that they are given ideas to then pose to other family members.

Family members could also upload or take pictures and talk over them. Each time this happens, there should be a standard template so that there is guaranteed context. For example: date, time, location of the picture, who's in it. That sort of thing. Then, they would be free to talk over it in an unstructured way.

Each person would have a proxy that could be used to have discussions about the things in their lives. There could also be a family archiver entity that serves to communicate about the whole family at once. There may need to be gating so that specific topics are off-limits for certain family members or, say, family members under a certain age. That way, people could speak freely about topics that might be inappropriate for young people or for certain members of the family. This is just to say that each person should have full control over the permissions for what can be and can't be disclosed to other family members.

The app would perhaps be free for local storage. I'm not sure how syncing would work, but the way the company would survive would be to offer cloud-based storage with the most recent Frontier models available as upgrades, for example. In the future, we could imagine having avatars created for each family member based on newer technology, so that there could even be video calls with virtual versions of a family member.

As a first build, the core would be the ability to register as individuals and join a family group. There would be an initial set of questions to seed each member. There would be the ability to record arbitrary memos in the moment, which could be audio only or video from a phone, for example. Also, there should be the ability to upload a picture or video to speak over and to be able to send pictures or videos to other family members as a request for them to speak over those pictures or videos. Family members should also be able to record audio requests to send to other family members. These would be transcribed, but the original audio would always be readily available. There should also be the ability to send a URL to speak over. These URLs should be captured in a snapshot based on time so they are immutable in case they are taken down or changed later.

Storage in the cloud needs to be extremely secure. There should be an option to use end-to-end encryption, but of course this is dangerous, so there need to be very clear disclaimers given when this is the case. Otherwise, the keys would also be available from the company in case people forget passwords.

The app itself should show a timeline of new entries to each family member based on their respective access to other family members' content. The inspiration for this is something like family iMessage threads, where pictures are shared daily along with light commentary. There should just be a feed for this so that you can always see what your family is up to, but all of the entries would be seeding a larger family archive that is durable over time and can be called upon to understand a person's life.