Toodoom began as a weekend idea after noticing that every simple tasks app had turned into a dashboard for teams. We just wanted a gentle place where my wife and I could share an @shopping list, keep track of @household fixes, and scribble personal notes. The result is a shareable, offline-first desk that feels like a calm gradient garden. My wife and I use it every day now. Switch between notes and tasks, drop in #tags, assign @categories, and keep life admin tidy without corporate bloat. Try the hosted demos at toodoom.vercel.app or toodoom.ibreakthings.xyz.
- ✨ Dual brain – maintain boards of tasks and sticky notes in the same app.
- 🏷️ Smart metadata – apply
#tagsfor instant filtering and@categoriesfor lightweight project buckets. - 🤝 Shareable lists – invite a partner, housemate, or family member to any
@categoryand stay in sync together (PocketBase-backed). - 🌙 Light & dark – polished themes that automatically remember your preference.
- 📱 PWA-ready – install Toodoom on desktop or mobile and run it like a native app.
- 🚂 Offline-first – capture tasks and notes without a connection; everything syncs to the server the moment you log in.
- 🧩 PocketBase inside – simple auth, realtime updates, and an easy path to self-hosting.
- 🐳 Self-host friendly – Docker Compose setup included so you can launch the full stack in one go.
- Highlights
- Architecture
- Repository layout
- Quick start
- Configuration
- Offline workflow
- Progressive Web App
- Self hosting
- Available scripts
- Project status & roadmap
- Contributing
- License
Toodoom is an Angular 19 application backed by PocketBase.
┌────────────────────┐ ┌──────────────────────────┐
│ Angular frontend │◄────►│ PocketBase (API + auth) │
│ • Tasks & notes │ ws │ • Users & lists │
│ • PWA shell │ http │ • Sharing, invites │
│ • Offline store │ │ • File storage │
└────────────────────┘ └──────────────────────────┘
- Local data is cached in
localStoragewhile offline. - Once you authenticate, cached tasks/notes/categories are pushed to PocketBase automatically.
- The UI is entirely client rendered and uses Angular Signals for reactive state.
.
|- src/ # Angular application source
|- public/ # Static assets bundled with the client
|- dist/ # Production build output (generated)
|- server/ # PocketBase binary, data, hooks, and migrations
| |- pb_data/
| |- pb_hooks/
| |- pb_migrations/
| `- pocketbase # Download the PocketBase binary here for local runs
|- docker/ # Dockerfiles for the frontend and API
| |- dockerfile.client
| `- dockerfile.api
`- docker-compose.yml # Docker Compose stack for full local environment
- Node.js 20+
- npm 10+
- Angular CLI 19 (
npm install -g @angular/cli) - PocketBase 0.30+ — download the binary into
server/pocketbaseso you can run it locally. The default config expects the API to be reachable athttp://127.0.0.1:8090.
npm installIn one terminal window, start PocketBase from the server/ folder:
cd server
./pocketbase serveIn another terminal (at the project root), start the Angular dev server:
npm startOr run the entire stack with Docker (builds the images in docker/):
docker compose up --buildVisit http://localhost:4200 and log in (or register) to begin.
Default PocketBase super admin credentials are
admin@admin.com/admin123. Update them before deploying by editing thePB_ADMIN_EMAILandPB_ADMIN_PASSWORDvalues indocker-compose.yml, or adjust theENVblock indocker/dockerfile.apiif you are building the container directly.
Environment configuration lives in src/environments/.
| File | Purpose |
|---|---|
environment.ts |
Default development settings. |
environment.prod.ts |
Production build overrides. |
environment.hosted.ts |
Production build for self-hosted instances. |
The only required variable today is the PocketBase API endpoint:
export const environment = {
production: false,
api: 'http://127.0.0.1:8090'
};Adjust these values before building for production.
- Create notes and tasks while offline — Toodoom stores everything locally.
- When a network connection or user session becomes available, local content is synced back to PocketBase automatically (lists, note lists, tasks, and notes).
- The local cache is cleared after a successful sync, ensuring you never double-import data.
Toodoom ships with Angular Service Worker support. Install it like any modern PWA:
- Open the app in Chrome, Edge, or Safari.
- Click “Install” (desktop) or “Add to Home Screen” (mobile).
- Enjoy the same gradient goodness offline.
You can adjust caching behaviour in ngsw-config.json.
PocketBase makes it straightforward to self-host the backend. Deploy the Angular frontend through Vercel, Netlify, static hosting, or your own server.
A ready-to-run stack lives in docker-compose.yml and references the Dockerfiles in docker/.
docker compose up --buildThe command above builds both containers, serves the Angular app on http://localhost:4200, and exposes PocketBase on http://127.0.0.1:8090. PocketBase state persists in server/pb_data, so feel free to stop and restart the stack without losing records.
- Admin credentials – the Docker images create a super admin with
admin@admin.com/admin123by default. Change these credentials by updating thePB_ADMIN_EMAILandPB_ADMIN_PASSWORDenvironment variables indocker-compose.yml, or edit theENVvalues insidedocker/dockerfile.apiwhen building a standalone image.
| Command | Description |
|---|---|
npm start |
Run the dev server with live reload. |
npm run build |
Create build inside dist/. |
npm run build-prod |
Create a production build inside dist/. |
npm run build-hosted |
Create a production build for self hosted inside dist/. |
npm run watch |
Rebuild on file changes (development configuration). |
npm test |
Execute unit tests via Karma/Jasmine. |
- Notes and tasks with gradients, tags, and categories
- Category sharing via PocketBase invites
- Offline cache + auto-sync on login
- Dark/light theme toggle
- PWA install support
- Docker Compose deployment bundle
- SqlLite, IndexDB instead of localstorage for offline data
- Rich text for notes (will reduce simplicity)
- Electron build so it can run on macOS and Windows
- Notepad tab - to scrible longer notes
Issues, fixes, and improvements are warmly welcomed. Please:
- Fork the repository.
- Create a feature branch:
git checkout -b feat/amazing-idea. - Commit with context.
- Open a pull request describing the change.
This project is released under the MIT License. See LICENSE for details.