DumbDo
A stupidly simple todo list application that just works. No complex database, no unnecessary features - just todos.
Features
- β¨ Clean, minimal interface
- π Dark/Light mode with system preference detection
- πΎ File-based storage - todos persist between sessions
- π± Fully responsive design
- π Fast and lightweight
- π PIN protection (4-10 digits if enabled)
- π PWA Support
Environment Variables
| Variable | Description | Default | Required |
|---|---|---|---|
| PORT | The port number the server will listen on | 3000 | No |
| DUMBDO_PIN | PIN protection for accessing todos (4-10 digits) | - | No |
| SINGLE_LIST | Show a single List of ToDos (without the selector) | false | No |
Quick Start
Running Locally
-
Clone the repository
git clone https://github.com/dumbwareio/dumbdo.git cd dumbdo -
Install dependencies
npm install -
Start the server
npm start -
Open http://localhost:3000 in your browser
Using Docker
-
Pull from Docker Hub (recommended)
docker pull dumbwareio/dumbdo:latest docker run -p 3000:3000 -v $(pwd)/data:/app/data dumbwareio/dumbdo:latest -
Or build locally
docker build -t dumbwareio/dumbdo . docker run -p 3000:3000 -v $(pwd)/data:/app/data dumbwareio/dumbdo -
Docker Compose
services: dumbdo: image: dumbwareio/dumbdo:latest container_name: dumbdo restart: unless-stopped ports: - ${DUMBDO_PORT:-3000}:3000 volumes: - ${DUMBDO_DATA_PATH:-./data}:/app/data environment: - DUMBDO_PIN=${DUMBDO_PIN-} - DUMBDO_SITE_TITLE=DumbDo # (Optional) Restrict origins - ex: https://subdomain.domain.tld,https://auth.proxy.tld,http://internalip:port' (default is '*') # - ALLOWED_ORIGINS=http://localhost:3000 # - NODE_ENV=development # default production (development allows all origins) #healthcheck: # test: wget --spider -q http://127.0.0.1:3000 # start_period: 20s # interval: 20s # timeout: 5s # retries: 3Storage
Todos are stored in a JSON file at app/data/todos.json. The file is automatically created when you first run the application.
To backup your todos, simply copy the data directory. To restore, place your backup todos.json in the data directory.
Development
The application follows the "Dumb" design system principles:
- No complex storage
- Single purpose, done well
- "It just works"
Project Structure
dumbdo/
βββ app.js # Frontend JavaScript
βββ index.html # Main HTML file
βββ server.js # Node.js server
βββ styles.css # CSS styles
βββ data/ # Todo storage directory
β βββ todos.json
βββ Dockerfile # Docker configuration
βββ package.json # Dependencies and scripts
Support the Project
Contributing
This is meant to be a simple application. If you're writing complex code to solve a simple problem, you're probably doing it wrong. Keep it dumb, keep it simple.