{"id":29350679,"url":"https://github.com/thatguychandan/issue-tracker","last_synced_at":"2026-04-14T10:33:23.020Z","repository":{"id":303268402,"uuid":"1014824592","full_name":"ThatGuyChandan/issue-tracker","owner":"ThatGuyChandan","description":"A real-time web application for managing and tracking issues with role-based access control. Built with FastAPI backend and SvelteKit frontend, featuring live notifications, user authentication, and Docker support. Supports multiple user roles (reporter, maintainer, admin) with appropriate permissions for issue creation, editing, and management.","archived":false,"fork":false,"pushed_at":"2025-07-06T17:07:22.000Z","size":355,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-06T18:23:35.570Z","etag":null,"topics":["dockerfile","fastapi","postgresql","python","socket-io","svelte","sveltekit","tailwind","typescript"],"latest_commit_sha":null,"homepage":"","language":"Svelte","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/ThatGuyChandan.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}},"created_at":"2025-07-06T13:44:02.000Z","updated_at":"2025-07-06T17:07:26.000Z","dependencies_parsed_at":"2025-07-06T18:34:06.807Z","dependency_job_id":null,"html_url":"https://github.com/ThatGuyChandan/issue-tracker","commit_stats":null,"previous_names":["thatguychandan/issue-tracker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ThatGuyChandan/issue-tracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThatGuyChandan%2Fissue-tracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThatGuyChandan%2Fissue-tracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThatGuyChandan%2Fissue-tracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThatGuyChandan%2Fissue-tracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThatGuyChandan","download_url":"https://codeload.github.com/ThatGuyChandan/issue-tracker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThatGuyChandan%2Fissue-tracker/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264363808,"owners_count":23596512,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["dockerfile","fastapi","postgresql","python","socket-io","svelte","sveltekit","tailwind","typescript"],"created_at":"2025-07-08T23:13:25.025Z","updated_at":"2026-04-14T10:33:22.985Z","avatar_url":"https://github.com/ThatGuyChandan.png","language":"Svelte","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Issues \u0026 Insights Tracker\n\nA mini SaaS portal for issue tracking, feedback, and analytics.\n\n## 📸 Screenshots\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/home.png\" alt=\"Home Page\" width=\"300\" /\u003e\n  \u003cimg src=\"images/login.png\" alt=\"Login Page\" width=\"300\" /\u003e\n  \u003cimg src=\"images/signup.png\" alt=\"Signup Page\" width=\"300\" /\u003e\n  \u003cimg src=\"images/issue.png\" alt=\"Issue Management\" width=\"300\" /\u003e\n  \u003cimg src=\"images/Dashboard.png\" alt=\"Dashboard\" width=\"300\" /\u003e\n\u003c/div\u003e\n\n## Tech Stack\n- **Frontend:** SvelteKit + Tailwind CSS\n- **Backend:** FastAPI (Python), SQLAlchemy, Alembic\n- **DB:** SQLite (default) or PostgreSQL\n- **Worker:** APScheduler (Python)\n- **Auth:** JWT, RBAC (ADMIN, MAINTAINER, REPORTER)\n- **Realtime:** WebSocket\n- **Observability:** Logging, Prometheus metrics\n- **Containers:** Docker Compose (web, db, worker)\n\n## Features\n- Auth (email/password, JWT)\n- Role-based access (RBAC)\n- Issue CRUD (Markdown, severity, status workflow)\n- Realtime updates (WebSocket)\n- Dashboard (open issues by severity)\n- Background stats aggregation\n- API docs (/api/docs)\n\n---\n\n## 🏗️ Architecture Decision Records (ADR)\n\n### ADR-001: Role-Based Access Control (RBAC) Implementation\n\n**Date:** 2025-01-06  \n**Status:** Accepted  \n**Context:** The application needed a flexible permission system to manage different user roles and their access to various features.\n\n**Decision:** Implement a three-tier Role-Based Access Control (RBAC) system with the following roles:\n- **ADMIN:** Full system access, user management, all CRUD operations\n- **MAINTAINER:** Issue management, status updates, limited user operations\n- **REPORTER:** Create and view issues, limited to own submissions\n\n**Consequences:**\n\n**Positive:**\n- Clear separation of responsibilities\n- Scalable permission model\n- Easy to extend with new roles\n- Frontend and backend enforcement\n- Database-level role storage with enum validation\n\n**Negative:**\n- Requires role management overhead\n- More complex authentication flow\n- Need to maintain role consistency across frontend/backend\n\n**Implementation Details:**\n- Database: `UserRole` enum in SQLAlchemy models\n- Backend: Role checking in FastAPI dependencies\n- Frontend: Role-based UI rendering and navigation\n- JWT tokens include role information for stateless validation\n\n**Alternatives Considered:**\n- Attribute-Based Access Control (ABAC): Too complex for current needs\n- Simple admin/user binary roles: Too limiting for future growth\n- Permission-based system: More granular but harder to manage\n\n---\n\n## 🚀 Quickstart: Manual (Local) Setup\n\n### 1. **Clone the repo**\n```sh\ngit clone \u003cyour-repo-url\u003e\ncd \"issue tracker\"\n```\n\n### 2. **Set up environment variables**\n- Copy `env.example` to `.env` and fill in values as needed:\n```sh\ncp env.example .env\n```\n\n### 3. **Backend**\n```sh\ncd backend\npip install -r requirements.txt\n# (Optional) Edit .env for DB/SECRET_KEY\npython init_db.py  # Initialize database tables\nuvicorn main:app --reload\n```\n- API: http://localhost:8000\n- API docs: http://localhost:8000/api/docs\n\n### 4. **Frontend**\n```sh\ncd frontend\nnpm install\nnpm run dev\n```\n- App: http://localhost:5173\n\n### 5. **Worker**\n```sh\ncd worker\npip install -r requirements.txt\npython worker.py\n```\n\n---\n\n## 🐳 Quickstart: Docker Compose\n\n1. **Copy env file**\n   ```sh\n   cp env.example .env\n   ```\n2. **Run everything**\n   ```sh\n   docker compose up --build\n   ```\n- App: http://localhost:3000\n- API: http://localhost:8000\n- API docs: http://localhost:8000/api/docs\n- Prometheus metrics: http://localhost:8000/metrics\n\n---\n\n## 📝 Notes\n- **.env**: Never commit your real `.env` file. Use `env.example` as a template.\n- **DB**: Default is SQLite for dev. For production, set `DATABASE_URL` to PostgreSQL/MySQL in `.env`.\n- **RBAC**: Roles are ADMIN, MAINTAINER, REPORTER. Permissions enforced in backend and UI.\n- **Realtime**: Uses WebSocket for instant updates.\n- **Testing**: See `test_setup.py` and `test_docker.py` for health checks.\n\n---\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthatguychandan%2Fissue-tracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthatguychandan%2Fissue-tracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthatguychandan%2Fissue-tracker/lists"}