Personal portfolio for Kai Cryan — web development & infrastructure.
A single-page portfolio built around real project case studies rather than a generic template — a freelance e-commerce build and a self-hosted home lab, each written up as its own case study. The site itself, and the server hosting it, are part of the same "build the real thing" habit described on the page.
Sections: About · Approach · Process · Selected Work · Notes · Contact
A themed loading sequence before the hero loads. Full clip (mp4).
| Project | What it covers |
|---|---|
| CODE369 | A client-commissioned brand site (fashion, music, digital tokens) — spec and hand-drawn wireframe through to a hybrid WordPress + Shopify build, self-hosted end to end. |
| Home Lab | Replaced a stock ISP router and third-party cloud apps with a self-built ZimaOS server — AdGuard Home for DNS/DHCP, 20 Zigbee sensors driving climate automation, cloud-free photo storage. |
Short technical write-ups, linked from the site's Notes section — Go concurrency patterns, Go-from-Java quirks, what actually happens in CI vs CD, a git workflow for small teams, TypeScript/Expo first impressions, and two WSL gotchas that cost an afternoon each.
- Vanilla HTML / CSS / JavaScript — no framework, no build step, no dependencies
- Canvas-based animated background (a drifting "signal/network" node field)
- Self-hosted on a home Docker/Linux server — the same infrastructure the Home Lab case study describes
.
├── index.html # About, Approach, Process, Work, Notes, Contact
├── projects/
│ ├── code369.html # Case study: CODE369
│ └── home-lab.html # Case study: Home Lab
└── assets/
├── images/ # Screenshots, favicons, OG image
└── files/
└── Kai-Cryan-Resume.pdf
No build step — clone it and serve the directory:
git clone https://github.com/KaiCryan/kaicryan.dev.git
cd kaicryan.dev
python3 -m http.server 8000
# open http://localhost:8000- Live site — kaicryan.dev
- LinkedIn — linkedin.com/in/kaicryan
- Email — kaithecryan@gmail.com
All rights reserved — this is a personal portfolio; the code is here for transparency and reference, not reuse.

