Deploy Personal Management System

Private web app for your notes, contacts, passwords and finances

Deploy Personal Management System

Just deployed

/data

Just deployed

/var/lib/mysql

Deploy and Host Personal Management System on Railway

Personal Management System is an open-source personal CRM: one private web app holding the notes, contacts, passwords, appointments, receipts, files and photos most people scatter across a phone, a cloud drive and three note apps. Its author built it for daily personal use, not teams — sixteen modules, no per-seat billing, no telemetry, a database you own. Self-host Personal Management System when you want one searchable home for data you will not hand to another platform.

Deploy Personal Management System on Railway and you get the full split architecture, not a cut-down container. frontend serves the Vue single-page app, backend runs the Symfony API behind nginx and php-fpm, scheduler runs the recurring-payments job, mariadb stores everything, and mailpit catches outgoing mail so password resets work as soon as the deploy is green. The browser talks to frontend and backend over public domains; those reach mariadb and mailpit privately.

Diagram of the five Personal Management System services on Railway

Getting Started with Personal Management System on Railway

Set PMS_ADMIN_EMAIL, PMS_ADMIN_USERNAME and PMS_ADMIN_PASSWORD before you deploy — those become your account. There is no default password and no open registration window: first boot creates the account before the app accepts a request, so nobody can claim your instance. Open the frontend domain, sign in, and you land on the dashboard with every module in the left rail.

Start with Notes. Open Notes → Categories, create one, then add a note inside it; it is stored in MariaDB immediately. Passwords, Contacts and Payments work the same way, and anything in Passwords is encrypted at rest with a key unique to your deployment. Adding a note and reloading is the quickest whole-stack check — a record that survives went through the API and database.

To prove the mail path, open the mailpit domain (it asks for the MP_UI_AUTH credentials) and use Forgot password: the message lands in that inbox.

Personal Management System achievements grouped by difficulty Two saved notes inside a Personal Management System notes category Reading a stored note with edit and delete controls

About Hosting Personal Management System

The project describes itself as a CMS or CRM for your own life: one module per concern, each a small CRUD app over a shared database. Because it is one MariaDB schema, search spans modules and a backup is a single dump.

  • Notes in nested categories, rich-text, with per-note locking
  • Passwords encrypted at rest, with a copy-to-clipboard reveal
  • Contacts grouped, with typed phone, email and messenger entries
  • Payments — bills, recurring payments, prices, money owed, incomes and charts
  • Schedules and Calendar for renewals and recurring obligations
  • Goals, Todo, Achievements, Job hours, Travels, Health, Issues, Reports
  • Files, Images and Videos with masonry galleries and thumbnails

The split is deliberate. frontend is a static bundle, redeployable without touching the API. backend owns the schema, the uploads volume and the signing keys. scheduler runs the hourly job in its own container, mariadb has its own volume, and mailpit supplies SMTP with no signup.

Why Deploy Personal Management System on Railway

Railway runs the whole five-service topology from one click:

  • MariaDB, uploads and the mail store each get a persistent volume
  • Private networking keeps the database and SMTP off the public internet
  • TLS and domains are issued automatically for the web tier
  • Health checks cover the API, SPA, scheduler and inbox
  • Both app images build from source, so you can fork them

Common Use Cases

  • A private replacement for scattered personal data — notes, receipts and passwords behind one login you control.
  • Household finance tracking — bills, recurring payments, money owed and price history, charted over your own numbers.
  • A personal knowledge base with attachments — notes alongside uploaded scans, photos and documents.
  • Renewal tracking — insurance, car servicing and subscriptions, surfaced on the dashboard and notification bell.

Dependencies for Personal Management System

  • backendVolmarg/personal-management-system on php:8.3-fpm-bookworm, nginx and php-fpm together; owns the schema, uploads and JWT keypair.
  • frontendthe SPA repo built with Node 18, served by nginx:1.27-alpine.
  • scheduler — the backend image with PMS_ROLE=scheduler, running the recurring-payments job.
  • mariadbmariadb:11.5.2. MariaDB specifically: several migrations use MariaDB-only DDL that MySQL rejects.
  • mailpitaxllent/mailpit:latest. SMTP on 1025 for the app, a web inbox behind basic auth.

Environment Variables Reference

VariableServicePurpose
APP_SECRETbackend, schedulerSigns JWTs, seeds the encryption key; never change it
DATABASE_URLbackend, schedulerMariaDB connection string
PMS_ADMIN_EMAILbackendEmail for the account created on first boot
PMS_ADMIN_PASSWORDbackendPassword for that account
PMS_ADMIN_LOCK_PASSWORDbackendSecond password for the lock screen
MAILER_DSNbackend, schedulerSMTP endpoint; a real relay delivers mail
PMS_BACKEND_URLfrontendPublic origin the SPA calls
PMS_SCHEDULER_INTERVAL_SECONDSschedulerSeconds between job runs
MP_UI_AUTHmailpituser:password guarding the inbox

Deployment Dependencies

Hardware Requirements for Self-Hosting Personal Management System

ResourceMinimumRecommended
CPU1 vCPU2 vCPU
RAM1 GB2 GB
Storage5 GB for MariaDB, 5 GB for uploadsGrow with your media library
RuntimePHP 8.3, MariaDB 11.5Same

The API is comfortable at 512 MB; the memory-hungry SPA build runs on Railway's builders, not on your service.

Self-Hosting Personal Management System with Docker

Upstream ships a Docker Compose setup for local use. Clone the backend and start it:

git clone https://github.com/Volmarg/personal-management-system.git
cd personal-management-system
docker compose up -d

The frontend is a separate repository, built and served as static files:

git clone https://github.com/Volmarg/personal-management-system-front.git
cd personal-management-system-front
npm ci && npm run build
npx http-server ./dist --port 4001

Two values decide whether that pair talks to each other. VITE_BACKEND_BASE_URL in .env.production is baked into the bundle at build time, so it must point at the API before you build. And src/config/prod/jwt.json holds the public key the SPA checks every token against — generate a fresh API keypair and its public half must go in that file, or every login fails with an invalid-signature message. The template handles both.

Is Personal Management System Free?

Yes. The project is MIT-licensed and free to self-host: no paid tier, no seat limits, no hosted edition. MariaDB and Mailpit are open source too. On Railway you pay only for the compute and volumes the five services use — small for a personal instance, growing with how much media you upload.

FAQ

What is Personal Management System? An open-source, self-hosted web app for personal data — notes, contacts, passwords, finances, schedules, files and images — in one place, on a database you control.

What does this Railway template deploy? Five services: the Vue frontend, the Symfony API, a scheduler for the recurring-payments job, MariaDB 11.5, and Mailpit. The database, uploads and mail store each sit on a persistent volume.

Why does the template include MariaDB rather than MySQL? Several migrations use MariaDB-only syntax such as ADD COLUMN IF NOT EXISTS, which MySQL rejects partway through the schema. MariaDB 11.5 is what upstream develops against.

Do I need to configure SMTP before deploying? No. Mailpit ships with the template and captures everything the app sends, so password resets work immediately. Swap MAILER_DSN for a real relay to deliver mail to a real inbox.

How do I create the first account in self-hosted Personal Management System? Not in the browser. Set PMS_ADMIN_EMAIL, PMS_ADMIN_USERNAME and PMS_ADMIN_PASSWORD before deploying and the account exists on first boot. Registration closes from that moment, because the app allows exactly one active user.

Can I change APP_SECRET later? No. It is the JWT passphrase and the seed for the key encrypting your saved passwords, so changing it invalidates sessions and makes encrypted values unreadable. Set it once, back it up, leave it alone.

How do I back up a self-hosted Personal Management System instance? Dump the MariaDB database and copy the backend volume, which holds every uploaded file plus the signing keys. Together they are a complete backup.


Template Content

More templates in this category

View Template
Rocky Linux
Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
47
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
51