Skip to main content

Personal productivity — local, calm, yours.

Project description

Leadger

Personal productivity — local, calm, yours.

PyPI Python License: MIT

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 ↻N counter. 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)
16 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

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

leadger-0.1.0.tar.gz (107.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

leadger-0.1.0-py3-none-any.whl (103.9 kB view details)

Uploaded Python 3

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

Hashes for leadger-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1b4ffb5f92fd87978b20e2b8935974fd3116939c080a4d2881da43ea9c38110f
MD5 da33e7629a6af065b89466983060bcdb
BLAKE2b-256 bc137b23f73d29a8404485f413df0c13a025a46642ae7543667df7744ed255b4

See more details on using hashes here.

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

Hashes for leadger-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6fae1d72c247046e7c6cc8a9c84a3fbf1411aed4a25ea53fc434a9461eb023e5
MD5 8c95d8a75021598350340382db8c7c81
BLAKE2b-256 10c1c1f52b2782a9715bab069eeee61d4bf6cb11b270428ec639f78ba8c574a7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page