A Kubernetes-native Capture-The-Flag platform built for FPT University's cybersecurity training and competitions (FPTU SecAthon, Ethical Hackers Club events, in-class exams) — extended in Version 5 to run several contests at once and to plug KYPO CRP's attack-defense cyber range directly into the same scoreboard.
Four earlier versions of FCTF already ran secure, isolated challenges for one competition at a time. Version 5 removes that ceiling and closes the gap with FPT University's other training ground, KYPO CRP.
The platform used to serve a single competition per deployment — running a class exam alongside a national event meant standing up a whole separate stack. Version 5 isolates every contest by contest_id across the database, Redis, JWT claims, and Kubernetes namespaces so many can run concurrently on one system.
Every team gets its own containerized instance on Kubernetes for each challenge — built and torn down automatically, routed through a dedicated gateway so contestants never touch the cluster directly.
Jeopardy-style challenges live in FCTF; attack-defense cyber-range scenarios live in KYPO CRP. Before Version 5, contestants had to juggle two logins and two interfaces — the new sandbox integration collapses that into a single flow and a single ranking.
Seven core capabilities of the platform. Screenshots are on the way — this walkthrough will be illustrated with real captures from the running system.
Organizers configure the full lifecycle of a contest — start/end/freeze time, visibility rules for the scoreboard and challenge difficulty, and bracket grouping for different tracks of contestants. A running contest can be paused, reset, or exported/imported as a self-contained data package for re-use or archival.
Admins manage contestant accounts and teams, assign a team captain, and award bonus points to an individual or a whole team outside of normal flag scoring. Every user and team has a detail view — submission history, solved/unsolved challenges, and awards — for auditing performance during and after the contest.
Challenge writers create and edit challenges with static, regex, or per-team dynamic flags, point-deducting hints, tags/topics for discovery, and prerequisite/unlock chains between challenges. Every upload is versioned, so a challenge writer can preview a build before it goes live or roll back to a previous version if something breaks.
A real-time scoreboard ranks teams within a bracket, with a freeze option so organizers control exactly when official standings are revealed. An admin dashboard summarizes contest health at a glance — challenges, solves, and active participants — and standings can be exported to CSV for official records.
Admins and jury watch each team's running challenge environment live, review a full action log per team/user (challenge started, flag correct/incorrect, hint unlocked), and check a separate admin audit log for every administrative change. Contestant tickets flow into the same view so disputes get handled without leaving the monitoring screen.
The platform's biggest structural change: every contest-dependent table now carries a
contest_id, Redis keys are namespaced per contest, JWTs carry a contest claim
checked by middleware, and Kubernetes namespaces are prefixed per contest with their own
resource quota. The result is that two contests — even with overlapping team names and
reused challenge templates — can run at the same time with zero cross-contamination of data,
scores, or running pods.
A new "sandbox" challenge type links directly to a Training Instance on KYPO CRP. Starting it takes a contestant straight into their KYPO Training Run — no separate login, no manual navigation — because team creation in FCTF automatically provisions a matching KYPO account behind the scenes. Once the scenario is solved, FCTF pulls the Training Run result back through the KYPO API and folds it into the same unified scoreboard as the Jeopardy challenges.
A polyglot microservices system running on Kubernetes, with a dedicated gateway sitting between contestants and every challenge pod.
React + TypeScript SPA (Vite) where contestants browse challenges, manage their team, submit flags, and follow the live scoreboard.
ASP.NET Core / C# services (ContestantBE, DeploymentCenter, DeploymentListener, DeploymentConsumer) that orchestrate challenge pods on Kubernetes via Argo Workflows, backed by Redis for runtime state.
A Go reverse proxy in front of every challenge pod — token-based routing, TCP/TLS multiplexing, and Redis-backed rate limiting, so contestants never reach the cluster directly.
A 5-person SEP490 capstone team at FPT University, extending four earlier generations of the FCTF platform with Version 5 — multi-contest support and KYPO Cyber Range integration for FPT University's cybersecurity training and competitions.