← Review Hub / Alerts & Notifications

Every DOJ alert & notification

This gallery renders every alert the DOJ system shows, with realistic mock data filled into the dynamic fields (names, amounts, case numbers). Template wording is exact — review it here and tell me what to change. Each card shows the real message plus a caption stating what triggers it and the source file.

Where alerts appear

In-city toasts — the small themed pop-ups (top-right) fired by cw.notify from the DOJ terminal, printer, filing cabinet, City Services window, security lockout, and the police tablet. Only shown to a player who is online.

Web / App bell notifications — the 🔔 inbox on the DOJ website and the phone DOJ app. Driven by the messages / message_recipients tables; most also send a phone email (and sometimes an SMS pointer) so they reach citizens who are offline.

Type / colour legend
success = green — an action completed
error = red — failed / denied / blocked
warning = amber — caution / returned for fix
info = blue — informational (the DOJ bell channel maps to inform)

Note: in-game the toast type is chosen by the code (shown faithfully below). Web bell notifications are all rendered identically in the real inbox (a gold "unread" dot); the colours below are added only for this review to convey each message's sentiment.

1 · In-city toasts cw.notify → themed toast

Fired in-world from the DOJ terminal, printer, filing cabinet, City Services ped, lockout system, and police tablet.

Terminal security & lockout

🚨
SECURITY ALERT
SECURITY ALERT — terminal cityhall_02 has been locked.
Trigger: a different character opens a terminal already bound to someone else (tamper). Shown to any IT staff online in-game. server/lockout.lua:65
🔔
SECURITY ALERT
Intrusion detected on terminal cityhall_02 — locked.
Trigger: same tamper event — the durable copy sent to every IT account's bell/email (urgency urgent). server/lockout.lua:60 → Notify
🛠️
IT Assistance Requested
Marcus Vance is requesting IT at locked terminal cityhall_02.
Trigger: a locked-out player presses "Request IT assistance" on the lock screen. Paged to every IT account. server/lockout.lua:113
Diagnostics complete — terminal restored.
(shown to the IT tech who ran the fix)
Trigger: IT staff completes the ox_target "fix" on a locked terminal. server/lockout.lua:153 → client/lockout.lua:20
🔧
Terminal restored
Terminal cityhall_02 has been repaired and is back online.
Trigger: after an IT fix — sent to every clerk / master_clerk bell + email. server/lockout.lua:149 → Notify
This terminal is not locked, or you are not IT staff.
Trigger: a non-IT player (or a bad target) tries to run the terminal fix. client/lockout.lua:10
↩️
Diagnostics cancelled.
Trigger: IT tech backs out of the fix confirmation. client/lockout.lua:22
🎫
IT Work Ticket
Harmony Reed (555-0148) filed an IT ticket: My DOJ login is locked and IT is offline.
Trigger: a citizen submits an IT work ticket at the City Services window. Sent to every IT account (urgent). server/cityservices.lua:526 → Notify
📨
Your IT work ticket has been filed — IT services have been notified.
Trigger: confirmation to the citizen who filed the IT ticket. server/cityservices.lua:529
⚑ Possible gap — the locked-out victim is never told. On a tamper trip the bound player's token is silently invalidated (server/lockout.lua:54) but they get no proactive toast/email — they only discover the lock the next time they try to log in. Consider a "Your DOJ session was locked for security" notice.

DOJ printer (clerks)

🖨️
Warranty Deed DEED-2026-0042 printed — hand it to the parties to sign.
Trigger: clerk prints a queued legal document original at the printer. client/printer.lua:8
🖨️
Basic ID printed.
Trigger: clerk prints a queued credential (ID / license) into their own hand. client/printer.lua:89
📥
Marriage Certificate marked ready for citizen pickup.
Trigger: clerk marks a document/credential "print for pickup" for citizen self-collection. client/printer.lua:19 / :99
📄
Certified Copy — Warranty Deed issued — check your inventory.
Trigger: a paid certified reprint is produced at the printer. client/printer.lua:167
🗂️
No documents are queued to print.
Trigger: clerk opens the printer's document queue and it's empty. client/printer.lua:33
🗂️
No certificates or licenses are queued to print.
Trigger: clerk opens the credentials queue and it's empty. client/printer.lua:112
🗂️
You have no completed documents to reprint.
Trigger: clerk opens Certified Reprint with nothing eligible. client/printer.lua:180
Print failed.
Trigger: a print action fails server-side (fallback message). Siblings: "Reprint failed.", "Could not mark that ready for pickup.", "Could not reach the printer." client/printer.lua:10 / :169 / :21 / :29

Filing cabinet, records library & signing

✍️
Document fully executed and filed with the DOJ.
Trigger: the last required signer signs on the in-game sign NUI — the document auto-completes. client/sign.lua:38
📃
This document is unreadable.
Trigger: the sign NUI receives a corrupt / undecodable document payload. Sibling: "Could not open the document." client/sign.lua:19 / :8
🗄️
The cabinet is empty.
Trigger: a clerk opens an empty DOJ filing cabinet. client/cabinet.lua:49
🗃️
Ask a clerk — or check Documents & Invoices at the City Services window.
Trigger: a non-clerk citizen interacts with the cabinet. client/cabinet.lua:78
could not open that document
Trigger: cabinet fails to load a specific filed document (fallback). Sibling: "could not open the cabinet". client/cabinet.lua:10 / :45
🗑️
Case CR-2026-0311 has been expunged.
Trigger: a clerk executes an expungement order at the shredder in the Permanent Records Library. server/permrecords.lua:172
↩️
Shredding cancelled.
Trigger: clerk backs out of the shred confirmation. client/permrecords.lua:87
📁
No cases are under an active expungement order.
Trigger: clerk opens the shredder with nothing queued for expungement. Sibling (error): "You are not authorized here." client/permrecords.lua:94 / :93
🚫
Only documents and credentials may be stored here.
Trigger: a player tries to store a disallowed item in a DOJ locker. server/locker_hook.lua:24

City Services window (citizen-facing)

📤
Your filing has been submitted to the Clerk's office.
Trigger: citizen submits a form at the window (no clerk on duty). On-duty variant: "A clerk is on duty — your filing was sent to the Clerk's office for review." server/cityservices.lua:124 / :121
🧾
Your certified-copy request has been sent to the Clerk's office for printing.
Trigger: citizen requests a certified copy at the window. server/cityservices.lua:235
🆔
Your first Basic ID (8U51K657B) is free of charge — it has been filed with a clerk to print. Check "My Documents — Pickup" at City Services once it is printed.
Trigger: citizen requests their first-ever Basic ID (free). server/cityservices.lua:362
🆔
Basic ID requested — invoice INV-26-000731 ($250). Pay it via /invoices to have your card issued.
Trigger: citizen requests a Basic ID after having held one before (paid). server/cityservices.lua:385
♻️
Replacement queued for the Clerk — invoice INV-26-000732 ($300). Pay via /invoices; a clerk will print it — check "My Documents — Pickup" for it once it is filed.
Trigger: citizen requests a replacement of an already-issued credential. server/cityservices.lua:439
📝
New Driver's License applications require a form, and a completed DMV written + road test (see the DMV instructor). File it at any DOJ terminal or the phone DOJ app under Licensing — City Services cannot start it here.
Trigger: citizen asks for a brand-new license (non-Basic-ID) at the window. server/cityservices.lua:455
🏗️
Contractor request filed — the Clerk's office and contractors have been notified.
Trigger: a property owner files a contractor/work request at the window. server/cityservices.lua:190
📐
Permit requested — pay the invoice with /invoices.
Trigger: a property owner requests a building / door-move permit at the window. client/cityservices.lua:104
📧
Your message has been sent to the DOJ Notifications inbox of the selected official(s).
Trigger: citizen uses "Contact DOJ Officials" at the window. server/cityservices.lua:751
🎓
Registered — code 7KQ4M2PX emailed to you. Pay invoice INV-26-000740 ($2,500) here at the window, then use any DOJ terminal.
Trigger: citizen registers for the Bar or a professional exam at the window. server/cityservices.lua:605 / :685
📍
you are not at a City Services desk
Trigger: anti-exploit distance gate — any window callback invoked from too far away. server/cityservices.lua (requireNearby)
🚫
No forms are available for public filing right now.
Trigger: citizen opens "Submit a Form" but no citizen-submittable templates are active. client/cityservices.lua:188

DOJ Notify → citizen (bell + phone email; toast when online)

These go through exports.crestwood_doj:Notify — every one lands as a phone email and a website bell notification; if the citizen is online it also shows as a blue inform toast.

🆔
Basic ID filed
Your Basic ID (8U51K657B) has been filed with a clerk to print. Check "My Documents — Pickup" at the City Services window once it has been printed.
Trigger: a credential is queued for a clerk (first ID, paid ID, or replacement). server/cityservices.lua:343
🎓
Bar Examination Registered
Your examination code is 7KQ4M2PX. Invoice INV-26-000740 ($2,500) has been issued.

Pay the invoice here at the city service window, then take this code to any DOJ terminal and open the Bar & Examinations page to begin.
Trigger: Bar / professional exam registration at the window. server/cityservices.lua:599 / :679
💳
Examination Fee Paid
Your Bar Examination fee is paid. Visit a DOJ terminal and open Bar & Examinations to begin — no code needed.
Trigger: the exam-fee invoice is paid (auto-activates the code). server/exams_bridge.lua:24
🏗️
Contractor request
Harmony Reed needs work done at 12 Vespucci Blvd: Kitchen remodel — replace cabinets and lighting.
Trigger: a contractor request — sent to every online contractor/realtor. Also a plain toast: "New contractor request at 12 Vespucci Blvd." server/cityservices.lua:181 / :183
🗑️
Expungement executed
Expungement executed for CR-2026-0311 by Clerk Dana Whitlock.
Trigger: a clerk shreds a case — notifies master_clerk and the ordering judge. server/permrecords.lua:160 / :167

DOJ Notify → clerks (new-work pings)

📥
New filing awaiting review
Harmony Reed filed a Name Change Petition (submission #128).
Trigger: a citizen submits a form at the window. server/cityservices.lua:116
🧾
Certified copy requested
Harmony Reed requested a certified copy of Marriage Certificate (MAR-2026-0087). It is in the print queue.
Trigger: certified-copy request filed at the window. server/cityservices.lua:226
🆔
Free Basic ID queued
Harmony Reed's first Basic ID (8U51K657B) is queued to print — no charge.
Trigger: first-ID / paid-ID / replacement queued. Siblings: "Paid Basic ID queued", "Replacement credential queued". server/cityservices.lua:361 / :404 / :436
🏠
New purchase closing to print: 12 Vespucci Blvd.
(in-game toast to any clerk online)
Trigger: a buyer/tenant files a property offer — clerks get this toast + a durable bell message (see §2). server/closings.lua:66

Police tablet (crestwood_mdt)

💵
You were fined $1,250.
(shown to the cited citizen if online)
Trigger: an officer issues a citation/fine from the MDT. server/main.lua:457
🆘
Panic sent — Officer Down broadcast.
Trigger: officer hits the MDT panic button. client/main.lua:169
👮
You must be an on-duty officer to use the police tablet.
Trigger: a non-LEO / off-duty player opens the tablet. Server sibling: "Only on-duty officers can use this device." client/main.lua:36 · server/main.lua:26
🔍
Could not identify suspect.
Trigger: a person lookup on the tablet resolves nobody. client/main.lua:191
DOJ MDT is coming soon.
Trigger: a DOJ/EMS/lawyer job opens the tablet (their MDT isn't built yet). Siblings: "EMS MDT is coming soon.", "Law firm MDT is coming soon.", "No MDT for your current job." client/main.lua:74–85

2 · Web / App bell notifications 🔔 inbox + phone email

Inserted into messages / message_recipients by the API's v2_notify_* helpers. Shown in the website 🔔 panel & dashboard "DOJ Notifications", and (for citizens) mailed to the phone. Unread shows as "📨 New message: Subject".

Cases & counsel

⚖️
Notice of Appointment
You have been entered as counsel of record (defense) on case CR-2026-0311 by Clerk Dana Whitlock.
Trigger: a clerk enters an attorney as counsel of record. Sent to that attorney's account. api/cases_api.php:357
🧑‍⚖️
Public Defender Request DR-57
Citizen Harmony Reed has requested appointed counsel (reference DR-57). Please review the request in the defense queue.
Trigger: a citizen requests a public defender — sent to the District Attorney role. api/cases_api.php:435
🧑‍⚖️
Notice of Appointment
You have been appointed defense counsel for Harmony Reed (reference DR-57) on case CR-2026-0311.
Trigger: a public defender is appointed to a request — sent to the appointed attorney. api/cases_api.php:503
Counsel Appointed
Counsel has been appointed to represent you (reference DR-57). Alex Marlowe will be in contact regarding your matter.
Trigger: same appointment — the notice to the citizen. api/cases_api.php:506
🤝
Retention Accepted
Your retention request has been accepted by Cole Law Office. A member of the firm will contact you to open your client file.
Trigger: a law firm accepts a citizen's retention/lead request. api/cases_api.php:551

Filings (clerk review)

📗
Filing Accepted
Filing MAR-2026-0087 has been accepted and entered into the registry. A copy has been queued at the Department print desk for collection.
Trigger: a clerk approves a pending filing submission. api/filings.php:274
↩️
Filing Returned — Action Required
Your Name Change Petition submission has been reviewed and returned by the Office of the Clerk. Clerk's note: Missing witness signature. You may correct and resubmit at a City Services window.
Trigger: a clerk rejects a pending filing. api/filings.php:202

Licensing division

📜
License Issued
Your Weapons License (5H2K9QT4A) has been issued and is available for collection at the Department print desk.
Trigger: a licensing application clears its background check + waiting period and is issued. api/licensing.php:334
🚫
License Application Denied
Your application for a Weapons License has been denied following a records review. Note: Active warrant on file.
Trigger: a licensing officer denies an application on review. api/licensing.php:203
🚫
License Application Denied
Your application for a Weapons License has been denied: the good-behavior requirement of the waiting period was not met.
Trigger: the applicant picked up a new charge during the waiting period. api/licensing.php:231

Examinations

🎉
Bar Examination — PASSED
Congratulations! You passed the Bar Examination with a score of 88% (44/50).
Trigger: a candidate passes an official exam sitting (emailed + mirrored to the bell). api/exams.php:130 / :142
📕
Bar Examination — Not Passed
You did not pass the Bar Examination (score 58%, 29/50). You may register again after the retake waiting period.
Trigger: a candidate fails an official exam sitting. api/exams.php:136 / :142
🏛️
Bar Examination Passed
Harmony Reed has passed the CrestWood Bar Examination with a score of 88%.
Trigger: same pass — the notice to the master_clerk (Bar Examiners). api/exams.php:157
🚗
DMV Written Knowledge Test — PASSED
Congratulations! You passed the DMV Written Knowledge Test with a score of 92% (23/25).

You may now take the driving test — see the DMV instructor. No additional fee is required.
Trigger: a candidate passes the DMV written test (adds the road-test line). api/exams.php:131–133

Court orders & announcements

🗂️
Expungement Order — CR-2026-0311
By order of Judge Priya Nandakumar, all records in case CR-2026-0311 are to be expunged. A clerk must attend the Permanent Records Library at the Supreme Court to execute the order.
Trigger: a judge enters an expungement order — sent to the clerk role. A shorter variant goes to master_clerk. api/justice.php:69 / :74
🔁
Judge recusal — reassignment needed for CR-2026-0311
Judge Priya Nandakumar has recused from the court session for case CR-2026-0311 (2026-07-22 14:00, Courtroom A). A new judge must be assigned.
Trigger: a judge recuses from a scheduled session — sent to clerk, master_clerk & chief_justice. api/justice.php:151–158
📢
ANNOUNCEMENT
Department-wide announcement. Replies are disabled for announcements; the panel tags these with a purple "Announcement" badge.
Trigger: any message whose subject is exactly ANNOUNCEMENT — rendered specially (no reply, purple tag). js/notifications.js:199,239

3 · Court, closings & bail

Court-docket fan-out reaches every party on a case (defendant + linked counsel) via phone email + SMS pointer + bell.

📅
Court session scheduled — CR-2026-0311
A court session for case CR-2026-0311 has been scheduled for 2026-07-22 14:00 in Courtroom A. Presiding judge: Judge Priya Nandakumar.
Trigger: a clerk/judge schedules a court session. Sent to all case parties. api/court.php:88 · api/publicinfo.php:198
Court date confirmed — CR-2026-0311
Your court date is confirmed. Case CR-2026-0311 will be heard 2026-07-22 14:00 in Courtroom A, presided over by Judge Priya Nandakumar.
Trigger: a scheduled session is confirmed. SMS pointer: "Your court date for CR-2026-0311 is confirmed." api/publicinfo.php:262
🚫
Court session cancelled — CR-2026-0311
The court session scheduled for case CR-2026-0311 has been cancelled. A new date will be set separately.
Trigger: a scheduled session is cancelled. SMS pointer: "Your court date for CR-2026-0311 was cancelled." api/publicinfo.php:229
🏠
New purchase closing — 12 Vespucci Blvd
Harmony Reed filed a purchase offer on 12 Vespucci Blvd. When ready, print the warranty deed (Property Closings on your dashboard), then have the parties sign it at City Hall.
Trigger: a buyer/tenant files an offer — durable bell message to every clerk role (lease variant swaps in "rental" / "lease agreement"). server/closings.lua:56
💵
Bail refund — BL-7F3K9Q
Bail refund BL-7F3K9Q
Trigger: the bail dashboard queues a refund; the engine credits the defendant's bank. note — this is only a bank-transaction memo, not a DOJ alert. server/refund.lua:78
⚑ Missing alerts around enforcement & bail

4 · Wording & consistency notes

Casing / punctuation is inconsistent

Most toasts are sentence-case with a full stop ("Print failed.", "The cabinet is empty."), but several error fallbacks are lowercase with no period — e.g. "could not open that document", "could not open the cabinet" (client/cabinet.lua:10,45) and the gate "you are not at a City Services desk". Recommend normalising to sentence-case + period.

"SECURITY ALERT" is duplicated

On a lockout the online IT toast ("SECURITY ALERT — terminal X has been locked.") and the bell/email ("Intrusion detected on terminal X — locked.") both carry the title SECURITY ALERT with slightly different bodies. Not wrong, but reads as two alerts for one event — worth aligning the wording.

Onboarding email vs. reality

The welcome email ("Welcome to CrestWood — Getting Started", server/onboarding.lua:47) tells players to set their passcode at a terminal and warns about the terminal lockout — good. But the dashboard mirror says "Check your phone email for the getting-started guide." while the code comments note the setup code itself is no longer emailed. Confirm the guide copy still matches the in-person flow.

Two identical "License Application Denied" subjects

A records-review denial and a waiting-period (good-behavior) denial share the exact subject "License Application Denied" (api/licensing.php:204,232). The bodies differ, but a distinct subject for the waiting-period case would read more clearly in the inbox.

Faithful review copy — every message above is the real template text from the sources cited, with mock data in dynamic fields only.