cd /news/ai-tools/sarah-always-forget-what-she-said-be… · home › topics › ai-tools › article
[ARTICLE · art-145082] src=dev.to ↗ pub= topic=ai-tools verified=true sentiment=↑ positive

Sarah... Always Forget What She Said Before, So I build "PromiseKeeper" for Her

A developer built PromiseKeeper, a Next.js and MongoDB Atlas app that uses the Gemma 4 31B IT open-weight model via DigitalOcean Serverless Inference to turn casual conversation notes into structured promises with person, deadline, and status fields. Users log what they told someone, review the extracted details, and later query the app to recall what they promised. The developer said the project was a first hands-on use of both Gemma and DigitalOcean Serverless Inference, and kept the architecture simple to focus on a working product.

by read2 min views2 publishedOct 5, 2026

This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend I built PromiseKeeper for that friend who always says “Sure, I’ll do it” and then forgets about it.

The idea is pretty simple: instead of manually creating a task, you just write what happened in a conversation.

For example: “Sarah asked me to review her portfolio this weekend. I told her I’d do it by Sunday.”

PromiseKeeper picks out the important parts and saves them. Later, you can ask:

“What did I promise Sarah?”

And it reminds you.

[https://promisekeeper-q0l3.onrender.com/](https://promisekeeper-q0l3.onrender.com/)

[https://github.com/splmdny/PromiseKeeper](https://github.com/splmdny/PromiseKeeper)

The app is built with Next.js, MongoDB Atlas, Gemma 4 31B IT, DigitalOcean Serverless Inference, and Render.

This was actually my first time using both Gemma and DigitalOcean Serverless Inference, so I wanted to keep the implementation straightforward and focus on getting a working product rather than over-engineering it.

The interesting part is how the pieces work together:

I intentionally kept the architecture simple so the AI is solving the actual problem instead of adding unnecessary complexity.

The user flow is intentionally simple:

The user writes something naturally, for example:

“Andi asked me to help choose his new laptop this weekend.”

Gemma turns the message into structured information:

Person: Andi

Promise: Help choose a new laptop

Deadline: This weekend

Status: Open

The user reviews the result and confirms it. The promise is then stored in MongoDB Atlas.

The user can come back and ask:

“What did I promise Andi?”

PromiseKeeper searches the user's saved promises and uses Gemma to generate an answer based on those memories.

Once the promise is fulfilled, the user can mark it as completed.

So the whole loop is basically:

For me, Gemma isn't just a chatbot added to the project. It's the part that makes PromiseKeeper useful.

Using an open-weight model gives me more flexibility in how and where the AI runs. I can use serverless inference today, but the application isn't fundamentally tied to one closed AI provider.

That makes it easier to experiment, self-host, or change the inference setup as the project grows.

── more in #ai-tools 4 stories · sorted by recency
── more on @promisekeeper 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/sarah-always-forget-…] indexed:0 read:2min 2026-10-05 · —