Boost your productivity with a beautiful and modern web app that combines a Pomodoro timer and a powerful to-do list.
Made with React, Tailwind CSS, PocketBase, and Vite.
- Pomodoro Timer: Customizable timer to help you focus and take breaks using the Pomodoro technique.
- To-Do List: Add, complete, and remove tasks. Tasks are stored in PocketBase.
- Notifications: Desktop notifications when your timer finishes.
- Modern UI: Responsive design with smooth animations and gradients.
- Sound Alerts: Audible notification when timer completes.
- Frontend: React, Tailwind CSS, Framer Motion, Lucide Icons, Vite
- Backend (local): PocketBase (embedded lightweight database)
- Other: PostCSS, ESLint
git clone https://github.com/Br7eleven/Pomodoro-To-do-app.git
cd Pomodoro-To-do-appnpm installnpm install lucide-react
npm install framer-motion
This app uses PocketBase as a lightweight backend for storing tasks and Pomodoro sessions.
- Download the latest binary from https://pocketbase.io/docs/
- Open a terminal and run:
./pocketbase serve
# or on Windows
pocketbase.exe servePocketBase will run at:
👉 http://127.0.0.1:8090
Admin UI:
👉 http://127.0.0.1:8090/_/
| Field Name | Type | Required | Options |
|---|---|---|---|
| text | Text | ✅ | task description |
| completed | Boolean | ✅ | task done or not |
| created | Date | auto | default by PB |
API Rules (READ, CREATE, UPDATE, DELETE):
@request.auth.id != ""
Or for testing purposes (not secure), simply set the rule as:
"="
This allows public access (for development/testing only).
| Field Name | Type | Required | Options |
|---|---|---|---|
| duration | Number | ✅ | session length in seconds |
| type | Text | ✅ | e.g., Work, Short Break, etc |
| user | Relation | optional | link to user (optional) |
Use this collection if you want to track Pomodoro sessions over time.
To allow read/write without auth temporarily, in API rules (for all operations), just write:
"="
This makes the collection publicly readable and writable (not secure).
- Visit: http://127.0.0.1:8090/_/
- Create the
todoscollection - Add
textandcompletedfields - Set rules (
"="or@request.auth.id != "") - Save and test via API or your app
Note:
For production, always secure your collections by using proper API rules and authentication!
The app uses PocketBase for backend data storage.
You need to run a local PocketBase server.
- Download the latest release for your OS from PocketBase releases.
- Extract and run the server in the repo root:
./pocketbase serveBy default, this runs on http://127.0.0.1:8090.
If there are migration files in the pb_migrations folder, run them as per PocketBase migration docs.
(Usually, you can just start with a fresh PocketBase instance and let the app create collections on demand.)
npm run devYour app should now be live at http://localhost:5173 (or the port shown in your terminal).
Pomodoro-To-do-app/
│
├── src/
│ ├── components/ # React components (PomodoroTimer, TodoList, Footer, etc.)
│ ├── lib/ # PocketBase client
│ └── App.jsx # Main app entry
│
├── pb_migrations/ # PocketBase migration scripts (collections for todos, sessions, etc.)
├── public/ # Static files (e.g., sounds, icons)
├── index.html # App HTML entry
├── tailwind.config.js # Tailwind CSS config
├── postcss.config.js # PostCSS config
├── vite.config.js # Vite config
├── package.json # Dependencies and scripts
└── README.md
- The PocketBase URL is set to
http://127.0.0.1:8090insrc/lib/pocketbase.js. - If you deploy PocketBase elsewhere, update this URL accordingly.
npm run dev— Start the Vite development servernpm run build— Build the app for productionnpm run lint— Run ESLint
Balaj Hussain
github.com/Br7eleven
This project is for educational/demo purposes.
Feel free to fork and customize!
Add screenshots here if you want!

