Rework landing page and design systems, added pricing section#15
Conversation
…g with StyleManifest; remove unused components
… and update StyleManifest with alternating features; include background images
…ions, enhance layout, and update contributor information
…oader, and improve SiteHeader styling
…tyling, and improve button appearance
…styles, and remove loading animations from Home component Co-authored-by: Copilot <copilot@github.com>
…n, update grid dimensions, and improve visual variants in PricingSection
…ion, improve layout, and refine button animations
…e animation for button background
…cture, add yearly/monthly toggle, and enhance layout
PR Review: Rework landing page and design systems, added pricing sectionOverviewThis PR does three distinct things:
The demo mode work in particular is well-architected and the mock data is thorough. A few issues worth addressing before merge: Bugs / Correctness
const { successRate: _s, ...rest } = mockStats.jobStats;
return NextResponse.json(rest);The production path presumably returns
Performance
Consider using Same note applies to Code Quality
export { BrowserComponent };
Unused font load in Minor
What's Working Well
SummaryThe demo mode system is solid and the landing redesign is cleaner. The main actionable items are: fix the |
Code Review — PR #15: Landing Page Rework + Demo ModeOverviewThis PR does two distinct things:
Overall the work is solid and well-scoped. The demo mode layer is the more complex half, and there are a few issues worth addressing. Demo Mode InfrastructurePotential bug —
export const isDemoMode = process.env.DEMO_MODE === "true";This is evaluated once at module load. On serverless/edge runtimes (Vercel), that is fine — each cold start reads the env var. But the same constant is also imported in client components (e.g. Recommendation: Prefix the variable with
Demo mode bypasses auth/input validation early Several API routes return demo responses before input validation (e.g. Landing Page / UI
Pricing buttons have no The pricing tier buttons (
Each pricing card runs a Inline <style>{`@keyframes braille-gradient-shift { … }`}</style>This injects a
<div className="w-[100px]" /> {/* Spacer */}The comment is outside the self-closing tag so it renders as a text node. Minor cosmetic issue. Code Quality
let event: any = null;The rest of the file has typed data. The
In
Hiding section labels entirely may affect accessibility (screen-reader users lose the group structure). Consider .gitignoreThe new entries are missing a newline at end of file (flagged by git). Minor, but will cause a linting warning. No test coverageNo tests are included for the new demo mode paths. Given that these branches are active on the public deployment, a few unit tests for the flag and mock data helpers would improve confidence — especially for the report store mutation logic and the chat store. Summary
The demo mode layer is the right approach for a public deployment — the main thing to nail down is the build-time vs runtime env var split for client components. |
…layout with PageContainer and PageHeader
Code Review — PR #15: Landing page rework, design system, pricing sectionGreat scope for a single PR — the changes are coherent and the direction is clearly an improvement. Notes below are ordered roughly by severity. OverviewThis PR does three things:
Bugs / Correctness1. Pricing CTA buttons are dead All four pricing tier buttons in pricing-section.tsx are bare button elements with no onClick and no href. Clicking "Get Started" or "Contact Sales" does nothing. Either wire them up or mark them disabled with a tooltip. 2. Missing background image assets FeaturesAlternating in style-manifest.tsx references /assets/bg1.webp through /assets/bg5.webp as Image fill backgrounds. These files do not appear to be added in this PR. If absent from public/assets/, feature blocks will render with broken images. Either add the assets or fall back gracefully. 3. Demo markdown conversion is lossy In demo mode, POST /api/reports wraps raw markdown as a single plain-text paragraph node rather than running it through marked + generateJSON. Markdown headings/lists/bold will appear as literal characters in the Tiptap editor. Performance4. MiniBrailleBg — 4 concurrent setInterval timers at 20 fps Each pricing card mounts a MiniBrailleBg that runs setInterval at 50ms unconditionally, computing a 25x45 grid every tick. With four cards on screen that is 4x20 fps of continuous setState calls whether or not the card is hovered. CSS opacity: 0 hides them visually but timers keep running. Suggested fix: gate the interval on a hover state or IntersectionObserver. 5. ButtonBrailleBg animates continuously Same issue — ButtonBrailleBg runs its timer even when the parent card is not hovered. Accessibility6. CtaLink disabled link is still keyboard-reachable When href is set and disabled is true, CtaLink renders a Link with aria-disabled and pointer-events-none. That blocks mouse clicks but the element remains focusable via Tab and activatable via Enter. Adding tabIndex={-1} when disabled would also block keyboard navigation. 7. SurfaceTitle renders as a div, not a heading SurfaceTitle outputs a div. PageHeader correctly uses h1 for the page-level title, so Surface sections would benefit from h2/h3 for screen-reader navigation. Minor8. .gitignore missing newline at EOF 9. Mobile nav links condensed to long single lines — Biome should fix this on format. 10. useChartAnimation module-level Set survives HMR — chart animations will not replay after a hot-module reload in development. Positives
SummaryThe two issues that should block merge are dead CTA buttons (#1) and potentially missing background assets (#2). The MiniBrailleBg timer problem (#4) is worth addressing before the page gets real traffic. Everything else is low-priority polish. Generated with Claude Code |
PR Review: Rework landing page and design systems, added pricing sectionNice cohesive design refresh. The new 🔴 Likely bugs1.
Fix: rename to 2. Demo Claude model mappings are out of date 3. 🟡 Code quality4. Broad 5. 6. 7. Duplicated headings 🟠 Performance8. 9. 10. 🔐 Security / correctness11. Stream key in URL query string 12. ♿ Accessibility13. Click-to-watch results in 14. ✅ Things I liked
🧪 Test coverageNo tests were added or modified; the repo doesn't appear to have a test suite, so this is consistent with existing practice. The env-flag plumbing (#1) would be a great candidate for the first unit test. Overall: design refresh is in good shape — the blocker is the |
…nding cleanup Checkpoint of the branch-wide 10/10 quality pass (see CLEANUP-PROGRESS.md). Done: - Group A (data layer): extractTextFromParts() helper, removed `as any`/double casts on message parts, consolidated demo type imports, stripped bloat comments. - Group B (onboarding): discriminated OnboardingToolEvent union, shared ONBOARDING_INPUT_CLASS, primary buttons reuse Button, className merge on 6 comps. - Group C (landing): deleted duplicate utils/cn.ts, SectionInner unification, CTA buttons reuse Button/CtaLink, theme tokens in browser-component. - Group D (charts): new components/stats/chart-shell.tsx (ChartShell, EmptyChartState, ChartFootnote, buildDynamicChartConfig); all 16 stats charts rewritten onto it; dropped dead recharts imports. Remaining (in CLEANUP-PROGRESS.md): Group D realtime hooks, Group E shell/shared (partial), and a final tsc/biome/build pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PR Review: Rework landing page and design systemsReviewed the full diff (147 files, ~+8.7k/−4.4k). This is a large, well-organized UI rework plus a quality pass. The accompanying Overall the refactor is a real improvement: the new Below are concrete findings, attributed to whether they're introduced here or pre-existing. 🔴 Worth addressing
🟡 Minor
Notes / context (pre-existing, not introduced here)
Test coverageNo tests are included or updated in this PR, and I didn't find a test setup exercising these components/hooks. Given the realtime-hook subscription logic and the session-store ID generation both have correctness-sensitive edges noted above, a few targeted unit tests (ID uniqueness across add/remove cycles; hook subscribe/unsubscribe counts) would catch regressions the disabled build gating won't. Nice work overall — the chart-shell consolidation and the honest progress doc stand out. The Group D realtime-hook items are the main things I'd resolve before merge. 🤖 Automated review by Claude Opus 4.8 |
🔍 PR Review — Rework landing page & design systems, add pricing section + demo modeReviewed the demo-mode infrastructure, API routes, realtime hooks, and a sampling of the UI rework. This is a large PR (149 files, +9.5k/-4.4k); the bulk is UI/landing, so I focused on the logic-bearing changes. Overall this is clean, well-documented work — the demo abstraction is thoughtful and the refactors are real improvements. A few items worth addressing before merge. ✅ Strengths
🐞 Correctness
⚡ Robustness / Performance
🔒 Security
🧪 Test coverage
Nits
Nice work overall — the demo system is genuinely well-built. The 🤖 Automated review |
…tions and improve report ID generation
PR Review: Rework landing page & design systems, add pricing + demo modeReviewed the demo infrastructure, API gating, onboarding copilot, realtime hooks, and the new landing components. This is a large, well-structured PR (151 files) — the demo-mode design in particular is thoughtful. Notes below, grouped by area and severity. No CLAUDE.md exists in the repo, so I reviewed against existing conventions (Biome, the demo/flag gating pattern, useSyncExternalStore). 👍 What's done well
🔴 Bugs worth fixing
🟠 Robustness / correctness
⚡ Performance (landing page)
🔒 Security
♿ Accessibility
✅ Test coverageThere are no automated tests in the repo ( Behavior note (not a bug)In demo mode, when Overall: solid, cohesive work. Items 1–3 are the ones I'd address before merge; the rest are polish. 🤖 Generated with Claude Code |
No description provided.