Locations & Assets Overview
ClientCove's Locations and Assets features turn the portal into a single source of truth for the physical world that matters to your client engagements — every site you service, every piece of equipment you support, with encrypted credentials, scheduled maintenance, and a complete audit trail of who touched what when.
What Locations & Assets Are
| Feature | Custom Post Type | URL slug | What it represents |
|---|---|---|---|
| Locations | location | /location/<slug>/ | A physical site — office, retail store, warehouse, server room, customer site |
| Assets | asset | /asset/<slug>/ | A discrete item — server, router, printer, vehicle, machine, license, account, anything you track |
Both are full WordPress custom post types, so they have permalinks, REST API endpoints, search, and the standard ACF field machinery — but they get specialized UI in the portal: tabbed workspaces, encrypted vaults, activity logs, and integrations with tickets, projects, and resources.
Quick Glossary
| Term | What it means |
|---|---|
| Location | A physical site record — name, address, type, status, contacts |
| Asset | A tracked item — type, status, condition, IP/MAC address, image, files, vault credentials |
| Location Type | Free-form classifier (Office, Warehouse, Server Room, Customer Site) |
| Asset Type | Free-form classifier (Server, Workstation, Printer, License, Domain) — autocomplete from existing types |
| Status | Lifecycle state — Asset: Active / Inactive / Maintenance / Decommissioned / Pending; Location: customizable |
| Condition | Asset-only — Excellent / Good / Fair / Poor / New |
| Vault | Encrypted credential store — usernames, passwords, API keys, notes; PIN-gated access |
| Vault PIN | A 6-digit code emailed to the user, valid for 15 minutes |
| Activity Log | Database table that records every field change, vault access, file upload, and assignment |
| Service Notes | Free-form maintenance instructions visible to assigned technicians |
| Next Service Date | Scheduled service date — drives email/notification reminders |
| Hours of Operation | Per-day open/close times for a location |
| Assigned To / Secondary | Technicians or staff responsible for the location/asset |
How Locations and Assets Relate
Assets and Locations are designed to nest:
- A Location can have many Assets — the Server Room location lists every server, switch, and UPS at that site
- An Asset belongs to one Location (typically) — through the Location's
location_assetsrelationship field - Both belong to a Client — the customer that owns the site/equipment
- Both can have their own contacts, tickets, files, vault, and audit log
The hierarchy is:
Client → Location(s) → Asset(s)
Tickets can reference a location and/or specific assets, so when a customer reports "the printer isn't working", the ticket has a clean trail to the location, the asset, the maintenance history, and the credentials needed to remotely diagnose.
Where to Find Them
Locations directory
Open Clients → Locations (URL: /clients/locations/). The page is admin/editor only.
What you see:
- A search bar (matches title, address line 1, address line 2, and location type)
- A category sidebar (uses the
location-categorytaxonomy) - Filter controls: by client, by location type
- Sort by title, location type, last updated
- Grid/list toggle
- Pagination (20 per page)
- A toolbar action to View Archived, plus CSV export and column-visibility toggles
Assets directory
Open Clients → Assets. Same page anatomy as Locations:
- Search by title, type, IP/MAC
- Sidebar of asset categories
- Filters by client, asset type, status
- Sort by various fields
- Archive toggle
Per-client view
Both also surface inside the Client Workspace:
- Locations tab — every location for this client
- Assets tab — every asset for this client (across all their locations)
Per-location view
Inside a single location's workspace, an Assets section lists every asset at that location.
The Three Big Features
1. The Vault
Each location and each asset has its own encrypted credential vault — protected by a one-time PIN sent to the requesting user's email.
- AES-256-CBC encryption using WordPress salts
- 6-digit PIN, 15-minute expiry
- Multiple credential sets per item (Login, Recovery, API Key)
- Every access logged
- Locked again after a session ends or manually
See The Vault & Credentials for the complete walkthrough.
2. The Audit Log
Every field change, vault access, file upload, and assignment update is logged to a per-feature database table:
wp_asset_activity_logfor assets- A similar table for locations
Each entry captures: who, when, what changed, old value, new value. Logs are append-only and follow the post — they're deleted only when the post itself is permanently deleted.
See Audit Log & Permissions for the schema and viewer UI.
3. Routine Maintenance
Assets carry Last Service Date and Next Service Date fields. When the next service date approaches, ClientCove:
- Sends an email reminder to assigned technicians
- Creates an in-portal notification
- Optionally creates a portal message
The reminders run daily at 8:00 AM via WordPress cron (check_asset_service_reminders_daily).
See Maintenance & Service for the full scheduling and notification setup.
Permissions Snapshot
| Action | Who |
|---|---|
| View Locations / Assets directory | Administrator, Editor |
| View a single location/asset | Administrator, Editor, Representative, plus assigned techs and the client's users (with restrictions) |
| Create / edit | Administrator, Editor, plus assigned technicians for assets they're assigned to |
| Access vault | Anyone with view permission, after PIN verification |
| View audit log | Administrator, Editor (always); assigned techs (their own actions) |
| Archive | Administrator, Editor |
| Permanent delete | Administrator only |
The full breakdown is on Audit Log & Permissions.
Both features must be enabled. Locations is gated by the locations feature flag; Assets is gated by assets. Both are toggled in Settings → Core Features. If a feature is off, its directory page returns a "feature not enabled" notice and the per-client tabs hide.