Ticketing MS

Issue tracking for small teams, on a server you control.

Projects, issues, a board and a calendar for the people doing the work. Member management and sign-in security for the people looking after them. Open source under the MIT license.

To Do 3
Improvement

Renew the TLS certificate for the status page

#14Due Friday
RA
Feature

Export the sign-in log as CSV

#170/3
Documentation

Write the on-call handover checklist

#212
In Progress 2
Bug

Email field clears after a failed sign-in

#121/24
BS
Improvement

Move avatar uploads to the new bucket

#19
DL
Done 1
Feature

Add a due date to recurring backups

#92/2
RA

Drag a card to another column. With a keyboard: Tab to a card, Space to pick it up, arrow keys to move, Space to drop.

For the people doing the work

Everything for working through issues together.

Projects you belong to
Switch from the sidebar or jump anywhere with Ctrl + K. Star the projects you open most.
Three views of the same issues
A filterable list, a board with your own columns, and a calendar by due date.
Issues that hold the real work
Markdown with pasted images, task checklists, labels, an assignee, a due date, comments and a full history.
Your own dashboard
What's assigned to you, what's overdue and what's due this week, across every project.

Accounts and roles

No self sign-up: accounts are created from the top down, so a team only sees its own work.

Team admins
Each team's admin creates the team's user accounts, resets their passwords and deactivates them, and works in projects like everyone else.
One superadmin
The owner creates teams and their admins, renames teams, and sees every account, with dormant-account checks and a sign-in log with IP address and device. Never sees projects or issues.

Security built in

The details are in docs/security.md.

  • Sessions use 15-minute access tokens and rotating refresh tokens. Reusing an old one signs that session out.
  • Changing a password or a role, or deactivating an account, signs the user out everywhere.
  • Sign-in attempts are limited per email and per IP, and every write request is rate limited.
  • Passwords are checked against known data breaches before they're accepted.
  • People only see the projects they're members of. Markdown is sanitized and strict security headers are on.

Host your own

You need Node.js 20.9 or newer, a Neon Postgres database (the free plan is enough) and a Cloudinary account. The self-hosting guide covers deploying and upgrading.

  1. 1

    Clone the repository and install dependencies.

    git clone https://github.com/Trias1/ticketing.git
    cd ticketing
    npm install
  2. 2

    Copy .env.example to .env.local and fill in your Neon URL, a JWT secret and Cloudinary keys.

    cp .env.example .env.local
  3. 3

    Create the tables and the first superadmin account.

    npx drizzle-kit push
    SEED_ADMIN_EMAIL=you@yourcompany.com SEED_ADMIN_PASSWORD=... npx tsx scripts/seed-user.ts
  4. 4

    Start the app and sign in.

    npm run dev