{"id":24756761,"url":"https://github.com/rafaumeu/ignitecall-app","last_synced_at":"2026-04-23T08:01:31.787Z","repository":{"id":274543408,"uuid":"923201389","full_name":"rafaumeu/ignitecall-app","owner":"rafaumeu","description":"📅 Scheduling app with Google Calendar OAuth, Prisma ORM, Design System and Next.js SSR. Full-stack appointment management.","archived":false,"fork":false,"pushed_at":"2026-04-22T23:55:11.000Z","size":722,"stargazers_count":4,"open_issues_count":14,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-23T01:29:47.490Z","etag":null,"topics":["api-rest","appointment-booking","authentication","biomejs","calendar","google-calendar","ignit-ui","nextjs","prisma","react-hook-form","scheduling","scheduling-system","typescript","zod"],"latest_commit_sha":null,"homepage":"https://ignitecall-app.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/rafaumeu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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},"funding":{"github":"rafaumeu","patreon":"rafaumeu"}},"created_at":"2025-01-27T20:08:59.000Z","updated_at":"2026-04-22T23:55:16.000Z","dependencies_parsed_at":"2025-03-23T07:30:06.672Z","dependency_job_id":"a99f291b-cb11-445f-8cf7-3021e54f5136","html_url":"https://github.com/rafaumeu/ignitecall-app","commit_stats":null,"previous_names":["rafaumeu/ignitecall-app"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/rafaumeu/ignitecall-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaumeu%2Fignitecall-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaumeu%2Fignitecall-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaumeu%2Fignitecall-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaumeu%2Fignitecall-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rafaumeu","download_url":"https://codeload.github.com/rafaumeu/ignitecall-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaumeu%2Fignitecall-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32171223,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T02:19:40.750Z","status":"ssl_error","status_checked_at":"2026-04-23T02:17:55.737Z","response_time":53,"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":["api-rest","appointment-booking","authentication","biomejs","calendar","google-calendar","ignit-ui","nextjs","prisma","react-hook-form","scheduling","scheduling-system","typescript","zod"],"created_at":"2025-01-28T14:20:28.247Z","updated_at":"2026-04-23T08:01:31.748Z","avatar_url":"https://github.com/rafaumeu.png","language":"TypeScript","funding_links":["https://github.com/sponsors/rafaumeu","https://patreon.com/rafaumeu"],"categories":[],"sub_categories":[],"readme":"# ⏰ Ignite Call\n\n\u003cdiv align=\"center\"\u003e\n\nA modern scheduling system built with Next.js and TypeScript, featuring Google Calendar integration, Google Meet automation, and advanced scheduling capabilities.\n\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue.svg)](https://www.typescriptlang.org/)\n[![Next.js](https://img.shields.io/badge/Next.js-Latest-black.svg)](https://nextjs.org/)\n[![Prisma](https://img.shields.io/badge/Prisma-6.3.0-2D3748.svg)](https://www.prisma.io/)\n[![Ignite UI](https://img.shields.io/badge/Ignite_UI-Latest-00875F.svg)](https://github.com/rocketseat/ignite-ui)\n[![NextAuth.js](https://img.shields.io/badge/NextAuth.js-Latest-000000.svg)](https://next-auth.js.org/)\n[![Google API](https://img.shields.io/badge/Google_APIs-4285F4.svg)](https://developers.google.com/apis)\n[![Codecov](https://img.shields.io/codecov/c/github/rafaumeu/ignitecall-app)](https://codecov.io/gh/rafaumeu/ignitecall-app)\n[![Coverage](https://codecov.io/gh/rafaumeu/ignitecall-app/branch/main/graph/badge.svg)](https://codecov.io/gh/rafaumeu/ignitecall-app)\n[![CI](https://github.com/rafaumeu/ignitecall-app/actions/workflows/ci.yml/badge.svg)](https://github.com/rafaumeu/ignitecall-app/actions/workflows/ci.yml)\n\n**🌐 [Live Demo](https://ignitecall-app.vercel.app)** • **📸 [Screenshots](#-screenshots)**\n\n---\n\n## 📖 Table of Contents\n\n| [Features](#-features) | [Tech Stack](#-tech-stack) | [Development Tools](#-development-tools) |\n|----------------------|---------------------------|------------------------------------------|\n| [Prerequisites](#-prerequisites) | [Setup](#️-setup) | [Environment Variables](#-environment-variables) |\n| [Project Structure](#️-project-structure) | [Docker Setup](#-docker-setup) | [Contributing](#-contributing) |\n\n---\n\u003c/div\u003e\n\n## 📸 Screenshots\n\n\u003c!-- Add screenshots of: scheduling interface, calendar view, profile page, time interval configuration --\u003e\n\n| Scheduling | Calendar | Profile |\n|:---:|:---:|:---:|\n| *Scheduling form with date/time selection* | *Interactive calendar with availability* | *User profile with bio* |\n\n## 🚀 Features\n\n### Google Integration\n\n- **Google Meet Integration**:\n  - Automated Google Meet creation for scheduled meetings\n  - Direct integration with Google Calendar API\n  - Secure OAuth token management and refresh\n  - Attendee management and conference data handling\n\n- **Google Calendar Integration**:\n  - Seamless calendar synchronization\n  - OAuth 2.0 authentication with offline access\n  - Automatic token refresh mechanism\n  - Event creation and management\n  - Calendar scope authorization\n\n### Scheduling System\n\n- **Advanced Scheduling**:\n  - Interactive calendar interface with blocked dates\n  - Dynamic time slots based on user availability\n  - Conflict detection and prevention\n  - Past dates blocking\n  - Real-time availability updates\n  - Multi-step scheduling form with confirmation\n\n### User Management\n\n- **Profile System**:\n  - Custom user profiles with bio\n  - Username-based routing\n  - Profile customization options\n  - Cascade relationship configuration\n  - Session management with NextAuth.js\n\n### Time Management\n\n- **Availability Control**:\n  - Flexible weekly schedule configuration\n  - Custom time intervals for each day\n  - Automated availability calculation\n  - Time zone support with Day.js\n  - Conflict prevention system\n\n### Data Handling\n\n- **Efficient Data Management**:\n  - React Query for efficient data fetching\n  - Optimistic updates\n  - Error boundary handling\n  - Form validation with Zod\n  - Real-time data synchronization\n\n## ⚡ Tech Stack\n\n![Next.js](https://img.shields.io/badge/Next.js-000000?style=for-the-badge\u0026logo=next.js\u0026logoColor=white)\n![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)\n![Prisma](https://img.shields.io/badge/Prisma-2D3748?style=for-the-badge\u0026logo=prisma\u0026logoColor=white)\n![React Hook Form](https://img.shields.io/badge/React_Hook_Form-EC5990?style=for-the-badge\u0026logo=reacthookform\u0026logoColor=white)\n![Axios](https://img.shields.io/badge/Axios-5A29E4?style=for-the-badge\u0026logo=axios\u0026logoColor=white)\n![NextAuth.js](https://img.shields.io/badge/NextAuth.js-000000?style=for-the-badge\u0026logo=next.js\u0026logoColor=white)\n![React Query](https://img.shields.io/badge/React_Query-FF4154?style=for-the-badge\u0026logo=react-query\u0026logoColor=white)\n![Day.js](https://img.shields.io/badge/Day.js-FF5F4C?style=for-the-badge\u0026logo=day.js\u0026logoColor=white)\n\n---\n\n## 🛠 Development Tools\n\n![Biome](https://img.shields.io/badge/Biome-60A5FA?style=for-the-badge\u0026logo=biome\u0026logoColor=white)\n![Zod](https://img.shields.io/badge/Zod-3E67B1?style=for-the-badge\u0026logo=zod\u0026logoColor=white)\n![Yarn](https://img.shields.io/badge/Yarn-2C8EBB?style=for-the-badge\u0026logo=yarn\u0026logoColor=white)\n\n---\n\n## 🔄 CI/CD Pipeline\n\n### Continuous Integration\n\nOur CI pipeline automatically runs on every push and pull request:\n\n- **Code Quality Checks**:\n  - TypeScript type checking\n  - ESLint for code style\n  - Biome formatting validation\n  - Super-linter for additional checks\n\n- **Testing Strategy**:\n  - Unit tests with Vitest\n  - Multi-node version testing (16, 18, 20)\n  - Automated test runs on pull requests\n\n### Automated Workflows\n\n- **Project Board Automation**:\n  - Automatic issue/PR tracking\n  - Status updates (Todo → In Progress → Done)\n  - Integration with GitHub Projects\n\n- **Pull Request Management**:\n  - Automated PR labeling\n  - Code review enforcement\n  - Branch protection rules\n\n### Workflow Files\n\n- `ci.yml`: Main CI pipeline\n- `code-review.yml`: Code quality checks\n- `project-automation.yml`: Project board automation\n- `labeler.yml`: PR labeling automation\n\nTo view the workflow runs, visit the [Actions tab](https://github.com/rafaumeu/ignitecall-app/actions) in the repository.\n\n---\n\n## 📦 Prerequisites\n\n- Node.js 20+ (LTS version)\n- Yarn package manager\n- Docker and Docker Compose\n- Google Cloud Platform account with Calendar and Meet APIs enabled\n- PostgreSQL (production) / SQLite (development)\n\n## 🛠️ Setup\n\n1. Clone the repository:\n\n```bash\ngit clone https://github.com/rafaumeu/ignitecall-app.git\ncd ignitecall-app\n```\n\n2. Install dependencies:\n\n```bash\nyarn install\n```\n\n3. Set up environment variables:\n\n```bash\ncp .env.example .env\n```\n\n4. Configure Google OAuth:\n   - Enable Calendar and Meet APIs in Google Cloud Console\n   - Set up OAuth consent screen with required scopes\n   - Create OAuth credentials and add redirect URIs\n   - Add credentials to .env file\n\n5. Start the development environment:\n\n```bash\ndocker-compose up -d  # Start PostgreSQL\nyarn prisma migrate dev  # Run database migrations\nyarn dev  # Start development server\n```\n\n## 🐳 Docker Setup\n\nThe project uses Docker to provide a complete development environment (approximately 300MB). With a single command, you get both the application and database running:\n\n```yaml\n# docker-compose.yml\nversion: '3'\n\nservices:\n  postgres:\n    image: postgres\n    container_name: ignitecall-postgres\n    ports:\n      - 5432:5432\n    environment:\n      - POSTGRES_USER=postgres\n      - POSTGRES_PASSWORD=docker\n      - POSTGRES_DB=ignitecall\n    volumes:\n      - pgdata:/var/lib/postgresql/data\n\n  app:\n    build: .\n    container_name: ignitecall-app\n    ports:\n      - 3000:3000\n    depends_on:\n      - postgres\n    environment:\n      - DATABASE_URL=postgresql://postgres:docker@postgres:5432/ignitecall\n\nvolumes:\n  pgdata:\n```\n\nQuick Start with Docker:\n\n```bash\n# Start the entire application\ndocker-compose up -d\n\n# The application will be available at http://localhost:3000\n# PostgreSQL will be available at postgresql://postgres:docker@localhost:5432/ignitecall\n```\n\nFeatures of this setup:\n\n- Complete development environment in a single command\n- PostgreSQL database with persistent data\n- Optimized production-ready Node.js image\n- Automatic database connection\n- Hot reload for development\n- Total size: ~300MB\n\n## 🔧 Environment Variables\n\n```env\n# Database\nDATABASE_URL=\"postgresql://postgres:docker@localhost:5432/ignitecall\"\n\n# Google OAuth\nGOOGLE_CLIENT_ID=\"your-google-client-id\"\nGOOGLE_CLIENT_SECRET=\"your-google-client-secret\"\n\n# NextAuth.js\nNEXTAUTH_SECRET=\"your-nextauth-secret\"\nNEXTAUTH_URL=\"http://localhost:3000\"\n```\n\n## 🏗️ Project Structure\n\n```bash\nignitecall-app/\n├── src/\n│   ├── @types/\n│   │   └── next-auth.d.ts\n│   ├── pages/\n│   │   ├── api/\n│   │   │   ├── auth/\n│   │   │   ├── users/\n│   │   │   └── schedule/\n│   │   ├── schedule/\n│   │   └── register/\n│   ├── components/\n│   │   ├── Calendar/\n│   │   ├── ScheduleForm/\n│   │   └── TimeIntervals/\n│   ├── lib/\n│   │   ├── google/\n│   │   ├── auth/\n│   │   └── prisma.ts\n│   └── styles/\n│       └── globals.ts\n├── prisma/\n│   ├── migrations/\n│   └── schema.prisma\n└── biome.json\n```\n\n## 📱 Components\n\nTo be documented based on project implementation.\n\n## 📚 Documentation\n\nTo be added based on project implementation.\n\n## 🛡️ License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🤝 Contributing\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'feat: add some amazing feature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n---\n\n\u003cdiv align=\"center\"\u003e\nMade with ❤️ by Rafael Dias Zendron\n\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/rafael-dias-zendron-528290132/)\n[![GitHub](https://img.shields.io/badge/GitHub-100000?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/rafaumeu)\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafaumeu%2Fignitecall-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frafaumeu%2Fignitecall-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafaumeu%2Fignitecall-app/lists"}