Projects

No projects available

Navigation

Home
Login

Changelog

Release history for GALGO. Current version: v2.0.0-beta.32

v2.0.0-beta.32

Mode of Discourse in Two LanguagesCurrent

2026-08-06

Mode of Discourse can now be written in Spanish or English and translated into the other afterwards. A note that exists in only one language is still shown rather than hidden, labelled so you know which language you are reading. Notes pasted in from Google Docs no longer display their formatting codes as text.

  • AddedMode of Discourse can be written in either language. Write it in whichever language you are working in, and add the translation later — the editor writes whichever language the interface is currently set to, and shows the other version beneath so you can see whether a translation is still needed.
  • ImprovedA Mode of Discourse written in only one language is still shown to every reader, marked “Shown in ES — not yet translated”. It used to be chosen the same way definitions are, which meant it could simply not appear.
  • FixedNotes pasted from Google Docs showed their formatting codes as visible text — stray tags and font settings in the middle of a sentence. 176 existing notes have been cleaned up, keeping paragraph breaks and italics.
  • FixedLinks in text and project descriptions now always open in a new tab safely, and only ordinary web and email addresses are allowed. Existing descriptions were checked: all 181 links were kept.

v2.0.0-beta.31

Context Editing Cleanup

2026-08-06

Three fixes to the context editor raised by Alison and Nuria. The definition and tenor pickers no longer list the English and Spanish wording of the same entry as two separate choices, contexts can now record where a particular occurrence is documented, and the term editor no longer carries a Field list that was superseded when Field of Discourse became free text.

  • FixedWhen editing a context, the definition and tenor lists showed every language at once — so a term with three senses in two languages offered six choices. Each entry now appears once, in your language, matching how the glossary already behaved.
  • AddedContexts have a Source Reference field for recording where that particular occurrence is documented, such as “Celestina, Act IV”.
  • ImprovedIn the term panel, the primary source for a term is now behind a “Show primary source” button. It is the same text on every occurrence, and at full length it pushed the definition and tenor off screen.
  • ImprovedThe Field (Ideational) list has been removed from the term editor. Field of Discourse is written per context now, so the list showed entries that could no longer be meaningfully edited there.
  • FixedTyping the same Field of Discourse on two different contexts no longer creates two separate entries behind the scenes.

v2.0.0-beta.30

Links And Margins Point To The Right Place

2026-08-06

Following a link from “Other places this definition is found” now lands on the exact occurrence it promised, and the notes in the margin of reading view describe the occurrence they sit beside rather than the keyword in general. Both problems came from the same habit: pointing at a keyword when the thing being described was one particular use of it.

  • FixedLinks under “Other places this definition is found” now land on the exact occurrence. They were numbered by counting annotated passages but resolved by counting every highlighted word, so in a text where most occurrences are not annotated they arrived somewhere with no definition and no field of discourse at all.
  • FixedFollowing one of those links within the same text now opens the panel for the occurrence you landed on. It was opening a panel that could not find its own context, so the definition, tenor and field appeared blank.
  • FixedNotes in the margin of reading view now show the definition, tenor and field of discourse belonging to the occurrence they sit beside. They were showing the keyword’s first entry instead, so the margin and the term panel routinely disagreed about the same word.
  • FixedThe margin now shows translated definitions in the language you are reading in, as the term panel already did.
  • ImprovedThe glossary no longer lists a definition and its translation as two separate numbered senses. Each definition appears once, in your language where a translation exists.
  • ImprovedThe address bar now holds a stable link to the occurrence you are reading, so a URL copied from it keeps working after the text is reprocessed or more occurrences are annotated. Links shared before this release still work.
  • Improved“Tenor” is now “Tenor of Discourse” (“Tenor del discurso”), matching Field of Discourse and Mode of Discourse.
  • ImprovedThe keyword “Commentary” field is now “Primary Sources” (“Fuentes primarias”), which is what it holds.

v2.0.0-beta.29

Definitions Traced One At A Time

2026-08-05

A keyword with several meanings now keeps them apart. “Other Places this Definition is Found” lists only the occurrences annotated with the definition you are reading, so a single sense can be traced through a text and across the corpus — previously it listed every annotated occurrence of the keyword, whichever meaning it carried.

  • Fixed“Other Places this Definition is Found” now lists only occurrences sharing the definition you are reading. It was listing every annotated occurrence of the keyword regardless of meaning, so a definition used once could appear alongside two dozen unrelated passages and look as though a newly added definition had not saved.
  • FixedClicking a highlighted word that has not been annotated yet no longer shows one of the keyword’s definitions as though it were the meaning intended there. The panel now lists the keyword’s definitions and says plainly that this occurrence is not yet annotated.
  • ImprovedField of Discourse is now typed in directly for each occurrence instead of chosen from a list. A field is the group of words surrounding a keyword in one particular passage, so the same grouping never recurs elsewhere and there was nothing useful to pick from.
  • ImprovedThe term panel no longer offers “Other Fields” beneath Field of Discourse. Those fields belong to other passages and were never alternatives for the one you are reading.
  • Improved“Expansion of Meaning” is now called “Mode of Discourse” (“Modo del discurso”), matching the language of the theory the glossary is built on.

v2.0.0-beta.28

Sign In Returns You To Your Page

2026-08-02

Signing in used to send everyone to the admin area — which only super administrators can open — so students were met with a “you do not have permission” page before they had seen anything at all. Signing in now returns you to whatever you were reading.

  • FixedStudents no longer land on a 403 “Access Denied” page after logging in. Every sign-in was being sent to the admin area regardless of who was signing in.
  • ImprovedSigning in returns you to the page you were on. If you were reading a text, you come back to that text.
  • ImprovedIf you sign in without a page to return to, you land somewhere useful: administrators go to the admin area, a student enrolled in one course goes straight into that course, and everyone else sees the home page.
  • AddedThe audit log now records when a project or a text is switched between public and private — who did it, when, and in which direction. Making a project public exposes its texts and public annotations to the open web, and there was previously no record of it.
  • AddedPassword reset requests and completions are now recorded in the audit log, so an administrator can tell whether an account was taken over.
  • ImprovedSecurity updates across the software GALGO depends on: no critical or high-severity advisories remain.
  • FixedFollowing a link to an admin page while signed out now asks you to sign in, and takes you where you were going afterwards. It previously showed a permission error instead, with no way to sign in.

v2.0.0-beta.27

Accessibility Pass & Recoverable Notes

2026-08-02

An accessibility audit, split between checks a computer can make and checks a person has to make. The automated half now runs on every change and caught a real problem straight away: the outline showing which control your keyboard is on was too faint to meet the standard. There is also a published accessibility statement, a checklist anyone can run, and — behind the scenes — a way to recover reader notes if a text is ever rebuilt underneath them.

  • FixedThe outline showing which control has keyboard focus was too faint to meet the accessibility standard, in light mode. It is now darker. If you navigate with a keyboard rather than a mouse, this is the change you will notice.
  • FixedSecondary text on shaded backgrounds was very slightly below the required contrast, and has been darkened.
  • FixedRebuilding a text now warns you when reader notes have come loose from their passage, not only when glossary annotations have. Previously notes could be silently detached with nothing reported.
  • AddedAn accessibility statement, linked in the footer. It sets out what we have done, states honestly that GALGO has not been independently audited, and lists what we know still falls short.
  • AddedAutomated accessibility checks that run with the rest of our tests: colour contrast across the whole design system in both light and dark themes, and page structure — labels, headings, form fields, and whether every control can be identified by a screen reader.
  • AddedA 45-minute accessibility checklist that anyone can run, covering the things software cannot judge: keyboard navigation, zooming to 400%, reduced motion, and how the reader sounds through a screen reader.
  • FixedWhen an error occurred, our diagnostic tool was recording a video of whatever was on screen — which on this platform can include student names, email addresses and students’ own notes. Those recordings are now masked: we still see where the error happened and what was clicked, but not the words on the page.
  • ImprovedSecurity updates applied across the software GALGO depends on, closing two critical issues — one affecting Google sign-in, one affecting how database queries are built.
  • ImprovedThe project home page no longer shows two search boxes side by side. It keeps the one that searches glossary definitions and full text; the list-filtering box remains on the Texts page, where it is the only search.

v2.0.0-beta.26

Browsing the Corpus & a Shakespeare Demo

2026-08-02

Texts can now be explored two ways — along a timeline, or grouped by category — with a search box for finding a work by title or author. The reading toolbar has been reorganised so that the things you do stay visible and the things you set once live together behind a single Display button. Public notes are now visible to readers who are not signed in, which is what "public" was meant to mean. And there is a new Shakespeare project: seven plays with a worked glossary, built to show what the platform can do.

  • AddedTwo ways to browse a project's texts. A timeline places each work at its date and draws uncertain dating as a band rather than a point, so you can see at a glance which works are firmly dated and which are not; a category view groups them as before. Your choice is remembered.
  • AddedSearch texts by title or author. Accents are ignored, so typing "espanola" finds "La española inglesa".
  • AddedSource and licence on every text. The reader now shows where a text came from, under what licence, with links to both — and states that the text was reformatted for display, which some licences require.
  • AddedA Shakespeare demonstration project: seven plays, ten terms traced across all of them, 140 annotated passages and 19 public notes on things a definition cannot carry — a topical joke, a staging convention, the cannon that burned down the Globe. The glossary there illustrates the platform's capabilities and is not offered as scholarship.
  • ImprovedThe reading toolbar is grouped by what each control is for. Find, Notes and Ask AI stay visible; layout, text size, spacing and offline reading now sit together behind one Display button; editing tools are separated and only shown to professors. A student now sees five controls where there were eight.
  • ImprovedThe project home page and the Texts page now browse the corpus the same way, instead of each having its own layout.
  • FixedPublic notes are now visible to readers who are not signed in. Previously a professor could mark a note public and no visitor could see it.
  • FixedToolbar menus close when you press Escape or click away, and choosing a layout closes the menu instead of leaving it open over the text.
  • FixedAn approximate date given as a single year now keeps its "c." — a text dated c. 1606 no longer displays as 1606.

v2.0.0-beta.25

Reading Mode, Clearer Editing & Three Repaired Plays

2026-08-01

This release is mostly about the things that were quietly getting in the way. Reading mode — the two-column view with notes in the margins — was missing half its features: you could not add or edit a context, see a full definition, play audio, or use search from it. All of that now works. Editing is clearer: the two identical "Edit" buttons are now labelled for what they actually edit, Save and Cancel follow you down long forms, and every button in the reading toolbar explains itself on hover. Three plays that were displaying incorrectly — Fuente Ovejuna, El burlador de Sevilla, and La vida es sueño — have been repaired and now show proper verse lines, speaker names, and line numbers.

  • FixedReading mode is now a full reading experience. Clicking a term opens a panel on the right with the complete entry — definition, tenor, field of discourse, commentary, and every other place that definition appears — while the text stays put behind it, so you can keep reading and keep clicking without the panel closing.
  • FixedYou can add and edit contexts from reading mode. Previously the option was switched off in this view entirely.
  • FixedAudio now works in reading mode, and reads only the text — not the notes in the margins.
  • FixedFind-in-text now scrolls to each match in reading mode instead of only counting them.
  • ImprovedMargin notes preview on hover and open the full entry when clicked, so a short note in the margin no longer has to be the whole story.
  • FixedThree plays repaired: Fuente Ovejuna, El burlador de Sevilla, and La vida es sueño. Two were showing a blank page and one was showing jumbled text with misplaced line numbers. All three now display correct verse lines, speaker names, line numbering, and stage directions.
  • ImprovedThe two "Edit" buttons are now labelled "Edit text" and "Edit context", and the context action has moved into its own labelled row that says whether the word you clicked has been annotated yet.
  • ImprovedSave and Cancel stay visible at the bottom of the screen while you scroll through a long text or term editor, and Save now tells you when there are unsaved changes.
  • ImprovedEvery button in the reading toolbar now explains itself on hover — "Listen to this text read aloud", "Text size and spacing", and so on — for mouse and keyboard alike.
  • ImprovedThe offline "Save" button was being read as "save my work". It is now a download icon that says "Download this text to read offline later", and shows "Available offline" once saved.
  • ImprovedOpening a term is faster. Definitions load as you hover, before you click, and a term you have already opened reappears instantly.
  • FixedIn reading mode, a note in the margin could attach itself to the wrong occurrence of a word — showing a definition beside a word that had none. Notes now sit beside the occurrence that was actually annotated.
  • FixedThe AI assistant now shows which term and definition you asked about.
  • ImprovedReprocessing a text now warns you if any glossary annotations no longer match a word in it, and the text editor warns before a format change that would cause it. This used to happen silently.

v2.0.0-beta.24

Spanish Interface & Bilingual Glossary

2026-07-22

GALGO now speaks Spanish. The entire interface can be switched between English and Spanish with a toggle in the top navigation, and each person can set their preferred language. Glossary definitions, tenors, and fields of discourse can now hold translations, so a reader sees each entry in their own language while the term itself stays in its original tongue. Two reported bugs in the glossary editing flow are also fixed.

  • AddedEnglish/Spanish interface: a language toggle in the top navigation switches the whole interface — menus, buttons, labels, and messages — between English and Spanish. Your choice is remembered, and new visitors start in the language that fits the project they are reading.
  • AddedPreferred language per account: signed-in users keep their chosen interface language across visits and devices.
  • AddedTranslatable definitions, tenors, and fields of discourse: a professor can write an entry in one language and add translations in others. Readers see the version that matches their language, falling back to the project language and then English. The headword itself is never translated — "honra" stays "honra" — preserving the cultural meaning the glossary exists to teach.
  • ImprovedDates and counts now display in the format of the reader's chosen language.
  • FixedEditing a glossary term from the older admin list no longer sends you to the home page — the Edit link now opens the correct term editor.
  • FixedClicking a highlighted term to add a context no longer causes the rest of the highlighting to disappear or subsequent term clicks to stop working.

v2.0.0-beta.23

Offline Reading & Login Fixes

2026-07-20

GALGO can now be installed as an app and read offline — visited texts, glossary terms, and notes are cached automatically, with a fallback page and an install prompt to guide the way. Alongside that, a batch of login and reader fixes: Google sign-in can no longer be used to bypass invitations, email is now case-insensitive at login, the top navigation updates immediately after signing in or out, and search navigation is more reliable.

  • AddedOffline reading: visited texts are cached automatically, and a "Save for offline" button lets you cache a text ahead of time. An offline banner shows when you're disconnected, and a fallback page lists everything you've saved.
  • AddedInstall prompt: a banner guides you through adding GALGO to your home screen — a one-tap install on Android/desktop Chrome and Edge, step-by-step instructions on iOS Safari.
  • AddedGlossary contexts can now be tagged with a specific Field of Discourse, editable per-occurrence in the context editor and shown in the term sidebar (previously only Tenor supported this).
  • AddedMobile admin navigation: a slide-out drawer replaces the fixed sidebar on small screens.
  • AddedEvery login attempt — successful or failed — is now recorded in the audit log with a specific reason (unknown email, wrong password, inactive account, etc.), visible to super admins at /admin/audit-logs.
  • FixedGoogle sign-in could be used to create a brand-new account without an invitation. It now requires an existing, active, invited account — matching credentials login.
  • FixedEmail login is now case-insensitive. Previously an account created as "Name@Example.com" could fail to log in with "name@example.com".
  • FixedCredentials login now checks account status — suspended or inactive accounts can no longer sign in with a password (Google sign-in already enforced this).
  • FixedThe top navigation (login/logout state, project list, admin link) now updates immediately after signing in or out, instead of requiring a page reload.
  • FixedIn-text search Prev/Next buttons now reliably scroll the reader to the next match.
  • FixedOpening a new glossary context while another was already being edited no longer shows stale form data left over from the previous context.
  • ImprovedIn-text search bar accessibility: added a search landmark, an explicit label on the search field, and live-region announcements of match count for screen reader users.

v2.0.0-beta.22

Invite System & Email

2026-06-24

A complete overhaul of the invitation and transactional email system. Inviting the same address twice now refreshes the token instead of stacking duplicates, every pending invite gets a resend button, super admins can be invited directly from the users page without needing a project, and all outgoing emails now carry proper GALGO branding.

  • FixedInviting an email address that already has a pending invitation now replaces the old token and resends — no more duplicate invitation rows.
  • AddedResend button on every pending invitation row (project admin members page and global admin users page).
  • AddedGlobal pending invitations panel on /admin/users showing all outstanding invitations across every project.
  • AddedSuper Administrator invite flow: super admins can invite new users directly as super admins from /admin/users — no project selection required. Existing users are promoted immediately.
  • ImprovedInvite and resend actions now show a toast confirmation on success and surface the actual error message on failure.
  • ImprovedProject invite form refreshes the pending invitations list immediately after sending without a full page reload.
  • ImprovedAll transactional emails (invitation, password reset, welcome) now use a branded GALGO template — dark header with serif logotype, warm body, and a GALGO · Providence College footer.
  • FixedInvitation and password reset links now use the correct production URL instead of hardcoded localhost. Configure NEXTAUTH_URL in environment variables.
  • FixedEmail sending now logs Resend API errors to the server console instead of silently discarding them.
  • FixedInstalled missing @react-email/render peer dependency — emails were failing to render with Resend v6.

v2.0.0-beta.21

Home Page & Mobile Nav

2026-06-24

The public home page is redesigned with a full-bleed hero image of the church at Belmonte, WCAG AA-compliant text contrast, and a project card grid. Projects now support cover image uploads. The navigation is fully responsive with a mobile drawer that includes a project switcher.

  • ImprovedHome page hero: full-bleed background image with a dark-to-transparent gradient scrim ensuring white text passes WCAG AA contrast (4.5:1+) at all breakpoints.
  • ImprovedProjects section now renders as image cards — aspect-ratio image area with a cover photo or initial-letter placeholder, and hover scale animation.
  • FixedHTML tags no longer bleed into project description text on the home page.
  • AddedProject cover image upload: admins can upload a JPEG, PNG, or WebP (max 5 MB) from the project settings page; images are stored in Google Cloud Storage.
  • AddedResponsive mobile navigation: hamburger button opens a full-screen drawer with the project switcher, context-aware nav links, theme toggle, and account section.
  • ImprovedDesktop user menu replaced with a dropdown (avatar + name) showing profile and sign-out links.
  • ImprovedActive nav link is highlighted in both desktop and mobile views.

v2.0.0-beta.20

Admin & Auth Dark Mode

2026-06-20

Dark mode now covers the full admin and authentication surface of the app — login, forgot/reset password, invite, profile, all admin panels, and every component that previously used hardcoded light colors.

  • FixedLogin, forgot-password, reset-password, and invite pages now use themed colors and render correctly in dark mode.
  • FixedProfile page and form now use semantic tokens throughout — inputs, labels, and status messages are correctly themed.
  • FixedNot-authorized (403) page renders correctly in dark mode.
  • FixedAdmin audit log action badges now have dark mode variants.
  • FixedAdmin users table: status badges (active/inactive/suspended) and super admin badge now have dark mode variants.
  • FixedProject admin glossary: definition count, context count, and "None" badges now have dark mode variants.
  • FixedProject admin texts: learning mode and visibility badges now have dark mode variants.
  • FixedSuggestions dashboard: status badges, table header, row hover, and filter pill active state now have dark mode variants.
  • FixedCluster editor: member term chips, remove button hover, term picker rows, and delete button hover now have dark mode variants.

v2.0.0-beta.19

Reader Typography & Dark Mode

2026-06-20

The reading-experience fixes from the previous release now actually take effect. The font-size and line-spacing controls resize the body text (the text was being pinned to a fixed size by the underlying TEI styles), highlights no longer flicker while scrolling, and dark mode now covers the project homepage, glossary, texts list, and search results.

  • FixedFont size and line spacing controls now resize the body text — previously the reading text was locked to a fixed size regardless of the setting.
  • FixedTerm and annotation highlights no longer flicker while scrolling the text.
  • FixedProject homepage, glossary, texts list, and search results now fully support dark mode.
  • FixedMarginal reading mode: annotations reliably open on first load.

v2.0.0-beta.18

Reader UX & Accessibility

2026-06-20

A targeted pass on the reading experience: font size and line spacing controls now actually resize the text, annotation and search highlights are no longer lost during scroll, search navigation scrolls to each match, marginal annotations open automatically, and dark mode contrast is improved throughout.

  • FixedFont size and line spacing controls now resize the body text, not just the sidebar.
  • FixedAnnotation highlights and search highlights no longer flicker or disappear while scrolling.
  • FixedSearch prev/next navigation now scrolls the viewport to each matched term.
  • FixedMarginal reading mode: annotations are now expanded and visible by default.
  • FixedMarginal reading mode: expanded chips always appear in front of collapsed chips (z-index layering).
  • ImprovedDark mode contrast for search highlights, annotation highlights, and annotated term spans.

v2.0.0-beta.17

AI Teaching Assistant

2026-06-20

Professors can now enable a Socratic AI chat assistant for students reading project texts. The assistant uses Anthropic Claude Haiku to ask follow-up questions and help students reason through the text rather than giving direct answers. Students can start conversations from any text or term, switch between texts within a session to explore cross-text connections, and professors can review all session logs and test prompts from the admin panel.

  • AddedAI Teaching Assistant — streaming Socratic chat available on any text or term when enabled by a professor.
  • AddedCross-text sessions — students can switch texts mid-conversation to explore connections across the corpus.
  • AddedTerm-mode chat — clicking "Ask AI" from a term sidebar opens a focused conversation grounded in that term's glossary data.
  • AddedCost controls — per-student daily turn cap and project monthly budget cap, with professor email alert at 80%.
  • AddedAI admin panel — session log with per-turn cost breakdown and an in-browser prompt tester for professors.
  • AddedText-level AI override — professors can force AI on or off for individual texts regardless of the project setting.

v2.0.0-beta.16

Infrastructure

2026-06-20

Platform hardening: the public API now supports cursor-based pagination; a Vercel cron job prunes stale audit logs and expired password-reset tokens nightly; Sentry error monitoring is wired up for client, server, and edge runtimes; and a Vitest suite covers the core text-processing logic.

  • AddedAPI pagination — all three public v1 endpoints (/texts, /terms, /all) support ?after=<cursor>&limit=N (default 50, max 100) with a nextCursor in the response.
  • AddedNightly cron job (3 AM UTC) prunes audit log entries older than 90 days and all expired password reset tokens.
  • AddedSentry error monitoring — client, server, and edge runtimes all report to Sentry; source maps uploaded during CI builds.
  • AddedVitest unit tests for injectGlossary, applySearchHighlight, and applyPhraseHighlight (26 tests, all passing).

v2.0.0-beta.15

Term Co-occurrence Graph

2026-06-20

The new Co-occurrence admin page shows an interactive force-directed graph of terms that appear near each other in the corpus. Nodes are sized by frequency and colored by identity; edges are weighted by co-occurrence count within a 50-word window. Drag nodes to rearrange the layout; hover to see which terms a given term co-occurs with most.

  • AddedCo-occurrence graph — force-directed node-link diagram showing terms that appear within 50 words of each other across the corpus.
  • AddedNodes sized by corpus frequency; edges weighted by co-occurrence count; pairs with fewer than 2 co-occurrences are suppressed as noise.
  • AddedHover tooltip shows total occurrences and the top 5 co-occurring terms with counts.
  • AddedDraggable nodes for manual layout adjustment; graph auto-settles via a Verlet spring simulation on load.

v2.0.0-beta.14

Student Engagement Report

2026-06-20

Professors can now see a per-student breakdown of Learning Mode activity on the new Engagement admin page. The report shows suggestion counts by status (accepted, pending, dismissed), the number of unique terms and texts each student engaged with, and the date of their last submission.

  • AddedEngagement admin page — per-student table of suggestion activity with status breakdown, unique term and text counts, and last-active date.
  • AddedSummary stats bar showing active student count, total suggestions, accepted count, and pending count at a glance.

v2.0.0-beta.13

Data Export

2026-06-20

Professors can now download the full project dataset from the new Export admin page. Three formats are available: a glossary CSV with terms, definitions, tenor and field notes; an annotated contexts CSV listing every tagged occurrence with surrounding text and word position; and a full-project JSON export containing nested texts, glossary entries, and contexts in a single file.

  • AddedExport admin page — download project data from the new Export section in the project admin sidebar.
  • AddedGlossary CSV — one row per term-definition pair, with variations, tenor notes (including category tags), and field notes.
  • AddedContexts CSV — one row per annotated occurrence, with term name, text metadata, word position, and context window.
  • AddedFull-project JSON — nested export of project metadata, all texts (with structured dates and genre tags), and the complete glossary.

v2.0.0-beta.12

Term Detail & Tenor Shift

2026-06-20

Clicking a term in the public glossary now opens a dedicated term detail page. When two or more texts in the corpus have structured dates, the page shows a Term Frequency Timeline — bars charting how many annotated occurrences appear in each text, ordered chronologically. The page also shows a Tenor Shift Chart once professors assign category tags to tenor entries, revealing how the interpersonal register of a term shifts across the corpus over time. The tenor editor gains a category tag field for this purpose.

  • AddedTerm detail page — glossary terms are now clickable, opening a page with definitions, tenor/field notes, and the two new charts.
  • AddedTerm Frequency Timeline — column chart showing annotated occurrence count per text in chronological order.
  • AddedTenor Shift Chart — stacked column chart showing tenor category distribution per text over time; shows an empty state until categories are assigned.
  • AddedCategory tag field on tenor entries — professors assign a short label (e.g. royal, ecclesiastical) used to group and color the Tenor Shift Chart.

v2.0.0-beta.11

Corpus Timeline

2026-06-20

The project homepage now shows a horizontal corpus timeline above the text grid whenever two or more texts have structured dates. Each text appears as a positioned bar on the axis — wider bars for ranges and approximate dates, narrow bars for specific years. Hover to see the title, author, and date label; click to open the text.

  • AddedCorpus timeline on the project homepage — texts with structured dates are plotted on a horizontal axis in publication order.
  • AddedRange and approximate dates render as wider bars; specific years render as narrow bars.
  • AddedCategory color coding in the timeline matches the legend shown below it.
  • AddedHover tooltip shows title, author, and date label; clicking a bar opens the text reader.
  • AddedAxis ticks auto-scale to decade, quarter-century, or century intervals depending on the corpus span.

v2.0.0-beta.10

Structured Dates & Genre

2026-06-20

Text dates are now structured data rather than a free-text field. Professors choose a precision level (specific year, approximate, range, decade, or century) and enter year values; the platform computes a human-readable label and an integer search range used for future timeline visualizations. A genre/type tag field has also been added.

  • AddedStructured date entry — choose precision (specific year, approximate, range, decade, century, or unknown) and enter year values; the display label and search range are computed automatically.
  • AddedBCE support — enter a negative year (e.g. −580) for texts predating the common era.
  • AddedDate notes field for recording bibliographic nuance (e.g. "first performed 1499; print edition 1502").
  • AddedGenre / type tags field (comma-separated) for categorizing texts by literary form.
  • ImprovedDate search range (yearEarliest / yearLatest) is stored as integers, enabling precise range queries for the forthcoming corpus timeline.

v2.0.0-beta.9

Cloud Audio Generation

2026-06-20

Professors can now generate pre-recorded audio for any text using Google Cloud Text-to-Speech (es-ES-Neural2-A). Readers hear a consistent, high-quality Spanish voice rather than whatever the browser provides. Generation runs in the background with live block-by-block progress visible to the admin.

  • AddedPer-text cloud audio generation — professors trigger it from the text edit page; audio is synthesized by Google Neural2 and stored in GCS.
  • AddedLive generation progress bar shows blocks synthesized in real time (Server-Sent Events), with the current text snippet displayed as each block completes.
  • AddedReaders automatically use cloud audio when available; the gear icon in the reading bar shows the active voice.
  • AddedRegenerate and Remove actions on the edit page let professors refresh audio after text changes or revert to browser TTS.
  • ImprovedBrowser TTS mode selector (Plain/Glossed/Annotated) is hidden when cloud audio is active — cloud audio is always plain.

v2.0.0-beta.8

Audio Reading

2026-06-20

Adds accessible audio reading to the text reader. Click Listen in the reading bar to have the text read aloud — choose between plain reading, glossed mode (definitions inserted after each term), or annotated mode (professor notes read inline). Word highlights follow the reading position. The browser remembers where you stopped so you can resume across sessions.

  • AddedAudio reading — click Listen in the reading bar to hear the text read aloud by the browser's text-to-speech engine.
  • AddedThree reading modes: Plain (text only), Glossed (glossary definitions spoken after each term), and Annotated (public professor notes read at their location in the text).
  • AddedTerm highlight sync — the current term span is highlighted amber as it is spoken (where the browser supports boundary events).
  • AddedResume reading — the reader saves your last position and offers a Resume button on return.
  • AddedPlayback controls in the reading bar: play/pause/stop, reading mode selector, and speed selector (0.75× to 1.5×).
  • AddedVoice selection matches the project language so the correct speech engine is used for Spanish texts by default.
  • ImprovedFirefox degrades gracefully — audio continues without word highlight since Firefox boundary events are unreliable.

v2.0.0-beta.7

Marginal Reading View

2026-06-15

Adds a new reading layout where glossary terms and professor annotations appear as collapsible chips in the left and right margins alongside the text. Toggle it with the columns icon in the reading bar — the preference is saved per text.

  • AddedMarginal reading view — a centered text layout with annotated glossary terms and professor notes rendered as compact chips in the side margins.
  • AddedMargin chips expand in-place to show the full term definition (tenor, field) or annotation body on click.
  • AddedStack detection — when multiple notes fall within 64px of each other vertically, they collapse into a single count chip that expands to list all items.
  • AddedToggle button in the reading progress bar (desktop only); state persisted per text in localStorage.

v2.0.0-beta.6

Mobile & Visual Polish

2026-06-14

Brings the reading experience to mobile with a bottom-sheet sidebar, adds a light/dark mode toggle, and lets readers adjust font size and line spacing — all saved between sessions.

  • AddedDark mode — toggle between light and dark with the moon/sun icon in the navigation bar. Follows system preference by default.
  • AddedTypography settings — readers can now adjust font size (4 steps) and line spacing (3 steps) from the reading bar. Settings persist across sessions via localStorage.
  • AddedMobile bottom sheet — on phones and small screens, clicking a highlighted term opens a smooth slide-up panel instead of the desktop sidebar.
  • ImprovedNavigation bar and reading bar now use semantic color tokens so they render correctly in both light and dark mode.

v2.0.0-beta.5

Database Efficiency Fix

2026-06-14

Fixes a significant over-fetching bug where admin text list pages were transferring the full HTML, XML, and word-index data for every text on every page load — even though those pages only display title, author, and status. For large texts like Macbeth, this was adding up to ~8MB of unnecessary database transfer per page view.

  • FixedAdmin text list pages no longer fetch HTML, XML, or word-index columns — only metadata needed for display is queried.
  • FixedText reader pages no longer fetch the internal word-index and search-vector columns.
  • FixedPublic API endpoint /api/v1/texts/[id] no longer returns word-index or search-vector fields.

v2.0.0-beta.4

Concept Clusters

2026-06-14

Introduces Concept Clusters — a way for professors to group semantically related terms (e.g. honra and honor) under a named concept. Clusters appear as a grouped section at the top of the public glossary, making thematic relationships between terms visible to students at a glance.

  • AddedConcept Clusters — group related terms under a shared concept name from the new Clusters admin page.
  • AddedCluster editor with searchable term picker, inline remove, and optional description field.
  • AddedConcept Clusters section on the public glossary page, shown above the full term list when clusters exist.
  • ImprovedGlossary term list now shows a small "clustered" badge next to terms that appear in at least one cluster.

v2.0.0-beta.3

Learning Mode

2026-06-14

Introduces Learning Mode for active reading exercises. Professors can enable a per-text mode that hides authoritative definitions and prompts students to submit their own interpretations. Professors see all submissions and can accept, dismiss, or annotate them with feedback. Definitions can be revealed to all students at any time without turning off the mode.

  • AddedLearning Mode per-text toggle — professors enable it from the text edit page.
  • AddedStudent sidebar in Learning Mode shows only the term name and a prompt to submit an interpretation.
  • AddedStudents can edit or delete their own suggestion after submitting.
  • AddedProfessor sidebar shows the full glossary plus all student suggestions with Accept, Dismiss, and Add Note actions.
  • AddedReveal Definitions action — professors can show definitions to all students while keeping Learning Mode active for ongoing suggestion collection.
  • AddedSuggestions Dashboard at /admin/texts/{id}/suggestions — table view of all submissions filterable by term, student, and status.
  • AddedLearning Mode badge appears on texts in the admin text list.

v2.0.0-beta.2

Annotations & Phrase Search

2026-06-14

Introduces qualitative text annotations for professors and students, and extends in-text search to support literal phrase matching across the full text.

  • AddedText annotations — authenticated users can highlight any passage and attach a title and markdown commentary.
  • AddedProfessor annotations are visible to all readers of the text; student annotations are private to the student and their professors.
  • AddedAnnotation highlights appear as amber underlines in the text; clicking opens the annotation in the right sidebar.
  • AddedShow/hide annotations toggle in both the title header and the pinned reading bar.
  • AddedPhrase search — typing multiple words in the Find bar now matches the literal phrase across element boundaries (e.g. across term spans and page breaks).
  • ImprovedUnified mouseup interaction model: text selection, term clicks, and annotation clicks are now handled by a single prioritised handler with a context-sensitive tooltip.
  • ImprovedTerm and context clicks take priority over annotation highlight clicks when a term span is nested inside an annotation mark.
  • ImprovedAnnotated term occurrences (those with a saved glossary context) now show a light blue background for visual distinction.
  • ImprovedPhrase search navigation groups multi-node mark segments so the prev/next counter reflects phrase occurrences, not individual DOM fragments.

v2.0.0-beta.1

Reader Overhaul

2026-05-01

Complete rewrite of the text reader with a persistent progress bar, in-text search, inline context and term creation for professors, and a unified sidebar.

  • AddedPinned reading progress bar — appears after scrolling past the title, shows title, scroll progress, and quick-action controls.
  • AddedIn-text "Find" search bar with stem-aware term matching (single word matches inflected forms sharing the same stem).
  • AddedProfessors can create and edit glossary contexts directly from the reader by clicking any annotated term occurrence.
  • AddedProfessors can create new glossary terms directly from the reader by clicking any unhighlighted word.
  • AddedInline definition and tenor creation within the context panel — no need to leave the reader to add a new definition.
  • AddedDeep-link hash navigation — URLs like /texts/slug#term-{id}-{n} scroll to and highlight the specific occurrence on load.
  • AddedSame-page "Other Places" sidebar links re-fetch term data and scroll within the current text without a full navigation.
  • ImprovedTerm highlight state: active occurrence gets a bold outline; all other occurrences of the same term get a subtle fill.
  • ImprovedScroll position is remembered per text via localStorage and restored on return.
  • ImprovedText slugs used for all reader URLs; UUID-based legacy URLs redirect to the canonical slug.
  • ImprovedSearch highlighting correctly preserves nested child elements (term spans inside search marks, and vice versa).
  • FixedClicking the second term no longer required a double-click after the sidebar was already open.

v1.0.0

Foundation

2025-09-01

Initial release of GALGO. Core infrastructure for multi-tenant projects, TEI XML text processing, and the glossary system grounded in Halliday's social semiotic theory.

  • AddedMulti-tenant project architecture — each course or research group gets its own project with its own texts and glossary.
  • AddedTEI XML upload and processing — texts are parsed from TEI XML, cast lists, stage directions, and line numbers are styled automatically.
  • AddedGlossary system with terms, variations, definitions, tenors, and fields (Halliday: tenor, field, mode).
  • AddedInline term highlighting in the text reader — matched terms and their variations are underlined and clickable.
  • AddedTerm sidebar with definition, tenor, field, and links to other occurrences across texts.
  • AddedRole-based access control — admin, professor, and student roles with per-project permissions.
  • AddedUser authentication via email/password credentials and Google OAuth.
  • AddedProject invitation system — professors can invite students and co-instructors by email.
  • AddedText categories for organising readings within a project.
  • AddedPublic project and text visibility — projects can be made publicly browsable without login.
  • AddedFull-text search across all texts in a project using PostgreSQL tsvector.
  • AddedPublic read-only REST API (v1) for programmatic access to project texts and glossary data.
  • AddedAudit logging for all administrative actions (membership changes, user management).
  • AddedTransactional email via Resend — invitation, welcome, and password-reset messages.
  • AddedGlobal super-admin panel for managing users and projects across the platform.