System Walkthrough & Capability Overview · Avyxen LLC
A system built so no inquiry, no signed agreement, and no follow up ever slips through the cracks
For a course business, a missed inquiry isn't a shrug, it's a lost enrollment, and an enrollment like this one is worth thousands of dollars. This walkthrough shows how the system makes that loss structurally hard to happen.
✓Every inquiry gets a response in seconds, not whenever someone happens to check an inbox.
✓Every signed agreement releases access automatically, nothing waits on a manual step.
✓Every person is tracked from first contact to certificate, so a missed follow up is visible on the board, not lost in someone's memory.
System: n8n · Airtable · WordPress/WooCommerce · Stripe · DocuSign · Gmail · Resend · SlackPrepared by: Tony Ngo, AI Automation SpecialistAudience: Business owners evaluating this system, and staff learning to run it day to day, no technical background needed either way
This walkthrough describes a portfolio demonstration system (PST Academy) built to
a standard suitable for review in an interview, not a live client deployment. Maria, the applicant followed
throughout, is a fictional persona used to teach the lifecycle, not a real customer.
The business case
A single certification seat like this one can run $1,000 to $3,000 or more. If even a
handful of inquiries a month go unanswered, or a signed agreement sits waiting for someone to
notice it, that's real recurring revenue leaking out of the business every month, not a
rounding error.
The upside runs the other way too. Faster response time is one of the best documented
levers for closing more leads, and every hour your team isn't manually checking inboxes or
updating a spreadsheet by hand is an hour they can spend on the conversations that actually
close deals. A system like this doesn't just stop losses, it gives your team more selling time
and a faster path from inquiry to paid student.
What follows is the same system explained two ways: this business case,
and below it, the full day to day operating manual, written the way your own team would
actually run it. If a system like this is what your business needs, reach out at
avyxen.com.
01
How this system works
One board, one row per person. Automation handles the bookkeeping; your team handles the judgment calls.
Every prospective student gets exactly one row on the board. The columns are the stages of
their journey: Inquiry → Contacted → Registered → Agreement Signed →
Access Granted → Attended/CE Issued. The system moves a row forward automatically
whenever the person actually does something: inquires, pays, signs, finishes the course. Staff
step in only for the parts that genuinely need a human: following up, correcting a mistake,
approving a refund. The board tracks the person, not individual orders; a full
order history stays in WooCommerce.
Built on WordPress and WooCommerce here, but that's not what makes it
valuable. That part is built to be swapped out. The pieces that actually do the
work, matching people by email, never double booking a card, moving someone forward only
when they really did something, don't care which website or payment platform is feeding
them. A different client on a different storefront or a different form tool would mean
rebuilding the connections at the very front of the system, not rebuilding the system
itself.
Inquiry isn't a required first step. It's simply the earliest event the
system knows how to react to. Plenty of real people never fill out that form at all, they call
the number on the website, message the team on social media, meet someone from the team at an
event, or just decide to buy outright. Any of those paths still lands the person on the board,
just starting from whichever stage matches what they actually did (someone who goes straight to purchase
lands directly at Registered, see stage 3 below).
"Automation marches forward; humans own exceptions and corrections."
This walkthrough follows one person, Maria, a dentist considering the certification, through
every stage below. Watching one real person move through the whole system makes the pattern
clear in a way a list of rules on its own doesn't.
Built to hold up: security by default
Security isn't a feature bolted on at the end here, it's how everything was built from the
first line. That difference lives in the details your team never has to think about, because
they were handled up front:
Passwords and access keys are stored somewhere only the
system can reach, never in a place a website visitor or hacker could stumble onto.
Sensitive files, like customer documents, can't be found by
guessing a web address.
The forms and systems that feed this board can't be faked by
an outside party pretending to be a real customer.
New code gets checked for security holes before it ever goes live, not after something
goes wrong.
This is built to hold up, and to keep holding up as it's handed to your team and extended
over time.
Want the technical proof behind that claim? The real bugs this system
caught along the way, and exactly how each one was actually verified, are documented in the
companion technical writeup.
02
The full cycle, stage by stage
Six stages, six real triggers. Automation handles the bookkeeping; staff handle the judgment calls.
Fully automated
1. Inquiry
What triggers it: someone submits the Course Inquiry form on the
website.
What's automated: a row appears on the board at Inquiry; the team gets
a Slack ping and an email; and the person who inquired is automatically sent a
confirmation email so they know it went through. Worth knowing before you call them: they've already heard from the system, so
your outreach isn't the first contact they've had.
What a human does: nothing yet.
Real world example
Maria fills out the inquiry form asking whether the online course counts for CE. Within
seconds her card is on the board at Inquiry, the team sees a Slack alert, and Maria gets an
automatic acknowledgement so she isn't left wondering whether the form worked. Nobody had to
watch an inbox.
Human step, automated board update
2. Contacted
What triggers it: a staff member actually reaches out to the person
(a phone call, an email, or the website chat) and logs that attempt in a Contact Log entry:
who reached out, which channel, and a short note. Reaching out is still entirely
human judgment; only the moving of the card is automated.
What's automated: the system checks every minute or so for anyone
still sitting at Inquiry who now has at least one logged contact attempt, and moves their
card to Contacted automatically. Once someone's moved past Inquiry, they can never trigger
this again, so it can't fire twice or drag anyone backward. Slack and an internal email
notify the team the card moved. Nothing goes to the customer here, since she already
experienced the real contact directly.
What a human does: make the actual call, email, or chat, and log it.
The board updates itself from there.
Bonus for
staff: every person's card also shows a running Contact Notes summary, every logged
attempt for that person, oldest to newest, so anyone on the team can see the full contact
history at a glance.
Real world example
A staff member emails Maria back, answers her CE question, and logs it as an email
contact attempt with a one line note. Within about a minute her card slides to Contacted on
its own, no dragging required. The judgment, what to say to Maria, is entirely human; only
the bookkeeping got automated.
Fully automated
3. Registered
What triggers it: the person places an order (buys a tier).
What's automated: the system finds Maria's existing row by email and
moves it from Inquiry to Registered, with no duplicate created. If someone orders who never
inquired, a fresh row is created directly at Registered. The card's product/tier always
updates to match what was actually bought, even if it's different from what she originally
asked about (see situation 9 later). Slack and email fire to the team.
What a human does: nothing, unless the purchased tier differs from a
prior order they already paid for, that price difference is a manual billing step (situation
9).
Real world example
Maria buys the Online Training tier. Her existing card slides to Registered, the same
row, no second card. Matching by email is what keeps her from being duplicated.
Fully automated
4. Agreement Signed
What triggers it: the person signs electronically the course participation agreement
through DocuSign. The system checks every minute or so for newly completed signatures.
DocuSign also sends the signer its own confirmation copy automatically, no extra email
needed from this system.
What's automated: the system matches the signer's email back to their
row, stamps the Agreement Signed Date, and advances the card, but it doesn't stop at
Agreement Signed. The same automated run continues straight into Access Granted, because
access here is unlocked by the signature, not by payment. In practice the card moves from
Registered to Access Granted in one step; Agreement Signed is passed through, not parked in.
One Slack message and one email fire to the team for the
whole move (subject line "Agreement signed"), not one per stage.
What a human does: nothing.
Where to look for who still owes a signature: the
Registered column, not Agreement Signed. A card sitting at Registered is
someone who has paid but not yet signed. You won't normally see a card resting in Agreement
Signed, and that's correct behaviour, not a fault.
Why this
matters: access to the course isn't released the moment someone pays. It's held
until a signed agreement is on file. For a hands on certification course like this one, that's
a genuine safeguard, not just paperwork.
Real world example
Maria signs the course participation agreement online. Within about a minute her
Agreement Signed Date is stamped and her card lands on Access Granted, and the team gets a
single "Agreement signed" notification. Her signature date stays on the record permanently
as proof she signed, even though the card itself has already moved on.
Automated, cascades from the signature
5. Access Granted
What triggers it: immediately once the agreement is marked signed, the
same automated step above. Signing an agreement now cascades straight into granting access;
a customer doesn't have to wait on a separate check.
Fulfillment: the Online Training tier is a downloadable Course Access
& Welcome Packet (the two in person tiers are events, nothing to download).
How the customer receives it: once access is genuinely granted,
the system emails her the Course Access & Welcome Packet directly, as an attachment.
Nothing is available for download at checkout, on purpose: handing over the course material
before the agreement is signed would defeat the entire point of gating access behind the
signature.
What's automated on the board: the card advances from Agreement Signed
to Access Granted, stamped with the date access was granted. This happens in the
same automated run as the signature step above, milliseconds later.
The two stages are one continuous move, not two separate events. No additional
notification fires here. The single "Agreement signed" Slack message and email
described in stage 4 is sent at this point and covers both stage moves; there is
deliberately no separate "access granted" alert, because it would be a second message about
the same person moments after the first.
Heads up for
staff: that automated email only covers the Online Training tier. For the two
in person tiers, nothing fires here yet, no email, no packet. Staff need to reach out
manually with what an in person student actually needs to know: where to show up, what time,
and who to report to. An automated version of this is possible, and would follow the same
pattern as the Welcome Packet email above, it just wasn't built for the demo.
Real world example
Maria finishes checkout and sees her order confirmation, but no course material yet,
nothing to download. A few minutes later she signs her agreement, and her Welcome Packet
arrives by email automatically the same moment her card moves to Access Granted.
Staff triggered, then automated
6. Attended / CE Issued
What triggers it: a staff member marks the person Attended with a
completion date on their board record. This is a deliberate human step: attendance and
passing an assessment isn't something a website can confirm on its own. The system checks
for this roughly every five minutes, deliberately slower than the near instant checks used
elsewhere, because a certificate issued by accident for a course this expensive isn't a
cheap mistake to undo. That gap trades a little speed for a real window to catch and fix a
mistake before it's processed.
Artifact: a landscape Certificate of Completion PDF with the
recipient's name, course, correct CE credit hours for their tier, completion date, a unique
certificate ID, signature lines, and a CE seal, generated per student, not a static
file.
What's automated: the certificate is generated, emailed directly to
the student, the card advances to Attended/CE Issued (the finish line), and Slack plus
email notify the team. Two safeguards protect this stage: one stops the same person from
ever being certified twice, even if marked Attended more than once; the other blocks
issuance entirely if the attendance date doesn't make chronological sense (see situation 11
later).
What a human does: confirm attendance or passing, and mark it on the
record. Everything after that is automatic.
Heads up for
staff: nothing currently reminds anyone to check for this. Staff need to glance at
the Access Granted column themselves to see who's ready. A reminder that flags anyone sitting
there too long could be added on top of this system later, it just wasn't built for the
demo.
Real world example
Maria finishes the seven modules and passes the assessment. A staff member marks her
Attended, and within about a minute her personalized CE certificate lands in her inbox and
her card moves to Attended/CE Issued.
How to prove a certificate was actually provided
Four independent records that can be
checked against each other exist for every certificate issued, not just one field:
The certificate file itself. Every certificate is a permanently
archived file (never deleted, named with the student and date), convertible back to a PDF
at any time, the actual document, not just a record that one was made.
The issued date field on the board record: the timestamp.
Who confirmed it, and when: which staff member marked attendance, and
exactly what time.
The delivery email itself, sitting in the outbound mailbox's sent
folder with the PDF attached: proof it actually reached the student, not just that it was
generated.
If any one field on a
record ever looks inconsistent, say, someone unchecked Attended by accident on a record that was
already certified, the other three sources still independently confirm what happened. A
single accidental click can't erase the paper trail.
Resending a certificate
Because the certificate file
itself is always kept, staff can resend it at any time: check Resend
Certificate on the student's record, and the system finds the original file and
emails it again, no new certificate generated and no lifecycle field touched. The only thing
that changes on the record is the Resend Certificate box itself, which the system unticks
automatically once the email has gone, so it's ready for next time. If Resend
Certificate gets checked by mistake on someone who was never actually certified, the system
doesn't guess or send anything to them, it alerts the team instead so whoever checked it can
find out why.
Payment
Checkout runs on Stripe, in test mode, no actual charges. Registered reflects an actual
test payment, not a placeholder, riding the same automation from order to Registered already
described above. Stripe never needed its own automated step: it's a WooCommerce payment
plugin, so a paid order looks the same to the board no matter which gateway processed the
card.
The system's own bookkeeping
Behind the scenes, a small internal table keeps track of which automated actions have
already run, so a webhook or check that accidentally fires twice can't send a duplicate email,
issue a duplicate certificate, or advance a card twice. Staff never open it and never need to;
it holds a single field: a one line marker for each action already taken. There are no
names, no courses, no order totals, no message content and no notes.
One thing to be aware of, though: to keep those markers unique per person, many of them have
the customer's email address built into the marker text (for example,
agreement-signed-claim-maria@example.com). So while this table holds no customer
record, it does contain email addresses. That matters practically in two ways: it's in
scope for a data deletion request, and access to it should be treated like access to any other
table holding personal data, not as a purely technical scratch pad.
If something breaks
If part of this stops working, the system says so. That notice goes to whoever supports the
system, not to your team's channels, since "a connection failed" isn't something staff can do
anything with.
The part to know: silence isn't proof that everything is fine. If you're waiting on
something that never arrived, a card that never moved, an agreement that never went out, tell
whoever supports the system instead of assuming it's on its way. They can see every run the
system has made and exactly what went wrong.
03
Situations staff will actually see
Eleven real situations, worth knowing before they come up, not after.
A returning inquirer buys. The same row
updates, it isn't duplicated (Inquiry to Registered on one card).
A cold order (never inquired first). A fresh
row appears directly at Registered.
Source vs. Stage, the biggest source of
confusion. Source is how they first arrived and never changes ("Website inquiry"
stays even after they buy). Stage is where they are right now, and only ever moves
forward.
A refund, hold, or withdrawal is always a
manual staff change. Automation only ever moves someone forward; exceptions are human
decisions.
Someone who's already moved further orders
again (say, they're already at Agreement Signed). The system won't knock them
backward; a notification fires so a human can look into it.
Staff advance someone by mistake. The system
still protects that stage from going backward; a human corrects it, and the notification that
already fired prompts them to look. Automation never undoes a human's forward move.
A customer accidentally reorders (a duplicate
order). No duplicate row gets created and the stage stays protected; a notification
lets a human catch and refund the double. The board tracks the person, not the order.
A returning inquirer inquires again (a
follow up question, or an accidental resubmit). Same protection as situation 5, just from the
inquiry side. A brand new person gets a fresh card at Inquiry. Someone who already inquired
but hasn't moved further gets their same card refreshed with the new message, no duplicate.
Someone who's already moved past Inquiry still gets their message logged, but their stage is
never pushed backward. Every resubmission also sends the team a fresh Slack ping and email
with whatever she wrote this time, not just on the very first one. Maria emails a follow up
question after she's already registered: her card picks up the new note but stays at
Registered, not knocked back to Inquiry, and staff still get notified of her new message.
A customer buys a different tier than they originally
asked about. The card's tier always updates to reflect what they actually bought,
automatically, every time, never a stale snapshot of their first question. But if she'd
already paid for a cheaper tier and later decided to upgrade, crediting that earlier payment
toward the new total is a manual staff step in your payment processor; the system has no
billing logic and won't calculate or apply any credit on its own. Maria asks about Online
Training, then decides to upgrade before ever paying: her card just shows the tier she
actually bought, automatically. Had she already paid and then decided to upgrade, a staff
member would need to manually credit that payment toward the pricier tier, same as any refund
or adjustment.
Staff accidentally uncheck "Attended" on a record
that's already been certified. Nothing happens, on purpose. Once a certificate has
been issued, that record permanently falls outside what the system looks for next, so
toggling that box afterward can't trigger a resend, an unsend, or any error. The three other
independent records of the certificate, described in the previous section, still exist
regardless; a single accidental click can't make a certificate unhappen.
Staff enter a completion date that doesn't make chronological sense
(before the agreement was even signed, or a date in the future). The certificate is not
issued. The system catches this automatically, alerts staff once by Slack and email so it
doesn't get missed, and stops there. Fixing the date is all it takes; the next check picks it
up normally. This exists because a CE accredited certificate with an impossible date is a
real audit risk, not a cosmetic typo.
04
Two board mechanics to know
Two small things worth teaching once, so nobody's confused the first time they see them.
The "Uncategorized" column is a triage signal
Almost always this column stays empty, and a card sitting there means a human or an import
added a record without a stage. Drag it to where it belongs.
One normal exception: when a new order arrives from someone who has never
been on the board before, the system creates their row first and stamps their stage a moment
later. For those few seconds the brand new card legitimately appears here. If you refresh and
it's gone, nothing was wrong. Treat a card as needing attention only if it's still
sitting in Uncategorized after a minute or so.
"+ Add contact" is for manual entry
For people who didn't come through the website (a phone lead, a referral, a walk in, an
offline registration), click "+ Add contact" in the right column and fill in the details. They
drop onto the board at that stage. The board captures everyone, not just the automated
entries.
05
Closing
Built to be handed off, not just handed over
The point of this walkthrough isn't just to explain what the system does, it's so your team
can run it day to day without needing to call anyone for the routine cases, and know exactly
when something genuinely needs a human decision instead of a card drag.
Everything above comes back to one line: automation marches forward, humans own exceptions
and corrections. If a card ever looks wrong, that's the first question worth asking: is this
a real exception someone needs to handle, or did the system just do exactly what it was built
to do.