Robert Paul Respicio

I build things that work well on both sides.

The right tools and clean code for the developers, and a great experience for the people who use it.

View my work Resume ↓
curated, not exhaustive.
Fetch Rewards 2022 - 2025

Campaign Management Dashboard

Owned frontend architecture from scratch. Turned a multi-department campaign setup into a self-service workflow which dropped launch times from days to minutes.

sveltekittypescriptvitevitesttailwindshadcnrest apiconnect rpcprotobufokta authsstaws
ROLE Frontend engineer sole frontend owner
STACK SvelteKit + TypeScript connectrpc · protobuf
OUTCOME Days → minutes campaign launch time

Multiple departments at Fetch were building and launching campaigns manually with no dedicated tooling and no source of truth. The process lived in documents, handoffs were brittle, and every launch took days of coordination.

This wasn't a tooling problem waiting to be solved. It was a business constraint actively slowing growth.

BEFORE

Workflow lived in multiple documents

Fragile handoffs between teams

Days to launch a single campaign

No audit trail or history

AFTER

Guided multi-step campaign builder

Single source of truth for all campaigns

Minutes to launch

Full history and status visibility

no screenshot provided

for confidentiality

01

Form state

Campaign creation was a multi-step flow with interdependent fields. Change the campaign type and the next two or three fields needed to adapt. Getting that state model right without leaking complexity into the UI took more care than anything else on this project.

02

Shaping the API, not just consuming it

There was no existing backend to build against. I worked with the backend engineers to define the contracts early, and it was a genuine collaboration. I pushed for shapes that made the UI straightforward. They pushed back where things weren't feasible. That back and forth made the difference between a clean frontend and a messy one.

We started with REST, but toward the end of the project we migrated to gRPC on the backend and I adopted ConnectRPC on the frontend. Going contract first made the integration cleaner and gave both sides a shared source of truth to build against.

03

I lived in the ambiguity

Nothing like this existed internally. No designs to lean on. Every decision was a first draft. Component structure, data flow, error handling patterns. There were multiple component libraries in play, none fully built out. Consistency suffered and became a moving target. Scope grew after the fact. Components that weren't built for it ended up carrying business logic they shouldn't have.

Campaign launch time went from days to minutes.

It collapsed a multi-department process down to a single campaign manager, reduced manual errors, and gave the team visibility through logging. No more pulling in engineering for every launch. The tool is still in use.

If I were starting over, I'd push harder for a design system earlier. We never landed on a shared component library, so I built most components from scratch. It added friction, but it kept the UI consistent on my terms.

Switching to protobuf was painful at first but ended up being one of the best parts of the project. Having a typed contract between frontend and backend caught issues before they became bugs.

I underestimated how much the product would evolve during development. Building flexibility into the components and state models would have saved several rounds of refactoring.

Self-serve Dashboard Tooling

Built a workflow enabling non-technical stakeholders to create, deploy, and maintain dashboards independently. Reducing recurring engineering involvement.

npminternal template toolsstawsclaude
Tensoriot 2019 - 2022

Real-time Translator

Designed and built a translation tool for a Canadian client — French Canadian to English and back, powered by AWS Translate.

reacttypescriptwebsocketsmuiaws

Smart Store Analytics Dashboard

Drove the frontend for a smart store analytics dashboard that surfaced consumer dwell time (heat maps) and purchase patterns (charts) across store sections.

reactrechartskonva.jsrest apiwebsocketsaws
Eleveight 2018 - 2019

Case management platform

Built a case management platform serving students, job seekers, schools, and social service organizations.

reacttypescriptwebsocketsmuirest apiaws
Personal Projects

respicio.dev

Although I have an eye for design, I'm not a UI/UX designer, so the collaboration with Claude on the design process (and some technical decisions) is worth reflecting on.

astrotypescriptvanilla jsvanilla cssvercelclaude (ui/ux designer)
ROLE Frontend Engineer developer + designer
STACK Astro + TypeScript vercel · vanilla JS & CSS
OUTCOME Portfolio that showcases me personal + professional

I was a developer with a full-time job, husband and father to a now toddler. I didn't have a portfolio to show who I am, as a person or as an engineer.

I wanted to learn Astro and get back to fundamentals. No frameworks, no CSS libraries, just vanilla JS and vanilla CSS. Astro was the right fit for a fast, responsive site with minimal JavaScript.

But time was limited. I didn't want to spend weeks figuring out UI and UX from scratch, so I brought in Claude as a design collaborator to close that gap without slowing me down.

BEFORE

No portfolio at all

Generic minimal developer aesthetic

"Senior frontend engineer who ships"

Card grid for projects?

No reflection in // how i think

AFTER

A full person, not a stack list

Minimalistic + personal aesthetic

Showcase in DevX and UX philosophy

Grouped work by employer + personal

8 statements in // how i think

01

Getting back to the fundamentals

I've been writing Svelte and React for years. Going back to vanilla JS took some adjustment. Event delegation and manual DOM management are second nature once you're back in it, but it did require unlearning some habits (and picking up new ones).

02

Vercel vs. SST/AWS + GitHub Actions

I wanted an easy way to deploy my portfolio with no hassle and built-in observability. A few factors pointed me toward Vercel. It offers zero-config deployment and observability out of the box, and it's free for one hobby project, which was the deciding factor. The alternative was SST with AWS and GitHub Actions. SST does make it easier to spin up S3, Route 53, and CloudFront, but setup still takes time and I would have needed to wire up observability separately in AWS. If Vercel wasn't free, I would have put in the extra time to go that route.

03

Claude doesn't know Astro

Claude generated patterns that worked in other frameworks but weren't idiomatic Astro. The most common issue showed up while building the matrix theme. It kept attaching onclick handlers and global functions directly to buttons instead of using event delegation with addEventListener, which is the approach Astro's documentation recommends. It's simpler, cleaner, and more in line with how Astro handles client-side interactivity. I caught these, but it was a reminder that AI output still needs an engineer's eye.

04

Mobile-first design thinking

Designing mobile-first is always a challenge. Getting the warmth, contrast, text sizes, grid layout right across screen sizes took more iteration than expected.

A portfolio that is uniquely me

Minimal design, no CSS libraries, responsive across devices, and barely any JavaScript. The fundamentals are on display. More importantly, it's a portfolio I can talk about confidently, because every decision in it has a reason, and that reason is mine.

If I could do it again I'd build a backend to serve the selected work data. I wanted to ship fast so I hardcoded it for now, but the data schema is already defined. When I find the time it won't be a big lift.

This isn't my first time using AI to speed up production. I've used it professionally, especially in the later half of my time at Fetch. What was different here was using Claude specifically as a UI/UX collaborator. I'd share what I was thinking, push back on ideas I didn't like, and Claude would take my direction and elevate it. It filled in my knowledge gaps in design without taking the wheel.

The Matrix easter egg was the one place I leaned on Claude for actual code generation. I have no issue with that, but I did have to push back on the logic in a few spots where it was overcomplicating things. I also used Claude to sanity check my own functions and talk through decisions. That part felt natural.

The experience was genuinely fun. It felt less like prompting a tool and more like working with someone who happened to know a lot about design. We had a great feedback loop going, and that back-and-forth is where AI is at its best.

Next Steps

Full-stack with a friend. Auth, data layer, and UI built from the ground up. Features I wanted for the job search.

next.jstypescripttailwindserver actionsbetter authmongodbmongoosevercel
more than a stack list.

identity

husbandfatherdog dadoc nativecoffee dependentsoftware engineer

based in

Vancouver, Washington

focus

Frontend → Fullstack

experience

7 years 8 months

open to

remote · anywherehybrid · orange county, cahybrid · portland, orhybrid · seattle, wa

currently building

Next Steps: Job Tracking Tool

currently fixated on

steam deckexploring pnwthis portfolio

currently reading

The Pragmatic Programmer

currently playing

Final Fantasy Tactics

tech

vscodevimvim deep darkzshterminal.appmacbook pro m4windows + wsli7-12700krtx 30803 monitorschromefirefox

ask me about

familymy golden retrievercoffeetechtinkeringspoken wordpoetrysteam decktravelcampinghikingcookingdininggamingmoviesmusicstickersthoughts
a peek inside my brain.
01

I care about two kinds of users, the people using the product and the developers building it. Better DevX means better systems, and better systems turn complexity into great UX.

02

I'd rather write thoughtful, self-documenting code. When the code is clear, performance stops being an afterthought and starts being part of good design.

03

Ambiguity doesn't stop me. I ask questions, make my best call, and adjust when needed.

04

I'm deeply curious and stay focused on why a technology exists and how it best fits the current problem. Above all, I'm pragmatic.

05

I do my best work in flow. Conext-switching breaks it. I value human connection, but I default to async first.

06

I'll speak up early if something isn't technically feasible.

07

I don't know everything and I'm okay with that. If there is a better solution, I'd love to hear it. That's how I grow and how we build better things together.

08

I'm human. I make mistakes, I own them and learn from them.

ok fine, here's the stack.
TypeScript primary
Next.js primary
SvelteKit primary
AWS primary
REST API primary
Tailwind CSS primary
Node.js proficient
Vite proficient
Connect RPC proficient
TanStack Query proficient
Vercel proficient
Vitest proficient
Astro growing
MongoDB growing
SST growing

and build something wonderful.

I'm open to full-time roles. If something looks interesting, I'd love to hear about it.