Track what you actually know about something.
Most ways of tracking learning are just lists. A checkbox next to "learn Kubernetes" says nothing about whether you could explain it to someone, and a folder of notes says nothing about how much is left.
Knowledge Log is a place to break a subject into pieces, record where you stand on each one, and get an honest number back. Keep a topic private as a personal notebook, or make it public so other people can follow along, discuss it, and learn from the path you took.
Self-hosted, open source, and yours to run.
You need Docker with the Compose plugin. Nothing else.
# Get the two files you need
curl -O https://raw.githubusercontent.com/negeek/knowledge_log/main/docker-compose.example.yml
curl -O https://raw.githubusercontent.com/negeek/knowledge_log/main/.env.example
mv .env.example .envOpen .env and set three things:
SECRET_KEY= # python -c "import secrets; print(secrets.token_urlsafe(50))"
POSTGRES_PASSWORD= # anything long and random
ALLOWED_HOSTS=localhost,127.0.0.1Then start it:
docker compose -f docker-compose.example.yml up -d
docker compose -f docker-compose.example.yml exec web python manage.py createsuperuserOpen http://localhost:8000.
TLS is left to whatever reverse proxy you already run, such as Caddy, Traefik, or nginx, in front of port 8000.
Email is set to console by default, which logs messages instead of sending
them, so nothing needs configuring to get started. Point EMAIL_PROVIDER at
SMTP, Resend, SendGrid, or SendPulse when you want real delivery. Every
setting is listed in .env.example.
git clone https://github.com/negeek/knowledge_log.git
cd knowledge_log
cp .env.example .env # set SECRET_KEY
make migrate
make upSee docs/contributing.md for the full development setup.
Progress that means something. Break a topic into entries, mark where you are on each, and get a percentage that reflects the whole thing. Entries can nest as deep as the subject actually goes, so a single item that turns out to contain a whole sub-project can be opened up rather than glossed over.
Two ways to measure, because subjects differ. Some things have a finish line. Others do not.
- Checklist answers "am I done?". Entries move from to do, to in progress, to done.
- Mastery answers "how well do I know this?". Entries move from unknown, to aware, to working, to fluent, to can teach.
- Manual is for when you would rather just set the number yourself.
No guesswork up front. You never have to estimate what fraction of a subject an entry represents. Everything starts equal, and when one item turns out to be three times the work, you say so and the whole topic recalculates.
Deadlines that notice. Give a topic a target date and it will tell you when you are falling behind, when the date is approaching, and when it has passed. Quiet, and only when there is something to say.
Private by default. New topics are visible only to you. Publish one when you want to, archive it when you are finished, and change your mind at any time.
A place to learn in public. Public topics can be followed, liked, and discussed. Comment on a whole topic or on one specific entry, and reply to other people.
Two feeds. One follows the people you follow. The other surfaces what is active across the whole instance, weighted so that good new topics can surface rather than the same few sitting at the top forever.
Your profile as a record. Bio, avatar, most-liked topics, and totals, showing what you have actually worked through.
Notifications that stay out of the way. New followers, likes, comments, replies, deadline nudges, and completed topics. Read them in the app.
Dark mode, following your system setting or your explicit choice.
A full API. Everything the web interface does is available as a
documented JSON API with interactive docs at /api/docs/, so the data stays
yours to build on.
docs/ explains how the codebase is built and why it is shaped the way it is. Start with docs/architecture.md.
| architecture.md | Layering, request flow, app layout |
| models.md | The data model |
| repositories.md | Queries and the visibility rules |
| services.md | Business logic and background work |
| api.md | The JSON API |
| web.md | The server-rendered UI and HTMX conventions |
| design-system.md | Color, type, spacing, components |
| decisions.md | Why things are the way they are |
| infrastructure.md | Settings, Docker, CI/CD, environment |
| testing.md | How the suite is organised |
| contributing.md | Setup and workflow |
Python 3.13, Django 5.2 LTS, Django REST Framework, PostgreSQL 17, Redis 7, Celery, HTMX and Alpine with no build step, and uv for dependencies.
Issues and pull requests are welcome. Start with docs/contributing.md, which lists setup, the conventions worth knowing, and some self-contained places to begin.
MIT.