{"id":29079396,"url":"https://github.com/murtaza99dev/task-tracker","last_synced_at":"2026-04-11T03:33:03.487Z","repository":{"id":301439574,"uuid":"1009262774","full_name":"Murtaza99dev/task-tracker","owner":"Murtaza99dev","description":"A secure and scalable Task Tracker API built with TypeScript, Express, PostgreSQL, and Drizzle ORM.","archived":false,"fork":false,"pushed_at":"2025-06-26T21:30:16.000Z","size":42,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"Main","last_synced_at":"2025-06-26T22:56:56.889Z","etag":null,"topics":["drizzle-orm","jwt","postgresql","reactjs","tailwindcss","tasktracker","typescript","zod"],"latest_commit_sha":null,"homepage":"","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/Murtaza99dev.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-06-26T21:01:13.000Z","updated_at":"2025-06-26T21:30:20.000Z","dependencies_parsed_at":"2025-06-26T22:56:59.968Z","dependency_job_id":"8c64bfc1-7268-4a35-ae7f-9d39b5aae16e","html_url":"https://github.com/Murtaza99dev/task-tracker","commit_stats":null,"previous_names":["murtaza99dev/task-tracker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Murtaza99dev/task-tracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Murtaza99dev%2Ftask-tracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Murtaza99dev%2Ftask-tracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Murtaza99dev%2Ftask-tracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Murtaza99dev%2Ftask-tracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Murtaza99dev","download_url":"https://codeload.github.com/Murtaza99dev/task-tracker/tar.gz/refs/heads/Main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Murtaza99dev%2Ftask-tracker/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262298771,"owners_count":23289603,"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":["drizzle-orm","jwt","postgresql","reactjs","tailwindcss","tasktracker","typescript","zod"],"created_at":"2025-06-27T17:02:35.960Z","updated_at":"2025-12-30T22:22:39.341Z","avatar_url":"https://github.com/Murtaza99dev.png","language":"TypeScript","readme":"# 📌 Task Tracker\r\n\r\nA full-featured **Task Tracker backend** built using **Node.js**, **TypeScript**, **Express**, **PostgreSQL**, and **Drizzle ORM**. The application supports user registration, authentication using JWT, and complete CRUD functionality for managing tasks.\r\n\r\n---\r\n\r\n## 🚀 Features\r\n\r\n- 🔐 User Authentication (Register/Login with JWT)\r\n- 🛡️ Middleware-based route protection\r\n- 📋 Task management (Create, Read, Update, Delete)\r\n- 🌱 Environment variable configuration with `dotenv`\r\n- 🧾 Type-safe schema with Drizzle ORM\r\n- 🧪 Input validation using Zod\r\n- ⚡ TypeScript + tsx/ts-node-dev for smooth dev experience\r\n\r\n---\r\n\r\n## 🧰 Tech Stack\r\n\r\n- **Node.js**\r\n- **Express.js**\r\n- **TypeScript**\r\n- **PostgreSQL**\r\n- **Drizzle ORM**\r\n- **JWT (JSON Web Tokens)**\r\n- **Zod**\r\n- **dotenv**\r\n- **tsx** / **ts-node-dev**\r\n\r\n---\r\n\r\n## 📁 Project Structure\r\n\r\n```\r\ntask-tracker/\r\n├── drizzle.config.ts\r\n├── package.json\r\n├── tsconfig.json\r\n├── .env\r\n├── src/\r\n│   ├── index.ts\r\n│   ├── db.ts\r\n│   ├── schema/\r\n│   ├── routes/\r\n│   ├── middleware/\r\n│   └── utils/\r\n```\r\n\r\n---\r\n\r\n## ⚙️ Setup Instructions\r\n\r\n### 1️⃣ Clone the Repository\r\n\r\n```bash\r\ngit clone https://github.com/Murtaza99dev/task-tracker.git\r\ncd task-tracker/backend\r\nyarn install\r\n```\r\n\r\n### 2️⃣ Create .env File\r\n\r\n```\r\nPORT=5000\r\nJWT_SECRET=your_jwt_secret_key\r\nDB_HOST=localhost\r\nDB_PORT=5432\r\nDB_USER=your_postgres_user\r\nDB_PASSWORD=your_postgres_password\r\nDB_NAME=task_db\r\nDATABASE_URL=postgresql://your_postgres_user:your_postgres_password@localhost:5432/task_db\r\n```\r\n\r\n### 3️⃣ Run the Project\r\n\r\n```bash\r\nyarn dev\r\n```\r\n\r\nThe server should now be running at: [http://localhost:5000](http://localhost:5000)\r\n\r\n---\r\n\r\n## 🧪 API Endpoints\r\n\r\n### 🔐 Auth Routes\r\n\r\n| Method | Endpoint        | Description           |\r\n|--------|----------------|-----------------------|\r\n| POST   | /api/register  | Register new user     |\r\n| POST   | /api/login     | Login and get JWT     |\r\n\r\n### ✅ Task Routes (Protected)\r\n\r\n| Method | Endpoint         | Description         |\r\n|--------|-----------------|---------------------|\r\n| GET    | /api/tasks      | Get all tasks       |\r\n| POST   | /api/tasks      | Create new task     |\r\n| PUT    | /api/tasks/:id  | Update task         |\r\n| DELETE | /api/tasks/:id  | Delete task         |\r\n\r\n\u003e **Note:** All `/api/tasks` endpoints require a JWT token in the request header:\r\n\u003e\r\n\u003e ```\r\n\u003e Authorization: Bearer \u003cyour_jwt_token\u003e\r\n\u003e ```\r\n\r\n---\r\n\r\n## 🧰 Drizzle ORM Commands\r\n\r\nRun after creating or modifying your schema in `src/schema`.\r\n\r\n**Push Schema to DB**\r\n```bash\r\nnpx drizzle-kit push\r\n```\r\n\r\n**Generate SQL from Schema**\r\n```bash\r\nnpx drizzle-kit generate\r\n```\r\n\r\n---\r\n\r\n## 🧑‍💻 Development Tools\r\n\r\nStart server in watch mode:\r\n\r\n```bash\r\nyarn dev\r\n```\r\n\r\n**Drizzle ORM setup config (`drizzle.config.ts`):**\r\n```ts\r\nimport { defineConfig } from \"drizzle-kit\";\r\nimport * as dotenv from \"dotenv\";\r\ndotenv.config();\r\n\r\nexport default defineConfig({\r\n  schema: \"./src/schema\",\r\n  out: \"./drizzle\",\r\n  driver: \"pg\",\r\n  dbCredentials: {\r\n    connectionString: process.env.DATABASE_URL!,\r\n  },\r\n});\r\n```\r\n\r\n---\r\n\r\n## 📄 License\r\n\r\nThis project is licensed under the MIT License. See the LICENSE file for details.\r\n\r\n---\r\n\r\n## 🙋‍♂️ Author\r\n\r\n**Ghulam Murtaza**\r\n\r\n- GitHub: [@Murtaza99dev](https://github.com/Murtaza99dev)\r\n- Email: murtaza99.dev@gmail.com\r\n- LinkedIn: [https://www.linkedin.com/in/im-ghulam-murtaza/](https://www.linkedin.com/in/im-ghulam-murtaza/)\r\n\r\n---\r\n\r\n## 🧠 Future Improvements\r\n\r\n- 📅 Task due dates and prioritization\r\n- 📊 Task analytics\r\n- 🌐 Frontend integration (React/Next.js)\r\n- 🧑‍🤝‍🧑 Team/task sharing\r\n\r\n---\r\n\r\nLet me know if you want a separate Postman/Bruno collection JSON or frontend instructions added.\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmurtaza99dev%2Ftask-tracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmurtaza99dev%2Ftask-tracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmurtaza99dev%2Ftask-tracker/lists"}