Skip to content

Changelog

Notable changes to Schoolers, newest first. Written for people, so it records what changed and why it mattered, not every commit.

Entries are grouped by the day the work shipped. Changes that are only internal, such as formatting or file cleanup, are left out unless they affect how someone works on the project.

Unreleased

Added

  • This documentation site.

Known gaps

Carried here so they stay visible rather than being forgotten:

  • No backups of the application database. See Backups.
  • No local development environment. Contributors currently work against production data. See Running it locally.
  • No automated tests and no continuous integration.
  • No .env.example, so required environment variables are undiscoverable without asking.
  • The post-images storage bucket and its migration are not yet applied to production.

2026-09-16

Fixed

  • "Back to directory" no longer loses your place. The control was a forward link, which creates a new history entry with no saved scroll position, so it always returned to the top of the list. The browser's own back button was unaffected, which is what made the cause hard to see. It now performs a real history back when there is history to go back to.
  • Alumni identifiers stay consistent with batch years. Three linked defects: the identifier was locked even when a member corrected their graduating year, the allocator searched for the next free number using the wrong column and so could not see rows whose year had drifted, and the unique constraint had been dropped earlier to suppress the resulting error. The allocator now matches on the identifier itself, identifiers are regenerated when the batch year changes, existing mismatched rows were repaired, and uniqueness was restored.

2026-09-15

Added

  • Images and call-to-action buttons on feed posts. Images are resized in the browser before upload, because the server has no image transformation capacity to spare. Link targets are restricted to http and https.
  • An Owner, Admin, Editor role hierarchy, with an interface for managing roles and an audit log of every change. Replaces a single admin flag. See decision 4.
  • A real production server and a multi-stage Docker build. Production had been running a development preview server. The image also dropped from about 2 GB to 648 MB. See decision 3.
  • A container health check, so a failed deployment no longer replaces a working one.

Changed

  • Username format is validated as you type rather than only on save.

2026-09-14

Added

  • A community feed at /feed, showing announcements as a stream.
  • A post announcement type. The event date field now appears only for types that are actually events.

Changed

  • Member cards redesigned, with a banner and an overlapping photo, four to a row on large screens.
  • Default avatar silhouettes now include neck and shoulders instead of a floating head.
  • Profile photos load faster. URLs for the public photo bucket are no longer signed, which removed a round trip per photo for no security benefit, since the bucket is public to read by design.

2026-09-13

Added

  • Affiliation is now its own field, separate from job title, so a member can record both where they work and what they do there.
  • Russia added to the country list.

Fixed

  • Social links showed the URL scheme, "http", instead of the platform name.
  • LinkedIn links displayed their tracking parameters.

2026-09-10

Added

  • Editing and deleting announcements from the administration panel. Previously an announcement could be published but never corrected.

Fixed

  • The administration page crashed on load, because hooks were called after an early return.
  • The announcements tab crashed on rows created before the type column existed.

2026-09-01

Added

  • Photo cropping when uploading a profile picture, with drag to pan and zoom.
  • Name fields validate per language, so an Arabic name field rejects Latin script and the reverse.

Fixed

  • Several crop dialog defects in sequence: the preview not rendering, a stray reference that broke the component, a slider that did not respond, and a zoom level that started far too close with no way to zoom out.

2026-08-31

Added

  • Announcement preferences. Members choose which announcement types and which countries they want to hear about, from the settings page.
  • Filters and clearer specialization labels in the administration dashboard.
  • A country dropdown on the newsletter form, with automatic subscription at sign-up.

Fixed

  • Google sign-in redirected to the Supabase domain instead of back to the application.

2026-08-30

Added

  • Alumni identifiers and usernames. Every profile receives an identifier in the form FMSI-YY-NNNN, generated by the database rather than supplied by the client, and a unique username used in profile URLs.
  • A country dropdown on the profile form, replacing free text.

2026-08-29

Added

  • The initial public release: profiles, the searchable directory, authentication, administrative review of new profiles, announcements, and the newsletter.
  • Deployment onto a self-hosted Supabase stack. See decision 2.

Internal engineering documentation.