Production-grade Jira-like issue tracker — demonstrating scalable Next.js architecture with Supabase, RBAC, and real-world engineering patterns.
Includes E2E tests, production-ready patterns, and a real Supabase backend.
01Engineering Highlights
Ops Tracker is a full-stack project management and issue tracking application demonstrating production-level frontend architecture backed by a real Supabase (PostgreSQL) database. It covers authentication, role-based access control, Kanban boards, project-scoped issues, full audit trails, transactional email, and internationalisation across three languages — everything a real B2B SaaS requires.
- 01Next.js 16 App Router
Server Components, Server Actions, and proxy middleware drive both authentication and i18n end-to-end.
- 02Row Level Security at the DB
Supabase RLS enforces every read and write at the database layer — zero-trust by default.
- 03Three-Tier RBAC
User, Admin, and Super Admin roles are stored as a typed Postgres app_role enum and validated server-side.
- 04Virtualised Issue Table
TanStack Table v8 paired with @tanstack/react-virtual keeps large issue lists smooth at any row count.
- 05Playwright E2E Coverage
Critical authentication and issue workflows are guarded by end-to-end Playwright tests.
02Architecture Snapshot
- 01Feature-based modules
Each domain lives under src/features/<domain>/ with its components, hooks, actions, service, and Zod schemas colocated.
- 02Server-first data fetching
Server Components handle the initial paint; TanStack Query takes over on the client for lists, filters, and optimistic mutations.
- 03Defense in depth
Supabase RLS plus Server Action role checks enforce permissions twice — the client is never trusted for authorization.
- 04Append-only audit log
Every mutating action is written to a PostgreSQL audit_logs table with typed action keys, actor, entity, and metadata.
03Challenges & Decisions
Key architectural challenges, trade-offs, and decisions made while building Ops Tracker.
Server Components give a fast, SEO-friendly first paint, but lists, filters, and inline editing need real client interactivity.
A hybrid model: Server Components prefetch data and dehydrate it into a HydrationBoundary, then TanStack Query takes over on the client for filtering, sorting, and optimistic updates.
Two data layers raise the mental-model overhead — every feature has to decide where its data lives — but first paint stays fast and the UI never feels static.
B2B SaaS needs full traceability: who did what, when, and to which entity — without coupling that bookkeeping to feature code.
An append-only PostgreSQL audit_logs table is written from a single, typed audit service. Action keys are a literal union, so every mutation has to declare its intent at the type level.
Write amplification and storage growth are real, but the audit trail is the source of truth for compliance, debugging, and the in-app activity timelines.
A flat src/components + src/hooks layout collapses under its own weight once a project has multiple bounded contexts.
Code is organised by feature (src/features/<domain>/) with components, hooks, server actions, services, and schemas colocated next to the domain they belong to.
Cross-feature reuse takes a deliberate promotion step into shared/, but ownership is obvious and refactoring a single domain rarely touches anything outside its folder.
04Tech Stack
05Key Features
- Drag-and-Drop Kanban Board
Per-project Kanban board powered by @dnd-kit with columns driven by configurable workflow statuses.
- Role-Based Access Control
Three-tier RBAC — User, Admin, Super Admin — enforced at the database layer via Supabase RLS.
- Virtualised Issue Table
Large issue lists rendered with TanStack Table v8 and @tanstack/react-virtual for smooth performance at scale.
- Full Audit Trail
Every mutating action is recorded to PostgreSQL audit_logs with colour-coded action badges and meaningful summaries.
- Internationalisation
Full i18n via next-intl across English, German, and Slovenian including all validation messages and error text.
- Admin Control Panel
Dedicated /admin area for user role management, issue status CRUD, global audit log, and super-admin settings.