Railway

Deploy ocular

A self-hosted, open-source personal budgeting app with Sankey diagrams.

Deploy ocular

Just deployed

/data/genesis

Deploy and Host Ocular on Railway

About Hosting

Ocular is a self-hosted, open-source personal budgeting app with a beautiful, minimalist interface. It features income/expense tracking, Sankey diagram visualizations, multi-year overviews, multi-user support, PWA installability, dark/light mode, and multi-language support.

Ocular runs as a single Docker container bundling a Vue 3 SPA frontend (served by Caddy) and a Go backend (Genesis) for authentication and file-based data persistence. No external database is required — all data is stored on a persistent volume.

Why Deploy

  • Privacy-first — Your financial data stays on your own infrastructure, never shared with third parties.
  • Zero external dependencies — No database service needed; everything runs in a single container with file-based storage.
  • Beautiful & functional — Sankey diagrams, multi-year overviews, and CSV import make budgeting intuitive and visual.
  • Multi-user ready — Support multiple users with JWT-based authentication and per-user data isolation.
  • PWA support — Install as a native-like app on any device for quick access to your budget.

Common Use Cases

  • Personal budgeting — Track monthly income and expenses across categories, visualize spending flows with Sankey diagrams.
  • Household finance management — Multiple family members can each have their own account with separate budgets.
  • Year-over-year financial review — Compare budgets across years to identify trends and adjust spending habits.
  • CSV import & migration — Import existing financial data from spreadsheets or other tools via CSV.
  • Privacy-conscious expense tracking — Host your own budgeting tool instead of relying on cloud services that monetize your data.

Dependencies for Deployment

Deployment Dependencies

DependencyDetails
Docker Imageghcr.io/simonwep/ocular:latest — pre-built multi-arch image from GitHub Container Registry
Exposed Port80 (Caddy reverse proxy serves both SPA and API)
Persistent VolumeMount at /data/genesis — required for storing user data and budgets
GENESIS_JWT_SECRETRequired — a strong random string used to sign JWT authentication tokens
GENESIS_CREATE_USERSOptional — bootstrap initial users on first run (e.g., admin!:yourpassword, ! denotes admin)
External DatabaseNone — Genesis uses a built-in file-based key/value store
Health CheckGET http://127.0.0.1:8080/health (Genesis backend)

Template Content

More templates in this category

View Template
Bugsink
Self-hosted Error Tracking. Sentry-SDK compatible

zǝʇɹoɔ oɓıɹpoɹ
View Template
SubTrackr
Self-hosted Subscription Tracker

amnesia
View Template
NEW
Dashy — Open Source Homer & Homarr Alternative on Railway
Self Host Dashy. Open Source Start Page with Widgets & Themes

Heimdall