Skip to content

Commit 06e6f61

Browse files
committed
feat(landing): integrate with CI, finalize polish for txkit.dev launch
CI/CD: - Add landing target to .github/workflows/lighthouse.yml matrix - Pin vite to <7.1.13 in pnpm overrides (Astro 6 requires Vite 7, was 8) - .gitignore .astro/ build cache Landing polish: - Honest copy: drop fake metrics ("12M tx verified"), use verifiable claims (7 packages on npm, built on viem + wagmi) - Hide HostedVerify section until hosted beta is closer to ship - Hero diagram: real lucide icons (decode/preview/simulate/sign), proper centering - LogoWall: 16 real brand SVGs from @web3icons/react with grayscale-on-default, full color on hover - TxApproval mockup: based on real DecodedCalldataPreview structure - Skip-link for keyboard users (WCAG 2.4.1) - WCAG AA contrast fix: text-tertiary #64748B (4.15:1, fail) -> #7F8DA0 (5.85:1) - Primary border token #5C4FE3 (3.46:1) for non-text UI - JSON-LD @graph: Organization + WebSite + SoftwareApplication + FAQPage - Anchor IDs on every section for AI-citable deep links - Static sitemap.xml, robots.txt, llms.txt - public/logo.svg for txkit.dev/logo.svg (npm pages, etc)
1 parent 081d6ee commit 06e6f61

13 files changed

Lines changed: 1961 additions & 109 deletions

File tree

.github/workflows/lighthouse.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ jobs:
2121
target:
2222
- { app: docs, name: '@txkit/docs' }
2323
- { app: story, name: '@txkit/story' }
24+
- { app: landing, name: '@txkit/landing' }
2425
# Mobile preset crashes consistently on Ubuntu CI runners — known
2526
# LHCI issue with --no-sandbox + headless Chromium combinations.
2627
# See lighthouse-ci issues/921. Local `pnpm exec lhci collect` works

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ node_modules
1010
# next.js
1111
.next/
1212

13+
# astro
14+
.astro/
15+
1316
# misc
1417
.DS_Store
1518

app/landing/public/logo.svg

Lines changed: 1 addition & 0 deletions
Loading

app/landing/src/components/Hero/HeroDiagram.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ const HeroDiagram = () => {
185185
// at target.y - 16 and label baseline at target.y + 14.
186186
const iconX = target.x - iconSize / 2
187187
const iconY = target.y - 16
188-
const labelY = target.y + 14
188+
const labelY = target.y + 18
189189

190190
return (
191191
<g key={ `node-${ node.id }` }>

app/landing/src/components/HostedVerify/HostedVerify.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import './HostedVerify.css'
55
<section class="hosted" id="hosted-verification" data-testid="landing-hosted">
66
<div class="container">
77
<header class="hosted__header">
8-
<h2 class="hosted__heading">Run verification yourself, or let us run it for you.</h2>
8+
<h2 class="hosted__heading">Run verification yourself today. Hosted beta opens Q1 2027.</h2>
99
</header>
1010

1111
<div class="hosted__grid">

app/landing/src/components/HostedVerify/HostedVerify.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
}
3535

3636
.hosted__card--saas {
37-
border-color: rgba(67, 56, 202, 0.4);
37+
border-color: var(--txkit-color-primary-border);
3838
}
3939

4040
.hosted__tag {

app/landing/src/components/LogoWall/LogoWall.css

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,22 @@
1616
border: 1px solid var(--txkit-color-border);
1717
border-radius: var(--txkit-radius-md);
1818
color: var(--txkit-color-text-tertiary);
19-
opacity: 0.85;
19+
filter: grayscale(1);
20+
opacity: 0.7;
2021
transition:
22+
filter var(--txkit-duration-base) var(--txkit-easing),
2123
opacity var(--txkit-duration-base) var(--txkit-easing),
2224
border-color var(--txkit-duration-base) var(--txkit-easing),
2325
transform var(--txkit-duration-base) var(--txkit-easing);
2426
}
2527

2628
.logo-wall__tile:hover {
29+
filter: none;
2730
opacity: 1;
2831
border-color: var(--txkit-color-border-strong);
2932
transform: translateY(-1px);
3033
}
3134

32-
.logo-wall__initial {
33-
display: inline-flex;
34-
align-items: center;
35-
justify-content: center;
36-
width: 32px;
37-
height: 32px;
38-
border-radius: 50%;
39-
font-family: var(--txkit-font-mono);
40-
font-weight: 700;
41-
font-size: 0.9375rem;
42-
letter-spacing: -0.04em;
43-
color: #FFFFFF;
44-
}
45-
4635
@media (max-width: 720px) {
4736
.logo-wall {
4837
grid-template-columns: repeat(4, minmax(0, 1fr));

app/landing/src/components/LogoWall/LogoWall.tsx

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,29 @@ import WalletPhantom from '@web3icons/react/icons/wallets/WalletPhantom'
33
import WalletRabby from '@web3icons/react/icons/wallets/WalletRabby'
44
import WalletSafe from '@web3icons/react/icons/wallets/WalletSafe'
55
import WalletCoinbase from '@web3icons/react/icons/wallets/WalletCoinbase'
6-
import WalletWalletConnect from '@web3icons/react/icons/wallets/WalletWalletConnect'
6+
import WalletRainbow from '@web3icons/react/icons/wallets/WalletRainbow'
77
import NetworkSui from '@web3icons/react/icons/networks/NetworkSui'
88
import NetworkArbitrumOne from '@web3icons/react/icons/networks/NetworkArbitrumOne'
9-
import NetworkBase from '@web3icons/react/icons/networks/NetworkBase'
9+
import NetworkPolygon from '@web3icons/react/icons/networks/NetworkPolygon'
1010
import NetworkOptimism from '@web3icons/react/icons/networks/NetworkOptimism'
1111
import NetworkEthereum from '@web3icons/react/icons/networks/NetworkEthereum'
1212
import TokenAAVE from '@web3icons/react/icons/tokens/TokenAAVE'
13+
import ExchangeUniswap from '@web3icons/react/icons/exchanges/ExchangeUniswap'
14+
import Exchange1inch from '@web3icons/react/icons/exchanges/Exchange1inch'
15+
import ExchangeCowswap from '@web3icons/react/icons/exchanges/ExchangeCowswap'
16+
import ExchangeHyperliquid from '@web3icons/react/icons/exchanges/ExchangeHyperliquid'
1317

1418

15-
// 16-slot logo wall - mix of real Web3 brand SVGs from @web3icons/react +
16-
// abstract tiles for brands not in the icon set (Morpho, LI.FI, Crossmint,
17-
// x402). Tiles preserve visual rhythm so the wall reads as one coherent
18-
// integration grid.
19+
// 16-slot logo wall, all real brand SVGs from @web3icons/react.
20+
// Brands not in the icon set (Morpho, LI.FI, Crossmint, x402) are
21+
// replaced with same-category integration anchors that ARE shipped
22+
// (DEX/aggregator/MEV-aware/perp). Wall reads as one coherent grid
23+
// of recognizable Web3 marks.
1924

2025
type Tile = {
2126
id: string,
2227
label: string,
23-
Icon?: React.ComponentType<{ size?: number, variant?: 'mono' | 'branded' }>,
24-
initial?: string,
25-
brandColor?: string,
28+
Icon: React.ComponentType<{ size?: number, variant?: 'mono' | 'branded' }>,
2629
}
2730

2831
const TILES: Tile[] = [
@@ -31,17 +34,17 @@ const TILES: Tile[] = [
3134
{ id: 'rabby', label: 'Rabby', Icon: WalletRabby },
3235
{ id: 'safe', label: 'Safe', Icon: WalletSafe },
3336
{ id: 'coinbase', label: 'Coinbase', Icon: WalletCoinbase },
34-
{ id: 'walletconnect', label: 'Reown', Icon: WalletWalletConnect },
37+
{ id: 'rainbow', label: 'Rainbow', Icon: WalletRainbow },
3538
{ id: 'sui', label: 'Sui / Mysten', Icon: NetworkSui },
3639
{ id: 'arbitrum', label: 'Arbitrum', Icon: NetworkArbitrumOne },
37-
{ id: 'base', label: 'Base', Icon: NetworkBase },
40+
{ id: 'polygon', label: 'Polygon', Icon: NetworkPolygon },
3841
{ id: 'optimism', label: 'Optimism', Icon: NetworkOptimism },
3942
{ id: 'ethereum', label: 'Ethereum', Icon: NetworkEthereum },
4043
{ id: 'aave', label: 'Aave', Icon: TokenAAVE },
41-
{ id: 'morpho', label: 'Morpho', initial: 'M', brandColor: '#3B82F6' },
42-
{ id: 'lifi', label: 'LI.FI', initial: 'L', brandColor: '#FF7B7C' },
43-
{ id: 'crossmint', label: 'Crossmint', initial: 'C', brandColor: '#00FFB7' },
44-
{ id: 'x402', label: 'x402', initial: 'x', brandColor: '#0052FF' },
44+
{ id: 'uniswap', label: 'Uniswap', Icon: ExchangeUniswap },
45+
{ id: '1inch', label: '1inch', Icon: Exchange1inch },
46+
{ id: 'cowswap', label: 'CowSwap', Icon: ExchangeCowswap },
47+
{ id: 'hyperliquid', label: 'Hyperliquid', Icon: ExchangeHyperliquid },
4548
]
4649

4750
const ICON_SIZE = 32
@@ -56,16 +59,7 @@ const LogoWall = () => (
5659
role="listitem"
5760
title={ tile.label }
5861
>
59-
{ tile.Icon ? (
60-
<tile.Icon size={ ICON_SIZE } variant="branded" />
61-
) : (
62-
<span
63-
className="logo-wall__initial"
64-
style={{ backgroundColor: tile.brandColor }}
65-
>
66-
{ tile.initial }
67-
</span>
68-
) }
62+
<tile.Icon size={ ICON_SIZE } variant="branded" />
6963
</div>
7064
)) }
7165
</div>

app/landing/src/layouts/BaseLayout.astro

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ const ogImageUrl = new URL(ogImage, siteUrl).href
171171
})} />
172172
</head>
173173
<body>
174+
<a class="skip-link" href="#main">Skip to content</a>
174175
<slot />
175176
</body>
176177
</html>

app/landing/src/pages/index.astro

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,21 @@ import CodeExample from '../components/CodeExample/CodeExample.astro'
77
import DualTrack from '../components/DualTrack/DualTrack.astro'
88
import Protocol from '../components/Protocol/Protocol.astro'
99
import Components from '../components/Components/Components.astro'
10-
import HostedVerify from '../components/HostedVerify/HostedVerify.astro'
1110
import Footer from '../components/Footer/Footer.astro'
11+
12+
// HostedVerify section hidden until hosted beta is closer to ship.
13+
// Component file kept at app/landing/src/components/HostedVerify/ for revival.
1214
---
1315

1416
<BaseLayout>
1517
<Header />
16-
<main>
18+
<main id="main">
1719
<Hero />
1820
<DecodePreviewSimulate />
1921
<CodeExample />
2022
<DualTrack />
2123
<Protocol />
2224
<Components />
23-
<HostedVerify />
2425
</main>
2526
<Footer />
2627
</BaseLayout>

0 commit comments

Comments
 (0)