Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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 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>Sat, 08 Aug 2026 18:36:39 GMT</lastBuildDate>
<lastBuildDate>Wed, 26 Aug 2026 02:49:58 GMT</lastBuildDate>
<atom:link href="https://usewraith.xyz/feed.xml" rel="self" type="application/rss+xml" />

<item>
Expand Down
44 changes: 31 additions & 13 deletions public/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,79 +2,97 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://usewraith.xyz</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://usewraith.xyz/faq</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/privacy</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/use-cases</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/roadmap</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/case-studies</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/stellar</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/careers</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/press</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/grants</loc>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/grants/showcase</loc>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/contributors</loc>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/case-studies/payroll-processor</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://usewraith.xyz/blog</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/compare</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://usewraith.xyz/newsletter</loc>
<lastmod>2026-08-08</lastmod>
<lastmod>2026-08-26</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
Expand Down
14 changes: 14 additions & 0 deletions scripts/sitemap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,20 @@ const knownRoutes = [
'/stellar',
'/careers',
'/press',
'/grants',
'/grants/showcase',
'/contributors',
'/es',
'/es/faq',
'/es/privacy',
'/es/use-cases',
'/es/roadmap',
'/es/case-studies',
'/es/stellar',
'/es/careers',
'/es/grants',
'/es/grants/showcase',
'/es/contributors',
];

function getCaseStudyRoutes(): string[] {
Expand Down
182 changes: 181 additions & 1 deletion src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { lazy, Suspense } from 'react';
import { lazy, Suspense, useEffect, type ReactNode } from 'react';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Header from './components/Header';
import Hero from './components/Hero';
Expand All @@ -7,6 +7,8 @@ import Layout from './components/Layout';
import TrustStrip from './components/TrustStrip';
import PartnerStrip from './components/PartnerStrip';
import { ThemeProvider } from './context/ThemeContext';
import { Seo } from './utils/seo';
import { changeLocale, type Locale } from './i18n';

// Lazy load below-the-fold homepage components
const StealthAnimation = lazy(() => import('./components/StealthAnimation'));
Expand All @@ -17,6 +19,7 @@ const StellarMetrics = lazy(() => import('./components/StellarMetrics'));
const Compare = lazy(() => import('./components/Compare'));
const Showcase = lazy(() => import('./components/Showcase'));
const CaseStudiesStrip = lazy(() => import('./components/CaseStudiesStrip'));
const FeaturedGrantShowcase = lazy(() => import('./components/FeaturedGrantShowcase'));
const EcosystemPartners = lazy(() => import('./components/EcosystemPartners'));
const CtaStrip = lazy(() => import('./components/CtaStrip'));
const Footer = lazy(() => import('./components/Footer'));
Expand All @@ -29,6 +32,7 @@ const UseCases = lazy(() => import('./pages/UseCases'));
const Stellar = lazy(() => import('./pages/Stellar'));
const Roadmap = lazy(() => import('./pages/Roadmap'));
const Grants = lazy(() => import('./pages/Grants'));
const GrantShowcase = lazy(() => import('./pages/GrantShowcase'));
const CaseStudies = lazy(() => import('./pages/CaseStudies'));
const Careers = lazy(() => import('./pages/Careers'));
const About = lazy(() => import('./pages/About'));
Expand All @@ -37,9 +41,21 @@ const NotFound = lazy(() => import('./pages/NotFound'));
const Contributors = lazy(() => import('./pages/Contributors'));
const Blog = lazy(() => import('./pages/Blog'));

/** Sets the i18n locale on mount for locale-prefixed routes. */
function LocaleSetter({ locale, children }: { locale: Locale; children: ReactNode }) {
useEffect(() => {
changeLocale(locale);
}, [locale]);
return <>{children}</>;
}

function Home() {
return (
<div className="bg-surface text-on-surface">
<Seo
title="Wraith Protocol — Private payments for every chain"
description="Wraith Protocol enables private payments on any blockchain using stealth addresses. One SDK, multiple chains."
/>
<a href="#main-content" className="skip-link">
Skip to content
</a>
Expand All @@ -57,6 +73,7 @@ function Home() {
<Compare />
<Showcase />
<CaseStudiesStrip />
<FeaturedGrantShowcase />
<EcosystemPartners />
<CtaStrip />
</Suspense>
Expand Down Expand Up @@ -109,6 +126,14 @@ export default function App() {
</Layout>
}
/>
<Route
path="/grants/showcase"
element={
<Layout>
<GrantShowcase />
</Layout>
}
/>
<Route
path="/about"
element={
Expand Down Expand Up @@ -141,6 +166,161 @@ export default function App() {
</Layout>
}
/>

{/* Spanish locale-prefixed routes */}
<Route
path="/es"
element={
<LocaleSetter locale="es">
<Home />
</LocaleSetter>
}
/>
<Route
path="/es/faq"
element={
<LocaleSetter locale="es">
<Faq />
</LocaleSetter>
}
/>
<Route
path="/es/privacy"
element={
<LocaleSetter locale="es">
<Privacy />
</LocaleSetter>
}
/>
<Route
path="/es/newsletter"
element={
<LocaleSetter locale="es">
<Newsletter />
</LocaleSetter>
}
/>
<Route
path="/es/use-cases"
element={
<LocaleSetter locale="es">
<UseCases />
</LocaleSetter>
}
/>
<Route
path="/es/roadmap"
element={
<LocaleSetter locale="es">
<Roadmap />
</LocaleSetter>
}
/>
<Route
path="/es/case-studies"
element={
<LocaleSetter locale="es">
<CaseStudies />
</LocaleSetter>
}
/>
<Route
path="/es/case-studies/:slug"
element={
<LocaleSetter locale="es">
<CaseStudies />
</LocaleSetter>
}
/>
<Route
path="/es/vitals"
element={
<LocaleSetter locale="es">
<Vitals />
</LocaleSetter>
}
/>
<Route
path="/es/stellar"
element={
<Layout>
<LocaleSetter locale="es">
<Stellar />
</LocaleSetter>
</Layout>
}
/>
<Route
path="/es/careers"
element={
<Layout>
<LocaleSetter locale="es">
<Careers />
</LocaleSetter>
</Layout>
}
/>
<Route
path="/es/grants"
element={
<Layout>
<LocaleSetter locale="es">
<Grants />
</LocaleSetter>
</Layout>
}
/>
<Route
path="/es/grants/showcase"
element={
<Layout>
<LocaleSetter locale="es">
<GrantShowcase />
</LocaleSetter>
</Layout>
}
/>
<Route
path="/es/about"
element={
<Layout>
<LocaleSetter locale="es">
<About />
</LocaleSetter>
</Layout>
}
/>
<Route
path="/es/contributors"
element={
<Layout>
<LocaleSetter locale="es">
<Contributors />
</LocaleSetter>
</Layout>
}
/>
<Route
path="/es/blog"
element={
<Layout>
<LocaleSetter locale="es">
<Blog />
</LocaleSetter>
</Layout>
}
/>
<Route
path="/es/blog/:slug"
element={
<Layout>
<LocaleSetter locale="es">
<Blog />
</LocaleSetter>
</Layout>
}
/>

<Route path="*" element={<NotFound />} />
</Routes>
</Suspense>
Expand Down
Loading
Loading