Skip to content

fix: consolidated site UX & content fixes#202

Merged
rubenhensen merged 10 commits into
mainfrom
consolidate/site-ux-fixes
May 9, 2026
Merged

fix: consolidated site UX & content fixes#202
rubenhensen merged 10 commits into
mainfrom
consolidate/site-ux-fixes

Conversation

@dobby-coder

@dobby-coder dobby-coder Bot commented May 9, 2026

Copy link
Copy Markdown
Contributor

Consolidates 5 PRs into one, per dobby#53.

Includes

Each change touches a different file, so the merges are clean (no semantic conflicts).

Reviewer quickstart

```
git fetch origin && git checkout consolidate/site-ux-fixes && npm install --legacy-peer-deps && npm run dev
```

Closes #185, #186, #187, #188, #200 (issues referenced in those PRs).
Tracking issue: encryption4all/dobby#53

dobby-coder Bot added 10 commits May 9, 2026 13:35
Closes #183

The blog RSS button used a SvelteKit anchor with no reload hint. The
(marketing) layout sets trailingSlash: 'always', which causes the
client router to redirect /blog/rss.xml to /blog/rss.xml/ on
client-side navigation. The +server.js endpoint is prerendered to a
file at /blog/rss.xml, so the trailing-slash form falls through to
the SPA shell (or errors), and visitors saw a 500.

Adding data-sveltekit-reload makes the browser perform a full
navigation, bypassing the client router so the static file is served
directly. Direct URLs already worked because they are not subject to
the router's trailing-slash rewrite.
The default pg-js retry policy (5 attempts, 500ms initial delay,
multiplier 2) exhausts in ~7.5s of total wait time. That's shorter
than a typical cryptify service restart, so users see a hard failure
during what should be a recoverable outage.

Bump maxAttempts to 8 and initialDelayMs to 1000ms so the retry
budget covers ~90s of total wait — long enough to ride out a
restart while still failing fast for genuinely down backends.

Closes #181
Add a synchronous inline script in app.html that reads the user's theme
preference (localStorage 'preferredtheme', falling back to
prefers-color-scheme) and applies the .dark class to <html> before the
browser paints. Previously the class was only set during Svelte
hydration, causing a brief light-mode flash on every refresh in dark
mode.

Closes #180
Closes #182. The encryption/upload progress UI rendered by SendButton
exposed only a spinner and progress bar; users had no in-app way to
abort a long upload. Adds a Cancel button to the upload-info-box that
calls AbortController.abort() on the existing encryption/upload signal,
flips selfAborted so the catch path resets to FileSelection, and
provisions a fresh AbortController for the next attempt.
@rubenhensen rubenhensen merged commit df3ed53 into main May 9, 2026
12 of 13 checks passed
@rubenhensen rubenhensen deleted the consolidate/site-ux-fixes branch May 9, 2026 16:27
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