Skip to content

Automations

The system is calm because a lot of small automatic things keep it honest. This chapter lists each one, what it does, when it fires, and where you see the effect.

Timeline triggers (the ones you never see fail)

Section titled “Timeline triggers (the ones you never see fail)”

These are database rules. They fire inside the database itself, in every write path, so the UI cannot forget them. Where they belong, we have added one per column.

  • Stage change → Timeline entry. Whenever a person’s program stage moves on a person_programs row, a stage_change interaction is written to the Timeline with the old and new stage. You see this on the person’s record under their timeline, as “Moved from Applicant to Admitted”.
  • Status change → Timeline entry. Same idea for the status axis. “On leave from Student” writes a status_change row with the before and after status.
  • New program row → Timeline entry. Adding a new program to a person — by hand with Add to program, or automatically on a program-specific intake — writes a person_programs_created entry so the office can see when a Dream Work interest first appeared.
  • Updated-at timestamp. The updated_at column on person_programs is kept current on every change so the pipeline cards show “last activity” without any UI work.
  • on_payment_paid. The moment a deposit payment is marked paid, this trigger does three things: it flips the enrollment to active, it moves the person’s program row on the enrolment’s program to Student, and it writes a paid interaction to the Timeline. This is why the Applications page’s Mark deposit paid button, or a real QuickBooks payment webhook, makes the applicant disappear from the applications queue and reappear in the Students column of the pipeline on its own.
  • gmail-process. An edge function that takes an incoming email, asks the AI adapter to classify it (new inquiry, applicant question, current student, billing, partner, spam), matches it to a contact, logs it to the Timeline, and — where the classification isn’t spam and the agent is confident — drafts a reply in the right tone. The result lands on the Inbox page.
  • form-intake. An edge function that takes a submission from the public inquiry form, creates a contact if needed, writes a form_submission interaction, and (where the form carries a program) creates the matching person_programs row at Prospect. The office sees the person appear in Contacts and in the right funnel.
  • invite-admin. Called from the Team page. Creates a staff invite row and sends the magic-link email.
  • invite-student. Called from a student’s Person detail page. Creates a student invite row and sends the magic-link email. When the student clicks the link, a trigger on the auth system connects their new login to the pending invite and sets the person’s auth_user_id so the portal knows who they are.
  • marketing_sync_queue. Every stage, status and tag change that should become a Constant Contact tag is queued here. In fake mode, the office exports the queue as a CSV from the hidden Marketing export page and imports it into Constant Contact by hand. When the real adapter goes in, the queue drains automatically. See Adapters.

The system raises alerts automatically from a handful of rules:

  • Missed intensive. Marked as absent from an intensive they were enrolled in.
  • Second missing assignment. A student with two assignments neither submitted nor accepted.
  • Overdue payment. Any invoice past its due date and not paid.

Each one creates an alert row with a priority and a short summary. Alerts land on Student Success.

  • Automatic stage transitions on declaration events. Michael is drafting the exact events that should move a person from Prospect to Engaged, or create a person_programs row on a packet download. For now, these moves are done by hand on the Person detail page.
  • Lead-scoring formula weights. The engagement score is calculated today, but the weights are the client’s to set — Michael is drafting those too.

See Coming later for the full list.

Next: Adapters and fake mode.