{"count":6,"items":[{"slug":"the-block","name":"The Block","blurb":"A GTA-style open world, built in Unity 6 and rebuilt in Unreal Engine 5: the same game in two engines.","description":"A small but genuinely playable 3D open world with a four-mission campaign. You can walk it, swim it, drive it, ride it and fly it. I built the whole game in Unity 6, then rebuilt it from scratch in Unreal Engine 5.8: the same city, the same missions and the same feel, on a different engine. Both builds are playable on macOS, and the trailer runs them side by side.","process":[{"title":"It started as a browser game","body":"The first version ran in the browser on Three.js and Rapier: 175 TypeScript modules, with online multiplayer over Supabase. Partway through I decided a slice of the game in a browser was not what I wanted to ship, and moved the whole project to a game engine."},{"title":"Unity 6: the full game","body":"I rebuilt the entire game in Unity 6 with URP: 220 C# scripts and about 63,000 lines. The city is not placed by hand. 54 editor scripts generate the districts, cars, crowd and ragdolls from one config file. The port went one system at a time, 39 units over about five weeks, and every unit asked whether Unity could do the job better than the browser build had, rather than copying its workarounds. This is the build I submitted for the course, and its source is public."},{"title":"Unreal Engine 5.8: the same game, built again","body":"With the Unity build finished, I rebuilt it in Unreal Engine 5.8 to learn the engine on a game I already knew inside out. The gameplay systems (campaign, traffic, crowd, police, day and night, economy and the HUD) live in a C++ module of about 49,000 lines, with Blueprints for the rest. One Editor Python script places the world from the same config file Unity reads, the cars run on Chaos Vehicles, and the lighting is matched to the Unity build so the two read as one game. Each unit started with the same question, \"can Unreal do this better?\", and shipped with a probe script that checked it against the Unity numbers before I play-tested it and signed it off."},{"title":"How the two builds were made","body":"Both engine builds were made with Claude Code driving the editor through the engine's MCP server, Unity's in the first port and Unreal's in the second. I set the scope, made the design calls and play-tested every unit; nothing counted as done until I had played it."},{"title":"One trailer, two engines","body":"The project ends in a film rather than a feature list. The Unreal trailer was captured inside the game, shot for shot against the Unity cut, and both halves then run in one frame at the same time: Unity on the left, Unreal on the right, all 21 shots lined up."}],"year":"2026","highlights":["The same game built in two engines: 220 C# scripts in Unity 6, a C++ and Blueprint rebuild in Unreal Engine 5.8","Started as a 175-module Three.js browser game before the move to an engine","Four-mission campaign that runs through to a win screen, in both engines","Six ways to get around: on foot, swimming, car, motorcycle, helicopter, jet ski","Physics via Rapier on the web, Unity's built-in physics, then Chaos Vehicles in Unreal"],"tech":["Unity 6","Unreal Engine 5","C#","C++","Blueprints","Three.js","TypeScript","Rapier physics","Chaos physics","Vite","Supabase","Blender","Vercel"],"links":[{"label":"Playable builds, Unity and Unreal (macOS)","href":"https://drive.google.com/drive/folders/186tblV6VY5XPdYJDbw1Z-ARdQ-WxO-Du","kind":"download"},{"label":"Unity source","href":"https://github.com/RoeeSivan/theblock-unity","kind":"source"}],"image":{"src":"https://roeesivan.com/projects/the-block.jpg","alt":"The Block key art: a cel-shaded coastal city at sunset, palm-lined beach highway with a rider on it, a helicopter and a jet ski over the water."},"video":{"youtubeId":"5Pe71pj3xCA","title":"The Block - Unity 6 and Unreal Engine 5, side by side","caption":"One trailer, played in both engines at once: the Unity 6 build on the left, the Unreal Engine 5.8 rebuild on the right, shot for shot."},"featured":true,"url":"https://roeesivan.com/projects/the-block"},{"slug":"uni-rate","name":"Uni-Rate","blurb":"A bilingual course-review platform used by 199 students at Reichman University.","description":"Students at my university had no shared record of which courses were worth taking, so I built one. Uni-Rate hosts course ratings, written reviews, AI-generated course summaries, prerequisite graphs and a schedule planner, in English and Hebrew with full RTL support. It runs in production on Vercel with real users and real data.","year":"2026","highlights":["199 registered users at Reichman University","Full EN/HE bilingual UI with right-to-left layout support","Custom email-verification auth plus optional LinkedIn OAuth for verified reviews","AI course summaries generated from aggregated review text via Gemini","Scores 99/100 on is-agentic.com for AI-agent readability"],"tech":["Next.js 16","React 19","TypeScript","Prisma","PostgreSQL","SCSS Modules","Gemini API","Resend","JWT / jose","Vercel"],"links":[{"label":"Live site","href":"https://www.uni-rate.com/","kind":"live"}],"image":{"src":"https://roeesivan.com/projects/uni-rate.jpg","alt":"Uni-Rate key art: the Uni-Rate mark beside the line “Real reviews, real students”, with two course-review cards floating alongside it - one in English and one in right-to-left Hebrew, each showing a star rating and an anonymous student's write-up."},"featured":true,"url":"https://roeesivan.com/projects/uni-rate"},{"slug":"table-tennis-analyzer","name":"Table Tennis Analyzer","blurb":"A computer-vision pipeline that watches a table tennis match and reports on it.","description":"Feed it a match video and it returns an annotated render plus analytics. It tracks both players with YOLOv8 pose estimation, detects and speed-measures the ball through a hosted detection model, and reads the scoreboard with OCR behind a monotonic-score validator that rejects impossible readings. Outputs include player heatmaps, a score progression chart, a shot-placement map and a fastest-shot highlight clip.","year":"2026","highlights":["YOLOv8n-pose player tracking with close-up, crowd and referee frames filtered out","Ball detection and per-frame speed in km/h via a Roboflow-hosted model","EasyOCR scoreboard reading gated by a monotonic-score validator","Generates heatmaps, score chart, shot-placement map and an auto-cut highlight clip"],"tech":["Python","YOLOv8","Ultralytics","OpenCV","EasyOCR","Roboflow","Matplotlib"],"links":[{"label":"Source","href":"https://github.com/RoeeSivan/Table-Tennis-Analyzer","kind":"source"}],"image":{"src":"https://roeesivan.com/projects/table-tennis-analyzer.jpg","alt":"Table Tennis Analyzer key art: an annotated rally frame with both players outlined in cyan and orange pose skeletons, the ball's flight traced across the table, heatmap panels for player coverage and ball positions, and a readout of the run's counts."},"video":{"youtubeId":"HT1j_05tPi4","title":"Table Tennis Analyzer, pipeline walkthrough","caption":"A pass through the whole pipeline: pose tracking, the geometry gate that throws out close-ups and replays, the rally supercut, scoreboard OCR behind its validator, and the analytics. For this reel the ball was re-detected on every frame rather than every tenth, and the scale was measured off the table, which is what makes the speed figure worth reading.","published":"2026-08-26"},"featured":true,"url":"https://roeesivan.com/projects/table-tennis-analyzer"},{"slug":"teaching-a-robot-to-walk","name":"Teaching a Robot to Walk","blurb":"A Unitree Go2 quadruped learns to walk in MuJoCo - and then to score a goal.","description":"Reinforcement learning on a twelve-joint Unitree Go2 in MuJoCo, trained twice on purpose. A genetic algorithm written from scratch in NumPy ran 1,186 generations and moved the robot 0.74 m; PPO on Stable-Baselines3 reached a stable gait over 20 million timesteps, and the genetic version stayed in the repository as the comparison baseline rather than being deleted. A third layer sits on top of the finished walker: a high-level policy running at 10 Hz that steers the frozen gait by velocity command and learned to push a ball into a goal, without the walking policy ever being retrained.","year":"2026","highlights":["PPO across 20M timesteps on eight parallel MuJoCo environments - 48-dimensional observation, twelve torque-controlled joints at 50 Hz","An eleven-term locomotion reward logged per component, under friction, mass and random-push domain randomization","A pure-NumPy genetic algorithm kept as the baseline: 1,186 generations, behaviour-cloned warm start, anti-gaming curriculum gates","Hierarchical RL for soccer: a frozen walker driven by a 10 Hz policy, scoring on 95% of its last hundred episodes"],"tech":["Python","MuJoCo","Stable-Baselines3","PyTorch","Gymnasium","NumPy","Matplotlib"],"links":[{"label":"Source","href":"https://github.com/RoeeSivan/Teaching-a-robot-to-walk","kind":"source"}],"image":{"src":"https://roeesivan.com/projects/teaching-a-robot-to-walk.jpg","alt":"Teaching a Robot to Walk key art: three MuJoCo frames of a Unitree Go2 quadruped - the PPO champion mid-stride on the flat course, the genetic algorithm's champion pitching onto its nose, and the soccer policy standing over a yellow ball - beside the PPO reward curve and a readout of the run's training figures."},"video":{"youtubeId":"9CfPllFlreU","title":"Teaching a robot to walk, and then to score","caption":"The soccer policy first, milestone by milestone from its earliest flailing to a 95% goal rate, then the two walkers side by side on the same robot and the same physics: the genetic algorithm's champion at generation 1,186 against the PPO champion at step 18,000,000. Both panels carry live telemetry, so the distance and fitness figures are the run's own numbers rather than captions added afterwards.","published":"2026-08-26"},"featured":true,"url":"https://roeesivan.com/projects/teaching-a-robot-to-walk"},{"slug":"neon-highway","name":"Neon Highway","blurb":"A Three.js endless-runner on a neon road with music features.","description":"An arcade endless runner rendered in WebGL: you weave a car down an infinite neon highway, dodging traffic and collecting pickups, with particle effects and a synced soundtrack. Six level themes swap the skybox and hazards as the speed climbs, all of it built on a modular vanilla-JS scene graph with no framework underneath.","year":"2026","highlights":["Custom Three.js scene: procedural road, GLB vehicle models, particle system","Modular vanilla-JS architecture, no framework, 14 ES modules","Six level themes with swapping city skyboxes, drones and laser hazards"],"tech":["Three.js","JavaScript","WebGL","glTF / GLB","Web Audio API","Vercel"],"links":[{"label":"Play it","href":"https://neonhighway.vercel.app/","kind":"live"},{"label":"Source","href":"https://github.com/RoeeSivan/Neon-highway","kind":"source"}],"image":{"src":"https://roeesivan.com/projects/neon-highway.jpg","alt":"Neon Highway key art: the game's low-poly vehicle lineup - supercar, motorbike, police cruiser, van and more - parked across a magenta-lit highway above a night coastline."},"video":{"youtubeId":"b7dciOfVsEw","title":"Neon Highway - gameplay trailer","caption":"A run through all six level themes: the neon road and its pickups, the drones and lasers that shoot across the lanes, and the city skyboxes that swap out as the speed climbs.","published":"2026-08-26"},"featured":true,"url":"https://roeesivan.com/projects/neon-highway"},{"slug":"hasidic-tower","name":"Hasidic Tower","blurb":"An Icy Tower-style canvas platformer you can play with your hands, via webcam tracking.","description":"A vertical-scrolling platformer written in vanilla canvas 2D with selectable characters, enemies, collectibles and a leaderboard. The interesting part is the input layer: alongside keyboard and touch, it supports optional webcam hand tracking through MediaPipe Tasks Vision, so you steer the character by moving your hand in front of the camera.","year":"2026","highlights":["Webcam hand-tracking input via MediaPipe Tasks Vision, running fully client-side in WASM","Three input modes sharing one controller abstraction: keyboard, touch, hand tracking","18 ES modules with a clean loop / state / renderer split","Selectable characters, enemies, collectibles and a persistent leaderboard"],"tech":["JavaScript","Canvas 2D","MediaPipe","WebAssembly","Web Audio API","Vercel"],"links":[{"label":"Play it","href":"https://hasidictower.vercel.app/","kind":"live"},{"label":"Source","href":"https://github.com/RoeeSivan/hasidic-tower","kind":"source"}],"image":{"src":"https://roeesivan.com/projects/hasidic-tower.jpg","alt":"Hasidic Tower key art: the nine pixel-art playable characters standing on braided-challah platforms inside the tower, under the title “9 characters, one holy tower”."},"video":{"youtubeId":"hy3mpfcq3m0","title":"Hasidic Tower - gameplay trailer","caption":"Climbing the tower: character select, the platforms and collectibles, the enemies that get in the way, and the webcam hand tracking steering it all.","published":"2026-08-26"},"featured":true,"url":"https://roeesivan.com/projects/hasidic-tower"}]}