Roblox scripter. I get called in when a game is live and something is broken, slow, or quietly losing money. You get a written report of what I found, not just a patched file.
The owner hired me for lag. The lag was real, but it was not the biggest thing wrong with the game.
Workspace that had been dragged one level deeper during a cleanup. The scripts
sat in an infinite yield forever. The tidier the workspace got, the more broken the game became.The performance cause. The physics thread was spending about 96% of every frame on unanchored parts. Weapon parts were live physics bodies, and every single bullet was a real Part with a BodyForce living up to five seconds, while the hit had already been resolved by a separate raycast. The physics body was pure waste.
| Measured | Before | After |
|---|---|---|
| Client FPS | 2.9 | 63.3 |
| Worst frame | 2881 ms | 104 ms |
| Server physics steps/s | 0.32 | 59.9 |
How I worked. Static pass over the codebase first, then live profiling, then a written report before touching anything. The owner approved each stage and knew exactly what was going to change. Nothing got "refactored while I was in there".
Same client, later job. Players pick a weapon, uniform and tools, save it as a named loadout, and get it back on every spawn.




A motorcycle tycoon with a horror layer. Built alone, start to finish, and published.
A commission for a digging and museum game. Eleven systems were scoped out of an eighteen system spec. These six were built, wired together and running in a single day.
Everything here is decided on the server. The client sends one thing, where it clicked.




Backdoor scanners look for someone else's code. This one looks for missing checks in yours. I wrote it, ran it on my own published game, and it found two real holes I had shipped.
The whole problem in five lines:
DamageRemote.OnServerEvent:Connect(function(player, target, amount)
target.Humanoid:TakeDamage(amount)
end)
The client picks both arguments. An exploiter sends any character and any number and kills
anyone from anywhere. There is no obfuscation here, no loadstring, no foreign
require. It is the developer's own code and it reads completely normal, which is
exactly why every backdoor scanner walks straight past it.
What the plugin does. It reads server scripts, finds every
OnServerEvent, OnServerInvoke and Knit client method, and for each
client argument asks one question: does anything check this before it reaches something that
matters. Damage, currency, DataStore writes, cloning, destroying, teleports, purchases. If the
answer is no, you get the remote name, the file, the line, and one sentence on what is missing.
Run on Chaos Protocol Tycoon: 72 scripts, 75 handlers, 6 findings.
Verified against two fixtures before it went anywhere near real code: six planted holes, all six found, and six correct handlers plus three traps with a remote handler hidden in a comment, a string and a long bracket block. Zero findings on that one.
Built as a standalone system and dropped into a blank place, so it can be judged on its own. Thirty-seven presets, one schedule, no client ever deciding what the sky looks like.
The server owns the schedule and picks the weather. Clients only render it. No remote asks for a weather change and no client can push one, so two players standing next to each other are never in different storms.
In development. It's here because it shows how I structure a project when nobody hands me ten years of legacy code.
Fixed price, agreed in writing before I start. If the job turns out smaller than I quoted, you pay the smaller number.
Send me the problem and a link to your game. I'll tell you straight whether it's a small fix or a real job, before you commit to anything.