Portfolio - Gerson Ortiz
Gerson Ortiz
Senior Frontend Developer
"9 years of experience have taught me one thing above all: assumptions are where bugs live. Whether it's a landing page or a full SaaS, I check before I ship: the edge case nobody asked about, the contrast ratio that looks fine until you measure it, the logic that only breaks once you feed it real numbers. That habit is the actual product. The code is just where it shows up."
Recent Projects

Expenses App
A spreadsheet replacement that became a daily habit
This one started with two real reasons: a spreadsheet was tracking my budget, expenses, and pending bills well enough, but closing out a month still meant an hour spent rebuilding the full picture by hand. At the same time, a legacy-to-modern stack migration was coming at work, and I wanted real uncertainty to practice on, not a tutorial's idea of it. So I built without a roadmap, on purpose.
It worked; however, a delete action that should have recalculated everything downstream quietly broke. By then, it had already served one of its purposes: being the project that brought real uncertainty to practice. So for a while it just sat there, idle.
I rebuilt it once, fast, just to have something working, better looking, same logic underneath, mostly untouched.
The real rebuild came later, out of curiosity more than need. I'm always trying to keep up with newer tools, and once I started studying TanStack Query and React Hook Form, this was the project I kept thinking could use them. The state manager wasn't doing it any favors anymore.
That meant going back into what had been the core since day one, including that same delete logic that broke the first time. This time I wrote 84 tests before I trusted the fix, fed it real numbers until it held, and watched it hold. It's the version running today, used daily, mobile-friendly enough to check from my phone, and these days, not just by me.
Frost Find
A first mobile app, built fast and finished regardless
I'd never built a mobile app when this one landed: a real-time tracker for an ice cream truck business. I had no mobile experience, but enough years in React to believe the jump to React Native was learnable, not impossible. So I started where you start: the official guide, then the documentation, until I understood what actually changes between web and native before writing real code. With no real product photography to work with, I built the visual identity around illustration instead: playful palette, custom art, something that could carry the brand without needing a single stock photo. The business's proposal was never approved. I finished the MVP anyway (role-based auth, live location sharing, real-time maps) because by then finishing it mattered more than who'd signed off on it.

Experience
How a friend got me in the door
A friend who already worked there knew my background, not my stack, and mentioned an opening might open up. I spent a few weeks studying JavaScript and CSS just to understand what his team was actually building and got hooked on what was possible with just JavaScript alone, even if my view of it was still narrow. When he told me I'd help him finish the project once I was in, that sealed it. The interview confirmed it: meeting the team, seeing not just what they'd built but where they wanted to go, made me want to learn AngularJS fast enough to build alongside them. I started full-stack training almost immediately. Before I knew it, I'd built the coupon and discount system end to end.
Becoming the one new hires got sent to
I don't know exactly why I became the one new hires got sent to, maybe it was trust, since I was already shipping features end to end by then. Maybe it was simpler than that: I'd been there longest, I knew the system inside out, and someone needed to onboard the first new dev. Whatever the reason, I did it well enough that it stopped being a one-time favor and became my job. Every new hire after that came to me not just to learn the codebase, but to learn how to ask questions instead of assuming.
Migrating under pressure
Six years in, the product hit its ceiling, a legacy stack with nowhere left to grow, every client wanting something custom, costs that stopped making sense. When the company merged with a larger platform, I didn't see it as an exit, I saw one more problem worth solving. I led the migration myself, learning React and Next.js in real time, and shipped things like schema-level SEO, the bigger platform hadn't even gotten to. The name changed, the scope changed, the product evolved and so did I.
If I can't explain it to my grandma...
Somewhere along the way, I ended up doing more backend than frontend. It paid off, I understood systems end to end, but I missed it. Backend logic can be solid and invisible, the proof is in the absence of bugs. Frontend is where I can point at something and say "I built that." If I can't explain what I'm working on to my grandma, I don't feel the satisfaction. So when the chance came to go back to it, fully, I took it.
Senior, full-stack capable, available
All of that; the migration, the mentorship, the years of choosing frontend over everything else, shaped how I build now: modern stack, accessibility-first, shipping tested production code. Now I'm available, looking for the next problem worth solving.