Repository navigation
Conversation
A post has a Spanish twin iff content/blog/<slug>.es.mdx exists; it is
served at /es/blog/<slug> (no /es/blog index), with reciprocal hreflang
and x-default=EN, its own canonical, and a sitemap entry dated from its
frontmatter. Same loader-only i18n as docs. EN surfaces (index, sitemap,
llms-full) now ask for getPages('en') explicitly. The build fails if a
Spanish post has no English twin, if a French post appears (no route),
or if the language bar's twin list disagrees with the files. The post
render moves into a shared BlogPostView; English output is unchanged.
IndexNow: date-only lastmods (midnight UTC) are compared by day, or a new
post dated from frontmatter would never be announced.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BcPLgMFMs2B4SJv3vfq8jv
A post for people whose applications go unanswered. It opens with a self-contained answer, gives the US hiring backdrop from a Cleveland Fed commentary and the BLS July 2026 JOLTS release (quoted, dated, US-only), and moves to what the reader controls: whether a job deserves an application, who to write to before applying, and what their own funnel shows. It never promises interviews or replies. The Spanish twin is the first post on the minimal blog i18n: same slug under /es/blog, reciprocal hreflang, inLanguage es, FAQPage mirrored from the visible FAQ. The essay links stay on the English essay and say so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BcPLgMFMs2B4SJv3vfq8jv
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 12 minutes. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configuration
📒 Files selected for processing (16)
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. Comment |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BcPLgMFMs2B4SJv3vfq8jv
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BcPLgMFMs2B4SJv3vfq8jv
…llow it On /de (and /es, /fr) the ⌘K dialog searched the English index. /api/search already keeps one Orama index per language, with that language's tokenizer: /api/search?query=bewerbung&locale=de returns 100 German hits, the same query without locale returns 0. But the dialog takes the locale from Fumadocs' I18nProvider, and the shared root layout never mounted one, so it sent none and the server fell back to English. LocaleRootProvider reads the locale from the path, the same way FooterLocaleLink and the AI search do, and passes it to RootProvider together with the ten Fumadocs UI labels for es, fr and de (search placeholder, "On this page", previous/next page...). It passes no `locales` list on purpose: with more than one, Fumadocs layouts render their own language picker next to ours. English is unchanged: locale=en, default labels. No date source is touched (neither file feeds git-date or home-date), so no lastmod moves. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ared home modules into _home (renames only) Pure renames, no content change, so every moved file keeps its git history and, with git-date's --follow --diff-filter=r, its lastmod. Edits come in the following commits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e server HTML; one home dictionary per language <html lang> was "en" on every page: the single root layout hardcoded it, and a script corrected it in the browser, which crawlers that read raw HTML never see (search-ops D1). Each locale now has its own root layout ((en)/, es/, fr/, de/), all rendering the same RootShell (providers, footer, analytics) with their own lang, the content-language meta on translated pages, and a static locale for the ⌘K search. LangSync and the inline script are gone. Unmatched URLs get global-not-found.tsx (experimental.globalNotFound), which keeps the 404 the site had: Next's message inside the English shell, noindex. Switching language is now a full page load, the cost of separate root layouts. The home dictionary is split: home-dict.tsx keeps the type and helpers, and each language has its own home-<locale>.tsx. A home's lastmod now depends on its route, the shared trunk and its own dictionary, so editing the French home stops moving the English one. Dates: the English routes moved into (en) in the previous commit as pure renames, and git-date now runs git log with --follow --diff-filter=r, so a moved page keeps its last real change as lastmod. The sitemap paths and home-date follow the new locations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With one root layout per locale the server HTML carries the right <html lang> on every page, so a wrong one is a regression. Agreed with search-ops when the guard landed (#142): flip it in the same PR as the root layouts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…locale # Conflicts: # src/components/locale-root-provider.tsx # src/components/root-shell.tsx
Moving the home under (en)/ changes the file name Next derives for its opengraph image (same bytes, new path hash), so the old URL would 404 for cards cached by social networks and for saved links. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…king after the move into (en) An adversarial review of this branch reproduced three regressions: - Every signatory's wide card moved from /manifesto/s/<user>/opengraph-image to ...-1xn4ck (Next hashes generated image routes inside a route group). The example card on /manifesto and /es/manifesto, the "Download your card: wide" link and every card already shared on social sites would 404. A 308 keeps the stable path working, and the i18n guard now fails if either old card URL stops ending in an image (stable-image, with its selftest sabotage). - git-date skipped any rename commit, including R<100 ones. PRs land squashed, so a move and an edit share one commit and the edit never reached the lastmod. -M100% makes only exact renames count as moves. - .coderabbit.yaml still pointed its homepage rules at src/app/(home)/, which no longer exists, so its "visual change needs the maintainer" checks went silent. They now cover src/app/**/(home)/ and src/app/_home/. The outputFileTracingIncludes keys are also written as the escaped picomatch route globs Next documents. The TTF is traced by static analysis either way. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he site, and drop founderOf from the Person node Bylines, the /about descriptions, the home and /methodology author answers, the press boilerplate, llms.txt and llms-full.txt now use the same descriptor as santifer.io and Wikidata. The author paragraphs are rewritten so they do not repeat it, in en, es, fr and de. /about: Featured in WIRED Greece in the two descriptions, two sentences reworded, Last updated and ProfilePage dateModified set to 9 Oct 2026. /methodology: bio FAQ wording and role-name correction only; methodology unchanged, dateModified kept. schema: founderOf removed from the Person node. It is not a schema.org property, and Organization.founder already states the relation. The signatory bio on the manifesto pages is not touched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he blog i18n branch The blog post page keeps the shared BlogPostView. Its byline now reads creator of career-ops (creador de career-ops in Spanish), and post dates in the sitemap go through handDate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Status on 9 October. This PR is now stacked on #149 (the per-language root layouts). #149 moves the blog under
Built and served locally: 165 of 165 URLs pass the i18n SEO guard (the two new ones are this post in English and Spanish), and the agent-layer guard, schema parity and the future-dates check pass. Still to do before merging, on the day itself: the post's |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What
A new post, Why am I not getting interviews?, in English and Spanish, and the small blog infrastructure the Spanish version needs.
/blog/why-am-i-not-getting-interviews(EN)/es/blog/why-am-i-not-getting-interviews(ES, same slug)The post
contactoto find one person to write to (it never sends), and the funnel report, follow-ups and patterns (thresholds 20, 5 and three, as in the core).Blog i18n (minimal)
/es/blog, with no/es/blogindex while few posts have a Spanish twin.BLOG_ES_TWINSlists the posts with a Spanish twin. The build fails if that list disagrees with the files, if a Spanish post has no English twin, or if a French post appears.inLanguage: eson BlogPosting and FAQPage,Content-Language: es, andLangSync.llms.txtlists the English post, andllms-full.txtstays English-only.Checked locally (production build)
npm run buildpasses.faq-from-mdx --check,verify-agent-layerandverify-schema-paritypass (115 claims on 122 URLs)./es/blogand/es/blog/<post without twin>return 404.Depends on
Links to
/docs/introduction/guides/is-this-job-worth-applying-to(#117). Merge after #117 so those links are not 404 in production. In this preview they 404.Not to be merged before the 24 h notice to search-ops has run.
🤖 Generated with Claude Code
https://claude.ai/code/session_01BcPLgMFMs2B4SJv3vfq8jv