BookMe is a robust, self-hosted scheduling platform designed to replace proprietary bookMeing services. It offers a complete infrastructure for managing appointments, availability, and client communications without relying on third-party SaaS providers. Built with a focus on data sovereignty, performance, and aesthetic minimalism, BookMe provides a white-label solution that adapts instantly to the user's brand identity.
In the current digital landscape, professionals face several critical issues with existing scheduling tools:
- Vendor Lock-in and Costs: Most scheduling platforms operate on a subscription model. Essential features like removing branding, automated reminders, and custom email workflows are often locked behind expensive payment tiers.
- Data Privacy Concerns: Third-party services retain sensitive client data, meeting notes, and email lists. Users have little control over how this data is stored or processed.
- Lack of Brand Ownership: Standard tools force their own branding upon the user (e.g., "Powered by X"), diluting the professional's personal brand presence.
- Rigid Customization: Modifying the scheduling flow or UI to match specific business requirements is often impossible in closed-source proprietary systems.
BookMe addresses these challenges by providing a 100% open-source, deployable architecture that solves the scheduling problem at the infrastructure level.
- Zero Cost & Sustainability: Designed to run on free tiers of modern cloud providers (like Vercel and MongoDB Atlas), eliminating recurring subscription costs entirely.
- Total Data Sovereignty: The user owns the database. All client information, appointment details, and logs remain in the user's private control.
- One-Variable Branding: The system utilizes a novel configuration approach where a single environment variable (
ADMIN_NAME) propagates across the entire stack. This automatically brands the User Interface, SEO metadata, and email signatures, providing an instant white-label experience. - Modern Technical Foundation: Built on the latest web standards (React 19, Node.js), ensuring high performance, accessibility, and ease of modification for developers.
The application is architected as a decoupled client-server system, ensuring scalability and separation of concerns.
The user interface is constructed using React 19 and TypeScript, leveraging Vite for optimized build performance.
- State Management: Redux Toolkit manages complex application states, including bookMeing flows and availability slots.
- Styling: Tailwind CSS combined with ShadcnUI provides a design system that is responsive, accessible, and theme-consistent.
- Routing: React Router manages navigation between public bookMeing views and the secure administrative dashboard.
The API layer is built with Node.js and Express, adhering to RESTful principles.
- Database: MongoDB (via Mongoose) stores unstructured data for availability rules, bookMeing records, and user credentials.
- Security: Authentication is handled via JSON Web Tokens (JWT). Critical operations employ One-Time Passwords (OTP) for enhanced security.
- Scheduling Logic: A dedicated service handles timezone conversions using
date-fns-tz, ensuring accurate slot calculations across global timezones. - Communications: Nodemailer facilitates transactional emails, wrapping content in responsive HTML templates.
Correct configuration of environment variables is essential for the application's operation. These variables control authentication, database connections, and external integrations.
| Variable | Required | Description |
|---|---|---|
ADMIN_NAME |
Yes | The display name for the brand (e.g., "Dr. Smith"). This value is interpolated globally. |
ADMIN_EMAIL |
Yes | The email address used for administrative login. |
ADMIN_PASSWORD |
Yes | The strict password for the admin account. |
ADMIN_TIMEZONE |
Yes | The IANA timezone identifier for availability calculations (e.g., America/New_York, Asia/Kathmandu). |
ADMIN_URL |
Yes | The public URL of the deployed application (used in email footers). |
MONGO_URI |
Yes | The connection string for the MongoDB instance. |
JWT_SECRET |
Yes | A cryptographically strong string used to sign session tokens. |
EMAIL_SERVICE |
No | The email service provider (default: gmail). |
EMAIL_USER |
Yes | The email address used to send outgoing notifications. |
EMAIL_PASS |
Yes | The application-specific password for the email account. |
MEET_LINK |
Yes | The static link for video conferencing (e.g., Google Meet or Zoom URL). |
PORT |
No | The port on which the server listens (default: 5000). |
| Variable | Required | Description |
|---|---|---|
VITE_API_URL |
Yes | The absolute URL of the backend API (e.g., https://your-api.vercel.app/api). |
VITE_ADMIN_NAME |
Yes | Must match ADMIN_NAME for client-side SEO and display consistency. |
To maintain the integrity of the ecosystem and ensure users can manage their own updates, we support a specific deployment workflow.
- A GitHub account.
- A Vercel account (or any Node.js hosting provider).
- A MongoDB Atlas cluster (free tier).
Do not clone the repository directly to deployment services. Instead, navigate to the GitHub repository page and click Fork. This creates a copy under your personal namespace, giving you write access and control over your deployment source.
Before deploying, ensure you have all the values listed in the Environment Configuration section prepared.
- Connect your forked repository to your hosting provider.
- Input the environment variables during the setup process.
- Deploy. The build script
npm run setuphandles the installation of dependencies for both client and server subsystems.
You can contact me at prashantadhikari7.com.np.
Or
Book a meeting with me at BookMe.
We welcome contributions from the developer community to enhance the stability and feature set of BookMe.
- Fork the Project: Create your own copy of the repository.
- Create a Feature Branch: Work on your feature in a dedicated branch (
git checkout -b feature/AmazingFeature). - Commit Changes: Ensure your code is clean, commented, and follows the existing style patterns (
git commit -m 'Add some AmazingFeature'). - Push to Branch: Push your changes to your fork (
git push origin feature/AmazingFeature). - Open a Pull Request: Submit your changes for review against the
mainbranch.
Please ensure that any new features include appropriate error handling and do not introduce security vulnerabilities.
This project was made possible by the incredible open-source ecosystem. Special thanks to the creators and maintainers of:
- React - For the powerful UI library.
- Vite - For the next-generation frontend tooling.
- Tailwind CSS - For the utility-first CSS framework.
- ShadcnUI - For the beautiful, accessible component primitives.
- Express & Node.js - For the robust server-side runtime.
- MongoDB - For the flexible document-based database.
- Nodemailer - For the reliable email sending service.
- Vercel - For the seamless deployment platforms.
Prashant Adhikari
- Website: prashantadhikari7.com.np
- GitHub: @pr4shxnt
This project is distributed under the MIT License. This ensures that the software remains free and open-source, allowing users to modify, distribute, and use it for private or commercial purposes without restriction.
Developed by Prashant Adhikari
