Public join page tells applicants when your next term isn't open yet
If a co-op has no term currently open for registration, the public join page now shows a short notice above the form saying so. The form itself keeps working exactly as before, so a co-op can still build a waitlist for its next term between sessions; the banner is purely informational.
Events can now have a registration-opens date, not just a deadline
Events already had a signup deadline. They can now also have a "Registration opens" date and time, set independently, right alongside it in the admin event form. Along the way we closed a real gap: the free-RSVP signup routes (both web and mobile) weren't checking the deadline at all, only the paid-checkout route was, so a family could sign up for a free event after its deadline had passed. All three signup paths now enforce both dates.
Roll Call: check in parents and guardians too, separate from their kids
Roll Call previously tracked only students. Each family's parent(s)/guardian(s) now get their own check-in row, tagged Parent, that's completely independent of their children's rows: checking a parent in or out never touches their kids' attendance, and vice versa, since a parent can be out sick while their kids still attend. "Check in all" covers the whole family including parents, and a Show parents toggle on the Roll Call toolbar lets a co-op hide parent rows entirely if it doesn't want them.
Roll Call check-ins now feed class attendance automatically
Checking a student in, or marking them absent or excused, in Roll Call now mirrors that status into the attendance record for every class they're actively enrolled in that meets that day. A teacher's own manual attendance entry always wins and can't be silently overwritten by a later Roll Call change, and checking a student out of Roll Call doesn't retroactively change their class attendance.
Emergency Roster: parent contact info, and a filter to view one day at a time
Each student on the Emergency Roster (on-screen, print, and CSV) now lists their family's parent name and phone number, so staff don't need a separate family list handy during a fire drill or evacuation. The on-screen page can also now be filtered to a single day, useful for a term running most weekdays, while the print view and CSV export stay complete regardless of the filter, since those are meant as the full reference copy.
Exempt teacher families from the per-term join fee
A new checkbox in the term editor (Admin > Terms) waives that term's join fee for any family with a member who's an active teacher at your co-op. Off by default, and carried forward automatically when you clone a term.
Opt-in sibling discount for class fees
Admin > Settings now has an option to discount class fees for siblings. Once turned on, the first student a family enrolls in a paid class each term pays full price, and every other student in that family gets a percentage off (50% by default, adjustable) on their own classes. Off by default. Refunds for a dropped or waitlisted seat now use the exact amount that seat was actually charged, so a checkout mixing a full-price and a discounted seat still refunds correctly.
Stay signed in for weeks, not just while you're actively clicking around
The "you've been idle" warning used to appear after 30 minutes, and its Extend session button didn't actually extend anything: clicking it reset the on-screen countdown but never refreshed the underlying session. Extend session now genuinely refreshes it, and the idle timeout itself is now 24 hours. Separately, the cookie that keeps you signed in across visits now has a 30-day floor everywhere it's written, so closing the browser and coming back weeks later should still find you signed in.
App Store and Google Play badges added to the site footer
The site footer now shows a linked Google Play badge and a dimmed "Coming soon" App Store badge (the iOS app isn't published yet, so it's unlinked for now). Both images are hosted on our own servers rather than loaded from Google's and Apple's, since a number of school, library, and church networks run content filters that block Google's badge domain outright, which was making the Google Play badge silently disappear with nothing visibly broken. A few rounds of sizing and corner-radius adjustments also brought the two badges into visual alignment with each other.
Waivers are now versioned, so editing one's wording can require a fresh signature
Every waiver edit is now compared against what each family actually signed. If a waiver's text changes, families who signed the earlier wording are automatically flagged to re-sign it the next time they go through term-start review, no separate action needed. This runs independently of the "Require re-sign" button added on July 21, which still exists for forcing a re-sign without changing the wording at all.
New Delinquency report, and an option to require every waiver re-signed each term
Admin > Reports has a new Delinquency report, scoped to the term currently open for registration: who has a pending join-fee charge but hasn't paid it (Owes), versus who hasn't engaged with the new term at all yet (Lapsed). Separately, a new toggle in the Waivers panel can require every active waiver to be re-signed each term even when its wording hasn't changed, off by default since the automatic re-sign-on-edit above already covers the common case.
Applications now stay locked to the term you applied under
An application used to get whatever term counted as "currently open" at the moment an admin approved it, not the moment the family submitted it. If approval sat pending while terms changed underneath it, a family could end up registered and charged for a term they never actually applied for. Applications now lock in their term at submission, and approval honors that.
A same-day bug could silently drop a waiver signature during term review
A database change earlier the same day briefly broke saving a family's waiver signature during term-start review: the review page reported success and cleared the family's pending-review flag, but the signature itself was never written. It was caught and fixed within hours. Anyone caught in that window will be asked to sign again the next time they go through review.
Importing a roster before opening your first term no longer marks everyone as already registered
Co-ops that imported their family roster before ever opening a term had every imported family's "joined for" term silently set to that not-yet-open term. The moment the term was later opened, those families were treated as already reviewed and registered, skipping the term-start review, the join fee, and any waiver signatures entirely. Fixed, and already-imported families were corrected to no longer be wrongly exempt.
Imported families' sign-in links were silently going nowhere
A family imported from another system, entering their email on the join page to get a sign-in link, could see "check your email" and never actually receive one, with no error and no way to tell the difference from it working correctly. A second bug meant that even a family who did get the link and signed in could land on an unrelated setup screen instead of their own account. Both are fixed: imported families now reliably get their sign-in email, and clicking it correctly links them to their family, students, and pending term review.
Attendance save no longer shows a false "Save failed" error
Marking attendance on a class's Attendance tab could show a red "Save failed" message even though the record had already saved correctly. A leftover redirect in the save endpoint was confusing the browser into treating a successful save as an error. The save now returns directly, and the false error is gone.
iOS Safari: family and child edit forms could stop responding after using a picker
On iOS Safari, opening the family or child edit form, picking a birthday or a photo, and tapping Save could silently do nothing. iOS Safari's native pickers can shift the page under a modal that's using a weaker scroll lock, desyncing where your next tap actually lands. Switched to the standard iOS-safe scroll lock, and added a confirmation toast to photo uploads so a successful save is never silent.
Household members now show a profile picture, not just initials
A spouse or other adult listed under Profile > Household members now shows their actual photo (from OAuth sign-in) in a circle, matching how student cards and the account menu already display photos, falling back to colored initials when there's no photo on file.