Skip to content

PRDCT-487: the hub opens like a course, and the clip shows what the guide is for - #1144

Draft
Iamfle4ka wants to merge 11 commits into
PRDCT-487-rebuild-wave1from
PRDCT-487-hub-course
Draft

Iamfle4ka wants to merge 11 commits into
PRDCT-487-rebuild-wave1from
PRDCT-487-hub-course

Conversation

@Iamfle4ka

@Iamfle4ka Iamfle4ka commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

Stacked on #1116. The seven task pages already open like lessons: genre and time, a state sentence, prerequisites, a check. The hub was the one page that did none of it, and it opened with the guide's question before the reader knew what a café had to do with anything. Nikita's read on 23 September: no sense of why the section exists, what the sample is, or what one learns.

What changes

Commit 1, this one. The hub opens the way a course does: one dry paragraph of what Keboola is for, whose five verbs are the five task pages; the clip; the state block the other pages carry; the sample in three sentences with the question as the goal every step works toward; what you need; then the table, whose "What happens" column is now "What you'll be able to do". No new list, so nothing gets more complex. The intro goes from 74 to about 200 words and the page stays inside its five minutes.

Commit 2, on this branch. The clip hub-demo replaces outlook-tour: two real questions to the table with Kai's answers, the app prompt field, the grid, the Apps list, and a closing line pointing at the seven steps. 26 seconds, 577 KB, shot in project 264 with no objects created.

Two small fixes the guide test turned up on the way: load/ defined <your-stack> as the full host and then wrote https://connection.<your-stack>/…, which builds a dead URL; and the app/ author note said the managed Git credentials were working again, while today's 04:07 UTC run failed on them.

Decisions this PR changes

Decision Whose What changes Status
The hub opens with the question (14 Sep) Michal's dryness rule, Nikita First line is the "why" paragraph; the question becomes the goal, after the sample Nikita, 23 Sep, as owner. The rules of 2 Sep hold: dry, structure from user needs, MCP and CLI stay vehicles in "Where to start instead"
Hero clip keeps three acts, files then question then grid (21 Aug) Jordan Six beats: ask, ask, describe, grid, apps, pipeline VERIFY(Jordan). Fallback: a 4-second prefix from the file cards and one beat fewer
Poster is the question frame, question sits right above the clip (21 Aug) Jordan Poster is the grid with its caption; the question sits below the clip VERIFY(Jordan). The intent, answerable without reading, holds: the poster is the answer

What the checks changed

The fact-checker and the guide-tester read the first draft. The fourth verb was "put the answer in front of someone"; the app page ends at a private draft because publishing has not succeeded in 264, so the hub says "turn the answer into an app" and its description no longer says "publish". "A free project covers all of it" became "is enough to begin", with three open questions in a VERIFY(owner) note (data apps on the Free Plan, Kai on us-east4, 60 runtime minutes against a daily flow) and its link moved from the wizard to Get a project. "Nothing needs installing" is scoped to the browser paths, naming kbagent for the command-line way, because that is the path an agent reads.

Not in this PR, logged in MISSING: a "build an app from Claude Code or Cursor via MCP" path. No section documents one, the production deploy has failed for nine days, and Apps owns the surface (PRDCT-692). For the Apps owner: data-apps/getting-started.md still promises a live app in ten minutes; this hub now shows apps on its first screen, which makes that contradiction visible from the front page.

Update, 25 Sep: a bright clip and a concrete "Before you start"

Nikita's review of the preview, 24 Sep: the clip was dark, and "Before you start" read as scattered prose instead of the things a reader needs.

The clip is bright. The 23 Sep cut averaged a luma of 71 of 255 against 229 for its screenshots, because a scrim dimmed everything around each highlight. The third cut has no scrim and no camera move: a blue outline marks the point, captions are 22 px (13.75 px at the page's width) and stay up more than 3 s, the grid's outline sits on the two red figures, and every caption uses words the hub already has. 27.1 s, 579 KB, luma mean 223, never under 221. The poster is Kai's one-line answer rather than the grid, because the grid's own screenshot slices the Brno row and a taller capture needs the app running, which its broken deploy prevents. Same screenshots from project 264; nothing new was created there.

"Before you start" is two lists on all 11 pages: "You need" (the things, one per item, with where to get them) and "Depending on the tab you use" (a line per tab). Each page can override its own tab line; one global line per tab was false on three pages (the UI tab of ask/ needs a workspace, the UI tab of app/ is a Git repository and your own code, kbagent kai ask needs kbagent connected through kbagent project add with an admin token). The markdown twin shows the same checklist to agents.

Checked by a new checker agent (it reads the user's own messages from the session log, measures clips and lists outward actions) until it said PASS on both, plus the fact-checker and the guide-tester, whose findings are in the commits.

Known and not done here:

  • The hub's box lists only what starting needs (an email address or an invite, and a browser), without the tab lines the plan had; the hub explains tabs further down. Nikita to confirm.
  • ad-hoc/ still has a prose "Before you start" (outside these 11 pages).
  • Clip polish the checker left as minor: the outline touches the text's left edge on the two Kai beats; "Ask a what-if" is on the Ask page but not the hub; the Kai answers are 23 Sep's week and the grid is 14 Sep's.
  • transform/workspace's admin-token claim carries VERIFY(owner): our CLI pages say so, the platform code does not.
  • In MISSING: tab content that only works on Snowflake while new projects default to BigQuery; automate/'s CLI flow has no note on dropping the app phase; the static-token list on cli/getting-started.mdx.

Verification

Build 376 pages; audit 55 issues, 0 broken internal links, 0 missing images; CLI gate 0 findings; link and redirect check 0 blockers, 0 warnings. The markdown twin carries the intro and no author notes. Humanizer pass on the new prose. Fact-checker and guide-tester reports are summarised above.

🤖 Generated with Claude Code

Nikita and others added 2 commits September 23, 2026 18:58
…goal

The seven task pages open like lessons: genre and time, a state sentence, prerequisites, a check. The hub did none of it and led with the question, 74 words before the table. Nikita, 23 Sep: no sense of why the section exists, what the sample is, or what one learns.

Coursera's Google Data Analytics and the DeepLearning.AI short courses open in one order: why, what you will be able to do as verbs, the outline, prerequisites; the introduction is the shortest lesson. The hub follows that order now. A dry paragraph of what Keboola is for, its five verbs the five task pages; the clip; the state block every other page carries; the sample in three sentences with the question as the goal; what you need; then the table, its column renamed from What happens to What you'll be able to do. No new list.

The fact-checker and guide-tester read the first draft and changed three things. Put the answer in front of someone became turn the answer into an app, because the app page ends at a private draft. A free project covers all of it became is enough to begin, with the three open questions in a VERIFY(owner) note and the link moved from the wizard to Get a project. Nothing needs installing is scoped to the browser paths, with kbagent named for the command-line way.

DECISIONS carries the entry, with two of Jordan's 21 Aug decisions about the clip marked VERIFY(Jordan) ahead of commit 2. MISSING carries the MCP app path, the data-apps page contradiction, the twin dropping PageMeta, and the approval-count mismatch.

Build clean; audit 55, 0 broken links, 0 missing images; CLI gate 0; link check 0/0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
load/ defines <your-stack> as the full host you sign in at, connection.europe-west3.gcp.keboola.com for example, and then wrote the raw request as https://connection.<your-stack>/v2/..., so a reader who substitutes as told builds connection.connection.europe-west3... and gets nothing. The guide-tester caught it. The URL now starts at <your-stack>, the only place in the section that used the prefix.

app/'s author note recorded on 09-22 that the managed Git credentials were working again. The 04:07 UTC run on 09-23 (01a0cc72-9400-76da-b211-3e7d2afee913) failed on them once more, StartupProbeFailed with Credentials are incorrect or have expired, so the note now says both causes are live.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
connection-docs Ready Ready Preview Sep 25, 2026 3:45pm UTC

Request Review

@linear-code

linear-code Bot commented Sep 23, 2026

Copy link
Copy Markdown

PRDCT-487

hub-demo.mp4 replaces outlook-tour.mp4: 26 s, 577 KB, six beats. Kai answers which café is short-handed, with the headline and the table; Kai answers the what-if of one extra person, with the With +1 column; the Create App screen with the guide's own prompt in the field, never sent; the draft-preview grid; the project's Apps list cut to the Name column; the grid again, dimmed, under a line pointing at the seven steps. Poster is the grid frame with its caption, the answer to the question.

Shot in 264 on 23 Sep at 2x. Every frame is cropped below the top bar and away from the chat history and the Last Change column, so no name, avatar or e-mail is in frame, and the contact sheet was read frame by frame. The two Kai questions are read-only and the prompt was never sent, so the shoot created nothing to clean up.

Built as six one-stop compositor scenes recorded separately and concatenated, because a scene takes one background; the compositor (in the rig) now sizes the background from the scene and lets a scene place its chip. Kai's dates and figures are that day's, and the page says the answer moves.

Two of Jordan's 21 Aug decisions change: the three-act structure and the question frame as poster. Both carry VERIFY(Jordan) in DECISIONS.md, with the fallback of a file-card prefix if he keeps the first act. CONSERVATION records where each act of the old clip now lives; MISSING updates the hero-clip row.

Build clean; audit 55, 0 missing images; link check 0/0, including the video and poster paths.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Nikita and others added 6 commits September 25, 2026 14:51
Nikita, 24 Sep: the block read as scattered prose, and he wanted the concrete things a reader
needs to start. The eleven boxes had drifted into different shapes. Some items were things, some
explanations or reassurance; load/ said "Nothing else. No installs" and then asked for kbagent;
Kai was listed on 2 of the 9 pages whose Prompt tab needs it, kbagent on 3 of 8.

Now one box, two lists. "You need" holds the things, one per item, thing first and then where to
get it. "Depending on the tab you use" gives a line per tab. Defaults live in prereqs.mjs, and a
page overrides its own tab line with a named slot, because the first version, one global line per
tab, was false on three pages. The checks caught that: the UI tab of ask/ needs a workspace, the UI
tab of app/ is a Git repository and your own code, app/'s Prompt tab is Kai under Apps > Create
App, creating a workspace needs an admin token, and kbagent kai ask needs a static master token.

The hub has no tabs and explains them further down, so its box lists only what starting needs,
an email address or an invite and a browser, and points at "How every page works".

The markdown twin renders both lists with each page's overrides, so an agent reading /index.md
gets the same checklist. CONSERVATION records the four sentences that moved and the one retired;
DECISIONS the reasoning; MISSING three things the checks found outside the box.

Checked by the new checker agent, the fact-checker and the guide-tester. Build clean; audit 55,
0 broken links, 0 missing images; CLI gate 0; link check 0/0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nikita, 24 Sep: the clip was dark and he did not like it at all. Measured, it was: a luma of 71 of
255 on average (minimum 55) against 229 for the screenshots it was made from, with a poster of 54.
The compositor's spotlight dims everything outside the highlight with a 66 % navy scrim, and scene
mode turned a veil on from the first frame.

Re-cut in a new bright look: no scrim, a 3 px blue outline marks the point, and the camera eases in
only on the what-if and the Apps list, where it keeps content clear of the caption and the frame
edge. Captions go from 17 to 22 px, so they read at 13.75 px on the page. The grid's outline moves
from the caption box to the two red Brno cells, which is what "red where it will hurt" names, and
the Apps list now comes before the grid, so the clip ends on the result. Five scenes joined with
0.35 s crossfades.

Result: 24.3 s, 671 KB, luma mean 223 and never under 221; poster 170 KB as a 256-colour PNG, luma
222. Same screenshots from project 264 as the 23 Sep cut, so nothing new was created in the project.
The page's aria-label and author note follow the new order; DECISIONS and MISSING record it.

Build clean; link check 0/0, including the video and poster paths.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Four items in the "Before you start" boxes read like a model wrote them. The Google item ended on
an aphorism ("a click no assistant can make") and now says who approves access. load/database ended
on a clipped negative ("not a database of your own"); the item now names the thing, Keboola's sample
database, whose login is on the page. project/ repeated "your company"; ask/'s UI line ended on
"to run the SQL below in".

In the ledger, the clip entry's "Measured, not eyeballed" heading is now "What the numbers showed",
and the CONSERVATION entry claimed three sentences moved and one retired when its own list has six
items; it now says one was retired and the rest moved or became list items.

Build clean; audit 55; link check 0/0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… true

The checker's second pass found items that still ended in a reason rather than a thing, and one
that was reassurance: load/'s "Nothing to download" is gone from the box, as the approved plan
had it, and the body sentence that implied the CSVs are downloaded by hand now says the sixth
table does not come from a file. The token is worded two ways across the section, "write access"
and "an admin (master) token"; the reasons behind each moved into the tab bodies (creating a
workspace needs an admin token; Kai answers only one). project/ lists an email address or an
invite as one item, since they are alternatives. automate/'s CLI / API line now says the flow
there needs the app, because its flow.yaml uses the app's configuration ID.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The checker passed the second cut's brightness and failed it on five other counts, all fixed here.
Captions were up for 2.2 to 2.8 s; every caption now stays more than 3 s. The camera move pushed the
what-if question out of frame; there is no camera move. "Different apps, built the same way" stated
a fact the hub never makes, over a list that mixes Streamlit and Python/JS apps; that beat now
carries the hub's own words, "Go straight to a data app on data you already have". The chat's input
box showed a blue border under the caption that read as a second outline; the Kai frames stop above
it. The grid's own screenshot slices the Brno row, which Nikita flagged on 15 Sep; a taller capture
needs the app running, and its deploy is broken, so the grid is cut between two lines of text, the
outline holds only the red figures, and the poster is Kai's one-line answer.

27.1 s, 579 KB, luma mean 223 and never under 221; poster 132 KB, luma 220. Same screenshots from
project 264, nothing new created there. The author note, DECISIONS and MISSING record the cut, the
date mismatch between Kai's week and the grid's, and the capture still owed.

Build clean; audit 55, 0 missing images; CLI gate 0; link check 0/0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oken

The fact-checker's delta check. Dropping "static" from ask/'s CLI line lost a requirement the
platform enforces: kbagent kai refuses a browser session (require_static_token in kai_service.py;
auth.md lists kai as AUTH_NOT_SUPPORTED_ON_STACK), so an admin connected through kbagent auth login
would fail. The box and the tab body now name the route, kbagent project add with an admin (master)
token, and say that an auth login connection does not reach Kai; naming the commands keeps it from
reading as "Kai does not work in the browser", which the checker had flagged.

"Creating a workspace needs an admin (master) token" rests only on our own CLI pages; the CLI's
workspace service has no master check and the Storage API's 403 names write access. It stays, since
an admin token works either way, with a VERIFY(owner) note beside it.

load/'s "does not come from a file" clashed with the next paragraph, which calls the forecast
response a file; it now says the sixth table is not one of the sample files.

Build clean; audit 55; CLI gate 0; link check 0/0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MDX wraps the multi-line text inside <span slot="…"> in a <p>, so on the four pages that override a
tab line (ask/, app/, transform/workspace, automate/) the text dropped onto a new line under
"UI tab:" or "CLI / API tab:", while the default lines ran on. The component now strips that <p>.
Found by looking at the preview; neither the checker nor the build can see it, because the HTML is
valid.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MDX wraps an item written over several lines in <p>, whose margins put it further from its neighbours than a one-line item. The box's list now zeroes that margin, so every item sits the same distance apart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview — 774c48e3 Deployed Sep 25, 2026 by vercel[bot]
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