Ledgerly is a working FastAPI payments service. Transfers can overdraw an account, cents go missing to float rounding, and a retried request moves the money twice. You fix each bug in the real codebase and open a GitHub pull request. An AI teammate reviews it, and a hidden pytest suite decides whether it passes.
Real GitHub PRs · Graded by pytest · Free during beta
Payments code has to be exact. Each Ledgerly ticket is a bug report with acceptance criteria, in a Python codebase you didn't write.
A transfer bigger than the source account's available balance still goes through and leaves the account negative. To pass, that transfer has to be rejected while valid transfers keep working.
Amounts are added as floating-point dollars, so sums like 0.1 + 0.2 drift and balances stop reconciling. To pass, every supported operation has to be exact to the cent and a series of transfers has to add up to the expected total.
A retry with the same idempotency key creates a second transfer instead of returning the first one. To pass, the same key twice has to produce exactly one transfer, while different keys still create separate transfers.
Each Ledgerly ticket has a hidden pytest file that's added to your branch at grading time. The result appears on your pull request as a check.
Ledgerly assumes you can write Python and have seen a web API before. It tests whether you can fix a money bug without breaking the transfers that already work.
Python developers aiming at fintech or backend roles who want work that looks like the job.
Data and scripting folks moving into backend work who have never shipped an API fix.
Bootcamp grads and self-taught devs whose projects have never been reviewed.
Juniors who want to learn idempotency keys and decimal money before an incident teaches them.
Not for: people new to Python. Ledgerly is about debugging an existing API, so learn the language first.
Python 3.13 and pip if you work locally. Every Ledgerly repo also opens in GitHub Codespaces with Python ready.
An AI teammate reviews the diff in the PR thread and can ask for changes. Whether the fix is correct is decided by the hidden pytest suite.
A value the client sends with a request so the server can tell a retry from a new request. LEDG-215 is about honoring it, so a network retry doesn't move the money twice.
The failing test output is on the pull request. Push a new commit and the check runs again.
Yes. Finishing the sprint gives you a certificate with the stack, the tickets you shipped and your tracked hours, behind a public link.
It's free during the beta.