Skip to content

docs: migrate to Blume, refresh GEO screenshots, and remove tests - #889

Closed
mezotv wants to merge 1 commit into
mainfrom
codex/migrate-docs-to-blume
Closed

mezotv wants to merge 1 commit into
mainfrom
codex/migrate-docs-to-blume

Conversation

@mezotv

@mezotv mezotv commented Sep 4, 2026 •

Copy link
Copy Markdown
Member

Description

Give a short summary of what this PR does and why it's needed.

Screenshot/Recording (if applicable)

Attach a screenshot or recording of the change. This is optional, but can help reviewers understand the change. You can use Cap to record a video.

Checklist
  • I ran a self-review before opening this PR
  • I ran formatting/linting/type checks locally
  • I updated docs when behavior or setup changed
  • I only added comments where the logic is not obvious
  • I have used conventional commits for the PR title and commit messages
  • I did not use AI to write the code in this PR or have disclosed that I did

Summary by cubic

Migrates the product docs from Mintlify to Blume, refreshes GEO screenshots, and removes dashboard tests and skill eval fixtures. The API now allows CORS requests from docs.usenotra.com (previously only Framer and local dev origins were allowed) so the new docs site can call it.

Docs migration

  • Replaces Mintlify config and mint CLI with blume.config.ts and blume scripts, and updates README.md, AGENTS.md, and CONTRIBUTING.md to reference Blume.
  • Converts Mintlify MDX syntax (callouts, param fields, image classes, frontmatter) to Blume equivalents.
  • Adds a custom 404 page, drops the DataBuddy script, and swaps the old dashboard screenshots for new light/dark GEO screenshots.

Removed test infrastructure

  • Deletes dashboard utility tests, the autonomy smoke script, and the test and smoke:autonomy package scripts.
  • Removes the brand-logos and workos skill eval fixtures along with the test ignore/exclude rules in knip.json, tsconfig.json, .gitignore, and .dockerignore.

Written for commit d184215. Summary will update on new commits.

Review in cubic

@mezotv
mezotv requested a review from janburzinski as a code owner September 4, 2026 22:16
@vercel

vercel Bot commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated
notra Ready Ready Preview Sep 4, 2026 10:18pm UTC
notra-agent Ready Ready Preview Sep 4, 2026 10:18pm UTC
notra-onboarding-agent Ready Ready Preview Sep 4, 2026 10:18pm UTC
notra-web Ready Ready Preview Sep 4, 2026 10:18pm UTC

Request Review

@greptile-apps

greptile-apps Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Too many files changed for review (155 files, 100 file limit).

Bypass the limit by tagging @greptile-apps to review.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

React Doctor found no new issues. 🎉

Reviewed by React Doctor for commit d184215.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

6 issues found across 155 files

Confidence score: 3/5

  • apps/docs/vercel.json leaves the docs deployment’s Node.js runtime implicit while apps/docs/package.json has no engines constraint; Vercel could select an incompatible runtime despite the repository pin — configure the Vercel project or package to pin Node 24.11.1.
  • apps/docs/package.json makes openapi:check identical to validate, removing the previous OpenAPI-specific check and allowing API spec regressions to go undetected — restore an explicit OpenAPI verification step.
  • apps/docs/src/schemas/frontmatter.ts validates next but not the widely used prev navigation metadata, so malformed previous links can pass schema checks; add prev to the schema and its validation.
  • The migrated docs contain six type="success" callouts in apps/docs/docs/api/webhooks/events.mdx, an otherwise unsupported type, while apps/docs/theme.css references an undefined --blume-border token for screenshots; verify the supported callout type and provide a defined border token before relying on the rendered styling.
Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="apps/docs/theme.css">

<violation number="1" location="apps/docs/theme.css:8">
P3: `.doc-screenshot` uses `var(--blume-border)` for its border color, but that custom property is never defined in this file or anywhere else in the repository. If Blume's shipped theme does not export a token by that exact name, the `border` shorthand declaration becomes invalid at computed-value time and the screenshot border is silently dropped (falling back to no width). Confirm the token name against Blume's theme, or add a fallback value so the border survives a token mismatch.</violation>
</file>

<file name="apps/docs/package.json">

<violation number="1" location="apps/docs/package.json:12">
P3: The `openapi:check` script is now byte-identical to `validate` (`blume validate --strict`), so it no longer performs any OpenAPI-specific verification. Previously it ran `mint openapi-check https://api.usenotra.com/openapi.json` to compare the published spec against the live API. The documented workflow (README) still tells developers to run `openapi:sync` then `openapi:check` to review the snapshot, but `openapi:check` adds nothing beyond `validate` and won't signal a stale/mismatched OpenAPI snapshot. Either give `openapi:check` a real OpenAPI comparison or drop the duplicate script so it isn't misleading.</violation>
</file>

<file name="apps/docs/docs/api/webhooks/events.mdx">

<violation number="1" location="apps/docs/docs/api/webhooks/events.mdx:72">
P2: Every `<Callout>` in the migrated Blume docs uses only `note`, `tip`, `warning`, or `info`; `type="success"` appears nowhere else in the ~30 migrated .mdx files. These six newly added callouts are the only `success`-typed ones in the repo, suggesting Blume's Callout component does not define a `success` variant. If unsupported, they render with default styling or fail the strict `blume build`/`blume validate` checks. Convert these to a supported type (e.g. `info` or `note`), or verify `success` is a valid Blume Callout type before merging.</violation>
</file>

<file name="apps/docs/vercel.json">

<violation number="1" location="apps/docs/vercel.json:2">
P2: This vercel.json configures the docs deployment for Vercel but does not pin the Node.js runtime, and apps/docs/package.json has no `engines` field (the repo root pins node 24.11.1, but the Vercel project root is apps/docs and Vercel reads that package.json). The README explicitly requires **Node 24.x** for this deploy, so without a pin Vercel will build with its default Node version, which can break the `blume build` and the Bun-based install/build. Add `"engines": { "node": "24.11.1" }` to apps/docs/package.json (the repo root and Vercel settings already expect 24.x) so the docs build/deploy runs on a supported Node.</violation>
</file>

<file name="apps/docs/docs/automation/scheduled.mdx">

<violation number="1" location="apps/docs/docs/automation/scheduled.mdx:113">
P3: The `last_7_days` table row reads "**Default option.** The past 7 days (default)" — "Default option." and "(default)" both mark the default, so it is redundant. Drop one of them (e.g. "**Default option.** The past 7 days").</violation>
</file>

<file name="apps/docs/src/schemas/frontmatter.ts">

<violation number="1" location="apps/docs/src/schemas/frontmatter.ts:14">
P3: The `docolin` metadata in the source MDX files uses both `prev` and `next` navigation links (31 files each), but this schema only declares and validates `next`. Because the schema is `z.looseObject`, `prev` passes through unvalidated, so a typo'd or mis-typed `prev` (e.g. a wrong path) is silently accepted while the same error in `next` is caught. Add `prev: z.string().optional()` for parity with the documented metadata.</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic


<Check>`ref` is the repository's default branch (`refs/heads/{default_branch}`)</Check>
<Check>The payload contains at least one commit</Check>
<Callout type="success">`ref` is the repository's default branch (`refs/heads/{default_branch}`)</Callout>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2: Every <Callout> in the migrated Blume docs uses only note, tip, warning, or info; type="success" appears nowhere else in the ~30 migrated .mdx files. These six newly added callouts are the only success-typed ones in the repo, suggesting Blume's Callout component does not define a success variant. If unsupported, they render with default styling or fail the strict blume build/blume validate checks. Convert these to a supported type (e.g. info or note), or verify success is a valid Blume Callout type before merging.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/docs/docs/api/webhooks/events.mdx, line 72:

<comment>Every `<Callout>` in the migrated Blume docs uses only `note`, `tip`, `warning`, or `info`; `type="success"` appears nowhere else in the ~30 migrated .mdx files. These six newly added callouts are the only `success`-typed ones in the repo, suggesting Blume's Callout component does not define a `success` variant. If unsupported, they render with default styling or fail the strict `blume build`/`blume validate` checks. Convert these to a supported type (e.g. `info` or `note`), or verify `success` is a valid Blume Callout type before merging.</comment>

<file context>
@@ -59,20 +60,17 @@ Notra only accepts four GitHub event types on its webhook endpoint: `ping`, `pus
 
-<Check>`ref` is the repository's default branch (`refs/heads/{default_branch}`)</Check>
-<Check>The payload contains at least one commit</Check>
+<Callout type="success">`ref` is the repository's default branch (`refs/heads/{default_branch}`)</Callout>
+<Callout type="success">The payload contains at least one commit</Callout>
 
</file context>
Suggested change
<Callout type="success">`ref` is the repository's default branch (`refs/heads/{default_branch}`)</Callout>
<Callout type="info">`ref` is the repository's default branch (`refs/heads/{default_branch}`)</Callout>

Comment thread apps/docs/vercel.json
@@ -0,0 +1,6 @@
{
"$schema": "https://openapi.vercel.sh/vercel.json",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2: This vercel.json configures the docs deployment for Vercel but does not pin the Node.js runtime, and apps/docs/package.json has no engines field (the repo root pins node 24.11.1, but the Vercel project root is apps/docs and Vercel reads that package.json). The README explicitly requires Node 24.x for this deploy, so without a pin Vercel will build with its default Node version, which can break the blume build and the Bun-based install/build. Add "engines": { "node": "24.11.1" } to apps/docs/package.json (the repo root and Vercel settings already expect 24.x) so the docs build/deploy runs on a supported Node.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/docs/vercel.json, line 2:

<comment>This vercel.json configures the docs deployment for Vercel but does not pin the Node.js runtime, and apps/docs/package.json has no `engines` field (the repo root pins node 24.11.1, but the Vercel project root is apps/docs and Vercel reads that package.json). The README explicitly requires **Node 24.x** for this deploy, so without a pin Vercel will build with its default Node version, which can break the `blume build` and the Bun-based install/build. Add `"engines": { "node": "24.11.1" }` to apps/docs/package.json (the repo root and Vercel settings already expect 24.x) so the docs build/deploy runs on a supported Node.</comment>

<file context>
@@ -0,0 +1,6 @@
+{
+  "$schema": "https://openapi.vercel.sh/vercel.json",
+  "framework": null,
+  "buildCommand": "bun run build",
</file context>

Comment thread apps/docs/theme.css
}

.doc-screenshot {
border: 1px solid var(--blume-border);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3: .doc-screenshot uses var(--blume-border) for its border color, but that custom property is never defined in this file or anywhere else in the repository. If Blume's shipped theme does not export a token by that exact name, the border shorthand declaration becomes invalid at computed-value time and the screenshot border is silently dropped (falling back to no width). Confirm the token name against Blume's theme, or add a fallback value so the border survives a token mismatch.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/docs/theme.css, line 8:

<comment>`.doc-screenshot` uses `var(--blume-border)` for its border color, but that custom property is never defined in this file or anywhere else in the repository. If Blume's shipped theme does not export a token by that exact name, the `border` shorthand declaration becomes invalid at computed-value time and the screenshot border is silently dropped (falling back to no width). Confirm the token name against Blume's theme, or add a fallback value so the border survives a token mismatch.</comment>

<file context>
@@ -0,0 +1,36 @@
+}
+
+.doc-screenshot {
+  border: 1px solid var(--blume-border);
+  border-radius: 0.75rem;
+}
</file context>
Suggested change
border: 1px solid var(--blume-border);
border: 1px solid var(--blume-border, #e5e7eb);

Comment thread apps/docs/package.json
"open": "blume dev --port 3005 --open",
"preview": "blume build --adapter node --strict && blume preview --port 3005",
"validate": "blume validate --strict",
"openapi:check": "blume validate --strict",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3: The openapi:check script is now byte-identical to validate (blume validate --strict), so it no longer performs any OpenAPI-specific verification. Previously it ran mint openapi-check https://api.usenotra.com/openapi.json to compare the published spec against the live API. The documented workflow (README) still tells developers to run openapi:sync then openapi:check to review the snapshot, but openapi:check adds nothing beyond validate and won't signal a stale/mismatched OpenAPI snapshot. Either give openapi:check a real OpenAPI comparison or drop the duplicate script so it isn't misleading.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/docs/package.json, line 12:

<comment>The `openapi:check` script is now byte-identical to `validate` (`blume validate --strict`), so it no longer performs any OpenAPI-specific verification. Previously it ran `mint openapi-check https://api.usenotra.com/openapi.json` to compare the published spec against the live API. The documented workflow (README) still tells developers to run `openapi:sync` then `openapi:check` to review the snapshot, but `openapi:check` adds nothing beyond `validate` and won't signal a stale/mismatched OpenAPI snapshot. Either give `openapi:check` a real OpenAPI comparison or drop the duplicate script so it isn't misleading.</comment>

<file context>
@@ -1,12 +1,30 @@
+    "open": "blume dev --port 3005 --open",
+    "preview": "blume build --adapter node --strict && blume preview --port 3005",
+    "validate": "blume validate --strict",
+    "openapi:check": "blume validate --strict",
+    "openapi:sync": "bun run scripts/sync-openapi.ts"
+  },
</file context>

| --- | --- | --- |
| `current_day` | `string` | From midnight UTC today until the run |
| `yesterday` | `string` | The previous calendar day (midnight to midnight UTC) |
| `last_7_days` | `string` | **Default option.** The past 7 days (default) |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3: The last_7_days table row reads "Default option. The past 7 days (default)" — "Default option." and "(default)" both mark the default, so it is redundant. Drop one of them (e.g. "Default option. The past 7 days").

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/docs/docs/automation/scheduled.mdx, line 113:

<comment>The `last_7_days` table row reads "**Default option.** The past 7 days (default)" — "Default option." and "(default)" both mark the default, so it is redundant. Drop one of them (e.g. "**Default option.** The past 7 days").</comment>

<file context>
@@ -95,56 +96,44 @@ Schedules generate content at a fixed cadence from activity over a lookback wind
+| --- | --- | --- |
+| `current_day` | `string` | From midnight UTC today until the run |
+| `yesterday` | `string` | The previous calendar day (midnight to midnight UTC) |
+| `last_7_days` | `string` | **Default option.** The past 7 days (default) |
+| `last_14_days` | `string` | The past 14 days |
+| `last_30_days` | `string` | The past 30 days |
</file context>
Suggested change
| `last_7_days` | `string` | **Default option.** The past 7 days (default) |
| `last_7_days` | `string` | **Default option.** The past 7 days |

time_estimate: z.string(),
status: z.string(),
aliases: z.array(z.string()).optional(),
next: z.string().optional(),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3: The docolin metadata in the source MDX files uses both prev and next navigation links (31 files each), but this schema only declares and validates next. Because the schema is z.looseObject, prev passes through unvalidated, so a typo'd or mis-typed prev (e.g. a wrong path) is silently accepted while the same error in next is caught. Add prev: z.string().optional() for parity with the documented metadata.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/docs/src/schemas/frontmatter.ts, line 14:

<comment>The `docolin` metadata in the source MDX files uses both `prev` and `next` navigation links (31 files each), but this schema only declares and validates `next`. Because the schema is `z.looseObject`, `prev` passes through unvalidated, so a typo'd or mis-typed `prev` (e.g. a wrong path) is silently accepted while the same error in `next` is caught. Add `prev: z.string().optional()` for parity with the documented metadata.</comment>

<file context>
@@ -0,0 +1,16 @@
+    time_estimate: z.string(),
+    status: z.string(),
+    aliases: z.array(z.string()).optional(),
+    next: z.string().optional(),
+  })
+  .optional();
</file context>
Suggested change
next: z.string().optional(),
next: z.string().optional(),
prev: z.string().optional(),

@mezotv mezotv closed this Sep 14, 2026

This branch was successfully deployed

4 active deployments
Preview – notra — d1842153 Deployed Sep 4, 2026 by vercel[bot]
Preview – notra-web — d1842153 Deployed Sep 4, 2026 by vercel[bot]
Preview – notra-agent — d1842153 Deployed Sep 4, 2026 by vercel[bot]
Preview – notra-onboarding-agent — d1842153 Deployed Sep 4, 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