Deploy Yuvomi Family Planner
Family calendar, shopping list, meal planning, chores and budget.
Yuvomi
Just deployed
/data
Deploy and Host Yuvomi on Railway
Yuvomi is a self-hosted family planner. Tasks, a shared calendar, shopping lists, meal planning, a household budget, notes, contacts, pantry tracking and chore rotas, all in one app, all on an instance you control. It is built for a household rather than a company, so everything is shared by default and scoped per family member where it matters.
About Hosting Yuvomi
Yuvomi is a single Node application backed by SQLite. There is no separate database server, no cache and no worker process, so hosting it means running one container with persistent storage attached and pointing a domain at it.
That simplicity is the appealing part and also the part that bites. The database, the scheduled backups and any uploaded documents all want to live on disk, and each of them defaults to a different path. Miss one and it silently writes into the container instead, where the next redeploy erases it. This template routes all three onto a single persistent volume, pins the port that the healthcheck probes, and turns on database encryption with a key generated for each deployment, so household health records and finances are not sitting in a plaintext file.
The app also expects to sit behind something that terminates TLS, and needs to be told so, otherwise session cookies and client IP addresses both come out wrong.
Common Use Cases
- A shared family calendar and task list that syncs two ways with iCloud, Google Calendar or Nextcloud, without handing a household's schedule to a third party.
- Weekly meal planning with a recipe library, exporting straight into a collaborative shopping list grouped by supermarket aisle.
- Household budgeting with recurring entries, subscription tracking, loans, split expenses and savings goals, kept private to the people in the house.
Dependencies for Yuvomi Hosting
- A container runtime that can pull a public image from the GitHub container registry.
- Persistent storage, since all application state lives in a SQLite file.
- HTTPS in front of the app, and a way to tell the app it is behind a proxy.
Deployment Dependencies
- Source repository: https://github.com/ulsklyc/yuvomi
- Container image:
ghcr.io/ulsklyc/yuvomi - Documentation: https://github.com/ulsklyc/yuvomi#readme
- Releases: https://github.com/ulsklyc/yuvomi/releases
- Licence: MIT
Implementation Details
This template deploys one service from ghcr.io/ulsklyc/yuvomi:1.86.3 with a
single volume mounted at /data, a public domain targeting port 3000, and a
healthcheck on /health.
Creating your account. A new deployment has no users at all. Open the deploy URL and it sends you to a setup screen where you create the first admin. That screen closes permanently once an account exists, so create yours before sharing the link. There are no default credentials to look up or rotate. Everyone else joins by invitation from within the app, and there is no open public signup to lock down afterwards.
Set your timezone. The TZ variable ships as UTC. Change it to your own
zone, for example Europe/Berlin. It decides due times on reminders synced over
CalDAV and events pushed to calendars that report no zone of their own.
Database encryption. The SQLite database is encrypted at rest with AES-256
using a DB_ENCRYPTION_KEY generated uniquely for your deployment. Do not
change or delete that variable. If it stops matching, the app refuses to start
and logs [DB] Wrong encryption key rather than damaging anything, and
restoring the original value brings everything back. If you would rather run
unencrypted, remove the variable before the first boot, while the database does
not yet exist.
Backups. A scheduled backup runs nightly at 02:00 and keeps the last seven
copies under /data/backups, on the volume. The image's own default writes to
a path that is not persistent, so this template overrides it. Yuvomi can also
upload backups to WebDAV, which is worth configuring since the volume is
otherwise your only copy.
Storage paths. Uploaded documents are stored inside the database by
default, which keeps them encrypted and inside the nightly backup. If you
switch to file storage, uploads land under /data/documents, also on the
volume.
Optional integrations, all addable later: the weather widget needs only coordinates and no API key, Google Calendar and Google Drive need an OAuth client you create yourself with a redirect URI matching your final domain, and email for password resets and invitations is configured inside the app.
Known limitations. Drop-in third-party modules load from a path inside the
image rather than the volume, so they need re-adding after a redeploy. SQLite
on one volume means a single instance, which is ample for a household. The
image tag is pinned rather than floating, because upstream sometimes ships
several releases in a single day; to upgrade, point the service at a newer tag
and redeploy, noting that registry tags drop the leading v from the release
name.
Why Deploy Yuvomi on Railway?
Railway handles the parts of this app that are fiddly to self-host properly: persistent storage attached to the container, TLS on a real domain, and a healthcheck that restarts the app if it stops answering. The template arrives with the storage paths already pointed at the volume, the proxy settings already correct, and encryption keys generated for your deployment alone, so the first thing you do is create your account rather than debug why last night's backup is missing.
For a household app that runs every day and holds your calendar, your budget and your health records, having it on managed infrastructure with a persistent volume and automatic restarts is meaningfully less fragile than a spare machine under the stairs, and considerably less work than a VPS you patch yourself.
Template Content
