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: Under Beta Testing Phase 1 Database + server-side only
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 |
| archived | Hidden | 14 days paused with no response. Retention marker set |
Independent of is_active
eies_state is orthogonal to whether an employer has switched a listing on. Public visibility requiresis_active = true AND eies_state IN ('normal','warning'), so an enforcement pause cannot be undone by toggling a switch in the UI.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 7-day 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