The DOJ phone app
A read-only 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 (html/phoneapp/index.html) that
iframes the DOJ website's public app page
(phoneapp/public.html). So it's the same PHP/JS backend as the website — just a
phone-shaped view. It is a companion, not a workstation: you can read your records and the city's
public data, but every action ("file a form", "pay in person") points you to a
DOJ terminal at City Hall, the Police MDT, or your firm's MDT.
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.
Gaps & things to know
Read-only companion by design
- You cannot file a form, pay an invoice/bill, or sign a document from the phone. Every path points to a DOJ terminal, Police MDT, or firm MDT.
- No Notifications / push tab and no unread badge — missing. Home silently re-fetches every 60s while open; nothing alerts you when closed.
- No Payments screen — invoices and bills are displayed but not payable in-app.
Behavior notes
- Sign-in is identity-based, not role-selectable: you always sign in as yourself; the role panel follows your doj_users row.
- 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 ships in the folder but is not what the LB Phone loads — the live app ispublic.html.
Faithful to phoneapp/public.html + api/phoneapp.php. Records, names,
and dates are mock data.