Repository navigation
Registry website: Inertia (React) rebuild from the Waypoints design - #8
Merged
Merged
Conversation
…design The publisher website and staff review console, served by the Laravel app with Inertia v3, React 19, Tailwind v4 and Vite, replacing the Ember prototype. - Page controllers (app/Http/Controllers/Web) read through the /v1 API controllers in process, so props have the API's JSON shapes; pages write to /v1 with the session cookie and XSRF header. Website routes use auth:web; unknown paths render the website 404. - Public: Discover (search, intents, filters, console compatibility), extension pages with install steps and a version check, publisher profiles. - Account: sign in, create account, email code, profile and password, organizations and members, personal tokens shown once. - Studio: inbox, new listing, the listing editor with a live readiness rail, uploads, live release checks, submit / withdraw / rejected states, history, insights placeholder. - Review console: queue with tabs, filters and J/K, the R1 to R6 decision rail, publish, suspend and lift, the To publish page. - Light and dark themes, phone layouts, error pages through Inertia. - Vitest component and page-logic tests, Pest page tests, a Playwright smoke test with its own seeded server (scripts/e2e-server.sh), CI jobs, and a Docker stage for the assets.
…nd Studio features
Catalog
- GET /v1/catalog/extensions takes console=<version> (each item gets compatibility:
{console, compatible, newest_compatible}) and compatible=1 (only listings with a published
release for that console). Discover filters on the server, so counts and pages cover the
whole catalog; ?compat=any shows every version.
Server-side rendering
- The SSR bundle is self-contained (ssr.noExternal), listens on 127.0.0.1 and takes
INERTIA_SSR_PORT. The Docker image installs Node and runs it as an s6 service beside nginx
and php-fpm (docker/s6/inertia-ssr); INERTIA_SSR_ENABLED=false turns it off.
- The Playwright server runs the renderer with SSR errors failing the request; tests wait for
hydration (html[data-ready]). Write forms are method=post and the search and version check
forms are real GET forms, so nothing typed before hydration lands in a URL.
Account
- Forgot password: POST /v1/auth/password/forgot (no enumeration) and /reset with a six-digit
code; resetting revokes every token and session. Codes now die after five wrong guesses.
- Sign in with GitHub (laravel/socialite): match by github_id, then verified email, else a
new account; connect and disconnect on the profile. accounts.github_id becomes unique.
Studio
- GET /v1/publisher/packages/availability, sharing one rule set (PackageNames) with create;
live Available chips on the new-listing page.
- submitted_at and decided_at on release summaries: "Submitted N days ago" and "day N".
- PATCH /v1/publisher/releases/{id} edits release notes (not when yanked).
- Drag to reorder screenshots, keeping the buttons for keyboard and screen readers.
Review console
- previous_version (and the previous release) on admin release responses, without N+1:
"Update from vX" in the queue and what changed since it on the release page.
- Request changes on an approved release, from the release page and To publish.
Also: Vitest timeout 20 s for slow CI runners.
The plugin refuses to start its dev server when CI is set, which failed the Vitest step. Tests need neither the manifest nor the hot file.
This was referenced Oct 23, 2026
… the organization page for owners and admins
… under an hour in the queue; pluralize the release count
…he first one; mock Inertia in the instance code card test
…API error like the other pages
roncodes
changed the base branch from
feat/publisher-website
to
release/v2.0.0
October 24, 2026 09:21
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 free
to 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.
Stacked on #6 (the website backend). Once #6 merges into
v2, retarget this PR tov2.The publisher website and staff review console, built with Inertia v3, React 19, Tailwind v4 and Vite inside the Laravel app, following the Waypoints design canvas. It replaces the Ember prototype, which is archived on
archive/website-ember-prototype.Pages
How it works
app/Http/Controllers/Webcall the/v1controllers in process, so page props are the API's JSON. Pages write to/v1with the session cookie and XSRF header.npm run buildproduces a self-containedbootstrap/ssr/ssr.js. The Docker image installs Node and runs it as an s6 service (docker/s6/inertia-ssr). Without it, pages render in the browser.API additions
GET /v1/catalog/extensions?console=&compatible=1POST /v1/auth/password/forgot,POST /v1/auth/password/resetGET /auth/github,GET /auth/github/callback,DELETE /v1/account/githubGET /v1/publisher/packages/availabilityPATCH /v1/publisher/releases/{id}Response changes:
submitted_atanddecided_at.previous_versionandprevious.Migrations:
verification_codes.attempts: codes die after five wrong guesses.accounts.github_login, andaccounts.github_idbecomes unique.Configuration:
GITHUB_CLIENT_ID,GITHUB_CLIENT_SECRET,GITHUB_REDIRECT_URI, all empty in.env.example. The GitHub button only shows once they are set.Tests
website(ESLint, Vitest, build) andwebsite-e2ejobs.node bootstrap/ssr/ssr.jsruns beside php-fpm and nginx, and/is served server-rendered.Decisions for review