Uh oh!
There was an error while loading. Please reload this page.
web(shell): embedded SvelteKit interface for setup, sign-in, recovery, and status - #7
Merged
Merged
Conversation
…, and status
Implement the Milestone 1 web shell (docs/architecture.md User
interface):
- web/: SvelteKit 2 + Svelte 5 single-page app (adapter-static, SSR
off) with pages for first-run setup, sign-in, password reset, and a
signed-in status view showing agency, user, capabilities, session
expiry, health, and version, plus manage_users-gated reset-code
issuance and sign-out
- client routing guard driven by new unauthenticated GET /api/instance
({initialized, version, agency}); authorization stays server-side
- rust-embed serves the built assets from the executable (disk-backed
in debug builds); unknown non-API paths fall back to the SPA entry,
unknown /api/* paths stay JSON 404s; immutable cache headers for
content-hashed assets
- a cargo-only build still compiles via a build-script placeholder and
serves an honest 503 notice plus a startup warning instead of an
interface
- pr-gate builds and checks web/ before the Rust gates so CI proves the
embedded interface
- Rust integration tests for asset serving, SPA fallback, and instance
state; Playwright E2E (web/e2e) drives the compiled binary through
setup, sign-in, failed-login, reset-code issuance, password reset,
and sign-out in a real browser
- ADR 0005 records the toolchain and embedding decisions
Closes#6Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Primary Issue
Closes#6
Problem And Outcome
Authentication was API-only; initializing an installation took curl. After merge, a browser pointed at a fresh installation completes the whole Milestone 1 shell — setup, sign-in, status, reset-code issuance, password reset, sign-out — served from the single executable with no Node.js at runtime.
Changes
web/: SvelteKit 2 + Svelte 5 TypeScript SPA (adapter-static, SSR off): first-run setup wizard, sign-in, password reset, and a status view (agency, user, capabilities, session expiry, database health, version) withmanage_users-gated reset-code issuance and sign-out; accessible baseline (labels, alerts, focus styles, light/dark)GET /api/instance({initialized, version, agency}) drives the client routing guard; authorization stays entirely server-siderust-embedembedsweb/build(release) or reads it from disk (debug); the router fallback serves assets, hands unknown non-API paths the SPA entry, keeps unknown/api/*as JSON 404s, and sets immutable cache headers for content-hashed filesnpm ci/npm run check/npm run buildbefore the Rust gates, with an npm cacheScope
Verification
Review And Merge Notes
web_assets.rsweb/need Node.js at build time only