Skip to content

fix: smooth out sign-in, Add Text, activity counts and dark theme - #334

Merged
HugoFara merged 2 commits into
developfrom
fix/polish-after-production-test
Nov 4, 2026
Merged

HugoFara merged 2 commits into
developfrom
fix/polish-after-production-test

Conversation

@HugoFara

@HugoFara HugoFara commented Nov 4, 2026

Copy link
Copy Markdown
Owner

The smaller problems from testing 3.8.0 on production with real data. The blocking ones are in #333. The two PRs both add to CHANGELOG.md, so the second to merge will need that resolved.

Changes

  • Sign-in pages. BaseController::render($title, false) now calls a new renderAuthPageStart(), which drops the page logo and title that these pages repeat inside their card. A .auth-page CSS block gives one centred card, up to 26rem wide. This covers login, registration, password recovery and the Google and Microsoft link pages. The card used to be about 195px wide on desktop.
  • Email banner. New User::needsEmailVerification(), so accounts with no email no longer see the banner. The profile notice follows the same rule.
  • Add Text page. gutenbergBrowser loads only once it is on screen, instead of fetching stats for every suggested book while hidden. library-preview has its own rate-limit bucket, so previews cannot use up the quota a save needs.
  • Activity. createTermFull() and insertWordWithStatus() now count new terms. A text counts as read once per day per session rather than on every page load.
  • Reader. updateWordTranslationInDOM() adds the annotation to a word that had none when the text rendered.
  • Dark theme. has-background-*-light became -soft, as already done on the statistics page. Annotations, the Search Library icon and empty calendar days are also readable now.
  • Anki import. Removed the view <h1> that repeated the page title.

Left as it is

The term dialog still uses a native confirm() for unsaved changes. It works for users, and it only froze the automated browser during testing.

Tests

New tests cover the rate-limit bucket, annotations, needsEmailVerification() and the existing suites. The Gutenberg lazy load, activity counts and CSS have no automated test. I checked the layouts by hand in Chrome: register and forgot password on desktop, Arabic register, and register at 320, 390 and 600px through an iframe, with no horizontal scroll. The dark home and statistics pages were also checked by hand.

Psalm, PHPCS on the changed PHP files, PHPUnit, integration tests, Vitest, ESLint and TypeScript pass. Cypress passes except 24-anki-live.cy.ts, which needs npm run anki:up and was not run.

Problems found while testing 3.8.0 on production with real data.

- Sign-in pages are one centred card. They no longer repeat the logo and
  title above a form that was about 195px wide.
- The "Email not verified" banner and profile notice skip accounts with no
  email address.
- The Gutenberg browser waits until it is on screen, and library previews
  count separately, so they cannot make saving a text fail with HTTP 429.
- Terms added from the reader count as created, and a text counts as read
  once a day rather than on every page load.
- A new term's translation appears under the word without a reload.
- Dark theme: readable annotations and home and starter cards, and dark
  empty days on the activity calendar.
- Anki import pages no longer show their heading twice.
@HugoFara
HugoFara merged commit f2c5fc6 into develop Nov 4, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant