{"id":34861165,"url":"https://github.com/ramonclaudio/coderabbit-shadcn-registry","last_synced_at":"2026-04-12T03:33:36.871Z","repository":{"id":326099553,"uuid":"1103898514","full_name":"ramonclaudio/coderabbit-shadcn-registry","owner":"ramonclaudio","description":"Modular shadcn registry for CodeRabbit API integration - framework-agnostic client, storage adapters, and React components","archived":false,"fork":false,"pushed_at":"2026-03-23T14:20:11.000Z","size":132,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-24T11:54:15.622Z","etag":null,"topics":["analytics","api-client","coderabbit","convex","database","developer-tools","localstorage","mysql","postgres","react","registry","reports","shadcn","storage","supabase","typescript"],"latest_commit_sha":null,"homepage":"https://coderabbit-shadcn-registry.vercel.app","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/ramonclaudio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":"2025-11-25T13:35:56.000Z","updated_at":"2026-03-23T14:20:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ramonclaudio/coderabbit-shadcn-registry","commit_stats":null,"previous_names":["rmncldyo/coderabbit-shadcn-registry","ramonclaudio/coderabbit-shadcn-registry"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ramonclaudio/coderabbit-shadcn-registry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonclaudio%2Fcoderabbit-shadcn-registry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonclaudio%2Fcoderabbit-shadcn-registry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonclaudio%2Fcoderabbit-shadcn-registry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonclaudio%2Fcoderabbit-shadcn-registry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ramonclaudio","download_url":"https://codeload.github.com/ramonclaudio/coderabbit-shadcn-registry/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonclaudio%2Fcoderabbit-shadcn-registry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31520430,"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":["analytics","api-client","coderabbit","convex","database","developer-tools","localstorage","mysql","postgres","react","registry","reports","shadcn","storage","supabase","typescript"],"created_at":"2025-12-25T21:07:31.180Z","updated_at":"2026-04-07T16:31:38.421Z","avatar_url":"https://github.com/ramonclaudio.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CodeRabbit shadcn Registry\n\n[shadcn](https://ui.shadcn.com) registry for [CodeRabbit](https://coderabbit.ai) API integration.\n\n## Quick Start\n\nAdd the registry to your `components.json`:\n\n```json\n{\n  \"registries\": {\n    \"@ramonclaudio-coderabbit\": \"https://coderabbit-shadcn-registry.vercel.app/r/{name}.json\"\n  }\n}\n```\n\nThen install with your storage backend:\n\n```bash\n# LocalStorage (no database required)\nnpx shadcn@latest add @ramonclaudio-coderabbit/localstorage\n\n# Convex\nnpx shadcn@latest add @ramonclaudio-coderabbit/convex\n\n# Supabase\nnpx shadcn@latest add @ramonclaudio-coderabbit/supabase\n\n# PostgreSQL\nnpx shadcn@latest add @ramonclaudio-coderabbit/postgres\n\n# MySQL\nnpx shadcn@latest add @ramonclaudio-coderabbit/mysql\n```\n\nOr install directly via URL:\n\n```bash\nnpx shadcn@latest add https://coderabbit-shadcn-registry.vercel.app/r/localstorage.json\n```\n\n## Setup\n\n\u003e [!IMPORTANT]\n\u003e CodeRabbit API requires a **Pro plan** subscription.\n\n1. Get API key from [CodeRabbit Settings](https://app.coderabbit.ai/settings/api-keys)\n\n2. Set environment variables:\n\n| Backend      | Variables                                                                                                          |\n| ------------ | ------------------------------------------------------------------------------------------------------------------ |\n| LocalStorage | `CODERABBIT_API_KEY`                                                                                               |\n| Convex       | `CODERABBIT_API_KEY`, `CONVEX_DEPLOYMENT`, `CONVEX_URL`                                                            |\n| Supabase     | `CODERABBIT_API_KEY`, `SUPABASE_URL`, `SUPABASE_ANON_KEY`                                                          |\n| PostgreSQL   | `CODERABBIT_API_KEY`, `POSTGRES_HOST`, `POSTGRES_PORT`, `POSTGRES_DATABASE`, `POSTGRES_USER`, `POSTGRES_PASSWORD`  |\n| MySQL        | `CODERABBIT_API_KEY`, `MYSQL_HOST`, `MYSQL_PORT`, `MYSQL_DATABASE`, `MYSQL_USER`, `MYSQL_PASSWORD`                 |\n\n## Usage\n\n### Direct\n\n```typescript\nimport { createCodeRabbitClient } from \"@/lib/client\";\n\nconst client = createCodeRabbitClient();\nconst results = await client.generateReport({\n  from: \"2024-01-01\",\n  to: \"2024-01-31\",\n  promptTemplate: \"Sprint Report\",\n});\n```\n\n### With React\n\n```typescript\nimport { useCodeRabbit } from \"@/hooks/use-coderabbit\";\nimport { LocalStorageAdapter } from \"@/lib/storage-localstorage\";\n\nfunction App() {\n  const { generateReport, isGenerating } = useCodeRabbit({\n    storage: new LocalStorageAdapter(),\n  });\n\n  return (\n    \u003cbutton onClick={() =\u003e generateReport({ from: \"2024-01-01\", to: \"2024-01-31\", promptTemplate: \"Sprint Report\" })}\u003e\n      {isGenerating ? \"Generating...\" : \"Generate\"}\n    \u003c/button\u003e\n  );\n}\n```\n\n\u003e [!TIP]\n\u003e Swap `LocalStorageAdapter` for `ConvexStorageAdapter`, `SupabaseStorageAdapter`, `PostgresStorageAdapter`, or `MySQLStorageAdapter`.\n\n### With UI Components\n\n```typescript\nimport { CodeRabbitReportForm, getCodeRabbitReportPayload } from \"@/components/report-form\";\nimport { CodeRabbitReportCard } from \"@/components/report-card\";\n\n// Form: controlled component for report parameters\n\u003cCodeRabbitReportForm value={formData} onChange={setFormData} /\u003e\n\n// Get API payload from form data\nconst payload = getCodeRabbitReportPayload(formData);\nawait generateReport({ from, to, ...payload });\n\n// Card: displays reports with expand/collapse and delete\n\u003cCodeRabbitReportCard reports={reports} onDelete={(id) =\u003e storage.delete(id)} /\u003e\n```\n\n### Full Example\n\n\u003cdetails\u003e\n\u003csummary\u003eComplete \u003ccode\u003epage.tsx\u003c/code\u003e with form, generation, and report display\u003c/summary\u003e\n\n```tsx\n'use client'\n\nimport { useState, useEffect, useMemo, useCallback } from 'react'\nimport { useCodeRabbit } from '@/hooks/use-coderabbit'\nimport { LocalStorageAdapter } from '@/lib/storage-localstorage'\nimport { CodeRabbitReportCard } from '@/components/report-card'\nimport {\n  CodeRabbitReportForm,\n  getCodeRabbitReportPayload,\n  getInitialFormData,\n  type CodeRabbitReportFormData,\n} from '@/components/report-form'\nimport { Button } from '@/components/ui/button'\nimport type { StoredReport } from '@/lib/types'\n\nexport default function ReportsPage() {\n  const [reports, setReports] = useState\u003cStoredReport[]\u003e([])\n  const [formData, setFormData] = useState\u003cCodeRabbitReportFormData\u003e(getInitialFormData())\n\n  const storage = useMemo(() =\u003e new LocalStorageAdapter(), [])\n  const { generateReport, isGenerating, error } = useCodeRabbit({\n    storage,\n    onSuccess: () =\u003e loadReports(),\n  })\n\n  const loadReports = useCallback(async () =\u003e {\n    const { reports } = await storage.list()\n    setReports(reports)\n  }, [storage])\n\n  useEffect(() =\u003e {\n    loadReports()\n  }, [loadReports])\n\n  return (\n    \u003cdiv className=\"max-w-4xl mx-auto p-8 space-y-8\"\u003e\n      \u003cCodeRabbitReportForm value={formData} onChange={setFormData} /\u003e\n\n      {error \u0026\u0026 \u003cp className=\"text-red-500\"\u003e{error}\u003c/p\u003e}\n\n      \u003cButton\n        onClick={() =\u003e generateReport(getCodeRabbitReportPayload(formData))}\n        disabled={isGenerating}\n      \u003e\n        {isGenerating ? 'Generating...' : 'Generate Report'}\n      \u003c/Button\u003e\n\n      \u003cCodeRabbitReportCard\n        reports={reports}\n        onDelete={async (id) =\u003e {\n          await storage.delete(id)\n          loadReports()\n        }}\n      /\u003e\n    \u003c/div\u003e\n  )\n}\n```\n\n\u003c/details\u003e\n\n## Custom Storage\n\n```typescript\nimport type { ReportStorageAdapter } from \"@/lib/storage-adapter\";\n\nclass MyAdapter implements ReportStorageAdapter {\n  async create(data) { /* return id */ }\n  async updateSuccess(id, results, durationMs) {}\n  async updateFailure(id, error, durationMs) {}\n  async get(id) {}\n  async list(options?) {}\n  async delete(id) {}\n}\n```\n\n## Development\n\n```bash\npnpm install\npnpm run registry:build\npnpm run typecheck\npnpm run lint\n```\n\n## License\n\n[MIT](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framonclaudio%2Fcoderabbit-shadcn-registry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Framonclaudio%2Fcoderabbit-shadcn-registry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framonclaudio%2Fcoderabbit-shadcn-registry/lists"}