About WOTS++
A friendlier way to browse your WOTS reports — and a straightforward account of what happens to your data along the way.
What this is
WOTS++ is an independent web app that talks to WOTS — Jersey City's reporting app for parking, quality-of-life, and neighborhood-safety issues — using the same public interface the official app uses. Signing in here signs you in to your existing WOTS account; there is no separate account to create.
It exists because the official app hides a lot of your own history behind a slow list. WOTS++ pulls everything together so you can search, filter, and see what happened to your reports at a glance.
This project is not affiliated with WOTS, the City of Jersey City, or its police department.
Signing in
Sign-in works exactly like the official app: you type your phone number, WOTS texts you a 4-digit code, you type it back, and WOTS gives us a sign-in token that stands in for your account.
- The 4-digit code is used once and thrown away — never saved anywhere.
- The sign-in token stays in your browser (in "local storage"), not on our server. Closing all your browsers eventually clears it; the "log out" button clears it immediately.
- Your phone number is saved in your browser so you don't have to retype it when you file a new report.
What we can see
Once you're signed in, we can see everything WOTS shows you about your own reports — the addresses, photos you attached, comments you wrote, and how the reports were resolved. WOTS scopes each request to whoever is signed in, so at any given moment our server is only fetching your data from WOTS.
Here's the fuller picture, though: because every WOTS++ user signs in through the same server, our own database ends up holding a closed-report copy for every WOTS++ user over time, not just you. That pooled data is what the public stats page is built on (anonymized), and it's also what the site operator has direct read access to on the server. If you'd rather not have your reports sitting in someone else's database, use the official WOTS app instead — nothing lands here if you don't sign in here.
What we save on our server
To make the app faster (WOTS's own servers can take a while), we keep a copy of your closed reports — anything that's been resolved or canceled. A closed report doesn't change anymore, so caching it is safe.
Reports that are still open, waiting, or in progress are not saved on our server. We fetch those live from WOTS every time you look at them.
The saved copy of a closed report includes:
- The type of issue ("Parking in crosswalk", etc.) and the address you filed
- Comments you wrote when submitting
- Links to the photos you attached (we save the links, not the photos themselves — those still live on WOTS)
- The officer information and the resolution text WOTS sent back
- When the report was filed, assigned, and resolved
About phone numbers: WOTS attaches your phone number to every incident report you file — it's how officers can follow up. We deliberately strip your phone number out of every cached report before saving it, and out of every response we hand back to your browser. It's used to authenticate you at sign-in and to file new reports, and that's it. It never lands in the database.
What we do not save on our server
- Your sign-in token
- The 4-digit SMS code
- The phone number attached to your incident reports (stripped before write)
- Any analytics, tracking pixels, cookies, or telemetry — no Google Analytics, no ad networks, nothing
- The photo files themselves — only the WOTS links to them
The public stats page
We publish a public stats page with insights across every closed report we've cached — things like "what's the most-reported issue type", "how long does the average parking complaint take to resolve", and "which officers close which kinds of reports". This is drawn from every user's data pooled together.
The stats page is fully anonymized. It never includes:
- Report IDs or the internal WOTS user IDs
- Addresses
- Phone numbers
- The comments you wrote
- Photo links
Only the aggregable dimensions — issue type, resolution phrase (grouped exactly, so you can see how often each canned response appears), timestamps, and the officer's public role label — go into it. You can look at the raw data behind the page to confirm.
Sharing
We don't share, sell, or hand over your data to anyone. There are exactly two kinds of network requests happening:
- Between your browser and this server (
wots.hackjc.org) - Between this server and WOTS (proxying your request to their API)
That's it. No third-party services, no external analytics.
Clearing your data
In your browser: the log-out button in the header clears your token, phone number, and preferences from this browser. That's a one-click operation.
On our server: the cached copies of your closed reports remain, indexed by an internal WOTS user identifier. There's no self-service delete for this yet — if you'd like your server-side cache purged, open an issue on the WOTS++ repo and we'll do it. The same reports remain available directly from WOTS itself.
Source code
Both this app and the library it uses to talk to WOTS are open source:
- github.com/HackJerseyCity/wots-clone — this app (server, UI, cache, stats).
- github.com/HackJerseyCity/wots — the WOTS API client. Its README documents how the WOTS interface works, what fields exist, and what data flows across the wire.
Built by HackJC. See the terms of use. Questions, corrections, or "hey you're doing this wrong" welcome via GitHub issues on the WOTS++ repo.