Skip to content

hetref/odooxspit-appointment-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

188 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“… Book Now ~ Schedule Smarter, Work Better Together

A comprehensive, full-stack appointment booking and management system

Next.js React Node.js Express Prisma PostgreSQL TypeScript License

Features β€’ Demo β€’ Installation β€’ Documentation β€’ Contributing


πŸ“– Table of Contents


🌟 Overview

Book Now is a modern, production-ready appointment booking system designed for organizations and businesses. It enables organizations to manage appointments, resources, team members, and bookings with ease. The system includes a web application, REST API backend, and a cross-platform desktop application built with Tauri.

🎯 What Makes It Special?

  • Multi-Platform: Web app (Next.js) + Desktop app (Tauri)
  • Role-Based Access: USER and ORGANIZATION roles with granular permissions
  • Complete Booking System: Time slot management, conflict detection, and automatic/manual assignment
  • Payment Integration: Razorpay Connect OAuth for per-organization payment accounts
  • AI Voice Integration: Bolna integration for voice-based appointment management
  • Real-time Notifications: Comprehensive notification system for all user actions
  • Session Management: Track and manage active sessions across multiple devices
  • Media Management: AWS S3 integration for file uploads
  • Security First: JWT auth, bcrypt password hashing, CORS, rate limiting, and Helmet security

✨ Features

πŸ” Authentication & Authorization

  • βœ… User registration with email verification
  • βœ… Role-based access control (USER, ORGANIZATION)
  • βœ… JWT access tokens (15 min expiry) + Refresh tokens (30 days)
  • βœ… Password reset via email
  • βœ… Multi-device session management with device tracking
  • βœ… Logout from specific devices or all devices
  • βœ… Automatic organization creation for ORGANIZATION role
  • βœ… USER to ORGANIZATION account conversion

🏒 Organization Management

  • βœ… Create and manage organizations with business hours
  • βœ… Add/remove team members
  • βœ… Resource management (rooms, equipment, staff)
  • βœ… Custom appointment types with flexible scheduling
  • βœ… Organization-specific Razorpay payment integration
  • βœ… Bolna AI agent configuration per organization

πŸ“… Appointment System

  • βœ… Flexible appointment types (USER-based or RESOURCE-based)
  • βœ… Custom duration and pricing per appointment
  • βœ… Automatic or visitor-based assignment
  • βœ… Multiple or single slot bookings
  • βœ… Custom questions for booking forms
  • βœ… Introduction and confirmation messages
  • βœ… Publish/unpublish appointments
  • βœ… Secret links for private appointments with expiry
  • βœ… Expiry by time or booking capacity

πŸ—“οΈ Booking Management

  • βœ… Available time slot calculation with conflict detection
  • βœ… Real-time availability checking
  • βœ… Booking cancellation with policy enforcement
  • βœ… User and organization booking history
  • βœ… Booking status tracking (PENDING, CONFIRMED, CANCELLED, COMPLETED)
  • βœ… Custom user responses to appointment questions

πŸ’³ Payment Processing

  • βœ… Razorpay Connect OAuth integration
  • βœ… Per-organization payment accounts
  • βœ… Order creation and webhook-driven payment updates
  • βœ… Payment status tracking (PENDING, PAID, FAILED, REFUNDED)
  • βœ… Free and paid appointments support

πŸ”” Notification System

  • βœ… Real-time notifications for all major events
  • βœ… Appointment, booking, payment, and organization notifications
  • βœ… Mark as read/unread
  • βœ… Notification dropdown with real-time updates
  • βœ… 15+ notification types

πŸ€– AI Voice Integration (Bolna)

  • βœ… Create and manage AI voice agents
  • βœ… Initiate voice calls for appointment reminders
  • βœ… Track call status, duration, and recordings
  • βœ… Call transcripts and metadata

πŸ“ Media Management

  • βœ… AWS S3 integration for file uploads
  • βœ… Support for images, videos, documents, and audio
  • βœ… 50MB file size limit
  • βœ… Custom bucket and path configuration
  • βœ… File type validation

πŸ”’ Security Features

  • βœ… Helmet.js for HTTP headers security
  • βœ… CORS configuration
  • βœ… Rate limiting
  • βœ… Bcrypt password hashing (12 rounds)
  • βœ… HttpOnly cookies for refresh tokens
  • βœ… Token rotation on every refresh
  • βœ… Device and IP tracking
  • βœ… Prevents user enumeration

πŸ› οΈ Tech Stack

Frontend (Web & Desktop)

  • Framework: Next.js 16.1.0 (App Router)
  • UI Library: React 19.2.3
  • Language: TypeScript 5.9.3
  • Styling: Tailwind CSS 4.x
  • UI Components: Radix UI primitives
  • Forms: Custom components with validation
  • Charts: Recharts
  • Icons: Lucide React
  • Theme: next-themes for dark mode
  • Notifications: Sonner

Backend (API)

  • Runtime: Node.js
  • Framework: Express 4.21.2
  • Database: PostgreSQL
  • ORM: Prisma 5.22.0
  • Authentication: JWT + bcrypt
  • Email: Nodemailer (SMTP)
  • File Upload: Multer + AWS S3
  • Payment: Razorpay Connect OAuth
  • Security: Helmet, CORS, express-rate-limit
  • AI Voice: Bolna API integration

Desktop App

  • Framework: Tauri 2.x
  • Frontend: Next.js (same as web)
  • Language: Rust (Tauri backend)
  • Cross-Platform: Windows, macOS, Linux

DevOps & Tools

  • Database Migrations: Prisma Migrate
  • Version Control: Git
  • Package Manager: npm
  • Development: Nodemon, TypeScript compiler

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     Client Layer                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Web App         β”‚  Desktop App     β”‚  Mobile (Future)     β”‚
β”‚  (Next.js)       β”‚  (Tauri)         β”‚                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    API Gateway Layer                        β”‚
β”‚               (Express REST API - Port 4000)                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β–Ό                 β–Ό                 β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Authentication β”‚ β”‚   Business   β”‚ β”‚   Integration    β”‚
β”‚   Services     β”‚ β”‚    Logic     β”‚ β”‚    Services      β”‚
β”‚                β”‚ β”‚              β”‚ β”‚                  β”‚
β”‚ β€’ JWT Auth     β”‚ β”‚ β€’ Orgs       β”‚ β”‚ β€’ AWS S3         β”‚
β”‚ β€’ Sessions     β”‚ β”‚ β€’ Bookings   β”‚ β”‚ β€’ Razorpay       β”‚
β”‚ β€’ Email        β”‚ β”‚ β€’ Resources  β”‚ β”‚ β€’ Bolna AI       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                 β”‚                 β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Data Access Layer                         β”‚
β”‚                   (Prisma ORM)                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Database Layer                            β”‚
β”‚                   (PostgreSQL)                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“Έ Screenshots

Landing Page

Landing Page

User Dashboard

User Dashboard

Organization Dashboard

Organization Dashboard

Appointment Creation

Appointment Creation

Booking Interface

Booking Interface

Available Slots

Available Slots

Notifications

Notifications

Payment Integration

Payment Integration

Session Management

Session Management

Desktop App

Desktop App


πŸš€ Getting Started

Prerequisites

Before you begin, ensure you have the following installed:

  • Node.js (v16 or higher) - Download
  • npm or yarn - Comes with Node.js
  • PostgreSQL (v12 or higher) - Download
  • Git - Download
  • (Optional) Rust - For Tauri desktop app - Install

Installation

1. Clone the Repository

git clone https://github.com/yourusername/odooxspit-appointment-app.git
cd odooxspit-appointment-app

2. Install Dependencies

Backend (API)

cd api
npm install

Frontend (Web App)

cd ../frontend
npm install

Desktop App (Tauri) - Optional

cd ../tauri
npm install

3. Set Up PostgreSQL Database

Start PostgreSQL and create a database:

# Using psql
psql -U postgres
CREATE DATABASE appointment_app;
\q

Or use pgAdmin, DBeaver, or any PostgreSQL GUI tool.

Environment Variables

Backend (.env)

Create a .env file in the api directory:

# Server Configuration
NODE_ENV=development
PORT=4000

# Database (PostgreSQL)
DATABASE_URL="postgresql://postgres:password@localhost:5432/appointment_app?schema=public"

# JWT Configuration
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
JWT_EXPIRES_IN=15m

# Refresh Token Configuration
REFRESH_TOKEN_EXPIRES_DAYS=30

# CORS Configuration
CORS_ORIGIN=http://localhost:3000

# SMTP Configuration (Gmail example)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-specific-password

# Email Configuration
FROM_EMAIL=your-email@gmail.com
FROM_NAME=BookNow Appointments

# Base URL (for email links)
BASE_URL=http://localhost:4000

# AWS S3 Configuration (for media uploads)
AWS_REGION=us-east-1
AWS_ACCESS_KEY_ID=your-aws-access-key-id
AWS_SECRET_ACCESS_KEY=your-aws-secret-access-key
AWS_S3_BUCKET=your-s3-bucket-name

# Razorpay Connect Configuration
RAZORPAY_CLIENT_ID=your-razorpay-partner-client-id
RAZORPAY_CLIENT_SECRET=your-razorpay-partner-client-secret
RAZORPAY_OAUTH_AUTHORIZE_URL=https://auth.razorpay.com/authorize
RAZORPAY_OAUTH_TOKEN_URL=https://auth.razorpay.com/token
RAZORPAY_API_BASE_URL=https://api.razorpay.com/v1
RAZORPAY_REDIRECT_URI=http://localhost:4000/auth/razorpay/callback
RAZORPAY_WEBHOOK_SECRET=your-razorpay-webhook-signing-secret
RAZORPAY_STATE_SECRET=change-this-state-secret

# Bolna AI Configuration (Optional)
BOLNA_API_BASE_URL=https://api.bolna.dev

Important Notes:

  • For Gmail SMTP, use an App Password
  • Replace all placeholder values with your actual credentials
  • Never commit .env to version control

Frontend (.env.local)

Create a .env.local file in the frontend directory:

NEXT_PUBLIC_API_URL=http://localhost:4000

Running the Application

1. Run Database Migrations

cd api
npx prisma migrate dev
npx prisma generate

2. Start the Backend Server

# Development mode with auto-reload
npm run dev

# Or production mode
npm start

The API will start at http://localhost:4000

3. Start the Frontend

In a new terminal:

cd frontend
npm run dev

The web app will start at http://localhost:3000

4. (Optional) Run Desktop App

In a new terminal:

cd tauri
npm run tauri dev

πŸŽ‰ You're All Set!


πŸ“‚ Project Structure

odooxspit-appointment-app/
β”‚
β”œβ”€β”€ api/                          # Backend API
β”‚   β”œβ”€β”€ prisma/
β”‚   β”‚   β”œβ”€β”€ schema.prisma         # Database schema
β”‚   β”‚   └── migrations/           # Database migrations
β”‚   β”‚
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ controllers/          # Route controllers
β”‚   β”‚   β”‚   β”œβ”€β”€ authController.js
β”‚   β”‚   β”‚   β”œβ”€β”€ bookingController.js
β”‚   β”‚   β”‚   β”œβ”€β”€ organizationController.js
β”‚   β”‚   β”‚   └── ...
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ routes/               # API routes
β”‚   β”‚   β”‚   β”œβ”€β”€ auth.js
β”‚   β”‚   β”‚   β”œβ”€β”€ booking.js
β”‚   β”‚   β”‚   β”œβ”€β”€ organization.js
β”‚   β”‚   β”‚   └── ...
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ middlewares/          # Custom middleware
β”‚   β”‚   β”‚   └── requireAuth.js
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ lib/                  # Utility libraries
β”‚   β”‚   β”‚   β”œβ”€β”€ auth.js
β”‚   β”‚   β”‚   β”œβ”€β”€ mailer.js
β”‚   β”‚   β”‚   β”œβ”€β”€ prisma.js
β”‚   β”‚   β”‚   β”œβ”€β”€ razorpay.js
β”‚   β”‚   β”‚   β”œβ”€β”€ bolnaClient.js
β”‚   β”‚   β”‚   └── s3.js
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ utils/                # Helper functions
β”‚   β”‚   β”‚   β”œβ”€β”€ crypto.js
β”‚   β”‚   β”‚   └── deviceParser.js
β”‚   β”‚   β”‚
β”‚   β”‚   └── server.js             # Express app entry point
β”‚   β”‚
β”‚   β”œβ”€β”€ .env                      # Environment variables
β”‚   β”œβ”€β”€ package.json
β”‚   └── README.md
β”‚
β”œβ”€β”€ frontend/                     # Next.js Web App
β”‚   β”œβ”€β”€ app/                      # App Router pages
β”‚   β”‚   β”œβ”€β”€ (auth)/               # Auth pages (login, register)
β”‚   β”‚   β”œβ”€β”€ (dashboard)/          # Dashboard pages
β”‚   β”‚   β”œβ”€β”€ appointment/          # Appointment pages
β”‚   β”‚   β”œβ”€β”€ org/                  # Organization pages
β”‚   β”‚   β”œβ”€β”€ search/               # Search page
β”‚   β”‚   β”œβ”€β”€ layout.tsx
β”‚   β”‚   └── page.tsx
β”‚   β”‚
β”‚   β”œβ”€β”€ components/               # React components
β”‚   β”‚   β”œβ”€β”€ auth/                 # Auth components
β”‚   β”‚   β”œβ”€β”€ booking/              # Booking components
β”‚   β”‚   β”œβ”€β”€ dashboard/            # Dashboard components
β”‚   β”‚   └── ui/                   # Reusable UI components
β”‚   β”‚
β”‚   β”œβ”€β”€ contexts/                 # React contexts
β”‚   β”‚   └── UserContext.tsx
β”‚   β”‚
β”‚   β”œβ”€β”€ hooks/                    # Custom React hooks
β”‚   β”‚   β”œβ”€β”€ use-auth.ts
β”‚   β”‚   └── use-mobile.ts
β”‚   β”‚
β”‚   β”œβ”€β”€ lib/                      # Utility libraries
β”‚   β”‚   β”œβ”€β”€ api.ts                # API client
β”‚   β”‚   β”œβ”€β”€ auth.ts               # Auth helpers
β”‚   β”‚   β”œβ”€β”€ routes.ts             # Route constants
β”‚   β”‚   └── types.ts              # TypeScript types
β”‚   β”‚
β”‚   β”œβ”€β”€ public/                   # Static assets
β”‚   β”œβ”€β”€ .env.local                # Environment variables
β”‚   β”œβ”€β”€ next.config.ts
β”‚   β”œβ”€β”€ package.json
β”‚   └── tsconfig.json
β”‚
β”œβ”€β”€ tauri/                        # Desktop App (same structure as frontend)
β”‚   β”œβ”€β”€ src-tauri/                # Tauri Rust backend
β”‚   β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”‚   └── main.rs
β”‚   β”‚   β”œβ”€β”€ Cargo.toml
β”‚   β”‚   └── tauri.conf.json
β”‚   β”‚
β”‚   └── [Same as frontend]
β”‚
β”œβ”€β”€ docs/                         # Documentation
β”‚   └── images/                   # Screenshots and images
β”‚
β”œβ”€β”€ .gitignore
β”œβ”€β”€ LICENSE
└── README.md                     # This file

πŸ“š API Documentation

Comprehensive API documentation is available in the api/README.md file.

Key Endpoints

Authentication

  • POST /auth/register - Register new user
  • POST /auth/login - User login
  • POST /auth/logout - User logout
  • POST /auth/refresh-token - Refresh access token
  • GET /auth/verify-email - Verify email
  • POST /auth/request-password-reset - Request password reset
  • POST /auth/reset-password - Reset password

User Management

  • GET /user/me - Get current user profile
  • PUT /user/update - Update user profile
  • DELETE /user/delete - Delete user account
  • POST /user/convert-to-organization - Convert USER to ORGANIZATION

Organization

  • POST /organization/members - Add member (admin only)
  • GET /organization/members - Get all members
  • POST /organization/resources - Create resource
  • GET /organization/resources - Get all resources
  • DELETE /organization/resources/:id - Delete resource

Appointments

  • POST /organization/appointments - Create appointment
  • GET /organization/appointments - Get all appointments
  • GET /organization/appointments/:id - Get single appointment
  • PUT /organization/appointments/:id - Update appointment
  • DELETE /organization/appointments/:id - Delete appointment

Bookings

  • POST /bookings - Create booking
  • GET /bookings - Get user bookings
  • GET /bookings/:id - Get booking details
  • PUT /bookings/:id/cancel - Cancel booking
  • GET /organization/bookings - Get organization bookings

Public (No Auth Required)

  • GET /public/organizations/:id/appointments - Browse public appointments
  • GET /public/appointments/:id/slots - Get available slots

For complete API documentation, see api/README.md.


πŸ–₯️ Desktop App (Tauri)

The desktop application provides the same functionality as the web app with additional benefits:

  • Native Performance: Faster than browser-based apps
  • Offline Capability: Work without internet (with limitations)
  • System Integration: Better OS integration
  • Privacy: No browser tracking
  • Cross-Platform: Windows, macOS, and Linux

Building Desktop App

cd tauri
npm run tauri build

Built apps will be in tauri/src-tauri/target/release/bundle/


πŸš€ Deployment

Backend (API)

Option 1: Traditional Hosting (VPS, AWS EC2)

  1. Set up PostgreSQL database
  2. Install Node.js
  3. Clone repository and install dependencies
  4. Set environment variables
  5. Run migrations
  6. Start with PM2: pm2 start src/server.js

Option 2: Platform as a Service

  • Railway: One-click deploy
  • Heroku: Buildpack support
  • Render: PostgreSQL included
  • DigitalOcean App Platform: Managed solution

Frontend (Web App)

Option 1: Vercel (Recommended)

cd frontend
vercel --prod

Option 2: Netlify

cd frontend
npm run build
netlify deploy --prod --dir=out

Option 3: Self-Hosted

cd frontend
npm run build
npm start

Desktop App

Build for your target platform:

cd tauri
npm run tauri build

Distribute the generated installers.


🀝 Contributing

We welcome contributions! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/AmazingFeature
  3. Commit changes: git commit -m 'Add some AmazingFeature'
  4. Push to branch: git push origin feature/AmazingFeature
  5. Open a Pull Request

Development Guidelines

  • Follow existing code style
  • Write meaningful commit messages
  • Add tests for new features
  • Update documentation as needed
  • Ensure all tests pass before submitting PR

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ‘¨β€πŸ’» Author

Your Name


πŸ™ Acknowledgments


πŸ“ž Support

If you encounter any issues or have questions:


πŸ—ΊοΈ Roadmap

  • Mobile app (React Native)
  • Video call integration
  • SMS notifications
  • Multi-language support
  • Advanced analytics dashboard
  • Calendar integrations (Google Calendar, Outlook)
  • Recurring appointments
  • Waiting list management
  • Custom branding per organization
  • API rate limiting per organization
  • Webhook support for third-party integrations

⭐ Star this repo if you find it helpful!

Made with ❀️ by [Your Name]

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •