DOJ v4: the app is interactive now v4
The read-only companion documented below the fold is what shipped before. As part of the 8-phase DOJ v4 project the app gained five new tabs — Alerts, Filings, Pay, License, and Legal Help — so a citizen can now file forms, see their notifications, and manage a court-appointed lawyer request without leaving their phone. Jump to the new tabs or the honest gaps box at the bottom. Everything here is code-complete and API-verified; none of it has had an in-city acceptance pass yet.
The DOJ phone app
A DOJ companion that lives inside the LB Phone as a custom app named
“DOJ”. The crestwood_doj resource registers it at runtime via
exports['lb-phone']:AddCustomApp (identifier doj,
defaultApp = true so it's preloaded on every character's phone). The app icon is a single
DOJ seal (html/phoneapp/icon.png); no per-role theming or accent color is passed.
The LB Phone loads a thin NUI wrapper that iframes the DOJ website's public app page
(phoneapp/public.html) — same PHP/JS backend as the website, phone-shaped view. As of
v4 it's no longer purely read-only: the five new tabs let you file citizen-submittable forms, see your
notifications, view what you owe, check your license points, and request a lawyer straight from the
phone. The one thing it still can't do is take your money — see the Pay tab below.
How the "token login per role" actually works
This is not the website's passcode login (where you type judge1,
clerk1, etc.). On the phone you tap "Sign in as this phone's owner". The
wrapper asks the game client for a token (NUI callback getToken →
crestwood_doj:phoneapp:getToken), which mints a short-lived row in
doj_phoneapp_tokens (token → citizenid, expires in
30 minutes) and posts it back to the iframe (dojRequestToken /
dojToken handshake). Every API call is scoped to that citizenid only.
You don't pick a role. Your role is whatever your doj_users row says
(via phoneappMyRole / phoneappRoleSummary). A plain citizen with no
DOJ row simply gets no role extras. So the picker below mimics "sign in as a person who holds this DOJ role."
How much changes per role? (honest answer: not the tabs)
All five tabs are identical for every login. Role only changes two things.
Same for everyone
- Home — City Bulletin, Court Docket, DOJ Online Staff (public)
- Penal Code — offenses grouped by Title (public)
- Library — DOJ books + City Jobs Directory (public)
- Records — 4 public registries: Case, Marriage, Property, Professional
- My DOJ — your own account block (filings, invoices, bills, permits, licenses, cases)
Changes with your DOJ role
- Records unlocks 3 restricted registry pills — Licenses Citations Warrants — for any DOJ-personnel role (everyone except plain Citizen).
- My DOJ appends a small role summary panel below your account block — one of 7 panel types (Clerk, Judge, Prosecutor, Law-Enforcement, IT, Executive, Law-Office), or none for Citizen.
Flip the picker further down to see both differences live.
Public tabs — identical for every login
No sign-in required. These three render the same whether you're a citizen or the Chief Justice.
Home tab public — auto-refreshes every 60s
Department of Justice
Los Santos County — Public information portal
Mia Chen
Ofc. L. Bianchi
Sgt. D. Cole
Penal Code tab public — grouped by Title, searchable
Department of Justice
Los Santos County — Public information portal
Offenses Against Persons3
Offenses Against Property4
Traffic Offenses6
Public Order & Safety5
Library tab public — DOJ books + City Jobs Directory
Department of Justice
Los Santos County — Public information portal
City Guide12
DOJ Rulebook8
Driver's Handbook6
Professional Examination Handbook5
Bar Study Guide & Law Office Roles7
City Jobs Directory4
Public Safety
Civil Service
My DOJ — the sign-in screen
Same for everyone until you sign in. Also hosts the Law Offices directory (public).
My DOJ — signed out tap the gold button to sign in as the phone owner
Department of Justice
Los Santos County — Public information portal
See your soul's DOJ account — filings you've submitted, invoices due, permits pending, licenses and cases. Filing new forms is handled at City Hall Services.
Open a firm's website in the Browser app to sign in there.
What the sign-in screen does
- The gold button triggers the dojRequestToken → dojToken handshake with the game client (30-min token).
- Once signed in, this screen is replaced by your account block + role panel (next section).
- Law Offices is public and always shown here. Public Defenders = the one DOJ Law Office (roster = every active public_defender); every other live firm is "Private Practice."
- Firm links open in an in-app overlay iframe with a Back button — gap LB Phone 2.8.3 has no public deep-link export to hand a URL to the Browser app, so the app works around it.
Flip between logins
Pick a role to see the two things that actually change: the Records pills and the My DOJ role panel. Everything else stays exactly as shown above.
Records tab 4 public registries
Department of Justice
Los Santos County — Public information portal
Showing the last 30 days — search finds any record from the permanent archive.
↑ Tapping a marriage record opens a printable certificate:
My DOJ — signed in account block + role panel
Department of Justice
Los Santos County — Public information portal
Your DOJ account. To file forms or pay in person, visit City Hall Services.
My Filings2
My Invoices1
My Property Bills1
My Permit Applications1
My Licenses2
My Cases1
Role panel
The account block (Filings, Invoices, Bills, Permits, Licenses, Cases) is the phone owner's own records — structurally the same for every login. Only the panel below it and the Records pills change with your DOJ role.
The five new tabs v4
Token-gated like My DOJ — opened in a plain browser out-of-city (no phone token), each shows the same sign-in prompt as My DOJ above instead of the screens below. In-city on your own phone they read your token automatically.
Alerts tab v4 unified notifications, unread badge, mark-read
Department of Justice
Los Santos County — Public information portal
Pulls the same alerts feed the Alerts system writes (warrant/bail/hearing/lockout). API: myNotifications / markNotificationRead.
Filings tab v4 file a citizen-submittable form + track status
Department of Justice
Los Santos County — Public information portal
Only forms flagged citizen_submittable appear here. A fee-bearing submission mints a DOJ invoice automatically.
Pay tab v4 lists invoices — does not collect payment
Department of Justice
Los Santos County — Public information portal
Covers bar dues, license/reinstatement, filing fees, and exam fees. Read-only by design — see gaps box below.
License tab v4 driver license + points + suspension status
Department of Justice
Los Santos County — Public information portal
Mirrors the DOJ v4 license-points ladder — read-only view of the same points that drive automatic suspension.
Legal Help tab v4 request a lawyer, incl. jail-call; sign retainers
Department of Justice
Los Santos County — Public information portal
Jail Call captures your custody location, charges, and a contact number, and flags the request urgent for the firm on-call.
A normal request and an urgent jail-call variant, plus client-side signing of a firm's retainer straight from the phone.
Gaps & things to know
No longer read-only v4
- You cannot file a form, pay an invoice/bill, or sign a document from the phone.
- You can now file a citizen-submittable form, submit a retainer signature, and request representation from the Filings and Legal Help tabs. done
- No Notifications / push tab and no unread badge.
- The Alerts tab now shows the unified notifications feed with a live unread badge on the tab itself, tap-to-expand, mark-read, and mark-all. done
- No Payments screen — invoices and bills are displayed but not payable in-app.
- The Pay tab now lists every outstanding + paid invoice — but see the honest limitation below, it still can't take a payment. partial — see "Still to do"
Behavior notes
- Sign-in is identity-based, not role-selectable: you always sign in as yourself; the role panel follows your doj_users row. All five new tabs use the same token gate.
- Registry pills wrap onto multiple rows on purpose — horizontal scroll was cut off inside the LB Phone iframe (owner report, 2026-07-15).
- A 60px camera-safe spacer sits above the header so the phone's camera cutout never covers the seal (per the LB Phone app-header pattern).
- An older, superseded UI (
phoneapp/index.html: blue accent; tabs Bulletin / Cases / Invoices / Bills / Licenses; token-in-URL only) still shipped in the folder alongside the live app. - That stale phoneapp/index.html has been deleted — the folder now contains only the live public.html. done
Still to do / known gaps
- No in-phone payment rail gap — lb-phone has no wallet bridge in this stack, so the Pay tab is a list, not a checkout. Players still pay in-city with /invoices.
- Open question for the owner: filing fees also invoice staff-filed forms (a clerk filing on a citizen's behalf still mints the same fee). Should clerk-filed forms be fee-exempt, or is that intentional? Not yet decided.
- Nothing here is in-game-acceptance-tested yet. All DOJ v4 work — Alerts, Filings, Pay, License, Legal Help — is code-complete and verified against the API, but awaits the owner's in-city pass before it's called done.
Faithful to phoneapp/public.html + api/phoneapp.php. Records, names,
and dates are mock data.