A tiny daily task board for one-shot and periodic tasks. It is built as a Vite + React single page app and uses backend v2 for task storage.
- Shows today's tasks in two columns: To do and Done.
- Lets you drag tasks between columns.
- Shows task descriptions through the native hover tooltip.
- Marks tasks with an unfinished previous occurrence as Overdue.
- Hides completed one-shot tasks and completed periodic occurrences on the next day unless they are scheduled again.
- Supports uploading, downloading, and deleting the full JSON task list.
Install dependencies:
npm installRun the dev server:
npm run devOpen the URL printed by Vite. By default this app uses:
http://localhost:5174/
By default, the app calls the same-origin backend v2 API:
/api
To point at a different backend v2 instance, set:
$env:VITE_BACKEND_V2_API_BASE_URL = "https://your-backend-host/api"Build production assets:
npm run buildPreview the production build:
npm run previewRun TypeScript checks:
npm run typecheckDownloads use this shape:
{
"version": 1,
"exportedAt": "2026-05-26T00:00:00.000Z",
"tasks": [
{
"id": "task-id",
"kind": "periodic",
"title": "Water plants",
"description": "Kitchen and balcony",
"startDate": "2026-05-26",
"frequencyDays": 2,
"completedDates": ["2026-05-26"],
"createdAt": "2026-05-26T00:00:00.000Z",
"updatedAt": "2026-05-26T00:00:00.000Z"
}
]
}Uploads may contain either the full object above or a raw array of tasks. Uploaded tasks are merged into existing tasks by id; completion dates are combined.
The app separates three concerns:
src/domain/tasks.tscontains scheduling, completion, import normalization, and merge behavior.src/storage/taskRepository.tsdefines the repository interface, the backend v2 HTTP implementation, and a localStorage implementation for local fallback/testing.src/main.tsxcontains the page flow and user interactions.
The workflow at .github/workflows/azure.yml runs on every push to main, builds the frontend, and deploys the generated dist files into the existing backend App Service static-file directory.
Required repository variables:
BACKEND_V2_API_BASE_URL, for examplehttps://app-ded-backend-v2-dev-a9uus6.azurewebsites.net/apiAZURE_WEBAPP_RESOURCE_GROUP, for examplerg-ded-backend-v2-devAZURE_WEBAPP_NAME, for exampleapp-ded-backend-v2-dev-a9uus6
Required repository secret:
AZURE_CREDENTIALS, a service principal JSON accepted byazure/login.
The app is served by the Azure App Service host:
https://app-ded-backend-v2-dev-a9uus6.azurewebsites.net/