FridgeShare

Self-hosted  ยท  MIT License  ยท  Docker Compose  ยท  Node 20+

A shared board
for your household.
Runs on your server.

Sticky notes, letter magnets, photos, and drawings โ€” shared with the people in your house. No accounts, no cloud. Boards are plain JSON files stored on your hardware.

Board Directory localhost:4173

Kitchen

/b/kitchen

2 min ago โ†’

Grocery List

/b/grocery-list

3 hr ago โ†’

Family

/b/family

yesterday โ†’
+ New board

What goes on a board

๐Ÿ”ค

Letter magnets

Colorful alphabet tiles with style presets and size controls

๐Ÿ“

Sticky notes

Text notes with paper styles and custom colors

๐Ÿ“ธ

Photos

Upload images with optional captions and frame styles

๐Ÿ˜€

Emoji magnets

Large emoji tiles for quick reactions and decoration

โœ๏ธ

Drawings

Dry-erase style sketches directly on the board

๐ŸŽจ

Themes

Swap the fridge surface between curated styles

Stored as plain JSON in data/fridges/<slug>.json โ€” readable, backupable, no proprietary format.

How it's built

Shared editing
The full board URL contains a #token fragment. Anyone with it can edit; anyone without it sees the board read-only.
Named boards
Boards live at /b/kitchen-board style URLs โ€” bookmarkable, human-readable, permanent.
Admin token
Set SELFHOST_ADMIN_TOKEN before going public. Without it, anyone who reaches the server can create or delete boards.
Image uploads
Photos are stored on disk as immutable assets referenced by opaque IDs. Board JSON stays small.
Zero npm dependencies
The server has no production npm dependencies. Node 20+ and a filesystem is all it needs to run.
Rate limiting
Write operations are rate-limited per client per board. Configurable for busier setups.
Local mode
The /local route runs a browser-only board backed by localStorage โ€” useful for single-device use.
Unraid community app
Listed in the Unraid Community Applications store for one-click NAS installs.

Sharing model

Every board has a slug and an edit token. The token lives in the URL fragment โ€” browsers never send fragments to the server, so it stays private until the client deliberately sends it when saving.

Board URL

https://your-server/b/kitchen-board#abcdef123456...

with #token โ†’ edit

Anyone with the full URL can change the board. Treat it like a password.

without #token โ†’ view only

Anyone can see it. No one can change anything.

1

Create a board

Open the directory, keep the suggested slug or pick your own.

2

Bookmark the edit URL

The returned URL with the #token is your edit link. Save it.

3

Share a read-only link

Same URL, remove everything from # onward. View-only.

Lost the edit token? Recover it from data/fridges/<slug>.json โ€” look for "editToken".

Get started

Run it with Docker Compose.

Docker Compose is the recommended path. It builds FridgeShare directly from the repo's master branch, mounts a data volume at ./data, and starts on port 4173.

bash

# download the compose file

$ curl -fsSL https://raw.githubusercontent.com/Nacho-Labs-LLC/fridgeshare/master/docker-compose.yml -o docker-compose.yml

$ docker compose up -d

# board directory at http://localhost:4173

Contributor override

If you cloned the repo locally, use the override compose file to build from your checkout instead of GitHub.

docker compose -f docker-compose.yml -f docker-compose.build.yml up --build -d

Admin token

Generated automatically on first start. Retrieve it any time:

cat ./data/.admin-token

What it doesn't do.

No accounts.

No sign-up, no login, no session management. Board access is granted by the URL fragment. Lose the token, look it up in the JSON file on disk.

No cloud dependency.

The server stores board state as JSON files on disk. No managed database, no external API, no service that can change its pricing or disappear.

No telemetry.

The app makes no outbound network calls. Nothing phones home. Your board activity stays on your hardware.

No version lock-in.

Board files are plain JSON with a documented structure. Read them, back them up, and migrate them without any special tooling.

For public deployments: set SELFHOST_ADMIN_TOKEN and back up the data/ directory. Everything else is optional.

FAQ

Do I need a domain name or SSL?
No. It works fine on a local IP or hostname inside your network. If you expose it publicly, put it behind a reverse proxy that handles SSL โ€” Caddy or nginx both work well.
Do I need an account to view or edit a board?
No. Editing is granted by the full URL including its #token fragment. Viewing is the same URL without the fragment. There are no user accounts.
How do I back up my boards?
Back up the entire data/ directory. It contains boards.json (the directory), fridges/<slug>.json (board state), and uploads/ (image files). A simple tar -czf backup.tgz data covers all three.
Can multiple people edit at the same time?
Changes from multiple editors are merged using patch operations. The last writer for any individual item wins. It handles concurrent household use well โ€” it is not built for real-time collaborative document editing.
What if I forget the admin token?
If you did not set SELFHOST_ADMIN_TOKEN via env, a token was auto-generated on first startup and saved to data/.admin-token. Retrieve it with: cat ./data/.admin-token
Can I run it on a Raspberry Pi?
Yes. The server is plain Node.js with no native addons. Multi-architecture Docker images are available. A Pi 4 with 2 GB RAM is more than enough for household use.