A modern web application for booking medical appointments with doctors across Sri Lanka. Built with Next.js, React, and TypeScript.
Live Site: https://echannelling.vercel.app/
- Framework: Next.js 15.5.4 (App Router)
- UI Library: React 19.1.0
- Language: TypeScript 5.9.3
- Styling: Tailwind CSS 4.1.14 with PostCSS
- State Management: Redux Toolkit 2.9.0 + React Redux 9.2.0
- HTTP Client: Axios 1.12.2
- Icons: React Icons 5.5.0, Lucide React 0.544.0, Heroicons 2.2.0
- Animations: Framer Motion 12.23.26
- PDF Generation: jsPDF 3.0.3
- Effects: React Snowfall 2.4.0
- ORM: Prisma 7.2.0
- Database: PostgreSQL (via @prisma/adapter-pg 7.2.0)
- Database Driver: pg 8.16.3
- Caching: Upstash Redis 1.35.7
- Validation: Zod 4.2.1
- JWT: jsonwebtoken 9.0.3
- Password Hashing: bcryptjs 3.0.3
- Encryption: crypto-js 4.2.0
- UUID Generation: uuid 13.0.0
- Email: Nodemailer 7.0.11, SendGrid Mail 8.1.6, Resend 6.6.0
- SMS: Twilio 5.10.7
- Linting: ESLint 9.37.0 with Next.js config
- Code Formatting: Prettier 3.6.2
- TypeScript Utilities: ts-node 10.9.2
- Environment Variables: dotenv 17.2.3
- Node.js (version 18+)
- npm or yarn
- Redis instance (Upstash recommended)
- SMTP server access (for email OTP)
- Twilio account (for SMS OTP)
git clone <repository-url>
cd e-channeling
npm installCreate a .env file in the e-channeling directory and add the following:
# ===========================
# API Configuration
# ===========================
NEXT_PUBLIC_API_BASE_URL=http://localhost:3000/api
# ===========================
# Database Configuration
# ===========================
DATABASE_URL=postgresql://user:password@localhost:5432/echanneling?schema=public
# ===========================
# Redis Configuration (Upstash)
# ===========================
UPSTASH_REDIS_REST_URL=https://your-redis-instance.upstash.io
UPSTASH_REDIS_REST_TOKEN=your-redis-rest-token
# ===========================
# Email Configuration (SMTP)
# ===========================
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
EMAIL_FROM=your-email@gmail.com
# ===========================
# Email Service Providers (Optional)
# ===========================
RESEND_API_KEY=your-resend-api-key
SENDGRID_API_KEY=your-sendgrid-api-key
# ===========================
# Twilio Configuration (SMS)
# ===========================
TWILIO_SID=your-twilio-account-sid
TWILIO_AUTH_TOKEN=your-twilio-auth-token
TWILIO_PHONE=+1234567890
# ===========================
# Optional Configuration
# ===========================
#NODE_TLS_REJECT_UNAUTHORIZED=0npm run devOpen http://localhost:3000 in your browser.
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLintnpx tsx src/utils/api.ts- Run single ts file
/- Home page/login- Login page (/Email/Phone number+ Password)/signup- Registration page (Multi-step with OTP verification)/forgot-password- Password recovery initiation/search- Find Doctors/profile- User profile (Protected - requires login)/booking- Appointment booking (Protected - requires login)