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
58 changes: 29 additions & 29 deletions apps/website/messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,57 +14,57 @@
"Invest"
],
"hero": {
"tag": "GPU-Verified Green AI Economy",
"badge_publications": "7 PUBLICATIONS",
"tag": "Hardware-verified RTL · measured on real silicon",
"badge_publications": "2 arXiv PAPERS",
"badge_doi": "DOI-VERIFIED",
"headline": "φ² + 1/φ² = 3",
"subheadline": "298K tokens/s on RTX 3090 | 274K on A100 | VERIFIED",
"quote": "\"Not a claim — a theorem. Not a promise — a proof. Not simulated — GPU verified.\"",
"desc": "First AI platform with <strong>4 mathematical theorems</strong> + <strong>GPU-verified benchmarks</strong>: <strong>298K tokens/s</strong> (RTX 3090), <strong>70% noise robustness</strong> at 30% corruption",
"subheadline": "Bit-exact against an independent model · measured on a live Artix-7 · no vendor licence anywhere in the flow",
"quote": "\"Not simulated — measured. Not asserted — reproducible by anyone, for free.\"",
"desc": "Send RTL and get it <strong>measured on real silicon</strong>: bit-exact conformance against a reference model written from the specification rather than from your code, achieved timing, resources and the bitstream — on a <strong>fully open toolchain</strong>, so every number can be re-run without buying anything.",
"metrics": [
{
"value": "298K",
"label": "Tokens/s (RTX 3090)",
"proof": "RunPod GPU verified"
"value": "170,068",
"label": "cycles checked, 0 mismatches",
"proof": "On a third-party design, 8 Aug 2026"
},
{
"value": "274K",
"label": "Tokens/s (A100)",
"proof": "RunPod GPU verified"
"value": "SKY130",
"label": "Tape-out completed",
"proof": "Tiny Tapeout — GDS, gate-level, precheck"
},
{
"value": "70%",
"label": "Noise @30%",
"proof": "Theorem 1 + GPU test"
"value": "0",
"label": "Vendor licences needed",
"proof": "Yosys · nextpnr-xilinx · iverilog"
}
],
"newResults": {
"title": "GPU-Verified Results (RunPod)",
"title": "Measured, not estimated",
"items": [
{
"value": "298K",
"label": "RTX 3090 tokens/s",
"source": "runpod_full_tests_report.md"
"value": "170,068",
"label": "Cycles bit-exact on a client design",
"source": "0 mismatches, ACC_W = 32 / 24 / 16"
},
{
"value": "274K",
"label": "A100 80GB tokens/s",
"source": "e2e_repeat_report.md"
"value": "112 MHz",
"label": "Post-route on XC7A200T",
"source": "nextpnr-xilinx, sequential MAC"
},
{
"value": "70.2%",
"label": "Noise Robustness @30%",
"source": "Both GPUs identical"
"value": "100%",
"label": "Held-out accuracy, training on-chip",
"source": "Backward pass in RTL, no host"
},
{
"value": "293W",
"label": "A100 Power (vs 348W RTX)",
"source": "nvidia-smi verified"
"value": "0",
"label": "DSP48 blocks in the GF16 matmul",
"source": "32,252 LUTs, fabric-only mapping"
}
]
},
"cta": "See the Proofs",
"ctaSecondary": "Run a Node"
"cta": "Verify my RTL",
"ctaSecondary": "See the evidence"
},
"navExtra": {
"dashboard": "Dashboard",
Expand Down
58 changes: 29 additions & 29 deletions apps/website/messages/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,57 +14,57 @@
"Инвестиции"
],
"hero": {
"tag": "Доказанная Экономика Green AI",
"badge_publications": "7 ПУБЛИКАЦИИ",
"badge_doi": "DOI-ПОДТВЕРЖДЕНО",
"tag": "Верификация RTL на живом кремнии",
"badge_publications": "2 СТАТЬИ arXiv",
"badge_doi": "ПОДТВЕРЖДЕНО DOI",
"headline": "φ² + 1/φ² = 3",
"subheadline": "4 Теоремы + Верифицированные Результаты = Доказанная Ценность",
"quote": "\"Не заявлениетеорема. Не обещаниедоказательство. Не симуляция — проверено на GPU.\"",
"desc": "Первая AI платформа с <strong>4 математическими теоремами</strong> + <strong>верифицированными бенчмарками</strong>: <strong>20×</strong> сжатие памяти (проверено на CPU), <strong>до 3000×</strong> энергоэффективность (проекция FPGA)",
"subheadline": "Побитово против независимой модели · измерено на живом Artix-7 · ни одной вендорской лицензии во всём флоу",
"quote": "«Не симуляцияизмерение. Не утверждениевоспроизводимость, бесплатно и любым желающим.»",
"desc": "Присылаете RTL — получаете <strong>измерения на настоящем кремнии</strong>: побитовое соответствие эталонной модели, написанной по спецификации, а не по вашему коду, достигнутый тайминг, ресурсы и битстрим — на <strong>полностью открытом тулчейне</strong>, так что любую цифру можно перепроверить, ничего не покупая.",
"metrics": [
{
"value": "15.7×",
"label": "Сжатие",
"proof": "Теорема 3 + ternary_quant_report"
"value": "170 068",
"label": "циклов проверено, 0 расхождений",
"proof": "На чужом дизайне, 8 авг 2026"
},
{
"value": "8.1×",
"label": "Ускорение GPU",
"proof": "Теорема 2 + GPU benchmarks"
"value": "SKY130",
"label": "Тейпаут пройден",
"proof": "Tiny Tapeout — GDS, вентильный тест, precheck"
},
{
"value": "100%",
"label": "Устойчивость к шуму",
"proof": "Теорема 1 + hdc_double_q_report"
"value": "0",
"label": "вендорских лицензий нужно",
"proof": "Yosys · nextpnr-xilinx · iverilog"
}
],
"newResults": {
"title": "Последние верифицированные результаты",
"title": "Измерено, а не оценено",
"items": [
{
"value": "15.7×",
"label": "HDC сжатие",
"source": "ternary_quant_report.md"
"value": "170 068",
"label": "циклов побитово на клиентском дизайне",
"source": "0 расхождений, ACC_W = 32 / 24 / 16"
},
{
"value": "43%",
"label": "Бонус разреженности",
"source": "ternary_quant_report.md"
"value": "112 МГц",
"label": "post-route на XC7A200T",
"source": "nextpnr-xilinx, последовательный MAC"
},
{
"value": "100%",
"label": "Устойчивость при 20% ошибок",
"source": "hdc_double_q_report.md"
"label": "на отложенной выборке, обучение на кристалле",
"source": "Обратный проход в RTL, без хоста"
},
{
"value": "8.1×",
"label": "SIMD ускорение",
"source": "GPU benchmarks"
"value": "0",
"label": "блоков DSP48 в матмуле GF16",
"source": "32 252 LUT, только логика"
}
]
},
"cta": "Смотреть доказательства",
"ctaSecondary": "Запустить ноду"
"cta": "Проверить мой RTL",
"ctaSecondary": "Посмотреть доказательства"
},
"navExtra": {
"dashboard": "Панель",
Expand Down
25 changes: 21 additions & 4 deletions apps/website/src/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,23 @@ import { motion } from 'framer-motion'
import { Link } from 'react-router-dom'
import { useI18n } from '../i18n/context'

// Under HashRouter a bare `#section` is read as a route, so these links used to
// dump the reader on the homepage without scrolling to what they clicked. This
// sends them home when needed and then finds the section once it exists.
function goToSection(e: React.MouseEvent, id: string) {
e.preventDefault()
const hash = window.location.hash
const onHome = hash === '' || hash === '#' || hash === '#/'
if (!onHome) window.location.hash = '#/'
let tries = 0
const findIt = () => {
const el = document.getElementById(id)
if (el) { el.scrollIntoView({ behavior: 'smooth' }); return }
if (++tries < 40) requestAnimationFrame(findIt)
}
requestAnimationFrame(findIt)
}

export default function Footer() {
const { t } = useI18n()

Expand Down Expand Up @@ -59,10 +76,10 @@ export default function Footer() {
</h4>
<nav aria-label="Footer navigation">
<ul style={{ listStyle: 'none', display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>
<li><a href="#theorems" style={{ color: 'var(--text)', textDecoration: 'none', fontSize: '0.85rem', opacity: 0.7, transition: 'opacity 0.2s' }} aria-label="Navigate to Theorems section">{t.nav?.[1] || 'Theorems'}</a></li>
<li><a href="#solution" style={{ color: 'var(--text)', textDecoration: 'none', fontSize: '0.85rem', opacity: 0.7, transition: 'opacity 0.2s' }} aria-label="Navigate to Solution section">{t.nav?.[2] || 'Solution'}</a></li>
<li><a href="#benchmarks" style={{ color: 'var(--text)', textDecoration: 'none', fontSize: '0.85rem', opacity: 0.7, transition: 'opacity 0.2s' }} aria-label="Navigate to Benchmarks section">{t.nav?.[3] || 'Benchmarks'}</a></li>
<li><a href="#invest" style={{ color: 'var(--text)', textDecoration: 'none', fontSize: '0.85rem', opacity: 0.7, transition: 'opacity 0.2s' }} aria-label="Navigate to Invest section">{t.nav?.[9] || 'Invest'}</a></li>
<li><a href="#theorems" onClick={(e) => goToSection(e, 'theorems')} style={{ color: 'var(--text)', textDecoration: 'none', fontSize: '0.85rem', opacity: 0.7, transition: 'opacity 0.2s' }} aria-label="Navigate to Theorems section">{t.nav?.[1] || 'Theorems'}</a></li>
<li><a href="#solution" onClick={(e) => goToSection(e, 'solution')} style={{ color: 'var(--text)', textDecoration: 'none', fontSize: '0.85rem', opacity: 0.7, transition: 'opacity 0.2s' }} aria-label="Navigate to Solution section">{t.nav?.[2] || 'Solution'}</a></li>
<li><a href="#benchmarks" onClick={(e) => goToSection(e, 'benchmarks')} style={{ color: 'var(--text)', textDecoration: 'none', fontSize: '0.85rem', opacity: 0.7, transition: 'opacity 0.2s' }} aria-label="Navigate to Benchmarks section">{t.nav?.[3] || 'Benchmarks'}</a></li>
<li><a href="#invest" onClick={(e) => goToSection(e, 'invest')} style={{ color: 'var(--text)', textDecoration: 'none', fontSize: '0.85rem', opacity: 0.7, transition: 'opacity 0.2s' }} aria-label="Navigate to Invest section">{t.nav?.[9] || 'Invest'}</a></li>
<li>
<a href="https://t27.ai/docs/" target="_blank" rel="noopener noreferrer" style={{ color: 'var(--accent)', textDecoration: 'none', fontSize: '0.85rem', fontWeight: 600, transition: 'opacity 0.2s' }} aria-label="Open documentation in new tab">
{t.footer?.docs || 'Documentation'}
Expand Down
22 changes: 22 additions & 0 deletions apps/website/src/components/Navigation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,30 @@ export default memo(function Navigation() {
return () => { document.body.style.overflow = '' }
}, [menuOpen])

// These nine links point at sections of the one-page scroll, which do not
// exist on any routed page. Until now the handler called preventDefault and
// then scrollIntoView on null, so every one of them was silently dead on
// /verification, /proof, /ip, /course, /cases and /about — the whole header,
// on six pages. From a routed page it now goes home first and scrolls after
// the homepage has mounted.
const scrollTo = useCallback((id: string) => {
setMenuOpen(false)
setPagesOpen(false)
const hash = window.location.hash
const onHome = hash === '' || hash === '#' || hash === '#/'
if (!onHome) {
window.location.hash = '#/'
// One frame is not enough: the homepage has to mount before the target
// element exists. Poll briefly instead of guessing a delay.
let tries = 0
const findIt = () => {
const el = document.getElementById(id)
if (el) { el.scrollIntoView({ behavior: 'smooth' }); return }
if (++tries < 40) requestAnimationFrame(findIt)
}
requestAnimationFrame(findIt)
return
}
setTimeout(() => {
document.getElementById(id)?.scrollIntoView({ behavior: 'smooth' })
}, 100)
Expand Down
18 changes: 11 additions & 7 deletions apps/website/src/components/sections/HeroSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -273,25 +273,29 @@ export default function HeroSection() {
role="group"
aria-label="Call to action buttons"
>
{/* These were "Install CLI" and "Read Papers", both scrolling to a section
— the first mislabelled, and neither leading to anything that can be
bought. The primary action is now the service; the secondary is the
evidence behind it, which is what a sceptical reader wants next. */}
<motion.a
href="#theorems"
href="#/verification"
className="btn"
style={{ minWidth: 'clamp(140px, 40vw, 200px)' }}
whileHover={{ scale: 1.05, boxShadow: '0 0 20px rgba(218,165,32,0.3)' }}
whileHover={{ scale: 1.05, boxShadow: '0 0 20px rgba(0,255,136,0.3)' }}
whileTap={{ scale: 0.95 }}
aria-label="Install Trinity CLI"
aria-label="Hardware verification service"
>
Install CLI
{t.cta}
</motion.a>
<motion.a
href="#publications"
href="#/proof"
className="btn secondary"
style={{ minWidth: 'clamp(140px, 40vw, 200px)' }}
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
aria-label="Read our publications"
aria-label="Measured evidence behind every claim"
>
Read Papers
{t.ctaSecondary}
</motion.a>
</motion.div>

Expand Down
Loading