Skip to content

Commit 3d87ad1

Browse files
committed
feat(blocklists): redesign getting started page with path cards and comparison table
1 parent 8944c46 commit 3d87ad1

6 files changed

Lines changed: 86 additions & 26 deletions

File tree

crowdsec-docs/src/components/docs/PathCard/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export default function PathCard({ eyebrow, color, icon, title, desc, tag, tags
3939
href={href}
4040
onMouseEnter={() => setHover(true)}
4141
onMouseLeave={() => setHover(false)}
42-
className="relative p-6 rounded-[14px] overflow-hidden cursor-pointer flex flex-col no-underline min-w-0 transition-[border-color,background,box-shadow] duration-200"
42+
className="relative p-6 rounded-[14px] overflow-hidden cursor-pointer flex flex-col no-underline hover:no-underline min-w-0 transition-[border-color,background,box-shadow] duration-200"
4343
style={{
4444
color: "inherit",
4545
background: hover ? "var(--cs-surface-2)" : "var(--cs-surface)",
@@ -94,7 +94,7 @@ export default function PathCard({ eyebrow, color, icon, title, desc, tag, tags
9494
</div>
9595
)}
9696

97-
<div className="mt-5 pt-4 border-t border-dashed border-cs-border flex items-center justify-between">
97+
<div className="mt-5 pt-4 border-t border-cs-border flex items-center justify-between">
9898
{audience && (
9999
<div className="font-cs-mono text-[10.5px] text-cs-ink-mute tracking-[0.06em] leading-[1.4] min-w-0 overflow-hidden">
100100
{audience}

crowdsec-docs/src/css/alerts.css

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@
1212
top: 0.2rem !important;
1313
}
1414

15+
.alert .cs-admon__icon {
16+
@apply p-0.5;
17+
}
18+
1519
.alert svg {
16-
@apply !w-5 !h-5 mb-0;
20+
@apply !w-4 !h-4 mb-0;
1721
}
1822

1923
.alert--info {

crowdsec-docs/src/css/crowdsec-components.css

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -413,10 +413,6 @@ code:not(pre code):not(.cs-ic) {
413413
overflow: hidden;
414414
background: var(--cs-surface);
415415
}
416-
.cs-table-wrap table {
417-
margin: 0 !important;
418-
border: none !important;
419-
}
420416

421417
/* ── Direct table targeting (catches HTML tables too) ─────────── */
422418

@@ -515,6 +511,14 @@ article table tbody tr:hover td {
515511
background: color-mix(in srgb, var(--cs-orange) 4%, transparent) !important;
516512
}
517513

514+
/* ── Reset table styles when inside cs-table-wrap (after all general rules so this wins) */
515+
.cs-table-wrap table {
516+
margin: 0 !important;
517+
border: none !important;
518+
border-radius: 0 !important;
519+
overflow: visible !important;
520+
}
521+
518522
/* ── Pill component ─────────────────────────────────────────────── */
519523
.cs-pill {
520524
display: inline-flex;
@@ -578,6 +582,13 @@ article table tbody tr:hover td {
578582
border-bottom: 1px solid var(--cs-border) !important;
579583
margin-bottom: 0 !important;
580584
gap: 8px !important;
585+
flex-wrap: nowrap !important;
586+
overflow-x: auto !important;
587+
scrollbar-width: none !important;
588+
}
589+
590+
.tabs::-webkit-scrollbar {
591+
display: none !important;
581592
}
582593

583594
/* Individual tab items */
@@ -592,6 +603,8 @@ article table tbody tr:hover td {
592603
border-radius: 6px 6px 0 0 !important;
593604
border: none !important;
594605
border-bottom: 2px solid transparent !important;
606+
white-space: nowrap !important;
607+
flex-shrink: 0 !important;
595608
transition:
596609
color 0.12s,
597610
background 0.12s,

crowdsec-docs/src/css/crowdsec-tokens.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@
167167
}
168168

169169
.theme-doc-sidebar-item-link hr {
170-
visibility: hidden;
170+
background-color: var(--cs-border-hi) !important;
171171
margin: 0.25rem 0 !important;
172172
}
173173

crowdsec-docs/src/pages/index.tsx

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,20 @@ const blocklistSteps = [
4444
title: "Create an integration endpoint",
4545
desc: "Generates a dedicated URL and credentials to serve blocklists to your perimeter devices.",
4646
},
47-
{ title: "Choose blocklists to serve", desc: "Select from curated feeds: scanners, bots, TOR exits, exploits, and more." },
48-
{ title: "Plug in as a threat feed", desc: "Point your firewall, CDN, or WAF at the endpoint. No agent to install." },
47+
{
48+
title: "Choose blocklists to serve",
49+
desc: "Select from curated feeds: scanners, bots, TOR exits, exploits, and more.",
50+
},
51+
{
52+
title: "Plug in as a threat feed",
53+
desc: "Point your firewall, CDN, or WAF at the endpoint. No agent to install.",
54+
},
4955
];
5056
const ctiSteps = [
51-
{ title: "Look up any IP in the Console", desc: "Get reputation score, behaviors, attack history, and CVE links instantly." },
57+
{
58+
title: "Look up any IP in the Console",
59+
desc: "Get reputation score, behaviors, attack history, and CVE links instantly.",
60+
},
5261
{
5362
title: "Generate a CTI API key",
5463
hint: "OPTIONAL" as const,
@@ -90,7 +99,12 @@ const alreadyRunningLinks = [
9099
];
91100

92101
const popularLinks = [
93-
{ icon: <CIcon icon={cilCompass} style={ICON_SM} aria-hidden="true" />, label: "Console", href: "/u/console/intro", color: CS_ORANGE },
102+
{
103+
icon: <CIcon icon={cilCompass} style={ICON_SM} aria-hidden="true" />,
104+
label: "Console",
105+
href: "/u/console/intro",
106+
color: CS_ORANGE,
107+
},
94108
{
95109
icon: <CIcon icon={cilShieldAlt} style={ICON_SM} aria-hidden="true" />,
96110
label: "AppSec / WAF",
@@ -117,7 +131,14 @@ export default function HomePage() {
117131
<Layout title="Documentation" description="CrowdSec — the open-source & participative IPS">
118132
<main>
119133
{/* ── Hero ── full-width so grid bg spans the viewport ── */}
120-
<section style={{ position: "relative", padding: "92px 24px 48px", textAlign: "center", overflow: "hidden" }}>
134+
<section
135+
style={{
136+
position: "relative",
137+
padding: "92px 24px 48px",
138+
textAlign: "center",
139+
overflow: "hidden",
140+
}}
141+
>
121142
{/* Radial glow */}
122143
<div
123144
style={{
@@ -342,8 +363,14 @@ export default function HomePage() {
342363
<GuidedSetupCard
343364
title="Not sure where to start?"
344365
desc="Answer a few questions and get a recommended path with install steps for your stack."
345-
primaryCta={{ label: "Use Case Questionnaire", href: "https://start.crowdsec.net/" }}
346-
secondaryCta={{ label: "Try in Sandbox", href: "https://killercoda.com/iiamloz/scenario/crowdsec-setup" }}
366+
primaryCta={{
367+
label: "Use Case Questionnaire",
368+
href: "https://start.crowdsec.net/",
369+
}}
370+
secondaryCta={{
371+
label: "Try in Sandbox",
372+
href: "https://killercoda.com/iiamloz/scenario/crowdsec-setup",
373+
}}
347374
/>
348375

349376
{/* ── Popular docs ── */}

crowdsec-docs/unversioned/blocklists/getting_started.mdx

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ New to CrowdSec blocklists? Read the [Introduction](/u/blocklists/intro) first t
2020
badge="Path A · Self-hosted"
2121
title="CrowdSec Security Engine"
2222
desc="Ingest blocklists with the open-source agent. Behavior detection, parsing pipeline, Local API — everything runs on your infra."
23-
href="/u/blocklists/security_engine"
24-
ctaLabel="Get started"
23+
links={[{ label: "Get started", href: "/u/blocklists/security_engine" }]}
2524
>
2625
<div style={{ display: "flex", flexDirection: "column", gap: 6, margin: "4px 0" }}>
2726
{[
@@ -43,8 +42,7 @@ New to CrowdSec blocklists? Read the [Introduction](/u/blocklists/intro) first t
4342
badge="Path B · No agent"
4443
title="Direct Integrations"
4544
desc="Push CrowdSec blocklists straight into your existing firewall, CDN, or WAF. No agent to install — just configure your subscription."
46-
href="/u/integrations/intro"
47-
ctaLabel="Browse integrations"
45+
links={[{ label: "Browse integrations", href: "/u/integrations/intro" }]}
4846
>
4947
<div style={{ display: "flex", flexDirection: "column", gap: 6, margin: "4px 0" }}>
5048
{[
@@ -63,10 +61,28 @@ New to CrowdSec blocklists? Read the [Introduction](/u/blocklists/intro) first t
6361

6462
## Quick comparison
6563

66-
| | Security Engine | Integrations |
67-
|---|---|---|
68-
| Setup time | ~ 10 min | ~ 2 min |
69-
| Runs on | Your infrastructure | Your existing firewall / CDN |
70-
| Behavior detection | Yes — full engine | No — blocklists only |
71-
| Best for | Servers, gateways, k8s | Edge, WAF, managed CDN |
72-
| Free community feed | Included | Included |
64+
export const pill = (color) => ({
65+
display: "inline-flex", alignItems: "center",
66+
fontFamily: "var(--cs-font-mono)", fontSize: 10.5, letterSpacing: "0.1em",
67+
textTransform: "uppercase", fontWeight: 600,
68+
padding: "2px 10px", borderRadius: 999,
69+
background: `color-mix(in srgb, ${color} 14%, transparent)`,
70+
color,
71+
});
72+
73+
<table>
74+
<thead>
75+
<tr>
76+
<th style={{ width: "30%" }}></th>
77+
<th><span style={pill("var(--cs-orange)")}>Security Engine</span></th>
78+
<th><span style={pill("var(--cs-teal)")}>Integrations</span></th>
79+
</tr>
80+
</thead>
81+
<tbody>
82+
<tr><td>Setup time</td><td>~ 10 min</td><td>~ 2 min</td></tr>
83+
<tr><td>Runs on</td><td>Your infrastructure</td><td>Your existing firewall / CDN</td></tr>
84+
<tr><td>Behavior detection</td><td>Yes — full engine</td><td>No — blocklists only</td></tr>
85+
<tr><td>Best for</td><td>Servers, gateways, k8s</td><td>Edge, WAF, managed CDN</td></tr>
86+
<tr><td>Free community feed</td><td>Included</td><td>Included</td></tr>
87+
</tbody>
88+
</table>

0 commit comments

Comments
 (0)