# The Tech Ops Manual

> The full, in-depth user manual for Tech Ops — read it cover-to-cover, or jump
> to a chapter and use it like an F1 help file. Every screen the app ships
> with has a section here.

**Version:** This manual tracks the current shipping version of the app.
**Audience:** End users — technicians, dispatchers, administrators, and clients.
**Conventions used in this manual:**

- *Italics* mark UI labels exactly as they appear in the app.
- **Bold** marks important concepts or warnings.
- `Monospace` marks code, paths, and configuration values.
- A → arrow walks you through a menu path, e.g. *Profile → Manage Tabs*.

---

## 1. Welcome to Tech Ops

### 1.1 What Tech Ops Is

Tech Ops is a field-service management platform built to replace the
five-or-six different tools field-service teams normally have to glue
together. Tickets, projects, the site directory, virtual walkthroughs,
inventory, the parts catalog, in-app chat, and AI assistance all live in
the same workspace and share one data model.

The result: the technician on a roof, the dispatcher at a desk, and the
admin watching the books all see consistent, up-to-the-second information
without anybody having to copy data between tools.

The app is built in Flutter and runs in three places — your browser, on
Android, and (soon) iOS — backed by a PHP + MySQL server that lives at
`emchorizons.com`. Whichever surface you're on, you're talking to the same
backend, so your work follows you across devices.

### 1.2 Who It's For

Tech Ops is built around four primary roles. Most users will see the app
through one of these lenses, although the same account can hold multiple
roles:

- **Technicians** — the people doing the work in the field. They live in
  My Day, tickets, walkthroughs, and the catalog.
- **Dispatchers** — the people moving work around. They live in tickets,
  projects, the team view, and the schedule.
- **Admins** — the people running the operation. They live in admin tools,
  company settings, plans, and the marketplace.
- **Clients** — your customers. They get a deliberately narrow window into
  the parts of the system that concern *them* — their tickets, their sites,
  their contacts — and nothing else.

If your account holds more than one role, you'll see the union of what
each role can do, with the screens for each role grouped under their own
tabs.

### 1.3 How This Manual Is Organized

Chapters 2 through 4 cover the fundamentals — getting in, finding your
way around, and working tickets. Chapters 5 through 8 dig into the
heavyweight features: projects, the site directory, walkthroughs, and
inventory. Chapters 9 through 13 cover everything that supports the
day-to-day: communication, AI, plugins, plans, and admin tools.
Chapter 14 is a focused reference of what each role can see and do.
Chapter 15 collects the troubleshooting answers we've actually had to
give people. Chapter 16 is a glossary you can skim when an unfamiliar
term shows up.

Use the sidebar on the left to jump straight to any section. Every
heading in this manual has a stable anchor, so URLs you share or
bookmark will keep working.

---

## 2. Getting Started

### 2.1 Supported Platforms

Tech Ops runs in three environments:

- **Web** — any modern browser. Chrome, Safari, Firefox, and Edge are
  the four we test against. No install required; the web app is the
  fastest way to try Tech Ops.
- **Android** — direct-install APK, available from
  `https://emchorizons.com/` (the *Download Android* button on the home
  page). The APK is not published to the Play Store — you'll be asked by
  Android to enable *Install unknown apps* for whichever browser you
  download it with.
- **iOS** — in development. When it ships it'll be a TestFlight beta
  first, then a public App Store release.

A working internet connection is required. Tech Ops is online-first; it
does not currently store full offline copies of your data, although the
app holds your last-loaded views in memory for a short while if your
connection drops.

### 2.2 Creating Your Account

Most accounts are created by an admin from inside the company. If you're
joining an existing organization:

1. Wait for the email invitation from your admin. It will contain a
   one-time link and a temporary password.
2. Click the link, set a permanent password, and the app will sign you
   in.
3. The first thing you'll see is your *My Day* tab, populated with
   anything already assigned to you.

If you're an admin setting up a brand-new company on Tech Ops, see
Chapter 13 (*Admin Tools*) for the company-bootstrapping flow.

### 2.3 Signing In

Signing in is the same on every platform:

1. Open the app (browser, Android, iOS).
2. Enter your email and password.
3. Tap *Sign In*.

The app remembers your session — you only need to sign in again after
extended inactivity, a password change, or an admin force-logout.

If you forget your password, use the *Forgot Password* link on the
sign-in screen. The reset email goes to the address on file with your
account.

### 2.4 Your First Look Around

After your first sign-in, take a couple of minutes to orient yourself:

- The **bottom navigation bar** (or sidebar, on wide screens) is your
  primary navigation. Your role determines which tabs are visible by
  default. You can change which tabs show up in *Profile → Manage Tabs*.
- The **top app bar** holds the current page's title and any
  page-specific actions — adding a ticket from the ticket list, for
  instance, lives on the top bar.
- **Long-press** or **right-click** is reserved for context actions on
  most lists — try long-pressing a ticket card to see what's there.
- **My Day** is the home base. Tapping the Tech Ops logo from anywhere
  in the app brings you back to it.

---

## 3. The Workspace

### 3.1 My Day

*My Day* is the screen most people see first every morning. It answers
three questions:

1. **What's due today?** — tickets and tasks with a due date of today
   or earlier appear at the top.
2. **What's mine?** — everything assigned to you across tickets,
   tasks, walkthroughs, and projects.
3. **What changed?** — recent updates on items you're watching:
   comments, status changes, new assignments.

The top of My Day also shows your **streak badge** (see §3.6) and a
short *good morning* line that reflects the current time of day. This
is intentional — it's a low-friction way to see, in five seconds, what
your day looks like.

### 3.2 Navigation & Tabs

Tabs are how you move between major sections. By default, technicians
see *My Day*, *Tickets*, *Walkthroughs*, *Inventory*, and *Profile*.
Dispatchers also get *Projects* and the *Team* view. Admins additionally
get *Admin* and *Marketplace*. Clients get a tight set of
*Sites*, *Tickets*, and *Profile* tabs.

The active tab is highlighted. Switching tabs preserves any in-progress
work — if you're typing a ticket comment and switch away, your draft is
still there when you come back.

### 3.3 Customizing What You See

You can hide or reorder tabs from *Profile → Manage Tabs*:

- **Drag** the handle to the left of a tab name to reorder.
- Toggle the switch to hide a tab. Hidden tabs disappear from the bar
  but remain accessible via search or deep links — you're not losing
  functionality, just removing visual clutter.
- Tap *Restore Defaults* at the bottom if you want your role's
  original tab set back.

A common pattern: technicians who don't use the Inventory tab on the
phone hide it on mobile but leave it on for web.

### 3.4 Your Profile

Tap *Profile* (or the avatar in the top-right on web) to manage:

- **Display name** — what teammates see in comments, chat, and
  assignments.
- **Avatar** — upload an image, or accept the auto-generated initials
  avatar.
- **Contact info** — work phone, alternative email. Optional but
  helpful for dispatchers.
- **Default site** — the site you work out of most often. The app
  uses this to pre-fill new tickets, walkthroughs, and parts requests
  where it makes sense.
- **Password** — change it from inside the app at any time.

### 3.5 Notifications

Tech Ops sends notifications when something changes that affects you:

- A ticket assigned to you, reassigned, or commented on.
- A task you own changed status.
- A walkthrough you scheduled was completed by someone else.
- An @mention in chat.

Notification delivery depends on platform:

- **Web** — in-app toast plus a count badge on the affected tab.
- **Android** — system notification (if you allowed them).
- **iOS** — system notification (post-launch).

You can tune which notification *categories* you receive from
*Profile → Notifications*.

### 3.6 Streaks & Badges

Tech Ops includes a lightweight gamification layer aimed squarely at
the technician role:

- **Streaks** — consecutive days with at least one resolved ticket or
  completed walkthrough. Visible on My Day.
- **Badges** — earned for milestones (50 tickets resolved, 10
  walkthroughs in a week, first asset edit, etc.).
- **Achievements** — bigger milestones tracked over time.

There's no penalty for breaking a streak — it just resets. The point
isn't pressure; it's a quiet pat on the back when you're doing the
work.

---

## 4. Tickets & Work Orders

### 4.1 What Is a Ticket

A **ticket** is the unit of work in Tech Ops. Anything a customer asks
you to do, anything an alarm raises, anything a tech notices on a
walkthrough — those all become tickets. A ticket has:

- A **title** — short, scannable in a list.
- A **description** — full detail, formatted text.
- A **site** — where the work happens.
- An optional **client** — who it's for.
- A **priority** (low/normal/high/urgent).
- A **status** (open/in progress/blocked/resolved/closed).
- An **assignee** — the technician on the hook.
- A **due date** — optional, but powers the SLA tracking.
- Any number of **comments**, **attachments**, and **linked parts**.

### 4.2 Creating a Ticket

From the *Tickets* tab, tap the **+** in the top app bar. The *Create
Ticket* page opens. Fill in:

1. **Title** — required.
2. **Site** — pick from the directory. If you don't see the site,
   you may need to add it first (see §6.2).
3. **Description** — the long version. Markdown formatting is
   supported.
4. **Priority** — defaults to *Normal*.
5. **Assignee** — optional on creation; dispatchers usually leave
   this blank so they can assign later.
6. **Due date** — optional.

Tap *Save* and the ticket is created. You're dropped onto its detail
page, ready to add attachments or comments.

### 4.3 The Ticket Detail Page

The detail page is where 90% of ticket work happens. It's laid out
as:

- **Header** — title, ID, status chip, priority chip, assignee avatar.
- **Description** — the long-form body. Edit inline.
- **Activity feed** — every change to the ticket (status, assignee,
  comments, attachments) shown chronologically.
- **Comments** — threaded under the activity feed. Anyone with
  access can comment.
- **Attachments** — photos, PDFs, anything. Tap to view inline; tap
  again to download.
- **Linked parts** — parts pulled from the catalog into this ticket.
- **Related items** — if the ticket lives inside a project or
  walkthrough, that link shows here.

### 4.4 Assigning & Reassigning

To assign or reassign:

1. Tap the assignee chip in the header.
2. Pick a teammate from the list. The list is filtered to people
   with the *Technician* or *Dispatcher* role; clients won't appear
   as assignable.
3. The change shows up in the activity feed and the new assignee
   gets a notification.

Reassignment is a one-tap operation; there's no approval step. If
you need an approval workflow, see §13.3 (admin plan-controlled
workflows).

### 4.5 Status, Priority & SLA

**Statuses** progress: *Open → In Progress → Resolved → Closed*. A
ticket can also be set to *Blocked* at any point, which keeps it
in your queue but flags it visually. Tap the status chip to advance
or reset it.

**Priority** sets the visual urgency of the ticket in lists.
*Urgent* tickets float to the top of My Day and trigger a separate
notification category.

**SLA** (service-level agreement) is automatic when a due date is
set. The app tracks time-to-resolution against the due date and
shows a colored chip on the ticket card:

- **Green** — comfortably on time.
- **Yellow** — within 24 hours of due.
- **Red** — overdue.

### 4.6 Comments & Attachments

Comments are the audit trail of the work. Use them to record:

- What you found on-site.
- Parts you used or ordered.
- Conversations with the customer.
- Reasons for status changes (especially blocks).

Comments support **@mentions** — typing `@` brings up a list of
teammates; the person you mention gets a notification.

Attachments accept anything reasonable: PNG/JPG photos, PDFs, text
files. There's a per-file size limit (see your admin if you hit it)
but no per-ticket attachment cap.

### 4.7 Closing & Resolving

When the work is done:

1. Add a final comment describing the resolution.
2. Tap the status chip and move it to *Resolved*.
3. The dispatcher or admin reviews and moves it to *Closed*.

Resolved tickets stay searchable but drop out of your active
queue. Closed tickets are archived and counted in your streak. You
can re-open a closed ticket if the issue comes back — the activity
feed preserves the full history.

---

## 5. Projects & Tasks

### 5.1 Projects vs. Tickets

A **ticket** is one unit of work. A **project** is a structured
container of work — a multi-step installation, a building-wide
upgrade, a recurring quarterly inspection. Projects:

- Hold any number of tasks and subtasks.
- Hold any number of linked tickets.
- Have their own owner, due date, and status.
- Show as a single line on dashboards but expand into a full tree
  when you tap in.

Rule of thumb: if it's "fix X" — that's a ticket. If it's "install
the whole system at site Y" — that's a project containing tickets.

### 5.2 Creating a Project

From the *Projects* tab (dispatcher / admin), tap **+**:

1. Pick a **name**.
2. Choose a **site** and optionally a **client**.
3. Add a **description**.
4. Set the **target completion date**.
5. *Save*.

You land on the empty project detail page, ready to start adding
tasks.

### 5.3 The Task Tree

The task tree is the heart of the project page. It's a hierarchical
list — tasks can have subtasks, and subtasks can have their own
subtasks (typically 2–3 levels deep is the sweet spot).

- **Tap a task** to open its detail sheet (see §5.4).
- **Long-press** to drag a task to a new parent or reorder siblings.
- **Tap +** at any level to add a child task.
- **Tap the disclosure arrow** to expand or collapse.

The tree shows status chips and assignee avatars on every row, so
you can see the shape of the work at a glance.

### 5.4 Task Detail Sheets

Tapping a task opens a bottom sheet (on phone) or a side panel (on
web) with:

- **Title** and **description** — both inline-editable.
- **Status** — *Open / In Progress / Done / Blocked*.
- **Assignee** — same picker as tickets.
- **Due date**.
- **Linked tickets** — tasks can be linked to one or more tickets;
  closing the last linked ticket auto-moves the task to *Done*
  unless you turn that off in admin settings.

### 5.5 Reassigning & Rescheduling

Reassigning a task is the same one-tap operation as a ticket. The
new assignee gets notified; the activity log preserves the change.

Rescheduling — moving a due date — is also one-tap, but if the
task has subtasks, the app will offer to slide their due dates by
the same delta. This is the easiest way to push a whole multi-week
plan a week later when something slips.

---

## 6. The Site Directory

### 6.1 Sites, Buildings, Floors, Zones

The **site directory** is Tech Ops' model of the physical world your
team works in. It has a strict hierarchy:

- **Site** — a top-level address. A building, a campus, a customer
  location.
- **Building** — for multi-building sites (campuses, complexes).
- **Floor** — within a building.
- **Zone** — within a floor; a room, suite, equipment closet,
  rooftop section.

Smaller sites skip levels — a single-floor retail location is just
*Site → Zone*. The directory is flexible about depth; you only
create the levels you need.

### 6.2 Adding a Site

From the *Directory* tab (or the directory picker inside any other
screen), tap **+**:

1. Enter the **name** (e.g. *Northgate Mall — Roof*).
2. Enter the **address**. The app will try to geocode it for the map
   view.
3. Pick a **client** (see §6.3).
4. *Save*.

Once a site exists, you can drill in and start adding buildings,
floors, and zones the same way.

### 6.3 Clients & Parent-Client Relationships

A **client** is the organization that owns or pays for a set of
sites. Clients live in their own directory section and can be
linked to as many sites as needed.

Tech Ops supports **parent-client** relationships — for franchise
operators, MSPs, or property managers, you can mark one client as
the parent of others. This lets reports roll up at the parent level
even when the work happens at the child level.

### 6.4 The Client Phone Book

Every client has a **phone book** — a per-client directory of
contacts (a primary contact, accounting, on-site managers, the
maintenance person who actually has the key). Phone book entries
have:

- Name, title, phone, email.
- Optional **site tags** linking the contact to specific sites
  within the client (the GM of the *Northgate* site, for instance,
  versus the company-wide CFO).
- Free-text notes.

The phone book is reachable from the client detail page and is
also surfaced inside the directory picker so that calling the
right person is one tap away from a ticket.

### 6.5 Site Tags & Linking

Anywhere in the app where a "site" or "client contact" makes sense,
the same picker is used. This means:

- Creating a ticket → pick a site → the client phone book is one tap
  away.
- A walkthrough → pick a site → see linked contacts in the asset
  sidebar.
- Importing personnel from the client view → site tags
  automatically link the person to the site.

The picker is unified by design, so links between sites, clients,
and contacts stay consistent everywhere.

---

## 7. Virtual Walkthroughs

### 7.1 What a Walkthrough Is

A **walkthrough** is a structured, repeatable visit through a site,
documenting the state of every asset you care about. Think of it as
a digital clipboard: walk the site, tap each piece of equipment,
record what you find.

The walkthrough is also Tech Ops' **inventory ground truth** — when
you mark an asset as missing, broken, or upgraded during a
walkthrough, that information propagates immediately to inventory
and the catalog.

### 7.2 The SiteAssetTree

The walkthrough UI is built around the **SiteAssetTree** — the same
tree component used in the site directory, but now the leaves are
individual assets, not just zones. The hierarchy looks like:

```
Site
└── Building
    └── Floor
        └── Zone
            └── Asset (e.g. "Rooftop AC Unit #3")
```

Each level has its own status indicator. A site shows green if all
its assets are healthy, yellow if any are flagged, red if any are
critical. The same color logic propagates up from assets through
zones, floors, and buildings.

### 7.3 Drilling In: Site → Floor → Zone → Asset

The flow:

1. Open the *Walkthroughs* tab and tap *Start Walkthrough*.
2. Pick a site.
3. The tree opens at the top level. Tap a building (or floor, or
   zone) to drill in.
4. At the zone level, every asset assigned to that zone appears as
   a card.
5. Tap an asset to open its edit dialog (§7.4).
6. As you go, the breadcrumb at the top tracks where you are. Tap
   any breadcrumb segment to pop back up.

Tech Ops remembers your walkthrough state — if you have to step
away mid-walkthrough, the tree reopens where you left off.

### 7.4 Editing an Asset

The **asset edit dialog** is the per-asset detail screen. It shows:

- Asset name, type, manufacturer, model.
- Serial number (if known).
- Photos.
- Status — *Healthy / Flagged / Critical / Missing / Decommissioned*.
- Notes — free-text, often the most-edited field during a
  walkthrough.
- Linked tickets — open or closed work orders against this asset.
- Linked parts — what's installed inside it, from the catalog.

The dialog is designed for one-handed phone use: the most-changed
fields (status, photos, notes) are at the top.

### 7.5 Adding from the Catalog

If you spot equipment in the field that *isn't* in the directory
yet, tap *Add from Catalog* in the asset's zone view. This opens a
sheet that lets you:

1. Search the catalog for the equipment type.
2. Pick a matching catalog entry.
3. Add identifying details (serial, location within the zone).
4. *Save* — the new asset is created and immediately appears in
   the tree.

If the equipment isn't in the catalog at all, you can add a new
catalog entry from this same sheet. See §8.1.

### 7.6 Walkthrough Drills (Assessments)

A **walkthrough drill** is a structured assessment laid over a
walkthrough. Where a walkthrough is freeform ("look at things, note
what's wrong"), a drill is a checklist ("verify these 12 points on
every fire panel").

Drills are created by admins (see §13.3 for plan-controlled
workflows) and assigned to walkthroughs by site or by asset type.
When you start a walkthrough that has a drill attached, the drill
appears as a structured checklist alongside the free-form asset
edit dialog.

This is how Tech Ops handles things like **annual inspections** —
the inspector follows the drill, the answers are recorded against
each asset, and the drill outputs a structured report you can
hand to the customer.

---

## 8. Inventory & Catalog

### 8.1 Catalog Concepts

The **catalog** is your library of *what kinds of things exist*.
Manufacturers, model numbers, part specs — the catalog doesn't track
where each individual item lives, just what types of items are in
your world.

The **inventory** (the next section) is your record of *the actual
units you have* — serial numbers, locations, who has what.

A simple rule: if you'd ever order two of it, it's a catalog entry.
The two individual ones you have are inventory.

### 8.2 Browsing the Catalog

The *Catalog* tab opens the **catalog browser**. Browse by category
or search by name. Each row shows a thumbnail, the name, the
manufacturer, and a small chip showing how many of that catalog
item you have in stock across all your containers.

Tap a row to open the catalog item detail:

- Full description.
- Spec sheet (PDF attachment).
- Photos.
- Compatible parts.
- Containers currently holding stock of this item.

### 8.3 Containers (Trucks, Bins, Shelves)

A **container** is anywhere you store inventory — a service truck,
a shelf in the warehouse, a parts bin at the bench. Containers are
hierarchical, like sites: a truck contains shelves; a shelf
contains bins; a bin contains parts.

The *Containers* view shows the tree, with current stock counts on
each level. Tap into a container to see what's inside.

### 8.4 Assemblies

An **assembly** is a named, reusable bundle of parts. For example,
"Standard Camera Install Kit" might be 1× camera, 1× junction box,
20ft of cable, and a mount. Once defined, dropping the assembly
into a ticket or walkthrough adds all four line items at once.

Manage assemblies from the *Assemblies* page inside *Inventory*.
Assemblies are great for jobs you do over and over — they save
both data entry and accidental "forgot the cable" mistakes.

### 8.5 Adding Parts to Jobs

From inside a ticket or walkthrough, tap *Add Part*:

1. The catalog browser opens in picker mode.
2. Search or browse.
3. Tap the part(s) you used.
4. Enter quantity.
5. *Save* — the parts attach to the ticket and (depending on your
   plan) are deducted from the source container's stock count.

This is the workflow that keeps inventory honest — the part on the
ticket is the same part that left the truck.

### 8.6 Stock & Reorder

The *Inventory* tab has a **Stock** view that lists everything at
low stock based on per-item reorder thresholds. Admins set the
thresholds; technicians and dispatchers can see the view and act
on it.

Each row shows current stock, reorder threshold, and a one-tap
*Create Reorder Ticket* button that opens a pre-filled ticket
ready to send to the purchasing person.

---

## 9. Team & Communication

### 9.1 Built-In Chat

The *Chat* tab is Tech Ops' in-app messenger. It works the way you'd
expect:

- **Direct messages** to any teammate.
- **Group threads** for a project, a site, or an ad-hoc team.
- **Mentions** with `@name`.
- **Attachments** — photos straight from the camera, files, voice
  notes.

The win is **context**: any chat thread can be **linked to a
ticket, walkthrough, or project**. Linked threads show up in the
sidebar of that item, so the conversation about a job lives next
to the job.

### 9.2 Role-Aware Views

Every screen in Tech Ops checks your role before deciding what
to render. A dispatcher looking at the tickets list sees a column
for *Assignee*; a technician sees the same list with *Site*
column instead, because the assignee is always them.

You don't need to configure this — it just happens. If the wrong
columns show up for your role, that's a bug; let your admin know.

### 9.3 The Client Portal

Clients see a deliberately stripped-down version of Tech Ops:

- A list of **their** sites.
- A list of **their** open tickets and the history of closed ones.
- Their contacts (the *client phone book*).
- A simple ticket-creation form so they can request work directly.

They do *not* see other clients, your internal pricing, your
inventory, your other tickets, your project structure, or
anything else.

This is enforced server-side as well as client-side — a client
account literally can't query data outside their own scope.

### 9.4 Profile Page

The *Profile* page (§3.4) is the same on every platform. It's the
one place to manage your display name, contact info, default
site, password, and notification preferences.

---

## 10. AI Assistance

### 10.1 What the AI Does

Tech Ops ships with an in-app AI assistant tuned for field-service
workflows. It's not a chatbot in the corner — it's woven into
the screens where it actually helps:

- **Drafting tickets** from a short description.
- **Summarizing walkthroughs** when you finish one.
- **Drafting comments** when you tap *Suggest reply* on a ticket.
- **Recommending parts** based on the ticket description.

The AI's job is to give you a strong first draft. You always
get to edit before saving — nothing the AI produces is saved
automatically.

### 10.2 Drafting Tickets

On the *Create Ticket* page, tap the **✨ Draft** chip. A small
prompt opens — type a brief description ("alarm at main entrance
won't reset") and the AI fills in:

- A clean, structured title.
- A description with what to check, in order.
- A suggested priority based on language ("alarm" and "won't reset"
  push it toward *Urgent*).

Review, edit anything that's wrong, and save. Most users find the
title and structure are good as-is; the priority is the one place
to double-check.

### 10.3 Summarizing Walkthroughs

After finishing a walkthrough, tap *Summarize*. The AI reads the
asset notes, status changes, and photos you added and produces:

- A **status summary** — counts of healthy / flagged / critical /
  missing.
- A **bulleted findings** list — the specific things to act on.
- A **follow-up list** — recommended tickets to create.

You can edit the summary and either save it to the walkthrough or
email it to the client directly from the summary screen.

### 10.4 Best Practices & Limits

- **Be specific** in your prompts. "Camera offline at Northgate
  loading dock #2" beats "camera broken."
- **Review every draft.** The AI is good but not infallible —
  especially on technical specifics like model numbers.
- **Don't paste secrets** (passwords, customer SSNs, etc.) into
  AI prompts. They're sent to a third-party model.
- **The AI knows your data** — it has read access to your tickets,
  walkthroughs, and catalog, scoped to your role. It does not have
  write access; it can only draft, never commit.

---

## 11. Marketplace & Plugins

### 11.1 Browsing the Marketplace

The *Marketplace* tab (admin) lists every plugin available for
Tech Ops. Each plugin is a self-contained set of features — for
example, *Annual Inspection Reports*, *QuickBooks Sync*, or
*Advanced Scheduling*.

The marketplace shows:

- Plugin name and icon.
- Short description.
- Price (per-month, often with per-seat tiers).
- Enabled/disabled toggle (only an admin sees this).

### 11.2 Plugin Detail Pages

Tap a plugin to open its detail page. You see:

- Full description and screenshots.
- A list of **features** it adds to the app.
- Which **roles** the features are visible to.
- Pricing details.
- A *Try for 14 days* or *Enable* button.

Some plugins have free trial periods; some have free tiers; some
require a paid subscription from day one.

### 11.3 Enabling a Plugin

Tap *Enable* (admin only). The plugin's features become available
across the app — usually within a few seconds. You'll typically
see new tabs appear, new sections show up on existing screens, or
new options in dialogs.

Disabling a plugin removes the UI but does not delete the
underlying data. Re-enabling restores everything.

### 11.4 Feature Gates

Tech Ops uses a system called **feature gates** to decide whether
a given UI element should show up. Every gated feature checks two
things:

1. Is the user's **role** allowed to see it?
2. Is the **plan + plugin** combination on the company's account
   enough to unlock it?

If either check fails, the feature simply doesn't render — no
"upgrade now" guilt-trips inline, just a clean experience scoped
to what you actually have.

Admins can preview what other roles or plans would see from
*Admin → Plan Selection → Preview as…*.

---

## 12. Subscriptions & Plans

### 12.1 Plan Tiers

Tech Ops offers a base plan that includes the core feature set
(tickets, projects, the site directory, the catalog, walkthroughs,
chat). Plugins extend the base plan with specialized features.

The current tier list is visible in *Admin → Plan Selection*.
Tiers can change over time; the current source of truth is always
that page.

### 12.2 Plan Selection

From *Admin → Plan Selection*, an admin sees:

- The **current plan** for the company.
- Available **plan tiers** above and below the current one.
- A **per-tier feature comparison** showing what each tier
  includes.
- A *Switch Plan* button.

Plan changes are pro-rated and applied at the next billing cycle
unless you choose *Apply immediately*.

### 12.3 Subscription Calculator

The *Subscription Calculator* (under *Admin*) lets you model the
cost of a plan + plugin combination before committing. Punch in:

- Number of users in each role.
- Number of sites and clients.
- Plugins you're considering.

The calculator shows the monthly and annual cost, including any
quantity discounts. It's also the easiest way to spot when adding
one more plugin would actually be cheaper than upgrading to the
next plan tier.

### 12.4 Billing & Renewals

Billing details live in *Admin → Company Admin → Billing*. From
there you can:

- View invoices.
- Update payment method.
- Set the billing contact (defaults to the admin who set up the
  account).
- Cancel or change the renewal date.

Receipts are emailed automatically to the billing contact.

---

## 13. Admin Tools

### 13.1 Company Admin

*Admin → Company Admin* is the top-level page for company-wide
settings. Sections inside:

- **Company profile** — name, address, logo, default time zone.
- **Users** — invite, deactivate, set roles (see §13.2).
- **Sites & clients** — bulk import via CSV, bulk edit.
- **Billing** — invoices, payment, renewal.
- **Integrations** — API keys, webhooks, plugin connections.

### 13.2 User Management

From *Company Admin → Users*:

- **Invite** a new user by email. The invite contains a one-time
  link.
- **Deactivate** a user. Their account is disabled but their work
  history is preserved.
- **Change role.** Switching a tech to a dispatcher, for example,
  reshapes their tabs at next sign-in.
- **Reset password** — generates a new temporary password and
  emails it to the user.

### 13.3 Plan & Plugin Management

From *Admin → Plan Selection* and *Admin → Marketplace*:

- Change the company's plan tier.
- Enable or disable plugins.
- Configure plugin-specific options (some plugins add their own
  admin pages).
- Preview the app as another role or plan.

Plan or plugin changes take effect immediately for all users on
the company account.

### 13.4 Releases (Dev Tools)

Developers and infra-side admins have access to a *Dev Tools* tab
on web. Inside, the *Releases* page is where the team:

- Publishes a new Android APK (sets the download URL the public
  site reads).
- Publishes a new web build.
- Publishes (in time) iOS TestFlight invites.

End users don't see this page. It's the bridge between
`build_release.sh` (the developer's build script) and the public
download links on `emchorizons.com`.

---

## 14. Roles & Permissions Reference

This chapter is the at-a-glance reference for "what can X user
do." Each role's section lists the tabs that are visible by
default and the major actions that role can take.

### 14.1 Technician

**Default tabs:** My Day, Tickets, Walkthroughs, Inventory,
Chat, Profile.

**Can do:**

- See and resolve tickets assigned to them.
- Walk sites and edit assets.
- Add parts to tickets from the catalog.
- Comment, attach, and chat.
- Edit their own profile.

**Cannot do:**

- See tickets not assigned to them or their team.
- Change plan tier.
- Add or remove users.
- Modify plan-controlled workflows.

### 14.2 Dispatcher

**Default tabs:** Technician's tabs, plus Projects, Team, and the
schedule view.

**Can do:**

- All technician actions.
- Assign and reassign tickets.
- Create and structure projects.
- See team utilization.
- Set due dates and SLAs on tickets.

**Cannot do:**

- Manage users, plans, or billing.
- Modify integrations.

### 14.3 Admin

**Default tabs:** Dispatcher's tabs, plus Admin and Marketplace.

**Can do:**

- All dispatcher actions.
- Manage users (invite, deactivate, role-change).
- Manage plans, plugins, billing.
- Bulk-import sites and clients.
- Configure integrations and API keys.
- Preview the app as any other role.

**Cannot do:**

- Edit plan-controlled feature definitions (those are managed by
  the platform).

### 14.4 Client (Portal)

**Default tabs:** A constrained Sites view, Tickets (their own),
and Profile.

**Can do:**

- See their own sites and the contacts on them.
- See their own tickets, open and closed.
- File new ticket requests.
- Edit their own profile.

**Cannot do:**

- See other clients' data.
- See your team, your pricing, your inventory.
- Modify anything outside their own profile and ticket requests.

---

## 15. Troubleshooting & FAQ

### 15.1 Sign-In Issues

**"Invalid email or password."**
Double-check the email (often a typo) and password. If you reset
your password recently, the new one is what's active. If you're
sure both are right, ask an admin to confirm the account is still
active.

**"Your session has expired."**
Sign in again. Sessions expire after extended inactivity, after a
password change, or after an admin force-logout.

**Stuck on the loading screen after sign-in.**
Refresh the page (web) or force-quit and reopen the app (Android).
If the problem persists, your account may have been deactivated —
check with an admin.

### 15.2 Sync Issues

**"My change didn't save."**
Tech Ops is online-first. If your connection dropped between you
tapping *Save* and the network call completing, you may have lost
the change. Re-do it, and verify the change appears in the
activity feed.

**"I'm seeing stale data."**
Pull down on a list to refresh, or close and reopen the affected
screen. Browser caches occasionally serve old assets; a hard
refresh (Ctrl+Shift+R / Cmd+Shift+R) fixes that.

### 15.3 Performance

**The app is slow on Android.**
Older devices (Android 8 and earlier) struggle with very large
walkthroughs. Try the web version on a tablet for those sites.

**The web app is slow.**
Check your connection. If it's fast, try a different browser to
isolate. Reach out via the contact email on the *About* page if
you can reproduce a slow screen reliably.

### 15.4 Common Questions

**"Can I work offline?"**
Not fully, yet. The app keeps the most-recent screen state in
memory if you drop offline, but new edits will fail to save
without a connection.

**"How do I get to my data if I leave Tech Ops?"**
Admins can export tickets, projects, sites, and inventory from
*Admin → Company Admin → Integrations → Export*. The export is
delivered as a downloadable archive.

**"Who do I email for help?"**
The contact email on the *About* page (`/about.html`). It's a
real inbox, not a ticketing system — replies are usually within
a business day.

**"Is the app open source?"**
No. The marketing site uses standard web technologies, but the
app code itself is proprietary.

---

## 16. Glossary

**Asset.** A single physical thing tracked in the site directory —
an AC unit, a fire panel, a camera. Lives at the bottom of the
SiteAssetTree.

**Assembly.** A named, reusable bundle of catalog items that can
be added to a ticket or walkthrough in one action.

**Catalog.** The library of *types* of items your company works
with. Distinct from inventory, which is the list of actual units.

**Client.** The organization that owns or pays for a site. May
have a parent–child relationship with other clients.

**Container.** Anywhere inventory is stored — a truck, shelf, or
bin. Hierarchical.

**Dispatcher.** A role focused on assigning, scheduling, and
overseeing work. Lives in tickets, projects, and the team view.

**Drill (Walkthrough).** A structured assessment laid over a
walkthrough — a fixed checklist of points to verify.

**Feature Gate.** The check Tech Ops does before showing a
gated piece of UI: role + plan + plugin must all permit it.

**My Day.** The home screen — what's due, what's mine, what
changed.

**Phone Book.** The per-client directory of contacts.

**Plugin.** A self-contained set of features that can be added to
the base Tech Ops plan via the marketplace.

**Project.** A structured container of work, with tasks,
subtasks, and linked tickets. Bigger than a single ticket.

**Role.** A user's job function: Technician, Dispatcher, Admin,
or Client.

**Site.** A top-level physical location in the directory. A
building, a campus, an address.

**SiteAssetTree.** The unified hierarchical tree used throughout
the app: Site → Building → Floor → Zone → Asset.

**SLA.** Service-Level Agreement. The time-to-resolution
expectation on a ticket with a due date.

**Streak.** Consecutive days with at least one resolved ticket or
completed walkthrough.

**Task.** A unit of work inside a project. Can have subtasks.

**Ticket.** The unit of work in Tech Ops. Everything else either
contains tickets or links to them.

**Tier.** A level of the Tech Ops subscription — affects which
features are available before plugins are added.

**Walkthrough.** A structured visit through a site, recording the
state of every asset.

**Zone.** The lowest container level in the site directory before
you get to individual assets — a room, equipment closet, or
section of a floor.

---

*End of manual. If something you needed isn't here, the contact
email on the [About page](/about.html) is the fastest way to ask.*
