Skip to content

Promote dev to master: valid docs breadcrumbs, docs hub pages, roundup license fixes - #461

Merged
AminDhouib merged 8 commits into
masterfrom
dev
Sep 27, 2026
Merged

AminDhouib merged 8 commits into
masterfrom
dev

Conversation

@AminDhouib

Copy link
Copy Markdown
Member

Promotes two docs PRs to production. All 15 changed files are under apps/landing/.

Both PRs went green into dev.

After the deploy, I'll:

  1. re-run the production probes and the BreadcrumbList check;
  2. submit the changed URLs to IndexNow, Bing and Search Console;
  3. sync master back to dev.

chore: sync master back into dev after #451
…roundups

The Angular roundup gains DevExtreme FileUploader and ng2-file-upload, and
the React roundup gains PrimeReact FileUpload. Each gets a table row, a
library section, a "How to choose" bullet and FAQ updates. The Angular page
also notes the npm status of angular-file-uploader and of ng-file-upload,
the AngularJS directive.

PrimeNG 22 (2026-07-15) moved from MIT to PrimeTek's PrimeUI License, so the
Angular page no longer lists PrimeNG as MIT or says every library on it is
MIT-licensed. The comparisons hub lists the new entries under each roundup.
…the Vue roundup

The Vue roundup called all five libraries MIT-licensed. Two are not:
vue-upload-component is Apache-2.0 (its npm license field and GitHub repo),
and PrimeVue 5 (2026-07-15) moved from MIT to PrimeTek's PrimeUI License,
the same change PrimeNG 22 and PrimeReact 11 made. The table, the PrimeVue
section and the "Are these libraries free?" answer now say so.
…extreme

docs(landing): add DevExtreme, ng2-file-upload and PrimeReact to the roundups; correct Prime licenses
Every docs page nested in a sidebar folder that has no URL of its own
emitted a BreadcrumbList whose middle ListItems carried only a name.
(comparisons/ has a hub page, but its meta.json lists `index` as a child
page, so fumadocs leaves the folder node itself without a URL.) schema.org
allows that, but Google's breadcrumb rich result requires `item` on
every ListItem except the last
(https://developers.google.com/search/docs/appearance/structured-data/breadcrumb),
so those trails were invalid for the rich result.

DocsStructuredData now drops name-only folder crumbs from the JSON-LD
trail and numbers positions 1..n over what remains. The page's own crumb
is always last and keeps its URL. The visual <DocsBreadcrumb> is
unchanged.

The new test walks every docs page, not a sample. In each BreadcrumbList,
every ListItem except the last must have an `item`, positions must run
1..n, every `item` must be an existing docs page or /docs/, and the last
crumb must be the page itself.

RED against the unfixed component (vitest run
src/__tests__/docs-structured-data.test.ts, exit 1; 85 entries, elided):

 FAIL  src/__tests__/docs-structured-data.test.ts > docs BreadcrumbList JSON-LD meets the Google breadcrumb rules > numbers every trail 1..n and links every crumb but the last to a docs page
AssertionError: expected [ …(85) ] to deeply equal []

- Expected
+ Received

- []
+ [
+   "/docs/api-reference/azure-generate-sas-url: \"API reference\" has no item",
+   "/docs/api-reference/error-codes: \"API reference\" has no item",
+   "/docs/api-reference/events: \"API reference\" has no item",
    ...
+   "/docs/comparisons/upup-vs-uppy: \"Comparisons\" has no item",
    ...
+   "/docs/guides/storage/azure-blob: \"Guides\" has no item",
+   "/docs/guides/storage/azure-blob: \"Storage\" has no item",
    ...
+   "/docs/migration/v1-to-v3: \"Migration\" has no item",
+   "/docs/quickstarts/angular: \"Quickstarts\" has no item",
    ...
+   "/docs/quickstarts/vue: \"Quickstarts\" has no item",
+ ]

 Test Files  1 failed (1)
      Tests  1 failed | 27 passed (28)

GREEN after the fix: the same file passes 28/28 (exit 0), and the full
landing suite passes 246/246 across 20 files (exit 0).
Add index pages for guides/, guides/storage/ and quickstarts/, carved from
#445. Each folder now has a real URL, so its sidebar label is a link and
its breadcrumb crumb is a link. The Azure trail is now Docs (/docs/) →
Guides (/docs/guides/) → Storage (/docs/guides/storage/) → page. The
Guides, Storage and Quickstarts crumbs that the previous commit dropped
from the JSON-LD for having no URL are back, now with one.

The hubs list their child pages. I re-checked every claim against the
current dev docs:
- The storage hub says what the modes and storage-providers guides say:
  in both modes the browser uploads bytes directly to the bucket over
  short-lived signed URLs, and server mode signs those URLs and writes
  cloud-drive files to storage itself.
- Azure Blob is client mode only: createUpupHandler rejects it.
- The provider list matches guides/storage/, the framework list matches
  quickstarts/, and the peer ranges match packages/*/package.json:
  React 19, Vue 3.4+, Svelte 5, Angular 19 (^19.0.0), Next.js 15+.

Changes from #445's versions:
- No MDX link points at a nested hub URL. dev's
  scripts/docs/check-links.mjs still resolves guides/storage/index.mdx to
  /docs/guides/storage/index, and a probe link to /docs/guides/storage/
  failed it with "page /docs/guides/storage does not exist". So the
  guides hub links each storage page directly, and its "New to upup?"
  line points at Getting Started instead of /docs/quickstarts/.
- The quickstarts description no longer says "the same features
  everywhere". The image editor ships for React and Preact only, and the
  hub now says so, in the FAQ's words.
- The storage hub no longer says every guide covers a CORS rule.
  s3-compatible.mdx has no CORS step.

guides/meta.json gains "title": "Guides" so the folder keeps its sidebar
name now that it has an index page. The DocsPageNav comment's example of
a URL-less folder moves from Quickstarts to Auth.

Pins: the docs page count goes from 69 to 72 in docs-source, docs-llms
and the seo-surfaces sitemap total. docs-structured-data now covers all
four hubs:
- the sitemap, llms.txt and markdown-twin checks run for every hub;
- the served-twin check uses guides/storage, the two-level case;
- "links every child" leaves out only the nested hub page itself;
- a new test pins the full Azure BreadcrumbList.
comparisons/meta.json listed "index" in `pages`. fumadocs then treats
comparisons/index.mdx as an ordinary child page and gives the folder
itself no index. So the sidebar's "Comparisons" label was plain text,
with the hub repeated below it as a child entry, and every comparison
page's breadcrumb had a Comparisons crumb with no URL. The breadcrumb
JSON-LD fix earlier on this branch drops such crumbs, so those pages
emitted only Docs → page.

With "index" removed, the hub is the folder index:
- The sidebar "Comparisons" label links to /docs/comparisons/. The seven
  comparison pages keep their order below it.
- Comparison pages emit Docs → Comparisons (/docs/comparisons/) → page.
- /docs/comparisons/ still returns 200 with an unchanged MDX source,
  title, H1, canonical URL and markdown twin.
- Prev/next is unchanged: faq → comparisons → best-react → best-vue ...

The hub-trail test becomes a table and pins the full trail for
best-angular-file-upload-libraries next to the Azure one. Against the
old meta.json it fails (exit 1):

  - "item": "https://useupup.com/docs/comparisons/",
  - "name": "Comparisons",
  - "position": 2,
  ...
  - "position": 3,
  + "position": 2,

apps/e2e-test/landing/docs.spec.ts has no sidebar, prev/next or overview
assertion for comparisons. It has only the /documentation/comparisons
redirect, which next.config.mjs owns.
fix(landing): valid docs breadcrumb JSON-LD, plus guides, storage and quickstarts hub pages
@codesandbox

codesandbox Bot commented Sep 27, 2026

Copy link
Copy Markdown

Review or Edit in CodeSandbox

Open the branch in Web Editor • VS Code • Insiders

Open Preview

@AminDhouib
AminDhouib merged commit 4b9b067 into master Sep 27, 2026
22 checks passed
AminDhouib added a commit that referenced this pull request Sep 27, 2026
@AminDhouib

Copy link
Copy Markdown
Member Author

Deployed to production. Post-deploy checks:

  • Probe, run against useupup.com with a cache-buster: 12 docs pages checked. Every one returns 200, and in each BreadcrumbList every crumb but the last has an item, with positions running 1..n.
    • Hubs: /docs/guides/, /docs/guides/storage/ and /docs/quickstarts/ now return 200. Before this deploy they returned 404.
    • Azure guide: Docs → Guides → Storage → page.
    • Roundups, comparison pages and quickstarts: Docs → Comparisons → page, or Docs → Quickstarts → page.
    • api-reference/upupuploader/ref-api: Docs → page. That folder has no hub page, so its crumb is dropped from the trail.
    • The same probe run on the pre-fix build failed all 12 pages.
  • Sitemap: it lists all three new hubs.
  • Submissions: all 72 /docs/ URLs went to IndexNow (HTTP 200, verdict ok) and to Bing URL submission (72 accepted). sitemap.xml was resubmitted to Search Console. I submitted every docs page, not just the new ones, because the breadcrumb markup changed on every nested page.
  • Master→dev sync: done in Sync master back to dev after #461 #462.

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