This project is a full-stack scheduling application inspired by Calendly. It allows users to set their availability, create event types, and allows others to book meetings with them.
- Framework: Next.js 16 (App Router)
- UI library: React 19
- Styling: Tailwind CSS (v4)
- State Management / Data Fetching: React Query (
@tanstack/react-query) - Date Manipulation:
date-fns - Notifications:
react-hot-toast - Language: TypeScript
- Framework: Express.js
- Runtime: Node.js
- Database ORM: Prisma
- Validation: Zod
- Date Manipulation:
date-fns,date-fns-tz - Language: TypeScript
- Node.js (v20+ recommended)
- Optional: PostgreSQL or a SQLite database file setup depending on your Prisma provider
Navigate to the backend directory:
cd backendInstall dependencies:
npm installSet up environment variables:
Create a .env file in the backend/ directory using your database URL. For example (if using SQLite):
DATABASE_URL="file:./dev.db"
PORT=3001Run database migrations to generate the schema and the Prisma client:
npm run prisma:migrate
npm run prisma:generateStart the backend development server:
npm run devThe backend should now be running on http://localhost:3001.
In a new terminal, navigate to the frontend directory:
cd FrontendInstall dependencies:
npm installStart the frontend development server:
npm run devThe frontend should now be running on http://localhost:3000.
- Authentication: Given that authentication can be complex to setup perfectly for a quick local test, the system either uses simplified / mock authentication flows (like a basic global user context middleware or simulated user login) or requires an external provider not fully configured here.
- Database: Built using Prisma, meaning it's highly portable across different relational databases (PostgreSQL, MySQL, SQLite) by altering
schema.prismaand providing a compatibleDATABASE_URL. - Timezones: Users are assumed to book meetings across multiple timezones. The backend standardizes timezone handling and storage (likely in UTC), converting on the frontend utilizing
date-fnsanddate-fns-tz.