|
1 | 1 | import InstallCTA from './InstallCTA' |
| 2 | +import SignInButton from './SignInButton' |
2 | 3 |
|
3 | 4 | /* |
4 | 5 | * Dark theme — Raycast-inspired with amber accent and real terminal blocks. |
@@ -60,19 +61,19 @@ const STEPS = [ |
60 | 61 | { |
61 | 62 | number: '01', |
62 | 63 | title: 'PR opened', |
63 | | - description: 'helPRs automatically creates a comprehension session for every pull request.', |
| 64 | + description: 'helPRs comments on every pull request with a link to start a comprehension session.', |
64 | 65 | terminal: ( |
65 | 66 | <> |
66 | 67 | <span style={{ color: TERM.green }}>$</span>{' git push origin feature/auth\n'} |
67 | 68 | <span style={{ color: TERM.muted }}>{' \u2192 PR #42 opened\n'}</span> |
68 | | - <span style={{ color: TERM.green }}>{' \u2192 helPRs session created'}</span> |
| 69 | + <span style={{ color: TERM.green }}>{' \u2192 helPRs: Ready to challenge you'}</span> |
69 | 70 | </> |
70 | 71 | ), |
71 | 72 | }, |
72 | 73 | { |
73 | 74 | number: '02', |
74 | 75 | title: 'Answer Socratic questions', |
75 | | - description: 'AI asks targeted questions about your code decisions \u2014 both author and reviewer.', |
| 76 | + description: 'AI asks targeted questions about your code decisions, trade-offs, and edge cases.', |
76 | 77 | terminal: ( |
77 | 78 | <> |
78 | 79 | <span style={{ color: TERM.amber }}>?</span>{' Why did you choose a\n recursive approach here\n instead of iterative?'} |
@@ -102,12 +103,12 @@ const BYOK_ITEMS = [ |
102 | 103 | { |
103 | 104 | label: 'BYOK', |
104 | 105 | title: 'Bring Your Own Key', |
105 | | - description: 'You provide your Anthropic API key. We never touch it beyond forwarding requests.', |
| 106 | + description: 'You provide your own Claude credentials. They stay on your infrastructure \u2014 encrypted at rest, injected at runtime.', |
106 | 107 | }, |
107 | 108 | { |
108 | | - label: 'ZERO', |
109 | | - title: 'Zero data retention', |
110 | | - description: 'No question or answer text stored. Metadata only \u2014 hashes, scores, timestamps.', |
| 109 | + label: 'EPHEM', |
| 110 | + title: 'Ephemeral containers', |
| 111 | + description: 'Each session runs in an isolated Docker container that is destroyed after completion. Nothing persists between sessions.', |
111 | 112 | }, |
112 | 113 | { |
113 | 114 | label: 'PRIV', |
@@ -139,8 +140,18 @@ export default function LandingPage() { |
139 | 140 | className="min-h-screen bg-primary text-text-primary" |
140 | 141 | style={{ fontFamily: 'var(--font-family-sans)', letterSpacing: '0.2px' }} |
141 | 142 | > |
| 143 | + {/* Nav */} |
| 144 | + <header className="w-full px-6 py-5"> |
| 145 | + <div className="max-w-[960px] mx-auto flex items-center justify-between"> |
| 146 | + <span className="text-text-secondary font-semibold font-mono text-[15px]" style={{ letterSpacing: '-0.01em' }}> |
| 147 | + <span style={{ color: '#E2A039' }}>helPRs</span> |
| 148 | + </span> |
| 149 | + <SignInButton /> |
| 150 | + </div> |
| 151 | + </header> |
| 152 | + |
142 | 153 | {/* Hero */} |
143 | | - <Section className="pt-28 pb-24 md:pt-44 md:pb-36"> |
| 154 | + <Section className="pt-16 pb-24 md:pt-32 md:pb-36"> |
144 | 155 | <div className="mb-8"> |
145 | 156 | <span |
146 | 157 | className="inline-block text-text-secondary text-[13px] font-medium px-3.5 py-1.5" |
@@ -172,7 +183,7 @@ export default function LandingPage() { |
172 | 183 | {' '}the code you ship? |
173 | 184 | </h1> |
174 | 185 | <p className="text-text-secondary text-[17px] leading-[1.65] mb-12 max-w-[540px]"> |
175 | | - helPRs creates Socratic comprehension sessions for every pull request — challenging both author and reviewer to prove they understand the code before it merges. |
| 186 | + helPRs creates Socratic comprehension sessions for every pull request — challenging the author to prove they understand the code before it merges. |
176 | 187 | </p> |
177 | 188 | <div className="flex flex-col sm:flex-row items-start gap-5"> |
178 | 189 | <InstallCTA className="w-full sm:w-auto" /> |
@@ -259,8 +270,8 @@ export default function LandingPage() { |
259 | 270 | <p className="text-text-secondary text-[14px] leading-[1.55] mt-1">faster code generation than comprehension</p> |
260 | 271 | </div> |
261 | 272 | <div className="py-5" style={{ borderTop: '1px solid rgba(255,255,255,0.08)' }}> |
262 | | - <p className="text-text-primary text-[28px] font-bold font-mono" style={{ letterSpacing: '-0.02em' }}>2 roles</p> |
263 | | - <p className="text-text-secondary text-[14px] leading-[1.55] mt-1">both author and reviewer are challenged</p> |
| 273 | + <p className="text-text-primary text-[28px] font-bold font-mono" style={{ letterSpacing: '-0.02em' }}>Self-hosted</p> |
| 274 | + <p className="text-text-secondary text-[14px] leading-[1.55] mt-1">your infrastructure, your data, your Claude credentials</p> |
264 | 275 | </div> |
265 | 276 | <div className="pt-5" style={{ borderTop: '1px solid rgba(255,255,255,0.08)' }}> |
266 | 277 | <p className="text-success text-[28px] font-bold font-mono" style={{ letterSpacing: '-0.02em' }}>Private</p> |
|
0 commit comments