Nobody was interested in my portfolio, so I made everyone play it instead.

Published: (January 4, 2026 at 11:16 PM EST)
6 min read
Source: Dev.to

Source: Dev.to

New Year, New You Portfolio Challenge

Presented by Google AI

Controls

Keyboard & Mouse

ActionKey / Input
MoveA/D or ←/→ keys
JumpSpace key
Emoji WindowQ key
Zoom In/OutMouse scroll

Website:

🎮 Challenge: Find all the collectible cards scattered around the map. Drop a screenshot in the comments when you’ve collected them all!

Why I built this

“In the next 5 minutes, you’ll see why I spent 3 years building my own networking stack just to make my portfolio weirder.”

Working in a creative field, a boring scrollable page just didn’t feel right. I wanted a way to show what I can do, not just list it. So I turned my old portfolio site into an online multiplayer game world where I can pretty much do ANYTHING I want.

I’m a game developer who believes technology should be engaging, interactive, and boundary‑pushing. This portfolio represents years of experimenting, failing, and building—from simple back‑ends to complex multiplayer systems.

What you’ll see in‑game

The embedded application above is a fully functional, cross‑platform multiplayer game that serves as my interactive portfolio. Instead of scrolling through a conventional website, visitors can explore my work through gameplay while seeing live updates of:

  • Latest YouTube videos
  • GitHub activity and contributions
  • Indie game projects
  • Open‑source projects
  • Random “Dan Facts of the Day”

Collectible cards are placed around the map, each revealing pictures and information about me and my career. There’s even a special button that literally lets you call me into the world if I’m available—something you can’t do with a traditional portfolio.

Technical Specs

ComponentDetails
Game Engine (client‑side)Unity 6 (WebGL build with mobile support)
NetworkingDan.Net – my custom Go + WebSockets stack
DeploymentGoogle Cloud Run (2 GB memory, 2 vCPU)
AI AssistantGoogle Antigravity for workflow optimization
APIsYouTube Data API, GitHub API
ServerCustom Node.js HTTP server with gzip handling

Note: I didn’t use an off‑the‑shelf multiplayer solution. Everything—from core gameplay logic and statistics displays down to the networking layer—was built by me, including the entire networking stack Dan.Net.

Fun Fact

I drew a good amount of the art assets myself using Aseprite (aside from some random PNGs for skins and tiles). The music is the Toyota Corolla 2008 theme—please do not question the choice of music! 😉

Journey Timeline (4 years)

YearMilestones
2021Started with Photon Engine, made some games, but felt like I was just calling functions without understanding the underlying mechanics.
2022Fell down the rabbit hole: experimented with Python/Flask, built the Leaderboard Creator tool (now one of the highest‑rated on itch.io), tried PHP, moved to Node.js & WebSockets. By late 2022, the idea for Dan.Net was born.
2023The grind. Spent three straight days debugging a multithreading race condition. When it finally worked, those three days became some of the most rewarding of my life.
2025Pushed Dan.Net to a stable, production‑ready state, ready to power real projects.

Multiplayer Architecture (Simplified)

  1. Room System – Players can create or join rooms using a room name. Think of rooms as “player pools” or “matches”.
  2. Event‑based Networking – Important actions (player joins, picks up a card, changes skin) send a buffered event to the server. Emoji reactions send a direct event. The server broadcasts these to the relevant players.
  3. Stream‑based Networking – Every few milliseconds each player sends their current position. The server aggregates all positions and sends back updates about everyone else’s location.

Under the hood there’s interpolation, latency compensation, bandwidth optimization—all the fun stuff that keeps everyone’s view of the world in sync.

Deploying Unity WebGL with Gzip on Cloud Run

Unity’s WebGL builds use gzip compression, which is great until you try to deploy them. Browsers need specific HTTP headers to decompress these files correctly, and Cloud Run doesn’t set them by default.

Solution: I built a custom Node.js HTTP server that:

  • Detects .gz files and sets Content‑Encoding: gzip headers
  • Maintains correct MIME types for WebAssembly, JavaScript, and data files
  • Handles CORS properly for cross‑origin requests
  • Serves the 36 MB build efficiently with proper caching

Google Antigravity saved a lot of time here, helping me debug header configurations and optimize the server setup.

How Antigravity Helped

  • Dan.Net Improvements: Refined how the Unity client communicates with my Go backend, especially around WebSocket connection handling and state synchronization.
  • Cloud Run Debugging: Troubleshot why the Unity build wasn’t loading (it was the headers). Antigravity helped me understand the relationship between Unity’s compression, HTTP headers, and browser requirements.
  • API Integration: Implemented YouTube and GitHub APIs securely without exposing keys or creating vulnerabilities. The dynamic boards that show my latest videos and contributions wouldn’t work without proper API setup.

Takeaway

Creating my own Go‑based networking solution and successfully integrating it with Unity for cross‑platform multiplayer demonstrates full‑stack capabilities spanning from low‑level networking protocols to high‑level game development.

Check out Dan.Net to see the code and learn more about the stack behind this interactive portfolio.

Portfolio Vision

This isn’t just about showing what I’ve done — it’s about showing what I can do. A true portfolio shouldn’t be a static page; it should be an experience that reflects your skills and personality. When I said I can do ANYTHING I want here, I meant it.

Dynamic Features

  • Live Boards – Update automatically based on my activity (latest YouTube videos, recent GitHub commits). The world always feels alive and current.
  • “Dan Fact of the Day” – Changes daily, so visitors always see fresh content without any manual updates.
  • Collectible Cards – Reveal information as you explore, adding a layer of interactivity.
  • Call‑to‑Action Button – Press it and I’ll join the world (if I’m available). 😉

Technical Highlights

  • Unity 6 Web Support – The game runs seamlessly on desktop, mobile, and web browsers.
  • Powered by Dan.Net – Demonstrates not only front‑end skills but also a solid grasp of:
    • Networking protocols
    • State management
    • Distributed systems
    • Backend architecture

Advice for Creators

“Share your work, and document your journey.”

  • Be proud of what you’ve built and what you’re still building.
  • Don’t hesitate to put yourself out there.

Why Sharing Matters

  • Learning by Watching: When you share—including the messy parts—you give others permission to try.
  • Inspiration: Your story might be exactly what someone needs to take their first step.
  • Momentum: Seeing one person figure it out can spark the thought, “I could do that too.”

Nothing you learn ever really goes to waste. It just shows up in the next crazy idea.

My portfolio is the culmination of years of experiments, failed projects, and learning moments—all coming together into something I’m genuinely proud of.

Get Involved

  • Try it out and let me know what you think in the comments!
  • Interested in game development, networking systems, open‑source development, or just want to hang out?
    • Reach out via my Discord server – I’d love to connect!

Want More?

  • Behind‑the‑scenes content, weird prototypes, and devlogs about this evolving portfolio world are on my:
    • YouTube channel
    • GitHub

Thank you for exploring my portfolio. I look forward to hearing from you!

Back to Blog

Related posts

Read more »