
I was part of the Web and tech support team of the GenZipher 1.0 organized by the CSSL GenZ Chapter of UCSC. We built the full technical infrastructure, powering everything from registrations to the final CTF round.
Here's a quick look at what went on behind the scenes:
Built with Next.js for performance and scalability. Used Google Apps Script to automate email confirmations.
We performed plagiarism detection using Dolos across all submissions in the first round.
A custom script was used to bulk-download submissions. The most popular open-source downloader lacked filtering for specific challenges, so we modified the Go script ourselves and opened a PR, contributing improvements back to the open-source community.
The final round ran on a heavily customized CTFd instance:
Used KCTF to host PWN and Web challenges with proper isolation and auto-reset capability. Since we were running everything on a single VPS, we deployed KIND (Kubernetes IN Docker) — which allowed us to run a lightweight Kubernetes cluster inside Docker containers. This gave us the benefits of Kubernetes orchestration without needing multiple physical nodes.
And Nginx as the reverse proxy.
Containerized services, separate Docker deployments for CTFd and KCTF, and CI/CD pipelines to ensure smooth updates and reliability during the event.
Building the infrastructure was just as exciting as the competition itself — balancing scalability, security, and reliability while keeping everything on a single VPS was a fun engineering challenge.
Huge props to our Web Lead Naveen Harinda, and my fellow members Sashik Thivanka, Induwara Uthsara, and everyone from the GenZipher OC for the teamwork, late nights, and constant problem-solving that made the event a success. Proud of what the team pulled off