Case study · SEP490 capstone project, FPT University

FCTF — Multi-Contest CTF Platform with KYPO Cyber Range Integration

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.

Go ASP.NET Core / C# Python + Flask (CTFd) Kubernetes KYPO CRP Team of 5

The problem it solves

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.

One deployment, many contests

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.

Fair, isolated challenge execution

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.

Two training grounds, one scoreboard

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.

Feature walkthrough

Seven core capabilities of the platform. Screenshots are on the way — this walkthrough will be illustrated with real captures from the running system.

Admin contest configuration and lifecycle screen in FCTF
01

Contest management

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.

Contest lifecycleBracket & visibility rulesImport / export
Admin user and team management screen in FCTF
02

User & team management

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.

Team & captain rolesBonus awardsPerformance profiles
Challenge writer editing a challenge, flags, hints and tags in FCTF
03

Challenge authoring & management

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.

Static / regex / dynamic flagsUnlock chainsVersion rollback
Live scoreboard and admin dashboard in FCTF
04

Scoreboard & dashboard

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.

Real-time rankingScore freezeCSV export
Monitoring dashboard and action log in FCTF
05

Monitoring & audit

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.

Live environment monitoringAction & audit logTicket handling
Diagram of contest-scoped isolation across database, Redis and Kubernetes in FCTF
06

Multi-contest architecture

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.

contest_id isolationRedis namespacingPer-contest K8s quota
Sandbox challenge redirecting into a KYPO CRP Training Run in FCTF
07

KYPO Sandbox challenge integration

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.

KYPO CRPToken-based handoffUnified scoreboard

Under the hood

A polyglot microservices system running on Kubernetes, with a dedicated gateway sitting between contestants and every challenge pod.

Contestant Portal

React + TypeScript SPA (Vite) where contestants browse challenges, manage their team, submit flags, and follow the live scoreboard.

Control Center & Challenge Hosting

ASP.NET Core / C# services (ContestantBE, DeploymentCenter, DeploymentListener, DeploymentConsumer) that orchestrate challenge pods on Kubernetes via Argo Workflows, backed by Redis for runtime state.

Challenge Gateway

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.

Go ASP.NET Core / C# Python + Flask (CTFd) React + TypeScript Kubernetes (K3s) Redis Argo Workflows RabbitMQ MariaDB Harbor Registry Prometheus + Grafana KYPO CRP Docker

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.