myney Svelte Themes

Myney

💰 Self-hostable personal finance tracker. Accounts, transactions, budgets, recurring payments and forecasting — built with Svelte & PocketBase.

Myney

Self-hostable personal finance tracker. Multi-user, data isolated per user. Built with SvelteKit and PocketBase.

Features

  • Accounts (cash, checking, piggy-bank, investments, debt)
  • Transactions with automatic balance recalculation
  • Income / expense / transfer / balance-adjustment types
  • Categories and subcategories (user-defined, no presets)
  • Recurring payments (auto-generated or manual confirmation)
  • Budgets per category or overall
  • Debt payment tracking

Stack

  • Frontend: SvelteKit 2 + Svelte 5, TypeScript, pure CSS
  • Backend: PocketBase v0.36.7 (embedded SQLite, JS hooks)
  • Deploy: Docker

Deploy with Docker

Option A — GHCR images, no reverse proxy

Pulls pre-built images from GHCR. Web on :3000, PocketBase on :8090.

docker compose up -d

Web app at http://localhost:3000 — PocketBase admin at http://localhost:8090/_/.

Option B — GHCR images, behind Traefik

Use docker-compose.traefik.yml as a starting point. Replace <DOMAIN>, <SECRET>, <ADMIN_EMAIL>, and <ADMIN_PASSWORD>, then:

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

Traefik routes /api and /_/ to the backend container; everything else goes to the web container.

Option C — build from source

git clone https://github.com/tamerhayek/myney.git
cd myney
docker compose -f docker-compose.dev.yml up --build

PocketBase data is stored in ./backend/pb_data (gitignored).


First run

  1. Open PocketBase admin at /_/ and log in with the values you set for ADMIN_EMAIL / ADMIN_PASSWORD (defaults: [email protected] / myney_admin).
  2. Open the web app and log in with the same credentials. You will be prompted to set a new password before continuing.
  3. Additional users can only be created by a superadmin via /_/. They will also be asked to change their password on first login.

PB_ENCRYPTION_KEY must be set before the first run and never changed afterwards — it encrypts PocketBase data at rest. Generate one with openssl rand -hex 16.


Development

Prerequisites

  • Node.js 24
  • pnpm 10
  • Docker (for PocketBase)

Setup

git clone https://github.com/tamerhayek/myney.git
cd myney
pnpm install

Start PocketBase:

pnpm backend   # docker compose -f docker-compose.dev.yml up -d --build backend

Start the dev server:

pnpm dev       # http://localhost:5173 — proxies /api and /_/ to PocketBase at :8090

Other commands

pnpm build             # production build
pnpm lint              # Prettier check + ESLint
pnpm format            # auto-format
pnpm check             # svelte-check + tsc
pnpm test:unit --run   # unit tests
pnpm test:e2e          # end-to-end tests (requires a running build)

Contributing

Contributions are welcome. See CONTRIBUTING.md for the workflow, commit message format, and local development setup.

License

MIT

Top categories

Loading Svelte Themes