Skip to content

feat: CLI UX improvements - branding, docs links & starter card update#804

Merged
michnowak merged 5 commits intomainfrom
feat/cli-ux-improvements-785
Mar 16, 2026
Merged

feat: CLI UX improvements - branding, docs links & starter card update#804
michnowak merged 5 commits intomainfrom
feat/cli-ux-improvements-785

Conversation

@michnowak
Copy link
Copy Markdown
Contributor

@michnowak michnowak commented Mar 16, 2026

What does this PR do?

  • CLI scaffolding and logging enhancements (branding header, summary box, docs links, block warnings)
  • Update "Build your own" starter card - remove "Coming soon" badge, add CTA link and background image
  • CLI wizard fixes

Related Ticket(s)

Key Changes

  • CLI (create-o2s-app): improved logger with branding, updated prompts and scaffold flow
  • Docs homepage: "Build your own" starter card now active with CLI wizard image and gradient

How to test

  • Run npx create-o2s-app and verify improved CLI output (branding header, summary, docs links)
  • Run npm run dev and check homepage starters section - "Build your own" card should show CLI wizard image
  • Run npm run storybook and verify new cart/checkout component stories

Media (Loom or gif)

  • N/A

Summary by CodeRabbit

  • New Features

    • CLI shows a branded banner and an enhanced boxed summary with next steps, links, and actionable warnings after project creation.
    • Improved CLI wizard tip presentation when choosing a custom template.
  • Documentation

    • Reordered integration setup steps for clarity.
    • Expanded and reformatted CMS integration status tables for Contentful and Strapi.
    • Updated documentation links and added changeset entries noting minor releases.
  • UI Updates

    • Starter card visuals updated and product page copy now highlights CLI scaffolding with a docs link.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 16, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: fba8f7a0-3d05-4fb5-a076-5a26b5150441

📥 Commits

Reviewing files that changed from the base of the PR and between cdb62e8 and f2e18f4.

⛔ Files ignored due to path filters (1)
  • apps/docs/static/img/homepage/starters-card-cli.wizard.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • apps/docs/src/components/HomepageStartersSection/index.tsx
  • apps/docs/src/pages/product/starters.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/docs/src/pages/product/starters.tsx

Walkthrough

Adds CLI UX improvements to create-o2s-app (startup banner, boxed summary listing selected blocks/integrations, docs links, conditional warnings). Updates CLI constants and wizard tip formatting, adjusts homepage starter visuals and product starters text, and expands CMS blocks implementation-status docs. Includes two new changesets.

Changes

Cohort / File(s) Summary
CLI Branding & Output
packages/cli/create-o2s-app/src/index.ts, packages/cli/create-o2s-app/src/utils/logger.ts
Added printBanner() and invoked it at startup; refactored printSummary() to accept arrays of selected blocks/integrations and render a boxed, dynamic-width summary with docs links and conditional warnings.
CLI Constants & Wizard UI
packages/cli/create-o2s-app/src/constants.ts, packages/cli/create-o2s-app/src/wizard/prompts.ts
Updated DOCS URL(s) and added DOCS_INTEGRATIONS_URL; replaced plain tip text with a dynamically sized boxed tip for the custom template.
Docs: CMS blocks tables
apps/docs/docs/integrations/cms/contentful/blocks.md, apps/docs/docs/integrations/cms/strapi/blocks.md
Reformatted and expanded implementation-status tables; added new block rows and adjusted headers/spacing.
Docs: Guides & Changesets
apps/docs/docs/guides/using-generators.md, .changeset/fair-cows-clean.md, .changeset/yellow-jeans-change.md
Renumbered/reordered integration generator steps; added two changeset entries documenting minor releases and CLI/docs/ui updates.
Docs: Homepage Starter UI
apps/docs/src/components/HomepageStartersSection/index.tsx, apps/docs/src/pages/product/starters.tsx
Updated third starter card gradient and added a CLI wizard background image reference; appended a CLI-scaffold link sentence to the starters page copy.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant CLI as create-o2s-app
  participant Logger
  participant FS as Filesystem/Scaffold
  participant PKG as BlockMetadata
  participant Docs

  User->>CLI: run scaffold command / answer prompts
  CLI->>Logger: printBanner()
  CLI->>PKG: read selected block metadata (warnings)
  PKG-->>CLI: metadata (warnings/flags)
  CLI->>FS: scaffold project files (template, blocks, integrations)
  FS-->>CLI: scaffold result (targetDir, uncoveredModules)
  CLI->>Logger: printSummary(selectedBlocks, selectedIntegrations, uncoveredModules, skipInstall)
  Logger->>Docs: include docs links (installation, integrations, storybook)
  Logger-->>User: render boxed summary with lists and warnings
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • marcinkrasowski

Poem

🐰
I hopped into the terminal bright,
I painted banners, boxed the light,
I listed blocks and linked the guide,
Poked warnings where they might reside,
A carrotized CLI — enjoy the flight 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main changes in the PR: CLI UX improvements with branding, docs links, and starter card updates, all clearly present in the changeset.
Description check ✅ Passed The description includes all major template sections: what it does, related tickets, key changes, and testing steps, though media field is marked N/A which is acceptable.
Linked Issues check ✅ Passed The PR implements all primary objectives from #785: startup branding header (printBanner), styled summary box (printSummary redesign), improved docs links, and block-level warnings via metadata structure.
Out of Scope Changes check ✅ Passed All changes are directly related to the linked issue objectives: CLI improvements, starter card updates, and docs enhancements. No unrelated changes detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/cli-ux-improvements-785
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 16, 2026

Coverage Report for packages/configs/vitest-config

Status Category Percentage Covered / Total
🔵 Lines 77.74% 1718 / 2210
🔵 Statements 76.71% 1808 / 2357
🔵 Functions 73.86% 520 / 704
🔵 Branches 65.58% 1147 / 1749
File CoverageNo changed files found.
Generated in workflow #503 for commit f2e18f4 by the Vitest Coverage Report Action

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (3)
apps/docs/docs/integrations/cms/contentful/blocks.md (1)

17-61: Documentation improvement looks good.

The table reformatting with better alignment and the addition of comprehensive block entries improves readability and completeness of the implementation status tracking.

Consider aligning the block ordering with the Strapi blocks documentation (apps/docs/docs/integrations/cms/strapi/blocks.md) for easier cross-reference and maintenance. For example, grouping all implemented blocks alphabetically first, then all not-implemented blocks alphabetically would provide consistency across both CMS integration docs.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/docs/docs/integrations/cms/contentful/blocks.md` around lines 17 - 61,
Reorder the table in apps/docs/docs/integrations/cms/contentful/blocks.md so
implemented blocks (rows with ✅) appear first sorted alphabetically by Block
name (e.g., article-list, category-list, faq, quick-links, ticket-list) followed
by not-implemented blocks (rows with ❌) also sorted alphabetically (e.g.,
article, bento-grid, cart, checkout-billing-payment, ...), mirroring the
grouping and alphabetical ordering used in the Strapi blocks documentation to
make cross-referencing and maintenance easier.
packages/cli/create-o2s-app/src/wizard/prompts.ts (1)

98-120: Avoid duplicated literals in tip-box width/padding calculations.

The same text is repeated in multiple places (Line 104–106 and Line 113/116), which makes future copy edits error-prone.

♻️ Suggested refactor
-        const tipLines = [
-            `${kleur.blue().bold('Tip:')} Not sure which blocks to pick?`,
-            `Browse our Storybook to preview all available components:`,
-            kleur.cyan(STORYBOOK_URL),
-        ];
-        const tipWidth = Math.max(
-            'Tip: Not sure which blocks to pick?'.length,
-            'Browse our Storybook to preview all available components:'.length,
-            STORYBOOK_URL.length,
-        );
+        const plainTipLines = [
+            'Tip: Not sure which blocks to pick?',
+            'Browse our Storybook to preview all available components:',
+            STORYBOOK_URL,
+        ];
+        const tipLines = [
+            `${kleur.blue().bold('Tip:')} Not sure which blocks to pick?`,
+            plainTipLines[1],
+            kleur.cyan(STORYBOOK_URL),
+        ];
+        const tipWidth = Math.max(...plainTipLines.map((line) => line.length));
         const boxWidth = tipWidth + 4;
+        const pad = (plain: string) => ' '.repeat(boxWidth - 2 - plain.length);

         console.log();
         console.log(`  ${kleur.blue('╭' + '─'.repeat(boxWidth) + '╮')}`);
-        console.log(
-            `  ${kleur.blue('│')}  ${tipLines[0]}${' '.repeat(boxWidth - 2 - 'Tip: Not sure which blocks to pick?'.length)}${kleur.blue('│')}`,
-        );
-        console.log(
-            `  ${kleur.blue('│')}  ${tipLines[1]}${' '.repeat(boxWidth - 2 - 'Browse our Storybook to preview all available components:'.length)}${kleur.blue('│')}`,
-        );
-        console.log(
-            `  ${kleur.blue('│')}  ${tipLines[2]}${' '.repeat(boxWidth - 2 - STORYBOOK_URL.length)}${kleur.blue('│')}`,
-        );
+        console.log(`  ${kleur.blue('│')}  ${tipLines[0]}${pad(plainTipLines[0])}${kleur.blue('│')}`);
+        console.log(`  ${kleur.blue('│')}  ${tipLines[1]}${pad(plainTipLines[1])}${kleur.blue('│')}`);
+        console.log(`  ${kleur.blue('│')}  ${tipLines[2]}${pad(plainTipLines[2])}${kleur.blue('│')}`);
         console.log(`  ${kleur.blue('╰' + '─'.repeat(boxWidth) + '╯')}`);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/cli/create-o2s-app/src/wizard/prompts.ts` around lines 98 - 120,
Replace duplicated literal usage by deriving widths from a single source of
truth: create an array of raw tip strings (e.g., tipLinesRaw = ['Tip: Not sure
which blocks to pick?', 'Browse our Storybook to preview all available
components:', STORYBOOK_URL]), compute tipWidth = Math.max(...tipLinesRaw.map(s
=> s.length)), then build the colored tipLines from tipLinesRaw (apply kleur to
the pieces) and use tipLinesRaw[i].length when computing the pad (instead of
reusing the literal). Update references to tipLines, tipWidth, and boxWidth
accordingly so padding uses tipLinesRaw lengths and the printed lines use the
colored tipLines.
packages/cli/create-o2s-app/src/utils/logger.ts (1)

43-43: Small UX polish: avoid printing ./. for current directory.

When targetDir equals process.cwd(), relativeDir becomes ".", so lines like cd ./. are shown. Consider normalizing display to just . in that case.

Also applies to: 57-57, 98-98

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/cli/create-o2s-app/src/utils/logger.ts` at line 43, The code builds
relativeDir via const relativeDir = path.relative(process.cwd(), targetDir) ||
'.' which later gets printed as `./${relativeDir}` producing `./.` when
targetDir === process.cwd(); fix by normalizing a display variable (e.g.,
displayDir) so that if relativeDir === '.' you use '.' else prefix with './' (or
join with path.posix.join) and replace all uses of `./${relativeDir}` with this
normalized displayDir; update the references where relativeDir is printed (the
occurrences flagged around the relativeDir definition and its other uses) so
output shows `.` instead of `./.`.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/docs/docs/guides/using-generators.md`:
- Line 59: Fix the grammar in the sentence "For each module you chose, it will
create appropriate folder within the `packages/api/integrations/src/module`
directory." by changing "folder" to the plural "folders" so it reads "create
appropriate folders"; locate that exact sentence in the using-generators.md
content and update it accordingly.

In `@packages/cli/create-o2s-app/src/utils/logger.ts`:
- Around line 7-31: printBanner currently prints title/description but omits the
CLI version; update printBanner to accept a version parameter (e.g.,
printBanner(version: string)) and include that version in the banner (centered
or placed in the header/footer area alongside title/description), adjust padding
calculations (contentWidth, titlePad/descPad) as needed so the version fits
without breaking layout, and update callers to pass program.version() or the
package version when invoking printBanner.

---

Nitpick comments:
In `@apps/docs/docs/integrations/cms/contentful/blocks.md`:
- Around line 17-61: Reorder the table in
apps/docs/docs/integrations/cms/contentful/blocks.md so implemented blocks (rows
with ✅) appear first sorted alphabetically by Block name (e.g., article-list,
category-list, faq, quick-links, ticket-list) followed by not-implemented blocks
(rows with ❌) also sorted alphabetically (e.g., article, bento-grid, cart,
checkout-billing-payment, ...), mirroring the grouping and alphabetical ordering
used in the Strapi blocks documentation to make cross-referencing and
maintenance easier.

In `@packages/cli/create-o2s-app/src/utils/logger.ts`:
- Line 43: The code builds relativeDir via const relativeDir =
path.relative(process.cwd(), targetDir) || '.' which later gets printed as
`./${relativeDir}` producing `./.` when targetDir === process.cwd(); fix by
normalizing a display variable (e.g., displayDir) so that if relativeDir === '.'
you use '.' else prefix with './' (or join with path.posix.join) and replace all
uses of `./${relativeDir}` with this normalized displayDir; update the
references where relativeDir is printed (the occurrences flagged around the
relativeDir definition and its other uses) so output shows `.` instead of `./.`.

In `@packages/cli/create-o2s-app/src/wizard/prompts.ts`:
- Around line 98-120: Replace duplicated literal usage by deriving widths from a
single source of truth: create an array of raw tip strings (e.g., tipLinesRaw =
['Tip: Not sure which blocks to pick?', 'Browse our Storybook to preview all
available components:', STORYBOOK_URL]), compute tipWidth =
Math.max(...tipLinesRaw.map(s => s.length)), then build the colored tipLines
from tipLinesRaw (apply kleur to the pieces) and use tipLinesRaw[i].length when
computing the pad (instead of reusing the literal). Update references to
tipLines, tipWidth, and boxWidth accordingly so padding uses tipLinesRaw lengths
and the printed lines use the colored tipLines.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b017fa29-9f1b-423b-9b7f-40f5d15c000d

📥 Commits

Reviewing files that changed from the base of the PR and between c1a5460 and 9401218.

⛔ Files ignored due to path filters (1)
  • apps/docs/static/img/homepage/starters-card-cli.wizzard.png is excluded by !**/*.png
📒 Files selected for processing (9)
  • .changeset/fair-cows-clean.md
  • apps/docs/docs/guides/using-generators.md
  • apps/docs/docs/integrations/cms/contentful/blocks.md
  • apps/docs/docs/integrations/cms/strapi/blocks.md
  • apps/docs/src/components/HomepageStartersSection/index.tsx
  • packages/cli/create-o2s-app/src/constants.ts
  • packages/cli/create-o2s-app/src/index.ts
  • packages/cli/create-o2s-app/src/utils/logger.ts
  • packages/cli/create-o2s-app/src/wizard/prompts.ts

Comment thread apps/docs/docs/guides/using-generators.md
Comment thread packages/cli/create-o2s-app/src/utils/logger.ts
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
.changeset/yellow-jeans-change.md (1)

5-5: Consider expanding the description to capture the full scope of docs changes.

The current description is quite minimal. Based on the PR objectives and enriched summary, the docs changes include:

  • Removing "Coming soon" badge from "Build your own" starter card
  • Adding CTA link to the starter card
  • Adding CLI wizard background image with gradient
  • Activating the "Build your own" starter card on the homepage

A more comprehensive description would provide better context for the changelog.

📝 Example of a more descriptive changeset message
-docs: enhance product starters section with CLI scaffolding link for custom frontend setup
+docs: activate "Build your own" starter card with CLI scaffolding link and wizard image
+
+- Remove "Coming soon" badge from "Build your own" starter card
+- Add CTA link pointing to CLI installation documentation
+- Add CLI wizard background image with gradient overlay
+- Enable interactive starter card on docs homepage for custom frontend setup
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.changeset/yellow-jeans-change.md at line 5, Update the changeset
description in .changeset/yellow-jeans-change.md to list the specific doc edits:
removing the "Coming soon" badge from the "Build your own" starter card, adding
the CTA link to that starter card, adding the CLI wizard background image with
gradient, and activating the "Build your own" starter card on the homepage; make
the message explicit about these four items so the changelog clearly reflects
the actual doc/UX changes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In @.changeset/yellow-jeans-change.md:
- Line 5: Update the changeset description in .changeset/yellow-jeans-change.md
to list the specific doc edits: removing the "Coming soon" badge from the "Build
your own" starter card, adding the CTA link to that starter card, adding the CLI
wizard background image with gradient, and activating the "Build your own"
starter card on the homepage; make the message explicit about these four items
so the changelog clearly reflects the actual doc/UX changes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: cefa4cea-7201-4318-8e7a-3fddc6e7fcf9

📥 Commits

Reviewing files that changed from the base of the PR and between 9401218 and cdb62e8.

📒 Files selected for processing (2)
  • .changeset/yellow-jeans-change.md
  • apps/docs/src/pages/product/starters.tsx
✅ Files skipped from review due to trivial changes (1)
  • apps/docs/src/pages/product/starters.tsx

Comment thread apps/docs/src/pages/product/starters.tsx Outdated
@michnowak michnowak merged commit a2d9ea4 into main Mar 16, 2026
13 checks passed
@michnowak michnowak deleted the feat/cli-ux-improvements-785 branch March 16, 2026 12:17
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.

[Feature] CLI UX improvements: branding header, summary box, docs links & block warnings

2 participants