Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
7e8f696
feat(seo): add localized metadata and hreflang for es/pt routes (#164)
cybermax4200 Sep 25, 2026
a3ae4f0
style: fix prettier formatting in scripts/og.ts
cybermax4200 Sep 25, 2026
37a22ca
fix(seo): hrefLang casing and duplicate import in Blog.tsx
cybermax4200 Sep 25, 2026
aeec9a7
Merge branch 'develop' into feat/wave-9-localized-seo-metadata
cybermax4200 Sep 30, 2026
9622be7
fix(seo): map each locale to a distinct crawlable hreflang URL
cybermax4200 Sep 30, 2026
0de48e2
fix(i18n): preserve locale prefix during navigation and reset on Engl…
cybermax4200 Oct 1, 2026
d4c8c02
Merge branch 'develop' into feat/wave-9-localized-seo-metadata
cybermax4200 Oct 1, 2026
77cff47
fix: add missing usePageSeo import to CaseStudies and Grants
cybermax4200 Oct 1, 2026
d482a3b
chore: reformat with pinned prettier 3.8.2, pin exact version
cybermax4200 Oct 1, 2026
8ceda38
chore: sync lockfile specifier with pinned prettier 3.8.2
cybermax4200 Oct 1, 2026
990540e
feat(i18n): fix Footer locale prefixing for supported routes only
cybermax4200 Oct 2, 2026
bb5a39f
Merge branch 'develop' into feat/wave-9-localized-seo-metadata
cybermax4200 Oct 3, 2026
a5d1875
feat(i18n): route Blog/CaseStudies links through locale helper
cybermax4200 Oct 3, 2026
08309bf
chore: update generated files (sitemap, feeds, blog-manifest)
cybermax4200 Oct 3, 2026
eb0031d
feat(i18n): add missing locale routes and locale-aware canonicals
cybermax4200 Oct 3, 2026
617db11
feat(i18n): add localized SEO for dynamic routes (blog posts, authors…
cybermax4200 Oct 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
"github-slugger": "^2.0.0",
"husky": "^9.1.7",
"jsdom": "^29.1.1",
"prettier": "^3.8.2",
"prettier": "3.8.2",
"rehype-slug": "^6.0.0",
"remark-frontmatter": "^5.0.0",
"remark-mdx-frontmatter": "^5.2.0",
Expand Down
2 changes: 1 addition & 1 deletion pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion public/feed.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<link>https://usewraith.xyz/blog</link>
<description>Notes on stealth payments, private infrastructure, and the Wraith ecosystem.</description>
<language>en-us</language>
<lastBuildDate>Mon, 28 Sep 2026 22:48:43 GMT</lastBuildDate>
<lastBuildDate>Sun, 04 Oct 2026 01:17:44 GMT</lastBuildDate>
<atom:link href="https://usewraith.xyz/feed.xml" rel="self" type="application/rss+xml" />

<item>
Expand Down
2 changes: 1 addition & 1 deletion public/feed/tag/announcements.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<link>https://usewraith.xyz/blog/tag/announcements</link>
<description>Notes on stealth payments, private infrastructure, and the Wraith ecosystem.</description>
<language>en-us</language>
<lastBuildDate>Mon, 28 Sep 2026 22:48:43 GMT</lastBuildDate>
<lastBuildDate>Sun, 04 Oct 2026 01:17:44 GMT</lastBuildDate>
<atom:link href="https://usewraith.xyz/feed/tag/announcements.xml" rel="self" type="application/rss+xml" />

<item>
Expand Down
2 changes: 1 addition & 1 deletion public/feed/tag/cryptography.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<link>https://usewraith.xyz/blog/tag/cryptography</link>
<description>Notes on stealth payments, private infrastructure, and the Wraith ecosystem.</description>
<language>en-us</language>
<lastBuildDate>Mon, 28 Sep 2026 22:48:43 GMT</lastBuildDate>
<lastBuildDate>Sun, 04 Oct 2026 01:17:44 GMT</lastBuildDate>
<atom:link href="https://usewraith.xyz/feed/tag/cryptography.xml" rel="self" type="application/rss+xml" />

<item>
Expand Down
2 changes: 1 addition & 1 deletion public/feed/tag/privacy.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<link>https://usewraith.xyz/blog/tag/privacy</link>
<description>Notes on stealth payments, private infrastructure, and the Wraith ecosystem.</description>
<language>en-us</language>
<lastBuildDate>Mon, 28 Sep 2026 22:48:43 GMT</lastBuildDate>
<lastBuildDate>Sun, 04 Oct 2026 01:17:44 GMT</lastBuildDate>
<atom:link href="https://usewraith.xyz/feed/tag/privacy.xml" rel="self" type="application/rss+xml" />

<item>
Expand Down
2 changes: 1 addition & 1 deletion public/feed/tag/sdk.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<link>https://usewraith.xyz/blog/tag/sdk</link>
<description>Notes on stealth payments, private infrastructure, and the Wraith ecosystem.</description>
<language>en-us</language>
<lastBuildDate>Mon, 28 Sep 2026 22:48:43 GMT</lastBuildDate>
<lastBuildDate>Sun, 04 Oct 2026 01:17:44 GMT</lastBuildDate>
<atom:link href="https://usewraith.xyz/feed/tag/sdk.xml" rel="self" type="application/rss+xml" />

<item>
Expand Down
2 changes: 1 addition & 1 deletion public/feed/tag/stealth-payments.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<link>https://usewraith.xyz/blog/tag/stealth-payments</link>
<description>Notes on stealth payments, private infrastructure, and the Wraith ecosystem.</description>
<language>en-us</language>
<lastBuildDate>Mon, 28 Sep 2026 22:48:43 GMT</lastBuildDate>
<lastBuildDate>Sun, 04 Oct 2026 01:17:44 GMT</lastBuildDate>
<atom:link href="https://usewraith.xyz/feed/tag/stealth-payments.xml" rel="self" type="application/rss+xml" />

<item>
Expand Down
2 changes: 1 addition & 1 deletion public/feed/tag/wave-6.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<link>https://usewraith.xyz/blog/tag/wave-6</link>
<description>Notes on stealth payments, private infrastructure, and the Wraith ecosystem.</description>
<language>en-us</language>
<lastBuildDate>Mon, 28 Sep 2026 22:48:43 GMT</lastBuildDate>
<lastBuildDate>Sun, 04 Oct 2026 01:17:44 GMT</lastBuildDate>
<atom:link href="https://usewraith.xyz/feed/tag/wave-6.xml" rel="self" type="application/rss+xml" />

<item>
Expand Down
2 changes: 1 addition & 1 deletion public/feed/tag/wave-7.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<link>https://usewraith.xyz/blog/tag/wave-7</link>
<description>Notes on stealth payments, private infrastructure, and the Wraith ecosystem.</description>
<language>en-us</language>
<lastBuildDate>Mon, 28 Sep 2026 22:48:43 GMT</lastBuildDate>
<lastBuildDate>Sun, 04 Oct 2026 01:17:44 GMT</lastBuildDate>
<atom:link href="https://usewraith.xyz/feed/tag/wave-7.xml" rel="self" type="application/rss+xml" />

<item>
Expand Down
68 changes: 34 additions & 34 deletions public/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,205 +2,205 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://usewraith.xyz</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://usewraith.xyz/faq</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/privacy</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/use-cases</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/use-cases/calculator</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/roadmap</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/case-studies</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/stellar</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/careers</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/press</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/case-studies/payroll-processor</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog/author/lena-vogt</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog/tag/privacy</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog/tag/stealth-payments</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog/tag/cryptography</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog/tag/announcements</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog/tag/wave-7</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog/tag/wave-6</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog/tag/sdk</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/about</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog/privacy-by-default</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog/stealth-addresses-explained</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog/wave-7-kickoff</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/chains</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/contributors</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/ecosystem</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/governance</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/grants</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/newsletter</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/security</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/status</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/threat-model</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/vitals</loc>
<lastmod>2026-09-28</lastmod>
<lastmod>2026-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
Expand Down
21 changes: 18 additions & 3 deletions scripts/gen-sitemap.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@ const knownRoutes = [
'/press',
];

/**
* Pages that have locale-prefixed alternates.
* Must stay in sync with LOCALE_URL_PREFIX in src/utils/seo.ts and the
* locale-prefixed <Route> entries in App.tsx.
*/
const LOCALE_PREFIXED_PAGES = ['/', '/stellar', '/grants', '/blog', '/case-studies'];
const SUPPORTED_LOCALE_PREFIXES = ['/es', '/pt'];

/**
* Dynamically extract routes from case studies data
*/
Expand Down Expand Up @@ -121,8 +129,13 @@ function generateSitemap() {
const distRoutes = existsSync(distDir) ? getDistRoutes(distDir) : [];
const tagRoutes = getBlogTagRoutes();

// Build locale-prefixed alternates for pages that have translations.
const localeRoutes = SUPPORTED_LOCALE_PREFIXES.flatMap((prefix) =>
LOCALE_PREFIXED_PAGES.map((page) => (page === '/' ? prefix : `${prefix}${page}`)),
);

const allRoutes = Array.from(
new Set([...knownRoutes, ...csRoutes, ...distRoutes, ...tagRoutes]),
new Set([...knownRoutes, ...csRoutes, ...distRoutes, ...tagRoutes, ...localeRoutes]),
).filter((r) => r && r !== '/404' && !r.includes('/staging') && !r.includes('/preview'));

const today = new Date().toISOString().split('T')[0];
Expand All @@ -132,8 +145,10 @@ function generateSitemap() {
${allRoutes
.map((r) => {
const loc = `${siteUrl}${r === '/' ? '' : r}`;
const priority = r === '/' ? '1.0' : r.startsWith('/case-studies/') ? '0.7' : '0.8';
const changefreq = r === '/' ? 'daily' : 'weekly';
const isLocaleRoot = r === '/es' || r === '/pt';
const priority =
r === '/' || isLocaleRoot ? '1.0' : r.startsWith('/case-studies/') ? '0.7' : '0.8';
const changefreq = r === '/' || isLocaleRoot ? 'daily' : 'weekly';
return ` <url>
<loc>${loc}</loc>
<lastmod>${today}</lastmod>
Expand Down
Loading
Loading