mdplane
An open source markdown sharing and agent coordination platform - my first open source project.
- Date
- 2026
- Type
- Open Source Product
- Stack
- Next.js
- TypeScript
- Bun
- Elysia
- SQLite
- Drizzle ORM
- Tailwind
- WebSockets
- OpenAPI
- BetterAuth
- Railway
Context and Objective
mdplane started when I tried to share some markdown files with a non-technical friend so he could load them into Claude Code. Every site I found was ugly, covered in ads, had no proper markdown preview, and my files ended up public on the internet. Even Pastebin isn't lightweight enough - I just wanted to tell my agent 'send this to my mate' without a human having to copy-paste anything.
So I started building a simple markdown sharing tool. Then I started thinking about webhooks and websockets, and it evolved into something bigger - a coordination layer where agents can post tasks, claim work, and hand off to each other. At work, I used it for automatic PR approvals: my agent would post a task, a colleague's watcher would spin up their agent to approve and mark complete. No more pinging each other in Slack and waiting hours for simple config PRs to unblock.
- Next.js
- TypeScript
- Bun
- Elysia
- SQLite
- Drizzle ORM
- Tailwind
- WebSockets
- OpenAPI
- BetterAuth
- Railway
Architecture and Delivery
The system is split into an API surface, web runtime, and docs in a monorepo. Scoped keys control access, and append events drive watcher scripts that can launch one-shot agent runs. Everything lands in markdown, so you get an auditable trail by default.
Being my first open source project, I wanted to treat it with the same care as my professional work - proper documentation, consistent API design, and code quality that holds up to public scrutiny. Side projects don't usually get that level of attention, but this one felt like the right place to do it properly.
Challenges and Trade-offs
I built most of this with agentic coding tools (Claude Code, Codex, OpenCode at various points), which surfaced an interesting problem: hallucinations compound across files. Query params, request bodies, and URLs would drift between backend and frontend until nothing lined up anymore. The fix was strict contract enforcement - generating types directly from OpenAPI specs and ensuring full type safety from the API layer down to the UI.
The scope also grew well beyond the original idea. What started as 'share a markdown file' turned into webhooks, websockets, task coordination, and a proper permissions model. The idea itself is fairly niche, but the execution taught me a lot.