21 file(s), +914 / -54 lines
| Path | Role | + | - |
|---|---|---|---|
| messages/en.json | Config | +26 | -0 |
| messages/hi.json | Config | +26 | -0 |
| src/app/[locale]/(workspace)/layout.tsx | App route | +44 | -24 |
| src/app/api/internal/onboarding/nudges/[key]/dismiss/route.ts | App route | +27 | -0 |
| src/app/api/internal/onboarding/nudges/route.ts | App route | +13 | -0 |
| src/components/app-chrome.stories.tsx | Component | +15 | -0 |
| src/components/app-chrome.tsx | Component | +39 | -30 |
| src/components/onboarding/onboarding-hello-bar-fixtures.ts | Component | +65 | -0 |
| src/components/onboarding/onboarding-hello-bar-view.stories.tsx | Component | +102 | -0 |
| src/components/onboarding/onboarding-hello-bar-view.tsx | Component | +62 | -0 |
| src/components/onboarding/onboarding-hello-bar.stories.tsx | Component | +67 | -0 |
| src/components/onboarding/onboarding-hello-bar.test.ts | Component | +30 | -0 |
| src/components/onboarding/onboarding-hello-bar.tsx | Component | +73 | -0 |
| src/components/onboarding/onboarding-nudge-art.stories.tsx | Component | +48 | -0 |
| src/components/onboarding/onboarding-nudge-art.tsx | Component | +64 | -0 |
| src/components/onboarding/presentation.ts | Component | +9 | -0 |
| src/components/onboarding/select-session-nudge.ts | Component | +25 | -0 |
| src/lib/kubb-client.ts | Library | +3 | -0 |
| src/lib/onboarding/gateway.test.ts | Library | +75 | -0 |
| src/lib/onboarding/gateway.ts | Library | +54 | -0 |
| src/lib/onboarding/query.ts | Library | +47 | -0 |
A first-run firm now receives one clear next step in a compact strip above the entire workspace. The bar sits above the Global Rail, remains stable while counsel navigates, and leaves no gap when no onboarding ask is eligible.
| Boundary | Behaviour |
|---|---|
| Window chrome | One crimson-tint, one-line bar spans the viewport above the Global Rail and page. |
| Four asks | Create a matter, add a document, connect WhatsApp, or personalise Vani. The Drive ask is deliberately excluded from this version. |
| Selection |
One eligible ask is chosen randomly and stored in
sessionStorage. The same ask survives route navigation
and is never replaced by a stack.
|
| Dismissal | The bar collapses immediately while dismissal runs. A rejected request restores the bar and shows a translated error toast. |
| Data | The workspace layout prefetches the real onboarding endpoint through the app gateway, hydrates the generated query hook, and runtime-validates upstream JSON. |
The shipped Storybook story Onboarding / OnboardingHelloBar / Interactive Enter And Exit provides replay controls for both directions. The bar animates its height with the shared micro-transition, so the workspace reflows during the animation rather than snapping after unmount.
Automated checks cover the four-key generated contract, sticky selection, browser-to-proxy route mapping, malformed upstream rejection, and the existing app chrome. Runtime evidence is recorded in the pull request because Storybook fixtures alone do not prove the real endpoint or its zero-nudges response.