Repository navigation
feat(frontend): add cluster onboarding and dashboard design mock - #5849
NicholasKissel wants to merge 1 commit into
Conversation
|
🚅 Deployed to the rivet-pr-5849 environment in rivet-frontend
|
| export const SETUP_PROMPT_URL = "https://rivet.dev/agent-setup/prompt.md"; | ||
|
|
||
| /** | ||
| * The one line the user pastes into their agent. Everything else (skills, | ||
| * MCP server, CLI) lives in the file at SETUP_PROMPT_URL, like Cloudflare's | ||
| * agent-setup/prompt.md, so the dashboard never has to explain per-client | ||
| * install steps. | ||
| */ | ||
| export const SETUP_PROMPT = `Fetch and execute the appropriate instructions to set me up for Rivet from ${SETUP_PROMPT_URL}`; |
There was a problem hiding this comment.
🟠 Medium · The copied setup prompt points to a 404
The dashboard's primary “Connect your agent” action copies this string, but https://rivet.dev/agent-setup/prompt.md currently returns HTTP 404 and this PR does not add anything that publishes the setupPrompt() content below. An agent following the copied instruction therefore cannot perform any setup. Publish the prompt at this URL as part of the change, or have the button copy the generated instructions directly until that endpoint exists.
| ); | ||
| const [logs, setLogs] = useState<NamespaceLog[]>(() => | ||
| actors | ||
| .flatMap((actor) => |
There was a problem hiding this comment.
🟠 Medium · Namespace changes keep showing the previous namespace's logs
This state is initialized once from useCase and region; the namespace prop is used only in the export filename. Selecting another namespace therefore leaves the same actor history and live stream visible—even a newly created namespace whose table row says it has zero actors immediately shows production logs. Key or regenerate the mock log state by namespace (with empty data for a new namespace), so switching namespaces actually changes the isolated dataset.
| } = useLogScroll({ | ||
| logs: visible, |
There was a problem hiding this comment.
🟠 Medium · Filtering can leave stale rows visible
useLogScroll intentionally freezes its input while follow is false and only accepts a replacement when the first entry changes. After scrolling up, a filter whose matches retain the same first row—or a filter with zero matches—therefore keeps rendering the old unfiltered displayedLogs, while the counter and export use the filtered visible array. Reset following/frozen state when the filter changes, or filter displayedLogs after the scroll hook so the rows, count, and export stay consistent.
| title="Cluster name" | ||
| description="Used in your endpoint hostname and in the dashboard." | ||
| > | ||
| <Input | ||
| {...form.register("name", { required: true })} |
There was a problem hiding this comment.
🟠 Medium · Cluster names can generate invalid endpoints
required accepts whitespace and arbitrary punctuation, but clusterEndpoints() later turns this value directly into a DNS label and S3 bucket. For example, !!! provisions successfully and displays https://---.us-east-1.rivet.run with bucket ---, while a whitespace-only name becomes an empty/invalid label. Validate the submitted name against the actual cluster/DNS naming rules (including nonempty normalized output and length) and show the validation error before provisioning.
c82ae4f to
886260d
Compare
|
Review: cluster onboarding design mock Well-scoped, self-contained mock. It sits outside the authed route tree, the pricing model has unit tests, and the production gating is sensible. Should fix
Conventions (CLAUDE.md)
Minor
Tests |
886260d to
a4d5a93
Compare
a4d5a93 to
6c0eb14
Compare
6c0eb14 to
7bb99e8
Compare
|
Review: v3 cluster onboarding design mock Overall this is a self-contained mock. It sits under Issues worth addressing
Style
Tests Security Nothing blocking. Items 1, 2 and 5 are the ones I would resolve before merging. 🤖 Generated with Claude Code |
7bb99e8 to
092bb7f
Compare
092bb7f to
52a1175
Compare
52a1175 to
38390df
Compare
38390df to
145f9fa
Compare
145f9fa to
3427ef3
Compare
3427ef3 to
6ab0d69
Compare
6ab0d69 to
46da0e0
Compare
46da0e0 to
fe70ac3
Compare
fe70ac3 to
2e5fc42
Compare
868858f to
65b4791
Compare
65b4791 to
aba7288
Compare
|
Review: cluster onboarding design mock Overall this is a well-scoped mock. It's gated to dev and demo builds, it uses Issues and suggestions
Nits
No security or performance blockers for a dev and demo-only mock. Items 1, 2 and 4 are the ones I'd address before merge. |
aba7288 to
9cd9fab
Compare
9cd9fab to
19299f2
Compare
19299f2 to
56a1abf
Compare
56a1abf to
fae4cd1
Compare
ReviewFrontend-only design mock, so risk is low. It uses react-hook-form for the create form and the allowlist input, and the mock routes are gated behind Worth addressing
Tests
Nits
Overall this looks reasonable as a mock. The main ask is a safer story for |
fae4cd1 to
9c796d8
Compare
|
Review: cluster onboarding and dashboard design mock This is a frontend-only mock with no backend wiring, so the risk is low. The code is deterministic and well-structured, and it has unit tests for Should fix
Nits
Security and performance Tests |
9c796d8 to
5c2651f
Compare
Review: cluster onboarding and dashboard design mockThis is a large mock-only PR (about 8k lines, nothing wired to a backend). The structure is sensible. The mock routes are gated, the pricing and model logic have unit tests ( Gating of the mock routes
CLAUDE.md conventions
Quality and maintainability
Performance
Tests
Overall this looks fine to merge as a design mock once the em dashes are fixed, the effects are justified, and the demo-route guard is confirmed. Consider trimming the lab and exploration files. |
5c2651f to
3b59ec9
Compare
3b59ec9 to
b447f67
Compare
b447f67 to
ca56c20
Compare
ca56c20 to
034fd11
Compare
Interactive design mock (not wired to a backend) of the v3 cluster onboarding and cluster dashboard, rendered inside the real frontend shell so it picks up the dashboard theme in light and dark mode.
Try it:
/mock/cluster-onboardingon the dev server (create page) or?view=dashboardfor a provisioned cluster. Ladle stories undercluster-onboarding/*.Create page
Dashboard
Pricing, node sizes, and provisioning timings are invented placeholders.