Building Nook
A quiet photo diary that records feelings as colors. Every entry is private by default, and you open up only as much as you want. I wrote this from the repository's README, docs, code structure and git history (main, as of October 6, 2026).


Entries
- Twelve feelings are recorded as colors: happy, love, excited, grateful, calm, proud, sad, lonely, hurt, anxious, angry and tired. It was cut to 7 at one point, then became 12.
- One entry can hold up to 10 photos, and takes the date and location from the first photo. On upload, the long side is reduced to 2560px.
- There are 11 film filters plus the original, the 1:1, 4:5, 3:4 and 16:9 ratios, and a Polaroid frame.
- Up to 10 hashtags, visible only to you. The server does not send them to anyone else.
- You can import photos from the gallery in bulk, with their dates and locations as they are.
Looking back
- Calendar: each day builds up as a grid of photos and colors, filtered by feeling, person or tag.
- Year in review: a 365-day feeling heatmap for each year, plus the feeling you stayed in most, the places you went often and the people you were with.
- Bookshelf: albums that gather similar entries. Auto-made bookshelves were removed after feedback that they could not be deleted.
- Sealed envelope: not even you can open it before the date you set.
How visibility is decided
You can see an entry if you wrote it, if it is public, or if you were with the writer and are still friends. Every read path uses the same check. There is no separate visibility column. It looks at the public flag and the tags together.
If you unfriend someone, they lose access right away, but the tag record stays. If you become friends again, access comes back. Turn on See it as someone else to check how your home looks to you, to people you were with, and to everyone. Entries they cannot see show faded, and bookshelves show as M of N.
Structure
- The server is split into 21 domain packages, including admin, auth, calendar, bookshelf, feed, friends, photos, notifications, entries and sealing.
- The app wraps the Next.js static build in a Capacitor WebView. There is no iOS build yet.
- Photos go straight to S3 through signed URLs without passing through the server. The app makes 600px thumbnails itself.
- DB changes are Flyway V1 to V7, and production does not use automatic schema changes.
- Old app versions get a full-screen update notice. If the check fails, it does not block.
- main is production and dev is development. Actions handles the build, ECR, SSM deploy and health check.
Version history
| Version | When | What |
|---|---|---|
| First commit | 2026-05-05 | MVP |
| 1.0.7 | 2026-08 | Friend comments, entry reminders, video uploads stopped |
| 1.0.8 | 2026-09-11 | See it as someone else, invite links |
| 1.0.9 | 2026-09-30 | Sign-up screen fixes |
| 1.0.10 | 2026-10-04 | English support |
| 1.0.11 | 2026-10-05 | Character themes, new logo |
| 1.0.12 | 2026-10-06 | Better shared feed |
Problems I ran into
- The thumbnail server loaded originals into memory and kept restarting: switched to making thumbnails in the app (June).
- DB constraints blocked new values: removed 8 constraints and turned off automatic changes (July).
- Bulk import saved the same tag at the same time and caused 500 errors: switched to an INSERT that ignores conflicts (July). The docs note that concurrent requests still need separate testing.
- Made concurrent device token registration atomic (July).
- An input field width issue on the sign-up screen shrank the whole screen: fixed in v1.0.9 (September).
- A CI build that finished late overwrote the latest APK: blocked with a cancel setting (October).
- Fixed late search responses overwriting newer results, and the menu misfiring when you let go after a long press (October).
Tools and numbers
274 of 389 commit messages have a Claude co-author line. That is a count of lines and does not mean a share of the work. Errors go from Sentry to Slack.
| Item | Value |
|---|---|
| Commits | 389 |
| PR numbers | Up to #95 |
| App | Next.js 16, Capacitor 8, Tailwind v4 |
| Server | Spring Boot 4, Java 25, PostgreSQL 17 |
| DB change files | 7 |
| Server test files | 12 |
There is no frontend unit test framework yet.
Next
The items in the plan, with no dates, are groups of people you were with, share cards in story ratio, a home widget, data export, and iOS.