A keep in touch board built on your Google Contacts

By General Input

See which relationships are going cold, set how often you want to reach out to each person, and let the board sort itself from then on.

Integrations

  • Google Contacts
  • Gmail
  • Google Calendar

Type

App

Categories

  • Personal Productivity

Build me a keep in touch app on top of my Google Contacts. My address book stores people but tells me nothing about which relationships are going cold, so I want a persistent board I open and work out of, showing the people I have chosen to stay close to and how overdue each one is. This is not a scheduled digest and nothing gets posted to chat. It is a surface I visit, and the only thing that runs on demand is a drafting agent I trigger from a button.

The home screen is a board with three columns: Due now, Due soon, and In good shape. Every person I have added to the board sits in exactly one column, decided by comparing the last time we actually talked against the touch cadence I set for that person. I pick the cadence once per person from monthly, quarterly, or twice a year, and the app remembers it, so from then on the board sorts itself every time I open it. Within Due now, put the most overdue people first. Each card shows the person's name, photo if there is one, their email address, the cadence I chose, and how long it has been since we last spoke in plain language like 'last spoke 4 months ago'.

I add people to the board through a searchable picker. Populate it from Google Contacts using List Contacts, and also include people from List Other Contacts, which is the pool of people I have emailed but never formally saved. Let me filter the picker by label using List Contact Groups so I can pull in, say, everyone tagged Friends or Investors. Use Search Contacts and Search Other Contacts to power the type ahead as I type a name. Remember that Google Contacts reads require a personFields or readMask parameter, so always request names, emailAddresses, photos, and memberships. Being in my address book does not put someone on the board. The board is only the people I explicitly add, because the whole point is that I have chosen these relationships.

The last contact date on each card is computed by a handler, not entered by me. For a given person, query Gmail List Messages for their email address to find the most recent message either direction, and query Google Calendar List Events for meetings we both attended, checking the attendee list for their address. Take whichever of those two is more recent and treat that as the real last touch. Use Get a Message to pull subject lines and dates for the messages List Messages returns, since that operation gives back only message and thread ids. Cache the computed result so the board loads fast, and give me a refresh control to recompute a person on demand.

Opening a card shows me context before I reach out: the subject lines of the recent email threads with that person, each with its date, and the titles and dates of recent meetings we both attended. I want enough to remember what is going on with them without leaving the app and digging through Gmail.

Put a 'Draft a check in' button on every card. It kicks off a background agent for that one person. The agent reads our recent Gmail history using List Messages and Get a Message, works out what we last actually talked about, and writes a short personal note that references that specifically rather than a generic hello. It should sound like a human being who remembers the last conversation, and it should be short. The agent saves the note as a real draft with Gmail Create a Draft, addressed to that person, and then posts the draft text back into the card so I can read it in the app before deciding to open Gmail. Show me when a draft already exists for someone, and let me re run the agent to get a fresh version, updating the existing draft with Update a Draft rather than piling up duplicates. Use List Drafts to reconcile if a draft was deleted in Gmail directly. Never send anything, only ever draft.

I need two escape hatches on every card. First, snooze: push a person out by a few weeks when now is not the right moment, and they drop out of Due now until the snooze expires. Second, mark as contacted: when the conversation happened somewhere the app cannot see, like a phone call or lunch, I tell it we spoke and the cadence clock restarts from today. Let me change someone's cadence at any point, and let me remove someone from the board entirely without touching their contact record.

One important design point: the cadence, the snooze state, the manual contacted marks, and the board membership itself are all app owned data. Store them in the app. Do not try to write any of it back onto the Google Contacts record as custom fields or notes. Google Contacts is a read only source of who these people are and how to reach them, and everything about the relationship cadence lives in the app.

Related prompts

Explore more prompts
Win back LiveChat visitors whose chats went unansweredFront desk appointment confirmation board for the next 3 daysChase the paperwork every new client and vendor still owesFile Gmail attachments into storage with names you can findCandidate rediscovery desk for your archived Lever applicantsLaytime and demurrage claim workspace for chartering opsKajabi customer support console for member access fixesRun your application review round on Jotform submissionsAppointment confirmation board built on WhatsApp repliesRun your nutrition clients' weekly meal plans from one console