Pink Planner
Моят розов планер: a personal life planner
An installable planner in Bulgarian with separate accounts for each person: a daily plan, calendar, yearly goals, income and budget, places visited, books, new things tried, workouts and skincare routines, with photo uploads and a full data export.
planner.demodomain.site
- Role
- Solo: design, front end, API, deployment
- Platforms
- Web · Installable PWA
- Tech
- React 19ViteReact Router 7TanStack QueryFastify 5PostgreSQL 16Drizzle ORMZodDocker
11
areas of life, one planner
18
database tables, data kept per user
20
photos per upload, up to 10 MB each
14
daily backups kept, database and photos
The problem
A planner made for one person's actual life
Planner apps are either too generic or split across many apps: tasks in one, budget in another, workouts somewhere else. This is one warm, pink planner in Bulgarian that covers everything its users want to track, and nothing they don't.
It runs on my own server, installs on a phone like an app, and every user's data stays separate and exportable.
01 · Calendar
Days, labels and what's coming up
A month view with built-in and custom labels (up to 50 per user), a day plan with tasks and times, and upcoming events at a glance.
02 · Money
Income and budget that talk to each other
Income is recorded once and the monthly budget picks it up automatically; expenses are grouped by category so it's clear what is left for the month. Amounts are in euro.
03 · On the phone
Routines, places and memories
As an installed PWA it lives on the home screen: workout plans and logs, morning and evening skincare routines, places visited with photo albums, books read and new things tried.
- Photo uploads, several at a time
- Change password signs out every other device
- Export all your data as JSON
Under the hood
How it's built
- 01
Shared types end to end
An npm workspace shares Zod schemas, calendar labels and date, money and budget helpers between the React client and the Fastify API.
- 02
Secure by default
Cookie sessions with argon2 password hashing, helmet and rate limiting on the API, and sign-up that can be switched off once everyone has an account.
- 03
Self-hosted
Docker Compose with PostgreSQL and an uploads volume behind Caddy; migrations run on start, a health check reports database access, and a backup script keeps 14 days of database and photo archives.