DEV Community

Rebecca Ayodele
Rebecca Ayodele

Posted on

Say So: An Open-Source AI Assistant for the Replies You Keep Putting Off

Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady Submission 🦥

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

What I Built

Have you ever opened a WhatsApp message, read it, and then left it there—not because you don't care about the person, but because you just don't have the energy to reply?

Sometimes, you're overstimulated. You've already spent the day processing information, responding to people, and thinking about a hundred different things. Even opening another conversation feels like work.

Other times, you know you should reply. You just can't find the right words at that moment. You type something, delete it, try again, and eventually tell yourself you'll respond later.

And then there are the group chats. You open WhatsApp, see dozens of unread messages, scroll through them, get overwhelmed, and close the app without figuring out what you missed.

I've experienced this myself, and it got me thinking: what if replying to messages didn't always have to start from a blank screen?

That's why I built Say So, an open-source AI assistant for WhatsApp Web that helps take the effort out of replying without taking control away from you.

Say So focuses on two everyday communication problems.

1. Personalised replies for direct messages

The way I reply to a close friend isn't necessarily the way I reply to a lecturer, a colleague, or someone I've just met. I might use certain emojis with one person, switch between English and Nigerian Pidgin with another, or have a particular way of expressing excitement, agreement, or concern.

Say So is designed to use accessible conversation history alongside the current message and conversation context to build contact-specific communication profiles. These can capture patterns such as:

  • Tone, sentence length, and writing rhythm.
  • Common expressions, slang, and code-switching.
  • Emoji use, punctuation, and characteristic wording.
  • Differences in how I communicate with different people.

The goal isn't to copy old messages blindly. It's to use those patterns to generate replies that are relevant to the current conversation and feel more natural for the person sending them.

Rather than forcing one answer on the user, Say So presents three reply options. You choose the one you prefer, edit it if necessary, and send it yourself. Say So never automatically sends a message.

2. Summaries for unread group chats

Group chats can be even more exhausting. Sometimes, you don't need to read every message—you just need to understand what happened.

Say So is designed to summarise unread group discussions into a concise overview, key points, and action items, helping you catch up without manually working through every message.

The idea is simple: spend less time processing the conversation and more time deciding what actually needs your attention.

Demo

Demo video: []

Downloadable Chrome extension: [https://github.com/RebeccaAyodele/Say-So/releases/tag/v0.1.0]

Backend health check: https://say-so-3m9u.onrender.com/v1/health

Code

GitHub repository: https://github.com/RebeccaAyodele/Say-So

Say So is open source, and the repository contains the application code for developers who want to inspect, test, or extend the project.

How I Built It

Say So uses a TypeScript-based Chrome extension and a backend that connects the WhatsApp Web interface to AI-powered functionality.

The main technologies include:

  • Chrome Extension, React, TypeScript, and Tailwind CSS: Power the user interface, including the side panel and reply cards.
  • WhatsApp Web integration: Reads relevant conversation context from the active chat and supports inserting a selected draft into the message composer.
  • Gemma: Provides the language-model capabilities used for AI generation through OpenRouter.
  • Express: Handles requests between the extension and the AI service.
  • MongoDB Atlas: Supports persistent application data, including contact-specific communication profiles.
  • Supabase Auth: Supports authentication for users accessing features that require an account.
  • Render: Hosts the backend so the extension can reach its server-side functionality.
  • Sentry: Supports application error monitoring and debugging.

I didn't want the supporting technologies to be there simply to fill a list of tools. Each one has a role in the application: AI generation, persistent data, backend hosting, authentication, or reliability.

MongoDB Atlas is particularly relevant to the personalisation goal. Without useful contact-specific profiles, the experience risks becoming another generic AI reply generator. Render makes the backend accessible without requiring every user to run the server themselves, while Sentry helps investigate errors when something goes wrong.

The current inference implementation uses Gemma through OpenRouter. This means Say So requires an internet connection and sends the relevant request context to a hosted inference provider. It is not currently an offline, local-inference application.

Why Does Open Innovation Matter?

An AI-powered product doesn't become meaningfully open just because it calls a model with open weights.

For me, the more interesting opportunity is to make the application around the model open to inspection and improvement.

By open-sourcing Say So, I want developers to be able to examine how the extension interacts with WhatsApp Web, how conversation context is used, how contact-specific communication profiles are represented, and how the AI functionality connects to the rest of the application.

That creates room for people to experiment with better personalisation strategies, improve the quality of generated responses, add safeguards, or adapt the architecture to other communication platforms.

Gemma provides an open-weight model foundation that developers can build on under its licence terms. The application code makes the surrounding system available for others to study and extend.

A closed API might provide text generation, but an open application gives developers the opportunity to inspect and improve the surrounding workflow: context handling, personalisation logic, data management, and the safeguards that keep the user in control.

There is also an important limitation to be transparent about: Say So currently uses hosted inference through OpenRouter. Relevant request context is sent to that provider, so the application is not fully local or offline. Local inference could be explored in a future version.

I believe openness is most valuable when it gives other people something concrete they can understand, test, challenge, and improve—not just another product they can use.

The Lazy Payoff

The goal of Say So isn't to make people communicate less thoughtfully. It's to reduce the friction between wanting to respond and actually finding the words.

Instead of staring at a blank message box, you get a few starting points. Instead of manually catching up on every group-chat message, you get a structured summary. And instead of every reply sounding like it came from the same AI assistant, the system can use contact-specific communication patterns to make suggestions more personal.

You remain responsible for the final message. You can reject the suggestions, edit them, or write your own.

Sometimes, the most useful application of AI isn't doing something extraordinary. It's making an ordinary task feel a little less exhausting.

Prize Categories

  • Best Use of Gemma
  • MongoDB Atlas
  • Render

These are the categories I intend to highlight because they align with Say So's AI generation, persistent application data, and hosted backend.


Thanks for checking out Say So. The idea is straightforward: let AI help with the parts of communication that drain our energy, while leaving the decisions that matter to us.

Top comments (0)