I build AI agents, custom API integrations, and automation systems that run quietly on a server somewhere — handling the boring stuff so people can focus on the work that matters.
Smart-reply bots, classification systems, and decision agents that read messages, understand intent, and respond appropriately. Built on Claude and OpenAI APIs.
Reverse-engineering internal APIs, handling cookie/OAuth auth flows, building rate-limited workers that run 24/7. Webhook ingestion and Slack delivery.
Custom Express + MongoDB apps that aggregate data from multiple sources into one view. Built when no off-the-shelf tool fits the workflow.
End-to-end video production from a single command — script, voice, avatar, images, animation, and FFmpeg assembly into a finished MP4. ElevenLabs, Hedra, FLUX, Kling.
A multi-platform conversation aggregator that pulls inbound messages from four different services into a single dashboard.
The client was managing brand conversations across multiple messaging platforms with different APIs, auth flows, and message schemas. Each platform had its own quirks — one used cookie-based auth with a short-lived token, another required webhook ingestion, a third had a polling-only interface.

An auto-reply bot for a third-party messaging platform that classifies inbound brand messages and responds with smart, context-aware replies.
The client was getting 30+ inbound brand inquiries per day and replying manually, often with delays. I reverse-engineered the platform's internal GraphQL API (cookie auth, undocumented token refresh flow), built a Node.js service that polls for new messages, classifies them by intent, and sends a templated reply customized to the inquiry type.
// classify inbound message → route to template async function classifyAndReply(message) { const intent = await classifyIntent(message.body); if (!TEMPLATES[intent]) { await slackAlert('unknown intent: ' + intent); return; } const reply = await personalize(TEMPLATES[intent], message); await sendReply(message.threadId, reply); log({ intent, threadId: message.threadId, at: Date.now() }); }
A rule-based agent that filters inbound campaigns from a creator marketplace and auto-applies to qualified ones, then pushes summaries to Slack.
The marketplace had hundreds of new campaigns daily, most of which didn't match the client's criteria. Reviewing manually was eating into actual creative work time. I built a worker that pulls new campaigns on a schedule, runs them through a strict rule filter, applies to the qualified ones via the platform's internal API, and posts structured summaries to Slack for the team to review.

An end-to-end AI video production pipeline that takes a topic and produces a finished MP4 — script, voice, avatar, images, animation, and assembly — with one command.
Built for a client running a faceless YouTube channel. The pipeline needed to match a specific scene grammar: avatar appears 2-4 seconds, switches to zoomed still images, animated clips, and split screens — all cutting on natural voiceover pauses detected from ElevenLabs speech alignment data.
// one command → finished MP4 const script = await generateScript(topic); const voice = await generateVO(script, audioPath); const scenes = getSceneDurations(voice.alignment); const images = await generateImages(topic, count); const avatar = await generateAvatar({ imageBuffer, audioBuffer }); const animated = await animateImages(images); await assembleVideo(scenePlan, audioPath, outPath);

I'm a BSIT student based in the Philippines, currently working as the technical operator for a US-based content creator client.
My day-to-day is a mix of building new automations, maintaining the ones already in production, and figuring out which manual workflow is the next one to kill. I work most comfortably when I'm given a problem instead of a spec — the part I enjoy is mapping the workflow, finding the bottleneck, and shipping the smallest version that works.
Outside client work I'm in school full-time taking DBMS, Java, C, and Discrete Math. The classroom side keeps the fundamentals sharp; the client side keeps the edges practical.
I'm available for full-time work. If you've got a workflow that should be automated and isn't, I'd like to hear about it.
Available for full-time work. Async communication preferred.