-
Notifications
You must be signed in to change notification settings - Fork 0
feat: redesign homepage as multi-language platform hub #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,16 +1,19 @@ | ||
| --- | ||
| // Single source of truth for the displayed version: read from package.json at | ||
| // build time so the site can never drift from the published npm version. | ||
| import pkg from "../../package.json"; | ||
|
|
||
| const version = pkg.version; | ||
| let version = "1.0.0"; | ||
| try { | ||
| const res = await fetch("https://registry.npmjs.org/flaglint/latest"); | ||
| const data = await res.json(); | ||
| version = data.version ?? "1.0.0"; | ||
| } catch { | ||
| // fallback to hardcoded | ||
| } | ||
|
Comment on lines
+2
to
+9
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win Add a timeout to the npm registry lookup. The 🤖 Prompt for AI Agents |
||
|
|
||
| const jsonLd = { | ||
| "@context": "https://schema.org", | ||
| "@type": "SoftwareApplication", | ||
| name: "FlagLint", | ||
| description: | ||
| "Free, open-source CLI that finds every direct LaunchDarkly Node.js SDK call, ranks them by migration risk, and generates safe OpenFeature rewrites.", | ||
| "Free, open-source CLI that finds every direct LaunchDarkly SDK call, ranks them by migration risk, and generates safe OpenFeature rewrites.", | ||
|
Comment on lines
15
to
+16
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win Refresh the HTML/OG descriptions to match the new hub messaging. The JSON-LD and hero now position FlagLint as a multi-language platform, but the HTML description and Also applies to: 947-951 🤖 Prompt for AI Agents |
||
| url: "https://flaglint.dev", | ||
| downloadUrl: "https://www.npmjs.com/package/flaglint", | ||
| softwareVersion: version, | ||
|
|
@@ -19,7 +22,7 @@ const jsonLd = { | |
| offers: { "@type": "Offer", price: "0", priceCurrency: "USD" }, | ||
| author: { "@type": "Person", name: "Krishan Sharma", url: "https://github.com/flaglint" }, | ||
| license: "https://opensource.org/licenses/MIT", | ||
| codeRepository: "https://github.com/flaglint/flaglint", | ||
| codeRepository: "https://github.com/flaglint/flaglint-js", | ||
| }; | ||
| --- | ||
| <!DOCTYPE html> | ||
|
|
@@ -804,13 +807,82 @@ const jsonLd = { | |
| } | ||
| .footer-links a:hover { color: var(--text); } | ||
|
|
||
| /* ── Section: Language SDKs ─────────────────────────────────────── */ | ||
| .section-sdks { | ||
| border-top: 1px solid var(--border); | ||
| border-bottom: 1px solid var(--border); | ||
| background: var(--surface); | ||
| } | ||
| [data-theme="light"] .section-sdks { background: #f4f8f6; } | ||
| .sdk-grid { | ||
| display: grid; | ||
| grid-template-columns: repeat(2, 1fr); | ||
| gap: 24px; | ||
| margin-top: 40px; | ||
| } | ||
| .sdk-card { | ||
| background: var(--bg); | ||
| border: 1px solid var(--border); | ||
| border-radius: 12px; | ||
| padding: 28px; | ||
| } | ||
| [data-theme="light"] .sdk-card { background: var(--surface); } | ||
| .sdk-card-soon { opacity: 0.65; } | ||
| .sdk-card-header { margin-bottom: 14px; } | ||
| .sdk-badge { | ||
| display: inline-block; | ||
| padding: 3px 10px; | ||
| border-radius: 999px; | ||
| font-size: 11px; | ||
| font-weight: 800; | ||
| letter-spacing: 0.05em; | ||
| } | ||
| .sdk-badge-stable { | ||
| background: rgba(0,217,126,0.15); | ||
| color: var(--accent); | ||
| border: 1px solid rgba(0,217,126,0.3); | ||
| } | ||
| [data-theme="light"] .sdk-badge-stable { | ||
| background: #d4f5e6; | ||
| color: #005c33; | ||
| border-color: #9de5c3; | ||
| } | ||
| .sdk-badge-soon { | ||
| background: var(--surface-raised); | ||
| color: var(--subtle); | ||
| border: 1px solid var(--border); | ||
| } | ||
| .sdk-title { | ||
| font-size: 20px; | ||
| font-weight: 700; | ||
| letter-spacing: -0.01em; | ||
| margin-bottom: 10px; | ||
| } | ||
| .sdk-desc { | ||
| color: var(--muted); | ||
| font-size: 14px; | ||
| line-height: 1.6; | ||
| margin-bottom: 16px; | ||
| } | ||
| .cmd-muted { color: var(--subtle) !important; } | ||
| .sdk-links { | ||
| display: flex; | ||
| gap: 20px; | ||
| margin-top: 16px; | ||
| font-size: 13px; | ||
| font-weight: 700; | ||
| } | ||
| .sdk-links a { color: var(--accent); } | ||
| .sdk-card-soon .sdk-links a { color: var(--subtle); } | ||
|
|
||
| /* ── Responsive ──────────────────────────────────────────────────── */ | ||
| @media (max-width: 980px) { | ||
| .hero-grid { grid-template-columns: 1fr; gap: 40px; } | ||
| .diff-grid { grid-template-columns: 1fr; } | ||
| .diff-arrow-col { display: none; } | ||
| .workflow-strip { grid-template-columns: 1fr; } | ||
| .proof-trust-grid { grid-template-columns: 1fr; } | ||
| .sdk-grid { grid-template-columns: 1fr; } | ||
| .wf-divider { display: none; } | ||
| .wf-step { border-bottom: 1px solid var(--border); } | ||
| .wf-step:last-of-type { border-bottom: none; } | ||
|
|
@@ -857,7 +929,7 @@ const jsonLd = { | |
| </button> | ||
| <button class="theme-btn" data-theme-value="auto" title="Auto (system)" aria-label="Auto theme">Auto</button> | ||
| </div> | ||
| <a class="github-btn" href="https://github.com/flaglint/flaglint" target="_blank" rel="noopener noreferrer">GitHub</a> | ||
| <a class="github-btn" href="https://github.com/flaglint/flaglint-js" target="_blank" rel="noopener noreferrer">GitHub</a> | ||
| </div> | ||
| </div> | ||
| </nav> | ||
|
|
@@ -872,11 +944,11 @@ const jsonLd = { | |
|
|
||
| <!-- Left: copy --> | ||
| <div> | ||
| <div class="section-kicker">LaunchDarkly Node.js SDK → OpenFeature</div> | ||
| <div class="section-kicker">JavaScript · Go (coming soon)</div> | ||
| <h1>Feature flags accumulate debt.<br>FlagLint makes it visible.</h1> | ||
| <p class="hero-body"> | ||
| <span>Makes LaunchDarkly usage visible, measurable, and safer to</span> | ||
| <span>migrate to OpenFeature. Free CLI. No API key. Runs locally.</span> | ||
| <span>Find every direct LaunchDarkly SDK call, rank by migration risk,</span> | ||
| <span>and generate safe OpenFeature rewrites. Free, open-source. No API key. Runs locally.</span> | ||
| </p> | ||
| <p class="hero-differentiator">FlagLint knows when not to rewrite.</p> | ||
| <div class="hero-cta-row"> | ||
|
|
@@ -934,6 +1006,46 @@ const jsonLd = { | |
| </div> | ||
| </section> | ||
|
|
||
| <!-- ════════════════════════════════════════════════════════════════ | ||
| SECTION 1b — LANGUAGE SDKS | ||
| ═════════════════════════════════════════════════════════════════ --> | ||
| <section class="section-sdks"> | ||
| <div class="section-inner"> | ||
| <div class="section-kicker">Language SDKs</div> | ||
| <h2 class="section-heading">Available for your stack</h2> | ||
| <div class="sdk-grid"> | ||
|
|
||
| <!-- JS / TypeScript --> | ||
| <div class="sdk-card"> | ||
| <div class="sdk-card-header"> | ||
| <span class="sdk-badge sdk-badge-stable">Stable · v{version}</span> | ||
| </div> | ||
| <h3 class="sdk-title">JavaScript / TypeScript</h3> | ||
| <p class="sdk-desc">LaunchDarkly Node.js server SDK → OpenFeature. Audits, migrates, and enforces the boundary in CI.</p> | ||
| <code class="cmd">npm install -g flaglint</code> | ||
| <div class="sdk-links"> | ||
| <a href="/docs/">Docs →</a> | ||
| <a href="https://github.com/flaglint/flaglint-js" target="_blank" rel="noopener noreferrer">GitHub →</a> | ||
| </div> | ||
| </div> | ||
|
|
||
| <!-- Go --> | ||
| <div class="sdk-card sdk-card-soon"> | ||
| <div class="sdk-card-header"> | ||
| <span class="sdk-badge sdk-badge-soon">Coming soon</span> | ||
| </div> | ||
| <h3 class="sdk-title">Go</h3> | ||
| <p class="sdk-desc">Flag debt analysis for LaunchDarkly Go SDK usage. OpenFeature migration planning.</p> | ||
| <code class="cmd cmd-muted">go install github.com/flaglint/flaglint-go@latest</code> | ||
| <div class="sdk-links"> | ||
| <a href="https://github.com/flaglint/flaglint-go" target="_blank" rel="noopener noreferrer">GitHub →</a> | ||
| </div> | ||
| </div> | ||
|
|
||
| </div> | ||
| </div> | ||
| </section> | ||
|
|
||
| <!-- ════════════════════════════════════════════════════════════════ | ||
| SECTION 2 — THE PROOF (argument-order problem) | ||
| ═════════════════════════════════════════════════════════════════ --> | ||
|
|
@@ -1169,7 +1281,7 @@ const enabled = await <span class="arch-hi-green">client.getBooleanValue</span>( | |
| <span>·</span> | ||
| <a href="/docs/reference/supported-scope">Supported scope</a> | ||
| <span>·</span> | ||
| <a href="https://github.com/flaglint/flaglint" target="_blank" rel="noopener noreferrer">GitHub</a> | ||
| <a href="https://github.com/flaglint/flaglint-js" target="_blank" rel="noopener noreferrer">GitHub</a> | ||
| </div> | ||
| </div> | ||
| </section> | ||
|
|
@@ -1183,12 +1295,12 @@ const enabled = await <span class="arch-hi-green">client.getBooleanValue</span>( | |
| <div class="footer-links"> | ||
| <a href="/docs/quickstart">Docs</a> | ||
| <a href="/blog/">Blog</a> | ||
| <a href="https://github.com/flaglint/flaglint" target="_blank" rel="noopener noreferrer">GitHub</a> | ||
| <a href="https://github.com/flaglint/flaglint-js" target="_blank" rel="noopener noreferrer">GitHub</a> | ||
| <a href="https://www.npmjs.com/package/flaglint" target="_blank" rel="noopener noreferrer">npm</a> | ||
| <a href="/trust">Trust</a> | ||
| <a href="/docs/reference/security">Security</a> | ||
| <a href="/privacy">Privacy</a> | ||
| <a href="https://github.com/flaglint/flaglint/issues" target="_blank" rel="noopener noreferrer">Issues</a> | ||
| <a href="https://github.com/flaglint/flaglint-js/issues" target="_blank" rel="noopener noreferrer">Issues</a> | ||
| </div> | ||
| </div> | ||
| </footer> | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Use the fetched version everywhere it’s displayed.
You now source
versiondynamically, but the hero terminal still hardcodesflaglint v1.0.0on Line 981. As soon as npm publishes a newer release, the page will show two different versions at once.Also applies to: 1020-1022
🤖 Prompt for AI Agents