Hey, you probably want to sync up your data with another app! Enter your GitHub Gist token below to sync -- if you've already used this app somewhere else, this pulls your classes, schedule, notes, and reminders right over.
Mode
Color
Motion
Pick a built-in palette here, or create your own below -- every palette is a 3-color gradient used across accents, glows, and highlights throughout the app.
Hover a custom theme's swatch to delete it.
Name it, pick 3 colors for its gradient, then create -- it's applied immediately and saved to Your Custom Themes above.
Click days to assign A/B rotation, mark a range no-school, or tag a Short/Assembly day -- across any month, past or future.
Which lunch wave A Days and B Days each use -- controls which 3rd/7th period + Lunch time applies on multi-wave schedules (Regular, Assembly).
Short Day and Assembly Day are built in; add your own for any other bell-schedule variant your school uses. Edit a type to set its period times (Lunch included).
Add a period beyond the regular 1st-8th/Lunch/Advisory/Assembly set -- for a special block a particular day needs (a club period, an assembly rehearsal, a makeup exam slot, etc). Once added it shows up in every class's period picker and in each schedule type's time editor, same as any built-in period.
Enter dates in M.D.YYYY format, separated by commas (e.g., 8.18.2025, 8.20.2025). Prefer the Class Schedule Editor above for everyday use -- this is a bulk import/export shortcut.
Enter dates in M.D.YYYY format, separated by commas (e.g., 8.19.2025, 8.21.2025).
Dates listed here have their A/B assignment removed (back to no-school) on Save. A weekday not listed anywhere is already no-school by default -- this box is only needed to explicitly clear an existing assignment via text.
Click a weekday to assign it the next A/B rotation, or click again to clear it back to no-school. Drag or shift-click a range to assign that whole range, alternating A/B in date order. Select a range and use the toolbar to mark it No School or tag it with a special schedule.
Pick which periods run under this schedule type -- only checked ones get a time card below. Set each one's start/end time in 24-hour format.
The categories used for calendar dots, filter chips, the legend, and reminder/countdown tags. Assignment can't be deleted (it's tied to Canvas/CVA), but its color, icon, and label are still yours to change.
Decides which category a calendar event (not an assignment) gets. Checked top to bottom -- the first matching rule wins. An event that matches nothing falls back to that feed's default category, set below in External Calendars.
Read-only .ics feeds (sports schedules, school district calendars, etc.) shown alongside your notes. Fetched directly from the browser; if a feed blocks that, a public CORS-proxy is used as a fallback.
Pick a category below, or search above for a specific setting.
Click a shortcut's key to rebind it -- then press the new key combination. Shortcuts only fire when you're not typing in a field and no other dialog is open.
Everything for getting data onto, out of, or between devices -- Google Calendar publishing and app backup/restore both ride on the same GitHub Gist token, so they live together here.
Publishes a live .ics feed via a secret GitHub Gist, which Google Calendar can subscribe to. The gist URL is unauthenticated once created — anyone with the link can read it, so keep it as private as the token below.
If your calendar app stops picking up new changes, use Reset Sync — it deletes the old feed and creates a fresh one. You'll need to re-subscribe with the new URL afterward; the old link stops working.
Export everything in this app -- classes, schedule dates, notes, calendar feeds, and preferences -- as one file, and re-import it later on this or another device. The export includes your GitHub sync token if you've set one up, so keep the file as private as you would a password.
Pushes everything this app stores -- classes, schedule dates, notes, reminders, calendar feeds, Home layout/widgets/presets, preferences -- into the same private Gist as a second file, so you can pull it down on another device with the same token above. Auto-syncs a few seconds after any change once a token is set. Not live/two-way: on a second device, whichever side synced most recently wins, so restore right after switching devices instead of editing both at once.
For schools like Skyward with no API access: install the companion browser extension (in this app's portal-sync-extension folder), browse to your Skyward assignments page while logged in, then export the JSON from the extension's popup and import it here. Assignments with a date the app can understand are folded into Due Soon; the rest still show below so you can check them manually.
Test the app as if it were a different date/time -- class schedules, countdowns, and "no school today" logic all use this instead of your real system clock while it's active. It keeps ticking forward in real time from whatever moment you pick, so clocks and countdowns still move. Nothing here is sent anywhere; it only affects this browser tab.
Password-protected. Commits your current classes, schedule, theme, reminders, and calendar feeds straight to GitHub as the new defaults every fresh install of this app starts from. This edits the live source file directly and can't be undone from here.
Every action below is destructive and cannot be undone -- grouped together here on purpose, away from everyday settings.
Replay the guided walkthrough of the app's main screens and widgets.
Every user-changeable item in the app, grouped by where you find it. Click a section to expand it.
(click anywhere to continue)