Personal productivity — local, calm, yours.
Project description
Leadger
Personal productivity — local, calm, yours.
For the important tasks that don't belong in your work's Jira.
No cloud. No account. No telemetry. No gamification. Your data lives in a single human-readable YAML file you can keep in git.
pip install leadger
leadger
That starts a local web UI on localhost and opens your browser. No Node
required — the frontend ships embedded in the package.
Why Leadger?
Most task apps fail the same way: red "overdue" badges that breed anxiety, metrics you can game by deleting tasks, and feature creep that turns a todo list into a project-management chore. Leadger takes the opposite bet — statistical honesty about yourself, calmly delivered:
- Frozen daily goal. The first time you open Leadger each day, it snapshots your planned tasks: that's your goal. Tasks created during the day count as extras — they add to your delivery but never inflate the goal. Cancelling or deleting a planned task doesn't shrink the goal either (anti-gaming, by design).
- "% of the day delivered." The hero metric. It can pass 100% (over-delivery gets a second amber lap on the ring). Zero goal with deliveries = bonus day (∞).
- Honest rollover. Whatever you don't finish migrates to the next day
automatically, with a visible
↻Ncounter. History surfaces your most pushed tasks — procrastination becomes visible, without judgment. - Personal correction factor. "You plan 5.8 tasks/day on average and deliver 5.2 — your real rate is 90%." Just statistics over your last 30 days, so you can plan like the person you actually are.
- Week at a glance. The Week view shows each day's % (Mon→Sun strip), the week's aggregate on the ring, and the list split into not done / done.
- Stale-task alert. A task open for 7+ days triggers a one-time, dismissable notice: complete, reschedule, pause or cancel — deciding is progress too.
- Markdown summary. One palette action copies the period's goal/delivered/% plus both task lists — ready to paste into a standup.
Quick capture
An always-visible input with live syntax highlighting:
Estudar FAISS #estudo !amanha
Entregar relatório #trabalho !sex
Pagar contas !2026-07-01
Meditar !todo-dia
Review da semana #trabalho !rec:seg
| Token | Meaning |
|---|---|
#tag |
add a tag (click a tag in the list to filter by it) |
!hoje / !amanha |
target today / tomorrow |
!seg…!dom |
target the next matching weekday |
!YYYY-MM-DD |
target an exact date |
!todo-dia |
recurring: every day |
!rec:dia / !rec:seg…!rec:dom |
recurring: daily / weekly on that weekday |
Capture tokens are Portuguese — Leadger is a PT-first product; the UI ships in Portuguese and English (toggle in the header).
Recurring tasks are materialized one occurrence at a time: completing the open occurrence creates the next; cancelling or deleting it ends the series. The daily goal stays honest — each occurrence counts as a regular task on its day.
Keyboard first (mouse welcome)
| Key | Action |
|---|---|
n |
focus capture |
j / k |
navigate the list |
x / p / c |
complete · pause · cancel |
e |
inline edit (double-click works too) |
1–6 |
period: Day · Week · Month · Quarter · Half · Year |
⌘K / Ctrl+K |
command palette |
g h / g t |
History · Today |
? |
cheatsheet |
Every keyboard action also has a visual control — hover a task row for edit/pause/cancel/delete buttons, each tooltip teaching its shortcut.
CLI
leadger # start the server and open the browser
leadger serve --port 8080 --no-browser
leadger add "Estudar FAISS #estudo !amanha"
leadger today # today's summary in the terminal
leadger week # weekly summary: % per day + (not) done
leadger ics --out agenda.ics # export open tasks as iCalendar
leadger --data other.yaml … # use another data file
Calendar (.ics)
See your open tasks in any calendar app, without a cloud:
leadger ics --out leadger.ics writes the file, and with the server
running, http://localhost:4242/calendar.ics serves the same content.
Recurring tasks become RRULEs, so the whole series shows up projected on
your calendar. The export is read-only — the YAML remains the single
source of truth.
Your data
Everything lives in ~/.leadger/leadger.yaml — a commented, readable,
versionable YAML file. Leadger preserves your comments and key order on
every write (round-trip), writes atomically and keeps a .bak of the
previous version. Edit it in any editor; the app detects the change and
reloads.
tasks:
- id: t_8f3k2a
title: Revisar pipeline de segmentação
status: todo # todo | done | paused | cancelled
target: 2026-06-09
tags: [trabalho]
migrations: 0 # times pushed to the next day
recur: seg # optional: dia | seg..dom (recurring task)
What Leadger deliberately doesn't do
Sync, cloud, accounts, subtasks, pomodoro, XP, badges, confetti, databases. The YAML is the single source of truth.
Development
See CONTEXT.md for the full contract (schema, business rules, phases).
pip install -e ".[dev]"
pytest
Frontend (React + Vite + Tailwind)
cd frontend
npm install
npm run dev # hot reload; proxies /api to the backend on 4242
npm run build # outputs frontend/dist
For development, run the backend with leadger serve --port 4242 --no-browser and Vite with npm run dev.
Release
make dist # frontend build + embed into src/leadger/static + python -m build
twine upload dist/*
Without make (PowerShell): npm run build in frontend/, copy
frontend/dist/* into src/leadger/static/, then python -m build.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file leadger-0.1.0.tar.gz.
File metadata
- Download URL: leadger-0.1.0.tar.gz
- Upload date:
- Size: 107.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b4ffb5f92fd87978b20e2b8935974fd3116939c080a4d2881da43ea9c38110f
|
|
| MD5 |
da33e7629a6af065b89466983060bcdb
|
|
| BLAKE2b-256 |
bc137b23f73d29a8404485f413df0c13a025a46642ae7543667df7744ed255b4
|
File details
Details for the file leadger-0.1.0-py3-none-any.whl.
File metadata
- Download URL: leadger-0.1.0-py3-none-any.whl
- Upload date:
- Size: 103.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6fae1d72c247046e7c6cc8a9c84a3fbf1411aed4a25ea53fc434a9461eb023e5
|
|
| MD5 |
8c95d8a75021598350340382db8c7c81
|
|
| BLAKE2b-256 |
10c1c1f52b2782a9715bab069eeee61d4bf6cb11b270428ec639f78ba8c574a7
|