Projects

No projects available

Navigation

Home
Login

Changelog

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

v2.0.0-beta.22

Invite System & EmailCurrent

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.