Xiber NetOS — User Manual
Daily usage guide for the NetOS web interface.
What NetOS Does
NetOS is Xiber's system of record for wholesale network lifecycle management. It tracks:
- Carrier circuits (waves, EPL, DIA, dark fiber, cross-connects, etc.)
- Infrastructure assets (data centers, towers, colos, rooftops, carrier hotels)
- Carrier/provider relationships and contacts
- Contract terms, renewal windows, and ETF exposure
- Lifecycle history (orders, installs, upgrades, outages, renewals)
What it does NOT do: end-customer billing (Sonar), device monitoring (LibreNMS), or network design (Wisdm).
Navigation
The left sidebar is organized into an Inventory group and a general navigation group. Which items appear depends on your role and permissions, so you may not see every view listed below.
Inventory
| View | URL | Description |
|---|---|---|
| Circuits | /circuits | Main circuit list with search, filters, bulk edit, and soft-delete |
| RF Links | /rf-links | Wireless link inventory with equipment, spectrum, cost, rent, endpoints, and FCC license documents |
| Electrical | /electrical-services | Utility service inventory attached to infrastructure or customer sites |
| Infrastructure | /infrastructure | Non-circuit assets (towers, colos, DCs) |
| Findings | /findings | Field findings (issues) recorded against infrastructure and customer sites, with AI-drafted narratives from site photos |
| Customers | /customers | Commercial and MFC customer records used by circuits, RF Links, and subtended endpoints |
| Properties | /properties | Multi-tenant commercial buildings: tenant count, linked customers, penetration %, MRR rollups |
| Service Providers | /providers | Carrier database with contacts and spend |
| Vendor Quotes | /quotes | Inbound vendor circuit/colo quotes, comparison, and conversion to a circuit |
Navigation
| View | URL | Description |
|---|---|---|
| Alerts | /alerts | Problem inventory records that need cleanup before maps, topology, attribution, or reporting can be trusted |
| Map | /map | Geographic view of circuits and infrastructure |
| Dashboard | /dashboard | KPIs, spend analysis, renewal pipeline |
| Timeline | /timeline | Contract-term Gantt chart |
| Financial | /financial | Per-circuit P&L, modeled revenue, margin, ETF exposure, and carrier rollups |
| Address Lookup | /address | Address-based circuit lookup |
| Mobile/Field | /mobile | Field-friendly read view with NOC call, copy ID, and map links |
| Contributions | /contributions | Your recognition level, progress, badges, and points history |
| Leaderboards | /leaderboards | Monthly/all-time points by person, category, and department |
| Import | /import | CSV/XLSX and AI-assisted bulk import |
| Admin | /admin | Audit activity plus bug and feature request queue |
| Documentation | /docs | In-app copy of these user and operations guides |
A global search bar appears across views. It searches across inventory, not just the current page, and returns recommended matches as you type.
Global search supports partial matches for:
- Circuits by label, carrier circuit ID, service type, status, BAN, billing account, notes, provider, and A/Z site names or geography
- RF Links by link label, status, equipment, spectrum, FCC call sign, A/Z sites, customer endpoint, and notes
- Infrastructure by site name, Xiber label, site type, account, address, provider, and notes
- Customers by customer name, property name, customer type, service/access technology, address, contacts, billing account, and notes
- Properties by name, nickname, address, city, state, postal code, and property manager
- Electrical services by service name, provider, account, meter, delivery location, address, status, and notes
- Providers by provider name, short name, contacts, support/billing details, and ASN
Use the recommended matches dropdown to jump directly to the matching record or inventory page. Page-level filters still apply only to the page currently being viewed.
Searchable pickers
Wherever a form asks you to pick an existing site, customer, provider, or facility — the A/Z endpoint fields on the circuit and RF-link forms, the subtended-links panel, and the electrical-services form — NetOS now uses a type-to-search picker instead of a long scroll-through dropdown.
- Type to filter. Start typing any part of the name or address and the list narrows to the best matches. Exact and prefix matches rank first, then substrings, then partial word overlap.
- Grouped results. When a picker mixes record types, matches are grouped under headings such as Infrastructure and Customers so you can tell an infrastructure site apart from a customer site at a glance.
- Keyboard. Use the up/down arrow keys to move through the list, Enter to select the highlighted option, and Esc to close the list. The mouse works too.
- Long lists. Only the top matches are shown; a "… more — keep typing" note appears when there are additional matches, so refine your search to narrow them.
- Clearing and multi-select. Optional pickers show a small ✕ to clear the selection. Multi-select pickers (for example, PtMP nearby customers on the RF-link form) show each chosen entry as a removable chip; press Backspace on the empty input to remove the last chip.
Circuits
URL: /circuits
The primary operational list. Columns include:
| Column | Description |
|---|---|
| Xiber Circuit Label | Internal Xiber identifier (click to open detail) |
| Carrier Circuit ID | The carrier's reference number |
| Carrier | Upstream provider name |
| Service Type | wave, epl, evpl, dia, broadband, ip_transit, dark_fiber, etc. |
| Bandwidth | Capacity in Mbps |
| Status | quoted, ordered, installing, active, suspended, decommissioned |
| A Endpoint | Near-end location |
| Z Endpoint | Far-end location |
| MRC | Monthly recurring cost |
| NRC | Non-recurring cost |
| Term Start / End | Contract period |
Click any Xiber circuit label to open the circuit detail page.
The circuit list is grouped by service type. Each service type section can be collapsed so large inventories remain navigable while preserving the existing filters and bulk-selection workflow.
Add or Edit Circuit
The circuit form now uses existing Infrastructure and Customer records as site selectors. Select the A site and, for multi-site services such as EVPL, EPL, wave, dark fiber, MPLS, or cross-connect, select the Z site. NetOS copies the saved site name, address, type, and coordinates into the circuit endpoint record so maps and topology stay consistent with the site inventory.
Circuit labels are generated from the standard pattern Provider Short Name Service Type A Loc -> Z Loc when a provider short name exists, otherwise Carrier Service Type A Loc -> Z Loc. The add/edit form starts with service type because that selection controls which site fields are needed. For single-site services such as DIA, broadband, and Starlink, the generated label omits the Z location. Users can edit the generated label before saving, but changing carrier, service type, or selected sites refreshes the generated label so circuit names stay consistent.
DIA, broadband, and Starlink are single-site services in NetOS, so the form only asks for one circuit site. If the selected site is a customer record, NetOS also associates that customer to the circuit. Circuit-specific install details such as meet-me room, rack/demarc position, demarc type, site contact, and circuit access notes can still be entered on the circuit because those details may differ from the base site record.
Create or update the Infrastructure or Customer site first when the location, address, or coordinates are missing or wrong. The circuit form should not be used to maintain master site addresses.
A circuit endpoint can also be a Property: selecting one fills the endpoint's name, address, and coordinates from that property record and keeps an exact link (distinct from a fuzzy address match) so the property shows the circuit under its own RF Links and Circuits tallies.
Circuit Bulk Actions
Use the checkboxes in the first column to select one or more circuits. The header checkbox selects all currently visible filtered rows.
| Action | What It Does |
|---|---|
| Apply | Bulk-updates selected circuits using only the fields filled into the bulk action row |
| Delete | Soft-deletes selected circuits after confirmation |
Bulk update fields currently include status, provider, service type, MRC, NRC, term end, and notes. Bulk deletes are soft-deletes: the rows are hidden from normal views but remain in the database for audit and historical reporting.
Each affected circuit receives its own audit entry.
RF Links
URL: /rf-links
Use RF Links for PTP, PtMP, Tarana, microwave, and other wireless paths that serve customer endpoints or downstream assets from a POP, tower, rooftop, or facility.
Tracked fields include equipment type, path role, diversity group, frequency, channel width, bandwidth, FCC call sign, license required status, CAPEX, straight-line depreciation inputs, MRC, tower or rooftop rent MRC, install date, A location, Z location, coordinates, notes, and FCC license uploads. Equipment presets can populate common equipment type, link type, default CAPEX, and useful life; users can still edit those values before saving.
RF Links use the same A/Z direction convention as circuits: A is the customer or downstream side, and Z is closer to the donor/core. For customer PtP service, select the customer endpoint and the Z donor facility. For facility-to-facility backhaul, select both A and Z infrastructure facilities. An A or Z endpoint can also be a Property in place of a facility or customer site.
RF Links can be attached from an infrastructure asset's Subtended Network section. When a customer endpoint is served over wireless transport, select the RF link in RF link serving endpoint. NetOS uses RF link MRC plus tower rent MRC as calculated monthly link cost unless a manual link cost override is entered.
The A and Z location fields are the searchable pickers described under Searchable pickers in Navigation: type to filter and pick an existing Infrastructure or Customer site rather than scrolling.
When adding PtMP customer endlinks, select the PtMP source node first. NetOS shows only mapped customer sites within 10 miles of that sector and only subscriber radios compatible with the selected base/sector system. The nearby-customer field is a multi-select picker: search and add each customer as a chip, and NetOS creates one PtMP RF Link per selected customer endpoint in a single action. If no mapped customer sites fall within 10 miles of the chosen source, NetOS shows a note instead of an empty list.
Redundant / Backup Links
A customer endpoint that is already attributed to one facility can be given a second, backup path from a different facility. In the RF-link form (and the subtended-links panel), tick the Redundant / backup link checkbox before saving. This marks the new attribution as a backup path rather than the primary connection.
- A backup link that is not marked redundant will be rejected if the customer is already attributed elsewhere. NetOS returns a conflict message explaining that the customer endpoint is already attributed to another facility, and offers a Retry as redundant link button on that error — click it to convert the attempt to a redundant link in one step, without re-entering the form.
- Redundant links carry their own transport cost (the backup facility and path are real spend and are counted), but the customer's revenue stays credited to the primary facility so revenue is never double-counted. If you genuinely need the backup path to carry revenue too, enter an explicit link revenue on the subtended row and NetOS will honor it.
- Redundant links display a Backup badge in the RF-link and subtended-link lists so the operating (primary) path stays visually distinct from the protection path.
For the full economics of how backup paths are attributed (cost flows to the backup facility while revenue stays credited at the primary), see Infrastructure Attribution → Redundant / Backup Links.
The RF Link list is grouped by BTA market state, BTA, and then city, using the A infrastructure location first and falling back to the Z facility or customer endpoint geography when needed. Cross-state suburbs are consolidated into the parent metro market, such as Newport, KY under OH / Cincinnati BTA. State, BTA, and city sections can be collapsed.
Customers
URL: /customers
Customers are first-class records that can be selected from endpoint-style circuits, RF Links, and infrastructure subtended links.
Commercial customer fields include customer name, status, address, coordinates, DIA or PTP service type, DIA/PTP capacity, contracted MRR, install NRC, revenue source, OTT service checkboxes for VoIP, IPTV, managed WiFi, and managed security, contact details, billing account, and notes.
MFC customer fields include property name, tenant count, address, coordinates, contracted MRR, install NRC, property CAPEX, maintenance reserve MRC, revenue source, access technology such as XGSPON, EoC, or ActiveE, property owner, property manager, access rules, contact details, billing account, and notes.
MFC records also include agreement and property-service detail fields. The MFC Service Agreement section tracks the agreement signed date, renewal terms, owner termination rights, system ownership terms, and force majeure language. The MFC Service Scope section tracks base and maximum in-unit speeds, whether video/IPTV is bulk, retail, both, or not provided, common-area WiFi, mobile carrier offload, IoT coverage, property management office voice, and free-form notes for common-area or other property services.
Use customer selectors instead of free-form customer names when the customer already exists. Free-form customer names remain available for early discovery or incomplete records.
The customer table also shows associated circuits, RF Links, donor POPs/facilities, and protection status so users can see how the customer is served and click through to the serving asset where applicable. Serving paths are sorted with primary paths first and backup, secondary, redundant, or diverse paths underneath so the operating path is always visible before the protection path. MFC sites are flagged as Protected when NetOS sees either at least one primary serving path plus at least one backup path, or two or more primary serving paths that represent ring/diverse protection. Backup paths include Broadband, Starlink, cellular backup, circuits with purpose backup, or paths explicitly marked secondary, backup, redundant, or diverse. If DIA is the only service at an MFC property, NetOS treats that DIA as the primary path until a Starlink or other backup path is added. Unprotected MFCs are highlighted because the operating standard is to add backup or ring/diverse service where feasible.
The customer table is grouped by customer type, BTA market state, BTA, and city so commercial and MFC sites can be reviewed by both service model and metro market.
Customer add/edit forms warn when Address line 1 appears to contain the city, state, or ZIP. Split the address into Address line 1, City, State, and Postal code fields so geocoding can create customer coordinates. Customer records are also flagged as unmappable when they have address data but no latitude/longitude after geocoding. Correct the address fields or enter coordinates manually; customers without coordinates cannot render as RF Link endpoints on the map.
When typing a customer or infrastructure site address, NetOS recommends normalized address matches. Choosing a match fills Address line 1, City, State, Postal code, Country, Latitude, and Longitude. Save the record after choosing the suggested address so maps, topology, and RF Link rendering update from the corrected location.
Attribution uses subtended link revenue when entered. If the subtended link has a selected customer and no explicit link revenue, NetOS uses the customer's contracted MRR.
Tenants. A commercial customer linked to a Property is a *tenant*. Once linked, a tenant is expected to carry only its service detail (service type, capacity, contracted MRR, cost) — RF links, circuits, PtMP sectors, and subtended links belong to the property instead, and the tenant's own Service Paths section is normally empty. The tenant's customer detail page shows the property's network under Inherited network in place of its own serving paths, so you can still see how the building is served without duplicating that topology onto every tenant. Trying to attach a tenant directly to a new RF link, subtended link, or PtMP node is rejected with an error naming the property it belongs to — land the new attachment on the property instead. Existing attachments created before a customer became a tenant aren't touched automatically; an admin can move them onto the property in one pass using the property's absorb tenant links tool (properties_edit + customers_edit), which previews what would move before committing.
Customer detail pages show attached electrical services alongside serving paths, related objects, a monthly revenue schedule, a collapsible ROI Analysis model, inherited donor cost detail, and a What If calculator. The serving path section combines explicit subtended links with directly attached customer circuits and RF Links, then labels each path as Primary or Backup so Broadband, DIA, Starlink, and secondary paths are visible in the same operating view as the main RF or fiber path. DIA is contextual for MFC sites: when it is the only serving path it is labeled Primary, and when another primary path exists it may remain a backup or secondary path if marked that way. Direct customer circuits are limited to customer-facing circuit endpoints or one-ended customer backup services; upstream donor transport that serves a POP, tower, or aggregation facility remains visible under inherited donor cost instead of being listed as a direct customer serving path. Inherited donor cost includes the customer's revenue pro rata share of shared facility MRC and upstream transport paths at each structure in the serving chain. The financial summary breaks out direct serving cost, inherited shared cost, maintenance reserve, commission, revenue escalator, cost escalator, and ramp assumptions. The monthly schedule shows MRR, escalated serving cost, maintenance reserve, commission, total cost, and margin by month. The calculator lets users compare the customer revenue schedule against a hypothetical Type 2 circuit, alternate RF build, or renewal case by entering monthly transport cost, build CAPEX, monthly OPEX/reserve, install NRC, and commission. The ROI model uses customer MRR, term years, term start/end dates, revenue escalator, ramp months, commission percentage or fixed monthly commission, attributed monthly serving cost, install NRC, RF Link CAPEX when present, customer property CAPEX, maintenance reserve, and 3% annual direct/inherited cost escalation starting in year 2 to project ARR, annual contribution margin, CAPEX/ARR, margin payback, net cash, ROI percentage, IRR, NPV, margin multiple, and payback over 2-, 3-, 5-, and 10-year terms.
The customer detail page has a sticky header (back link, name, type/status/address, verification chips plus a protection badge, and the Edit Customer primary action) followed by a row of KPI tiles (contracted MRR, status, type, service path count, photos, property for commercial customers, tenants for MFC, capacity for commercial) so the headline numbers are visible without opening anything. Below the KPI row, the rest of the page lives in five page-level tabs — Overview, Service, Financial, Media, and Activity. Overview holds the Customer Summary fields, the property-assignment card (commercial customers), and the short Customer Site and Related Objects reference cards that used to sit in a narrow right-hand aside. Service holds the Service Paths table, PtMP Nodes, and (MFC only) the MFC Service Agreement and MFC Service Scope cards; an MFC site that needs a backup path shows the MFC SOP: add a backup path warning at the top of this tab. Financial holds the Customer Financial Summary metrics plus collapsible Revenue Breakdown, Baseline ROI Analysis, Monthly Revenue Schedule, Inherited Shared Costs, and What If sections, each collapsed by default with a one-line summary (for example "5-year ROI 42% · 18% IRR" for ROI Analysis) and expanding on click. NetOS remembers which tabs and sections you last opened per browser. The Media tab holds the same full-width site workspace tab strip as before — Photos & Documents, Links & SharePoint, Findings, and (when the customer has any) Surveys, each labeled with its item count — and it still honors its own ?tab=photos|links|findings|surveys URL parameter (the page-level tabs use a separate ?view= parameter). The Activity tab holds the audit history that used to sit at the bottom of the page.
The Photos & Documents tab includes separate Photos and Documents views. Photos are intended for field photos and screenshots; documents are intended for floorplans, permits, invoices, service agreements, and other supporting files. Image uploads capture available metadata such as image dimensions, EXIF captured date/time, GPS coordinates (including camera heading/compass direction and altitude when the camera recorded them), camera/software hints, and file size. Document uploads are also processed for searchable AI summaries when text can be extracted from the file. Before a photo is sent to the AI vision model, NetOS downscales it (longest edge capped, re-encoded as JPEG under a size cap) so large camera photos are never skipped -- the original file on disk is untouched. When the AI provider is configured, NetOS saves the upload immediately, marks analysis as pending, and analyzes photos and documents in the background so users can continue working. AI analysis is advisory and should be reviewed by the user before operational decisions are made. NetOS auto-generates a concise title for image uploads when the user does not provide one. The photo gallery supports folders, cached thumbnails, paging for large photo sets, previous/next navigation in the image viewer, search across filenames, titles, user notes, AI summaries, detected text, visible equipment, and follow-up recommendations, and a Re-run AI action when analysis needs to be refreshed. When a photo has GPS coordinates, its viewer shows a Location panel: a small map with the photo's position (and the site's position and the camera's facing direction, when known), the reverse-geocoded place (road, city/county/state), coordinates with a copy button, altitude, and the photo's distance and direction from the site (e.g. "120 m NE of the site"); photo grid tiles with a recorded heading show a small compass-direction chip. When a photo or video has no GPS of its own, NetOS shows the location and address of the site it belongs to instead -- the Location panel labels it From site address, versus Photo GPS for a file's own EXIF/SharePoint coordinates or Set by user after someone enters one by hand. A user with edit rights can open Edit on a photo or video, enter a latitude/longitude (or use Use my current position for the browser's own location) and save it -- this takes precedence over the inherited site location -- or click Reset to site location to drop the override and fall back to the site's address again. Document AI analysis summarizes key points, parties, important dates, financial terms, obligations, risks, action items, and search keywords.
The customer list is grouped first by customer type, then by state, then by city. Each level can be collapsed to navigate large commercial and MFC inventories.
Tenants. A commercial customer linked to a Property (its property_id is set) is a tenant: it carries only a service detail — service type, capacity, contracted MRR, and cost — and has no network components of its own. Service paths, PtMP nodes, RF links, and circuit endpoints all belong to the property instead, since they physically live at the building and often serve more than one tenant there. A tenant's detail page reflects this: the header subtitle and KPI row show which property it's a tenant of, and the Service tab shows the tenant's own service detail plus a read-only, collapsible Inherited from {property} section listing the property's infrastructure, RF links, and circuits — each linking through to its own page, with a Manage on property → Network link for anyone who needs to actually change something. Tenants don't get their own Service Paths table, PtMP Nodes panel, Electrical services, or MFC backup-path SOP banner; those are property concerns. Pickers that land a network component on a customer (RF link/circuit endpoints, subtended-link customer endpoints, PtMP node creation) exclude tenants from the customer list and show a "Tenants are listed under their property" hint — land the link on the property instead. Attempting to land one directly on a tenant is rejected with a message naming the property to use instead. Pre-re-home data can still have direct paths sitting on a tenant from before it was linked to a property; those show up in a collapsed Legacy direct paths section with an Absorb into property action (properties_edit only) that previews what would move before applying it.
Properties
URLs: /properties, /properties/new, /properties/{id}, /properties/{id}/edit
A Property is a commercial multi-tenant building — an office tower, a strip mall, a mixed-use development — that groups the individual commercial customer records ("tenants") who take service there, so the team can see how a whole building is doing rather than reading 19 separate customer rows. Properties group commercial customers only; MFC (multi-family/multi-tenant residential) customers are never linked to a Property, and MFC records keep using their own property_name/property owner/property manager fields exactly as before.
Property fields include name, nickname, property type (free text), status (active, prospect, or inactive), tenant count, suite count, floors, property owner, property manager, manager contact name/email/phone, access rules, notes, and a full address with coordinates. Address entry uses the same normalized-address suggestions and geocode-on-save behavior as customer and infrastructure records.
Rollups (computed live from linked tenants, not stored): a linked customer buckets into customers_active when its status is active, customers_prospect when it is prospect or installing, and customers_churned when it is inactive. Penetration % is customers_active ÷ tenant_count. Total MRR is the sum of contracted MRR across ACTIVE tenants only (prospects and churned tenants are excluded), with separate averages per active customer and per tenant. All MRR fields — on the property list, the property detail page, and each tenant row — come back blank/hidden for users who lack customer_financial_view; the operational rollups (tenant count, customer status counts, penetration %) are visible to everyone who can view properties.
Commercial rollup: landed cost and margin. A property also shows what it costs to serve, alongside what it earns. Landed cost (landed_cost_mrc_usd) is the sum of every circuit landing at the property (via a linked Endpoint) plus every RF link landing there (its MRC plus any tower rent) — the same links counted by the property's own circuit/RF-link counts. Margin (margin_usd) is Total MRR minus landed cost; Margin % is margin as a percentage of Total MRR (blank when Total MRR is zero rather than showing a divide-by-zero). All three come back blank/hidden for users who lack customer_financial_view, the same as Total MRR.
Photos, documents, links, and findings. A property carries its own site media, independent of its tenants' — a rooftop photo of the building itself, a signed access agreement, a SharePoint folder for the building's floor plans, a field finding about a locked gate. These live directly on the property (its own Documents, Links, and Findings panels, the same panels a customer or infrastructure record has) rather than being borrowed from a tenant. The property detail page also still shows Recent tenant photos (up to 24, newest first) pulled from linked tenants' own document libraries — that list is unaffected by the property's own documents and is not counted toward it.
Linking tenants. Only commercial customers can be linked, and a customer can belong to at most one property at a time. There are two ways to link:
- From the property page, the "Add tenants" picker suggests customers at the same address first, then customers sharing the property's postal code, then a free-text search; select one or more and link them in one action.
- From a commercial customer's own detail page, assign or change its property from the customer's aside card.
Unlink either from the property's tenant list or the customer's aside card; unlinking clears the customer's property_id but leaves the customer record and its history untouched.
Infrastructure links. A property can optionally link infrastructure assets located there (towers, POPs, rooftops) so the building's network presence is visible alongside its tenants. This is a simple nullable link on the infrastructure asset — an asset belongs to at most one property.
Tenants inherit the building's network. RF links, circuits, PtMP sectors, and subtended links can land directly on the property itself, not just on individual tenant customers — the property detail page's Network tab lists the property's own PtMP nodes and subtended links alongside its RF links and circuits. A subtended link landed on the property carries implicit revenue equal to the sum of every ACTIVE tenant's contracted MRR (the same way a subtended link landed on one customer carries that customer's contracted MRR), so a single wireless or fiber path serving a whole building attributes the building's combined tenant revenue without needing one subtended link per tenant. Because tenants inherit the property's network this way, NetOS blocks *new* attempts to attach a tenant customer directly to an RF link, subtended link, or PtMP node — the error names the property so the operator knows to land it there instead. Attachments predating this rule are left alone until an admin runs absorb tenant links (from the property page, requires both properties_edit and customers_edit): it previews every RF link, subtended link, and PtMP node still attached to one of the property's tenants, then — once confirmed — moves each one onto the property in a single operation, preserving any manual revenue/cost overrides. Running it again afterward finds nothing left to move.
Deleting a property is blocked with a 409 (showing the linked customer and infrastructure counts) unless you pass force, which unlinks every tenant and infrastructure asset first (writing an unlink audit row for each) and then soft-deletes the property.
Legacy property name. Commercial and MFC customers still carry a free-text property_name field from before Properties existed. Once a customer is linked to a Property record, the linked Property's name is authoritative; the property detail page lists any differing free-text names its tenants used as Legacy property names for reference during cleanup.
Audit trail. Creating, editing, or deleting a property writes create_property/update_property/delete_property audit rows on the property. Linking or unlinking a tenant writes link_customer_property/unlink_customer_property on the customer (visible in that customer's own audit history) plus one unscored summary row on the property. Linking or unlinking infrastructure writes link_infrastructure_property/unlink_infrastructure_property on the asset.
Points. Manually linking a tenant from the property page's "Add tenants" picker earns property.link_tenant (3 points), capped at 30 per user per day and paid at most once ever for a given customer + property pair — relinking or an admin bulk operation never re-pays it. Confirming (bulk) grouping proposals from the upcoming address-review tool (/properties/review) pays a single flat property.group_apply award per applied group instead, so approving a 19-tenant building once does not multiply into 19 separate awards. See Contributions & Rewards for the full points table.
Map. Properties with coordinates appear on the /map view as their own layer, alongside circuits and infrastructure.
Property detail page. The property page follows the same tabbed layout as infrastructure and customer detail pages: a sticky header (back link, name/nickname/type/status/address, verification chips, Edit/Add tenants/Add circuit actions, and a More menu with View on Map, Satellite view, and Delete), a KPI row (Penetration, Active customers, Total MRR, Landed cost, Margin, Avg MRR per tenant, RF links, Circuits, Photos), and page-level tabs — Overview (summary fields, notes, legacy property names, location), Tenants (the linked-customer table, including each tenant's service type/capacity, and "Add tenants" picker), Network (linked infrastructure, the RF links/circuits landing at the property, its service paths, and its PtMP sectors), Commercial (revenue and margin, plus a landed-cost breakdown per RF link/circuit), Site & Access (address and ownership/access details), Media (tenant photos today, with the property's own photo/document uploads landing in a later release), and Activity (the audit history). Each tab remembers the last one you had open per browser.
Service paths and PtMP sectors live at the building. Because a building's tenants share the same physical network, service paths (subtended links) and PtMP base/distribution sectors are recorded on the Property, not on individual tenants — see Tenants above. The Network tab's Service Paths card lists each subtended link serving the building (which facility it comes from, whether it rides an RF link or a circuit, and its revenue/cost/redundancy role), and its PtMP Sectors card lists the radios installed there. An admin Absorb into property action (properties_edit, exposed from a tenant's own Legacy direct paths section) moves any pre-re-home direct links off individual tenants and onto the property in one step, previewing the move before it's applied.
Reviewing proposed groups. /properties/review (properties_edit) runs an automated scan that proposes tenant groupings from existing commercial customer addresses — for example, spotting that 19 active commercial customers share one building's address under several spelling variants — and lets you confirm each proposed group by hand before anything is linked. Proposals are organized into tabs (Proposed, Needs review, Confirmed, Skipped, Applied, Stale); each proposal card shows its members with warnings (mismatched city/ZIP, address flagged as too far from the group, already linked elsewhere, and more) and lets you edit the suggested name, nickname, tenant count, and address, add or remove members, and pull a Nominatim address suggestion before saving. Use Confirm once a group looks right, Skip (with a reason) for one that shouldn't become a property, and Merge into… to combine two proposals that turned out to be the same site. Nothing links until you Apply a confirmed proposal (or use Apply all confirmed to apply every confirmed group at once) — applying creates (or adds to) the property, links every remaining member the same way a manual "Add tenants" link does, and pays one property.group_apply award for the whole group rather than one per tenant. Re-running the scan later only adds new candidates and flags proposals whose membership changed; it never resurrects a group you skipped or re-links anything on its own.
Alerts
URL: /alerts
Alerts collect records that need user cleanup. This is the first place to check when maps, topology, or attribution do not look correct.
Current alert categories include:
- Customers or infrastructure sites with address data but no coordinates
- Customers or infrastructure sites with no mappable address or coordinates
- Address line 1 values that appear to contain city, state, or ZIP data
- Circuits missing required endpoints
- RF Links missing an A site or Z site/customer endpoint
- MFC customers missing contracted MRR
Click an alert row to open the affected record, correct the data, and save it. The alert disappears once the record no longer matches the alert rule.
Circuit Detail
URL: /circuits/{circuit_id}
The single-circuit deep dive. Sections include:
Circuit Attributes
- Carrier circuit ID, carrier, service type, status
- Bandwidth, handoff type, purpose (backhaul, backup, DIA, customer dedicated, etc.)
- MRC, NRC, PO number, GL code
Contract & Renewal
- Contract term dates, renewal type (auto/manual/evergreen)
- Renewal notice window, decision deadline
- ETF formula and current estimated ETF value
- Price escalator details
Endpoints
- A and Z endpoint names, addresses, coordinates copied from selected infrastructure or customer sites
- Endpoint type derived from the selected site, such as tower, data center, POP, customer premise, or carrier hotel
Provider Info
- NOC phone number and escalation procedures
- Account manager contact
- Provider portal link (click to open carrier's management portal)
- Monitoring link editor for the exact LibreNMS, Grafana, or other monitoring URL
- Monitoring open button; circuits use a carrier circuit ID search link until an exact URL is saved
Documents & History
- Agreement upload/view panel
- Notes field
- Lifecycle event timeline (orders, installs, bandwidth changes, outages, renewals)
When to use: Validating a circuit before renewal, checking NOC escalation info during an outage, preparing a termination, or reviewing contract terms.
Import
URL: /import
Bulk-load customers, circuits, facilities, towers, rooftops, and data centers from CSV or XLSX files.
Import Workflow
| Step | Action |
|---|---|
| 1 | Choose the record type: Customers (the default), Circuits, or Infrastructure |
| 2 | Upload a CSV/XLSX file (or paste text into the AI free-form import box); NetOS auto-detects column mappings |
| 3 | Review the detected mapping and every staged row, each marked Valid or Invalid with its validation errors |
| 4 | Expand any row to edit its fields in place, then Save and Revalidate — no need to fix the CSV and re-upload |
| 5 | Choose which valid rows to import with the checkboxes (Select all valid / Clear) |
| 6 | Click Commit to import the selected valid rows |
| 7 | Existing circuits are updated by carrier + carrier circuit ID; infrastructure is updated by Xiber infrastructure label |
| 8 | Missing providers and circuit endpoints are auto-created as stubs |
Circuit Minimum Required Fields
carrier_name— the upstream providercarrier_circuit_id— the carrier's reference number
Circuit Recommended Fields
xiber_circuit_label, service_type, bandwidth_mbps, status, install_date, mrc_usd, nrc_usd, ban_id, billing_account, protocol_handoff, monitoring_url, contract_effective_date, contract_term_end_date, contract_initial_term_months, contract_renewal_type, contract_msa_terms_text, contract_etf_formula_text, a_endpoint_name, a_latitude, a_longitude, z_endpoint_name, z_latitude, z_longitude
For manual UI entry, prefer selecting existing Infrastructure or Customer sites instead of retyping endpoint addresses. The endpoint import fields remain supported for bulk onboarding and legacy records.
Infrastructure Required Fields
display_name— facility, tower, rooftop, data center, POP, office, or aggregation site namesite_type— use infrastructure site types such asdata_center,tower,rooftop,colo,pop,office, orother
Templates are available directly on /import: Circuit CSV, Customer CSV, and Infrastructure CSV.
Electrical utility services are not infrastructure assets. Add them from Electrical after the infrastructure or customer site exists.
See Data & Import Guide for detailed field specifications, validation rules, and API examples.
AI Assistant
NetOS includes an AI assistant drawer for users with the ai_assistant_use permission. The assistant is a draft helper, not an autonomous writer. Paste carrier notes, quote details, install notes, or other source text into the drawer, then prepare a draft for the active workflow.
The assistant supports draft creation for customers, infrastructure assets, RF links, and circuits. Select the draft type in the drawer, paste source material or instructions, and prepare a draft. Click Apply to active form to populate the matching active add/edit form, then review and save normally. The normal API validation, RBAC checks, field-level permissions, and audit logging still apply.
Recommended intake order is customer or infrastructure first, RF links next, and circuits last. Customers and infrastructure assets become selectable sites/endpoints for RF links and circuits, so creating them first produces cleaner circuit records.
The Import page also supports AI free-form import for customers, circuits, and infrastructure. Paste multiple records into the AI import box, preferably separated by blank lines, and NetOS will create staged import rows. These rows still go through the normal import preview, validation, row selection, and commit workflow before any records are created or updated.
For customer imports, the Import page can also use the configured customer research connector. Enter a property name, address hint, website, or rough notes in Customer site research. NetOS calls the server-side Sonar/MCP connector, stages one customer import row, and includes research notes/citations in the preview data when available. This is an enrichment aid only; the user must review and commit the customer row before anything is saved.
The assistant also accepts PDF documents such as carrier quotes, service agreements, or order forms. Upload the PDF, add any instructions or questions, and prepare a draft. NetOS extracts selectable PDF text first and falls back to OCR when needed. The response includes page-level source snippets for extracted agreement fields and a short list of questions for missing or ambiguous values. PDF uploads are temporary for assistant drafting and do not create or attach documents to inventory records unless the user later saves through the normal forms.
Cost fields are omitted from assistant drafts when the current user cannot view circuit cost fields. The assistant reports missing required fields so the user can complete the form before saving.
When configured with an AI provider, the assistant uses durable NetOS memory entries for explicit user preferences and organization rules. Memory is stored in NetOS, not in the browser, and is only created from explicit instructions such as "remember..." or "always...". If no provider key is configured or the provider is unavailable, the assistant falls back to the deterministic parser.
Map
URL: /map
Geographic visualization of the network portfolio.
What's shown:
- Circuit paths — lines from A endpoint to Z endpoint
- RF Link paths — wireless links from infrastructure assets to infrastructure or customer sites when both ends have coordinates
- Endpoint markers — dots at circuit termination points
- Infrastructure markers — facility icons for data centers, towers, carrier hotels, etc.
- Customer markers — customer sites with saved or geocoded coordinates
- Property markers — multi-tenant buildings (Properties) appear as their own layer, distinct from individual customer markers
- Color coding — lines colored by carrier/provider
- Line thickness — scaled by bandwidth
Interactions:
- Click a circuit line → popup with circuit summary and link to detail page
- Click an endpoint → popup with connected circuits
- Click an infrastructure marker → popup with facility details
Map data refreshes automatically after circuit, infrastructure, customer, RF Link, import, or subtended network changes made in the same browser session or another open NetOS tab. The map also refreshes when the tab regains focus. Customer and infrastructure addresses are geocoded when address fields are saved without manual latitude/longitude values; RF Links to customer endpoints render once the customer site has coordinates.
If an RF Link cannot be drawn, the map displays a coordinate warning above the map. The most common reason is a customer endpoint with no latitude/longitude after geocoding. Correct the customer address fields or enter coordinates manually, save the customer, and refresh the map.
Filters:
- Link source: Circuits, RF Links, or both
- Provider/carrier
- Link type: circuit service types and RF link types
- Facility type (data center, tower, colo, etc.)
- Status (active, ordered, decommissioned)
- Location / state
- Protected or unprotected customer sites
- Minimum and maximum link length in miles
Map filters support multi-select include and exclude behavior. Open a filter, choose one or more values, switch between Include and Exclude, or use Only beside a value to isolate it immediately.
Dashboard
URL: /dashboard
Portfolio-level analytics and KPIs.
Dashboard data refreshes automatically after circuit, infrastructure, customer, RF Link, electrical service, or subtended network changes made in the same browser session or another open NetOS tab. It also refreshes when the tab regains focus.
KPI Cards
| Card | Description |
|---|---|
| Total Circuits | All circuits in the system |
| Active Circuits | Circuits with active status |
| Infrastructure Assets | Non-circuit facility agreements |
| Circuit MRC | Total monthly circuit spend |
| Facility MRC | Total monthly infrastructure spend |
| Total Network MRC | Circuit + facility combined |
| Modeled MRR | Estimated monthly revenue* |
| Modeled Margin | Estimated margin percentage* |
| Renewal Window | Circuits within renewal decision window |
*\*Modeled MRR currently uses MRC × 1.35 as a demonstration multiplier. Production MRR will come from Sonar revenue attribution. See Infrastructure Attribution → Modeled vs. Real Revenue for which figures are modeled versus real.*
Panels
| Panel | Description |
|---|---|
| Spend by Provider | Bar chart of MRC by carrier |
| Service Mix | Circuit count by service type |
| Margin Distribution | Histogram of per-circuit margins |
| Renewal Pipeline | Circuits grouped by renewal state |
| Endpoint State Mix | Geographic distribution |
| At-Risk Circuits | Circuits with critical renewal state or low margin |
| At-Risk Infrastructure | Facilities approaching renewal deadline |
| Top 10 Expensive | Highest MRC circuits |
| Top Facility Costs | Highest MRC infrastructure |
| Lowest Margin | Circuits with worst margin performance |
Timeline
URL: /timeline
A contract-term Gantt chart for both circuits and infrastructure agreements.
What's shown:
- Horizontal bars representing contract start → end dates
- Install date markers
- Renewal decision deadline markers
- Today line (vertical red line)
- Color-coded by renewal state:
- Green — stable (>180 days to deadline)
- Yellow — watch (90–180 days)
- Orange — active (30–90 days)
- Red — critical (<30 days)
- Dark red — overdue (past deadline)
- Blue — decided
Timeline rows can be grouped by vendor, type, or status. Each group header is collapsible and shows item count plus MRC rollup so large renewal timelines can be scanned by vendor exposure or asset/service type.
Filters:
- Group by: carrier, service type, or status
- Carrier
- Type
- Renewal state
Click a circuit or infrastructure row to open its detail page.
Topology
URL: /topology
Network relationship graph showing how sites connect through circuits and RF Links.
Visual encoding:
- Nodes = canonical sites (sized by connection count, colored by type)
- Edges = circuits (colored by carrier, weighted by bandwidth)
- Dotted blue/teal edges = RF Links, grouped by link type
- Solid edges = circuits. Circuit service or carrier differences are shown by color, not dash pattern
- M / C markers = MFC and commercial customer sites
- Curved edges = parallel circuits between the same sites
- Dashed green node ring = protected customer site, such as RF plus a wireline circuit, two primary ring/diverse paths, or multiple customer-serving circuits where one is Broadband, DIA, secondary, or backup
- Infrastructure nodes = facility assets that circuit endpoints are linked to or matched by normalized site name
Topology is site-centric. When circuit endpoints are linked to Infrastructure or Customer records, NetOS renders one node for the site and draws all related circuit edges from that node. Older imported endpoint records are also matched to infrastructure assets by normalized site name when possible, so repeated endpoint rows such as multiple BSI Huntington circuit endpoints collapse into one larger site node with multiple logical links. Customer A-side circuit endpoints are also matched to customer records by selected customer, customer name, or property name so RF and wireline paths terminate on one customer site icon. Single-ended customer backup circuits, such as Broadband or Starlink records with only an A endpoint, are attached to the customer node for redundancy detection even when no topology edge can be drawn. DIA-only MFC sites are treated as primary until an additional backup path is present. Circuits with purpose backup are also treated as backup serving paths for customer protection.
SPOF Detection: The side panel highlights Single Point of Failure candidates — sites with only one network connection and no detected redundancy. Automatic protection detection is intentionally customer-scoped: aggregation, POP, data center, tower, or rooftop sites are not considered ring-protected merely because they have one upstream path and many downstream RF/customer links. Customer sites with RF plus wireline, two primary ring/diverse paths, or multiple customer-serving circuits where one is Broadband, DIA, secondary, or backup, are treated as protected and are not counted as SPOF candidates.
Layout modes:
- Logical — layered hierarchy with upstream/core sites higher and subtended aggregation/customer sites lower. Circuit A/Z direction is used as the primary hierarchy signal: A-side sites are treated as downstream and Z-side sites as upstream/donor where the circuit data follows the NetOS naming standard.
- Geographic — nodes positioned by approximate endpoint coordinates
Logical view uses a wide canvas and parent-grouped spreading so subtended sites stay visually under their donor structure. For example, BSI Huntington Center customer endpoints are grouped under BSI Huntington Center, while BSI US Bank Cincinnati customer endpoints are grouped under BSI US Bank Cincinnati instead of being mixed into one flat customer row. When a site has more than one upstream connection, NetOS chooses a primary visual parent for placement while still drawing the additional network links. Parents with larger downstream subtrees receive wider horizontal space, and each subtree receives a minimum lateral lane so adjacent donor groupings do not collapse into each other. Dense leaf groups wrap into multiple rows under the same parent instead of growing into one long horizontal row. If a downstream structure also has its own downstream customers, NetOS places that structure on the lower row beneath its donor before laying out its child endpoints, reducing crossed paths from intermediate aggregation sites such as Lamplighter. RF and circuit hierarchy direction is inferred from site rank and A/Z direction so core or donor sites remain above customer or subtended sites. After hierarchy placement, NetOS runs collision avoidance within each visual parent group and slightly staggers same-axis vertical chains so stacked elements do not appear to share a single straight-line path. Labels scale up modestly while zooming and use a white stroke behind the text, and parallel circuits between the same two sites are curved apart so redundant paths do not fully hide each other.
Interactions:
- Click a node → see attached circuits and RF Links
- Click an edge → see circuit or RF Link details and link to the related page
Topology filters use the same multi-select include/exclude pattern as the map. Use them to isolate or exclude link sources, providers, circuit/RF link types, statuses, facility types, protected or unprotected customer sites, and links within a minimum/maximum mile range.
Topology data refreshes automatically after network-shape changes to circuits, infrastructure assets, RF Links, customers, imports, or subtended links. Use the Refresh button when validating changes made by another user or process outside the current browser session.
Service Providers
URL: /providers
The carrier and provider database.
What's tracked per provider:
- Customer portal URL
- Label short name used for generated circuit labels
- NOC phone number
- Account manager (name, email, phone)
- Billing and legal contacts
- Escalation procedures
- Circuit count and total circuit spend
- Infrastructure count and total facility spend
- ETF exposure across all related contracts
Provider detail pages include tables of related circuits and related infrastructure assets.
Use Add Service Provider to create a provider record. Use Edit from a provider detail page to maintain portal URLs, label short names, NOC phone numbers, account manager contacts, legal/billing contacts, escalation paths, ASN, W-9 URL, and preferred payment method.
Vendor Quotes
URL: /quotes
Vendor Quotes is the intake workspace for inbound carrier and colocation quotes, used to capture pricing while sourcing a circuit and to convert the chosen quote into a circuit record.
Capturing quotes. You can add quotes three ways:
- Add Quote creates a blank draft row you fill in by hand.
- Extract reads pasted quote text into structured draft rows (vendor, reference, contact, service type, bandwidth, expiration, and one or more pricing options).
- Per-row file extract reads an uploaded quote file (for example a PDF) into the same draft structure.
Extraction uses the configured AI provider; the results are drafts you review and edit before saving. Each quote can hold multiple pricing options (term length, MRC, NRC, annual escalator) plus itemized line items, and colocation quotes add space/power components such as RU count, space MRC, power kW/MRC, cross-connect, included transit, and IX charges.
Comparing and tracking. Saved quotes appear in a filterable table with a status of draft, requested, received, under_review, declined, expired, or won. An aggregation view groups comparable quotes so competing vendor prices can be reviewed side by side.
Winning a quote. On a quote's detail page, the Win Quote panel lets you pick the accepted pricing option, optionally set a carrier circuit ID and a note, and click Win. NetOS then creates a new circuit from the quote — creating the carrier if needed, generating the circuit label, copying the A/Z endpoints, and setting MRC, NRC, and contract term from the accepted option — marks the quote won, and links it to the circuit it created. Winning a quote requires the quotes_win permission.
Infrastructure
URL: /infrastructure
Non-circuit network assets and facility agreements.
Asset types:
- Data centers
- Carrier hotels
- Colocation cabinets/cages
- Tower leases
- Rooftop rights
- Facility access agreements
What's tracked:
- Provider and facility name
- Monthly recurring cost (MRC) and non-recurring cost (NRC)
- Rack, cabinet, space, and power commitment details that are part of the facility agreement
- Contract term start/end dates
- Renewal notice window
- Agreement document links
- Monitoring URL for the exact facility, tower, rooftop, or data center monitoring page
- Access procedures and contact info
Electrical utility accounts are tracked separately under Electrical so utility service can attach to either an infrastructure site or a customer site without turning the utility account itself into a structure.
Infrastructure detail pages show an Electrical Services section when utility services are attached to that site. The section lists provider, service type, account number, meter number, electrical characteristics, delivery location, average monthly cost, monitoring link, and uploaded service documents.
The infrastructure detail page has a sticky header (back link, name, type/status, verification chips, and the primary actions — Edit Infrastructure, Add Circuit From Site, View on Map — with less-used actions such as Satellite View, Monitoring, Provider Portal, Portal credentials, and Agreement tucked under a More button) followed by a row of KPI tiles (MRC, cost classification, renewal state, RF links, PtMP sectors, subtended links, customers served, photos) so the headline numbers for a site are visible without opening anything.
Below the KPI row, the rest of the page lives in six page-level tabs — Overview, Network, Commercial, Site & Access, Media, and Activity — that replaced the old long single-column scroll of ~14 cards and the narrow right-hand aside. Working surfaces you edit often (Facility Detail, Facility Provider, Notes, Location on Overview; Subtended Network and PtMP Sectors on Network; the cost classification card on Commercial) stay expanded by default; reference-only cards you check occasionally (Upstream Paths, Related Circuits, and Attached Electrical Services on Network; Structure Financial Summary and Term & Renewal on Commercial; Access Procedure on Site & Access) load collapsed with a one-line summary — for example "ends 2027-03-01 · evergreen · notice 60 days" for Term & Renewal — and expand on click. NetOS remembers which tabs and sections you last opened per browser. The Media tab holds the same full-width site workspace tab strip as before — Photos & Documents, Links & SharePoint, Findings, and (when the site has any) Surveys, each labeled with its item count — and it still honors its own ?tab=photos|links|findings|surveys URL parameter (the page-level tabs use a separate ?view= parameter), so links elsewhere in NetOS (for example a finding's View site link) can open a site directly on the right Media sub-tab. The Activity tab holds the audit history that used to sit at the bottom of the page.
The Photos & Documents tab includes separate Photos and Documents views. Photos are intended for field photos and screenshots; documents are intended for floorplans, permits, invoices, service agreements, and other supporting files. Image uploads capture available metadata such as dimensions, EXIF captured date/time, GPS coordinates (including camera heading/compass direction and altitude when recorded), camera/software hints, and file size. Document uploads are also processed for searchable AI summaries when text can be extracted from the file. Before a photo is sent to the AI vision model, NetOS downscales it (longest edge capped, re-encoded as JPEG under a size cap) so large camera photos are never skipped -- the original file on disk is untouched. When the AI provider is configured, NetOS saves uploads immediately, marks analysis as pending, and analyzes photos and documents in the background so users can continue working. If AI is not configured or unavailable, the uploaded file still saves and metadata is retained. NetOS auto-generates concise titles for untitled image uploads, supports photo folders, uses cached thumbnails in the gallery, paginates large photo sets, and supports previous/next navigation in the image viewer. The photo and document galleries can be searched by filename, title, user notes, AI summary, visible equipment, detected text, recommended follow-up, document key points, parties, dates, financial terms, obligations, risks, action items, and search keywords. Users can open an image or document and choose Re-run AI after updating AI settings or adding clearer notes. When a photo has GPS coordinates, its viewer also shows a Location panel: a small map, the reverse-geocoded place, coordinates with a copy button, altitude, camera heading, and the photo's distance/direction from the site. When a photo or video has no GPS of its own, NetOS shows the location and address of the site it belongs to instead -- the Location panel labels it From site address, versus Photo GPS for a file's own EXIF/SharePoint coordinates or Set by user after someone enters one by hand. A user with edit rights can open Edit on a photo or video, enter a latitude/longitude (or use Use my current position for the browser's own location) and save it -- this takes precedence over the inherited site location -- or click Reset to site location to drop the override and fall back to the site's address again.
The infrastructure list is grouped by BTA market state, BTA, and then city. BTA groups place smaller cities into the larger metro market they operate around, such as Columbus, Cincinnati, Dayton, Lexington, or Indianapolis. Cross-state suburbs are consolidated into the parent metro market, such as Newport, KY under OH / Cincinnati BTA. Each state, BTA, or city group can be collapsed, and group headers show asset count and monthly recurring cost rollup.
Subtended links and economics:
- Customer endpoints served by the structure
- Child facilities subtended by the structure, such as towers fed by a data center or aggregation site
- Related circuits used as transport for the subtended relationship
- Direct revenue, direct link cost, facility cost, downstream revenue, downstream cost, total margin, and margin percentage
- Effective dates for relationship changes, so historical attribution can be preserved
The Subtended Network section has three add modes:
| Mode | Use When |
|---|---|
| Attach existing circuit | A circuit already exists in NetOS and should be associated with the current infrastructure asset. Select the circuit; NetOS creates the relationship to this site and calculates link cost from the circuit MRC when possible. |
| Add customer endpoint | The site directly serves a revenue-producing customer, subscriber, building, or endpoint. Enter customer/endpoint name and revenue MRR. Tick Redundant / backup link when this facility provides a backup path for a customer already served primarily from another facility — see Redundant / Backup Links under RF Links. |
| Attach downstream structure | Another tower, rooftop, POP, data center, or facility rolls up to this asset. Select the downstream structure and optionally link the transport circuit. |
Existing subtended network rows can be edited inline. Use the edit action to change the customer/endpoint label, downstream structure, related circuit, relationship type, transport type, direct link allocation method, inherited cost allocation method, effective dates, revenue, cost override, or notes. The list shows inherited cost attribution and the calculated inherited cost applied to each row. The inherited cost balance shows the shared monthly cost pool, assigned inherited cost, fixed/manual assigned cost, calculated assigned cost, and any unallocated balance. Manual percentage and direct inherited allocations consume the pool first; calculated methods assign only the remaining pool. If multiple fixed rows request more than the available pool, the row most recently changed keeps precedence and older fixed rows are capped to the remaining balance. If a manual adjustment leaves a balance, use Assign Remainder Pro-Rata or Assign Remainder Equally to save explicit manual percentages on the other calculated rows. The form shows calculated previews for direct link cost and a live inherited cost calculator that updates after each form change. The inherited calculator compares revenue pro-rata, equal share, manual percent, and direct/full assignment before the user saves. It uses the parent site's shared inherited cost pool, including upstream donor-chain cost after applying upstream allocation rules. For downstream structures, the calculator uses the downstream rollup revenue as the revenue basis. Parallel transport rows to the same downstream structure or customer count that revenue target once for inherited allocation. If a future direct allocation method such as bandwidth share is selected before its driver fields are available, NetOS uses the full linked source MRC rather than dropping the path cost to zero. Inherited cost allocation defaults to revenue pro-rata. Use delete only when the relationship was created by mistake; for real historical relationship changes, prefer setting an effective end date and creating the new relationship.
For redundant downstream connectivity, add the same downstream structure more than once from the same parent, with a distinct related circuit or RF Link for each path. NetOS keeps the downstream structure's revenue and facility cost counted once while summing the cost of each active transport path. The same downstream structure still cannot be actively attributed under two different parent sites at the same time unless the existing relationship is ended.
Use the infrastructure detail page to model how revenue and expense roll through towers, rooftops, data centers, POPs, and aggregation facilities. See Infrastructure Revenue & Expense Attribution for the full attribution model, examples, and waterfall reporting approach.
Financial fields on circuit and infrastructure forms include contextual documentation links. Use those links when deciding whether a value belongs as circuit cost, direct facility cost, direct subtended-link revenue, calculated shared transport cost, or a manual override.
Site links and SharePoint ingest
Infrastructure and customer detail pages both show a Links & SharePoint tab in the site workspace tab strip below the summary. It holds pointers from that site to external resources: a SharePoint document library folder, a OneDrive personal folder, a Teams channel, or any other URL.
You only see what you yourself have access to. Browsing and ingesting act as *you*, the signed-in user, using your own Microsoft 365 sign-in — not a shared NetOS-wide service account. If a folder isn't shared with you in SharePoint, it won't show up here either, and files you ingest are recorded as pulled under your own access. If NetOS reports "Sign in through NetOS SSO to browse SharePoint as yourself," your session isn't carrying a Microsoft sign-in the way this feature needs — sign out and back in through the NetOS SSO link, or ask an admin to check the Microsoft Graph connector under Admin → Integrations.
Adding a link:
- Click Add link, paste the URL, optionally set a label and notes.
- Click Check to preview how NetOS will treat the URL — it reports the resolved folder name when the Microsoft Graph connector is configured and reachable.
- Click Save. NetOS infers the link type from the URL (a
sharepoint.comhost becomes a SharePoint folder link, a-my.sharepoint.comhost or a/personal/path becomes a OneDrive folder link,teams.microsoft.combecomes a Teams channel link, anything else is a plain URL) and, for SharePoint/OneDrive links, resolves the folder's drive/item ids in the background so it can be browsed later. If resolution fails (or the connector isn't configured yet), the link still saves — a warning explains why browsing isn't available yet.
Users with edit access can edit a link's label, URL, and notes, or delete it. Editing the URL re-resolves the folder ids.
Browsing and ingesting files:
A SharePoint or OneDrive link that resolved successfully shows a Browse button. Browse opens a folder view with breadcrumb navigation, file size, and last-modified date. A List/Grid toggle in the top right (remembered per browser) switches between the compact list and a thumbnail grid; grid view fetches image/PDF/Office thumbnails from Microsoft Graph and falls back to a plain file or folder icon when a file has no thumbnail or the thumbnail fails to load. Files already ingested as a site document are shown with an Ingested badge and cannot be selected again. Select up to 25 files at a time, optionally set a photo folder (for image files) and a comment, then click Ingest.
Ingested files are copied into NetOS as site documents — the same photos/documents shown in the Site Documents panel — with metadata extraction, an auto-generated title, and background AI analysis exactly like a direct upload. Each ingested document carries a small SharePoint badge that links back to the file's location in SharePoint/OneDrive. Files the connector can't read (disallowed type, transient Graph error) are reported as errors instead of silently skipped; folders and already-ingested files are reported as skipped.
Browsing and ingesting normally work automatically once you're signed in through NetOS SSO — no separate setup on your part. If your organization hasn't finished that rollout yet, an admin can instead enable a shared (tenant-wide) fallback under Admin → Integrations; ask them if you see the sign-in message above and believe you should already have access.
Infrastructure Bulk Actions
Use the checkboxes in the first column to select one or more infrastructure assets. The header checkbox selects all visible rows.
| Action | What It Does |
|---|---|
| Apply | Bulk-updates selected assets using only the filled fields |
| Delete | Soft-deletes selected assets after confirmation |
Bulk update fields currently include status, provider, site type, MRC, escalator %, term end, and notes.
Findings
URL: /findings (global list); also shown as a Findings tab (with an item count) in the site workspace tab strip on each infrastructure and customer detail page, alongside Photos & Documents, Links & SharePoint, and (when present) Surveys. Linking to a site with ?tab=findings (as the global findings list and a finding's View site link do) opens that site directly on the Findings tab.
A finding is a field issue recorded against a site — corrosion on a battery terminal, a grounding gap, a broken gate lock, missing labeling, and so on. Each finding belongs to exactly one site (an infrastructure asset or a customer), carries a severity (Info, Low, Medium, High, Critical) and a status (Draft, Open, Shared, Ticketed, Resolved), an optional free-text category (suggestions include Power / Batteries, Structural, Grounding, Access, Equipment, Safety — or type your own), a narrative, technician notes, and any number of evidence photos/documents drawn from that site's existing Photos/Documents.
Creating a finding from photos:
- On a site's Site Documents panel, click Select to enter selection mode — a checkbox appears on each photo/document thumbnail.
- Select one or more photos, then click Create finding from N selected in the floating action bar that appears.
- The finding composer opens with the selected photos as evidence. Add any user notes describing what you observed.
- Click Draft with AI to have NetOS write a title, severity, category, and narrative from the selected photos' existing AI analyses plus your notes — this does not re-analyze the photos or send image data anywhere, it only reads each photo's already-computed AI summary, so it works even with a text-only AI provider. Review the draft: every field is editable, and the draft shows a few evidence bullets per photo and a recommended-actions list.
- Edit anything you like, then click Save Finding. NetOS opens the new finding's detail page.
You can also start a finding from scratch: the Findings card on a site's detail page has a New finding button that opens the same composer with a photo picker instead of a preselection.
If no AI provider is configured (or the AI call fails), Draft with AI still fills in a title, a Medium severity, and a narrative built by concatenating each selected photo's summary, safety/access concerns, and recommended follow-up — the draft is labeled "deterministic" and a warning explains why AI wasn't used.
Finding detail page (/findings/{id}): edit the title, severity, status, and category inline (status and severity are dropdowns for anyone with finding-edit access); edit and save the narrative and user notes independently; click Re-draft with AI to regenerate the narrative and category from the current evidence and notes (this replaces the narrative below after a confirmation — it does not merge with your edits); view evidence photos in a lightbox with previous/next navigation; and read the AI's evidence bullets per photo and its recommended actions. Setting status to Resolved stamps who resolved it and when; changing away from Resolved clears both.
Sharing a finding (Email / Teams / Slack / Sonar ticket). The Actions card on a finding's detail page has a button per channel (visible if your role can share findings / create Sonar tickets); clicking any of them opens the same Share finding dialog with a tab per channel:
- Email — add recipients (type a name to search the company directory, or type a full email address and press Enter); optional Cc; the subject is prefilled from the finding's severity/site/title but editable; an optional personal note is prepended to the message; an Include photos checkbox; and two send buttons, Send and Save as Outlook draft (draft is only available when the Xiber gateway connector is configured — see Admin Operations). When NetOS can route the email through the gateway, it lands in *your own* Outlook Sent Items (or Drafts), but the gateway can't attach files, so photos ride along as clickable links back into NetOS (which require you to be signed in to view) instead of as attachments; if NetOS instead has to fall back to its own SMTP relay, photos are attached as real files.
- Teams — pick a team, then a channel (channels load once a team is selected), plus an optional note.
- Slack — type a channel name (with or without the leading
#), plus an optional note. - Sonar — search for an assignee, optionally set a ticket group ID, pick a priority (defaulted from the finding's severity — Critical→CRITICAL, High→HIGH, Medium→MEDIUM, Low/Info→LOW), edit the prefilled subject, and add an optional extra note. A one-line summary confirms what will be created before you click Create ticket. If the finding already has a ticket, the button reads Create another ticket and asks you to confirm before making a second one.
Sending successfully updates the finding's status to Shared (or, for a Sonar ticket, Ticketed, and the finding then shows a small ticket icon with the ticket number — also visible on the global findings list and a site's Findings card). Every attempt — success or failure — appears in the Activity list below the Actions buttons: channel, sent/failed status, who requested it, when, a link to the message/ticket when one is available, and the error text for a failed attempt. A failed send does not change the finding's status, so you can fix the problem (recipient, connector configuration, ...) and try again.
Comments: anyone who can view a finding can also comment on it. Comments show the author and a relative timestamp; you can edit or delete your own comment (an admin with Edit Settings access can moderate anyone's).
Global findings list (/findings): filter by status, severity, and site name; each row links to the finding and its site, and shows a small ticket icon next to the title once a Sonar ticket has been created from it.
Electrical
URL: /electrical-services
Electrical services are utility cost items attached to an existing infrastructure asset or customer site. Use this section for commercial power, house power, dedicated meters, generator service, solar, battery backup, or other site electrical obligations.
Tracked fields include service provider, attached infrastructure or customer site, account number, meter number, service type, voltage, amperage, phase, delivery location, service address, average monthly cost, start date, monitoring URL, and notes.
Documents can be uploaded per service, including sample bills, invoices, service agreements, meter photos, and supporting documents. These documents help explain the recurring utility cost used in site and customer financial views.
Electrical service cost should be treated as an add-on cost to the site it serves. Do not create a separate infrastructure asset for an electrical utility account unless the physical asset is actually a facility, POP, tower, rooftop, office, or data center.
Attached electrical services appear on the related Infrastructure or Customer detail page so users can see utility services with other related circuits, RF Links, serving paths, and documents.
Financial / P&L
URL: /financial
The financial view provides portfolio spend and modeled P&L analysis.
Financial data refreshes automatically after circuit, infrastructure, customer, RF Link, electrical service, or subtended network changes made in the same browser session or another open NetOS tab. It also refreshes when the tab regains focus.
What's shown:
- Wholesale MRC
- Modeled MRR
- Monthly margin
- ETF exposure
- Carrier spend rollup
- Per-circuit P&L table
- Hierarchical attribution drilldown with row-level revenue and expense flow detail
In the hierarchical attribution drilldown, expand a row to see where the economics come from. Revenue items are labeled Rolls Up when customer or downstream structure revenue contributes upward to the serving structure. Expense items are labeled Flows Down when transport or path cost is assigned from a donor or parent relationship into a downstream structure or endpoint. Direct facility cost is labeled Local because it belongs to the structure itself.
Current limitation: Modeled MRR uses a sample 1.35x multiplier until Sonar revenue attribution is connected.
Address Lookup
URL: /address
Search for circuits by address, endpoint name, city, state, carrier, or circuit ID.
What's shown:
- Matching circuit count
- Carriers serving matched locations
- States represented in the match set
- Matched MRC
- A/Z endpoint address summaries
Contributions & Leaderboards
URLs: /contributions, /leaderboards
NetOS quietly recognizes the work of keeping shared network data complete, accurate, and fresh. See Contributions & Rewards for the full design and points table.
How points show up. After you upload a site photo or document, create or resolve a finding, add a SharePoint/OneDrive link, or fill in/correct a record's important fields, a quiet banner appears in place: green ("+15 points · Site photo with GPS, heading, and caption") when points were awarded, amber ("0 points · Looks like a near-duplicate of an existing photo") when the action didn't qualify. The banner explains what earned points and, when something more would have paid extra, an improvement hint ("Add a caption for +2"). It clears the next time you take an action. Circuits, RF links, PtMP nodes, electrical services, and subtended links earn points the same way — creating or filling in one of their important fields (carrier circuit ID, monitoring URL, frequency, azimuth, account number, and so on) scores just like an infrastructure or customer record does, and uploading an RF link or electrical service document scores like any other site document. Property records earn the same way (creating a property or filling in its important fields), and manually linking a tenant from a property's "Add tenants" picker pays a small property.link_tenant award once per customer + property pair.
My Contributions (/contributions): your level and a progress bar to the next one, lifetime and monthly points, your rank this month, the badges you've earned (and the locked ones you haven't, with their criteria on hover), and a history table of every scored contribution — date, what it was, points (withheld entries show 0 with a reason chip like "Near-duplicate photo" or "Too many edits today"), the explanation, a link to the record when you have permission to view it, and an improvement hint where one applies.
Leaderboards (/leaderboards): an Individuals/Teams toggle and a monthly/all-time toggle. Individuals view lists rank, name, team (see below), points, a per-category breakdown, a category filter, and a team filter select. Teams view ranks functional teams — NetOS-managed groups an admin assigns (Project Management, Field Operations, Break/Fix, Transmission Engineering, Executive, Engineering, Xperts, Billing by default) — by total points, with columns for members (everyone assigned, whether or not they contributed this period), avg points per member, contributing members, and a "Rank by: Total | Avg per member" toggle. Users with events but no team appear in a standing "Unassigned" row pinned to the bottom. Two side cards highlight the month's most-improved contributor and most-improved team. Only names, points, and counts are shown — never restricted record details. Click a name to see exactly what they contributed: their level, badges, totals by rule and category, a 90-day activity calendar, and a full history of every contribution event with a link to the exact record or photo it touched (subject to your own view permissions, same as everywhere else); the header shows their team as a pill next to their name.
Functional teams are deliberately separate from department, which is synced automatically from Microsoft 365/Graph (see Recognition admin below) and still shown for reference on individual rows and profiles — a team is something an admin assigns by hand under Admin → Users & Roles, a department is whatever HR has on file in Entra.
Dashboard card: the Dashboard (/dashboard) opens with a "Top contributors" band showing the top five people for the month (switchable to all time), a compact "Top teams" line (top 3 functional teams by points), plus the most-improved line, with a button to the full leaderboard. It appears only for users who can view contributions. Service/integration accounts never appear here and never earn points.
Contribution drilldown (/contributions/users/<id>): click a name on the leaderboard, the dashboard's Top Contributors card, or an admin Audit row to open that person's full contribution history — their level, lifetime and monthly points, streak, earned badges, a 90-day activity strip, and totals by rule. Every scored event is listed underneath, grouped by day, with the rule and points (withheld events shown muted with their reason), a link straight to the record or photo the event was about (with a thumbnail when it's a photo), and a link to the site it belongs to. Events for a record or photo that's since been deleted show a "Deleted" pill instead of a dead link, but still link to the site. Filter the history by rule, status, or date range, and use "Load more" to page through it. From your own Contributions page, "View my full history" opens this same view for you.
Levels are recognition only — they never grant permissions. Points accumulate automatically from ordinary work; there's nothing extra to do.
Confirm this record. On infrastructure, customer, provider, and circuit pages, a small chip row near the title shows "Contributed by \<name\> · \<date\>" and either "Verified by \<name\> · \<date\>" or "Unverified." Anyone who can edit that kind of record can click Confirm — optionally add a note — to say "I checked this and it is correct." The same chip and Confirm button appear per photo in the site documents viewer. You can't confirm your own last change, and confirming the same record or photo again is limited to once every 90 days. Confirming earns you points; if your confirmation is the first independent check of someone else's contribution, they get a corroboration bonus too, shown in their own history. Just below the chips, "Add coordinates (+8)"-style Next actions chips point out the record's most valuable missing fields and link straight to editing them.
Missions. The Contributions page shows 3–5 live missions generated from real data gaps ("Add coordinates to 40 customer sites," "Update NOC phone for 12 providers") with a 1.5x point multiplier while active, an overall progress bar, your own progress, and a "Find records" link. Missions disappear once their target is reached — everyone who contributed to it earns a Mission Complete badge for that mission. Two missions cover Properties: customers_missing_property targets commercial customers at addresses shared by two or more other customers that are not yet linked to a Property (jump to /customers?unassigned=true), and property_missing_tenant_count targets properties that don't have a tenant count entered yet.
Rewards. A Rewards card on the Contributions page shows your available reward points (a separate balance from lifetime/monthly points — it never decreases except when a milestone is redeemed), a progress bar to the next milestone, this month's redemption cap, and a list of your redemptions with a status chip: eligible, processing, delivered (with a link to the bonus in Bonusly), held (with the reason — an open flag or the company budget being reached this month), or failed. Until the reward program is funded and turned on, the card simply notes: "Rewards accrue now; payouts start when the program is funded." Reaching a milestone never requires anything extra — it happens automatically from a nightly sweep of your existing contribution points.
Mobile / Field
URL: /mobile
A phone-friendly circuit lookup for field teams.
Actions:
- Search by circuit, carrier, city, or status
- Tap NOC to open the phone dialer when a provider NOC number exists
- Tap Copy ID to copy the carrier circuit ID
- Tap Map to open directions from endpoint coordinates or address
Admin Queue
URL: /admin
The Admin page contains the user activity audit trail and the bug/feature queue.
Bug & Feature Queue
Users submit requests from the feedback form. Admins can manage each request with:
| Field | Values |
|---|---|
| Priority | low, normal, high, urgent |
| Status | new, triaged, planned, in_progress, done, declined |
Each request has a Progress thread. Add updates when work starts, when a fix ships, or when more information is needed. Public progress comments attempt to email the requester when SMTP is configured.
Audit Trail
The Recent Activity table shows user, role, event, entity, changed fields, IP address, and timestamp. Times are displayed in Eastern time with the timezone label. Until SSO is fully enabled, direct demo traffic falls back to dev@xiber.com.
Recognition (Super Admin only)
A Rules table for every scoring rule (base points, per-user and per-record daily caps, current version); editing and saving writes a new version rather than changing history, and the engine picks it up on the very next scored action. An Audit search over the contribution ledger (by user, rule, status, entity, or date range) with a Reverse action — enter a reason and it writes a mirrored negative entry, updates the contributor's reputation, and never touches history in place. A Flags queue for edit_farming, near_duplicate_burst, and reciprocal_verification reviews, each resolvable with a note.
A Missions tab lists every active/completed mission with its progress, a Generate now button (creates missions from any gap type with enough candidates and no existing active mission of that type — also runs daily on its own), an Add custom mission form (pick a gap type, optionally narrow by state), an Archive action, and a Sync departments button that pulls department names from Microsoft 365 (via the Xiber gateway connector) so each person's department shows up for reference on the leaderboard and their profile — also runs weekly on its own. This is separate from functional teams (assigned by hand under Admin → Users & Roles — see Authorization & RBAC), which drive the leaderboard's Teams view. See Admin Operations for the monthly recognition email settings.
A Rewards tab holds the settings form (milestone size, reward units per milestone, per-user monthly cap, company budget, fulfillment mode, giver account, hashtag, and the payouts-enabled toggle — every number labeled as an adjustable assumption), a budget meter for the current month, a status-filterable redemptions table with Hold, Release, Retry, and Mark delivered actions, an Export CSV link for batch fulfillment, and a Sweep now button that runs the nightly job immediately. See Admin Operations for the full Bonusly connector setup steps.
An Insights tab shows the program's success measures as KPI tiles: completeness (infrastructure with coordinates and a recent photo, customers with contact and coordinates, providers with NOC phone and an account manager), accuracy (corroborated share, reversal rate), freshness (share touched or confirmed in the last 180 days), and participation (distinct contributors this month, share of active users contributing, contributors below level 3 who appeared on the board) — with the raw submission count shown last, in small print, never as a headline number.
Planned Views
These routes or capabilities are planned but not complete:
| View | Planned Functionality |
|---|---|
| Exports | Filtered CSV, XLSX, and PDF export of any view's data |
Roles & Permissions
| Role | Can View | Can Edit |
|---|---|---|
exec | Everything | Everything |
finance | Everything | Financial fields, contracts |
network_eng | Everything | Technical fields, endpoints |
operations | Everything | Operational fields, lifecycle events |
pm | Everything | Project-related fields |
sales | Everything | Sales-related fields |
read_only | Everything | Nothing |
agent | Filtered by MCP tool scope | Via confirmed MCP write tools |
*Note: The current dev build uses a header-based auth shim. Production will enforce roles via Microsoft Entra group membership.*
Properties are gated by two permissions: properties_view (granted to every operational role, including Read-Only User and Field Technician) and properties_edit (granted only to Super Admin, Project Manager, and Network Engineer).
