11

A relationship CRM with an AI assistant

The whole product · idea, code, localisation, deploy

Everything you know about a person, in one place. A brief assembled from your own notes arrives before a meeting, and reminders surface on their own when you haven't spoken to someone in a while.

A relationship CRM with an AI assistant

How it worked before

What you knew about a person lived in your head and in old chats. Before a meeting you scrolled back to remember what was agreed last year. Someone who mattered would quietly drop out of sight for six months.

What made it hard

Personal data about people, two locales, and reminders that have to arrive on time and exactly once. Plus an optional Telegram: the product must work fully when the bot is not connected at all.

Engineering decisions

  1. 01

    Translation parity is enforced by a test

    The keys of both locales are compared automatically: you cannot ship a screen where half the strings were left untranslated.

  2. 02

    Every inbound entry is signed

    The webhook checks a secret header, the reminder cron endpoint checks a token. Without a token the whole bot path switches off cleanly instead of failing.

  3. 03

    Two database connection strings

    A pooler for the runtime, a direct connection for migrations — otherwise migrations on serverless will one day stall at the worst possible moment.

Where it stands

A contact is no longer lost simply because you forgot about them — the system remembers first.

Notes about a person
everything you know about them
Brief before the meeting
assembled from your own notes
The meeting
you remember last year's agreement
New notes
the loop closes
Haven't spoken in a while
the contact quietly goes cold
A reminder
the system remembers first
The top row is what works by itself. The bottom row is what the product exists for: a contact is lost not because they stopped mattering but because they were forgotten.

Got something like this?

Get in touch