{"id":51543933,"url":"https://github.com/izadoesdev/opencrm","last_synced_at":"2026-07-09T16:01:21.203Z","repository":{"id":344227890,"uuid":"1180993194","full_name":"izadoesdev/OpenCRM","owner":"izadoesdev","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-17T19:27:45.000Z","size":1039,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-07T13:29:17.702Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://open-crm-eta.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/izadoesdev.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":"2026-03-13T16:24:55.000Z","updated_at":"2026-04-17T10:19:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/izadoesdev/OpenCRM","commit_stats":null,"previous_names":["izadoesdev/opencrm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/izadoesdev/OpenCRM","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izadoesdev%2FOpenCRM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izadoesdev%2FOpenCRM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izadoesdev%2FOpenCRM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izadoesdev%2FOpenCRM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/izadoesdev","download_url":"https://codeload.github.com/izadoesdev/OpenCRM/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izadoesdev%2FOpenCRM/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35304875,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-09T02:00:07.329Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-07-09T16:01:19.677Z","updated_at":"2026-07-09T16:01:21.195Z","avatar_url":"https://github.com/izadoesdev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenCRM\n\nOpen-source CRM for lead generation, pipeline management, and team collaboration. Built with Next.js, PostgreSQL, and Google Workspace integrations.\n\n## Features\n\n- **Lead management** — Track leads through customizable pipeline stages with drag-and-drop Kanban board\n- **Task system** — Create, assign, and track tasks with recurrence, meeting links, and calendar sync\n- **Google Calendar** — Two-way sync for meeting tasks with attendee RSVP tracking and Google Meet links\n- **Gmail integration** — Send and read emails directly from lead profiles\n- **Team collaboration** — Assign leads and tasks to team members with role-based filtering\n- **Email templates** — Reusable templates with merge tags (`{{name}}`, `{{company}}`, `{{title}}`)\n- **Dashboard** — Overview of pipeline health, upcoming tasks, calendar events, and recent activity\n- **Command palette** — Quick navigation with `Cmd+K`\n\n## Tech Stack\n\n- **Framework** — [Next.js 16](https://nextjs.org) (App Router, Server Actions, React Server Components)\n- **Database** — PostgreSQL with [Drizzle ORM](https://orm.drizzle.team)\n- **Auth** — [Better Auth](https://better-auth.com) with Google OAuth\n- **UI** — [Tailwind CSS v4](https://tailwindcss.com), [shadcn/ui](https://ui.shadcn.com), [Hugeicons](https://hugeicons.com)\n- **Data fetching** — [TanStack Query](https://tanstack.com/query) with optimistic updates\n- **Email** — [Resend](https://resend.com) + Gmail API\n- **Calendar** — Google Calendar API\n\n## Getting Started\n\n### Prerequisites\n\n- [Bun](https://bun.sh) (or Node.js 20+)\n- PostgreSQL database\n- Google Cloud project with OAuth credentials\n\n### Setup\n\n1. Clone the repository:\n\n```bash\ngit clone https://github.com/your-org/OpenCRM.git\ncd OpenCRM\nbun install\n```\n\n2. Create `.env.local` with the following variables:\n\n```env\nDATABASE_URL=postgresql://user:password@localhost:5432/opencrm\n\n# Google OAuth (required)\nGOOGLE_CLIENT_ID=your-google-client-id\nGOOGLE_CLIENT_SECRET=your-google-client-secret\n\n# Optional: restrict sign-ups to a specific email domain\n# Leave empty to allow all Google accounts\nALLOWED_DOMAIN=\n\n# Optional: email sending via Resend\nRESEND_API_KEY=your-resend-api-key\nEMAIL_FROM=noreply@yourdomain.com\n\n# Better Auth\nBETTER_AUTH_SECRET=generate-a-random-secret\nBETTER_AUTH_URL=http://localhost:3000\n```\n\n3. Push the database schema:\n\n```bash\nbun run db:push\n```\n\n4. Start the dev server:\n\n```bash\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000).\n\n### Google OAuth Setup\n\n1. Go to [Google Cloud Console](https://console.cloud.google.com)\n2. Create a new project or select existing\n3. Enable **Google Calendar API** and **Gmail API**\n4. Create OAuth 2.0 credentials (Web application)\n5. Add authorized redirect URI: `http://localhost:3000/api/auth/callback/google`\n6. Copy Client ID and Client Secret to `.env.local`\n\nFor calendar and Gmail features, add test users in **OAuth consent screen \u003e Test users** while your app is in testing mode.\n\n## Project Structure\n\n```\nsrc/\n├── app/                    # Next.js App Router pages\n│   ├── (auth)/             # Auth pages (sign-in, error)\n│   ├── (dashboard)/        # Main app pages\n│   │   ├── dashboard-client.tsx\n│   │   ├── leads/          # Lead list + detail pages\n│   │   ├── pipeline/       # Kanban pipeline view\n│   │   └── tasks/          # Task management\n│   └── layout.tsx\n├── components/             # Shared UI components\n│   ├── ui/                 # shadcn/ui primitives\n│   ├── app-sidebar.tsx     # Navigation sidebar\n│   ├── command-menu.tsx    # Cmd+K palette\n│   └── ...\n├── db/\n│   ├── index.ts            # Drizzle client\n│   └── schema.ts           # Database schema\n└── lib/\n    ├── actions/            # Server actions\n    │   ├── calendar.ts     # Google Calendar integration\n    │   ├── gmail.ts        # Gmail integration\n    │   ├── leads.ts        # Lead CRUD\n    │   ├── tasks.ts        # Task CRUD + calendar sync\n    │   └── ...\n    ├── auth.ts             # Better Auth config\n    ├── google.ts           # Google API client + token refresh\n    ├── queries.ts          # TanStack Query hooks\n    └── utils.ts\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fizadoesdev%2Fopencrm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fizadoesdev%2Fopencrm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fizadoesdev%2Fopencrm/lists"}