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
2e5fc42 to
2e8154c
Compare
2e8154c to
8a81075
Compare
8a81075 to
ad7dc66
Compare
ad7dc66 to
9a1581e
Compare
9a1581e to
bb847f5
Compare
bb847f5 to
b51eced
Compare
Review: cluster onboarding and dashboard design mockThis is a non-wired design mock, so my feedback is mostly about keeping it contained. I reviewed the PR metadata and a grep of the added lines. I couldn't read the full diff, so the points below are from that grep and not a line-by-line read. Things to check
Conventions
Code quality
Security and performance: No concerns. This is mock data with no backend calls. The admin token and endpoints shown must be hard-coded fake values, so make sure none of them look like real credentials. Overall this is reasonable for a mock. The main ask is to gate the routes out of production builds. |
b51eced to
868858f
Compare
868858f to
65b4791
Compare
65b4791 to
aba7288
Compare
Review: cluster onboarding and dashboard design mockI reviewed this from the PR diff and metadata. I didn't run the app, tests or Ladle, and I only skimmed Looks good
Suggestions
I found no security concerns. The PR only changes frontend code and nothing sends data to a backend. |
aba7288 to
9cd9fab
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.