A task management web app built with Flask on the backend and Backbone.js on the frontend. Features real-time CRUD operations, category & priority filtering, dark mode, smooth GSAP animations, and a command palette -- deployed serverlessly on Vercel.
| Directory | App | Stack | Deployed at |
|---|---|---|---|
api/ |
REST API | Python (Flask) + JSON file storage | Vercel - ordo.yansha.dev/api |
static/ |
Frontend | Backbone.js + Handlebars + Tailwind CSS + GSAP | Vercel - ordo.yansha.dev |
- Framework: Flask 3.1 (Python 3.14)
- Storage: JSON file (
/tmp/ordo-data/tasks.json) - CORS: flask-cors 6.0
- Server: Gunicorn (production), Werkzeug dev server (local)
- Extras: Rate limiting, request ID tracing, structured logging, Prometheus-compatible metrics, ETag caching
- Framework: Backbone.js 1.6 + Underscore
- Templating: Handlebars (precompiled in
index.html) - Styling: Tailwind CSS 3 + custom CSS variables (dark/light theme)
- Animation: GSAP (stagger list items, progress bar, confetti)
- Icons: Font Awesome 6 (free)
- PWA:
manifest.jsonfor installable web app
- CRUD tasks -- Create, read, update, delete with undo toast notification
- Filter by category -- General / Work / Personal / Learning pill filters
- Priority sorting -- Higher priority tasks appear first
- Due dates -- Overdue highlighting with relative time display ("2h ago")
- Search -- Debounced real-time search (150ms) across task titles
- Dark mode -- System preference detection + manual toggle (localStorage)
- Command palette --
Cmd+Kquick actions (add task, search, toggle theme) - Keyboard shortcuts --
nquick add,/search,Cmd+Kpalette - Animations -- GSAP staggered reveals, progress bar, confetti celebration
- Responsive -- Mobile-first with glassmorphism header design
- Python 3.14 (or 3.12+)
- pip
git clone https://github.com/shadvls/ordo.git
cd ordopip install -r requirements.txtpython api/index.pyThe app starts on http://localhost:5000.
pytest tests/| Command | Description |
|---|---|
python api/index.py |
Start Flask dev server (port 5000) |
pytest tests/ |
Run test suite |
flake8 api/ |
Lint API modules |
python -m pytest tests/ --cov=api/ |
Run tests with coverage |
/api/
| Method | Path | Description |
|---|---|---|
GET |
/api/tasks |
List all tasks (supports ?limit= & ?offset=) |
POST |
/api/tasks |
Create a task |
GET |
/api/tasks/<id> |
Get a single task |
PUT |
/api/tasks/<id> |
Update a task |
DELETE |
/api/tasks/<id> |
Delete a task |
PATCH |
/api/tasks/<id>/toggle |
Toggle task status |
GET |
/api/health |
Health check |
GET |
/api/metrics |
Basic metrics (uptime, response time) |
{
"id": 1,
"title": "Buy groceries",
"description": "Milk, eggs, bread",
"status": "pending",
"priority": 0,
"category": "personal",
"due_date": "2026-06-15",
"created_at": "2026-06-12T12:00:00",
"updated_at": "2026-06-12T12:00:00"
}| Tool | Config | Purpose |
|---|---|---|
| Flake8 | .flake8 |
Python linting |
| Pytest | pytest.ini |
Testing framework |
| Coverage | .coveragerc |
Test coverage reporting |
| Prettier | .prettierrc |
Code formatting |
| Bandit | .bandit |
Python security linter |
| Pylint | .pylintrc |
Python code analysis |
| Mypy | mypy.ini |
Type checking (optional) |
| Gitleaks | GitHub Actions | Secret scanning |
| App | Platform | URL |
|---|---|---|
| API + Frontend | Vercel | ordo.yansha.dev |
| API Health | Vercel | ordo.yansha.dev/api/health |
Deployed via Vercel for GitHub -- pushes to main trigger automatic redeployment.
- Single-page app -- Backbone.js router handles all client-side navigation; no page reloads.
- JSON file storage -- No database dependency; tasks persist to
/tmp/ordo-data/tasks.json(ephemeral on Vercel, persistent in dev). - Serverless Flask --
api/index.pyexports a WSGIappfor Vercel's Python runtime; all otherapi/*.pymodules are bundled as dependencies. - Tailwind via CDN -- No build step; Tailwind CSS loaded from CDN in
index.htmlwith utility classes only. - Undo pattern -- Deleted tasks show an undo toast with 4-second auto-dismiss; no confirmation dialogs.
- Command palette -- Modal overlay with keyboard navigation (ArrowUp/Down/Enter) and action dispatch.
- No authentication (task manager is single-user by design).
- All user input is validated server-side (title required, max 200 chars).
- CORS configured for development origins.
- Rate limiting on API endpoints (100 req/min per IP).
- Gitleaks scans every push + weekly.
- Dependencies audited via Trivy (GitHub Actions security workflow).
See CONTRIBUTING.md for the full contribution guide.
Please follow Conventional Commits (feat:, fix:, chore:, refactor:, docs:).
MIT License -- Copyright (c) 2026 Yansha de Valois. See LICENSE for details.