AR Payment Chasing
Chases overdue invoices by email — once per customer, at the right escalation level, and never after they've paid.
- n8n
- PostgreSQL
- Gmail API
- OpenRouter
Automation systems
I design and build automation systems with the guardrails and human checkpoints that keep them reliable.
Selected systems
Each opens as a full case study: the problem, how it runs, where people decide, and what has and hasn't been proven.
Chases overdue invoices by email — once per customer, at the right escalation level, and never after they've paid.
Turns tender documents into reviewed, approved draft answers — with a person signing off at every point that matters.

A paid consultation funnel where access is released only after a signed payment webhook is verified against the database.
Client work
Delivered in a paid trial. The client is anonymized and confidential details are withheld.
Client details withheldTurns a sales intake into a priced, AI-reviewed, approved proposal PDF — and makes sure only an approved proposal reaches the client, once. Deterministic pricing runs first; the AI only advises.
All builds
Single-workflow builds and experiments — active builds first, then newest first. This is where the patterns above started.

Answers policy questions in Slack from handbook documents embedded with Ollama into a Supabase vector store.

Answers Facebook Messenger inquiries from a Google Docs knowledge source, with webhook verification and short memory.

Invoice photo in, structured record out: OCR, AI extraction, validation and duplicate checks before anything is stored.

Answers sales questions in Slack by querying a PostgreSQL table through an AI agent's SQL, calculator and reasoning tools.

A Vapi voice agent calls n8n webhook tools to check, book, update and cancel Google Calendar slots, logging calls in Airtable.

A chat agent answering from reference material written directly into its prompt — no retrieval step.

Fetches two Google Docs on every message and passes their full text to the agent.

The same two Google Docs exposed as tools the agent can choose to call.

The earlier sales assistant: an agent answering questions through four n8n Data Table tools and a calculator.

An Asana task update routes each lead down one of five paths: folders, sub-tasks, timed follow-ups and emails.

Enriches form leads through Apollo, scores them with AI, and routes high, medium and low leads to different follow-up.

Audio dropped in Google Drive is transcribed, drafted into blog and social posts, and routed to publish or review.

New leads get an opportunity, tags, an intake-form email, an assigned agent and an internal alert.

Salon inquiries become opportunities with a welcome email, a front-desk alert, a note and a contact task.

Tag-driven stages move a lead from new, to nurturing, to booked as forms are submitted.
15 builds
How I build
The selected systems went through the same written gates, each needing sign-off before the next.
Actors, decisions, exceptions and hand-offs — and where automation should stop.
What is deterministic, where AI is allowed, which database holds the truth.
Assume it failed and find out why. For AR Payment Chasing: seven design holes, fixed before building.
States, contracts, tests and scope — sent back when it isn't build-ready.
Structural and runtime evidence reported separately; blocked and failed paths exercised.
Untested paths, deferrals and known limitations written down.
Failure-injection suites are part of each implementation spec; so far they have only been run in part.
About
I'm Angelo Torrevillas, an AI automation specialist in the Philippines. Connecting apps is the easy part; making it dependable is the work — explicit state in a database, deterministic rules before AI, and people in the loop for decisions that cost money or trust.
My background is computer engineering. I'd rather write down what hasn't been tested than let a demo imply it has.

Mask R-CNN on a Raspberry Pi 5 measures rebar columns and recommends a cement mix. 96.3% system test success rate (77 of 80 trials, ±5% tolerance).

A web app for the Quezon City Public Library that replaced manual attendance records.
FAQ
Automation systems for business processes: n8n and GoHighLevel workflows backed by a database, integrations with CRMs, payment providers, email and chat tools, and AI steps where they genuinely help — such as reviewing proposal pricing, classifying replies, or retrieving and drafting answers from approved documents.
Mainly n8n, PostgreSQL and Supabase, and GoHighLevel. For AI he uses models accessed through OpenRouter and Ollama for embeddings; for payments, PayMongo (so far in sandbox); for communication, Gmail, Slack, Telegram and Facebook Messenger. He writes JavaScript for custom logic, and has used Zapier, Airtable and Vapi on earlier builds.
He maps the business process, sets architecture boundaries and runs a premortem before building. Deterministic rules come first; AI gets a narrow role and no authority over money or records. Systems use idempotency, allowlists and kill switches, a person approves anything costly or irreversible, and each project's status states what has and hasn't been tested.
Use the Book a call section on torrevillas.tech or email angelo.automates@gmail.com with a short description of the process you want to automate.
Contact
I'll tell you honestly whether automation is the right fix — and what it would take to make it dependable.
Pick a time for a discovery call. The calendar is provided by GoHighLevel and loads only when you open it.
Open booking calendarCalendar not loading? Open it in a new tab or email angelo.automates@gmail.com.
Selected system · Accounts receivable
Chases overdue invoices by email — once per customer, at the right escalation level, and never after they've paid.
Problem
Chasing overdue invoices is repetitive, but mistakes are expensive: a reminder sent after payment, three emails to one customer, or a message to the wrong address damages the relationship. Simple automations can't rule those out.
Solution
Four n8n workflows over a PostgreSQL state machine. Deterministic rules decide who to chase and how firmly; reminders go through a durable outbox that re-checks each invoice before sending; replies are triaged by a narrowly scoped AI classifier that cannot change financial records.
How it flows
Runs automatically
Where humans decide
Guardrails
UPDATE … RETURNINGStack: n8n · PostgreSQL · Gmail API · OpenRouter LLM (classification only) · JavaScript
Selected system · Bids & proposals
Turns tender documents into reviewed, approved draft answers — with a person signing off at every point that matters.
Problem
Answering a tender means pulling every requirement out of long, inconsistent documents, finding the best previously approved answer, drafting the rest and getting sign-off before a hard deadline. A missed requirement or an unapproved claim can cost the bid.
Solution
A multi-workflow n8n system on PostgreSQL with vector search. It parses tender documents, extracts and reconciles requirements, retrieves and scores answers from an approved library, drafts with a structured AI call, and routes every answer through review, approval and owner-only final sign-off.
How it flows
Runs automatically
Where humans decide
Guardrails
Stack: n8n · PostgreSQL + pgvector · Ollama embeddings · OpenRouter (GPT-4o mini) · Google Drive & Docs · n8n Forms with user auth · Slack
Selected system · Healthcare funnel & payments
A paid online-consultation funnel where the patient only receives consultation access after a signed payment webhook has been verified against the database.
Problem
For paid online consultations, the consultation link is the product. A clinic needs patients to move smoothly from interest to booking, but access should only be released once payment is genuinely confirmed — not because a redirect page said so.
Solution
Built in two stages. First the GoHighLevel layer: a patient funnel and CRM workflows that move contacts through a pipeline, send reminders and alert staff. Then a payment layer in n8n and PostgreSQL: server-side pricing, PayMongo hosted checkout, signature-verified webhooks and a database-backed payment state that decides what the patient receives — synced back to the CRM.
System layers and their status
Runs automatically
Where humans decide
Guardrails




Stack: GoHighLevel · n8n · PostgreSQL (Supabase) · PayMongo · Webhooks + HMAC · Gmail API · HTML/CSS/JS
Client work · Paid trial
Turns a sales intake into a priced, AI-reviewed, approved proposal PDF — and makes sure only an approved proposal reaches the client, once.
Problem
The firm wanted design-fee proposals produced from sales intake under firm rules: the same inputs must always give the same fee, AI may advise but never set prices, Sales must approve before anything is sent, and retries or edits must never duplicate a proposal or a client email.
Solution
A 65-node n8n workflow. Deterministic JavaScript pricing runs first; an AI review then checks risk and missing information and returns structured output; Sales decides; the proposal is generated as a PDF, previewed, approved and emailed to the client with Sales copied — with every step recorded.
How it flows
Runs automatically
Where humans decide
Guardrails


Stack: n8n Forms & Code · OpenRouter (Llama 3.3 70B) · Google Docs & Drive · Google Sheets records · Gmail · Slack error alerts
Build · n8n · AI agent
Answers sales questions in Slack. An AI agent queries a PostgreSQL sales table through a SQL tool, then uses calculator and reasoning tools before replying. It evolved from the earlier AI Sales Data Assistant, which used n8n Data Tables.

Answer accuracy is still being evaluated: some test answers contained wrong dates or totals.
Stack: Slack · n8n · OpenRouter (GPT-4o mini) · PostgreSQL
Build · n8n · Voice agent
A Vapi voice agent calls five n8n webhook tools to check, book, update and cancel Google Calendar slots and to record call results, logging bookings in Airtable.

Stack: Vapi · n8n webhooks · Google Calendar · Airtable
Build · n8n · RAG
Answers policy questions in Slack from company documents. New files in a Google Drive folder are embedded with Ollama into a Supabase vector store; an agent retrieves the relevant passages before answering.

Stack: Google Drive · Ollama embeddings · Supabase vector store · OpenRouter · Slack
Build · Knowledge-grounding experiment 1 of 3
One of three small chat agents comparing ways to ground answers in documents. This one answers from reference material written directly into the agent's prompt, with no retrieval step. The RAG assistant is the later approach.

Stack: n8n chat trigger · OpenRouter (GPT-4o mini)
Build · Knowledge-grounding experiment 2 of 3
Fetches two Google Docs on every message and passes their full text to the agent, trading tokens for complete context.

Stack: n8n · Google Docs · OpenRouter (GPT-4o mini)
Build · Knowledge-grounding experiment 3 of 3
The same two Google Docs exposed as tools, so the agent decides when to read them instead of receiving them on every message.

Stack: n8n · Google Docs tools · OpenRouter (GPT-4o mini)
Build · n8n · AI agent
Answers Facebook Messenger inquiries about services from a Google Docs knowledge source. Handles Meta's webhook verification handshake, filters non-text events, keeps short conversation memory and replies through the Graph API.

Stack: Messenger webhook · Google Docs · OpenRouter (GPT-4o mini) · Graph API
Build · n8n · AI agent
The first sales assistant: a chat agent that answers questions through four n8n Data Table tools — all rows, by product, by date, by transaction — plus a calculator. The SQL Sales Analytics Assistant replaced the Data Table tools with a PostgreSQL query tool.

Stack: n8n Data Tables · OpenRouter (GPT-4o mini)
Build · n8n · Document AI
Send an invoice photo to a Telegram bot: OCR extracts the text, an AI step turns it into structured fields, missing fields and duplicates are caught, the file goes to Google Drive, the record to Google Sheets, and a confirmation comes back. A separate error-handler workflow reports failures.

Stack: Telegram · OCR.space · OpenRouter (GPT-4o mini) · Google Drive · Google Sheets
Earlier build · Zapier
An updated Asana task splits into five paths — ready to start, no response, quoted, approved, paid and closed — that create lead folders and sub-tasks, send timed Gmail follow-ups, and draft welcome and recommendation emails with AI.

Stack: Zapier · Asana · Google Drive · Gmail · AI by Zapier
Earlier build · Zapier
A form submission is enriched with company data from Apollo, scored by AI and stored through Supabase's REST API, then routed by priority: high and medium leads get a drafted outreach or nurturing email and a Slack alert; low leads get a summary in Slack.

Stack: Zapier · Apollo API · AI by Zapier · Supabase REST · Gmail · Slack
Earlier build · Zapier
An mp3 dropped into Google Drive is transcribed, turned into two blog drafts and Facebook and LinkedIn posts, then routed by an AI approval step to publish or to a “needs review” path saved in Google Docs — with every stage logged in Google Sheets.

Stack: Zapier · Google Drive · AI by Zapier · Google Sheets · Google Docs · Facebook Pages · LinkedIn
Earlier build · GoHighLevel
A set of GoHighLevel workflows for a car-insurance sales process. The first takes a new or tagged contact, creates an opportunity, tags it, sends the insurance intake form, assigns an available agent and notifies the team.

Stack: GoHighLevel workflows · email
Earlier build · GoHighLevel
GoHighLevel workflows for a salon. New-lead intake turns an inquiry form into an opportunity with a tag, a welcome email, a front-desk notification, a note and a “contact within 1 hour” task.

Stack: GoHighLevel workflows · email
Earlier build · GoHighLevel
GoHighLevel workflows that move a lead through tagged stages. When the appointment form is submitted, the “new lead” and “nurturing” tags are removed and “booked” is added.

Stack: GoHighLevel workflows · forms
Background · Team thesis
A Raspberry Pi 5 with a camera and distance sensor photographs a rebar column; a Mask R-CNN model — chosen after evaluating YOLOv8 and RetinaNet — detects it, the system computes its dimensions and concrete volume, and a web app recommends the cement mixture.
My role
I started as the deep-learning model developer, was reassigned to web-application development in the final phase, and integrated the move from a laptop-hosted web app to a Raspberry Pi deployment.
Trials covered rebar-column detection (19/20), non-rebar detection (20/20), dimension and volume computation (19/20) and cement-mixture estimation (19/20).



Stack: Python · Mask R-CNN · OpenCV · Flask · Raspberry Pi 5
Background · Internship · Quezon City Public Library
A web application that replaced manual attendance records: employee time-in and time-out, attendance history, an admin dashboard with search and filters, and attendance reports.
Stack: PHP · MySQL · JavaScript · HTML/CSS