Web Interface Guide¶
The Night Routine Scheduler web interface provides an intuitive way to manage your night routine schedule, view statistics, and control synchronization.
Home Page¶
The home page (/) is your main dashboard for managing night routine assignments.
Authentication Status¶
At the top of the page, you'll see your connection status:
Visual Monthly Calendar¶
The centerpiece of the home page is a visual calendar showing the current month's assignments.
Color Coding¶
- Blue background - Parent A is assigned
- Orange background - Parent B is assigned
- Yellow border - Today's date
- Gray background - Days from previous/next month (padding)
Assignment Details¶
Hover over any date to see:
- Parent name
- Decision reason (why this parent was assigned)
- Date
Tap on any date to toggle the decision reason display. Tap again to hide.
Decision Reasons¶
Each assignment includes a reason explaining why that parent was chosen:
| Reason | Meaning |
|---|---|
| Unavailability | The other parent was unavailable on this day |
| Total Count | This parent has fewer total assignments |
| Recent Count | This parent has had fewer recent assignments |
| Consecutive Limit | Prevents too many consecutive assignments |
| Alternating | Maintains an alternating pattern |
| Override | Manually changed via Google Calendar |
Quick Actions¶
The home page provides several action buttons:
Connect Google Calendar¶
When: Not yet authenticated
Action: Initiates the OAuth flow to connect your Google account
Result: Redirects to Google login, then to calendar selection after authorization
Change Calendar¶
When: Already authenticated
Action: Allows you to switch to a different Google Calendar
Result: Opens calendar selection page
Sync Now¶
When: Authenticated and calendar selected
Action: Manually triggers a schedule synchronization
Result:
- Calculates new assignments based on current fairness state
- Updates Google Calendar events
- Refreshes the web interface
Use cases:
- After changing configuration
- To fill in newly available dates
- After manually modifying events in Google Calendar
View Statistics¶
When: Authenticated
Action: Opens the statistics page
Result: Shows monthly assignment counts for the last 12 months
Calendar Navigation¶
Use the Previous and Next buttons to navigate between months:
- ← Previous - View the previous month
- Next → - View the next month
The current month and year are displayed in the center.
Calendar Selection Page¶
The calendar selection page (/calendars) appears after initial authentication or when you click "Change Calendar".
Calendar List¶
All calendars from your Google account are displayed:
- Primary Calendar - Your main Google Calendar
- Secondary Calendars - Other calendars you own or have write access to
- Shared Calendars - Calendars shared with you (if you have write access)
Selecting a Calendar¶
- Click on the calendar you want to use
- The application will:
- Save your selection to the database
- Set up webhook notifications for this calendar
- Create initial night routine events
- Redirect you to the home page
Changing Calendars¶
To switch to a different calendar:
- From the home page, click "Change Calendar"
- Select a new calendar from the list
- The application will:
- Delete all existing night routine events from the old calendar
- Create new events in the new calendar
- Update webhook subscriptions
Calendar Switch Impact
Switching calendars will remove all night routine events from the previous calendar. This action cannot be undone.
Statistics Page¶
The statistics page (/statistics) provides a historical view of assignment distribution.
Monthly Breakdown¶
Displays a table showing:
| Month | Parent A | Parent B | Total |
|---|---|---|---|
| Jan 2024 | 15 | 16 | 31 |
| Feb 2024 | 14 | 14 | 28 |
| ... | ... | ... | ... |
Features¶
- Last 12 months - Shows up to 12 months of historical data
- Only assigned months - Months without assignments are hidden
- Fair distribution verification - Quickly see if assignments are balanced
- Total counts - Sum of assignments per month
Interpreting Statistics¶
Balanced distribution:
✅ Difference of 1 is normal for odd-day monthsImbalanced distribution:
⚠️ Large difference may indicate:- One parent has more unavailable days
- Manual overrides have skewed the distribution
- Configuration issues
API Endpoints¶
While you typically interact through the web interface, the application also exposes API endpoints.
Authentication Endpoints¶
GET /auth¶
Initiates Google OAuth2 flow.
Usage: Automatically called when clicking "Connect Google Calendar"
Response: Redirects to Google OAuth consent screen
GET /oauth/callback¶
OAuth2 callback handler.
Usage: Automatic redirect from Google after authentication
Response: Redirects to calendar selection page
Calendar Management¶
GET /calendars¶
Lists available Google Calendars and allows selection.
Response: HTML page with calendar list
POST /calendars/select¶
Selects a calendar to use for night routine events.
Parameters:
calendar_id- The Google Calendar ID
Response: Redirects to home page
Synchronization¶
POST /sync¶
Manually triggers schedule synchronization.
Usage: Called when clicking "Sync Now" button
Response: Redirects back to home page
Webhooks¶
POST /api/webhook/calendar¶
Receives Google Calendar change notifications.
Usage: Called automatically by Google Calendar when events change
Authentication: Validates Google webhook signature
Response: 200 OK on success
Responsive Design¶
The web interface is fully responsive and optimized for different screen sizes.
Desktop (1024px+)¶
- Full calendar grid layout
- Hover tooltips for assignment details
- Side-by-side action buttons
- Wide statistics table
Tablet (768px - 1023px)¶
- Adjusted calendar grid
- Tap-to-toggle assignment details
- Stacked action buttons
- Scrollable statistics table
Mobile (<768px)¶
- Compact calendar layout
- Touch-optimized controls
- Tap to show/hide decision reasons
- Full-width buttons
- Simplified navigation
Browser Compatibility¶
The web interface supports modern browsers:
- ✅ Chrome 90+
- ✅ Firefox 88+
- ✅ Safari 14+
- ✅ Edge 90+
Internet Explorer
Internet Explorer is not supported. Please use a modern browser.
Keyboard Shortcuts¶
The interface supports basic keyboard navigation:
| Shortcut | Action |
|---|---|
Tab |
Navigate between interactive elements |
Enter |
Activate buttons/links |
← / → |
Navigate calendar months (when focused) |
Accessibility¶
The interface includes accessibility features:
- Semantic HTML - Proper heading structure and landmarks
- ARIA labels - Screen reader friendly
- Keyboard navigation - All functions accessible without mouse
- Color contrast - WCAG AA compliant
- Focus indicators - Visible focus states
Troubleshooting¶
Calendar Not Updating¶
Problem: Changes don't appear after clicking "Sync Now"
Solutions:
- Check browser console for errors (F12)
- Hard refresh the page (Ctrl+F5 or Cmd+Shift+R)
- Clear browser cache
- Check application logs for errors
Assignment Details Not Showing (Mobile)¶
Problem: Tapping dates doesn't show decision reasons
Solutions:
- Ensure JavaScript is enabled
- Try tapping directly on the date number
- Refresh the page
- Check browser compatibility
Webhook Notifications Not Working¶
Problem: Manual changes in Google Calendar don't reflect immediately
Solutions:
- Check application logs for webhook errors
- Verify
public_urlis accessible from the internet - Test by manually clicking "Sync Now"
- Webhook may need to be renewed (happens automatically)
Page Layout Issues¶
Problem: Calendar layout is broken or overlapping
Solutions:
- Clear browser cache
- Disable browser extensions
- Try a different browser
- Check browser console for CSS errors
Best Practices¶
Regular Checks¶
- Review the calendar weekly to ensure proper scheduling
- Check statistics monthly to verify fair distribution
- Sync manually after configuration changes
Calendar Hygiene¶
- Don't manually delete night routine events in Google Calendar (change the parent instead)
- Use the web interface for changing calendars
- Let automatic sync handle routine updates
Performance¶
- Minimize frequent manual syncs (let automatic updates handle it)
- Use statistics page sparingly (it processes historical data)
- Clear old browser data periodically