{"id":19306291,"url":"https://github.com/audrbar/issue-tracker","last_synced_at":"2026-04-02T01:02:52.838Z","repository":{"id":205342797,"uuid":"714001800","full_name":"audrbar/issue-tracker","owner":"audrbar","description":"A full-featured issue tracking system built with Next.js 14, featuring real-time updates, role-based access control, and comprehensive issue management capabilities.","archived":false,"fork":false,"pushed_at":"2025-12-27T15:31:20.000Z","size":1613,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T14:28:53.332Z","etag":null,"topics":["axios","mdeditor","next-auth","nextjs","postgresql","prisma","radix-ui","reacthookform","recharts","simplemde","tailwindcss","tanstack-query","typescript","zod"],"latest_commit_sha":null,"homepage":"https://issue-tracker-audrbar.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/audrbar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-03T17:39:24.000Z","updated_at":"2025-12-27T15:49:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"2575f0a1-f67a-4ab5-b267-c22042224433","html_url":"https://github.com/audrbar/issue-tracker","commit_stats":null,"previous_names":["audrbar/issue-tracker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/audrbar/issue-tracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audrbar%2Fissue-tracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audrbar%2Fissue-tracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audrbar%2Fissue-tracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audrbar%2Fissue-tracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/audrbar","download_url":"https://codeload.github.com/audrbar/issue-tracker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audrbar%2Fissue-tracker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31293631,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["axios","mdeditor","next-auth","nextjs","postgresql","prisma","radix-ui","reacthookform","recharts","simplemde","tailwindcss","tanstack-query","typescript","zod"],"created_at":"2024-11-10T00:05:21.867Z","updated_at":"2026-04-02T01:02:52.519Z","avatar_url":"https://github.com/audrbar.png","language":"TypeScript","readme":"# Issue Tracker Application\n\nA full-featured issue tracking system built with Next.js 14, featuring real-time updates, role-based access control, and comprehensive issue management capabilities.\n\n## 🚀 Features\n\n### Core Functionality\n- **Issue Management**: Create, read, update, and delete issues\n- **Rich Text Editor**: Markdown support for issue descriptions with live preview\n- **User Authentication**: Secure Google OAuth integration via NextAuth\n- **Issue Assignment**: Assign issues to team members\n- **Status Workflow**: Track issues through OPEN → IN_PROGRESS → CLOSED states\n- **Priority Management**: Set issue priorities (LOW, MEDIUM, HIGH)\n\n### Advanced Features\n- **Comments System**: Markdown-supported comments with user attribution\n- **Activity Timeline**: Complete audit trail of all issue changes\n- **Advanced Search**: Debounced search across issue titles and descriptions\n- **Smart Filtering**: Filter by status, assignee, and priority\n- **Role-Based Access Control (RBAC)**: Three-tier permission system (ADMIN, USER, VIEWER)\n- **Pagination**: Efficient data loading with customizable page sizes\n- **Responsive Design**: Mobile-friendly interface using Radix UI\n\n### Data Visualization\n- **Dashboard Analytics**: Visual representation of issue statistics\n- **Status Distribution Charts**: Interactive charts using Recharts\n- **Issue Trends**: Track open vs closed issues over time\n\n## 🛠️ Tech Stack\n\n- **Framework**: [Next.js 14.2.23](https://nextjs.org/) (App Router)\n- **Language**: [TypeScript 5.7.2](https://www.typescriptlang.org/)\n- **Database**: [PostgreSQL](https://www.postgresql.org/) with [Prisma ORM 5.22.0](https://www.prisma.io/)\n- **Authentication**: [NextAuth 4.24.13](https://next-auth.js.org/) with Google Provider\n- **UI Components**: [Radix UI Themes 3.2.1](https://www.radix-ui.com/)\n- **Styling**: [Tailwind CSS 3.4.18](https://tailwindcss.com/)\n- **Forms**: [React Hook Form 7.69.0](https://react-hook-form.com/) + [Zod 3.25.76](https://zod.dev/)\n- **State Management**: [TanStack Query 5.70.1](https://tanstack.com/query)\n- **Charts**: [Recharts 2.15.0](https://recharts.org/)\n- **Markdown**: [React Markdown 9.0.4](https://github.com/remarkjs/react-markdown)\n- **Editor**: [SimpleMDE 1.32.1](https://simplemde.com/)\n\n## 📋 Prerequisites\n\nBefore you begin, ensure you have the following installed:\n- **Node.js** 18.x or higher\n- **npm** or **yarn**\n- **PostgreSQL** database (local or hosted)\n- **Google Cloud Console** account for OAuth credentials\n\n## 🔧 Installation\n\n1. **Clone the repository**\n   ```bash\n   git clone \u003cyour-repo-url\u003e\n   cd issue-tracker\n   ```\n\n2. **Install dependencies**\n   ```bash\n   npm install\n   ```\n\n3. **Set up environment variables**\n\n   Create a `.env` file in the root directory (or copy from `.env.example`):\n   ```env\n   # Environment\n   NODE_ENV=development\n\n   # Database\n   DATABASE_URL=\"postgresql://username:password@host:port/database\"\n\n   # NextAuth Configuration\n   NEXTAUTH_SECRET=\"your-secret-key-here\"\n\n   # Application URL (automatically switches based on environment)\n   # Development: http://localhost:3000\n   # Production: https://your-production-domain.com\n   NEXTAUTH_URL=\"http://localhost:3000\"\n\n   # Google OAuth Credentials\n   GOOGLE_CLIENT_ID=\"your-google-client-id\"\n   GOOGLE_CLIENT_SECRET=\"your-google-client-secret\"\n   ```\n\n4. **Generate NextAuth Secret**\n   ```bash\n   node -e \"console.log(require('crypto').randomBytes(32).toString('base64'))\"\n   ```\n\n5. **Set up Google OAuth**\n   - Go to [Google Cloud Console](https://console.cloud.google.com)\n   - Create a new project or select existing one\n   - Enable Google+ API\n   - Create OAuth 2.0 credentials\n   - Add authorized redirect URI: `http://localhost:3000/api/auth/callback/google`\n   - Copy Client ID and Client Secret to your `.env` file\n\n6. **Initialize the database**\n   ```bash\n   npx prisma migrate dev\n   npx prisma generate\n   ```\n\n7. **Run the development server**\n   ```bash\n   npm run dev\n   ```\n\n8. **Open your browser**\n\n   Navigate to [http://localhost:3000](http://localhost:3000)\n\n## 🗄️ Database Schema\n\nThe application uses the following main models:\n\n- **User**: Authentication and role management\n- **Issue**: Core issue tracking with status, priority, and assignments\n- **Comment**: User comments on issues with markdown support\n- **ActivityLog**: Audit trail of all issue changes\n- **Label**: Categorization tags for issues\n\n## 📁 Project Structure\n\n```\nissue-tracker/\n├── app/\n│   ├── api/                    # API routes\n│   │   ├── issues/            # Issue CRUD operations\n│   │   ├── users/             # User management\n│   │   └── auth/              # NextAuth configuration\n│   ├── auth/                   # Authentication utilities\n│   │   ├── authOptions.ts     # NextAuth config\n│   │   ├── Provider.tsx       # Session provider\n│   │   └── authorization.ts   # RBAC helpers\n│   ├── components/             # Shared components\n│   ├── issues/                 # Issue-related pages\n│   │   ├── [id]/              # Issue detail pages\n│   │   ├── list/              # Issue list with filters\n│   │   ├── new/               # Create issue\n│   │   └── _components/       # Issue components\n│   ├── lib/                    # Utility functions\n│   │   └── activityLogger.ts  # Activity logging\n│   ├── layout.tsx              # Root layout\n│   ├── page.tsx                # Dashboard\n│   └── validationSchemas.ts    # Zod schemas\n├── prisma/\n│   ├── schema.prisma           # Database schema\n│   └── client.ts               # Prisma client\n├── public/                     # Static assets\n└── types/                      # TypeScript declarations\n\n```\n\n## 🎯 Key Features in Detail\n\n### 1. Status Workflow\nIssues progress through three states:\n- **OPEN**: Newly created issues\n- **IN_PROGRESS**: Issues being worked on\n- **CLOSED**: Completed issues\n\n### 2. Role-Based Access Control\nThree user roles with different permissions:\n- **ADMIN**: Full access to all operations\n- **USER**: Can create and edit own issues, comment on any issue\n- **VIEWER**: Read-only access\n\n### 3. Comments System\n- Markdown support with live rendering\n- User attribution with timestamps\n- Real-time updates via React Query\n- Cascade deletion when issue is removed\n\n### 4. Activity Timeline\nTracks all changes including:\n- Issue creation\n- Status changes\n- Priority updates\n- Assignment changes\n- Description modifications\n\n### 5. Advanced Filtering\n- **Search**: Debounced search across titles and descriptions\n- **Status Filter**: Filter by issue status\n- **Assignee Filter**: View issues by assignee or unassigned\n- **Combined Filters**: All filters work together seamlessly\n\n### 6. Priority Management\nThree priority levels:\n- 🔴 **HIGH**: Urgent issues requiring immediate attention\n- 🟡 **MEDIUM**: Standard priority (default)\n- 🟢 **LOW**: Non-urgent issues\n\n## 🚦 API Endpoints\n\n### Issues\n- `GET /api/issues` - List all issues with filters\n- `POST /api/issues` - Create new issue\n- `GET /api/issues/[id]` - Get issue details\n- `PATCH /api/issues/[id]` - Update issue\n- `DELETE /api/issues/[id]` - Delete issue\n\n### Comments\n- `GET /api/issues/[id]/comments` - Get issue comments\n- `POST /api/issues/[id]/comments` - Add comment\n\n### Activities\n- `GET /api/issues/[id]/activities` - Get issue activity log\n\n### Users\n- `GET /api/users` - List all users\n\n## 🔐 Environment Variables\n\n| Variable | Description | Required | Example |\n|----------|-------------|----------|----------|\n| `NODE_ENV` | Environment mode | ✅ | `development` or `production` |\n| `DATABASE_URL` | PostgreSQL connection string | ✅ | `postgresql://user:pass@host:5432/db` |\n| `NEXTAUTH_SECRET` | Secret for JWT signing (32+ chars) | ✅ | Generate with crypto |\n| `NEXTAUTH_URL` | Application URL (environment-specific) | ✅ | `http://localhost:3000` (dev)\u003cbr\u003e`https://app.com` (prod) |\n| `GOOGLE_CLIENT_ID` | Google OAuth Client ID | ✅ | From Google Cloud Console |\n| `GOOGLE_CLIENT_SECRET` | Google OAuth Client Secret | ✅ | From Google Cloud Console |\n\n## 🧪 Development Commands\n\n```bash\n# Development server\nnpm run dev\n\n# Build for production\nnpm run build\n\n# Start production server\nnpm start\n\n# Run linter\nnpm run lint\n\n# Prisma commands\nnpx prisma studio              # Open Prisma Studio\nnpx prisma migrate dev          # Create migration\nnpx prisma generate            # Generate Prisma Client\nnpx prisma db push             # Push schema changes\n```\n\n## 📦 Building for Production\n\n1. **Update environment variables for production**\n\n   Update your `.env` file or hosting platform's environment variables:\n   ```env\n   NODE_ENV=production\n   DATABASE_URL=\"your-production-database-url\"\n   NEXTAUTH_SECRET=\"your-secret-key\"\n   NEXTAUTH_URL=\"https://your-production-domain.com\"  # ⚠️ Important: Update this!\n   GOOGLE_CLIENT_ID=\"your-google-client-id\"\n   GOOGLE_CLIENT_SECRET=\"your-google-client-secret\"\n   ```\n\n   **Important**: Don't forget to update the authorized redirect URI in Google Cloud Console:\n   - Add: `https://your-production-domain.com/api/auth/callback/google`\n\n2. **Build the application**\n   ```bash\n   npm run build\n   ```\n\n3. **Test the production build locally (optional)**\n   ```bash\n   npm start\n   ```\n\n4. **Deploy**\n\n   The application can be deployed to:\n   - **Vercel** (recommended for Next.js) - Auto-detects environment\n   - **AWS** (Amplify, EC2, or ECS)\n   - **Google Cloud Platform** (Cloud Run or App Engine)\n   - **Railway** or **Render**\n   - Any Node.js hosting platform\n\n   **Note**: Most hosting platforms allow you to set environment variables directly in their dashboard.\n\n## 🐛 Troubleshooting\n\n### Database Connection Issues\n- Verify `DATABASE_URL` is correct\n- Ensure PostgreSQL server is running\n- Check firewall settings for database port\n\n### Authentication Errors\n- Verify Google OAuth credentials\n- Check redirect URIs match in Google Console\n- Ensure `NEXTAUTH_SECRET` is set\n\n### Build Errors\n- Clear `.next` folder: `rm -rf .next`\n- Regenerate Prisma Client: `npx prisma generate`\n- Delete node_modules and reinstall: `rm -rf node_modules \u0026\u0026 npm install`\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## 📝 License\n\nThis project is licensed under the MIT License.\n\n## 👏 Acknowledgments\n\n- [Next.js Documentation](https://nextjs.org/docs)\n- [Prisma Documentation](https://www.prisma.io/docs)\n- [Radix UI](https://www.radix-ui.com/)\n- [NextAuth.js](https://next-auth.js.org/)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faudrbar%2Fissue-tracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faudrbar%2Fissue-tracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faudrbar%2Fissue-tracker/lists"}