Tether - personal relationship manager

The project is live here: Tether

This case study is still a work in progress. It will get moved to my portfolio once it is finished.

up next

case study

Context

Most people rely on memory to maintain relationships—and memory can be unreliable.

Existing tools don’t solve this well. CRMs optimize for transactions and pipeline, notes apps store information passively, and messaging history is fragmented and hard to revisit.

I wanted to create a system that actively supports remembering what's important about, and to, people: who someone is, how we know each other, and what to remember before the next conversation.

Tether is a personal relationship management system designed around that idea.

Problem

Relationship data is fundamentally difficult to model:

There isn’t a clear pattern for balancing:

Audience

People who:

Features

Approach

I approached Tether as both a product and systems design problem.

Schema-first foundation

Before building UI, I defined user stories (Gherkin-style) and designed the data model around:

This allowed me to handle:

Starting with structure reduced rework later when edge cases appeared (e.g. overlapping events, timezone boundaries).

Core loop

Instead of building around features, I focused on a tight loop:

  1. Capture: log interactions quickly
  2. Timeline: organize events across people
  3. Recall: surface relevant context before future interactions

AI as an assistive layer (not the product)

AI sits on top of structured data, not in place of it.

Use cases:

Example:

After logging a few interactions, the system may suggest:

These are:

Trust and control

Because this data is personal, I treated trust as a product requirement:

Stack

Schema changes are managed via migrations to keep local and deployed environments aligned.

Key features & decisions

  1. Database design: Keep Postgres and row-level security in mind from day one.
  2. Timeline and multi-person interactions: I centered the model around interactions rather than static profiles, since relationships evolve through events over time.
  3. Traceable AI outputs: Users should always understand where information comes from.
  4. Privacy-first AI design: Personal information should never be shared with the AI.
  5. Fast capture: Reduced friction (e.g. keyboard shortcuts, voice-to-text, quick log) to improve input quality and product stickiness, which directly impacts AI usefulness.

Outcome

Tether evolved from a roadmap into a working application with:

Additional improvements (rate limiting, schema migrations, lint/build discipline) pushed it beyond a prototype toward something usable day-to-day.

Takeaways

related