DEV Community

David Nizeyimana
David Nizeyimana

Posted on

Between Us: a private diary for two people who live far apart

Hacktoberfest Weekend Challenge: Build for a Friend Submission 🀝

This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend

What I Built

Between Us is a small private diary for me and my pen pal, someone I've loved for a very long time who now lives far away. We used to talk face to face. Now we write to each other here, in one shared feed, instead of in a chat app. We each log in with a name and a shared passphrase. My entries appear on the right and theirs on the left.

One rule shaped everything: your words stay yours. Entries are saved exactly as typed. The AI never rewrites or "improves" them, because the whole point is to hear each other's real voice.

A local AI adds three small things around the entries:

  • A question of the day in the entry box, in case you don't know where to start.
  • A verse in the header each day.
  • A short recap every Saturday night, written by Gemma and marked as AI-written. Sunday to Friday, there is no recap.

Demo

What my pen pal said when I handed it over: WRITE THEIR REACTION HERE, OR DELETE THIS LINE.

Code

Between Us

Scars leave beautiful traces.

A small private diary for two people who used to talk face to face and now live far apart. Each of you writes entries, and you read each other's in one shared feed.

Built for the Hacktoberfest Weekend Challenge: Build for a Friend.

What it does

  • Your words stay yours. Entries are saved exactly as you type them. No AI rewrites or edits them.
  • A question of the day. The grey placeholder in the entry box is a short question, written fresh each day by Gemma. You can answer it or write about something else.
  • "This week between us." Every Saturday at 9 pm, Gemma reads the week's entries and writes a short recap. It is always labelled as AI-written, so it is never confused with your own words.
  • Private. You log in with your name and a shared passphrase.
  • Your entries on…

How I Built It

The app is Node.js and Express, with EJS templates, plain CSS and PostgreSQL. The AI is Gemma 3, an open-weight model, running locally through Ollama. Nothing is sent to an AI service.

Gemma does three jobs:

  • Questions. It writes a fresh question each day. After someone posts, it writes the next question for that person in the background. A backup question shows up instantly, so nobody waits for the model.
  • Verses. Gemma only picks a reference, like Psalm 34:18. The text itself comes from a Bible API, so the model never writes scripture.
  • Recaps. Every Saturday at 9 pm, it reads the week's entries and writes a short recap. The prompt tells it not to invent anything, give advice, or rewrite anyone's words.

Background jobs run when the server starts and every 15 minutes after that, so if my computer was off at the scheduled time, the missing question, verse or recap is created when it's back on.

Why Does Open Innovation Matter?

A diary is the most private thing you can write, and this one is between two people. Running an open-weight model on my own computer means the entries never leave it. A closed API would have meant sending our private words to a server I don't control just to get a recap.

It also costs nothing to run and needs no account or API key. And because the model is a single setting (ollamaModel), I can swap it for another one by changing one line.

To be exact about what goes online: the only outside request is the verse lookup, and it contains a Bible reference, never anything we wrote.

Top comments (0)