No description
  • TypeScript 53.4%
  • Svelte 32.8%
  • Nix 12.3%
  • CSS 1%
  • Dockerfile 0.2%
  • Other 0.1%
Find a file
Jeremy Kennedy f83f511801
Some checks reported warnings
buildbot/nix-eval Build done. (2 warnings)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
fix: prevent LLM from overriding dates on repeating tasks
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.
2026-04-06 13:06:06 -04:00
.claude fix: remove personal infrastructure references from public repo 2026-03-03 15:40:06 -05:00
.husky base app 2025-07-08 02:44:09 -04:00
.serena Rename project from todolai/v2 to scoredo 2026-02-14 13:40:35 -05:00
.sisyphus fix: resolve Biome lint warnings and accessibility issues 2026-02-26 18:28:21 -05:00
.vscode Replace ESLint + Prettier with Biome 2026-02-12 09:02:37 -05:00
docs docs: add OpenClaw integration design and implementation plan 2026-03-07 23:03:24 -05:00
envs refactor: unify AI config into single OpenAI-compatible endpoint 2026-03-03 17:14:20 -05:00
mcp-server feat: replace Fuse.js with MiniSearch, add search UI (Cmd+K palette + /search page) 2026-02-17 00:17:30 -05:00
packages/shared fix: prevent LLM from overriding dates on repeating tasks 2026-04-06 13:06:06 -04:00
patches Patch pm2 $name bug, rename processes, normalize logging 2026-02-12 06:49:41 -05:00
scripts feat: enable stricter biome lint rules and fix all violations 2026-03-03 23:20:17 -05:00
server fix: batch of UI and service fixes 2026-04-06 12:28:39 -04:00
skills/scoredo feat: add REST routes and OpenClaw skill for task management 2026-03-07 16:29:30 -05:00
web fix: batch of UI and service fixes 2026-04-06 12:28:39 -04:00
.dockerignore better ignoring, less builds 2025-07-14 18:57:32 -04:00
.envrc refactor: replace devenv with flake devShell 2026-03-03 14:24:04 -05:00
.gitignore chore: add .worktrees/ to .gitignore 2026-03-03 23:00:20 -05:00
.jscpd.json Apply Biome formatting to entire codebase 2026-02-12 09:03:04 -05:00
agent-conversation.md docs: capture CRUD/sync contracts and reliability handoff 2026-03-03 23:36:16 -05:00
biome.json feat: enable stricter biome lint rules and fix all violations 2026-03-03 23:20:17 -05:00
bun.lock chore(web): upgrade RxDB to 17.0.0 stable 2026-03-31 19:25:09 -04:00
bun.nix fix(build): regenerate bun.nix for RxDB 17 stable 2026-03-31 19:37:26 -04:00
CLAUDE.md fix: remove personal infrastructure references from public repo 2026-03-03 15:40:06 -05:00
CONTRIBUTING.md chore: remove Forgejo CI, update docs for Nix/Buildbot deployment 2026-03-03 15:35:24 -05:00
docker-compose.prod.yml refactor: unify AI config into single OpenAI-compatible endpoint 2026-03-03 17:14:20 -05:00
ecosystem.config.cjs Apply Biome formatting to entire codebase 2026-02-12 09:03:04 -05:00
flake.lock feat: point bun2nix at Forgejo fork with module-populator fix 2026-03-03 14:46:37 -05:00
flake.nix feat: add REST routes and OpenClaw skill for task management 2026-03-07 16:29:30 -05:00
justfile Rewrite justfile as thin CLI dispatch (422 → 82 lines, 59 → 17 recipes) 2026-02-13 00:23:15 -05:00
knip.json Apply Biome formatting to entire codebase 2026-02-12 09:03:04 -05:00
LICENSE Add AGPL-3.0 license, rewrite README, add contributing guide 2026-02-13 19:07:04 -05:00
package.json refactor(web): enable native RxDB 17 deletedField, remove manual mapping 2026-03-04 16:43:28 -05:00
README.md chore: remove Forgejo CI, update docs for Nix/Buildbot deployment 2026-03-03 15:35:24 -05:00
tsconfig.base.json Apply Biome formatting to entire codebase 2026-02-12 09:03:04 -05:00
tsconfig.json Apply Biome formatting to entire codebase 2026-02-12 09:03:04 -05:00
turbo.json Apply Biome formatting to entire codebase 2026-02-12 09:03:04 -05:00

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

  • Bun >= 1.1
  • just (task runner)
  • Nix (for production builds, optional)

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:

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.