SchoolSoft+
GitHub releases

Release notes

What’s new

Every change, improvement, and fix to SchoolSoft+. The latest version is always at the top.

A major social upgrade: 1-to-1 voice calls land in early beta, built entirely with WebRTC — no third-party app required. A new global notification center surfaces in-app toasts and a history bell everywhere in the dashboard. Unread message state is now backed by Firestore so switching devices or browsers gives you the correct dots immediately.

Voice Calls (Early Beta)

  • 1-to-1 voice calls directly in any DM — click the phone icon in the chat header to ring someoneFeature
  • Built on WebRTC (RTCPeerConnection) with Google STUN servers — audio travels peer-to-peer, never through our serversFeature
  • Firebase Firestore used for signaling (SDP offer/answer + ICE candidates) — no separate signaling server neededFeature
  • Incoming call notifications appear on every page — accept or decline without leaving what you're doingFeature
  • Floating global call panel — stays visible and usable while you navigate anywhere in the appFeature
  • Mute toggle with live mute indicator in the call UIFeature
  • Calls auto-clean up from Firestore on hang-up or decline — no lingering signaling dataImprovement
  • 45-second ring timeout with automatic cleanup if neither party answersImprovement
  • Call documents have a server-side TTL (expireAt) as a safety net for orphaned call recordsImprovement
  • Requires HTTPS or localhost (browser WebRTC security requirement)Feature
  • Early beta — bugs are expected. Please report any issues via the Feedback pageFeature

Global Notification Center

  • New notification bell in the dashboard header (both desktop and mobile) — shows unread count badgeFeature
  • Toast stack appears top-right for transient notifications — success, error, info, warning, and message typesFeature
  • Bell dropdown shows full notification history with timestamps and per-item dismissFeature
  • Mark-all-read and clear-all actions in the bell panelFeature
  • Incoming message toasts fire automatically on every page, not just the messages pageImprovement
  • Toast auto-dismiss: info/success/warning after 4 s, errors persist until manually dismissedImprovement
  • Native browser Notification fired when a new message arrives and the tab is in the backgroundImprovement

Cross-Device Unread Sync

  • Unread message state is now stored in Firestore (lastReadAt map per conversation) — no longer local to the deviceImprovement
  • Opening a conversation on one device marks it as read on all your devices instantly via Firestore realtimeImprovement
  • Optimistic local update clears the unread dot immediately on the current device — no waiting for the round-tripImprovement
  • Removed all localStorage-based unread tracking — previously switching browsers or devices would show stale dotsFix
  • Unread counting now happens in a global provider so the sidebar badge stays accurate on every pageImprovement

Bug Fixes & Polish

  • Fixed mark-as-read API returning 400 for DM conversations (was incorrectly gated behind a group-only check)Fix
  • Fixed notification toasts appearing at the bottom-left — now consistently shown top-right near the bellFix
  • Fixed pfpCache reference-before-initialization error on the messages pageFix
  • Fixed Firestore permission-denied on voice call list queries — switched to a safe list rule that doesn't access resource.dataFix
  • Mobile chat header is now always sticky so call and action buttons remain visible while scrollingFix
  • Encrypted messages now correctly show decrypted content in pinned messages panel, reply quotes, copy buttons, and edit prefillFix
View release on GitHub

Want to see what’s coming?

Check open issues and pull requests on GitHub.

GitHub