A complete walkthrough of the rewritten Field Inspection application — every screen, every panel, and every workflow a field inspector needs to get the job done in the field.
Field Inspection is a cross-platform mobile inspection management application built for code enforcement officers, permit inspectors, and municipal inspection staff. It brings the complete property inspection workflow out into the field, with full offline support and automatic background synchronization when connectivity returns.
The central property record. Every inspection, complaint, permit, and document hangs off a parcel.
Complaints, Periodic Inspections, Permit Applications, and Permits. Each with their own workflow and linked items.
Built on .NET MAUI — one codebase runs on Android, iOS, Windows, and macOS with identical functionality.
A local SQLite database, request queuing, and background sync keep the app running anywhere — even in the basement of a condemned building.
The first time you open Field Inspection, the app walks you through three quick steps: configuring the server, signing in, and loading your reference data. Once you're past these, the app drops you straight onto the calendar and you're ready to work.
When the app can't find saved server settings, it shows the Server Configuration screen. This is where you point the app at your agency's Field Inspection server.
192.168.50.13).8888, or 443 if SSL is turned on).Red warnings appear if the host is missing or the port is out of range. Tap Save and the app tests the connection — you'll see "Testing connection..." and then either a success confirmation or an error message with instructions on how to recover.
Once the server is configured, the Sign in to your account screen appears. Enter your credentials:
Both fields are required. If your credentials don't match or the server is unreachable, an error message appears in red and a loading spinner lets you know when authentication is in progress.
If you type b********** as the username, an Impersonate User dropdown appears. This is a two-step admin flow — the first login uses the "User List" password to fetch the list of users, and a second login as your selected user completes the process. An info icon on the screen explains the details when tapped.
If your session times out while you're working, a Session Expired dialog appears over the current screen with the same Username and Password fields. A dark overlay behind the dialog makes it clear that everything else is paused until you sign back in.
Unlike the regular login screen, the Re-Login dialog has no Close or Settings buttons — you must sign back in to return to your work. The back button is disabled here for the same reason. Once you successfully re-authenticate, the app drops you right back where you left off.
After successful sign-in, the Loading Page takes over while the app gets itself ready. You'll see the Field Inspection logo, a blue activity spinner, and two status lines that update as each step completes:
| Status Message | What's Happening |
|---|---|
| Initializing database... | Preparing your local SQLite store. |
| Checking data... | Verifying that reference data is present. |
| Downloading reference data... | On first run only — pulls the list of inspectors, codebooks, and lookup values. |
| Loading calendar... | Building the month view for today's date. |
| Starting background services... | Bringing up the sync service and connectivity monitor. |
| Ready! | Off to the Calendar. |
If any step fails, a red error section appears with two buttons: Retry (run the step again) and Check Settings (go back to the Setup page). A typical error reads "Unable to connect to the server. Please check your internet connection and server settings."
The Calendar is your home base. Every scheduled complaint, periodic inspection, permit, and permit application shows up here on the day it's due. Tap a day to see the cards for that day, tap a card to drill into the parcel, or use the search bar up top to jump directly to any property.
The calendar displays the current month in a 7-column grid (Sunday through Saturday), showing 5 or 6 rows depending on the month. Each day cell shows the day number and colored badges for any inspections scheduled that day.
Above the grid you'll see the month/year title (e.g. April 2026) and four colored filter pills. Tap any pill to hide or show that record type on the calendar:
A — Permit Applications P — Permits C — Complaints PI — Periodic Inspections
When you tap a day on the calendar, a sliding panel opens on the right side showing every inspection scheduled for that date. Each inspection appears as a card with all the key details you need at a glance.
The search bar at the top of the Calendar lets you find any parcel in the system by a number of different criteria. The input fields change depending on the search type you've selected:
Results open in a centered modal with a blue header listing the columns: SBL, Name, Number, Address, Municipality, and Owner. Selected rows highlight in light blue, and a spinner appears briefly while the app loads the parcel you've chosen. The footer shows the total count (e.g. "42 results"). If nothing matches, you see a magnifying glass icon and the message "No parcels found".
In the top-right corner of the Calendar sits the Inspector Selector — a white box with a dark blue avatar circle (showing the current inspector's initials), the inspector's name, and a dropdown chevron.
Tap it to open a modal list of every available inspector. A blue checkmark badge sits on the currently selected one. Pick a different inspector and the calendar immediately refreshes to show only their workload. If no one is selected yet, the avatar shows a ? and the placeholder reads "Select Inspector".
Tapping the history icon on the left side of the Calendar toolbar opens the Recent Parcels popup. It lists the parcels you've recently accessed so you can jump back to any of them in a single tap — a real time-saver when you're bouncing between properties on the same block.
When you haven't opened any parcels yet, the popup shows a clock icon with the empty-state message "No recent parcels — Parcels you access will appear here". An X button in the top-right closes the popup.
The sync / download icon on the right side of the Calendar toolbar opens the Check for Updates dialog. Use this any time you want to pull the latest data from the server without waiting for the next automatic sync cycle. You'll see two options:
A Cancel button at the bottom right dismisses the dialog without doing anything.
When you open a parcel — either by tapping a calendar card or selecting a search result — you land on the Parcel Detail page. This is where the bulk of your inspection work happens. It's a sliding three-panel layout that shows the parcel's static info on the left, its records in the middle, and whichever record you're currently editing on the right.
To move between panels you simply swipe horizontally. The app uses velocity-based snapping, so a quick flick moves you to the next panel even if you didn't drag all the way. Edge resistance keeps you from overshooting the first or last panel.
The Parcel Info panel is where you see at-a-glance details about the property itself. At the top, two read-only sections display the key identifiers:
Below that, three tabs let you switch between Contact, Attribute, and Doc. The Contact tab is selected by default. A gradient blue underline shows which tab is active.
Each attribute appears as a card with:
Attributes are read-only by default. If editing is allowed for the current parcel, an Edit button appears in the header. A "Saving..." status and spinner show while changes are being persisted.
Contacts are listed as selectable boxes. Each shows the contact's name (bold) and type (italic — Owner, Tenant, Manager, etc.) with a small arrow on the right. Tap a contact to select it — a brief spinner confirms loading:
A + Add New button at the top-right opens the Add Contact flow (covered in the Sub-Entries section further down).
Documents are listed as clickable boxes with the file name and a > indicator. A + Add button at the top-right lets you attach new files. Tapping a document downloads it if it's not already cached (with a progress overlay) and then opens it in the default app for that file type. Subsequent taps open the cached copy immediately.
If no contacts, attributes, or documents exist for a parcel, the tab shows a centered "No [type]" message in italic gray.
The middle panel organizes every record attached to the parcel into four collapsible sections:
Permit Applications Permits Complaints Periodic Inspections
Each section has its own colored header, a count badge, and an expand/collapse chevron. The Complaints section also has a + Add button for creating a new complaint on the fly. Tapping a record selects it and loads its detail panel to the right.
Two folder-style tabs at the top of the panel switch between Current (the most recent/active records) and Historical (older, closed-out records). Both tabs share the same layout so you can compare a parcel's current state against its past. Historical records are typically read-only for reference.
If a section contains more records than fit on one page, pagination controls appear below the list — ◀ Previous and Next ▶ buttons with the current "Page X of Y" shown in the middle. Buttons are automatically disabled when you reach the first or last page.
When you tap a record from the middle panel, its Detail Panel slides in from the right. There are four different detail panels — one for each record type — and they all share the same overall pattern: a header with Save/Print buttons, a set of core fields at the top, and tabbed sub-sections (Contact, Violation, Action, Doc, and so on) at the bottom.
Used to document and track property-related complaints from the time they come in until closure. This is the core workflow for code enforcement and citizen complaint management. From within a complaint you can add inspections, violations, and follow-up actions without ever leaving the panel.
Below the core fields, these tabs let you work on everything linked to the complaint:
Contact Approval Inspection Violation Action Attribute Doc Note
A green Save button sits in the header. A Print Form button lets you generate a PDF of the complaint. The Save button is only enabled when all required fields are valid.
Used to record scheduled, routine inspections of a property. Inspectors use this to work through digital checklists, document what they found, and log violations or corrective actions.
Contact Checklist Violation Action Attribute Doc
The Checklist tab is unique to Periodic Inspections — that's where you'll work through each individual inspection item and mark its status.
In addition to the standard green Save button, a blue Reschedule button appears in the header when the current inspection is eligible to be moved to another day (with an info icon explaining the conditions). Save and Reschedule are mutually exclusive based on the state of the form.
Used to capture new permit applications before they are approved. Applicants (or staff on behalf of them) propose work, the application is routed through approval groups, and once approved it becomes a Permit.
The Attribute tab contains custom fields specific to the permit type — for example, restrictions, work start dates, or any other data points your agency has configured for that application category.
Contact Approval Inspection Note Attribute Doc
The Approval tab shows a read-only list of decisions from review groups — the group name, the status date, and whether the group has approved or rejected.
Used for tracking issued permits through their lifecycle — active, completed, and eventually closed. Unlike applications, permits represent approved work that's been granted.
The Inspection tab lists every inspection linked to the permit, each row showing the date/time, inspection type, and a colored Pass/Fail indicator. Tap a row to open that inspection, or use + Add New to record a fresh inspection against the permit.
The Status dropdown controls which extra fields are visible:
Contact Approval Description Inspection Note Attribute Doc
The Permit's Approval tab inherits (read-only) the approval decisions from its parent Permit Application.
When you tap the Print Form (printer) icon in the header of a Permit Application, Permit, Complaint, or Periodic Inspection, the Select Form dialog appears. It lists every print template your agency has configured for that record type — for example:
Pick a template and the app generates a PDF that you can preview, share, email, or save locally. A Cancel button at the bottom closes the dialog without generating anything.
Within a record you'll often need to create smaller linked items — a new contact, a violation you just observed, an enforcement action, or a checklist finding. The app opens these as focused sub-entry pages so you can fill in just what's relevant without losing your place in the parent record.
A centered modal dialog that appears over the current screen when you want to quickly add a contact. Two toggle buttons at the top switch between Individual and Organization modes.
Clear, Cancel, and the green Save button. Validation errors appear in red above the buttons.
A full-screen version of the Add Contact form with the same fields laid out for larger screens and stricter validation (Address 1, City, State, and Contact Type are all required). Toggle between Individual and Organization at the top; Save and Cancel live at the bottom.
Opens when you need to log a follow-up action tied to an inspection or a checklist condition — things like citations issued, corrective notices mailed, or follow-up inspections scheduled.
Two note tabs at the top each provide a text editor for detailed notes with configurable labels. The Save button is only enabled after Action Type is chosen, and a loading overlay appears while the save is in progress.
Where you document a specific code violation found during an inspection.
A special Select Code button opens a hierarchical codebook picker. The selected code is then displayed in a bordered field. Both Status and Violation Code must be filled in for Save to enable.
Opened when you tap into a specific checklist condition on a Periodic Inspection. It's a view-and-manage page rather than an edit form — its purpose is to let you see everything tied to that condition and add new violations or actions as needed.
Lists every violation already linked to this condition. Each shows its codebook name, issued date, and area involved. Tap a violation to edit it, or use Add Violation to add a new one (pre-linked to the current condition). Empty state: "No violations linked to this checklist item".
Same pattern — each row shows the action name, date, and inspector. Add Action creates a new action pre-linked to the condition. Empty state: "No actions linked to this checklist item".
The Settings page is your control panel for the app. You'll find five sections covering display preferences, server connection, backups, advanced offline/sync options, and a destructive App Reset action that should only be used when you really mean it.
Adjusts the text size across the entire app for readability. You have three options:
A preview panel shows how panel titles, section headings, form labels, and list items look at your selected scale. The selected button highlights in dark blue. A status label below confirms your choice (e.g. "Current: Normal (1.0x)").
The same fields as the first-launch Setup page, now available for editing whenever you need to move to a different server or change auth settings:
A Current API URL preview shows how your inputs translate to the actual server URL, e.g. https://192.168.50.13:443/FieldInspection.REST/api/.
Exports your local database for safekeeping.
The status label below the button updates as the backup progresses: "Creating backup...", then a size confirmation, then a final success or error message.
Hidden by default. To unlock them, tap the Session Timeout label five times. Once enabled you'll see:
C:\ProgramData\Tablet) and tap Migrate Attachment Paths. A confirmation dialog appears before migration runs.
Tapping the red Reset App Data button kicks off a two-step confirmation:
CONFIRM for the reset to run.On success: "All app data has been erased. The app will now close. Please reopen it to set up a new connection." and the app closes. If the typed text doesn't match, nothing happens and a message tells you so.
The previous sections describe screens individually. This one stitches them together — what to do on Day 1, how a periodic inspection actually flows, what happens when you lose connectivity, and what to expect when something goes wrong.
If you've just been issued a tablet, follow these steps in order. Most of them only have to happen once.
Field Inspection is offline-first. You shouldn't notice connectivity changes during normal work — the app keeps recording everything you do and reconciles with the server when it can. Here's the typical lifecycle:
The Request Queue Debug page lists every pending and recently completed sync request along with the current connection status. Use it if a sync seems stuck or you want to confirm a particular save made it to the server.
The most common workflow inside a Periodic Inspection is to walk a checklist of conditions, mark each as you go, and log violations or actions where they apply. Here's the path from open to save:
The list of templates in the Select Form dialog is configured by your agency, so the exact list varies. Generated PDFs share a common shape across record types:
Complaint header, complainant contact, parcel info, narrative description, and any logged inspections or violations.
Applicant and contractor contacts, parcel and zoning details, requested work, and approval decisions captured to date.
Issued permit details, parcel info, conditions inherited from the application, and a log of inspections performed under the permit.
Parcel info, the inspector and inspection date, every checklist condition with its status, and a footer for signatures.
After generation the PDF opens in a preview where you can share, email, or save it through the platform's standard share sheet. Cancel from the Select Form dialog closes it without generating anything.
The app uses a small, consistent vocabulary so it's clear what went wrong and what to do next.
A failed sync request stays in the Request Queue Debug page with its error message. The app retries on its own, but persistent failures may need attention from your administrator. No data is lost — the request stays queued until it succeeds or you explicitly clear it.
If your token expires mid-edit, the Re-Login overlay appears. Sign back in and you'll resume exactly where you left off; nothing in progress is discarded.