177 Commits
Author SHA1 Message Date
MichelleandClaude Opus 4.8 849f54db7d chore: update version to 2.4.1
Build & Push Docker Image / build (push) Canceled after 0s
Build & Push Docker Image / build (release) Successful in 4m16s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.4.1
2026-07-16 09:03:40 +02:00
MichelleandClaude Opus 4.8 4e89d9d0fe feat: disable transcript/summary recording formats when transcription is off
Build & Push Docker Image / build (push) Successful in 4m16s
When the per-room AI summary/transcript setting is disabled (or the
integration is not configured), pass
meta_bbb-disable-recording-formats=transcript,summary on meeting create
so BBB skips processing and publishing those formats entirely
(bigbluebutton/bigbluebutton#25277).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 09:01:18 +02:00
MichelleandClaude Opus 4.8 4aeca36a9c fix: log underlying network error cause for failed transcription requests
Build & Push Docker Image / build (push) Successful in 4m5s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 12:30:17 +02:00
MichelleandClaude Opus 4.8 51b42cfee5 feat: add AI summary / transcript integration for recordings
Build & Push Docker Image / build (push) Successful in 4m17s
Build & Push Docker Image / build (release) Successful in 3m57s
Ported from greenlight-tm: when TRANSCRIPTION_API_URL and
TRANSCRIPTION_API_KEY are set in the .env and the per-room
"AI summary / transcript" setting is enabled, Redlight POSTs to
${TRANSCRIPTION_API_URL}/prompt (header X-Api-Key) as soon as the
"video" format of a recording becomes available.

- transcription.js: service with env gating, timeout and logging
- bbb.js: pass meta_bbb-recording-ready-url on meeting create when the
  room has the setting enabled
- recordings.js: unauthenticated /recording-ready callback that
  verifies BBB's signed_parameters JWT (HS256, shared secret), caches
  the recording and requests the transcription once per recording
  (deduped via transcript_requested_at)
- rooms: new recording_transcript column, accepted on create/update
- branding endpoint exposes transcriptionEnabled so the UI only shows
  the toggle when the server is configured
- RoomDetail: toggle under "Allow recording" (disabled when recording
  is off), de/en i18n
- chore: bump version to 2.4.0

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.4.0
2026-07-14 11:56:45 +02:00
MichelleandClaude Opus 4.8 dffb68efe5 fix: move resetPassword email locales to server i18n
Build & Push Docker Image / build (push) Successful in 4m9s
The password reset email is rendered server-side via emaili18n.js,
which loads translations from server/i18n. The email.resetPassword
keys only existed in the frontend src/i18n locales, so t() returned
the raw key paths in the sent email. Move the EN/DE block to the
server locales and drop the unused copy from the frontend.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 22:28:37 +02:00
MichelleandClaude Opus 4.8 db82cd944f feat: add password reset ("forgot password") flow
Build & Push Docker Image / build (push) Successful in 4m12s
Add a self-service password reset to the login flow:

- Login page now shows a "Passwort vergessen?" link under the password field
- New /forgot-password page requests a reset email by address
- New /reset-password page sets a new password from an emailed token
- Backend: POST /auth/forgot-password and /auth/reset-password with
  dedicated rate limiters; tokens stored as SHA-256 hashes with a 1h expiry
- Generic responses avoid leaking account existence or SMTP/SSO state;
  SSO-only accounts are skipped
- New sendPasswordResetEmail mailer + email/auth i18n keys (de + en)
- DB migration: reset_token_hash, reset_token_expires, reset_requested_at

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 23:40:11 +02:00
Michelle 2f65e53a24 fix: wrap screenshots in collapsible details section in README
Build & Push Docker Image / build (push) Successful in 4m6s
2026-06-21 22:17:58 +02:00
Michelle 1518645145 Merge branch 'main' of https://git.scrunkly.cat/Michelle/redlight
Build & Push Docker Image / build (push) Successful in 4m13s
2026-06-21 22:16:43 +02:00
Michelle 64a1ba2548 Add screenshots to README 2026-06-21 22:16:42 +02:00
MichelleandClaude Opus 4.8 03098eaf2b chore: update version to 2.3.0
Build & Push Docker Image / build (push) Successful in 4m5s
Build & Push Docker Image / build (release) Successful in 4m13s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.3.0
2026-06-11 10:18:48 +02:00
MichelleandClaude Opus 4.8 7dd834cd35 Harden server security, rework landing page and refresh branding
Build & Push Docker Image / build (push) Successful in 4m3s
Security:
- rooms: rate-limit /invite-email (SMTP spam relay), validate share
  target user exists, guard timingSafeEqual against length mismatch
  in the presentation route (500 -> 403)
- analytics: verify callback token before parsing the 5mb body so
  unauthenticated callers cannot buffer large payloads
- caldav: rate-limit failed Basic-Auth attempts (token brute force),
  lowercase email lookup, case-insensitive principal check
- auth: fall back to the in-memory rate-limit store when Redis is
  unavailable; previously every rate-limited endpoint (incl. login)
  returned 500 when the Redis connection was down

UI/copy:
- Home: factual hero copy and feature cards (6 instead of 9), fix
  double-rendered feature icon, remove fake stats row and pill badge;
  keep the background gradient and card layout
- i18n: consistent informal tone, drop trailing exclamation marks
  from status toasts, remove emoji from transactional emails
- new favicon (logo.svg), restore theme-based default brand logo

Chore:
- gitignore SQLite WAL/SHM files

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 10:14:36 +02:00
Michelle 4621010bd7 feat: add dark mode support for meeting join and start processes
Build & Push Docker Image / build (push) Successful in 4m14s
2026-06-11 09:27:34 +02:00
Michelle fbbcd79719 fix: prevent focus loss by using ref for onClose in Modal component
Build & Push Docker Image / build (push) Successful in 4m6s
Build & Push Docker Image / build (release) Successful in 4m12s
2.2.0
2026-06-03 10:40:38 +02:00
Michelle 10f0ffd2e5 chore: update version to 2.2.0
Build & Push Docker Image / build (push) Successful in 4m2s
Build & Push Docker Image / build (release) Successful in 4m6s
2026-06-02 09:21:42 +02:00
Michelle 4aea069295 fix: resolve server bugs and unify app-name handling
Build & Push Docker Image / build (push) Successful in 4m6s
Bug fixes:
- bbb.js: replace undefined t('defaultWelcome') call that threw a
  ReferenceError when a room had an empty welcome message, breaking
  meeting creation. Default welcome and the guest-invite hint are now
  localised via the i18n system (new "bbb" namespace in de/en).
- auth.js: app name was read from the never-written 'branding' settings
  key, so custom names never appeared in verification emails or the TOTP
  issuer. Now resolved through a shared getAppName() helper.
- auth.js: lowercase the email in the registration duplicate check so
  case-variant duplicates return a clean 409 instead of a 500 (UNIQUE
  violation).
- federation.js: select the user's "language" column so federation
  invite emails respect the recipient's language instead of always
  defaulting to English.
- calendar.js: a set reminder could not be cleared. COALESCE treated an
  explicit reminder_minutes: null as "keep existing"; use a direct
  assignment that distinguishes "omitted" (keep) from "null" (clear).
- index.js / analytics.js: exclude the BBB learning-analytics callback
  from the global 100kb body limit and give it its own 5mb limit, since
  analytics payloads for large meetings can be several MB.

Cleanup:
- Add server/config/appName.js as the single source of truth for the
  app name (admin setting -> APP_NAME env -> 'Redlight') and use it in
  auth, admin, rooms, calendar and federation, replacing the previous
  mix of wrong DB key, direct app_name reads and bare process.env reads.
- Localise the BBB default welcome message in the room owner's language.
- Remove two unused safeAppName variables in mailer.js.
2026-06-02 09:19:21 +02:00
Michelle 9fc51bdfc5 chore: update version to 2.1.4
Build & Push Docker Image / build (push) Has been cancelled
Build & Push Docker Image / build (release) Successful in 4m14s
2.1.4
2026-05-28 10:14:41 +02:00
Michelle 7f48685717 Enhance accessibility and improve form semantics across multiple pages
Build & Push Docker Image / build (push) Successful in 4m4s
- Added `htmlFor` attributes to labels for better accessibility in Calendar, Dashboard, GuestJoin, Login, Register, RoomDetail, and Settings pages.
- Included `aria-hidden` attributes for icons to improve screen reader experience.
- Set `autoComplete` attributes for input fields to enhance user experience during form filling.
- Implemented `role` and `aria` attributes for radio groups and buttons to improve accessibility compliance.
2026-05-28 10:07:19 +02:00
Michelle cff5398ebd fix: restore pointer cursor for buttons in index.css
Build & Push Docker Image / build (push) Successful in 4m10s
2026-05-28 09:22:50 +02:00
Michelle 109e75d976 fix: add .claude/ to .gitignore and update cursor styles for button utilities in index.css
Build & Push Docker Image / build (push) Failing after 19m25s
2026-05-28 09:08:17 +02:00
Michelle 24024cd1dd chore: update version to 2.1.3 in package.json and federation.js
Build & Push Docker Image / build (push) Successful in 4m18s
Build & Push Docker Image / build (release) Successful in 4m18s
2.1.3
2026-05-18 13:17:02 +02:00
Michelle 4028e913c4 refactor: update class names for consistency and improve styling
Build & Push Docker Image / build (push) Successful in 4m21s
- Changed `flex-shrink-0` to `shrink-0` in multiple components for better consistency.
- Updated button and checkbox classes to use `rounded-sm` for a more uniform appearance.
- Adjusted backdrop blur classes for modals to `backdrop-blur-xs` for a subtler effect.
- Removed unused Tailwind CSS configuration file.
2026-05-18 13:07:26 +02:00
Michelle aba7819f12 chore: update dependencies and versions in package-lock.json
Build & Push Docker Image / build (push) Successful in 4m5s
2026-04-25 20:34:23 +02:00
Michelle 45fdbe4883 feat: enforce maximum password length of 64 characters in user registration and password update
Build & Push Docker Image / build (push) Successful in 4m19s
2026-04-25 20:30:29 +02:00
Michelle de696d422a fix: anyone_can_start not working as Admin
Build & Push Docker Image / build (push) Successful in 4m24s
2026-04-23 09:32:55 +02:00
Michelle 995d6eabf7 feat: remove unnecessary footer text from home page
Build & Push Docker Image / build (push) Successful in 4m19s
2026-04-09 14:01:01 +02:00
Michelle 9ee4f84d84 feat: update home page features with federation, calendar, notifications, OAuth, and analytics support
Build & Push Docker Image / build (push) Successful in 4m24s
2026-04-09 13:52:33 +02:00
Michelle df1aa20e45 feat: add recordings table and implement fetch and sync functionality for recordings
Build & Push Docker Image / build (push) Successful in 4m18s
2026-04-08 00:10:25 +02:00
Michelle e0ce354eda feat: improve email invitation label for clarity and add navigation on guest join
Build & Push Docker Image / build (push) Successful in 4m19s
2026-04-02 01:03:18 +02:00
Michelle 1690a74c19 feat: add email invitation functionality for guests with support for multiple addresses
Build & Push Docker Image / build (push) Successful in 4m21s
2026-04-02 00:54:57 +02:00
Michelle 61585d8c63 feat: add functionality to display all rooms with search and modal support in admin panel
Build & Push Docker Image / build (push) Successful in 4m17s
2026-04-01 12:05:51 +02:00
Michelle d04793148a feat: add room management functionality for admins with listing and deletion options
Build & Push Docker Image / build (push) Successful in 4m12s
2026-04-01 11:54:10 +02:00
Michelle 9bf4228d04 fix: update presentation display to show filename instead of name
Build & Push Docker Image / build (push) Successful in 4m21s
2026-04-01 11:34:48 +02:00
Michelle c058ba3bf1 fix: update presentation URL structure for token protection
Build & Push Docker Image / build (push) Successful in 4m13s
2026-04-01 09:43:32 +02:00
Michelle b3b559e164 feat: implement token-based access for presentation files and add serving endpoint
Build & Push Docker Image / build (push) Successful in 4m43s
2026-04-01 08:52:43 +02:00
Michelle 0db9227c20 chore: update package-lock.json with dependency version bumps
Build & Push Docker Image / build (push) Successful in 4m18s
2026-03-31 13:11:56 +02:00
Michelle 30f106a7ea fix: guest join doesn't add avatar when logged in
Build & Push Docker Image / build (push) Successful in 4m27s
2026-03-31 09:36:13 +02:00
Michelle 8cbe28f915 chore: bump version to 2.1.2 and update user name handling in GuestJoin component
Build & Push Docker Image / build (push) Successful in 4m28s
Build & Push Docker Image / build (release) Successful in 4m20s
2.1.2
2026-03-26 09:40:41 +01:00
Michelle 5472e190d9 chore: Bump version to 2.1.1
Build & Push Docker Image / build (push) Successful in 4m19s
Build & Push Docker Image / build (release) Successful in 4m12s
2.1.1
2026-03-25 11:34:38 +01:00
Michelle 45be976de1 Don't show guestWaitingMessage when "anyone_can_start" is set
Build & Push Docker Image / build (push) Successful in 4m14s
2026-03-25 10:13:02 +01:00
Michelle 6dcb1e959b feat: allow guests to start a room if anyone_can_start is enabled
Build & Push Docker Image / build (push) Successful in 4m58s
2026-03-25 09:55:47 +01:00
Michelle bb2d179871 style: Update button styling and icon size in RecordingList component for improved UI
Build & Push Docker Image / build (push) Successful in 4m29s
2026-03-24 11:28:15 +01:00
Michelle 82b7d060ba Merge remote-tracking branch 'refs/remotes/origin/main'
Build & Push Docker Image / build (push) Successful in 4m34s
2026-03-16 13:32:45 +01:00
Michelle 0836436fe7 feat: Implement Two-Factor Authentication (2FA) for enhanced user account security. 2026-03-16 13:28:43 +01:00
Michelle 99d3b22f62 chore: update bcryptjs and better-sqlite3 dependencies; upgrade dotenv version
Build & Push Docker Image / build (release) Successful in 4m5s
Build & Push Docker Image / build (push) Successful in 3m59s
2.1.0
2026-03-13 23:00:38 +01:00
Michelle eed5d98ccc chore: update dependencies for Vite and React plugin
Build & Push Docker Image / build (push) Successful in 4m9s
2026-03-13 22:48:08 +01:00
Michelle 6513fdee41 fix(Dockerfile): update base image and streamline build stages
Build & Push Docker Image / build (push) Successful in 4m17s
2026-03-13 22:41:18 +01:00
Michelle cae84754e4 feat: add analytics visibility settings and export functionality
Build & Push Docker Image / build (push) Successful in 5m11s
- Added `analytics_visibility` column to `rooms` table to control who can view analytics data.
- Updated analytics routes to check visibility settings before allowing access and export of analytics data.
- Implemented export functionality for analytics in CSV, XLSX, and PDF formats.
- Enhanced `AnalyticsList` component to include export options for analytics entries.
- Updated room detail page to allow setting analytics visibility when creating or editing rooms.
- Added translations for new analytics visibility options and export messages.
2026-03-13 22:36:07 +01:00
Michelle a0a972b53a fix(NotificationContext): ensure audio playback is unlocked only for authenticated users
Build & Push Docker Image / build (push) Successful in 6m32s
2026-03-13 13:00:54 +01:00
Michelle 9b98803053 fix(NotificationContext): handle user ID for notifications fetching and prevent stale responses
Build & Push Docker Image / build (push) Successful in 6m6s
2026-03-13 12:43:20 +01:00
Michelle e43e7f5fc5 fix: update license information to GNU GPL v3 in README, package.json, and package-lock.json
Build & Push Docker Image / build (push) Successful in 6m7s
Build & Push Docker Image / build (release) Successful in 6m14s
fix: Add valkey to compose in case system is too old for DragonflyDB
2.0.0
2026-03-13 12:11:32 +01:00