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.