A modern, full-stack issue tracking application built with React, Fastify, and SQLite.
- π Authentication - Secure user authentication with BetterAuth
- π Issue Management - Create, read, update, and delete issues
- π·οΈ Tag System - Organize issues with customizable tags
- π Advanced Filtering - Filter by status, priority, assignee, tags, and search
- π₯ User Management - Assign issues to team members
- π± Responsive Design - Works great on desktop and mobile
- β‘ Fast & Modern - Built with modern web technologies
- Fastify - High-performance Node.js web framework
- SQLite - Lightweight, embedded database
- BetterAuth - Modern authentication library
- TypeScript - Type-safe JavaScript
- React 18 - Modern React with hooks
- Vite - Fast build tool and dev server
- Tailwind CSS - Utility-first CSS framework
- shadcn/ui - Beautiful, accessible components
- TypeScript - Type-safe JavaScript
βββ backend/ # Fastify API server
β βββ src/
β β βββ index.ts # Main server file
β βββ package.json
β βββ tsconfig.json
βββ frontend/ # React application
β βββ src/
β β βββ App.tsx
β β βββ main.tsx
β β βββ lib/
β β βββ utils.ts
β βββ package.json
β βββ tsconfig.json
βββ package.json # Root workspace configuration
- Node.js 18+ and npm
- Git
-
Clone the repository
git clone <your-repo-url> cd issues
-
Set up the backend
cd backend npm install # Copy environment template and configure cp .env.template .env # Edit .env with your settings # Run database migrations npm run migrate # Seed with sample data (optional) npm run seed
-
Set up the frontend
cd ../frontend npm install # Copy environment template and configure cp .env.template .env # Edit .env with your settings
-
Start the development servers
From the project root:
npm run dev
Or start individually:
# Backend (in backend/ directory) npm run dev # Frontend (in frontend/ directory) npm run dev
-
Access the application
- Frontend: http://localhost:5173
- Backend API: http://localhost:3000
- Health check: http://localhost:3000/health
DATABASE_PATH=database.sqlite
BETTER_AUTH_SECRET=your-super-secret-auth-key-change-this-in-production
BETTER_AUTH_BASE_URL=http://localhost:3000
PORT=3000
HOST=0.0.0.0
NODE_ENV=development
FRONTEND_URL=http://localhost:5173
LOG_LEVEL=infoVITE_API_URL=http://localhost:3000/api
VITE_NODE_ENV=developmentnpm run dev- Start both frontend and backend in development modenpm run build- Build both frontend and backend for productionnpm run test- Run all tests (frontend + backend)
npm run dev- Start development server with hot reloadnpm run build- Build for productionnpm run start- Start production servernpm run test- Run test suitenpm run test:watch- Run tests in watch modenpm run migrate- Run database migrationsnpm run seed- Seed database with sample data
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run test- Run test suitenpm run lint- Run ESLint
POST /api/auth/sign-up/email- User registrationPOST /api/auth/sign-in/email- User loginPOST /api/auth/sign-out- User logoutGET /api/auth/get-session- Get current user session
GET /api/issues- List issues with filtering and paginationPOST /api/issues- Create new issueGET /api/issues/:id- Get issue by IDPUT /api/issues/:id- Update issueDELETE /api/issues/:id- Delete issue
GET /api/tags- List all tagsPOST /api/tags- Create new tagDELETE /api/tags/:id- Delete tag
GET /api/users- List users (for assignment)
GET /health- Application health statusGET /health/ready- Readiness probeGET /health/live- Liveness probe
Run the comprehensive test suite:
# All tests
npm run test
# Backend tests only
cd backend && npm test
# Frontend tests only
cd frontend && npm test
# Watch mode
npm run test:watch- Backend: 85 tests covering CRUD operations, authentication, filtering, error scenarios
- Frontend: 15 tests covering responsive design and component behavior
Sample Users:
john@example.com/password123jane@example.com/password123admin@example.com/admin123dev@example.com/dev123
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the Apache 2.0 License - see the LICENSE file for details.
If you encounter any issues or have questions, please open an issue on GitHub.