Skip to content

umbrova/ladderline

Repository files navigation

Ladderline

npm version

Track career-ladder evidence, locally, as it happens.

ladderline init — a workspace created, banner, and next steps

There's also a local dashboard — see the full tour with screenshots →

Every engineering manager knows the feeling: promo season arrives, and you're trying to reconstruct six months of a report's growth from memory, old Slack messages, and a vague sense that something good happened in March. Ladderline fixes that by giving you a place to jot a two-line note the moment something evidence-worthy happens — tagged against your team's actual career ladder — so a real, dated record builds itself quietly all year. When it's time to write the case, you're assembling, not remembering.

  • Local-first. Everything lives in plain YAML/Markdown files on your machine — no server, no account, no database, nothing to trust with sensitive people-data but yourself.
  • Never invents. Cases are assembled only from what you actually logged. Gaps are shown honestly, not smoothed over.
  • Plain files, no lock-in. Notes are Markdown with YAML frontmatter — open them in any text editor, or Obsidian, or grep them. Nothing about this tool traps your data.

Install

npm install -g @umbrova/ladderline

Or try it without installing anything:

npx @umbrova/ladderline init

Quick start

# Create a workspace in the current folder
ladderline init

# Define a review period
ladderline cycle add 2026-Q1 --start 2026-01-01 --end 2026-03-31

# Start tracking someone against the bundled default ladder
ladderline track "John Doe" --ladder generic-ic-ladder.yaml --as report

# Log evidence the moment something happens — takes 10 seconds
ladderline note "Pushed back on the caching design, adopted by 3 teams" \
  --person "John Doe" --tag technical-direction --date 2026-02-10

# See it all in the local dashboard
ladderline dashboard

# When review time comes, assemble a case from everything you logged
ladderline case "John Doe" --cycle 2026-Q1

That last command writes ./cases/2026-Q1/john-doe.docx — a structured brief grouped by competency, every line traceable to a dated note you actually wrote, with any competency that has zero evidence shown honestly rather than glossed over.

What it's for

  • Tracking direct reports heading toward a promotion
  • Your own case, if you're building evidence for your own next level
  • Peer or 360 contributions — logging what you noticed about someone outside your reporting line, for when their manager asks

Track anyone with --as report | self | mentee | cross-team | peer — the mechanism is the same regardless of the relationship.

Commands

Command What it does
ladderline init [--demo] Create a new workspace, optionally seeded with a demo person and one deliberate evidence gap
ladderline ladder list Show ladders registered in this workspace
ladderline ladder add <file> Register a ladder file
ladderline ladder remove <file> [--force] Remove a registered ladder
ladderline track <name> --ladder <file> --as <relationship> Start tracking a person
ladderline untrack <name> [--purge] Stop tracking (archives by default; --purge permanently deletes, asks you to type the name to confirm)
ladderline note <text> --person <name> [--tag <id> | --notag] [--date <date>] Log a single evidence note
ladderline note-delete --person <name> --date <date> [--tag <id> | --notag] [--filename <name>] Delete a single note (always asks to confirm)
ladderline cycle add <name> --start <date> --end <date> Define a review period
ladderline cycle list Show defined cycles
ladderline cycle remove <name> Remove a defined cycle
ladderline case [name] --cycle <name> [--format docx|md] [--all] [--as <relationship>] [--prompt] Assemble a case — one person, or --all for everyone
ladderline notag list [--person <name>] List notes not yet mapped to a competency
ladderline export [--person <name>] [--cycle <name>] [--since <date>] Zip the workspace, or a filtered slice of it
ladderline import <file.zip> [--force] Restore or merge a workspace from an export
ladderline dashboard [--port <port>] Launch the local web dashboard

Every command supports --help. Full details, file formats, and conventions live in the wiki.

The dashboard

ladderline dashboard starts a local web server (default http://localhost:4200, reachable only on your machine) with five views:

  • Person — one person at a time, each competency as a row, with note counts and how fresh the evidence is
  • Team grid — everyone at a glance, competencies as columns, for spotting gaps before calibration
  • Notes — every logged note, filterable and expandable to its raw file
  • Insights — coverage percentage, what's going stale, your own logging cadence, and cycle readiness
  • Docs — the same reference material as the wiki, rendered locally so it works fully offline

A small badge in the top bar surfaces when something needs attention — the same signal also shows up as a one-line nudge before any command's output, right in your terminal.

Why plain files

Every note is Markdown with YAML frontmatter:

---
person: john-doe
tag: technical-direction
date: 2026-02-10
cycle: 2026-Q1
---
Pushed back on the caching design in the payments migration doc,
proposed the write-through approach, and 3 other teams adopted it
after her RFC review.

You can write these by hand — in Obsidian, in any editor, however you like. Ladderline doesn't care how a note was created, only that it's a valid file in the right place. Full conventions are documented in the wiki.

Feedback

No telemetry, ever — nothing about your usage leaves your machine.

License

MIT — see LICENSE.

About

A local-first CLI for logging promotion evidence against your team's career ladder — plain files, no server, no AI-invented claims.

Topics

Resources

License

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors