Violations, buildings, deadlines and the map
How to find out what is wrong with a building and what is owed, and how to turn that into work: tracking buildings, assigning them to clients, working the violations explorer, the Deadlines worklist, a single apartment, and the citywide map. It is written for project managers and dispatchers. Starting a project from any of these is in running a project.
Before you start
- Public data is loaded on a schedule. Violations, complaints, hearings, liens and 311 records come from city agencies through a nightly sync. What you see reflects the last sync, and some agencies' records can be incomplete. The Violations page says so when you view the whole city.
- Track the buildings you work on. Tracking is what puts a building in your portfolio, in the Deadlines worklist and in the "already in Complied" scope of the map.
- Assign a client to each tracked building. Projects, the client portal and document sharing all follow the building's client.
- Apartments come from agency records. An apartment appears only after an agency record has named it, and the app never adds or invents one. Deadlines are therefore computed for the apartments on file, and every view that counts them says how many apartments it can see out of the building's total.
- One apartment, however HPD spells it. HPD types apartments free-hand (
1C,APT1C,1-C), so the app treats plain variations as one apartment and shows it one way ("Apt 1C", "Floor 2"). Pairs it can't settle on its own go to apartment matching. - You need the view-buildings permission for Buildings, Violations and Deadlines, the view-clients permission for Clients and the view-map permission for the map (team and roles).
Buildings (/buildings)
The page shows the buildings your company tracks. Four numbers sit at the top: Need attention (buildings with an open HPD class C violation or lead hazard order, and how many such items), With lead orders, Overdue lead orders and Built before 1978 (presumed lead); tap one to list just those buildings, and tap it again to clear it. Every violation figure on the page (the numbers, each card's status chip and open count, each group's tally) is counted by the server for the whole portfolio in one request; until it answers, the HPD lead counters synced onto each building stand in. Add building (top right) searches the citywide register and tracks a building, optionally under a client.
Under them is one filter row: the search box (address, BIN or ZIP), Lead (overdue, open, pre-1978) and Client (a searchable list, with Unassigned), and under More filters Borough and Tracking (active or inactive). On a phone every filter is in one Filter sheet. The filters that are on show as chips under the row; tap one to remove it. At the right, Group puts the buildings under their client (the default, with the client's logo when one is uploaded in Settings → Branding), their borough, or no groups; the next switch shows them as picture cards or as a list; Saved views keeps a filter set and grouping. A group folds from its header, and the app remembers which you folded in this browser. Each card or row shows the building's photo (street level when one faces it, otherwise from above), its client, borough, apartments and year built, one status chip (lead overdue, critical items, lead open, or nothing open) and how many records are open, any agency.
Below the list, the same search finds buildings in the citywide register you do not track yet, each with a Track button. The ⋯ menu at the top right holds Client requests (buildings clients asked to add from the portal, when any are waiting), Apartment matching and Open the map.
A building's page (/buildings/:id) covers every agency, not only HPD. It opens with one card:
the building's front on the left (Google Street View facing it, else a street photo, else a
bird's-eye view; above the text on a phone) with Open in Google Maps under it, then the
address, borough and ZIP, the client (with its logo), a Tracked, Tracked (inactive) or
Not tracked status, the page's buttons (Track building, which needs the manage-buildings
permission, or New project, and a ⋯ menu with Change client / Assign a client, Open
worklist, Open on map and Open in Google Maps), and the building's public record: BIN,
block and lot, apartments per PLUTO and on file, floors, year built (with whether lead paint is
presumed), building class in words, gross floor area, zoning (live from NYC Open Data), landmark,
HPD's building ID, the HPD registration with its expiry countdown (red once it has lapsed), owner of
record (PLUTO, live; else the registration's owner) and managing agent. Below it, a banner says
what needs doing first (overdue lead orders, the next deadline, or that the building is untracked
or has no client), with Open worklist when something is owed.
Then a row of tabs, one shown at a time. Each tab is a link (?tab=); Violations, Apartments,
Deadlines and Our work here carry a count. Older links keep working (?tab=units opens
Apartments, ?tab=contacts People), and a tab you can't open falls back to Overview.
| Tab | What it holds |
|---|---|
| Overview | Four numbers: Lead open (open HPD lead orders), Other open (every other open violation, split by agency), Past correct-by and Next correct-by (the nearest HPD correct-by date and how far off it is). Then What needs attention, the soonest-dated open records in plain words: the problem, the apartment, where in it, and what it takes to clear (for a lead order, from the rulebook's cure routes); Our work here, the open projects with the closed ones folded; What this building owes, one line per area of city rules (opens the Compliance tab on that area); Building at a glance, the apartments drawn as the building at its real height, with runs of clean floors folded into one band; People (client, super, property manager or HPD's managing agent, the registration's owner and head officer); and Public record (registration expiry, housing court cases, and links to HPD Online, DOB BIS, ZoLa and ACRIS) |
| Violations | Every record on the building, from every agency (below) |
| Apartments | Every apartment on file with its open records from every agency. Building draws them as the building, one tile per apartment on its floor, coloured by Lead (an open lead order; lead presumed in a pre-1978 building unless Lead-Free), Violations, Child under 6 or Turnover (the last three from this year's apartment facts, with the view-obligations permission); an apartment whose floor its label doesn't say, or that would sit above the building's height, has a row of its own rather than a guessed floor. List is one row each with its facts (child, turnover, this year's notice, the XRF test). Search and the filters (open records, child under 6, notice not delivered, no XRF test) narrow both. Each apartment opens its own page; records that name no apartment are counted beneath |
| Compliance | What this building owes: every city rule the app knows, by area (Housing, Building systems, Energy, Health and environment, Fire, Sanitation, Rent), each Applies, Needs info (it turns on a fact we don't hold, and says which) or Doesn't apply (folded away). It is worked out from the year built, apartments, stories and floor area (PLUTO) and the equipment the city lists at the building (elevators, boilers, sprinklers and standpipes, water tanks, cooling towers); a missing fact is never read as "doesn't apply". ✓ marks a rule checked against the city's own source; the rest still need that check. A rule opens a drawer: why it applies here, what the city and we have on file (registration, filings, documents), the open records within it, and for the lead-paint rules the apartment deadlines, which stay the Deadlines tab's |
| Deadlines | What the building owes in lead-paint deadlines, and how many of its apartments the app can see (needs the view-obligations permission). The source for every lead-paint date |
| Documents | Everything filed against the building, its apartments and its projects, in the Documents page's table and drawer, with Upload to this building (needs the view-documents permission; uploading needs manage-documents) |
| Our work here | The building's projects, open and closed, and Start a project |
| People | Client company (its contact details and named contacts, with Change client and Add client), On site (the super, tenant contact and property manager, edited with Edit; needs manage-buildings), and everyone on the building's HPD registration with their business addresses (staff only) |
| City records | The building's NYC open-data records that are not violations. An at-a-glance strip (HPD registration active or expired, facade rating, Energy Star score, bedbug report, city lists such as CONH and HPD jurisdiction), equipment by type (click a type for its devices), filings with their status and details (boiler fees, FISP penalties, LL84 scores, bedbug counts, DOB work permits active or expired, certificates of occupancy temporary or final, elevator specifications, cooling tower and water tank inspection results, DEP boiler permits, DOF tax exemptions and abatements, FDNY inspection history), and the registered contacts from the HPD registration, which only staff see. Each filing type folds from the arrow at the end of its heading, and long lists show five rows and Show more |
| Details | The identifiers (BIN, BBL, borough, block, lot, ZIP, year built, total units, units on file), The lot (PLUTO) (class, floors, floor area, buildings on the lot, zoning and special district, landmark, condominium, owner of record; zoning and owner live from NYC Open Data), HPD's own building ID, registration and range in a separate HPD card, HPD's Housing court cases, open and closed, the City pages (HPD Online, DOB BIS, ZoLa, ACRIS), and Google Street view from the panorama nearest the building (drag to look around, when the building has coordinates and the app has a Google key), with links to open the building in the Complied Map or Google Maps |
The Violations tab lists every record on the building, from every agency. The strip at the top counts them per agency (an agency with nothing on the building shows 0); click an agency to list only its records, with the columns that agency carries: class, correct-by and certify-by for HPD, hearing and penalty for ECB. With HPD picked, its class totals show beside the switches. All / Violations / Complaints picks the record type, and Open, Closed (closed or dismissed) and All the status; both change the list and the counts. A row opens the record's own page.
Apartment matching (/buildings/apartment-matching)
Some apartment labels could be one apartment or two: 2FL and 2, 1A and A1, 2-2E and 22E.
The app spots these pairs in your buildings, including whenever HPD writes a new spelling, and
lists them here under To review. Open it from Apartment matching in the Buildings page's ⋯ menu; it
needs the manage-buildings permission.
- Get AI suggestions asks the AI about the pairs that have no suggestion yet (up to 25 at a time). Each gets a suggestion, same or different, and the chance it gives that they are one apartment. It weighs the building's other labels and where HPD's notices place each apartment ("2nd STORY, 1st APARTMENT FROM NORTH"). Ask again re-asks one pair. A suggestion never changes anything by itself: in testing it was right about 94% of the time and never called two different apartments the same, but it does miss some that are.
- Same apartment merges the two after you confirm: records, projects, documents and tenant facts move to the one most city records point at, and future HPD records spelled either way link to it. The merge can't be undone from the screen. If both apartments hold their own annual notice, compliance window or obligation for the same thing, the app refuses and the merge has to be done by hand.
- Different keeps them apart and is remembered, so the pair isn't asked again.
- Decided lists past answers beside the AI's suggestion; a pair marked Different can still be changed to same.
Clients (/clients)
Add client opens a form with the client's name, whether it is a Client or a Subclient, contact email, phone, address, mailing address, where they heard about the company, and whether the client requires a notarized affidavit. Name, type, contact email and phone are required for a new client; editing an existing one leaves email and phone optional, since most older clients have none. A client's name must be unique within the firm, ignoring case and spaces at either end, so a second "Northside PM" is refused on the name field.
The list opens on four numbers: Active clients, Buildings under management (with their units, and how many tracked buildings have no client), Clients with overdue lead orders (with the critical items across the portfolio; the per-client figures are the server's, summed from one per-building count) and Need notarized affidavit (with how many portal users have signed in). Tap either of the last two to filter the list to those clients. Search by name, email or phone; Filter narrows by lead orders, status, type and affidavit. The switch beside it shows the clients as a list or as cards; each shows the client's logo (uploaded in Settings → Branding) or its initials, its buildings, its lead orders and its portal logins. The list is split into Active and Inactive, which fold. The Setting up view lists the clients setting up in the portal (client onboarding).
A client's page (/clients/:id) shows the client's name, type, how many buildings it has and how to
reach it at the top, with Edit and a ⋯ menu (Fill in setup, which opens the
setup at /clients/:id/onboarding, and Open worklist for the client's deadlines). A banner says
when something wants doing: open projects, missing contact details, no buildings, or that the
client is inactive. The tabs:
| Tab | What it holds |
|---|---|
| Overview | Buildings, open and overdue lead orders, and open projects as four numbers (each opens the tab that explains it); the buildings with open lead orders and the open projects; contact details; and the account: apartments, active buildings, who runs the notice cycle, affidavits, portal logins and, with the view-financials permission, unpaid invoices |
| Buildings | The client's buildings, worst first, as a list or as picture cards, with a search |
| Projects | Every project on the client's buildings, open ones first |
| Contacts | The people at the client company (owner, managing agent, accounts payable): name, role, email and phone, one marked Primary. With the manage-clients permission, Add contact, edit, remove and make primary; the first one added is the primary |
| Documents | Everything filed for the client (proposals and contracts, reports and filings, other papers), each with Open. Needs a document permission |
| Billing | Every invoice on the client's projects: unpaid, paid and drafts, each opening its project. Needs the view-financials permission |
| Pricing | The client's own rate card (proposals and invoices) |
| Portal access | The client's Setting up answers and its portal logins (client portal) |
| Settings | Switches for whether the client is active, whether we run its annual-notice cycle, and whether its affidavits need a notary (the manage-clients permission changes them), and the client record |
Violations (/violations)
The violations explorer has one search box and a Filter button; the filters open in a side sheet (full screen on a phone), and the ones that are on show as removable chips under the toolbar. The sheet starts with the scope:
- My Buildings: only the buildings you track. This is a worklist: most urgent first.
- Citywide: the whole public record, newest first.
In My Buildings the subtitle says how many records match and on how many buildings, and a summary band sits under it. Where they stand is one bar in which every open record falls in exactly one segment: Overdue, Hearing passed, Due in 7 days, Hearings ahead, No date soon and Awaiting HPD (certified, HPD has not answered). Tap a segment (or its legend) to list just those records, and again to clear it. By department beside it shows each agency's count; tap one or several to list only their records. The figures follow the list's other filters, and every count is the server's, for the whole portfolio, not just what is on screen.
The list is grouped Client › Building by default. The Group chips under the toolbar change that: remove a level, reorder it, or Add Department, Type (lead hazard, turnover, records audit, Local Law 31, other HPD, summonses, DOB, liens), Apartment, Class, Status, Due window or Urgency. Every group, open or folded, shows its own figures counted by the server ("130 past correct-by · 102 hazard · +1 more · 130 open"); a group's records load when you open it, 25 at a time with Show more. Remove every chip for the plain list with its pager. Table layout under a group shows Order / # · Type · Class · Where · Due · Status, with Start work (creates a project from the record) or Open project at the end of each open row. The ⋯ menu holds Export CSV (the whole filtered portfolio, read page by page; at most 25,000 records), Saved views, Building breakdown and By problem type (bars per building, or per kind of record, of overdue, class C and the rest, each with See all in the list) and Open the map. Citywide keeps its own grouping menu, no exact counts and the page-only export.
Tabs pick the kind of record, each with its count under the other filters:
| Tab | What it holds |
|---|---|
| Lead orders (the default) | HPD lead-paint orders: hazard 616/617/624, turnover 621/622/623/625, RPO audit 618/619/620, Local Law 31 626, and the retired 555/614 |
| Other HPD | Every other HPD violation and complaint |
| ECB & OATH | Summonses heard at OATH, whoever wrote them (ECB, Fire, Sanitation, Health) |
| DOB | Department of Buildings violations |
| Liens | DOF tax liens |
| Everything | Every agency |
A link from elsewhere in the app that names an agency, a building or a search opens on Everything, so it shows what it always showed.
Under the toolbar, deadline chips narrow the tab to its own kind of deadline, each with its count in My Buildings: All open, Overdue and Due in 30 days for HPD; Hearing passed and Hearing in 30 days for ECB & OATH. DOB and liens carry no deadline, so they have none. The sheet's Deadline group offers every option, including a custom range.
Rows and Table (at the right of the toolbar; the browser remembers the choice) switch how records are drawn. Either way each record leads with the problem in words: a plain name for a lead order ("Lead paint hazard (presumed)", "Turnover: tested positive"), otherwise the city's description without its legal citation.
- Rows (the default) put one record per line: a status dot, the problem, the address (unless the list is grouped by building) and the client, then one row of small facts: the apartment, the HPD class, Rent-impairing, the correct-by or hearing date with how far off it is, certify-by, the hearing result, any balance owed, the status (only when the list holds more than open records), and the agency's own reference (such as "HPD 616"), the kind of record and where in the apartment.
- Table puts the same facts in columns that follow the tab: HPD shows class, correct-by and certify-by; ECB & OATH shows the hearing and penalty (with any balance owed); a mixed list shows each record's own deadline. A column that would be blank on every row of the page (a certify-by no lead order on it has, a class) is left out, and Status is shown only when the list holds more than open records.
Filter by agency, status (Open, Closed, Dismissed), HPD order family (Hazard 616/617/624, Turnover 621/622/623/625, RPO audit 618/619/620, Local Law 31 626), class (A, B, C, I), and deadline (Overdue, Hearing passed, Due in 30 days, Due in 90 days, No deadline, or a custom range).
Overdue means one thing everywhere in the app (list, badges, building page, portal, counts): an open HPD order that the city hasn't removed, whose correct-by date is before today in New York, and that isn't certified and waiting on HPD. A false or invalid certification counts as overdue again. An ECB/OATH (or FDNY, DSNY, DOHMH) ticket whose hearing date has passed is Hearing passed, its own filter and badge, not overdue. Records the city removed are not listed. In My Buildings you can also filter by client and by what is owed (the same obligation filters as the map). In Citywide you can filter by borough or one building.
Search finds citations, descriptions and record numbers. An address or a BIN finds a building instead: in My Buildings among the buildings you track, and in Citywide through the buildings register (the Buildings page's own search), with the matched buildings named under the search box. Add the borough ("106 Mercer St, Manhattan") to narrow an address. Searching description text across the whole city can time out; the page then suggests an address or record number instead.
Sort (My Buildings) is Most urgent first or Newest issued. Most urgent first lists deadlines that have passed, the most recently passed first, then deadlines to come, soonest first, then records with no deadline. Citywide is always newest first.
Choose how to group the rows: by urgency (the default in My Buildings: Overdue, Hearing
passed, Due in 30 days, Due later, Certified and awaiting HPD, Deadline passed, No deadline,
Closed), building, client, client then building, building then unit, unit, or none. In Rows, a
group header folds its records away from its name, and while folded shows how many are overdue,
past their hearing or due in 30 days; the browser remembers which groups you folded. The list
pages 50 rows at a time, and groups are of the page shown. The ⋯ menu holds Export this
page (CSV), which downloads the rows shown with each record's description, and Open on the
map, which opens the same filter on /map. Saved views keep a filter set.
A row opens the violation page (/violations/:id). Start the work (top right) creates a
violation-origin project with this violation linked and opens its Decide stage, or Open
project when one already exists (needs the manage-projects permission); the ⋯ beside it has
Copy summary, the building, the building on the map, and the source record. The page has three
tabs:
- How to comply is the guide for the order. For an HPD lead order it is the lead rulebook in plain words: what HPD found, who may do the work, the steps in order, the paperwork, the deadlines, the penalty, the route once overdue, linked orders and the mistakes that sink a filing; Show sources prints the docs/hpd section behind each line. For another HPD order number it names the kind of order and the broad way it clears, under an Unverified guidance badge (that grouping has not yet been checked against HPD's rules), and gives no steps or dates. Any other record has no guide.
- Overview opens with the next action card, which says what to do about this record and by when and, for a blocked order, which order blocks it, with a link to it. Under it are two clocks, one above the other. The legal clock states what the order requires, by when, the contest window and what happens if it is missed, over a line of the record's dates (issued, contest or postpone by, correct by, certify by), each with how far off it is and where a derived date comes from. The work is three steps: choose a path, carry it out (the linked project), and the agency closing the record. Then come the location parsed from HPD's wording (lead orders), or the agency's own facts and What the record says (the agency's sentence in plain words, with the original text one tap away) for any other record, and the linked work. Folded at the foot: Related on this building (orders that block this one or that it holds up, its registry pair, other open orders in the apartment), the Timeline, and the Source record: the city's row for this record, fetched live from NYC Open Data when you open it. It says so when the city no longer publishes the record or NYC Open Data can't be reached. An old link to the Related or Record tab opens Overview with that fold open.
- Options starts with Ways to clear: one card for each route open on this order right now, with its date, its paperwork and a Cheapest or Chosen mark, and under them the routes that aren't open, each with the reason. Below is the order's full list of resolution paths (the same options as Decide).
Deadlines (/deadlines)
Deadlines is the worklist of what each tracked apartment needs next, grouped by client and
building. It has no sidebar entry: open it from search (Ctrl+K / ⌘K). It lists needs from three
families of duty:
| Family | Needs |
|---|---|
| Annual-notice cycle | Needs annual notice → awaiting tenant response → no response, escalating (certified mail or a DOHMH notice) → needs annual investigation |
| Local Law 31 | Needs the one-time full-unit XRF test |
| Exemption monitoring | A Lead-Safe exemption's monitoring visit or risk assessment is due |
| Records | Missing turnover, non-violation-work or previous-owner records |
An LL31 test that has not happened is "Needs test", never overdue, because a late test still satisfies the duty. Duties with no deadline are never marked overdue.
Four cards at the top count Open needs, Overdue, Due in 30 days and Needs LL31 test;
the last three are one-tap filters, and a count shows "…" until the whole portfolio has loaded. Use
the tabs Upcoming, Overdue and Done this year, then the toolbar: search, a Building
picker (search by address), a Client picker, and two dropdowns, Kind of need (annual-notice
cycle, notices we run for the client, LL31, exemption) and When it is due (overdue, next 30
days, next 90 days). A building or client picked narrows everything on the page, the cards
included; /deadlines?building=<id> opens it on one building. Each building is a group that folds
from its header; folded, it shows how many of its needs are overdue, due in 30 days, due in 90
days, due later or undated. Big groups start folded and the page remembers what you fold, in this
browser. A coverage notice lists tracked buildings with fewer apartments on file than they have
units, so a short list is not read as "all clear". On each row:
- Log… opens a drawer to record what was done (notice delivered and by which method, response received, whether a child under six lives there, escalation dates, investigation, turnover work, non-violation work, a monitoring visit), which advances the apartment to its next need;
- Create project (with the manage-projects permission) opens the project form prefilled from the need, and the project is recorded against it.
An apartment (/units/:id)
The header names the apartment, then one line of facts: its building (a link), floor, borough, the last turnover and the client once recorded, and one status (Nothing owed, 2 open needs, 1 overdue, Lead-Safe (monitoring), Lead-Free). Edit unit facts is the one button (with the manage-obligations permission); ⋯ holds Open the building and New exemption application. A link to an apartment that has since been merged into another opens that one.
The tabs sit under the header and each is a link (?tab=). Without the view-obligations
permission, Compliance and History are left out and Overview shows no needs, rather than
reading every apartment as owing its notice. Links to the page's earlier sections still open
where that content lives now (?tab=needs → Overview, exemption → Compliance,
annual-notice → History, projects and work-orders → Work).
| Tab | What it holds |
|---|---|
| Overview | Four headline cards, each opening the tab that explains it: child under 6, this year's annual notice, the LL31 XRF test and open violations (without view-obligations: open violations, projects, work orders and documents). A banner only while something is wrong (a need overdue or open, Lead-Safe monitoring at risk, or a partial record). What needs doing, every checklist row that needs action or is waiting on something (the reply waits on the notice, the inspection on whether a child under 6 lives here), each with its buttons; Coming due, the soonest-due open records in plain words; Where it is, the building drawn small with this apartment highlighted; Apartment facts (floor, child under 6, last turnover, Local Law 31 test and date, client, audit year, Also known as — every way HPD has written this apartment, with how many records use each — and, once recorded, when a child was first seen, the lease start, whether a turnover is pending and notes); and the open projects |
| Compliance | What this apartment requires: a checklist of this year's annual notice, the tenant's reply (and the certified mail / DOHMH steps), the annual visual inspection, the LL31 XRF test, turnover work and dust clearance, friction surfaces (made lead-safe by Jul 1, 2027 where a child under 6 lives), window guards, stove knob covers, Lead-Safe monitoring and risk assessment, the record-keeping the ladder asks for, and the exemption. Each row says Needs action, Waiting (and on what), Done (with its date) or Not applicable, with the button that records it; All / Needs action / Waiting / Done / Not applicable narrows the list (?show=). A lead-paint row needs action exactly when the Deadlines worklist has a need for it; the three safety items read their own records, set with Record (window guards needed and installed, stove covers offered, requested and installed, friction surfaces made safe; needs manage-obligations). The LL31 row names the newest XRF affidavit or inspection report on file, the turnover row the newest dust-wipe lab result or sampling affidavit; either opens on the Documents page. Under it, the Exemption record: New application, every application, and for a granted Lead-Safe exemption the next monitoring visit and risk assessment, Log monitoring visit and the visits so far. For Lead-Safe, record how the lead surfaces were made safe: Contained is monitored yearly; Encapsulated, Both or not recorded at 1 month, 6 months, then yearly |
| Violations | Every record that names this apartment, open and closed, from every agency. It is the building's Violations list narrowed to this apartment: the agency strip, All / Violations / Complaints, Open / Closed / All, the same columns and paging |
| Work | The apartment's projects, Open and Closed (a row opens the project), and client work orders for it, grouped by status (a row opens it on the Work orders tab of Projects) |
| Documents | Documents filed against this apartment, its own and its projects', grouped by type; a row opens the Documents page on its building with that document highlighted. Upload to apartment (with the manage-documents permission) files one at the apartment's level |
| History | Annual notices by year: each audit year's notice, reply, child under 6 and inspection at a glance; then each year's full record in four groups, Notice, Investigation, Turnover and Other work (delivery and response, access attempts, certified mail and DOHMH notices, the annual investigation and its result, turnover work), the latest year open; and every Turnover on file |
Each group folds from the arrow at the end of its heading. Edit unit facts records the child-under-6 flag, the last turnover date and whether the LL31 test is on record. These facts start unknown and stay unknown until someone records them; the app never assumes an answer. The apartment record can now hold window guards and stove knob covers (on each year's annual notice) and friction surfaces (once, beside the LL31 test), but the checklist does not show them yet.
The Complied Map (/map)
The map shows the whole city's buildings and records, and every choice you make changes the map, the totals, the ranked list and the pins together. The map fills the page; the controls float over it: a search pill along the top (one search box and ⋯) with the filter bar under it; the control capsule top left (zoom in, zoom out, Show all five boroughs, and 2D / 3D); one side pane down the right edge (the results list, or an opened building in its place; a sheet along the bottom on a phone); and along the bottom the view switch (Map, Earth, Street, Orbit) and Layers. The map opens by flying in onto the whole city, then frames your own buildings. Zoomed all the way out, the five boroughs are drawn as an outline map: each borough tinted deeper green the more is open in it under your filters, named with its count; hover a borough for its numbers (open, overdue, tracked, the building with the most open), click it to fly there (on a touch screen, tap once to see, again to go). Zoomed out, every building is a small plain dot, yours green (grouped with a count where they crowd); closer, the dots take their colour, and close in the buildings themselves light up. Hover a building for its address, size (units, and floors where its outline is known) and counts.
The search box
The box has two modes, on the Find | Ask switch at its right end:
- Find: type an address, BIN or ZIP and pick a building (or press Enter for the first match). The map flies there with that building opened. Your filters stay as they are; if the building falls outside them, its card still opens. When nothing matches, Ask the map instead turns what you typed into filters.
- Ask: describe the buildings you want in plain English, such as "class C violations in Bronx walk-ups", and press Enter. The box opens with example questions to pick from. The sentence becomes filters you can see and edit on the bar, and Back undoes it. Anything the map cannot filter by (an owner, a neighbourhood) is said in a message.
The filter bar
The bar under the search box shows the whole filter, nothing hidden:
- The sentence reads it back, for example "Showing 1,204 buildings with open lead violations, in the Bronx, built before 1978", with the matching records and how many are overdue.
- Quick filters are always on the bar: Violation type, Urgency, Borough, Building type and Year built. Click one to set it (a small panel opens beside it; full screen on a phone). Once set it turns green and shows its value; × removes it.
- All filters, at the end of that row, opens every filter in one panel. The groups (What's wrong, How urgent, Which buildings, Our work) run down the left with how many filters are on in each; click one to jump to it. Every filter's options are open on the right, with Clear beside any that is set, and the search box finds a filter by name. Options show live counts (how many records or buildings each would leave). The panel's button says how many buildings the filters find and closes it. The number on All filters is how many filters are on.
- Filters you set from All filters that are not quick filters show as green chips on a row of their own, edited and removed the same way. On a phone each row scrolls sideways.
- Filters combine: a building must match every filter. Inside one filter any ticked option matches, except Building has, where every ticked fact must be true.
- Views, beside the sentence, holds everything that sets a whole filter at once. Your saved views come first: click one to load it (filters, camera, sort and view), or the bin to delete it; Save current view… stores the map as it is now. Under them are the Presets, starting points: Open lead violations (what the map opens on), Overdue lead violations, Child at risk (open 618), Records overdue (RPO), Presumed lead (pre-1978), Our buildings, Everything open (every department with records behind it: HPD, DOB, ECB / OATH, FDNY, DOHMH and DOT) and Every building. A preset replaces the filters with its own, as ordinary filters you can edit; your borough stays. The button names the preset the filter currently matches.
- Clear all, beside Views, turns every filter off: every building on file.
The filters, by group:
- What's wrong: Violation type (department, then kind, then order number, e.g. HPD 616 · lead-based paint hazard), Where in the building (in an apartment, or the public areas; HPD violations only, since no other agency names an apartment), Issued date (when the agency issued the record), and Agency status (the agency's own status names, e.g. HPD's "NOV sent out"; it matches alongside Urgency, so a record in either counts).
- How urgent: Urgency (Overdue, Open still in window and Postponed are HPD-only; Hearing scheduled and Money owed are OATH-only; Contested is our own record), HPD class (C immediately hazardous, B hazardous, A non-hazardous, I information order), Rent impairing (HPD violations a tenant may withhold rent over), Correct-by date (HPD orders only) and Hearing date (OATH summonses only).
- Which buildings: Our buildings (all, ours, or not ours yet), Borough, Building type (DOF's building class: walk-up apartments, elevator apartments, condominiums, homes over a store, offices and so on), Year built (with a "Before 1978" shortcut; an unknown year never counts as old), ZIP code, Units, Floors (with low-, mid- and high-rise shortcuts; buildings with no floor count drop out), Floor area (gross square feet for the whole tax lot, with shortcuts for the legal lines: over 25,000 sq ft must benchmark energy, over 50,000 also owes an energy audit; buildings with no area on file drop out), and Building has: an elevator, boiler, cooling tower or water tank, a facade rated Unsafe or SWARMP, an expired HPD registration, an Energy Star score under 50, an active DOB work permit, only a temporary certificate of occupancy, a DOF tax abatement or exemption, a place on the CONH list, HPD jurisdiction, an individual landmark, a place in a historic district, or a condominium. Each fact shows how many of the buildings your filters find have it.
- Our work (people who can see obligations): Apartment needs (needs annual notice, awaiting tenant response, no response and escalating, needs annual investigation, needs LL31 test, Lead-Safe monitoring due, missing records), Apartment due (past due, next 30 days, next 90 days; dated duties only) and Apartment facts (children under 6, turnover in the last year, investigation done, LL31 tested). Any of them holds Our buildings on (its chip shows a lock), since only our apartments have these facts.
Links made before the filter bar (with lens= in them) and saved views still open exactly the
same filter.
- The results list on the right says how many buildings are in view, with three counts (in view, and of the whole filter: buildings, records, overdue). Sort (Risk, Most overdue, Largest) is in its header, beside the fold button; folded, it is a round button in the corner and stays folded next time. Each row has the building's street photo and In Complied or Prospect. On a phone the list is a sheet: tap or drag its grabber to raise it to half or full height, or lower it to a peek.
- Opening a building (a pin, a lit building, a row, or an address search) flies the map in on an arc to over the street in front of it, looking at its front, and shows its pane in the list's place: Google Street View facing the building (drag to look round, Open in Google Maps; a street photo where Google has none) with Walk the street for Complied's own street photos, the address once with its borough and client, then the building at a glance: open violations, overdue and owed to the city, with an alert only when something needs attention (an expired or ending HPD registration, since HPD then rejects every certification; pending hearings). Then Building page and Directions, with ⋯ for Open in Violations, Zoom here, Copy link, HPD Online, DOB BIS and ZoLa; Our projects here for a tracked building (the newest three); then the tabs. Overview has why the building is on the map, open violations by agency and the most common types (See all opens the Violations tab), the building's facts in HPD Online's order (BIN, HPD building ID, Boro-Block-Lot, units, stories, year built with the lead-paint note, building class) and its HPD registration (id, end date, owner, managing agent, every contact folded away). Violations and City records follow. Each fact appears once. Drag its left edge to make it wider or narrower (remembered in this browser), Full page spreads it over the map, and Back to the list (or Esc) closes the building and flies the map back to where it was. Clicking another pin swaps the building in place. On a phone the first tap on a pin shows a preview card; Open building opens the pane as a full sheet, and Map lowers it so the map shows.
- The view switch: Map is the map itself (2D or 3D from the capsule). Earth shows the city in Google's photorealistic 3D with the list's buildings marked; Street stands you in the street facing the opened building; Orbit flies slowly around it (any touch stops it). Street and Orbit need a building open. Where Google's 3D is not set up, Earth shows the satellite map in 3D, Street uses Complied's own street photos, and Orbit circles the building on the map; a line over the switch says so.
- ⋯ has Ask the map, Show all five boroughs, Show our buildings, Zoom to the opened building, Show / Hide the legend, Show / Hide our buildings' rings and Copy link to this view; Saved views is in the filter bar.
- Layers picks the Map style (Standard, Satellite, Terrain, Light, Dark) and switches what is drawn: our buildings' rings, the legend, Jobs today (today's field visits, one colour per inspector, unassigned in red) and Field history (visits finished in the last 30 days, with a day scrubber to step back through them) for people who can see field jobs, 3D buildings, and the satellite card of the opened building. These are your own display settings, remembered in this browser, and are not part of a shared link. The map itself stays in daylight under every appearance; only the controls around it go dark.
- Buildings ▾ (beside the view switch, for people who can see field jobs) switches the whole map to the crew: Jobs today (every inspector's stops for a day, numbered in booked order in their colour, a dashed line through each person's day, unassigned in red), Route (one inspector's day in order, each stop with its time, apartment, kind of visit, Navigate and Open job; pick whose) and History (what was finished on a day). Step days with the arrows; the map opens on the nearest day with visits. There are no live positions: the crew's phones send none.
Records also carries the city's enforcement records: HPD vacate orders, the Alternative Enforcement Program and emergency repair charges, DOB NOW safety violations under their program (boiler, elevator, facade, energy), FDNY vacate orders, DOHMH rodent inspections whose latest inspection failed, and DOT sidewalk violations not yet dismissed. DSNY's own feeds are not loaded, so it appears disabled; its summonses show under ECB / OATH.
Close in, each matching building lights up in 3D in its colour (rose for overdue, amber for open, green for one of yours with nothing open) instead of a dot: its real outline from NYC's Building Footprints, read live from NYC Open Data, or the map's own building where the city has no outline for it. From street level, click a street to step into its street photos. How the map answers a query is described in the map architecture.
Search and shortcuts
Ctrl+K (or ⌘K) opens a palette that searches buildings and recent pages and jumps to any
destination you can open. Recent pages are kept for you and the firm you're in, so another login on
the same computer, or an operator's View as session, never sees yours, and a page you can no
longer open drops out of the list. The palette includes pages that are not in the sidebar: Deadlines,
Documents, Rate cards, New project and Team roles, plus Field jobs, Work
orders and Floor plans, which open their tab of Projects (all listed under More). The Search button at the top of the sidebar opens the same palette.
Under the hood
Ingestion · Map · Data model