← All products

Keep the work and its context together.

A personal issue tracker with linked notes, GitHub issue sync, and reminders to help you pick up where you left off.

Product
Lacakku
Platform
Web
Built with
Go, SQLite, Svelte 5, TypeScript, Model Context Protocol
Made at
Sevtee, as an independent product
Lacakku logo

Built for the way I manage projects: issues for the next action, notes for the decisions behind it, and a record of each work session. Projects can start locally and connect to GitHub when needed.

What it does

Lacakku is my own issue tracker and notes tool, built for one person who runs many small projects and works with AI coding agents. Issues mirror both ways with GitHub Issues. Notes are plain Markdown files with wiki links that Obsidian can open as a vault. Every work session ends with a short “where I left off” entry, so the next session, mine or an agent’s, can pick up the thread.

It runs as one Go binary with the Svelte interface embedded and SQLite underneath, signed in with Google, invitation only.

What was built

  • Two-way GitHub sync through a GitHub App: HMAC-signed webhooks for seconds-level latency, a reconciliation sweep that repairs missed events, echo suppression so my own writes do not bounce back, and per-field last-write-wins with a visible history of what was overridden. A branch named after an issue moves it to In Progress; a pull request that closes it moves it to In Review.
  • A notes vault where files are the truth and SQLite is a rebuildable index, with backlinks, sub-pages and typed properties in front matter.
  • An MCP server, over stdio and streamable HTTP, so Claude Code and Codex can read projects, create and update issues, log sessions and write notes. A stop hook asks every session where it stopped and what comes next.
  • Cycles, a Today list, deadlines, reminders by ntfy and Telegram, and a Sunday digest.
  • An installable offline web app: the server pre-renders responses into a bundle, an outbox queues writes and replays them in order, and conflicts surface on a Sync screen.
  • Passkey sign-in, API keys, nightly age-encrypted backups to object storage, and a passkey-unlocked money ledger.

Engineering decisions

  • Build instead of adopt. Linear’s free tier capped issues, Plane and Huly wanted 4 to 8 GB of RAM on a server with about 1.5 GB free, and an earlier Notion board died within a month.
  • GitHub owns the issues. Lacakku-only fields such as ordering and cycle live beside them, so nothing is lost if the tool goes away.
  • Notes as files, not rows, so any editor works and nothing needs exporting.
  • Offline through a response bundle plus outbox, rather than a SQLite copy in the browser, which would have meant rewriting every server query in TypeScript for a 2 MB database.
  • Schedules in an in-process ticker, because ntfy’s delayed delivery stops at three days and restarts would lose state.

What I learned

This was my first MCP server, built on the official Go SDK, and designing for agents changed the data model. Tool results carry the rule that titles and bodies are data, never instructions, and the session log exists because agents forget between runs.

Passkeys with the PRF extension were new to me, and they are now the basis for secrets the server cannot read. Before designing offline sync I studied how Notion does it, then chose the smaller approach that fit a tiny database.

The project was also an exercise in how I work with agents: milestone plans, parallel worktrees, and a written lean flow for token cost, with the tracker tracking its own development.

Next productbatlog

Project screenshots

Have something in mind?

Let’s make it work.