Skip to content

Case study

Ketchup

People lose touch when work gets busy and a postponed message turns into several weeks. A phone's address book remembers the number, but not when two people last spoke or how often they wanted to…

Ketchup mobile app shown in a premium phone mockup

A small reminder for relationships that matter

People lose touch when work gets busy and a postponed message turns into several weeks. A phone's address book remembers the number, but not when two people last spoke or how often they wanted to reconnect.

Ketchup turns that gap into a lightweight personal routine. Users choose the people they want to stay close to, set a comfortable contact cadence, and see who is caught up or due for attention. A planned call or message is a "ketchup," and each relationship is represented by a tomato moving through simple stages of ripeness.

Priority Soft built the mobile experience, relationship model, scheduling, messaging workflows, and subscription support. The hard part was keeping the product useful without turning friendship into sales software or making every human connection feel like a task overdue.

Remembering cadence, not scoring friendship

Each relationship has its own rhythm. A user may want to call one close friend each week and another after a longer gap. Ketchup lets them set the cadence for each person.

The application combines the chosen cadence with the date of the most recent contact. From that, it places the relationship into a clear state: caught up, ready for another conversation, overdue, or long overdue.

Ketchup treats each state as a prompt. It does not grade a friendship or claim that a late call means it is failing. It tells the user when their chosen interval has passed.

The tomato language softens what could otherwise feel like a demanding productivity tool. Ripeness is easy to scan and memorable enough to make the model work without a dashboard full of dates and percentages.

A home screen organized by attention

The Ketchup home screen moves relationships that need attention toward the top. Users can scan who is caught up, ready for contact, or overdue.

The information stays attached to the person. The last contact and preferred rhythm provide context, while the next action remains simple: reach out now or plan a time.

The ordering changes as contact is recorded. A completed conversation moves the relationship back to its caught-up state, and the cycle begins again based on that person's cadence. Spontaneous contact can be recorded too; users do not have to schedule every interaction in advance for the history to stay accurate.

Ketchup remembers enough timing to support the next conversation. It does not ask users to maintain the detailed records of a traditional contact-management system.

Planning contact around real availability

A reminder has little use when it arrives at a bad time. Ketchup lets users set days and hours when they are open to a call or message.

Users define preferred windows, expected duration, and how many contacts they want to plan in a week. Ketchup uses those boundaries when coordinating a call or message.

Availability and relationship cadence remain separate. Cadence records how often the user wants to reconnect. Availability records when they can do it. A busy week does not change the cadence assigned to a friend.

The schedule guides the user without acting as a rigid calendar. A spontaneous call can still update the relationship status.

Messaging that helps coordinate the moment

Ketchup uses SMS for parts of onboarding, reminders, check-ins, and coordination. Text messages let users handle supported steps through a familiar channel.

Server-side workflows handle outbound prompts and inbound replies. The mobile app and messaging layer share relationship context, so each reminder refers to the planned contact.

A common adapter supports several messaging providers. Users do not need to know which service carried a text.

Message content and phone numbers remain private. Public product information can explain that SMS supports coordination without exposing conversations or the contact relationships behind them.

A small contact model

Ketchup could have collected birthdays, interests, notes, social feeds, and relationship analytics. Those fields would add maintenance without helping the user make the next call.

The central model stores the person, preferred contact method, cadence, recent contact, current status, and any planned ketchup.

That restraint makes adding a relationship quick. It also reduces the amount of personal information the application needs to hold. Users can recognize the friend and understand when they wanted to reconnect without building a private dossier.

Profile and account screens provide the surrounding controls, but the home experience returns to people and timing. The product stays closer to a reminder from oneself than a database to be maintained.

A subscription tied to the size of the habit

Ketchup allows users to begin with a smaller set of relationships and offers a subscription when they want to manage more. The free limit gives the user a way to understand the routine before deciding whether it deserves a wider role.

Purchase status controls the contact allowance through the account model. Apple and Google purchase flows update premium access, and the interface explains when the current list has reached its available size.

The subscription does not change how relationship status is calculated or make one friend more important than another. It expands the number of people the user can include while preserving the same cadence and scheduling model.

The user pays to include more people in a routine they already know. Premium access does not add unrelated tools to the contact flow.

Privacy for a personal contact graph

A list of close contacts, phone numbers, availability, and communication history is sensitive even when the app holds no message transcript. Ketchup needed clear boundaries around identity and data access.

Phone-based registration connects the user's account to the mobile experience. Supabase authentication and data services support account access, while server-side functions handle messaging and purchase events without placing private provider configuration in the app.

Relationship data belongs to the person who created it. The product has no public feed and does not expose who is overdue to anybody else. SMS coordination uses only the information needed for that interaction.

Account and service permissions protect names, numbers, schedules, messages, and purchase records.

A focused Flutter and Supabase foundation

Ketchup is built with Flutter and Dart for iOS and Android. Riverpod manages application state across registration, contacts, relationship status, scheduling, profiles, and purchases. Supabase provides authentication, structured data, storage, and serverless functions.

Server-side functions support onboarding, reminders, inbound messages, check-ins, and purchase updates. Messaging adapters keep provider behavior outside the relationship model. The mobile purchase layer applies the same premium status across both stores.

The architecture uses a compact domain model. A contact has a cadence and last-contact state. A ketchup represents planned or completed interaction. Availability constrains scheduling. Subscription status affects capacity.

The user sees a short list and a timely prompt. Behind it, the app maintains timing, messaging, purchase, and account state.

Priority Soft's role

We defined how cadence becomes status, how spontaneous and planned contact affect the same relationship, and how availability guides scheduling without controlling it.

We kept the experience focused on reconnecting. Messaging and subscriptions support that moment without turning Ketchup into a general-purpose personal CRM.

Our work gave Ketchup a complete mobile foundation capable of remembering what people struggle to remember on their own, then getting out of the way when the conversation begins.

The outcome

Ketchup became a mobile product for maintaining a small relationship habit. Users choose their people, set a cadence, see who is due for attention, plan around availability, and record contact when it happens.

Priority Soft built the application so the mechanism stays light. It remembers the interval, supports the message or call, and lets the friendship remain human.

Plan the next version

Need help with a new product or its next release?

Bring us the idea, the workflow, or the product that needs work.