Satellite communications & offensive space cybersecurity portfolio. Single-file vanilla HTML/CSS/JS — no build step, $0 stack.
| Layer | Tool |
|---|---|
| 3D hero | Three.js (CDN) — dot-sphere Earth, 3 orbiting satellites, RF beams, starfield |
| Animation | GSAP + ScrollTrigger (CDN) — boot wipe, scroll reveals, pinned attack chain |
| Icons | Lucide (CDN) + inline SVGs for brand icons (removed from Lucide) |
| Fonts | Google Fonts — Space Grotesk / JetBrains Mono |
| Extras | Live ISS position (api.wheretheiss.at, no key) · Canvas RF spectrum · command palette |
- Boot sequence loader → wipes into hero
- Clickable satellites — each opens a project "payload manifest"
sudo hackeaster egg (type it anywhere)- Footer command palette:
help,whoami,projects,skills,contact,flag,clear - Pinned scroll "attack chain": Recon → Signal Acquisition → Protocol Analysis → Exploitation → Intercept & Flag
- Light/dark theme toggle (persisted)
- Custom crosshair cursor (desktop only), RF spectrum widget, live ISS telemetry
prefers-reduced-motion+ mobile fallbacks (no pin, paused render loops offscreen)
Open index.html directly, or serve:
python3 -m http.server 8000GitHub Pages — push this folder to a repo → Settings → Pages → deploy from main (root).
404.html is included and served automatically.
Netlify Drop — drag the folder onto app.netlify.com/drop.
index.html ← the whole site
404.html ← themed not-found page
og-cover.png ← social link preview image
- Brand social icons are inline SVGs (Lucide dropped brand icons — do not re-add via
data-lucide) data-lucide="code-xml"(renamed fromcode-2in newer Lucide)- Render loops pause when offscreen/tab hidden; canvases render one static frame under reduced motion
- Update the two
wu-soonwriteup cards (href="#") when the SATCOM posts go live