Overview
EIES — the Employer Inactivity Enforcement System — is the tension member of the marketplace. It makes silence expensive. An employer who collects applications and never responds loses visibility automatically, without a human having to notice.
Status: Stable Beta Phase 5 Database + server-side only + UI + Final Trials
Why this exists
The single most corrosive thing on an internship board is the ghost listing: live, attractive, and attached to an employer who stopped reading applications weeks ago. Students cannot detect it. They apply, wait, and conclude the platform is useless.
EIES converts responsiveness from a courtesy into a condition of visibility. Respond to your applicants and nothing happens. Ignore them and your listing quietly leaves the public surface.
The state machine
normal --overdue application--> warning --grace 3d expired--> paused --14d--> archived
^ | |
+---- all applications resolved -+------------------------------+| State | Public visibility | Meaning |
|---|---|---|
| normal | Visible | No overdue applications |
| warning | Visible | At least one application is overdue; 3-day grace running |
| paused | Hidden | Grace lapsed. Employer and admins still see it but NOT Students / Public |
| archived | Hidden | 14 days paused with no response. Retention marker set |
Public visibility
is_active = true AND eies_state IN ('normal','warning'). An EIES pause sets is_active = false so the listing leaves student search. A qualifying employer response reactivates the listing and restores is_active = true. Employers cannot undo an enforcement pause by toggling the listing switch whileeies_state is still paused orarchived.The clock
A timer is created on application
A BEFORE INSERT trigger setseies_due_at = applied_at + 7 dayson every internal application.External applications are exempt
Anything that is not an internal application getseies_due_at = NULLand never enters EIES. We do not police inboxes we cannot see.A qualifying response stops the clock
Moving an application tounder_review,shortlisted,interview,acceptedorrejectedwriteseies_responded_atonce.appliedandpendingdo not qualify.Responses are never un-recorded
eies_responded_atis written once and never reset. A later status change cannot restart a timer, so employers cannot game the clock by cycling statuses.
What EIES deliberately does not observe
Reactivation
A paused or archived listing returns to normal only when every overdue application has a qualifying response. Applications whose deadline is still in the future keep their timers but do not block reactivation — they simply matter at the next evaluation.
SELECT public.eies_evaluate_internship('<internship_id>'); -- run the state machine
SELECT public.eies_unresolved_application_ids('<id>'); -- what is blocking
SELECT public.eies_reactivate_internship('<id>', 'reason'); -- raises if still blocked
SELECT public.eies_run_enforcement(500); -- batch sweepBlocking set, precisely
- application is internal, and
eies_due_at <= now(), andeies_responded_at IS NULL
Audit trail
Every transition writes to eies_events, an immutable table with no insert, update or delete policies — rows arrive only throughSECURITY DEFINER functions. Employers read their own history; admins read everything. An enforcement system that can be edited by the party it enforces against is decoration.
| Column | Purpose |
|---|---|
| event | What happened: warned, paused, archived, reactivated |
| previous_state / new_state | The exact transition |
| reason | Machine or human justification |
| application_id | The application that triggered it, when applicable |
| metadata | Free-form JSON context for later analysis |
Employer's view
Nothing about EIES is a surprise. Each transition enqueues a CTNE notification —EIES_WARNING, EIES_PAUSED,EIES_REACTIVATED, EIES_ARCHIVED — with dedupe keys that prevent repeat sends. The warning email arrives three days before anything is hidden.
Tip
Related
CTNE
How EIES transitions turn into email.
Listing lifecycle
Expiry and deletion, and how they defer to EIES.
Reviewing applicants
The employer workflow that keeps listings in 'normal'.
Documentation status: Beta