A modern TypeScript React web application for intelligent team scheduling. The Novara Auto-Scheduler helps teams coordinate meetings, social events, and recurring activities by analyzing member availability and automatically generating optimal schedules.
- Automatic conflict resolution based on team availability
- Support for recurring events with RRULE patterns
- Priority-based scheduling algorithm
- Real-time schedule updates with 400ms debouncing
- Support for up to 6 team members
- Timezone-aware scheduling
- Email validation and contact management
- Home and office location tracking
- Interactive weekly availability grid (07:00-22:00)
- Click-and-drag time slot selection
- Copy/paste schedules between days
- 30-minute time slot granularity
- Preset templates: Date nights, one-on-ones, friend hangouts, exercise
- Custom goal creation with flexible parameters
- Recurrence pattern support (weekly, biweekly, custom)
- Location preferences and hints
- Cozy: Warm, intimate event descriptions
- Hype: High-energy, exciting language
- Professional: Clean, business-focused tone
- Mobile-first responsive design
- Smooth animations with Framer Motion
- Real-time toast notifications
- Accessibility features (ARIA, keyboard navigation)
- Download schedules as .ics calendar files
- One-click booking to member calendars
- Bulk event management
- Individual event shuffling
- React 18 with TypeScript
- Vite for fast development and building
- Tailwind CSS for styling
- shadcn/ui component library
- Zustand for state management
- date-fns and rrule for date/time handling
- Framer Motion for animations
- Lucide React for icons
- Node.js 18+ or Bun
- Modern web browser
-
Clone and install dependencies
git clone <repository-url> cd novara-scheduler bun install
-
Set up environment variables (optional)
cp .env.example .env # Edit .env to add your backend API URL -
Start the development server
bun dev
-
Open your browser Navigate to
http://localhost:5173
The app works offline with mock data by default. To connect to a real backend:
# .env
VITE_API_BASE=https://your-api-server.comWhen VITE_API_BASE is not set, the app uses a built-in mock API that:
- Generates deterministic fake time slots
- Creates vibe-aware event titles and descriptions
- Simulates network delays for realistic testing
When connected to a backend, the app expects these endpoints:
Generate schedule from team data
{
"members": Member[],
"availability": AvailabilityWindow[],
"goals": Goal[],
"vibe": "cozy" | "hype" | "professional"
}Book the generated events
{
"plans": PlannedEvent[]
}src/
βββ components/ # React components
β βββ MemberForm.tsx # Team member management
β βββ AvailabilityGrid.tsx # Weekly availability editor
β βββ GoalBuilder.tsx # Goal creation and presets
β βββ VibePicker.tsx # Event tone selector
β βββ ControlBar.tsx # Action buttons
β βββ ScheduleBoard.tsx # Event display and management
β βββ SampleDataButton.tsx # Demo data loader
βββ lib/ # Utility libraries
β βββ api.ts # API service with mock/real modes
β βββ ics.ts # Calendar file export
β βββ time.ts # Date/time utilities
βββ store/ # State management
β βββ useNovara.ts # Zustand store
βββ App.tsx # Main application component
- Click "Add Member" to create team profiles
- Enter names, emails, and timezones
- Optionally add home and office addresses
- Select a member from the dropdown
- Click and drag on the weekly grid to mark available times
- Use copy/paste buttons to duplicate schedules across days
- Choose from preset templates or create custom goals
- Select participants, duration, and recurrence patterns
- Set priority levels (1-5) for scheduling conflicts
- Pick the tone for automatically generated event descriptions
- Options: Cozy, Hype, or Professional
- The app automatically plans events based on your configuration
- Use "Shuffle" to try different time slots
- Select events and use bulk actions
- Download .ics files for calendar import
- Book events directly to member calendars
- Share schedules with your team
Click "Load Sample Data" to populate the app with:
- 6 diverse team members with realistic availability
- Common scheduling goals (date nights, one-on-ones, exercise)
- Varied availability patterns for testing
bun testbun buildbun lint- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
- Mobile browsers with modern JavaScript support
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License.
For questions or issues, please:
- Check the documentation above
- Search existing GitHub issues
- Create a new issue with detailed reproduction steps
Built with β€οΈ for teams who value their time together.