-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
444 lines (399 loc) · 23.3 KB
/
Copy pathindex.html
File metadata and controls
444 lines (399 loc) · 23.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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
110
111
112
113
114
115
116
117
118
119
120
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
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
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LeRedTeam — CI/CD Tools That Catch What You Miss</title>
<meta property="og:title" content="LeRedTeam — CI/CD Tools That Catch What You Miss">
<meta property="og:description" content="Fix GitHub Actions cache waste. Debug AWS AccessDenied errors. Enforce least-privilege IAM. Two lines of YAML. Zero infrastructure.">
<meta property="og:image" content="https://leredteam.github.io/LeRedLogo.jpeg">
<meta property="og:url" content="https://leredteam.github.io">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary">
<link rel="icon" type="image/jpeg" href="LeRedLogo.jpeg">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: #e0e0e0; background: #0a0a0f; line-height: 1.7; }
a { color: #ff4040; text-decoration: none; font-weight: 600; }
a:hover { text-decoration: underline; }
code { font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace; }
/* Hero */
.hero { max-width: 800px; margin: 0 auto; padding: 80px 24px 48px; text-align: center; }
.hero img { width: 72px; height: 72px; border-radius: 12px; margin-bottom: 32px; }
.hero h1 { font-size: 2.8rem; color: #fff; line-height: 1.2; margin-bottom: 20px; letter-spacing: -0.5px; }
.hero h1 span { color: #ff4040; }
.hero .subtitle { font-size: 1.2rem; color: #888; max-width: 540px; margin: 0 auto 40px; }
.hero .trust { color: #444; font-size: 0.85rem; margin-top: 24px; }
/* Product sections */
.product-section { max-width: 860px; margin: 0 auto; padding: 60px 24px; }
.product-section + .product-section { padding-top: 20px; }
.product-header { display: flex; align-items: baseline; gap: 12px; margin-bottom: 8px; flex-wrap: wrap; }
.product-header h2 { font-size: 1.8rem; color: #fff; }
.badge { display: inline-block; font-size: 0.7rem; font-weight: 700; padding: 3px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
.badge-new { background: #ff4040; color: #fff; }
.product-pain { font-size: 1.15rem; color: #999; margin-bottom: 32px; max-width: 640px; }
.product-pain strong { color: #ccc; }
.product-links { margin-bottom: 32px; display: flex; gap: 16px; flex-wrap: wrap; }
.btn { display: inline-block; padding: 12px 24px; border-radius: 8px; font-size: 0.95rem; font-weight: 700; transition: opacity 0.2s; }
.btn:hover { text-decoration: none; opacity: 0.9; }
.btn-primary { background: #ff4040; color: #fff; }
.btn-ghost { background: transparent; color: #ccc; border: 1px solid #333; }
/* Terminal */
.terminal { background: #141419; border: 1px solid #1e1e28; border-radius: 12px; overflow: hidden; margin-bottom: 32px; }
.terminal-bar { background: #1a1a22; padding: 12px 16px; display: flex; gap: 8px; align-items: center; }
.terminal-dot { width: 12px; height: 12px; border-radius: 50%; }
.terminal-dot.r { background: #ff5f57; }
.terminal-dot.y { background: #febc2e; }
.terminal-dot.g { background: #28c840; }
.terminal-bar span { color: #555; font-size: 0.8rem; margin-left: 8px; }
.terminal pre { padding: 24px; font-size: 0.85rem; line-height: 1.8; overflow-x: auto; }
.t-prompt { color: #ff4040; }
.t-cmd { color: #fff; }
.t-dim { color: #555; }
.t-key { color: #ff4040; }
.t-str { color: #7ec699; }
.t-warn { color: #febc2e; }
.t-head { color: #ccc; font-weight: 700; }
.t-ok { color: #28c840; }
/* Pricing */
.pricing-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 8px; }
.price-card { background: #141419; border: 1px solid #1e1e28; border-radius: 12px; padding: 28px 20px; text-align: center; position: relative; }
.price-card.featured { border-color: #ff4040; }
.price-card .label { position: absolute; top: -11px; left: 50%; transform: translateX(-50%); background: #ff4040; color: #fff; font-size: 0.65rem; font-weight: 700; padding: 3px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; white-space: nowrap; }
.price-card h3 { color: #fff; font-size: 1.1rem; margin-bottom: 12px; }
.price-card .price { font-size: 2rem; color: #fff; font-weight: 800; }
.price-card .price small { font-size: 0.9rem; font-weight: 400; color: #666; }
.price-card .period { color: #444; font-size: 0.8rem; margin-bottom: 20px; }
.price-card ul { list-style: none; text-align: left; margin-bottom: 24px; }
.price-card li { padding: 5px 0; color: #888; font-size: 0.85rem; }
.price-card li::before { content: "~"; color: #ff4040; margin-right: 8px; font-weight: 700; }
.price-card .btn { display: block; width: 100%; text-align: center; padding: 10px; font-size: 0.9rem; }
/* Divider */
.divider { max-width: 860px; margin: 0 auto; padding: 0 24px; }
.divider hr { border: none; border-top: 1px solid #1a1a22; }
/* Philosophy */
.philosophy { max-width: 860px; margin: 0 auto; padding: 60px 24px; }
.philosophy h2 { font-size: 1.8rem; color: #fff; text-align: center; margin-bottom: 40px; }
.phil-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.phil-item { text-align: center; }
.phil-item h3 { color: #fff; font-size: 0.95rem; margin-bottom: 6px; }
.phil-item p { color: #555; font-size: 0.85rem; }
/* Legal */
.legal { max-width: 860px; margin: 0 auto; padding: 40px 24px; }
.legal-toggle { background: none; border: 1px solid #1a1a22; color: #555; padding: 12px 20px; border-radius: 8px; cursor: pointer; font-size: 0.9rem; width: 100%; text-align: left; font-family: inherit; }
.legal-toggle:hover { border-color: #333; color: #888; }
.legal-content { display: none; padding: 32px 0; }
.legal-content.open { display: block; }
.legal-content h3 { color: #ccc; font-size: 1rem; margin-top: 24px; margin-bottom: 8px; }
.legal-content h3:first-child { margin-top: 0; }
.legal-content p, .legal-content li { color: #666; font-size: 0.88rem; margin-bottom: 8px; }
.legal-content ul { padding-left: 20px; }
/* Footer */
footer { max-width: 860px; margin: 0 auto; padding: 24px; border-top: 1px solid #141419; text-align: center; }
footer p { color: #333; font-size: 0.8rem; }
footer a { color: #444; font-weight: 400; }
@media (max-width: 640px) {
.hero h1 { font-size: 2rem; }
.pricing-row, .phil-grid { grid-template-columns: 1fr; }
}
</style>
</head>
<body>
<!-- Hero -->
<div class="hero">
<img src="LeRedLogo.jpeg" alt="LeRedTeam">
<h1>Your CI/CD pipeline has<br><span>problems you can't see.</span></h1>
<p class="subtitle">We build tools that find them. Single binaries. Zero infrastructure. Two lines of YAML.</p>
<p class="trust">AGPL-3.0 open source · No telemetry · No backend</p>
</div>
<!-- Cache Doctor -->
<div class="product-section">
<div class="product-header">
<h2>Cache Doctor</h2>
<span class="badge badge-new">New</span>
</div>
<p class="product-pain"><strong>Your GitHub Actions caches are wasting money. You just can't see it.</strong> Orphan caches from deleted branches, bad key patterns that never hit, quota silently filling up. Cache Doctor finds it all.</p>
<div class="product-links">
<a href="https://github.com/LeRedTeam/cache-doctor" class="btn btn-primary">View on GitHub</a>
<a href="https://github.com/LeRedTeam/cache-doctor#quick-start" class="btn btn-ghost">Quick start</a>
</div>
<div class="terminal">
<div class="terminal-bar">
<div class="terminal-dot r"></div>
<div class="terminal-dot y"></div>
<div class="terminal-dot g"></div>
<span>cache-doctor analyze</span>
</div>
<pre><span class="t-head">Cache Health Report</span>
<span class="t-dim">==================================================</span>
<span class="t-dim">Quota:</span> <span class="t-warn">7.2 GB</span> <span class="t-dim">/ 10.0 GB (72%)</span>
<span class="t-dim">Total:</span> <span class="t-cmd">31 caches</span>
<span class="t-ok">Active: 18</span> <span class="t-dim">(3.8 GB)</span>
<span class="t-warn">Stale: 8</span> <span class="t-dim">(2.1 GB) — not accessed recently</span>
<span class="t-key">Orphan: 5</span> <span class="t-dim">(1.3 GB) — branch deleted</span>
<span class="t-head">Recommendations</span>
<span class="t-dim">==================================================</span>
<span class="t-key">!</span> <span class="t-cmd">Delete 5 orphan caches</span> <span class="t-dim">→ reclaim 1.3 GB</span>
<span class="t-key">!</span> <span class="t-cmd">Fix key pattern on "setup-node"</span> <span class="t-dim">→ 0% hit rate</span>
<span class="t-key">!</span> <span class="t-cmd">Review 8 stale caches</span> <span class="t-dim">→ last accessed 30+ days ago</span></pre>
</div>
<div class="pricing-row">
<div class="price-card">
<h3>Free</h3>
<div class="price">$0</div>
<div class="period">forever</div>
<ul>
<li>Analyze + cleanup</li>
<li>Job summary</li>
<li>JSON output</li>
</ul>
<a href="https://github.com/LeRedTeam/cache-doctor" class="btn btn-ghost">Get started</a>
</div>
<div class="price-card featured">
<div class="label">Most popular</div>
<h3>Pro</h3>
<div class="price">$15<small>/mo</small></div>
<div class="period">or $119/year</div>
<ul>
<li>Everything in Free</li>
<li>19 lint rules</li>
<li>SARIF output</li>
<li>PR comments</li>
<li>Hit/miss analysis</li>
</ul>
<a href="https://buy.stripe.com/3cIfZiehR25x2y4gG72cg05" class="btn btn-primary">Start Pro</a>
</div>
<div class="price-card">
<h3>Commercial</h3>
<div class="price">$149<small>/yr</small></div>
<div class="period">AGPL exemption</div>
<ul>
<li>Everything in Pro</li>
<li>Proprietary use license</li>
<li>No copyleft obligations</li>
</ul>
<a href="https://buy.stripe.com/fZu00k4HhdOf8Ws9dF2cg04" class="btn btn-ghost">Get license</a>
</div>
</div>
</div>
<div class="divider"><hr></div>
<!-- awsdeny -->
<div class="product-section">
<div class="product-header">
<h2>awsdeny</h2>
<span class="badge badge-new">New</span>
</div>
<p class="product-pain"><strong>AWS AccessDenied errors don't tell you what went wrong or how to fix it.</strong> Was it an SCP? A permission boundary? A cross-account trust issue? A typo in the action name? awsdeny tells you in seconds — with a ready-to-paste policy fix.</p>
<div class="product-links">
<a href="https://github.com/LeRedTeam/awsdeny" class="btn btn-primary">View on GitHub</a>
<a href="https://github.com/LeRedTeam/awsdeny#quick-start" class="btn btn-ghost">Quick start</a>
</div>
<div class="terminal">
<div class="terminal-bar">
<div class="terminal-dot r"></div>
<div class="terminal-dot y"></div>
<div class="terminal-dot g"></div>
<span>awsdeny explain</span>
</div>
<pre><span class="t-prompt">$</span> <span class="t-cmd">awsdeny explain --error "User: arn:aws:iam::123:role/MyRole</span>
<span class="t-cmd">is not authorized to perform: s3:GetObject on resource:</span>
<span class="t-cmd">arn:aws:s3:::bucket/key because no identity-based policy</span>
<span class="t-cmd">allows the s3:GetObject action"</span>
<span class="t-head"> Access Denied</span>
<span class="t-dim">Action:</span> <span class="t-cmd">s3:GetObject</span>
<span class="t-dim">Resource:</span> <span class="t-cmd">arn:aws:s3:::bucket/key</span>
<span class="t-dim">Principal:</span> <span class="t-cmd">arn:aws:iam::123:role/MyRole</span>
<span class="t-dim">Analysis:</span>
<span class="t-dim">Type:</span> <span class="t-warn">Implicit deny</span>
<span class="t-dim">Source:</span> <span class="t-cmd">Identity-based policy</span>
<span class="t-dim">Reason:</span> <span class="t-cmd">No identity-based policy grants the required</span>
<span class="t-cmd">permission.</span>
<span class="t-dim">Suggested fixes:</span>
<span class="t-ok">1.</span> <span class="t-str">Add to your policy: {"Effect": "Allow",</span>
<span class="t-str">"Action": "s3:GetObject", "Resource": "...bucket/key"}</span>
<span class="t-ok">2.</span> <span class="t-cmd">Attach a managed policy that includes this permission</span>
<span class="t-dim">Confidence:</span> <span class="t-ok">very-high</span> <span class="t-dim">(heuristic match)</span></pre>
</div>
<div class="pricing-row">
<div class="price-card">
<h3>Free</h3>
<div class="price">$0</div>
<div class="period">forever</div>
<ul>
<li>23 heuristic patterns</li>
<li>Action typo detection</li>
<li>Offline policy analysis</li>
<li>CloudWatch Insights queries</li>
<li>JSON output</li>
</ul>
<a href="https://github.com/LeRedTeam/awsdeny" class="btn btn-ghost">Get started</a>
</div>
<div class="price-card featured">
<div class="label">Most popular</div>
<h3>Pro</h3>
<div class="price">$29<small>/mo</small></div>
<div class="period">or $199/year</div>
<ul>
<li>Everything in Free</li>
<li>AWS enrichment</li>
<li>Ranked policy suggestions</li>
<li>CloudTrail analysis</li>
<li>SARIF + PR comments</li>
</ul>
<a href="https://buy.stripe.com/cNidRa7TtaC37So89B2cg08" class="btn btn-primary">Start Pro</a>
</div>
<div class="price-card">
<h3>Commercial</h3>
<div class="price">$199<small>/yr</small></div>
<div class="period">AGPL exemption</div>
<ul>
<li>Everything in Pro</li>
<li>Proprietary use license</li>
<li>No copyleft obligations</li>
</ul>
<a href="https://buy.stripe.com/cNicN60r125xfkQ89B2cg07" class="btn btn-ghost">Get license</a>
</div>
</div>
</div>
<div class="divider"><hr></div>
<!-- iampg -->
<div class="product-section">
<div class="product-header">
<h2>iampg</h2>
</div>
<p class="product-pain"><strong>Stop guessing IAM permissions.</strong> Developers slap on AdministratorAccess because debugging AccessDenied takes hours. iampg generates the exact minimal policy from real API calls, then enforces it in CI.</p>
<div class="product-links">
<a href="https://github.com/LeRedTeam/iampg" class="btn btn-primary">View on GitHub</a>
<a href="https://leredteam.github.io/iampg" class="btn btn-ghost">Documentation</a>
</div>
<div class="terminal">
<div class="terminal-bar">
<div class="terminal-dot r"></div>
<div class="terminal-dot y"></div>
<div class="terminal-dot g"></div>
<span>iampg refine --enforce</span>
</div>
<pre><span class="t-prompt">$</span> <span class="t-cmd">iampg refine --input infra/deploy-policy.json --enforce</span>
<span class="t-head">Policy Analysis</span>
<span class="t-dim">==================================================</span>
<span class="t-dim">Statements:</span> <span class="t-cmd">3</span> <span class="t-dim">Issues:</span> <span class="t-key">4</span>
<span class="t-key">FAIL</span> <span class="t-cmd">wildcard-action</span> <span class="t-dim">s3:* grants all actions</span>
<span class="t-dim">→ Replace with:</span> <span class="t-str">s3:PutObject, s3:GetObject</span>
<span class="t-key">FAIL</span> <span class="t-cmd">wildcard-resource</span> <span class="t-dim">Resource: * on statement 2</span>
<span class="t-dim">→ Scope to:</span> <span class="t-str">arn:aws:s3:::my-bucket/*</span>
<span class="t-key">FAIL</span> <span class="t-cmd">dangerous-perm</span> <span class="t-dim">iam:CreateUser can create IAM users</span>
<span class="t-dim">→ Remove or justify</span>
<span class="t-warn">WARN</span> <span class="t-cmd">unused-action</span> <span class="t-dim">s3:DeleteObject never called in 30 days</span>
<span class="t-dim">→ Consider removing</span>
<span class="t-key">Enforcement: FAILED</span> <span class="t-dim">— 3 blocking issues found</span>
<span class="t-dim">Exit code: 1</span></pre>
</div>
<div class="pricing-row">
<div class="price-card">
<h3>Free</h3>
<div class="price">$0</div>
<div class="period">forever</div>
<ul>
<li>run + parse commands</li>
<li>JSON output</li>
<li>Unlimited usage</li>
</ul>
<a href="https://github.com/LeRedTeam/iampg" class="btn btn-ghost">Get started</a>
</div>
<div class="price-card featured">
<div class="label">Most popular</div>
<h3>Pro</h3>
<div class="price">$19<small>/mo</small></div>
<div class="period">or $149/year</div>
<ul>
<li>Everything in Free</li>
<li>refine + aggregate</li>
<li>YAML / Terraform / SARIF</li>
<li>CI enforcement</li>
<li>Policy drift detection</li>
</ul>
<a href="https://buy.stripe.com/7sY8wQ2z95hJc8E0H92cg00" class="btn btn-primary">Start Pro</a>
</div>
<div class="price-card">
<h3>Commercial</h3>
<div class="price">$149<small>/yr</small></div>
<div class="period">AGPL exemption</div>
<ul>
<li>Everything in Pro</li>
<li>Proprietary use license</li>
<li>No copyleft obligations</li>
</ul>
<a href="https://buy.stripe.com/00w4gA0r1aC3fkQ61t2cg02" class="btn btn-ghost">Get license</a>
</div>
</div>
</div>
<div class="divider"><hr></div>
<!-- Philosophy -->
<div class="philosophy">
<h2>No backend. No SaaS.</h2>
<div class="phil-grid">
<div class="phil-item">
<h3>Single binary</h3>
<p>Download and run. No dependencies, no Docker, no setup.</p>
</div>
<div class="phil-item">
<h3>Zero telemetry</h3>
<p>Nothing sent anywhere. Ever. Not even crash reports.</p>
</div>
<div class="phil-item">
<h3>Offline license</h3>
<p>Cryptographic signatures. No phone-home, no license server.</p>
</div>
<div class="phil-item">
<h3>No credentials stored</h3>
<p>Uses your existing config. Never touches your keys.</p>
</div>
<div class="phil-item">
<h3>All processing local</h3>
<p>Your machine or CI runner. Your data stays yours.</p>
</div>
<div class="phil-item">
<h3>AGPL-3.0</h3>
<p>Open source. Read every line. Audit it yourself.</p>
</div>
</div>
</div>
<!-- Legal (collapsible) -->
<div class="legal">
<button class="legal-toggle" onclick="document.querySelector('.legal-content').classList.toggle('open'); this.textContent = this.textContent.includes('+') ? '− Policies (Refund, Terms, Privacy)' : '+ Policies (Refund, Terms, Privacy)'">+ Policies (Refund, Terms, Privacy)</button>
<div class="legal-content">
<h3>Refund Policy</h3>
<p>30-day refund, no questions asked. Contact us within 30 days of payment for a full refund via the original payment method. License key is revoked upon refund.</p>
<h3>Terms of Service</h3>
<p>By purchasing a license for any LeRedTeam product, you agree to the following:</p>
<ul>
<li>License keys are personal and tied to the email address used at purchase.</li>
<li>Pro licenses grant access to paid features under the AGPL-3.0 license terms.</li>
<li>Commercial licenses additionally grant an exemption from AGPL-3.0 obligations for proprietary use.</li>
<li>License keys must not be shared publicly or redistributed.</li>
<li>We reserve the right to revoke license keys in case of abuse or redistribution.</li>
<li>The software is provided "as is" without warranty of any kind.</li>
<li>Prices may change. Existing customers keep their rate until they cancel. 30-day notice before increases.</li>
</ul>
<h3>Privacy Policy</h3>
<ul>
<li><strong>No data collection:</strong> Our tools run entirely on your machine or in your CI. No telemetry, no analytics, no tracking.</li>
<li><strong>No credential access:</strong> Tools use your existing credentials but never store, log, or transmit them.</li>
<li><strong>Payment data:</strong> Payments processed by <a href="https://stripe.com/privacy">Stripe</a>. We do not store credit card information.</li>
<li><strong>License validation:</strong> Offline using cryptographic signatures. No network calls.</li>
<li><strong>No cookies:</strong> This website does not use cookies or tracking scripts.</li>
</ul>
<h3>Contact</h3>
<p>
<a href="mailto:leredteam@gmail.com">leredteam@gmail.com</a> ·
<a href="https://github.com/LeRedTeam">github.com/LeRedTeam</a> ·
Spain
</p>
</div>
</div>
<!-- Footer -->
<footer>
<p><a href="mailto:leredteam@gmail.com">leredteam@gmail.com</a> · <a href="https://github.com/LeRedTeam">GitHub</a> · Spain · © 2026 LeRedTeam</p>
</footer>
</body>
</html>