A full-featured issue tracking application built with Next.js 16 and the App Router. Create, manage, and track issues with user assignment, status tracking, and analytics.
View issue statistics at a glance with summary cards and an interactive bar chart showing issue distribution by status.
Browse all issues with server-side pagination, sorting, and filtering by status.
View and manage individual issues with status updates, user assignment, and edit/delete actions.
- Issue Management - Create, read, update, and delete issues
- Status Tracking - Track issues through Open, In Progress, and Closed states
- User Assignment - Assign issues to registered users
- Dashboard Analytics - Visual summary with charts powered by Recharts
- Authentication - OAuth login with Google and GitHub via BetterAuth
- Server-side Pagination - Efficient data loading with URL-based pagination
- Filtering & Sorting - Filter by status and sort by any column
- Markdown Support - Rich text descriptions with markdown editor
- Real-time Notifications - Toast notifications for user feedback
| Category | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript 5 |
| UI Library | React 19 |
| Styling | Tailwind CSS 4 |
| Components | Radix UI Themes |
| Database | MariaDB with Prisma ORM |
| Authentication | BetterAuth |
| Charts | Recharts |
| Forms | React Hook Form + Zod |
| Data Fetching | TanStack Query |
| Security | Arcjet |
- Node.js 18.17 or later
- MariaDB or MySQL database
- OAuth credentials (Google and/or GitHub)
-
Clone the repository
git clone https://github.com/yourusername/issue-tracker.git cd issue-tracker -
Install dependencies
npm install
-
Set up environment variables
cp .env.example .env
Edit
.envand fill in your values:DATABASE_PASSWORD- Your MariaDB passwordBETTER_AUTH_SECRET- A secure random string for authGOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET- From Google Cloud ConsoleGITHUB_CLIENT_ID/GITHUB_CLIENT_SECRET- From GitHub Developer Settings
-
Set up the database
npx prisma generate npx prisma migrate dev
-
Start the development server
npm run dev
-
Open http://localhost:3000 in your browser
issue-tracker/
├── app/
│ ├── api/ # API routes (issues, users, auth)
│ ├── components/ # Shared UI components
│ ├── issues/ # Issue pages and components
│ │ ├── _components/ # Issue-specific components
│ │ ├── [id]/ # Individual issue page
│ │ ├── list/ # Issues list page
│ │ └── new/ # New issue page
│ ├── lib/ # Auth configuration
│ └── page.tsx # Dashboard home page
├── generated/ # Prisma generated client
├── prisma/
│ ├── client.ts # Prisma client singleton
│ └── schema.prisma # Database schema
└── public/ # Static assets
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm start |
Start production server |
npm run lint |
Run ESLint |
npx prisma studio |
Open Prisma Studio |
MIT License - feel free to use this project for learning or as a starting point for your own applications.