Skip to content
Merged
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/sitemap.xml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://refactron.dev/</loc><changefreq>weekly</changefreq><priority>1.0</priority></url><url><loc>https://refactron.dev/blog</loc><changefreq>weekly</changefreq><priority>0.9</priority></url><url><loc>https://refactron.dev/about</loc><changefreq>monthly</changefreq><priority>0.6</priority></url><url><loc>https://refactron.dev/changelog</loc><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://refactron.dev/security</loc><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://refactron.dev/research</loc><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://refactron.dev/privacy-policy</loc><changefreq>yearly</changefreq><priority>0.3</priority></url><url><loc>https://refactron.dev/terms-of-service</loc><changefreq>yearly</changefreq><priority>0.3</priority></url><url><loc>https://refactron.dev/blog/i-ran-refactron-on-djangos-codebase</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-vs-cursor-vs-codeant</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/why-we-built-verification-engine-first</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/legacy-code-ai-refactoring</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-on-requests-library</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/real-cost-of-not-refactoring</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-on-fastapi</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/how-to-safely-refactor-python-code-you-didnt-write</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/why-refactron-runs-locally</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-is-now-a-nodejs-package</loc><changefreq>monthly</changefreq><priority>0.8</priority></url></urlset>
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://refactron.dev/</loc><changefreq>weekly</changefreq><priority>1.0</priority></url><url><loc>https://refactron.dev/blog</loc><changefreq>weekly</changefreq><priority>0.9</priority></url><url><loc>https://refactron.dev/about</loc><changefreq>monthly</changefreq><priority>0.6</priority></url><url><loc>https://refactron.dev/changelog</loc><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://refactron.dev/security</loc><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://refactron.dev/research</loc><changefreq>monthly</changefreq><priority>0.6</priority></url><url><loc>https://refactron.dev/research/perf-01</loc><changefreq>yearly</changefreq><priority>0.5</priority></url><url><loc>https://refactron.dev/research/comparison-01</loc><changefreq>yearly</changefreq><priority>0.5</priority></url><url><loc>https://refactron.dev/privacy-policy</loc><changefreq>yearly</changefreq><priority>0.3</priority></url><url><loc>https://refactron.dev/terms-of-service</loc><changefreq>yearly</changefreq><priority>0.3</priority></url><url><loc>https://refactron.dev/blog/i-ran-refactron-on-djangos-codebase</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-vs-cursor-vs-codeant</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/why-we-built-verification-engine-first</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/legacy-code-ai-refactoring</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-on-requests-library</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/real-cost-of-not-refactoring</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-on-fastapi</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/how-to-safely-refactor-python-code-you-didnt-write</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/why-refactron-runs-locally</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-is-now-a-nodejs-package</loc><changefreq>monthly</changefreq><priority>0.8</priority></url></urlset>
4 changes: 3 additions & 1 deletion scripts/generate-sitemap.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ const staticRoutes = [
{ url: '/about', changefreq: 'monthly', priority: 0.6 },
{ url: '/changelog', changefreq: 'weekly', priority: 0.7 },
{ url: '/security', changefreq: 'monthly', priority: 0.5 },
{ url: '/research', changefreq: 'monthly', priority: 0.45 },
{ url: '/research', changefreq: 'monthly', priority: 0.6 },
{ url: '/research/perf-01', changefreq: 'yearly', priority: 0.5 },
{ url: '/research/comparison-01', changefreq: 'yearly', priority: 0.5 },
{ url: '/privacy-policy', changefreq: 'yearly', priority: 0.3 },
{ url: '/terms-of-service',changefreq: 'yearly', priority: 0.3 },
// blog posts added dynamically below
Expand Down
2 changes: 2 additions & 0 deletions scripts/prerender.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ const PAGES = [
'/changelog',
'/security',
'/research',
'/research/perf-01',
'/research/comparison-01',
'/privacy-policy',
'/terms-of-service',
...blogSlugs.map(slug => `/blog/${slug}`),
Expand Down
20 changes: 20 additions & 0 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,15 @@ import AuthApp from './components/AuthApp';
import NotFoundPage from './components/NotFoundPage';
import ErrorBoundary from './components/ErrorBoundary';
import SkipToMain from './components/SkipToMain';
import ScrollToTop from './components/ScrollToTop';
import usePerformanceMonitoring from './hooks/usePerformanceMonitoring';
import useAccessibility from './hooks/useAccessibility';
import PageLayout from './components/PageLayout';
import Changelog from './components/Changelog';
import SecurityPage from './components/SecurityPage';
import ResearchPage from './components/ResearchPage';
import ResearchPerf01Page from './components/ResearchPerf01Page';
import ResearchComparison01Page from './components/ResearchComparison01Page';
import StatusPage from './components/StatusPage';

import { ThemeProvider } from './contexts/ThemeContext';
Expand Down Expand Up @@ -91,6 +94,7 @@ function App() {
<ErrorBoundary>
<SkipToMain />
<Router>
<ScrollToTop />
{isDocsHost ? (
<Routes>
<Route path="/*" element={<DocsPage />} />
Expand Down Expand Up @@ -161,6 +165,22 @@ function App() {
</PageLayout>
}
/>
<Route
path="/research/perf-01"
element={
<PageLayout mainClassName="flex min-h-0 flex-col">
<ResearchPerf01Page />
</PageLayout>
}
/>
<Route
path="/research/comparison-01"
element={
<PageLayout mainClassName="flex min-h-0 flex-col">
<ResearchComparison01Page />
</PageLayout>
}
/>
<Route path="/status" element={<StatusPage />} />
<Route
path="/about"
Expand Down
36 changes: 24 additions & 12 deletions src/components/AboutPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -722,15 +722,17 @@ const HeroChipModule: React.FC = () => (
.rfn-die-core { animation: rfn-die-pulse 2.6s ease-in-out infinite; }
`}</style>

{/* Surrounding mono labels */}
<div className="absolute -top-2 left-2 text-[9px] font-mono text-neutral-600 tracking-[0.28em]">
{/* Surrounding mono labels — sit OUTSIDE the chip body in the safe
gutter. Bumped from neutral-600/700 to neutral-400/500 so they
actually read against the page bg instead of disappearing. */}
<div className="absolute -top-5 left-2 text-[10px] font-mono text-neutral-400 tracking-[0.28em]">
FIG · 01
</div>
<div className="absolute -bottom-2 right-2 text-[9px] font-mono text-neutral-600 tracking-[0.28em]">
<div className="absolute -bottom-5 right-2 text-[10px] font-mono text-neutral-400 tracking-[0.28em]">
DETERMINISTIC · V0.5
</div>
<div
className="absolute top-1/2 -right-3 -translate-y-1/2 text-[8.5px] font-mono text-neutral-700 tracking-[0.34em] hidden xl:block"
className="absolute top-1/2 -right-6 -translate-y-1/2 text-[9px] font-mono text-neutral-500 tracking-[0.32em] hidden xl:block"
style={{ writingMode: 'vertical-rl' }}
>
ANALYZE · REFACTOR · VERIFY · DOCUMENT
Expand Down Expand Up @@ -793,10 +795,12 @@ const HeroChipModule: React.FC = () => (
</div>
</div>

{/* Bottom-left product label */}
<div className="absolute bottom-5 left-5 text-[10.5px] font-mono leading-[1.35] tracking-[0.24em]">
<div className="text-white/55">REFACTRON</div>
<div className="text-white/35">ENGINE</div>
{/* Bottom-left product label. The chip die above is bright on hover
of the eye, so labels need real contrast or they get read as part
of the dot grid. */}
<div className="absolute bottom-5 left-5 text-[10.5px] font-mono leading-[1.4] tracking-[0.24em]">
<div className="text-white/85 font-medium">REFACTRON</div>
<div className="text-white/55 mt-0.5">ENGINE</div>
</div>

{/* Bottom-right status LEDs — first one pulses (active) */}
Expand Down Expand Up @@ -843,13 +847,21 @@ const AboutPage: React.FC = () => {
});

return (
<div className="relative bg-black font-space antialiased overflow-x-hidden">
<div
className="relative font-space antialiased overflow-x-hidden"
style={{
background:
'radial-gradient(ellipse 80% 45% at 50% 0%, rgba(255,255,255,0.025) 0%, rgba(255,255,255,0) 55%), #050506',
}}
>
{/* ─── Hero ────────────────────────────────────────────────────── */}
<section className="relative w-full min-h-[80vh] flex items-center overflow-hidden bg-black">
{/* Top padding pushes content clear of the fixed navbar (~5rem tall);
bottom padding gives the hero room to breathe before section #2. */}
<section className="relative w-full overflow-hidden">
<AsciiBackdrop maskAt="32% 50%" />
{sectionFades}

<div className="relative z-10 w-full max-w-7xl mx-auto px-4 py-20 lg:py-0">
<div className="relative z-10 w-full max-w-7xl mx-auto px-4 pt-32 sm:pt-36 lg:pt-44 pb-24 lg:pb-32">
<motion.div
{...fadeUp}
className="grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-8 items-center"
Expand Down Expand Up @@ -1340,7 +1352,7 @@ const AboutPage: React.FC = () => {
</section>

{/* ─── Contact ─────────────────────────────────────────────── */}
<section className="relative w-full py-20 bg-black border-t border-white/[0.06]">
<section className="relative w-full py-20 border-t border-white/[0.06]">
<div className="max-w-7xl mx-auto px-4 text-center">
<motion.div {...fadeUp} className="space-y-6">
<p className="text-lg md:text-xl text-neutral-300 font-space">
Expand Down
Loading
Loading