DentiCore is a modern web application that provides 24/7 AI-powered, voice-based dental consultations and appointment management. Patients can speak naturally with an intelligent voice assistant (powered by Vapi.ai) to receive instant dental advice, understand symptoms, get home-care recommendations, or book appointments.
Built with Next.js 15 (App Router), TypeScript, Tailwind CSS, Clerk authentication, Prisma ORM, and TanStack Query.
- 🎙️ Voice-Powered AI Dental Assistant — Speak naturally using your browser microphone (Vapi.ai)
- 🔐 Authentication & User Management — Secure sign-in with Clerk
- 💳 Subscription Plans — Basic & Pro tiers with gated voice access
- 📅 Appointment Management — Book and manage dental appointments
- 🛠️ Admin Dashboard — Manage doctors, appointments, and view stats
- 🦷 Multiple Appointment Types — Checkups, Cleaning, Consultation, Emergency
- 🌙 Modern UI/UX — Dark mode, Geist font, Radix UI, Sonner toasts
- 📱 Responsive Design — Optimized for desktop, tablet, and mobile
- 🧰 Utility Helpers — Avatar generation, phone formatting, initials, time slots
| Category | Tools / Libraries |
|---|---|
| Framework | Next.js 15 (App Router, Turbopack) |
| Language | TypeScript |
| Styling | Tailwind CSS v4, clsx, tailwind-merge |
| Authentication | Clerk |
| Database | Prisma ORM + PostgreSQL |
| Data Fetching | TanStack Query (React Query) |
| Voice AI | Vapi.ai (@vapi-ai/web) |
| Emails | Resend |
| UI Components | Radix UI, shadcn/ui, Lucide Icons |
| Forms & Validation | react-hook-form, zod |
| Dates | date-fns |
| Linting / Formatting | Biome |
denticore/
├── app/
│ ├── (landing)/ # Marketing pages
│ ├── dashboard/ # Authenticated user area
│ ├── voice/ # Voice consultation page
│ ├── pro/ # Pricing / upgrade page
│ ├── admin/ # Admin dashboard
│ └── layout.tsx
│
├── components/
│ ├── admin/
│ ├── landing/
│ ├── voice/
│ ├── Navbar.tsx
│ ├── UserSync.tsx
│ └── provider/
│
├── hooks/ # Custom TanStack Query hooks
│
├── lib/
│ ├── actions/
│ └── utils.ts # cn(), formatPhoneNumber, generateAvatar, etc.
│
├── prisma/
│ └── schema.prisma
│
├── public/
│
├── .env.example
├── next.config.ts
├── package.json
├── tsconfig.json
└── tailwind.config.ts
-
Node.js >= 20
-
pnpm (recommended) or npm / yarn
-
PostgreSQL database
-
Accounts & API keys for:
- Clerk
- Vapi.ai
- Resend (optional)
# Clone the repository
git clone https://github.com/AbdullahAli2005/denticore.git
cd denticore
# Install dependencies
pnpm install
# or
npm install
# Copy environment variables
cp .env.example .env.localFill in your .env.local file:
# Clerk
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
CLERK_SECRET_KEY=sk_...
# Vapi
NEXT_PUBLIC_VAPI_API_KEY=...
# Database
DATABASE_URL="postgresql://user:password@localhost:5432/denticore"
# Resend (optional)
RESEND_API_KEY=...# Generate Prisma client
pnpm prisma generate
# Push schema (development)
pnpm prisma db push
# OR run migrations
pnpm prisma migrate dev --name init# Development server
pnpm devVisit: http://localhost:3000
pnpm dev # Start development server
pnpm build # Build for production
pnpm start # Run production build
pnpm lint # Run Biome lint
pnpm format # Format code with Biome
pnpm prisma studio # Open Prisma StudioRecommended platforms:
- Vercel (best for Next.js)
- Railway
- Render
- Fly.io
Ensure all environment variables are set in your hosting dashboard.
Contributions are welcome and appreciated.
-
Fork the repository
-
Create your feature branch:
git checkout -b feature/amazing-feature
-
Commit your changes:
git commit -m "Add amazing feature" -
Push to the branch:
git push origin feature/amazing-feature
-
Open a Pull Request
Distributed under the MIT License.
See LICENSE for more information.
Made with ❤️ to improve dental care accessibility.