|
| 1 | +<!-- yes hardcoded HTML because who needs react you know --> |
| 2 | +<!DOCTYPE html> |
| 3 | +<html lang="es"> |
| 4 | + <head> |
| 5 | + <meta charset="UTF-8"> |
| 6 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 7 | + <title>FuckingNode</title> |
| 8 | + <style> |
| 9 | + :root { |
| 10 | + --bg-dark: #0d1117; |
| 11 | + --bg-darker: #090c10; |
| 12 | + --text-main: #e6edf3; |
| 13 | + --text-muted: #8b949e; |
| 14 | + --accent: #b36044; |
| 15 | + } |
| 16 | + |
| 17 | + * { |
| 18 | + margin: 0; |
| 19 | + padding: 0; |
| 20 | + box-sizing: border-box; |
| 21 | + scroll-behavior: smooth; |
| 22 | + } |
| 23 | + body { |
| 24 | + font-family: "Segoe UI", "Inter", system-ui, sans-serif; |
| 25 | + background: var(--bg-dark); |
| 26 | + color: var(--text-main); |
| 27 | + line-height: 1.6; |
| 28 | + } |
| 29 | + a { |
| 30 | + text-decoration: none; |
| 31 | + color: inherit; |
| 32 | + } |
| 33 | + |
| 34 | + header { |
| 35 | + position: fixed; |
| 36 | + top: 0; |
| 37 | + left: 0; |
| 38 | + width: 100%; |
| 39 | + display: flex; |
| 40 | + justify-content: space-between; |
| 41 | + align-items: center; |
| 42 | + padding: 16px 40px; |
| 43 | + background: rgba(9, 12, 16, 0.95); |
| 44 | + backdrop-filter: blur(8px); |
| 45 | + border-bottom: 1px solid #1f2328; |
| 46 | + z-index: 1000; |
| 47 | + } |
| 48 | + header h1 { |
| 49 | + font-size: 1.1rem; |
| 50 | + font-weight: 600; |
| 51 | + color: var(--accent); |
| 52 | + } |
| 53 | + nav a { |
| 54 | + margin-left: 24px; |
| 55 | + font-size: 0.95rem; |
| 56 | + color: var(--text-main); |
| 57 | + transition: color 0.3s; |
| 58 | + } |
| 59 | + nav a:hover { |
| 60 | + color: var(--accent); |
| 61 | + } |
| 62 | + |
| 63 | + .hero { |
| 64 | + display: grid; |
| 65 | + grid-template-columns: 1fr 1fr; |
| 66 | + align-items: center; |
| 67 | + min-height: 100vh; |
| 68 | + padding: 0 40px; |
| 69 | + } |
| 70 | + .hero-text { |
| 71 | + max-width: 520px; |
| 72 | + } |
| 73 | + .hero-text h2 { |
| 74 | + font-size: 3rem; |
| 75 | + margin-bottom: 20px; |
| 76 | + font-weight: 700; |
| 77 | + } |
| 78 | + .hero-text p { |
| 79 | + font-size: 1.15rem; |
| 80 | + color: var(--text-muted); |
| 81 | + margin-bottom: 30px; |
| 82 | + } |
| 83 | + .btn, .btn2 { |
| 84 | + display: inline-block; |
| 85 | + padding: 14px 36px; |
| 86 | + border-radius: 8px; |
| 87 | + background: linear-gradient(90deg, #f87755, var(--accent)); |
| 88 | + color: #fff; |
| 89 | + font-weight: 600; |
| 90 | + transition: transform 0.2s, box-shadow 0.3s; |
| 91 | + } |
| 92 | + .btn2 { |
| 93 | + background: var(--bg-dark); |
| 94 | + } |
| 95 | + .btn:hover { |
| 96 | + transform: translateY(-3px); |
| 97 | + box-shadow: 0 0 20px #f87755; |
| 98 | + } |
| 99 | + .btn2:hover { |
| 100 | + transform: translateY(-3px); |
| 101 | + box-shadow: 0 0 20px #ffffff30; |
| 102 | + } |
| 103 | + .btn { |
| 104 | + display: inline-block; |
| 105 | + padding: 12px 28px; |
| 106 | + border-radius: 6px; |
| 107 | + |
| 108 | + color: #fff; |
| 109 | + font-weight: 600; |
| 110 | + } |
| 111 | + .hero-visual { |
| 112 | + text-align: center; |
| 113 | + } |
| 114 | + .hero-visual img { |
| 115 | + max-width: 90%; |
| 116 | + border-radius: 12px; |
| 117 | + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5); |
| 118 | + } |
| 119 | + |
| 120 | + section { |
| 121 | + padding: 100px 40px; |
| 122 | + max-width: 1200px; |
| 123 | + min-height: 50vh; |
| 124 | + margin: 0 auto; |
| 125 | + } |
| 126 | + section h3 { |
| 127 | + font-size: 2rem; |
| 128 | + margin-bottom: 20px; |
| 129 | + text-align: center; |
| 130 | + } |
| 131 | + section p.section-desc { |
| 132 | + text-align: center; |
| 133 | + margin-bottom: 60px; |
| 134 | + color: var(--text-muted); |
| 135 | + max-width: 800px; |
| 136 | + margin-left: auto; |
| 137 | + margin-right: auto; |
| 138 | + font-size: 1.25em; |
| 139 | + } |
| 140 | + |
| 141 | + .features { |
| 142 | + background: var(--bg-darker); |
| 143 | + } |
| 144 | + .grid { |
| 145 | + display: grid; |
| 146 | + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); |
| 147 | + gap: 24px; |
| 148 | + } |
| 149 | + .card { |
| 150 | + background: #161b22; |
| 151 | + border: 1px solid #1f2328; |
| 152 | + border-radius: 8px; |
| 153 | + padding: 24px; |
| 154 | + |
| 155 | + transition: transform 0.3s, border-color 0.3s, box-shadow 0.3s; |
| 156 | + } |
| 157 | + .card:hover { |
| 158 | + transform: translateY(-10px); |
| 159 | + border-color: var(--accent); |
| 160 | + box-shadow: 0 0 25px var(--accent); |
| 161 | + } |
| 162 | + .card h4 { |
| 163 | + margin-bottom: 10px; |
| 164 | + font-size: 1.2rem; |
| 165 | + color: var(--accent); |
| 166 | + } |
| 167 | + .card p { |
| 168 | + color: var(--text-muted); |
| 169 | + } |
| 170 | + |
| 171 | + |
| 172 | + footer { |
| 173 | + text-align: center; |
| 174 | + padding: 40px 20px; |
| 175 | + font-size: 0.9rem; |
| 176 | + color: var(--text-muted); |
| 177 | + border-top: 1px solid #1f2328; |
| 178 | + background: var(--bg-darker); |
| 179 | + } |
| 180 | + |
| 181 | + video { |
| 182 | + position: absolute; |
| 183 | + top: 0; |
| 184 | + left: 0; |
| 185 | + width: 100%; |
| 186 | + height: 100%; |
| 187 | + object-fit: cover; |
| 188 | + z-index: -2; |
| 189 | + } |
| 190 | + .hero::after { |
| 191 | + content: ""; |
| 192 | + position: absolute; |
| 193 | + inset: 0; |
| 194 | + background: linear-gradient(180deg, rgba(0, 0, 0, 0.75), #0b0f17); |
| 195 | + z-index: -1; |
| 196 | + } |
| 197 | + .hero h2 { |
| 198 | + font-size: 3rem; |
| 199 | + line-height: 3.75rem; |
| 200 | + margin-bottom: 20px; |
| 201 | + background: linear-gradient(90deg, #f87755, var(--accent)); |
| 202 | + background-clip: text; |
| 203 | + -webkit-background-clip: text; |
| 204 | + color: transparent; |
| 205 | + -webkit-text-fill-color: transparent; |
| 206 | + animation: slideIn 1.2s ease forwards; |
| 207 | + } |
| 208 | + @keyframes slideIn { |
| 209 | + from { |
| 210 | + transform: translateY(-50px); |
| 211 | + opacity: 0.1; |
| 212 | + } |
| 213 | + to { |
| 214 | + transform: translateY(0); |
| 215 | + opacity: 1; |
| 216 | + } |
| 217 | + } |
| 218 | + .hero p { |
| 219 | + max-width: 700px; |
| 220 | + margin: 0 auto 40px; |
| 221 | + font-size: 1.2rem; |
| 222 | + color: #c9d1d9; |
| 223 | + opacity: 0; |
| 224 | + animation: fadeUp 1.5s ease 0.8s forwards; |
| 225 | + }@keyframes fadeUp { |
| 226 | + from { |
| 227 | + transform: translateY(-20px); |
| 228 | + opacity: 0; |
| 229 | + } |
| 230 | + to { |
| 231 | + transform: translateY(0); |
| 232 | + opacity: 1; |
| 233 | + } |
| 234 | + } |
| 235 | + </style> |
| 236 | + </head> |
| 237 | + <body> |
| 238 | + <header> |
| 239 | + <h1>FuckingNode 5</h1> |
| 240 | + <nav> |
| 241 | + <a href="#wtf">WTF is this?</a> |
| 242 | + <a href="#features">What can it do?</a> |
| 243 | + </nav> |
| 244 | + </header> |
| 245 | + |
| 246 | + <section class="hero"> |
| 247 | + <video autoplay muted loop playsinline> |
| 248 | + <source src="./fkn4.mp4" type="video/mp4"> |
| 249 | + </video> |
| 250 | + <div class="hero-text"> |
| 251 | + <div style="overflow: hidden;"> |
| 252 | + <h2>The f*cking chaos of maintaining JavaScript projects ends here</h2> |
| 253 | + </div> |
| 254 | + <p> |
| 255 | + FuckingNode is a one of a kind, state of the art CLI to automate headache giving tasks and make it easier to develop in N*deJS, Deno, or Bun. |
| 256 | + </p> |
| 257 | + <div class="buttons"> |
| 258 | + <a href="manual/" class="btn">Get started!</a> |
| 259 | + <a href="#wtf" class="btn2">Learn more</a> |
| 260 | + <a href="https://youtube.com/watch?v=J675ZcYBrHM" class="btn2">Watch the video</a> |
| 261 | + </div> |
| 262 | + </div> |
| 263 | + <div class="hero-visual"> |
| 264 | + <img src="./image.png" alt="FuckingNode doing some cleanup"> |
| 265 | + </div> |
| 266 | + </section> |
| 267 | + |
| 268 | + <section id="wtf"> |
| 269 | + <h3>What the f*ck is FuckingNode?</h3> |
| 270 | + <p class="section-desc"> |
| 271 | + You hate running <code>eslint</code> every time. You hate npm taking away your disk space. You have your SSD being full because of 20 libraries you're not even releasing anyway. You hate forgetting test suites before committing code. You hate messing up while migrating a NodeJS project to Bun. <b>You hate this f*cking chaos, and so do we.</b> |
| 272 | + </p> |
| 273 | + </section> |
| 274 | + |
| 275 | + <section id="features" class="features"> |
| 276 | + <h3>What can it <i>actually</i> do?</h3> |
| 277 | + <p class="section-desc">All these things <b>by just running one command</b>.</p> |
| 278 | + <div class="grid"> |
| 279 | + <div class="card"> |
| 280 | + <h4>Cleaning your projects</h4> |
| 281 | + <p>npm dedupe, pnpm prune, whatever you need. They all recursively run across all of your projects.</p> |
| 282 | + </div> |
| 283 | + <div class="card"> |
| 284 | + <h4>Cleaning caches</h4> |
| 285 | + <p>npm is so slow it feels like it doesn't cache stuff, but it does - taking GBs. We know how to clean it up.</p> |
| 286 | + </div> |
| 287 | + <div class="card"> |
| 288 | + <h4>Linting & prettifying</h4> |
| 289 | + <p>If enabled, every project gets passed through ESLint/Prettier (or the tools of your choice). Automatically.</p> |
| 290 | + </div> |
| 291 | + <div class="card"> |
| 292 | + <h4>Cleaning outputs</h4> |
| 293 | + <p>Keep forgetting that <code>dist/</code> folder with stuff you already released taking up storage? Forget about it, we clean it for you.</p> |
| 294 | + </div> |
| 295 | + <div class="card"> |
| 296 | + <h4>Updating dependencies</h4> |
| 297 | + <p>You usually forget this, don't we all? We do it for you, and even push the updated lockfile to Git if you want to.</p> |
| 298 | + </div> |
| 299 | + <div class="card"> |
| 300 | + <h4>Removing node_modules (?)</h4> |
| 301 | + <p>This is obviously optional, but if your hard drive surprises you with literally no space left, you can surprise it with this "feature".</p> |
| 302 | + </div> |
| 303 | + </div> |
| 304 | + </section> |
| 305 | + |
| 306 | + <footer> |
| 307 | + Copyright 2025 ZakaHaceCosas. All rights reserved. |
| 308 | + </footer> |
| 309 | + </body> |
| 310 | +</html> |
0 commit comments