Skip to content
← Back to work

Sole full-stack engineer & designer · 2025

Orbit — SaaS issue tracker

A production-grade issue tracker built solo from schema to UI: drag-and-drop Kanban with optimistic updates, a filterable table view, an analytics dashboard, guided onboarding, real auth, and an AI assistant that breaks vague tasks into concrete subtasks.

  • React
  • Express
  • Node.js
  • TypeScript
  • PostgreSQL
  • TypeORM
View live

01

Context

Issue trackers are a crowded, well-understood category — which is exactly why I picked one. When the domain is familiar, there is nowhere for sloppy execution to hide: state synchronization, drag-and-drop ordering, filtering, auth, and onboarding all have to work the way people expect from tools they use every day.

Orbit was built solo, end to end. Every architecture, backend, frontend, and design decision was mine to make — and mine to live with when it turned out to be wrong.

Orbit's sign-in page with a live-demo entry point beside the email form
The front door: sign in, or jump straight into a seeded live demo — no sign-up needed.

02

What I built

Teams plan work on a drag-and-drop Kanban board and can flip to a filterable table view of the same data. An analytics dashboard tracks progress over time, and a guided onboarding flow takes a new user from an empty workspace to a working board. Authentication and authorization are real, not stubbed.

The AI feature turns a vague one-line task into concrete, actionable subtasks. It is scoped deliberately: an assistant inside the planning workflow, not a chatbot bolted on beside it.

Orbit's Kanban board: backlog, selected for development, in progress, and done columns with assigned issues
The Kanban board — drag a card and the UI commits instantly; the server reconciles behind it.

03

Technical decisions

The board is optimistic end to end: mutations update the UI immediately and reconcile with the server afterward, so dragging a card never waits on a round trip. The cost of that choice is that every mutation needs a rollback path for when the server disagrees — most of the board's complexity lives there, not in the drag-and-drop itself.

Data lives in PostgreSQL behind TypeORM, with a relational model shaped around the three read patterns that matter: the board, the table view, and the analytics rollups.

The AI breakdown is treated like any other production feature: model output is parsed and validated into real subtask records before anything touches the database, and failure degrades gracefully instead of blocking the flow.

Orbit's list view: issues in a dense table with status, assignee, priority, and filter controls
The same issues as a dense, filterable table — one relational model serving two very different read patterns.

04

Outcome

Orbit is deployed and live — the sign-in page offers a seeded demo workspace, so you can explore the board without creating an account. As a solo project, its value is demonstrating the part of product engineering that demos skip: the integration seams and edge cases where real products either hold up or fall apart.

Orbit's analytics dashboard: issue counts, status donut chart, priority bars, workload by assignee, and issues over time
The analytics dashboard — status, priority, and per-assignee workload rolled up from the same Postgres model.