Skip to content

Project — 2026

Kira

A self-hosted project management tool with boards, sprints, epics, and an AI-accessible API.

Role: Creator
  • TypeScript
  • React
  • Node.js
  • Express
  • SQLite
  • Prisma
  • Tailwind CSS

What it is

Kira is a self-hosted project management application modeled loosely on tools like Jira or Linear. It handles the full lifecycle of software work: tickets, epics, sprints, boards, milestones, and reporting, all within a multi-project, multi-organization structure.

Architecture

The codebase is a TypeScript monorepo with three packages. @kira/api is an Express server that owns all business logic and persistence. @kira/web-app is a React 19 single-page application built with Vite and styled with Tailwind CSS v4. @kira/shared holds types and enums used by both. In production the API serves the compiled web-app as static files, so the whole stack runs as a single pm2 process behind a Cloudflare tunnel.

Persistence is SQLite via Prisma. The schema covers users, organizations, projects, tickets, epics, sprints, labels, milestones, comments, attachments, work logs, saved filters, custom fields, documents, webhooks, audit logs, and notifications — roughly the surface area you’d expect from a mid-tier issue tracker.

Technical highlights

Authentication supports local email/password and Google OAuth via a server-side popup flow. The API uses JWT access tokens with refresh token rotation. File uploads are served through an authenticated static middleware so attachments are not publicly accessible.

A notable addition is a machine-readable skill guide at /api/robots/skill that documents the REST API for AI agents. The endpoint is public and returns a Markdown reference that tools like Claude Code can fetch to interact with the tracker programmatically — creating tickets, updating sprints, and querying project state via API key.

The frontend uses @tanstack/react-query for data fetching, dnd-kit for the Kanban board drag-and-drop, react-markdown with remark-gfm for document rendering, and server-sent events for real-time board updates. E2E tests run with Playwright.