A small Node.js todo web app for testing OpenAI Symphony orchestration. It includes a browser UI, a JSON-backed todo model, and a simple HTTP API.
- Create, complete, edit, and delete todos.
- Persist todos to
data/todos.json. - Add optional due dates with
YYYY-MM-DDvalidation. - Set priority to
low,medium, orhigh; lists are sorted high to low. - Add comma-separated tags and filter by tag through the API.
- Filter todos by all, active, or completed status.
- Search todo titles case-insensitively.
- Keep titles to 140 characters with frontend counters and backend validation.
- Toggle dark mode in the browser UI.
npm start # Start server on port 3000
npm test # Run testsOpen http://localhost:3000 in your browser.
The app serves public/index.html and stores todos in data/todos.json by default.
Lists todos sorted by priority. Supported query parameters:
status:all,active, orcompleted(allby default)search: case-insensitive title searchtag: exact tag match, case-insensitive
Creates a todo.
{
"title": "Ship the README update",
"dueDate": "2026-05-13",
"priority": "high",
"tags": "docs,symphony"
}Fields:
titleis required, trimmed, and limited to 140 characters.dueDateis optional and must be a validYYYY-MM-DDdate.priorityis optional and defaults tomedium; accepted values arelow,medium, andhigh.tagsis optional and may be a comma-separated string or an array.
Marks a todo as complete when called without a title field.
{}Updates a todo title when title is provided.
{
"title": "Updated title"
}Deletes a todo.
Todos are written to data/todos.json as JSON after every create, complete, title update, or delete operation. The storage file preserves nextId so IDs keep increasing across restarts.
Run the model test suite with:
node test/todo.test.jsThis repo is designed as a testbed for Symphony. Create Linear issues like:
- "Add due dates to todos"
- "Add priority levels (low/medium/high)"
- "Persist todos to a JSON file"
- "Add search/filter functionality"
- "Add dark mode toggle"
Symphony agents will pick them up and submit PRs.