Amiel
Vincent
Cañas
10+ years building, automating, and keeping systems alive — across FinTech, SaaS, and web hosting. I build and troubleshoot WordPress, Next.js and Webflow sites, set up GTM/GA4 tracking, and tune Core Web Vitals. I architect infrastructure that doesn't sleep, write code that ships, and debug the things others can't.

Engineer.
Operator.
Builder.
I'm a Site Reliability Engineer and Web Developer with a decade of experience spanning FinTech infrastructure, WordPress ecosystems, and SaaS platforms. I started in web design, moved into DevOps, and now live at the intersection of building and operating production systems.
At FluentTech, I architected high-availability infrastructure processing millions of transactions. At Kinsta, I built custom Gutenberg blocks and headless Next.js sites. At SiteHost, I containerized production workloads and built observability pipelines that cut detection time by 75%.
I hold a BS in Computer Engineering and believe good infrastructure is invisible — you only notice it when it's gone.
Tech Stack
Key tools and technologies I use across web development, DevOps, observability, and cloud platforms.
Where I've Worked
Impact at Scale
Personal Work
A web tool that turns repetitive site-migration work into a repeatable utility. Scrapes pages from an existing WordPress site and prepares them for import into Webflow or another WordPress site, with per-page PDF export bundled into a single zip. Deployed on Vercel.
Funnel pages for a fascial maneuvers wellness brand, built in Webflow. Designed in Figma, built out by hand in Webflow, with Claude via MCP assisting the build. A Figma to Webflow pipeline with AI-assisted execution.
A newsletter sign-up confirmation flow built on Vercel, connecting Mailchimp to Zapier so new subscribers are confirmed and routed automatically without manual follow-up.
Built an end-to-end AI-powered lead generation pipeline running entirely on local infrastructure — sourcing prospects from Google Maps, qualifying them with a locally-running LLM using custom scoring logic, drafting personalised outreach emails, and delivering ranked daily digests to Slack. Zero SaaS costs, full data privacy, every scoring rule tweakable in real time. A live proof that intelligent automation doesn't require expensive tooling.
Self-hosted personal AI agent running entirely on a MacBook M4 Pro (24GB), with WhatsApp as the primary interface. Runs Qwen3.5:27b locally via Ollama with Metal GPU acceleration — no cloud dependency. Ships with Gmail, Google Calendar, GitHub, and web search skills. Cross-session memory via self-hosted Honcho (PostgreSQL + pgvector + Redis in Docker). OpenRouter free tier as cold-start fallback.
Migrated from Hermes to OpenClaw — a 4-agent system (Orchestrator, Coder, Researcher, Scheduler) running as a persistent macOS launchd daemon. WhatsApp as the interface via Baileys. Model-tiered: qwen3:1.7b for fast routing (<3s) and qwen3.5:27b for code generation. Solved shell env isolation in background daemons, Ollama native API tool-calling (no /v1), and process persistence. Morning briefing cron at 8AM. OpenRouter as cloud fallback.
A mockup site built in Webflow using the Client First methodology — a scalable naming and structure system for clean, maintainable Webflow projects. Focused on applying proper class architecture, reusable components, responsive layout patterns, and GSAP animation effects.
A collection of personal repos I've been building and tinkering with — ranging from automation scripts to small web tools. Works in progress, actively evolving as I explore ideas outside of work.
Work Projects— proprietary, no public links
Set up Google Analytics, marketing pixels, and UTM tracking on both WordPress and Webflow builds, so campaign traffic and conversions are attributed correctly. Also troubleshoot tracking issues: verifying that tags fire, fixing missing or duplicate events, and cleaning up UTM parameters that broke attribution.
Delivered two WordPress builds for clients in the mining and resources sector. Built a full Elementor-based website for a uranium trading company — custom page layouts, WPForms lead capture and contact flows, ACF-powered flexible content areas, and responsive build across all breakpoints. Developed and updated a WordPress site for a mineral resources company, including theme configuration, on-page SEO via Yoast, performance optimisation (caching, image compression), plugin management, and security hardening. Handled end-to-end delivery from local staging to production deployment.
Engineered a full end-to-end news release pipeline for a TSX-listed mining company. Built a custom scraper to extract press release data (title, date, body content) from the client's existing site, then automated bulk import into Webflow CMS via the Webflow Data API. Architected the CMS schema with relational reference fields (Year collection linked to News Releases), mapped all fields correctly for dynamic rendering, and implemented Finsweet CMS Filter for client-side year-based filtering across 200+ press release entries — all without a backend or database.
Built a full observability stack using Zabbix and Grafana across hybrid AWS and SiteHost environments — giving teams a single pane of glass for system health and reducing MTTD by 75%.
Collaborated with marketing and engineering to build a custom A/B testing tool — giving the team configurable control over experiments and directly improving site performance metrics.
Redesigned CI/CD pipelines with automated testing, security scanning, and rollback — reducing deployment time by 60% while achieving zero-downtime releases for a FinTech production environment.
Led the containerization initiative — deployed and managed production Kubernetes clusters that simplified deployments, enabled developer self-service, and maintained strict SLA adherence.
Approval-Gated Press Release Distribution
Turned a newswire release into a ready-to-review Mailchimp campaign, then held it behind a human approval step before anything reached the subscriber list.
The investor relations team published press releases through a newswire, then rebuilt each one by hand in Mailchimp to email an investor subscriber list. It was slow, repetitive, and error-prone. Full automation was off the table: an unreviewed email to an investor list is a compliance and reputation risk, and Mailchimp has no native approve-before-send step.
I built a small serverless PHP app that sat between the newswire and Mailchimp:
- Zapier polled the newswire RSS feed and fired a webhook on each new release.
- The app fetched the full release text, cleaned it, wrapped it in the email template, and created a Mailchimp draft.
- It emailed an approval message containing a preview of the exact campaign HTML and a signed, expiring link.
- The link opened a confirmation page showing the audience and recipient count. Only a deliberate POST from that page sent the campaign.
The approval link only renders a confirmation page. Sending requires a deliberate POST.
HMAC-SHA256 over campaign ID and expiry, checked in constant time. No token storage.
Large sends require typing the exact recipient count, which is re-fetched server side. Missing count fails closed.
Email scanners and link prefetchers open every URL in an email, so a send-on-click link can fire without a human. The approval link only rendered a confirmation page; the send was a separate POST.
HMAC-SHA256 over the campaign ID and expiry, compared in constant time. No token database. Replay protection came from Mailchimp itself, which rejects a send on a campaign that has already been sent.
Above a threshold, the confirm page required typing the exact recipient count. The count was re-fetched from Mailchimp server side, never trusted from the form, and a missing count failed closed.
The approval email embedded the campaign's own HTML pulled from Mailchimp, not a rebuilt copy, so what was approved was byte-for-byte what subscribers would receive.
Each release mapped to a campaign titled PR-{releaseId}. Dedupe searched all campaign statuses, so a redelivered release never created a second draft, even after it was sent. The ID extractor accepted both URL shapes the feed emitted, so one release could not become two drafts.
Stripped the newswire's embedded read-tracking pixel so opens were not reported to a third party. Decoded entities exactly once (double decoding corrupts characters like the ñ). One release measured 431 KB against Gmail's ~102 KB clipping limit, caused by a 404 KB drill-results table, so oversized tables were replaced with a link to the full release instead of shipping a clipped email.
Releases older than a configurable window were skipped, so activating the automation could not backfill the whole feed.
Outcomes were reported in the JSON body (handled, duplicate, too_old, error), so the automation platform never retried into duplicate emails.
I built it against mock Mailchimp, newswire, and Resend servers, with two shell test suites (about 74 assertions total). The mocks themselves hid three bugs by being more forgiving than the real APIs: a missing recipient count defaulting to zero, a status filter that hid sent campaigns from dedupe, and a feed fixture with the wrong ID format. I found them by diffing against live responses, fixed them, and changed the mocks to match the real APIs.
I built and ran the full chain end to end: feed poll, webhook, dedupe, draft creation, and approval token. It removed the manual rebuilding of each release in Mailchimp while keeping a human in the send path.