A full-stack calendar application with user authentication, event management, and multiple view modes (daily, weekly, monthly). Built with React, Express.js, PostgreSQL, and TypeScript.
- ✅ User registration and login with secure authentication
- ✅ Personal calendar with event management
- ✅ Multiple calendar views (Day, Week, Month)
- ✅ Event creation with categories and color coding
- ✅ Responsive design for mobile and desktop
- ✅ Real-time updates with React Query
- Frontend: React 18, TypeScript, TailwindCSS, Shadcn/UI, React Query
- Backend: Express.js, TypeScript, Passport.js for authentication
- Database: PostgreSQL with Drizzle ORM
- Deployment: Vercel (frontend) + Fly.io (backend)
- Clone the repository
- Install dependencies:
npm install - Set up environment variables (see
.env.example) - Run database migrations:
npm run db:push - Start development server:
npm run dev
- Fork this repository
- Connect to Vercel
- Set environment variable:
VITE_API_URL=https://your-backend-app.fly.dev
- Deploy
- Install Fly CLI:
https://fly.io/docs/getting-started/installing-flyctl/ - Login:
fly auth login - Update
fly.tomlwith your app name - Set secrets:
fly secrets set DATABASE_URL=your_postgres_url fly secrets set SESSION_SECRET=your_session_secret fly secrets set FRONTEND_URL=https://your-app.vercel.app
- Deploy:
fly deploy
DATABASE_URL=postgresql://username:password@hostname:port/database
SESSION_SECRET=your-super-secret-session-key
NODE_ENV=production
FRONTEND_URL=https://your-app.vercel.app
VITE_API_URL=https://your-backend-app.fly.dev
id(Primary Key)username(Unique)email(Unique)password(Hashed)
id(Primary Key)userId(Foreign Key)titlestartTimeendTimelocation(Optional)type(meeting, personal, work, health, other)
POST /api/register- User registrationPOST /api/login- User loginPOST /api/logout- User logoutGET /api/user- Get current userGET /api/events- Get user events (with date filtering)POST /api/events- Create new eventPUT /api/events/:id- Update eventDELETE /api/events/:id- Delete event
The application uses:
- Session-based authentication with PostgreSQL store
- Secure password hashing with scrypt
- CORS configuration for production deployment
- Real-time data synchronization with React Query
- Mobile-responsive design with TailwindCSS
- The backend includes CORS configuration for production
- Frontend uses environment variables for API URL configuration
- Database migrations are handled by Drizzle Kit
- Session store uses PostgreSQL for persistence