Commit 463ea0a
feat(website): comprehensive website revamp — performance, design, UX, new pages (#514)
* fix(ast): replace DescribeStatement stubs with UnsupportedStatement, fix extraction gaps
Addresses multiple issues from the v1.14.0 comprehensive project review:
P0 — Critical:
- Add UnsupportedStatement AST node with Kind and RawSQL fields to replace
DescribeStatement misuse for Snowflake stubs (USE, COPY INTO, PUT, GET,
LIST, REMOVE, CREATE STAGE/STREAM/TASK/PIPE/etc.)
- Add EXTRACT(field FROM source) parser support (was missing entirely)
- Fix all 7 extraction gap tests (CASE, CAST, IN, BETWEEN, EXTRACT,
recursive CTEs) — previously t.Skip() stubs, now passing
P1 — High:
- Add AST.HasUnsupportedStatements() for stub detection
- Formatter emits "-- UNSUPPORTED: ..." comment for unmodeled statements
instead of producing corrupt SQL
- Remove stale "CREATE TABLE not implemented" comment from coverage tests
- Add TODO(v2-cleanup) markers to 5 overlapping coverage test files
P2 — Medium:
- Reconcile Validate() empty-input behavior (parser.ValidateBytes now
rejects empty input, matching gosqlx.Validate)
- Fix ParseBytes string→byte→string round-trip (now threads []byte
directly to tokenizer)
- Deprecate pkg/sql/monitor in favor of pkg/metrics (v2.0 removal)
- Add v2.0 removal timeline to 3 deprecated parser APIs
All tests pass with -race across the full project (20 files, +361/-103).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(website): comprehensive website revamp — performance, design, UX, new pages
Major overhaul of the GoSQLX website driven by a full audit (Lighthouse,
accessibility, competitive analysis, performance traces, mobile UX testing).
Performance:
- Convert 7 homepage components from client to server components
- Replace Framer Motion FadeIn with lightweight CSS IntersectionObserver (FadeInCSS)
- Extract GitHubStarButton/GitHubStarCount as tiny client islands
- Expected LCP improvement from ~893ms to <400ms
Design System:
- 12 new semantic design tokens (bg, brand, text, border layers)
- Glass cards: increased opacity, inset highlight, deeper shadows
- Typography: Space Grotesk (headings) + Inter (body), JetBrains Mono (code)
- Prose contrast improved (body opacity 0.7 → 0.8)
New Pages & Sections:
- /compare/ — Feature matrix + perf bar chart vs pg_query, vitess, sqlparser
- DialectShowcase — 8 dialect cards with compliance % and status badges
- PerformanceSection — Animated horizontal bar chart (CSS-only, scroll-triggered)
- TrustSection — 5 metric cards + 3 integration cards (Claude, VS Code, Cursor)
- Hero MiniPlayground — Live WASM-powered SQL parser embedded in hero
Docs & UX:
- Cmd+K search modal with Fuse.js (SearchModal + search-index)
- Code block CopyButton (hover-to-reveal, clipboard feedback)
- DocNavigation (prev/next article links)
- Reading time estimate on articles
- Mobile sidebar scroll lock
Accessibility (Lighthouse 96 → targeting 100):
- Logo alt text, cursor-pointer on interactive elements
- Mobile menu: body scroll lock + full opacity background
- Text contrast: zinc-300 → zinc-200 on cards, code font 13→14px
Dark/Light Mode:
- ThemeToggle with localStorage persistence + system preference detection
- Inline script prevents flash of wrong theme
- Full light mode CSS token overrides
Benchmarks:
- Visual bar charts (ParseChart, CompetitorChart) above tables
- Tables in collapsible "View raw data" toggles
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(website): comprehensive light mode CSS override layer
The light mode was broken because all 300+ component class strings use
hardcoded dark-mode Tailwind utilities (text-white, text-zinc-300,
bg-white/[0.06], border-white/[0.06]). The CSS custom property overrides
were useless since components don't reference them.
Fix: add a comprehensive html.light CSS layer that overrides every
hardcoded dark-mode class — text colors, backgrounds, borders, glass
cards, buttons, navbar (including dynamic rgba bg), footer, search
modal, code blocks (kept dark per convention), accent colors, badges,
bar charts, and section borders.
Also fix Navbar to detect light class via MutationObserver and swap
the hardcoded rgba(9,9,11) bg to rgba(250,251,252) in light mode.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(website): add !important to light mode overrides for Tailwind v4 cascade
Tailwind v4 compiles utilities inside @layer which wins the CSS cascade
over unlayered selectors. Our html.light overrides were being ignored.
Fix: add !important to all light mode color/bg/border overrides.
Also preserve dark code block styling inside pre/textarea elements
by undoing text color overrides with inherit.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(website): complete light mode audit — slate colors, playground, badges
Audit of all 21 page/component files found remaining light mode gaps:
- Add slate-200 through slate-600 text color overrides (playground tabs)
- Add bg-slate-700/800/900/950 background overrides
- Add border-slate-500/700/800 border overrides
- Add bg-zinc-800/900/950 background overrides
- Add bg-surface override for docs sidebar
- Keep playground editor dark in light mode (convention) via scoped
overrides targeting the h-[calc(100vh-64px)] container
- Reduce hero gradient opacity from 0.3 to 0.15 in light mode
- Fix ThemeToggle: remove non-functional light:/dark: pseudo-classes,
simplify to standard classes that work with CSS overrides
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(website): playground light mode + accent button text-white exception
Two fixes:
1. Remove forced-dark overrides on playground — it now responds to
the theme toggle like every other page. CodeMirror editor keeps
its own oneDark theme regardless.
2. Add CSS exceptions so text-white stays truly white inside
accent-colored backgrounds (bg-accent-indigo, bg-accent-green,
bg-brand). Fixes the docs "Get Started" button which had dark
text on indigo bg in light mode.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(website): bump text contrast to pass Lighthouse accessibility >= 0.95
Lighthouse CI failed with accessibility 0.93 (threshold: 0.95).
Root cause: text-zinc-400/500 on dark backgrounds gives only ~4.3:1
contrast ratio, below WCAG AA minimum of 4.5:1.
Changes:
- MiniPlayground: inactive tabs zinc-500 → zinc-400, labels zinc-400 → zinc-300
- TrustSection: heading and labels zinc-400 → zinc-300
- DialectShowcase: subtitle zinc-400 → zinc-300
- AnimatedBars: value labels zinc-400 → zinc-300
- PerformanceSection: footnote zinc-500 → zinc-400
All text now passes WCAG AA (4.5:1 minimum contrast on dark backgrounds).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(website): fix Lighthouse a11y failures — code contrast + select label
Two specific Lighthouse accessibility failures from the CI report:
1. color-contrast (2.17:1): The <code> inside MiniPlayground's output
<pre> had text-zinc-300 which got overridden to dark gray (#4B5563)
by the global light mode CSS, but the <pre> bg stays dark (#1E1E2E).
Fix: use inline style={{ color: '#D4D4D8' }} on all code-block
<pre> and <textarea> elements so the color can't be overridden.
2. select-name: The dialect <select> was wrapped in a <label> with no
visible text. Lighthouse couldn't associate them.
Fix: add explicit <label> with "Dialect:" text + aria-label on select.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Ajit Pratap Singh <ajitpratapsingh@Ajits-Mac-mini-2655.local>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent b36550f commit 463ea0a
File tree
40 files changed
+2243
-354
lines changed- website/src
- app
- benchmarks
- compare
- docs
- [...slug]
- components
- benchmarks
- docs
- home
- layout
- ui
- lib
40 files changed
+2243
-354
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
3 | 4 | | |
4 | 5 | | |
5 | 6 | | |
| 7 | + | |
| 8 | + | |
6 | 9 | | |
7 | 10 | | |
8 | 11 | | |
| |||
26 | 29 | | |
27 | 30 | | |
28 | 31 | | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
29 | 64 | | |
30 | 65 | | |
31 | 66 | | |
| |||
75 | 110 | | |
76 | 111 | | |
77 | 112 | | |
78 | | - | |
| 113 | + | |
79 | 114 | | |
80 | 115 | | |
81 | 116 | | |
82 | 117 | | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
| 118 | + | |
| 119 | + | |
110 | 120 | | |
111 | | - | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
112 | 153 | | |
113 | 154 | | |
114 | 155 | | |
115 | 156 | | |
116 | | - | |
| 157 | + | |
117 | 158 | | |
118 | 159 | | |
119 | 160 | | |
120 | 161 | | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
135 | | - | |
136 | | - | |
137 | | - | |
138 | | - | |
139 | | - | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
149 | | - | |
150 | | - | |
151 | | - | |
152 | | - | |
153 | | - | |
154 | | - | |
155 | | - | |
156 | | - | |
157 | | - | |
158 | | - | |
159 | | - | |
160 | | - | |
161 | | - | |
162 | | - | |
163 | | - | |
164 | | - | |
165 | | - | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
172 | | - | |
173 | | - | |
174 | | - | |
175 | | - | |
176 | | - | |
177 | | - | |
178 | | - | |
| 162 | + | |
| 163 | + | |
179 | 164 | | |
180 | | - | |
181 | | - | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
182 | 228 | | |
183 | 229 | | |
184 | 230 | | |
| |||
0 commit comments