Repository navigation
Releases: SkennyCMD/Tutorly
Release list
2.4.1
Tutorly 2.4.1
Release date: October 24, 2026
A pack-management feature plus a batch of reliability fixes across lessons, notifications, and the Calendar.
β¨ Added
Delete a lesson package: STAFF can now delete a pack from the Student Profile page. Its lessons are kept, just unlinked from the deleted pack - nothing is lost.
π Changed
Lessons re-split on edit: extending a lesson's duration past its pack's remaining hours now splits it automatically (the part that fits stays in the pack, the rest becomes a separate unassigned lesson) - the same behavior that already happened on creation now also applies when editing. Changing a lesson's student or start time also re-checks which pack it should draw from.
π Fixed
Java test suite no longer needs a real database: the one test that did now runs against an in-memory database instead, so tests work the same on any machine.
The 30-minutes-before-a-lesson reminder was firing 1-2 hours late, depending on the lesson's length and the time of year (CET/CEST) - it was comparing the wrong time zone against locally-stored lesson times. The once-daily reminder had the same underlying issue on its day boundaries.
Some users with push notifications enabled weren't receiving them, with no way to tell why. A very long calendar note could silently exceed the notification size limit; and failures that weren't simply "device unsubscribed" were being logged without enough detail to diagnose. Long notes are now trimmed before sending, and failures are now logged with the information needed to investigate them.
A GUEST account viewing the Calendar saw the wrong name on a prenotation - the person who created it instead of the tutor actually assigned to it.
The Calendar's tutor filter could miss notes: a note created by one tutor but assigned to another didn't show up when filtering by the assigned tutor - only by the creator. It now shows up for both.
2.4.0
Tutorly 2.4.0
Release date: October 7, 2026
This release adds a new type of push notification and tightens up who can touch a prenotation someone else booked.
β¨ Added
30-minute lesson reminder: both the tutor and the student now get a push notification 30 minutes before a prenotation starts, independent of the existing once-a-day reminder.
Staff-assigned prenotations are now protected: when STAFF books a lesson for a GENERIC tutor, that tutor can no longer edit or delete it - enforced on the server, not just hidden in the UI. On the Calendar, such a prenotation shows in a distinct darker blue with the staff member's name underneath, so it's clear at a glance who assigned it.
π Fixed
Editing a prenotation was silently reassigning its "creator" to whoever made the edit - harmless on its own, but it would have broken the new staff-assignment protection above after a second edit. The original creator is now preserved.
A GUEST account could delete a prenotation by calling the API directly, even though the UI never gave them that option. Closed.
2.3.8
Tutorly 2.3.8
Release date: October 2, 2026
This is a quick follow-up to 2.3.7, fixing a second Excel sheet-naming crash that the first fix didn't fully cover.
π Fixed
Report generation crash on apostrophe-ending names: downloading the Students Report could still fail with a 500 error for students whose name starts or ends with an apostrophe (e.g. surnames like O'Brien or D'Angelo) β ExcelJS forbids a sheet name from starting or ending with a single quote, a rule the 2.3.7 fix didn't account for. All sheet-name sanitization (for both the students report and the tutor monthly report) now goes through one shared helper that also strips leading/trailing apostrophes, including ones that the 31-character name truncation could newly expose.
2.3.7
Tutorly 2.3.7
Release date: October 2, 2026
Patch release fixing a production crash in the Staff Panel's student hours report.
π Fixed
Students report generation crash β GET /api/reports/lessons-by-student (the "Download Students Report" button) was returning a 500 in production. Root cause: each student gets their own Excel sheet named after their full name, but Excel requires every sheet name in a workbook to be unique, and student names have no database uniqueness constraint - two different students sharing a name (e.g. two "Mario Rossi") crashed report generation outright. Sheet names are now deduplicated and sanitized against characters Excel doesn't allow in a sheet name. The same sanitization was applied to the tutor monthly report as a precaution.
2.3.6
Tutorly 2.3.6
Release date: September 24, 2026
Small patch release fixing a layout bug in the Calendar's all-day notes row.
π Fixed
All-day notes row misalignment β a long all-day note (especially one now showing "(π€ username)" for STAFF, added in 2.3.5) could force its day's column wider than the rest, misaligning the whole row. The row's per-day cells had no width constraint, so they refused to shrink below their content's size. Fixed so each column respects the grid width and long notes truncate as intended.
2.3.5
Tutorly 2.3.5
Release date: September 23, 2026
This release expands the Calendar's STAFF view: every tutor's notes are now visible, not just your own, with new controls to filter and declutter what you see.
β¨ Added
STAFF sees every tutor's notes β previously, even STAFF only saw calendar notes assigned to or created by them, unlike prenotations which STAFF could already see for every tutor. Notes now get the same "see everything" treatment. A note that isn't your own shows its creator's username (π€ username), on both desktop and mobile, for timed and all-day notes alike.
Hide prenotations / hide notes toggles β two new STAFF-only checkboxes next to the tutor filter let you toggle each event type off independently - e.g. hide prenotations to see only notes across every tutor. Persisted across page reloads, same as the tutor filter.
π Changed
Tutor filter now covers notes too β selecting a tutor in the STAFF-only tutor filter previously only scoped prenotations; it now scopes that tutor's notes as well (matched by creator), so picking a tutor gives you their full calendar, not just their bookings.
2.3.4
Tutorly 2.3.4
Release date: September 23, 2026
Small patch release: a password visibility toggle on the tutor login page, a Staff Panel data-consistency fix, and some documentation cleanup.
β¨ Added
Login password toggle β the tutor login page's password field now has a show/hide toggle (eye icon), matching the one already on the admin login page.
π Fixed
Staff Panel hours table β the on-page monthly tutor hours table still showed erased tutors, since it's fetched from a separate endpoint than the page's own tutor list (already fixed for this earlier). Now excludes erased tutors too.
Staff Panel sidebar β the mobile Calendar link had a typo (/calendat instead of /calendar).
Documentation β both README files were badly out of date (version/date stamps, a missing link to the PWA guide) and docs/README.md's Changelog links were broken (pointed outside the docs folder). All fixed.
2.3.3
Tutorly 2.3.3
Release date: September 21, 2026
This release fixes the Calendar page slowing down as prenotations accumulate over time, switching to on-demand per-week loading instead of fetching the entire history on every visit.
π Changed
Calendar performance β GET /calendar used to fetch every prenotation and calendar note ever created, with no date filter, then enrich each one with two uncached lookups (student + tutor) - the page got slower the more prenotations piled up, regardless of how few distinct students/tutors they actually referenced. The page now loads only the current week up front and fetches additional weeks on demand as you navigate, using the Java backend's existing date-range endpoints and a deduped lookup cache instead of the unbounded ones. Also added HTTP keep-alive to every call to the Java backend, instead of opening a new connection per request.
π Fixed
Calendar edit/delete on newly-loaded weeks β as a side effect of the change above, editing or deleting a prenotation or note in a week that had just been loaded on demand silently failed to open its edit form. Fixed by keeping the underlying data in sync regardless of how a week's events were loaded.
2.3.2
Tutorly 2.3.2
Release date: September 16, 2026
This is a small patch release fixing a readability issue in the Calendar's tutor filter and refreshing the app icon.
π Fixed
Calendar tutor filter β the tutor filter button and its dropdown list used a hardcoded white text color, making tutor names unreadable in light theme. Both now use the same theme-aware text color used everywhere else in the app, so they read correctly in both light and dark theme.
π Changed
App icon β replaced the app icon SVG with a redrawn version.
2.3.0
Tutorly 2.3.0
Release date: September 14, 2026
This release brings GDPR right-to-erasure into the Admin Panel, adds the Node.js frontend's first automated test suite, and fixes a mobile Calendar overflow bug alongside three erasure-guard gaps.
β¨ Added
GDPR Right to Erasure (Admin Panel) β the anonymize-on-erase feature (DELETE /api/{users,students,admins}/{id}, contributed via a community PR) is now reachable from the Admin Panel: an "Erase" button on every tutor, guest, and student card, gated by a type-to-confirm modal requiring the admin to type the account's username or name before it can be confirmed. Erased accounts show an ERASED badge with every control disabled, role-mismatch guards keep the tutor/guest erasure buttons from being used on the wrong kind of account, and erased tutors can no longer log in.
Node.js Test Suite β the Node frontend had zero automated tests until now (no CI, no pre-commit hooks). Added a Jest/Supertest suite covering every route in the app β 162 tests across 14 files β with the Java backend mocked at the HTTP layer via nock.
π Fixed
Erasure-bypass gaps β three admin routes could still modify an already-erased account: updating a guest's profile, changing an erased student's class, and linking/unlinking an erased student or guest. All three now correctly reject with a 409.
Calendar (mobile) β the toolbar's tutor filter and color legend could overflow the screen width on narrow devices, making the whole page scroll horizontally. The row now wraps instead.