Software Developer · Unavailable

I write the systems
a project runs on

Languages

  • Luau
  • JavaScript
  • Python
  • Java

Runtime

  • Node.js
  • Roblox
  • discord.js

Tooling

  • Rojo
  • Git
  • VS Code

Persistence

  • durable writes
  • schema migration
  • recovery after a restart

Realtime

  • replication
  • concurrency
  • state sync

Services

  • REST
  • webhooks
  • Oracle Cloud VM

Current focus

Roblox development in Luau

Everything below is built on it, in Roblox Studio.

01Selected Roblox work Releasing soon

GENTES IN ARMIS

Napoleonic warfare. Two nations, each run by real players with their own command hierarchies. I own it and scripted all of it.

  • Every system custom-built. No kits, no free models.
  • Player-run hierarchies that operate without me touching them.
  • Ranks and command structure survive a restart, so a chain of command isn't rebuilt every session.
Role Owner & sole scripter
Lang Luau · Roblox Studio
Systems Musket ballistics · Combat · Battles · Flag system · Ranks & command hierarchy · Persistence
Build ~60,000 lines over 4 months
Scope Written from scratch. No kits, no free models

02Selected Roblox work Complete

Area-23

An entire SCP Foundation facility: five anomalies, containment protocols, and the systems tying them into one coherent game. Built solo in two weeks.

  • Five anomalies, each with its own rules and failure states.
  • Containment protocols driving how staff and players interact.
  • Full map scripting across the whole facility.
Role Sole scripter
Lang Luau · Roblox Studio
Systems 5 anomalies · Containment protocols · Facility-wide scripting
Build Whole map, end to end, in 2 weeks

03How it's written

Server-authoritative by default

Nothing touching currency, inventory or damage is ever trusted from the other side. The client is the one machine you don't control.

ShopService.server.lua
-- the client asksBuyItem:FireServer(itemId) -- the server decides, and re-checks all of itBuyItem.OnServerEvent:Connect(function(plr, itemId)  local item = Catalog[itemId]  if not item then return end            -- no such item  if Wallet.get(plr) < item.price then return end   Wallet.spend(plr, item.price)  Inventory.give(plr, itemId)end)
04Contact
Write to me directly felipe@felipeariza.com

Or email me at felipe@felipeariza.com

“Write it so someone else can pick it up.” — how I decide what’s finished