- TypeScript 53.4%
- Svelte 32.8%
- Nix 12.3%
- CSS 1%
- Dockerfile 0.2%
- Other 0.1%
Update chat system prompt: only set dueDate when user explicitly mentions a date, never as side effect of other operations. System manages repeating task dates automatically. |
||
|---|---|---|
| .claude | ||
| .husky | ||
| .serena | ||
| .sisyphus | ||
| .vscode | ||
| docs | ||
| envs | ||
| mcp-server | ||
| packages/shared | ||
| patches | ||
| scripts | ||
| server | ||
| skills/scoredo | ||
| web | ||
| .dockerignore | ||
| .envrc | ||
| .gitignore | ||
| .jscpd.json | ||
| agent-conversation.md | ||
| biome.json | ||
| bun.lock | ||
| bun.nix | ||
| CLAUDE.md | ||
| CONTRIBUTING.md | ||
| docker-compose.prod.yml | ||
| ecosystem.config.cjs | ||
| flake.lock | ||
| flake.nix | ||
| justfile | ||
| knip.json | ||
| LICENSE | ||
| package.json | ||
| README.md | ||
| tsconfig.base.json | ||
| tsconfig.json | ||
| turbo.json | ||
ScoreDo
A task manager built around a smart sorting algorithm that mirrors how your mind naturally prioritizes. Self-hosted, offline-capable, and designed to let unimportant tasks fade away gracefully.
Key Features
- Intelligent Auto-Sorting -- A scoring algorithm handles prioritization so you don't have to
- Local-First -- Works fully offline via RxDB/IndexedDB, syncs when online
- Self-Hosted -- Your data stays on your server, Nix-deployed or Docker
- Voice & AI Chat -- Add tasks by voice (Groq Whisper), chat with your task list via agentic AI
- Home Assistant Integration -- Voice-activated task creation via HA custom sentences
- Repeating Tasks -- Set up once, they reset automatically with configurable remind periods
The Core Innovation: Natural Task Flow
Unlike traditional task managers that require manual organization, ScoreDo's scoring algorithm makes tasks flow like thoughts:
- Approaching deadlines bubble up -- Tasks automatically gain higher scores as due dates near
- Recent thoughts stay visible -- Fresh tasks and recently updated ones stay on top
- Old thoughts fade naturally -- Aging tasks drift down without manual archiving
- Overdue items handle themselves -- Either staying prominent (boost) or fading away (decay)
No folders, tags, or complex workflows needed. Just a list that organizes itself based on what actually matters: time, engagement, and deadlines.
The Philosophy
Traditional task managers assume your brain works like a filing cabinet. But thoughts don't arrive pre-sorted. They bubble up, demand attention, then fade if unimportant. ScoreDo embraces this natural flow.
If something was truly important, it would bubble up again. This isn't procrastination -- it's your mind's natural filtering system working correctly.
The Goal: ScoreDo isn't about doing everything. It's about doing what matters, when it matters, while letting the rest fade gracefully. Your attention is finite. Your thoughts are infinite. The gap between them isn't a problem to solve -- it's the human condition to accept.
Core Concepts
Task Scoring
Instead of manual organization, ScoreDo uses intelligent scoring to surface what matters most:
- Base score: Priority x 2
- Status boosts: Queued tasks (+35), stood-up tasks (+25), to-stand tasks (+20), waiting tasks (-20)
- Time-based adjustments: Boost or decay based on due/do dates
- Smart defaults: Repeating tasks use boost mode, one-off tasks use decay mode
Two Mental Models for Tasks
Boost Mode: "I Need to Do This" Tasks that become MORE important over time. As they become overdue, they fight harder for your attention, rising up the list until dealt with.
Perfect for:
- Bills that accrue penalties
- Maintenance that gets worse if delayed
- Habits you're trying to maintain
- Any task where being overdue increases urgency
Decay Mode: "I Want to Do This (But It's OK If I Don't)" Ideas, aspirations, someday-maybe tasks. If ignored long enough, they gracefully fade down the list, making room for what's actually urgent. No guilt, no manual cleanup needed.
Natural for:
- Random ideas and inspirations
- "Nice to have" improvements
- Things that seemed urgent in the moment
- Tasks without hard deadlines
Decay mode reflects a fundamental truth: if you haven't thought about something in weeks, it's probably not that important to you right now.
Three-Date System
Each task can have three different dates that work together naturally:
Do Date -- When a task entered your consciousness. Fresh tasks stay visible; aging tasks drift down. Interacting with a task resets its do date to today.
Due Date -- External deadlines that create urgency. Tasks with approaching due dates rise to the top.
Done Date -- Completion timestamp. Helps adjust repeat intervals to match reality, not aspirations.
Repeating Tasks
Designed for habits, routines, and recurring obligations. They default to boost mode -- the longer you skip them, the higher they rise. The task reset service runs hourly, resetting completed repeating tasks with configurable intervals and remind periods.
Special Statuses
- Queued: Your current focus (+35 score boost)
- Waiting: Blocked on others (-20 score, sinks below actionable items)
- To Stand / Stood Up: For daily stand-up meetings
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | SvelteKit (adapter-static), Svelte 5 runes |
| UI Components | shadcn-svelte, Tailwind CSS |
| Client Database | RxDB with Dexie (IndexedDB) |
| Server | Bun with Hono router |
| Server Database | bun:sqlite in WAL mode |
| AI Chat | Vercel AI SDK, OpenAI / Groq models |
| Voice | Groq Whisper (whisper-large-v3-turbo) |
| Linting | Biome |
| Package Manager | Bun workspaces |
| Process Management | pm2 (dev), Nix + systemd (prod) |
Quick Start
Prerequisites
Development
git clone https://github.com/JeremyKennedy/scoredo.git
cd scoredo
bun install
# Set up environment
cp envs/config.example.yaml envs/config.yaml
# Edit envs/config.yaml with your settings
# Start development
just dev
Access the app at http://localhost:8000.
Production
Production deploys automatically via Buildbot CI on push to main. The CI pipeline builds a Nix package, copies it to the server, swaps the symlink, and restarts the systemd service with a health check.
For local/manual production builds:
# Nix build (recommended)
nix build
./result/bin/scoredo
# Docker (alternative)
cp envs/config.example.yaml envs/config.yaml
just prod
Access the app at your configured hostname (default port 9000).
Documentation
Full documentation lives in docs/README.md, covering:
- Scoring Algorithm -- Formula, constants, date curves
- Task Lifecycle -- Status transitions, repeat scheduling, three-date system
- View System -- Filtering, sorting, display modes
- Sync Architecture -- RxDB replication, WebSocket streaming
- AI Voice & Chat -- Whisper transcription, agentic chat, eval suite
- Design System -- OKLCH themes, status colors, typography
- Deployment -- Nix/Buildbot CI, health checks, backups
- Home Assistant -- Voice command setup
- Testing Guide -- 520+ tests, dual runners, patterns
Contributing
See CONTRIBUTING.md for development setup and guidelines.
License
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-or-later).
Use ScoreDo to surf this reality, not fight it. Simple enough for daily use, powerful enough for complex projects.