Full Stack Developer | AI Developer | Backend Systems
Full Stack Developer with 5+ years of on-and-off experience building independent projects — scalable web, mobile, and AI-integrated systems. Specialized in LLM integration, real-time WebSocket systems, Dockerized cloud deployments, and CI/CD automation.
01 / Projects
A web extension that scrapes job listings, parses structured data, and matches roles using resume-aware LLM analysis. Generates personalized cold emails with tone control via OpenAI API. Full automation pipeline: scrape → parse → match → generate → review.
Started as an n8n pipeline and outgrew it. Now a self-hosted Python package drawing on three kinds of source: five boards' own JSON APIs, email alerts over IMAP for the auth-gated ones, and HTML only as a last resort. Listings are extracted with an LLM and scored against my resume. Hard filters — geography, salary floor, posting age, title — run before enrich and score, so a job that fails a rule is dropped before it costs an LLM call. SQLite store, Google Sheets archive, Telegram alert above threshold.
Have a product idea? I can help you ship it.
Start a Project02 / Build Activity
03 / AI Showcase
Eight AI systems, language and image. The column that matters is the last one — what each is held to, so it cannot answer past what it actually knows.
A public assistant that answers about the company and the remote nurse role from a fixed knowledge file. It has no tools and no database, so there is nothing for it to invent from — and when a question falls outside what it was given, it offers to send it to the team rather than guessing.
Inside the admin system, a question in English becomes a query the model composes and a read-only role executes. The answer is built only from the rows that came back, and every question carries its own cost.
Paste a URL and it crawls the real site, reads its brand identity, generates a redesign and deploys it to a live link — streamed to the browser over Server-Sent Events as each step completes. The sequence below is what runs.
See it runA browser extension that reads a job listing off the page, structures it, and scores the role against the resume rather than against a keyword list — then drafts a cold email with the tone under control.
A Python pipeline that pulls jobs from board APIs, inbox alerts and, last, HTML, scores each against the resume, and values the salary with a hybrid of model judgement and deterministic code — then logs it and reports to Telegram. The provider is a config line: Claude or GPT-4o. It has run unattended since it shipped.
Generating 60+ consistent avatars for WordWarz.io meant solving a core problem: AI models are unpredictable, and every word in a prompt matters. Here's the process — from prompt engineering to a fully automated pipeline.
Wording is everything in AI image generation — a single token can change the entire output. These comparisons show how prompt structure directly controls what the model produces.
How natural language vs structured tags changes what the model generates — "cat girl" becomes a literal cat.


same seed: 300003
Vague descriptions produce generic output — detailed tags create unique characters.


same seed: 510001
Words with multiple meanings confuse the model — "bat girl" could be a bat or a girl with bat wings.


same seed: 310001
Figurative speech gets interpreted literally — "fire in her eyes" produces actual flames.


same seed: 410001
KSampler Settings
30 steps with res_multistep sampler + ModelSamplingAuraFlow (shift 4.0) for clean Lumina-based generation; low cfg preserves natural detail.
With the right prompts figured out, I built a visual pipeline in ComfyUI — a node graph with full control over each generation parameter.
Then automated the whole thing — a Python script feeds modifier combinations into ComfyUI via API, generating unique avatars from a single prompt template.
Scripts handle auto-naming, BG removal, image optimization, and video compression — all automated in the pipeline.
Included in the scripts:
Files saved as category_variant-name.png
BiRefNet auto-strips backgrounds in pipeline
PNG → WebP, 90% smaller
ffmpeg H.264, 54MB → 1.4MB
MODIFIERS = {
"Hair & Expression": [
{"name": "Red Hair Peace",
"prompt": "red hair, peace sign"},
{"name": "Pink Hair Wink",
"prompt": "pink hair, winking, playful"},
{"name": "Blonde Smug",
"prompt": "blonde hair, smug expression"},
],
"Props & Accessories": [
{"name": "Boba Tea",
"prompt": "brown hair, sipping boba tea"},
{"name": "Catgirl Lollipop",
"prompt": "orange hair, cat ears, lollipop"},
],
"Gamer Variants": [
{"name": "Headphones Jacket",
"prompt": "headphones, gaming jacket"},
{"name": "Catear Streamer",
"prompt": "cat ear headphones, streamer setup"},
],
"Street Style": [
{"name": "Cap Chains",
"prompt": "cap, bubblegum, chain necklace"},
{"name": "Sunglasses Street",
"prompt": "sunglasses, bubblegum, street fashion"},
],
"Royalty": [
{"name": "Royal Crown",
"prompt": "crown, royal cape, proud expression"},
{"name": "Tiara Pearls",
"prompt": "small tiara, smug, pearl earrings"},
],
"Scientists & Tech": [
{"name": "Lab Coat Goggles",
"prompt": "lab coat, safety goggles"},
{"name": "VR Scientist",
"prompt": "VR visor, tech gear, futuristic"},
],
}
Modifier combos, prompt templates, batch queue
Node pipeline processes each prompt automatically
24 unique avatars, production-ready
And here's what the system produces — 60+ avatars, all from one pipeline.
1girl/1boy, chibi, bust portrait, sharp eye highlights, vibrant anime color palette, cel-shading, crisp lineart, white background, centered composition, high detail face
Hover or tap avatars to see the modifier prompt used for each variation




























































Style is extracted via CLIP Vision and injected through IPAdapter Advanced, while text prompts control pose and expression independently.
Given a single character illustration, generate consistent poses and expressions using IPAdapter style transfer — preserving the original art style across every angle.
DreamShaper XL Lightning
Base model
IPAdapter SDXL ViT-H
Style transfer
CLIP-ViT-H-14
Vision encoder
Style Transfer Precise
Weight type
Front
Back
Shocked
Side
Using ControlNet Depth to preserve a mannequin's pose and body structure, then generating photorealistic clothing variations and tattoo removal from text prompts.
A blank mannequin serves as the base pose. ControlNet extracts the depth map to lock the silhouette, while the model generates different outfits from text prompts with dynamic ControlNet strength per clothing type.
RealVisXL V5.0 Lightning
Base model
ControlNet Depth SDXL
Pose preservation
Depth Anything V2
Depth preprocessor
DPM++ SDE Karras
Sampler
Leather Jacket
Overcoat
Trench Coat
Dress Shirt
Interested in working together?
Contact Me04 / Skills
Stacks I'm comfortable working in that the work above doesn't happen to show — ask me about any of them.
05 / Experience
Solo projects and side projects
Self-directed, on-and-off development across frontend, backend and database layers. Built and deployed independent projects including REST APIs, real-time systems and AI-integrated applications. Managed Docker containers, Linux VPS infrastructure and CI/CD deployment workflows.
AMA Computer College Makati
Coursework covering software development, database management, networking and system analysis. Degree not yet conferred; one year of study remains.
06 / About
I'm a Full Stack Developer with 5+ years of on-and-off experience building independent projects — web, mobile and AI-integrated systems. Every project above was built solo, which means the architecture, the deployment and the bugs were all mine to answer for.
Working on my own means I'm also the only person checking my work, so I've got careful about the unglamorous parts. If a payroll figure turns up on three screens, I want it worked out once. If a timestamp matters, the server sets it, not the browser. If a record changes, the old one stays put so you can see who changed what. None of that is clever — it's just the difference between software people trust and software they end up double-checking by hand.
Most of what I know came from building something that broke and then working out why. I'd rather ship something small that holds up than something impressive that doesn't, and I'd rather tell you what a thing can't do than find out later that you assumed it could.
07 / Contact
Open to collaborations, freelance work, and exciting opportunities.
Or find me here