root@vcangel.dev ~ % ./portfolio.sh
A terminal-styled portfolio... In space! 🚀🐸
🍳 Still cookin', stuff will change
I wanted to make a simple portfolio and ended up making this thing in the end ⁽˙³˙⁾
Try help, poke around, find some stuff. All of it sitting on top of a 3D space
scene 'cause space is nice. 🌌
- Type your way around -
helpto kick things off - 3D space backdrop - interactive Spline scene chillin' behind the terminal
- Retro / CRT vibes - scanlines, glow, monospace, the whole aesthetic
- Islands architecture - only the interactive bits hydrate, rest stays static n' snappy
- Works on mobile - terminal scales down so your phone ain't left out
Here's what you can throw at it (run help in the site for the full list):
| Command | what it does |
|---|---|
help |
shows everything you can do |
banner |
display the welcome banner |
fastfetch |
refetch my info into the side panel |
projects |
stuff I've built |
contact |
where to find me |
clear |
wipes the screen |
whoami |
Idk, you tell me! m9っ`・ω・´) |
Plus a pretend Linux box to poke at: ls, cd, cat, tree, find, grep,
head/tail, wc, mkdir, touch, cp, mv, rm, su, sudo... Your
changes to the filesystem are kept in your browser's localStorage, so they're
still there after a reload.
![]()
Subject to change 'cause I like pushing useless features
- Deno - the runtime
- Fresh - web framework, islands gang
- Preact + Signals - UI + state
- Vite - build/dev
- Tailwind CSS v4 - styling
- Spline - the 3D backdrop
One app, two sites: the Host header picks which one renders
(routes/_middleware.ts).
| Host | renders |
|---|---|
cli.vcangel.dev |
the terminal |
vcangel.dev |
the plain SPA (no commands needed) |
| anything else | the terminal |
No DNS or /etc/hosts tweaks needed locally: browsers and curl resolve
*.localhost to your machine, and the .localhost suffix gets ignored.
deno task dev
# http://cli.vcangel.dev.localhost:5173 → terminal
# http://vcangel.dev.localhost:5173 → SPASame URLs on port 8000 after deno task build && deno task start.
made with ❤️ + ☕
