跪拜 Guibai
← Back to the summary

This open-source 'digital journal' is a full private app for anniversaries: Live Photos, timed secrets, and a genuine lock

Recently I vibecoded a small project for my girlfriend, a little surprise for our anniversary: a digital journal that only the two of us can see. Text, photos, Live Photos, videos, voice memos, letters can all be pasted in. The pages use a cream-paper plus Polaroid journaling style, designed mainly for phone screens. The whole thing is locked; you need a password to get in, and search engines are blocked. I plan to give it to her as a surprise someday.

If you want to make something for your significant other, feel free to take this and modify it.

Repo: https://github.com/zhangzhiwei0905/our-little-planet

Demo: https://app.amazingzz.xyz

Here are a few beta codes (if they're used up, comment and message me):

RUXWLMS3

UXRXL9Y6

5G4TZX2U

M2U7MBRU

2X8S982G

image.png

image.png

The photos in the screenshots are from the Picsum library; the text and voice are demo data.

What's inside

Journal. Two kinds of pages. A normal page is a paragraph of text with a few photos or videos, plus a mood sticker. The other kind is a 3:4 free collage page; text, images, and stickers can be dragged around and resized freely, and you can even draw directly on the page with a brush. Page turning feels like flipping a book; swipe left/right or use arrow keys.

image.png

Album. A wall of Polaroids. I spent the most effort on iPhone Live Photos: upload a same-named HEIC and MOV together and they automatically pair into a Live Photo; .livp files are also automatically split apart. Long-press on the wall plays the movement. HEIC is automatically converted to JPG and sorted by shooting time from EXIF into the corresponding date. The handwritten line under each photo is the description, editable anytime, and tags can be used to filter.

image.png

She can reply to you. The journal is not one-way. At the end of each page there's a dashed stamp mark; she taps it and it becomes a red stamp saying "She read this · date". Below that is a reply box where she can send text, emojis, and images; GIF stickers animate too. In the backend there's a "her traces" section; which replies she made and which pages she stamped are all listed in time order and can be reviewed.

image.png

Easter egg. This is my personal favorite. You can bury a surprise in advance, set a reveal date and a separate password. Before the date arrives, this easter egg does not exist at the API level; it's not just hidden in the frontend, F12 won't find it either. On that day, if she enters the right password, first comes the cover, then the photo wall you chose, and finally a long letter. She can also draw handwritten notes on each photo, and you can see what she drew in the backend preview.

image.png

A few other miscellaneous things:

image.png

iPhone Shortcuts. An /api/quick endpoint exists, authenticated with a separate token, separate from the backend password; if it leaks, just replace it. When she says something funny in WeChat, run a shortcut and it's saved into the quote wall; multi-select a few photos in the album and one step sends them as a journal entry. Large videos (up to 2GB) use presigned direct upload; if OSS is configured, files go straight from the phone to OSS without passing through the server. The repo docs contain step-by-step instructions for setting up the shortcuts.

Tech stack

Next.js 16 + React 19 + Tailwind 4, data is a single SQLite file (better-sqlite3), images use sharp, audio/video relies on ffmpeg. Media is stored locally in data/media by default, and Alibaba Cloud OSS can be connected. The font is LXGW WenKai, fully self-hosted, so it loads fast domestically.

Backup is simple: just copy the data/ folder.

Running it

Requires Node 20+, and it's best to have ffmpeg installed.

git clone https://github.com/zhangzhiwei0905/our-little-planet.git
cd our-little-planet
npm install
cp .env.example .env.local   # use openssl rand -hex 32 to generate an AUTH_SECRET and fill it in
npm run seed                 # load a sample journal
npm run dev                  # http://localhost:3000

Default reader password is 0520, author backend password is write-for-her, change them before going live. For deployment a lightweight server is enough; use pm2 to run the service, Nginx reverse proxy with HTTPS, the README has Nginx config examples and deployment scripts for local build and remote replacement, so small-memory machines don't need to build on the server.

There's also a demo mode: all data runs in memory, resets automatically every few minutes, visitor uploads get replaced with built-in samples, and nobody can mess it up. If you want to show friends the effect but worry about them writing nonsense, turn this on.

Finally

MIT license. Bugs or ideas welcome via issues and PRs. If you think it's interesting, a star would make me happy. Feel free to take it and make one for someone you care about.