Cybersecurity education with simulated incident-response gameplay.
Translation pending
EducationTypeScript · CSSGitHub @UmarAlMukhtarOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Cybersecurity education through simulated incident-response gameplay. Next.js 16 · TypeScript · Tailwind CSS 4 · Motion · xterm.js — real-time attacker-vs-defender multiplayer over WebSockets + Upstash Redis.
All gameplay is a client-side simulation against fictional targets. See
AGENTS.mdfor the simulation boundaries and engineering conventions.
https://php2shell-live.vercel.app — first deployment (production domain of the hobby project; the repo is git-connected so pushes auto-deploy and PRs get preview deployments).
The opening heap strip is a labeled illustration; every product frame is a
real production capture. The full edit plan lives in storyboard.json.
cd video
npm install
npm run render # remotion render src/index.tsx Main out/php2shell-live-demo.mp4 --codec h264 --crf 23
npm run still # poster frame -> out/poster.png
Sources: storyboard.json (scene timings/captions), video/src/ (composition
at 1920x1080, 30 fps). Screenshots are consumed straight from docs/media/
via Config.setPublicDir; the small docs/media/crops/ derivatives are
ffmpeg re-crops of the same captures (regenerate with ffmpeg -i <src> -vf crop=iw*W:ih*H:iw*X:ih*Y).
One continuous journey: Visualize → Defend → Verify.
/play)Real-time attacker-vs-defender rooms on top of the same simulation engine:
upgradeWebSocket) with
an automatic REST polling fallback; heartbeats drive presence.KV_REST_API_URL/KV_REST_API_TOKEN, injected by the Upstash
integration), so players on different function instances stay in sync.playerId + server-issued
bearer token; role gates reject cross-role actions.defend/attack
ids, verify, reset); unknown payloads are rejected before state
changes. Call signs are control-char-stripped and capped at 24 chars.p2s:room:<CODE>); one
room's players/actions/snapshots never touch another's.Cache-Control: no-store;
sockets live up to maxDuration = 300; presence is heartbeat-derived
(~9 s) and ghosts older than 2 min are pruned on join.nvm use # Node 24 (see .nvmrc)
npm ci
npm run dev # http://localhost:3000
npm run lint && npm run typecheck && npm test && npm run build
CI (.github/workflows/ci.yml) runs the same gates on every push and PR.
next start automatically use the polling fallback./ and /play (the 390px dashboard-header wrap
regression was fixed in this branch).AGENTS.md — architecture, TypeScript standards, component and testing
conventions, security-simulation boundaries.ENVIRONMENT.md — toolchain, Devin environment persistence, MCP
integrations, deploy readiness..devin/skills/ — project skills for Devin sessions (frontend-design,
security-simulation, browser-qa, deployment-check).docs/JUDGE_DEMO.md — 90-second judge-demo script + submission text.