A small todo list application built with SvelteKit and PocketBase, designed for easy deployment with Docker in a single container.
- 🗂️ Maintain multiple todo lists
- ✏️ Add, edit, and delete todos
- ⚡ Real-time updates using PocketBase's real-time API
- 📱 Responsive design for desktop and mobile
- 🔐 User authentication (email/password and OAuth/OIDC providers)
- 👥 Multi-user support with separate todo lists for each user
- 🐳 Single container deployment with Docker
Technologies used:
- Frontend: SvelteKit with TypeScript
- Backend: PocketBase (SQLite-based backend with REST API)
- Deployment: Docker container including both frontend and backend exposing a single port (8090)
Using Docker Compose (Recommended):
services:
todo-list:
container_name: todo-list
image: ghcr.io/kellojo/todo-list:latest
restart: unless-stopped
environment:
- NODE_ENV=production
- PB_ENCRYPTION_KEY=YOUR 32 Char Encryption Key
volumes:
- ./pb_data:/app/pb_data
- ./background.png:/app/pb_public/_app/immutable/assets/background.png:ro # Optional: Mount custom background image
ports:
- "8090:8090"- Create a
docker-compose.ymlfile with the above content - Replace
YOUR 32 Char Encryption Keywith a secure 32-character string - Run
docker compose up -dto start the application - Access the app at
http://localhost:8090
To enable OIDC/OAuth providers, you need to configure them in PocketBase:
-
Open the PocketBase admin interface at
http://localhost:8090/_/and navigate toCollections > Users > Edit Collection. -
Navigate to the "Options" tab and enable OAuth2. Then, add your desired OAuth providers (e.g., Google, GitHub) with the appropriate client IDs and secrets.
-
Once configured, the enabled providers will automatically appear on the login page of the Todo List app.
Note
Make sure your users have a verified email address setup in the provider. Otherwise the login will fail.
If you want to disable email/password authentication and only allow OAuth/OIDC providers, you can do so in the PocketBase admin interface:
- Open the PocketBase admin interface at
http://localhost:8090/_/and navigate toCollections > Users > Edit Collection. - Navigate to the "Options" tab and disable the "Email/Password" authentication method.
- Ensure you have Node.js, npm and docker/docker compose installed
- Clone the repository
- Install dependencies with
npm i - Start the development server with
npm run dev - Access the app at
http://localhost:5173
Happy contributing!