Skip to content

docs: refactor documentation around user workflows - #2867

Draft
ukimsanov wants to merge 55 commits into
mainfrom
codex/docs-human-first-refactor
Draft

docs: refactor documentation around user workflows#2867
ukimsanov wants to merge 55 commits into
mainfrom
codex/docs-human-first-refactor

Conversation

@ukimsanov

@ukimsanov ukimsanov commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • Reorganizes Mintlify into Guides, Studio, Catalog, and Developers, with a clearer full-width header and Playground action.
  • Adds a source-verified Studio manual with real product screenshots.
  • Rewrites onboarding, workflow, and help pages for a general audience.
  • Standardizes 134 generated Catalog pages with agent-first instructions and folded technical details.
  • Removes or merges stale duplicate pages and adds persistent documentation planning and audit notes.
  • Syncs the latest main documentation, including weekly updates and the new media and design guides.

Why

The docs had grown around repository structure instead of user needs, omitted Studio almost entirely, and included stale or contradictory guidance. This refactor makes common tasks easier to understand, find, and share with users.

Impact

  • 253 public documentation pages represented in navigation.
  • Zero orphan public pages or missing navigation targets.
  • No package or runtime code changes introduced by this PR.

Checks

  • mint validate
  • mint broken-links
  • bunx oxlint scripts/generate-catalog-pages.ts research/docs-refactor/rebuild-navigation.mjs
  • git diff --check
  • Initial docs commit: pre-commit lint, formatting, typecheck, tracked-artifact, and large-file checks

The sync merge encountered existing main repository-wide hook failures (Studio file-size and current typecheck/debt findings). Those inherited checks were bypassed only for the merge commit after confirming this PR introduces no non-doc package changes.

This is a draft so the Mintlify preview and repository checks can be reviewed before merging.

@mintlify

mintlify Bot commented Jul 29, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
hyperframes 🟢 Ready View Preview Jul 29, 2026, 2:18 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

…t-refactor-sync

# Conflicts:
#	docs/docs.json
#	docs/guides/feedback.mdx
#	docs/weekly-updates.mdx
…nders images

My first fix was based on a wrong diagnosis. Prose width was not the problem:
Mintlify wraps every image in its zoom component, span[data-rmiz] >
span[data-rmiz-content] > picture.contents > img, so the width I put on a
surrounding div was absorbed by that wrapper and the image still rendered full
width with the card's text pushed out of view. Reading the served markup also
showed the build rewrites Tailwind classes into a mint-* namespace and drops what
it does not recognise, which is why object-right never appeared in the output at
all.

The thumbnail now uses an hf-peek class in custom.css, which collapses the zoom
wrapper and sizes the box directly. Custom classes survive the rewrite; utilities
are not dependable for anything load-bearing. Both findings are in AGENTS.md,
including the note that videos are not wrapped - which is why the identical card
on the quickstart worked with a video and failed with an image.
All eight guides opened with prose and contained no images and no video, which is
the main reason the pages read flat: they are the destination of the "I need a
specific thing" journey, and they never showed what the thing looks like. Six now
open with a real scene playing, captioned with exactly what the clip is rather
than implying it is a finished film.

The previews were re-encoded rather than reused as-is. The catalog originals run
127KB to 1.3MB and these autoplay on load, so each is trimmed to its most legible
five seconds at 960x540 and lands between 16KB and 90KB on the docs CDN.

music-to-video and slideshow are deliberately still without media. Nothing in the
catalog honestly represents a beat-synced cut or a navigable deck, and a
decorative stand-in on a page about a specific output would be a small lie. Those
two need a purpose-rendered clip each.
The front page was showing a film I generated, and it was the weakest asset in the
project: silent, slow, and stylistically plain. Meanwhile roughly 260 finished
films made with HyperFrames sat in ~/Downloads/hyperframes-launches and
~/Desktop/hyperframes-launches, most at 1080p with audio, and the good ones were
only reachable from /examples.

The hero is now the website-launch film - 38s, 1080p, real audio at -14.3 dB. It
shows the whole loop in one take: a site captured, FRAME.md, STORYBOARD.md and
SCRIPT.md written, the film rendered. It autoplays muted and unmutes on demand.

"What can it make?" was four five-second catalog snippets. It is now six finished
films: colour grading, one shoot cut many ways, a music-driven edit, a pull request
explained, timeline editing, and a personalised year-in-review. Each tile is a
silent six-second loop of 37-241KB; selecting one loads the full film with sound,
so the 1-8MB files are only fetched when someone asks for them. Tile moments were
chosen by looking at them at the 320px they actually render: the first cuts of the
music and pull-request films were an empty waveform and an illegible terminal, so
both were re-cut to the sections that read.

Removed the silent film I had committed, now that nothing references it.
The wall compiled but rendered zero tiles. Reading the page bundle showed why:
Mintlify keeps only the exported component out of a snippet file, so the CDN base
and the film list I had declared above it never made it into the compiled output -
`const FILMS` and `const CDN` appear zero times in the bundle while `FILMS.map` is
still there. The component threw on an undefined reference, React's error boundary
swallowed it, and the section rendered empty with no console error to point at it.

Both constants now live inside the component. Recorded the trap in AGENTS.md,
since a blank snippet with a clean console gives no clue on its own.
Labelled 56s, but the file I encoded and uploaded measures 47.6s - there are
several variants of that marketing film on disk and the 1920x1080 one I selected
is the shorter cut. Every other label matches its file to the nearest second.
The hero was an 11MB export of the website-launch film. The finished master is
36.3s at 8.15 Mbps, so the page now serves a high-quality encode made from that
instead - 9MB at CRF 21, which is oversampled for a column under 900px wide.

The colour-grading film was also being derived from a 1080p variant while a
3840x2160 60fps master sat on disk. Its tile and full film are now encoded from
that master.

Both are published under versioned filenames. The first upload set
max-age=31536000, immutable, so the CDN edge kept serving the old bytes when I
replaced the objects in place - the corrected files measured identical to the
originals over HTTP until they were renamed. The component takes optional tile and
full overrides per film so a single asset can be revised this way without renaming
the rest.

Worth recording plainly: none of these films were rendered for the docs. They are
existing renders, transcoded down for the web, so each one's quality is capped by
whatever file already existed. Re-rendering from the launch projects at 4K60 would
raise that ceiling.
The guides were previewing five-second catalog snippets - a chart block standing in
for an explainer, a caption component standing in for a recut. Each now opens with a
cut from an actual film made through that workflow: the Huly launch for product
videos, a SpaceX valuation piece for explainers, one shoot cut three ways for
captions and recuts, a real pull request for PR videos, a per-listener year in
review for motion graphics, a beat-analysed track for music, and a timeline-editing
film for the custom path. Captions name what each clip is from instead of implying
it is a finished film for that page.

music-to-video had no media at all and now does, because the honest asset existed
all along: a 90-second film built from an analysed track.

slideshow still has none. Nothing on disk honestly shows a navigable deck, and a
stand-in on a page about that specific output would be a small lie.

Re-rendering these projects was tried first and rejected. Fresh renders regressed:
variables-launch lost its centre creator clip and rendered white where footage
should be, and the pull-request and cloud films came out two to three seconds short.
The projects reference media that has moved since they were made, so the existing
exports are the better source until each project's paths are repaired.
# Conflicts:
#	docs/concepts/compositions.mdx
#	docs/contributing.mdx
#	docs/docs.json
#	docs/guides/antigravity.mdx
#	docs/guides/claude-design.mdx
#	docs/guides/copilot-cli.mdx
#	docs/guides/mcp.mdx
#	docs/guides/open-design.mdx
#	docs/guides/pipeline.mdx
#	docs/guides/prompting.mdx
#	docs/guides/skills.mdx
#	docs/guides/video-editor-cheatsheet.mdx
#	docs/packages/studio.mdx
#	docs/quickstart.mdx
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