[>_]in~/projects$cat /projects/tracklite.md
~/projects/tracklite.md

Tracklite

304 words · 1 min read

Open source on GitHub · Role: Built + maintain · Platform: Next.js, PostgreSQL

Tracklite is a small, open-source, self-hosted issue tracker for one invite-only team. Teams can file issues, move them across a board, and talk about them in comments, without the cycles, roadmaps, and integrations they never use.

What I did

I designed and built the whole app. Projects have a key (WEB), a Markdown description, and labels. Issues are numbered per project (WEB-42), with fixed statuses and priorities, an assignee, and up to 10 labels. It has a drag-and-drop board that works with mouse and keyboard, a list view whose search, filters, and sort live in the URL, comments with @mentions, a "My issues" landing page, and email notifications for assignments and mentions. Accounts are invitation-only, with member and admin roles.

I'm building it spec-first: a written spec gives every rule an ID (REQ-047), and each test is named after the spec example it proves, so a quick grep shows how any rule is covered.

The problem I solved

Linear and its peers are built for many teams and priced per seat, so a team of under about 15 people pays for, and wades through, features it never needs. Tracklite keeps the core and needs only PostgreSQL: no Redis, no paid queue, and no third-party services beyond an email provider. A worker process from the same codebase sends queued notification emails straight from a Postgres table using for update skip locked, and cleans up expired data hourly. The browser app is a strict single-page app that goes through one JSON API, where domain functions are the only permission layer, so every read and write passes the same checks.

Stack: TypeScript, Next.js, React, React Router, Redux Toolkit (RTK Query), React Aria Components, Tailwind CSS, Valibot, PostgreSQL, Drizzle ORM, Resend, Vitest, Biome

[>_] in $

type a command and press enter, or press ⌘K for suggestions

Run a command

Help

how this site works · esc to close

About this site

This is Trinh Nguyen's dev blog, dressed up as a terminal. Instead of clicking through pages, you run commands against a small virtual file system with three directories:

~/posts~/topics~/projects~/about

How to use it

  • Type a command at the prompt and press enter. Output is added below, like a shell session.
  • Press ⌘K (Ctrl+K on Windows/Linux) to open the command palette with suggestions and your recent commands.
  • The /posts, /topics, /projects and /about links in the header are shortcuts for cd ~/posts && ls and friends.
  • Chain commands with &&, e.g. cd ~/about && cat me.md.
  • To read an article, ls a directory, then cat the file you want.

Commands