{"id":47632486,"url":"https://github.com/fathiraz/refined-github-projects","last_synced_at":"2026-04-08T00:04:00.427Z","repository":{"id":345893424,"uuid":"1186864845","full_name":"fathiraz/refined-github-projects","owner":"fathiraz","description":"GitHub Projects, but the way it should work. Bulk edit, close, delete, and deep duplicate items — all from the table.","archived":false,"fork":false,"pushed_at":"2026-03-31T03:11:19.000Z","size":5509,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-02T07:57:03.411Z","etag":null,"topics":["chrome","chrome-extension","edge","edge-extension","firefox","firefox-addon","github","github-projects","jira","projects","task-management","wxt","wxt-framework"],"latest_commit_sha":null,"homepage":"https://fathiraz.github.io/refined-github-projects/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fathiraz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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":"2026-03-20T04:20:55.000Z","updated_at":"2026-03-31T03:07:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fathiraz/refined-github-projects","commit_stats":null,"previous_names":["fathiraz/refined-github-projects"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/fathiraz/refined-github-projects","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fathiraz%2Frefined-github-projects","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fathiraz%2Frefined-github-projects/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fathiraz%2Frefined-github-projects/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fathiraz%2Frefined-github-projects/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fathiraz","download_url":"https://codeload.github.com/fathiraz/refined-github-projects/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fathiraz%2Frefined-github-projects/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31533828,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["chrome","chrome-extension","edge","edge-extension","firefox","firefox-addon","github","github-projects","jira","projects","task-management","wxt","wxt-framework"],"created_at":"2026-04-01T23:50:28.891Z","updated_at":"2026-04-08T00:04:00.414Z","avatar_url":"https://github.com/fathiraz.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Refined GitHub Projects\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"src/assets/images/demo.gif\" alt=\"Refined GitHub Projects — Bulk superpowers for GitHub Projects V2\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eGitHub Projects, bulk-edited the way it should work.\u003c/strong\u003e\u003cbr/\u003e\n  \u003cem\u003eBulk edit, close, delete, duplicate, transfer, and sprint-manage your project items — all from the table view, no backend required.\u003c/em\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/fathiraz/refined-github-projects/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/fathiraz/refined-github-projects?style=for-the-badge\u0026color=238636\u0026label=Latest+Release\" alt=\"Latest Release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/fathiraz/refined-github-projects/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-blue?style=for-the-badge\" alt=\"MIT License\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://chromewebstore.google.com/detail/refined-github-projects/ljkfilkmedkcpckabpeeiacjefhnlplg\"\u003e\u003cimg src=\"https://img.shields.io/badge/Chrome_Web_Store-Live-238636?style=for-the-badge\u0026logo=google-chrome\u0026logoColor=white\" alt=\"Chrome Web Store\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/refined-github-projects/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Firefox_Add--ons-Live-238636?style=for-the-badge\u0026logo=firefox-browser\u0026logoColor=white\" alt=\"Firefox Add-ons\" /\u003e\u003c/a\u003e\n  \u003c!-- COVERAGE_BADGE_START --\u003e\u003cimg src=\"https://img.shields.io/badge/coverage-13.98%25-red?style=for-the-badge\" alt=\"Coverage\" /\u003e\u003c!-- COVERAGE_BADGE_END --\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=white\" alt=\"TypeScript\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/React_19-61DAFB?style=for-the-badge\u0026logo=react\u0026logoColor=black\" alt=\"React 19\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/WXT-333333?style=for-the-badge\u0026logoColor=white\" alt=\"WXT\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Manifest_V3-4285F4?style=for-the-badge\u0026logo=googlechrome\u0026logoColor=white\" alt=\"Manifest V3\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/GraphQL-E10098?style=for-the-badge\u0026logo=graphql\u0026logoColor=white\" alt=\"GraphQL\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Primer-0366D6?style=for-the-badge\u0026logo=github\u0026logoColor=white\" alt=\"Primer CSS\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/pnpm-F69220?style=for-the-badge\u0026logo=pnpm\u0026logoColor=white\" alt=\"pnpm\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Vitest-6E9F18?style=for-the-badge\u0026logo=vitest\u0026logoColor=white\" alt=\"Vitest\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eNow live on \u003ca href=\"https://chromewebstore.google.com/detail/refined-github-projects/ljkfilkmedkcpckabpeeiacjefhnlplg\"\u003eChrome Web Store\u003c/a\u003e and \u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/refined-github-projects/\"\u003eFirefox Add-ons\u003c/a\u003e.\u003c/strong\u003e\n  Manual install remains available for Edge and local builds.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eInspired by \u003ca href=\"https://github.com/refined-github/refined-github\"\u003erefined-github\u003c/a\u003e — the gold standard for browser extensions that fix what GitHub won't.\u003cbr/\u003e\n  ⚡ 90% built with multiple AI agents. By fathiraz.\u003c/em\u003e\n\u003c/p\u003e\n\n---\n\n## 📥 Downloads\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://chromewebstore.google.com/detail/refined-github-projects/ljkfilkmedkcpckabpeeiacjefhnlplg\"\u003e\n    \u003cimg src=\"src/assets/images/chrome-webstore.png\" alt=\"Available in the Chrome Web Store\" height=\"58\" /\u003e\n  \u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/refined-github-projects/\"\u003e\n    \u003cimg src=\"src/assets/images/firefox-addon.svg\" alt=\"Get the Add-on for Firefox\" height=\"58\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 📋 Table of Contents\n\n- [Downloads](#-downloads)\n- [Why This Exists](#-why-this-exists)\n- [Features](#-features)\n- [Installation](#-installation)\n- [Usage Guide](#-usage-guide)\n- [Architecture](#️-architecture)\n- [Tech Stack](#️-tech-stack)\n- [Roadmap](#️-roadmap)\n- [Contributing](#-contributing)\n- [License](#-license)\n\n---\n\n## 🧐 Why This Exists\n\nGitHub Projects V2 is a solid board — but editing items in bulk is painful. You update one field at a time. You close one issue at a time. You drag items to the next sprint one by one. That's not how teams move.\n\n**Refined GitHub Projects** adds the bulk operations and sprint tooling that should have shipped with GitHub Projects V2 — running entirely in your browser, with your token never leaving your machine.\n\n| Problem | What RGP adds |\n|---------|---------------|\n| Can't edit N items at once | **Bulk Edit Wizard** — select fields, set values, apply to all |\n| GitHub's duplicate only copies the title | **Deep Duplicate** — clones all fields, assignees, labels, body |\n| Closing a sprint takes many clicks | **End Sprint** — moves incomplete items to next iteration in one action |\n| No visibility into background API calls | **Live Queue Tracker** — real-time progress, rate-limit safe |\n| Dangerous operations have no guardrail | Every destructive action requires a confirmation modal |\n\n---\n\n## ✨ Features\n\n| Feature | What it does |\n|---------|-------------|\n| **Bulk update fields** | Change Status, Assignee, Iteration, Priority, Labels, and any custom field across N items at once |\n| **Bulk close issues** | Mark issues as Completed or Not Planned in a single click |\n| **Bulk reopen issues** | Restore closed items back to active work |\n| **Bulk lock / unlock** | Lock conversations with a reason (off-topic, too heated, resolved, spam) |\n| **Bulk pin / unpin** | Promote or demote important issues at the repository level |\n| **Bulk transfer** | Move issues to another repository, history intact |\n| **Bulk delete** | Permanently remove items from your project |\n| **Bulk rename titles** | Update issue or PR titles across multiple items |\n| **Export to CSV** | Download selected items with all fields, assignees, labels, and custom properties |\n| **Sprint management** | End a sprint with one click; incomplete items auto-assign to the next iteration |\n| **Task completion tracker** | Live task counters in sprint group headers, updated in real time |\n| **Deep duplicate** | Clone any item with all custom fields, assignees, labels, and sub-issue relationships |\n\n---\n\n### Bulk Actions Bar\nSelect items with `⌘A` / `Ctrl+A` — the floating bar appears. Hit **Actions** (`⌘⇧B`) to open the full menu.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"src/assets/images/screenshot-1.png\" alt=\"Bulk Actions Bar\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\n**Available bulk operations:**\n\n| Category | Action | Shortcut |\n|----------|--------|----------|\n| Fields | Edit Fields | `⌘⇧E` |\n| Content | Rename Titles | `⌘⇧R` |\n| Content | Reorder Items | `⌘⇧J` |\n| Status | Close Issues | `⌘⇧X` |\n| Status | Reopen Issues | `⌘⇧O` |\n| Status | Lock Conversations | `⌘⇧L` |\n| Status | Unlock Conversations | — |\n| Visibility | Pin Issues | `⌘⇧F` |\n| Visibility | Unpin Issues | — |\n| Move | Transfer Issues | `⌘⇧M` |\n| Export | Export to CSV | `⌘⇧V` |\n| Danger | Delete Items | `⌘⇧⌫` (admin only) |\n\n---\n\n### Bulk Edit Wizard (3-Step Flow)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"src/assets/images/screenshot-2.png\" alt=\"Bulk Edit Wizard\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\n1. **Select Fields** — choose which standard and custom fields to update\n2. **Set Values** — pick new values: Status, Priority, Sprint, Size, Estimate, Assignees, Labels, dates…\n3. **Review \u0026 Apply** — see a clean diff of every change before a single API call fires\n\n---\n\n### Deep Duplicate\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"src/assets/images/screenshot-3.png\" alt=\"Deep Duplicate\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\nGitHub's native duplicate copies only the title. Deep Duplicate clones the full issue — all project fields, assignees, labels, body, and sub-issue links — and lets you edit everything before confirming.\n\n---\n\n### Sprint Management\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"src/assets/images/screenshot-4.png\" alt=\"Sprint Management\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\nEnd a sprint with one click. The **Sprint** widget (top-right on any Projects page) shows the active iteration and task completion. Hit **End Sprint**, pick the target iteration for incomplete items, and the background queue moves them automatically — no manual re-assignment.\n\n---\n\n### Live Queue Tracker\n\nEvery bulk operation runs through a sequential background queue with 1-second delays between mutations. The live tracker shows real-time percentage progress and automatically backs off on 403 / 429 errors — keeping your PAT safe on large projects.\n\n---\n\n### Privacy by Design\n\n- **No backend** — all calls go directly from your browser to `api.github.com`\n- **Token stays local** — the PAT is stored in browser extension storage, never sent to any external server\n- **Shadow DOM isolated** — injected UI never clashes with GitHub's own styles\n\n---\n\n## 🚀 Installation\n\n### Browser Compatibility\n\n| Browser | Engine | Install path |\n|---------|--------|--------------|\n| Chrome | Chromium | ✅ Chrome Web Store |\n| Arc | Chromium | ✅ Chrome Web Store |\n| Microsoft Edge | Chromium | ✅ Manual install |\n| Firefox | Gecko | ✅ Firefox Add-ons |\n| Zen | Firefox (Gecko) | ✅ Firefox Add-ons |\n\n### For Humans\n\n1. **Chrome**: install directly from the [Chrome Web Store](https://chromewebstore.google.com/detail/refined-github-projects/ljkfilkmedkcpckabpeeiacjefhnlplg).\n2. **Firefox**: install directly from [Firefox Add-ons](https://addons.mozilla.org/en-US/firefox/addon/refined-github-projects/).\n3. **Edge / local testing**: download the latest browser build package from [Releases](https://github.com/fathiraz/refined-github-projects/releases) and extract it on your machine.\n4. For manual installs, open your browser's extension page:\n   - **Chrome**: `chrome://extensions`\n   - **Edge**: `edge://extensions`\n   - **Firefox / Zen**: `about:debugging#/runtime/this-firefox`\n5. Load the extension manually when needed:\n   - **Chrome / Edge**: enable **Developer mode** → **Load unpacked** → select the extracted folder\n   - **Firefox / Zen**: **Load Temporary Add-on** → select the manifest file in the extracted folder\n6. Click the extension icon, paste your GitHub PAT, and click **Validate and save**.\n\nDone. Chrome and Firefox install in one click from their respective stores; Edge remains available via manual install.\n\n### For AI Agents\n\nPaste this into Cursor, Claude Code, or any coding agent:\n\n```text\nInstall Refined GitHub Projects:\n\nChrome: https://chromewebstore.google.com/detail/refined-github-projects/ljkfilkmedkcpckabpeeiacjefhnlplg\nFirefox: https://addons.mozilla.org/en-US/firefox/addon/refined-github-projects/\n\nIf you need Edge or a local build, use the latest GitHub release:\nhttps://github.com/fathiraz/refined-github-projects/releases\n\nSteps:\n1. Chrome: install from the Chrome Web Store\n2. Firefox: install from Firefox Add-ons\n3. Edge/manual installs: download the latest browser build package (not the source archive) and extract it\n4. Load as unpacked extension when needed:\n   - Chrome: chrome://extensions → Developer mode → Load unpacked → select extracted folder\n   - Edge: edge://extensions → Developer mode → Load unpacked → select extracted folder\n5. Click the extension icon → paste your GitHub PAT (scopes: repo, read:org, project) → Validate and save\n```\n\nOr fetch these instructions directly:\n\n```bash\ncurl -sL https://raw.githubusercontent.com/fathiraz/refined-github-projects/main/README.md\n```\n\n### Development Setup\n\n```bash\n# Prerequisites: Node.js 18+, pnpm\n\ngit clone https://github.com/fathiraz/refined-github-projects.git\ncd refined-github-projects\n\npnpm install\n\n# Dev server with hot reload\npnpm dev\n\n# Production build\npnpm build\n```\n\nLoad `dist/chrome-mv3` in `chrome://extensions` or `edge://extensions`, or load the Firefox output in `about:debugging`.\n\nIf you want to use Safari manually, follow the [WXT Safari publishing guide](https://wxt.dev/guide/essentials/publishing.html#safari).\n\n---\n\n## 📖 Usage Guide\n\n### Setting Up Your PAT\n\n1. GitHub → **Settings** → **Developer settings** → **Personal access tokens** → **Tokens (classic)**\n2. **Generate new token (classic)**\n3. Name it `Refined GitHub Projects` and select the required scopes:\n\n| Scope | Reason |\n|-------|--------|\n| `repo` | Read/write issues, labels, assignees |\n| `read:org` | Read organization membership for assignee search |\n| `project` | Read/write GitHub Projects V2 fields |\n\n4. Copy the token and paste it into the extension popup → **Validate and save**.\n\n### Running a Bulk Operation\n\n1. Open any GitHub Projects **table view**\n2. Check item checkboxes — or press `⌘A` / `Ctrl+A` to select all\n3. The **Bulk Actions Bar** appears at the bottom\n4. Click **Actions** (`⌘⇧B`) and choose your operation\n5. Follow the wizard; review changes before confirming\n\n### Ending a Sprint\n\n1. The **Sprint** widget appears top-right on your Projects page\n2. Click **End Sprint**\n3. Choose the target iteration for incomplete items\n4. Click **End Sprint** — incomplete items move automatically\n\n### Keyboard Shortcuts\n\n| Shortcut | Action |\n|----------|--------|\n| `⌘A` / `Ctrl+A` | Select all visible items |\n| `⌘⇧B` | Open Actions menu |\n| `Esc` | Clear selection |\n\n---\n\n## 🏗️ Architecture\n\n```\n┌─────────────────┐     sendMessage      ┌──────────────────────────┐     ┌──────────────────────┐\n│  Content Script │ ──────────────────→  │  Background Service      │ ──→ │  GitHub GraphQL API  │\n│  (DOM / UI)     │                      │  Worker                  │     │  api.github.com      │\n│                 │ ←──────────────────  │  - PAT storage           │     │                      │\n│  - Shadow DOM   │    response /        │  - Sequential queue      │     │                      │\n│  - Row observer │    queueStateUpdate  │  - 403/429 backoff       │     │                      │\n└─────────────────┘                      └──────────────────────────┘     └──────────────────────┘\n         ↑\n         │ WXT Storage API\n         ↓\n┌─────────────────┐\n│  Extension      │\n│  Popup          │\n│  - PAT config   │\n└─────────────────┘\n```\n\n**Data flow:**\n\n1. The **Content Script** observes the GitHub Projects DOM via `MutationObserver` and injects UI into a Shadow DOM container — invisible to GitHub's own styles.\n2. On a bulk operation, the content script sends a typed message to the **Background Service Worker**.\n3. The Background Worker retrieves the stored PAT, builds a sequential task queue, and fires GraphQL mutations with 1 s delays between each write. `Promise.all()` is never used for mutations — it will 403-ban your token.\n4. Progress is broadcast back as `queueStateUpdate` messages, driving the live tracker widget.\n\n---\n\n## 🛠️ Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Extension framework | [WXT](https://wxt.dev/) with Manifest V3 |\n| UI | React 18, TypeScript, [Primer CSS](https://primer.style/) |\n| Messaging | [@webext-core/messaging](https://webext-core.aklinker1.io/) |\n| Storage | WXT browser storage APIs |\n| API | GitHub Projects V2 GraphQL via `fetch` |\n| DOM isolation | WXT CSUI with Shadow DOM |\n| Background | WXT Background Service Workers |\n\n---\n\n## 🗺️ Roadmap\n\n- [x] Bulk update fields (Status, Assignee, Sprint, Priority, Labels, custom fields)\n- [x] Bulk close / reopen issues\n- [x] Bulk lock / pin / unpin issues\n- [x] Bulk transfer issues to another repository\n- [x] Bulk delete project items\n- [x] Bulk rename titles\n- [x] Reorder items\n- [x] Export selected items to CSV\n- [x] Deep duplicate with all fields, assignees, labels, body, sub-issues\n- [x] Sprint management — end sprint with auto-assignment of incomplete items\n- [x] Task completion tracker in sprint group headers\n- [x] Live queue tracker with real-time progress\n- [x] Chrome Web Store release\n- [x] Firefox Add-ons release\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome. Please follow these rules — they exist to keep the extension safe for everyone.\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/my-feature`\n3. Make your changes and run `pnpm typecheck`\n4. Commit with a conventional message: `git commit -m 'feat: my feature'`\n5. Push and open a pull request\n\n**Critical rules (strictly enforced):**\n\n- **Never** use `Promise.all()` for GraphQL mutations — GitHub will 403-ban your PAT\n- All mutations must run sequentially through the background queue with `sleep(1000)` between each\n- **Never** call GitHub's API directly from a Content Script — always use `sendMessage` to the Background Worker\n- Anchor injected UI to `data-testid` attributes or ARIA labels, not volatile CSS class names\n\n---\n\n## 📄 License\n\nMIT © [fathiraz](https://github.com/fathiraz)\n\n---\n\n## 🙏 Acknowledgments\n\n- [refined-github](https://github.com/refined-github/refined-github) — the gold standard for browser extensions that meaningfully improve GitHub's UX\n- [WXT](https://wxt.dev/) — made cross-browser Manifest V3 development actually enjoyable\n- [Primer CSS / @primer/react](https://primer.style/) — GitHub's own design system, so the injected UI feels native\n- [GitHub GraphQL API](https://docs.github.com/en/graphql) — the Projects V2 API that makes all of this possible\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003efathiraz\u003c/strong\u003e · \u003ca href=\"https://github.com/fathiraz\"\u003egithub.com/fathiraz\u003c/a\u003e · \u003ca href=\"https://github.com/fathiraz/refined-github-projects\"\u003eProject repository\u003c/a\u003e\n\u003c/p\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffathiraz%2Frefined-github-projects","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffathiraz%2Frefined-github-projects","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffathiraz%2Frefined-github-projects/lists"}