{"id":49394848,"url":"https://github.com/ashref-dev/entretien-ai","last_synced_at":"2026-04-28T15:03:45.345Z","repository":{"id":268939304,"uuid":"871382358","full_name":"Ashref-dev/entretien-ai","owner":"Ashref-dev","description":"Land Your Dream Job With Our Interview Practice. 🚀 Get instant feedback, improve fast, and land your dream role. 95% of users increased confidence after just 3 sessions.","archived":false,"fork":false,"pushed_at":"2025-01-05T22:03:49.000Z","size":9352,"stargazers_count":16,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-05T23:18:52.290Z","etag":null,"topics":["azure","nextjs","react","tailwindcss"],"latest_commit_sha":null,"homepage":"https://entretien-ai.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ashref-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2024-10-11T21:08:12.000Z","updated_at":"2025-01-05T23:01:23.000Z","dependencies_parsed_at":"2025-01-05T23:28:50.573Z","dependency_job_id":null,"html_url":"https://github.com/Ashref-dev/entretien-ai","commit_stats":null,"previous_names":["ashref-dev/entretien-ai"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Ashref-dev/entretien-ai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashref-dev%2Fentretien-ai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashref-dev%2Fentretien-ai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashref-dev%2Fentretien-ai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashref-dev%2Fentretien-ai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ashref-dev","download_url":"https://codeload.github.com/Ashref-dev/entretien-ai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashref-dev%2Fentretien-ai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32385943,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T14:34:11.604Z","status":"ssl_error","status_checked_at":"2026-04-28T14:32:37.009Z","response_time":56,"last_error":"SSL_read: 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":["azure","nextjs","react","tailwindcss"],"created_at":"2026-04-28T15:03:26.458Z","updated_at":"2026-04-28T15:03:45.336Z","avatar_url":"https://github.com/Ashref-dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg alt=\"Entretien AI\" src=\"public/_static/og.jpg\"\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/Ashref-dev/entretien-ai\" alt=\"License\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/last-commit/Ashref-dev/entretien-ai\" alt=\"Last Commit\"\u003e\n\n\u003c/p\u003e\n\n\u003cp align=\"center\" style=\"margin-top: 20px\"\u003e\n  \u003cp align=\"center\"\u003e\n    Entretien AI - Master Your Interview Game\n    \u003cbr\u003e\n    \u003ca href=\"https://entretien-ai.com\"\u003e\u003cstrong\u003eGet Started »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://entretien-ai.com/about\"\u003eAbout\u003c/a\u003e\n    ·\n    \u003ca href=\"https://entretien-ai.com\"\u003eWebsite\u003c/a\u003e\n    ·\n    \u003ca href=\"https://entretien-ai.com/blog\"\u003eBlog\u003c/a\u003e\n    ·\n    \u003ca href=\"https://entretien-ai.com/pricing\"\u003ePricing\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n## About Entretien AI\n\nMaster the art of interviewing with Entretien AI. Our cutting-edge platform uses advanced AI technology to provide personalized interview preparation, helping you transform interview anxiety into confident performance. Whether you're targeting tech giants or startups, we'll help you showcase your best self.\n\n## Key Features\n\n- **AI-Powered Mock Interviews**: Experience realistic interview simulations with our advanced AI system\n- **Real-Time Feedback**: Get instant analysis on your responses, body language, and delivery\n- **Technical Interview Prep**: Specialized tracks for software engineering roles across all levels\n- **Performance Analytics**: Track your progress with detailed metrics and improvement insights\n- **Custom Interview Paths**: Tailored preparation paths based on your target role and company\n- **Comprehensive Feedback**: Detailed analysis of technical accuracy, communication skills, and presentation\n\n## Tech Stack\n\n\u003cp align=\"left\"\u003e\n  \u003ca href=\"https://nextjs.org\"\u003e\u003cimg src=\"https://img.shields.io/badge/Next.js%2015-000000?style=flat-square\u0026logo=next.js\u0026logoColor=white\" alt=\"Next.js 15\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://react.dev\"\u003e\u003cimg src=\"https://img.shields.io/badge/React%2019-61DAFB?style=flat-square\u0026logo=react\u0026logoColor=black\" alt=\"React 19\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.typescriptlang.org\"\u003e\u003cimg src=\"https://shields.io/badge/TypeScript-3178C6?logo=TypeScript\u0026logoColor=FFF\u0026style=flat-square\" alt=\"TypeScript\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://tailwindcss.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/Tailwind%20CSS-38B2AC?style=flat-square\u0026logo=tailwind-css\u0026logoColor=white\" alt=\"Tailwind CSS\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.prisma.io\"\u003e\u003cimg src=\"https://img.shields.io/badge/Prisma-2D3748?style=flat-square\u0026logo=prisma\u0026logoColor=white\" alt=\"Prisma\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n### Frontend\n- [Next.js 15](https://nextjs.org/) - React Framework\n- [React](https://react.dev/) - UI Library\n- [TypeScript](https://www.typescriptlang.org/) - Programming Language\n- [Tailwind CSS](https://tailwindcss.com/) - Styling\n- [shadcn/ui](https://ui.shadcn.com/) - UI Components\n\n### Backend \u0026 Database\n- [PostgreSQL](https://www.postgresql.org/) - Database\n- [Prisma](https://www.prisma.io/) - ORM\n- [Neon](https://neon.tech/) - Serverless Postgres\n- [Auth.js v5](https://authjs.dev/) - Authentication\n- [Server Actions](https://nextjs.org/docs/app/api-reference/functions/server-actions) - API Endpoints\n\n### Email \u0026 Communications\n- [Resend](https://resend.com/) - Email Infrastructure\n- [React Email](https://react.email/) - Email Templates\n\n## Getting Started\n\n### Prerequisites\n\n- Deno, bun or node.js 18.x or higher\n\nImportant:\nThis project uses `@t3-oss/env-nextjs` for runtime environment variable validation. The validation schema is defined in `env.mjs` and ensures all required environment variables are present with the correct types.\n\n### Required Environment Variables\n\nThe following environment variables must be set in your `.env` file:\n\n#### Authentication\n- `AUTH_SECRET`: Secret key for authentication\n- `GOOGLE_CLIENT_ID`: Google OAuth client ID\n- `GOOGLE_CLIENT_SECRET`: Google OAuth client secret\n- `AUTH_GITHUB_ID`: GitHub OAuth app ID\n- `AUTH_GITHUB_SECRET`: GitHub OAuth app secret\n\n#### Database\n- `DATABASE_URL`: PostgreSQL connection string\n\n#### Email\n- `RESEND_API_KEY`: API key for Resend email service\n- `EMAIL_FROM`: Sender email address\n\n#### AI Services\n- `AI_API_KEY`: API key for AI services\n- `GROQ_API_KEY`: Groq API key (optional)\n- `GROK_API_KEY`: Grok API key (optional)\n\n#### Stripe Integration\n- `STRIPE_API_KEY`: Stripe secret key\n- `STRIPE_WEBHOOK_SECRET`: Stripe webhook signing secret\n- `NEXT_PUBLIC_STRIPE_PRO_MONTHLY_PLAN_ID`: Monthly pro plan ID\n- `NEXT_PUBLIC_STRIPE_PRO_YEARLY_PLAN_ID`: Yearly pro plan ID\n- `NEXT_PUBLIC_STRIPE_BUSINESS_MONTHLY_PLAN_ID`: Monthly business plan ID\n- `NEXT_PUBLIC_STRIPE_BUSINESS_YEARLY_PLAN_ID`: Yearly business plan ID\n\n#### Application URLs\n- `NEXT_PUBLIC_APP_URL`: Public URL of your application\n- `NEXTAUTH_URL`: Auth.js URL (optional in production)\n\n### Environment Validation\n\nThe project uses strict runtime validation for environment variables:\n\n- Server-side variables are validated before the server starts\n- Client-side variables are validated during build time\n- Type-safe access to environment variables throughout the application\n- Helpful error messages if required variables are missing\n\nFor production builds, the application uses `.env.production` with dummy values during build time. The actual runtime values are provided by Azure App Service environment variables.\n\nDo not modify `.env.production` with real values as it's committed to the repository.\n\n\n### Installation\n\n1. Clone the repository:\n\n```sh\ngit clone https://github.com/Ashref-dev/entretien-ai\n```\n\n2. Install dependencies:\n\n```sh\nbun install\n```\n\n3. Copy the example environment file:\n\n```sh\ncp .env.example .env\n```\n\n4. Set up your environment variables:\n- NEXTAUTH_URL\n- NEXTAUTH_SECRET\n- NEXT_PUBLIC_APP_URL\n- DATABASE_URL\n- Etc.\n\n5. Initialize the database:\n\n```sh\nbunx prisma db push\n```\n\n6. Run the development server:\n\n```sh\nbun dev\n```\n\n## Deployment\n\n\u003cdiv style=\"display: flex; gap: 4px;\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/microsoft%20azure-0089D6?style=for-the-badge\u0026logo=microsoft-azure\u0026logoColor=white\" alt=\"Azure Cloud\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Docker-2CA5E0?style=for-the-badge\u0026logo=docker\u0026logoColor=white\" alt=\"Docker Containers\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/PostgreSQL-316192?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white\" alt=\"Neon Cloud\"\u003e\n\u003c/div\u003e\n\n### This project comes with a ready-to-use Docker configuration and GitHub Actions pipeline for Azure Cloud deployment.\n\n### Docker Support\n- Includes a production-ready Dockerfile\n- Optimized multi-stage builds for smaller image size\n- Configured for Next.js and Bun\n\n### Azure Cloud Deployment\n- Pre-configured GitHub Actions workflow for CI/CD\n- Automated deployments to Azure App Service\n- For detailed deployment commands, see [Deployment Guide](Deployment/commands.md)\n\nTo deploy to Azure:\n1. Set up an Azure subscription (free with GitHub Student Pack)\n2. Install Azure CLI and authenticate\n3. Follow the commands in the deployment guide to:\n   - Create resource group\n   - Set up App Service Plan\n   - Configure environment variables\n   - Deploy container image\n\nFor complete deployment instructions and Azure CLI commands, check our [Deployment Guide](Deployment/commands.md).\n\n## Code of Conduct\n\nWe are committed to fostering an open and welcoming environment. Please read our [Code of Conduct](CODE_OF_CONDUCT.md) for details on our community behavior standards and how to report unacceptable behavior.\n\n## Contributing\n\nWe welcome contributions! Please see our contribution guidelines for details.\n\n## Contact\n\nFor support or inquiries, contact us at support@entretien-ai.com\n\n## Privacy \u0026 Security\n\nWe take your privacy seriously. See our [Privacy Policy](https://entretien-ai.com/privacy) for details about:\n- Data collection and usage\n- Security measures\n- Your privacy rights\n\n## License\n\nThis project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the [LICENSE](LICENSE) file for details.\n\nThe AGPL-3.0 license ensures that:\n- You can use this software freely\n- You can modify and distribute this software\n- If you modify and share this software, you must:\n  - Make your modifications available under the same license\n  - Share the source code when you deploy modified versions\n  - Preserve copyright notices and license information\n\n\n## the shader gradients\nhere's the links to the used gradients:\n\n```\n\nGradient 1:\nhttps://www.shadergradient.co/customize?animate=on\u0026axesHelper=on\u0026bgColor1=%23000000\u0026bgColor2=%23000000\u0026brightness=1\u0026cAzimuthAngle=180\u0026cDistance=5.7\u0026cPolarAngle=115\u0026cameraZoom=1\u0026color1=%23268c9a\u0026color2=%239224b3\u0026color3=%23000000\u0026destination=onCanvas\u0026embedMode=off\u0026envPreset=city\u0026format=gif\u0026fov=45\u0026frameRate=10\u0026grain=on\u0026lightType=3d\u0026pixelDensity=1\u0026positionX=-0.5\u0026positionY=0.1\u0026positionZ=-1\u0026range=enabled\u0026rangeEnd=40\u0026rangeStart=0\u0026reflection=0.1\u0026rotationX=0\u0026rotationY=0\u0026rotationZ=235\u0026shader=defaults\u0026toggleAxis=true\u0026type=waterPlane\u0026uAmplitude=0\u0026uDensity=1.1\u0026uFrequency=5.5\u0026uSpeed=0.1\u0026uStrength=2.4\u0026uTime=0.2\u0026wireframe=false\u0026zoomOut=false\n\nGradient 2:\nhttps://shadergradient-web.vercel.app/customize?animate=on\u0026axesHelper=off\u0026bgColor1=%23000000\u0026bgColor2=%23000000\u0026brightness=1.1\u0026cAzimuthAngle=170\u0026cDistance=4.4\u0026cPolarAngle=70\u0026cameraZoom=1\u0026color1=%23b5e1ff\u0026color2=%23f6d1ff\u0026color3=%23ffffff\u0026destination=onCanvas\u0026embedMode=off\u0026envPreset=city\u0026format=gif\u0026fov=45\u0026frameRate=10\u0026gizmoHelper=hide\u0026grain=on\u0026lightType=3d\u0026pixelDensity=1\u0026positionX=0\u0026positionY=0.9\u0026positionZ=-0.3\u0026range=enabled\u0026rangeEnd=40\u0026rangeStart=0\u0026reflection=0.1\u0026rotationX=45\u0026rotationY=0\u0026rotationZ=0\u0026shader=defaults\u0026type=waterPlane\u0026uAmplitude=0\u0026uDensity=1.2\u0026uFrequency=0\u0026uSpeed=0.1\u0026uStrength=3.4\u0026uTime=0\u0026wireframe=false\n\n```\n\n# Entretien AI TO DOs\n\n## Feature 1: Multiple Language Support using i18n Next\n\n### Steps:\n1. **Setup i18n Configuration**:\n   - Install and configure next-i18next package\n   - Create language TypeScript files for supported languages\n   - Set up language detection and routing\n\n2. **Implement Language Files**:\n   - Create translation files for each supported language\n   - Organize translations by feature/component\n   - Include metadata like language name and direction\n\n3. **Add Language Switching**:\n   - Create language selector component\n   - Implement language switching logic\n   - Persist language preference\n\n4. **Translate Content**:\n   - Update components to use translation keys\n   - Add translations for all static text\n   - Handle dynamic content translation\n\n5. **Test Localization**:\n   - Verify translations in all supported languages\n   - Test RTL language support\n   - Validate language switching functionality\n\n---\n\n## Notes:\n- Follow Next.js i18n best practices and documentation\n- Ensure proper fallback handling for missing translations\n- Consider cultural differences in UI/UX design\n- Test performance impact of language bundles\n\n\n## Feature 2: Newsletter Subscription System\n\n### Steps:\n1. **Database Schema Setup**:\n   - Create newsletter subscriber table in Prisma schema\n   ```prisma\n   model NewsletterSubscriber {\n     id        String   @id @default(cuid())\n     email     String   @unique\n     status    String   @default(\"active\") // active, unsubscribed\n     createdAt DateTime @default(now())\n     updatedAt DateTime @updatedAt\n   }\n   ```\n\n2. **Email Validation \u0026 Processing**:\n   - Implement Zod schema for email validation\n   - Create server action for subscription handling\n   - Set up rate limiting for form submissions\n   ```typescript\n   const newsletterSchema = z.object({\n     email: z.string().email(\"Please enter a valid email address\")\n   });\n   ```\n\n3. **Email Service Integration**:\n   - Configure Resend for confirmation emails (it's there but not working)\n   - Create React Email template for welcome message\n   - Implement double opt-in confirmation\n\n### Technical Requirements:\n- Resend API integration\n- PostgreSQL database\n- Rate limiting middleware\n- Email templating system\n- Error handling and logging\n\n### Security Considerations:\n- Email validation and sanitization\n- CSRF protection\n- Rate limiting\n- GDPR compliance\n- Secure storage of subscriber data\n\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashref-dev%2Fentretien-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fashref-dev%2Fentretien-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashref-dev%2Fentretien-ai/lists"}