Plumeo · embed-first facilities platform

Facilities + asset management that lives inside your portal.

Drop Plumeo into your LMS, admin console, CRM, or parent-facing site — your users never leave your app. Vendor-agnostic by design: a CSV ingest path today, with FMX, AssetWorks, and SchoolDude connectors next on the roadmap. One instance, every tenant.

Embed-first

Every Plumeo view works standalone and as an iframe, web component, or React widget inside your host app. Your brand, your URL, your domain.

Vendor-agnostic

One canonical model over CSV today; FMX, AssetWorks, SchoolDude, and a native store next. Swap backends without changing your UI or host code.

Multi-tenant

A single instance serves every customer. Strict per-tenant isolation, per-tenant admin SSO, per-tenant data residency when you need it.

Live walkthrough

Three organizations. Three embeds. Same instance.

The widgets below are running right now against live Plumeo data for three different tenants. No mock video — open your devtools.

AP
School-district IT director

Alex Patel

"My district runs everything through a Google Workspace admin portal. I want facilities stats in that same view — not another tab, not another login."
tenant · t-edu · Northvale USD
page · dashboard
admin.northvaleusd.example iframe
JK
Municipal facilities manager

Jordan Kim

"When something's on fire — burst pipe, busted HVAC — I don't want to scroll past everything else. Put urgent + emergency at the top of my morning dashboard."
tenant · t-muni · Maplewood
?priority=urgent,emergency
ops.maplewood.example iframe · filtered
TC
Corporate property manager

Taylor Chen

"I need a single HVAC + boiler roll-up across the portfolio. Plumb it straight into our asset intelligence dashboard — our tenants don't need to know where the data comes from."
tenant · t-corp · Atlas Holdings
?category=hvac,boiler
intel.atlasholdings.example iframe · filtered
The moment

Same widget. Zero reload. Different tenant's data.

Switch tenants below — the embed swaps over in-place via the postMessage bridge. Your host app can do this in one line: widget.setTenant("t-muni").

tenant · t-edu · dashboard ready

Strict per-tenant isolation. Alex can't see Jordan's data; Jordan can't see Taylor's. Same instance, same URL, same widget — different customer-orgs.

Integrate

Three lines. Any framework. Any host.

Pick the shape that matches your stack. All three sit on the same URL-driven bridge, so you can mix them freely.

index.html zero JS, zero build step
<iframe
  src="https://your-host.example.com/embed?page=work-orders&tenant=t-edu"
  style="width: 100%; min-height: 600px; border: 0;"
></iframe>
For developers

Want to see the whole surface area?

Technical reference

Every one of the 17 embeddable views, the full postMessage protocol with a live event log, an interactive URL builder, and code samples for every consumption pattern.

Open technical demo →

Headless TypeScript client

Prefer to render your own UI? @plumeo/client gives you typed resources for assets, buildings, spaces, work orders, requests, projects, documents, and more — with cursor-aware iteration.

View @plumeo/client source →