One-time setup needed
The app isn't connected to a database yet.
Open config.js (next to this file) and paste in your Supabase
Project URL and anon key, then reload this page.
Full instructions are in README.md — or just ask Claude to walk you through it.
OC
OCFM CAFM
Facilities · Managed · Intelligently
🔒 Private per organisation
🤖 AI-assisted operations
📋 Full audit trail
OCFM CAFM · by OC FM Ltd
OC
OCFM CAFM
Choose a new password
Set a new password
Enter a new password for your account. Minimum 8 characters.
OCFM CAFM · secure sign-in
OC
OCFM CAFM
Two-step verification
🔐 Enter your code
This device isn't recognised yet. Open your authenticator app and enter the current 6-digit code for CAFM to finish signing in.
OCFM CAFM · secured sign-in
OC
OCFM CAFM
Your own secure workspace, ready in seconds
Set up your organisation
A private, walled-off workspace — your suppliers, jobs, PPM and rates are visible to your team only. You'll be its first admin; add colleagues, clients and suppliers afterwards.
⚡ Reactive works & SLAs
📅 PPM compliance
💷 Quotes to invoices
OCFM CAFM · by OC FM Ltd
📋 Today's To-Do — work top to bottom
🏗 Contractor SLA Performance — passed vs failed (settled outcomes only, worst first)
Reactive Jobs
Quote Requests
⚠ Unassigned — needs a supplier
Reactive jobs and quote requests nobody is assigned to yet. Anything Remi held for a human decision shows its reason. Open a row, assign the supplier, and it moves to its own tab automatically.
⬆ Uplifts — pending review
Uplift requests waiting for a decision. Approve extends the completion SLA by 5 days; convert-to-quote closes the uplift and raises a linked quote for the supplier; decline can close the task as complete. Client users can only approve within their own approval limit.
Approved Works
SLA Performance by Month
■ Passed SLA · ■ Breached SLA
| Ref | Type | Description | Client | Site | Discipline | Supplier | Time on site | Materials | Logged | Completion Due | Completed | Status | SLA (Completion) | Attendance | Client £ |
|---|
📅 ETAs to Transfer
Every attendance ETA given on a reactive job, quote request, approved works task or PPM visit lands here until you mark it done — so each one gets onto the external system exactly once. A revised ETA returns as CHANGED showing the old and new times, so you know to amend rather than re-enter. These are deliberately kept out of the Event Notes inbox, which still ignores routine ETA chatter.
✅ Closed — to close on the client's system
Every reactive job, approved works task or quote request that reaches a closed state lands here until you tick it off — complete, closed to quote, or cancelled. It is the same job as the ETAs above: something that has to be done once on the client's own system and is easy to miss, because closing a task here is silent. Ticking Done records who cleared it and when. Nothing is emailed from this list.
📝 Event Notes — awaiting acknowledgement
Every note added by a client or supplier lands here until a member of the helpdesk acknowledges it — so nothing typed on a portal is ever missed. Remi replies where she can; her notes and routine system notes don't need acknowledging. Acknowledging records who and when, and drops the note off this list.
🔴 Urgent Event Notes
Notes the author flagged as RED / urgent — review these first. Acknowledging clears them from both lists.
| Ref | Type | Client | Site | Description | Time on site | Materials | Client £ | Closed | Status | Paperwork | Supplier invoice | Invoice Status |
|---|
This list builds itself: completed reactive jobs & approved works with a client cost, and compliant PPM months with a client cost, appear here automatically. 🧾 creates & files the invoice PDF; 📤 marks it invoiced and moves it to the Invoiced tab. Applications stay grouped below until marked invoiced.
Everything invoiced to clients and due to come in. Once paid (💷 or a filed remittance) it moves to ✅ Client Payments Received.
| Ref | Description | Client(s) | Site(s) | Client ref(s) | Discipline(s) | Tasks | Total Value | Invoiced | Days to receive | Paid | Supplier invoice | Status |
|---|
✅ Client Payments Received
Every client invoice that's actually been paid, with the payment date, days-to-pay and the remittance on file.
Purchase orders that authorise work on a task. The contractor invoices the task in the usual way. For a cost that stands alone — materials, an abortive visit, an asset swap — use Direct POs.
| PO Ref | Date | Supplier | Linked Job | Client | Site | Description | Spend Limit | Status |
|---|
🚜 Plant & tool hire
Every hire agreement — quoted, approved, on hire and off hired. A hire is ordered on a Direct PO and billed in periods against it; this is the register. The cost keeps building until a hire is off-hired, so anything past its due-back date is flagged.
📤 Invoices Required
Completed jobs and works that still need you to raise an invoice. Upload your invoice against each one and it moves to Invoices Raised.
| Ref | Type | Client | Site | Description | Completed | Value (ex VAT) | Status |
|---|
🧾 Invoices Raised
Invoices you've uploaded, with their payment status against 45-day terms. Once we pay it, it shows as ✅ Paid.
| Ref | Type | Client | Site | Description | Invoice Date | Value (ex VAT) | Payment | Document |
|---|
✅ Payments Received
Every invoice that's been paid to you, with the payment date — the end of the job's money trail. Anything still awaiting payment stays on Invoices Raised with its day counter.
| Ref | Type | Client | Site | Description | Invoice Ref | Invoiced | Value (ex VAT) | Paid |
|---|
📁 My Documents
Your compliance documents on file with us — insurance (PL / EL / PI), policies and accreditations. Upload new or renewed documents into the right category; insurance uploads are also read automatically to update your expiry dates.
📄 Worksheets Required
Completed jobs and works that still need a signed worksheet. A worksheet must be uploaded before you can raise the invoice for that job.
| Ref | Type | Client | Site | Description | Completed | Status |
|---|
🗓 PPM Tasks
🛡 PPM Certificates
PPM visits that still need a certificate uploaded. Open a row to attach the certificate against that month.
| PPM Task | Site | Client | Month | Status |
|---|
📑 RAMS required before attendance
Approved works and PPM tasks that need a RAMS on file BEFORE your engineer attends. Upload job-specific RAMS here, or add generic RAMS below — Remi auto-matches generics to PPM tasks by discipline.
| Ref / Task | Type | Client | Site | Status |
|---|
📚 Generic RAMS library
Upload your standard RAMS for each trade you cover. Pick the discipline from the list so it links to your work automatically — typing it by hand is what used to leave method statements unmatched.
🔺 Uplift Required
Jobs where your engineer (or you) has flagged that an uplift is needed. The office reviews each one and submits it to the client for approval. Flag a new one with "🔺 Uplift needed" on any job.
| Ref | Type | Client | Site | Reason | Flagged | Status |
|---|
🤝 Tenant Reconciliation
Every task that exists in both books, line by line — with the finance stage each side has it at.
Supplier Received Invoices
Every supplier invoice uploaded to a task or PPM month lands here automatically.
| Task Ref | Supplier | Client | Site | Invoice Date | Value (cost £) | Due (45 days) | Payment | Document |
|---|
🚩 Supplier Tasks To Invoice · step 1 of 3
🕵️ CA — Certification Auditor is the AI agent behind this tab. The maths is his: call-out + first hour included, then labour in 30-minute steps from the engineer's check-in/out at the supplier's tier rates. Hit 🕵️ Ask CA on any request and he reads the worksheet, checks the times, materials and invoice against the entitlement, and advises — logged on the job timeline.
Every completed task with its worksheet or certificate on file sits here until an invoice is generated against it. Suppliers process tasks through CA (labour confirmed from check-in/out, materials added) singly or as a group application; the tenant can bypass by uploading the supplier's own invoice. Labour-adjustment requests appear inline for approval.
⏳ Awaiting Supplier Invoice Review
Generated supplier invoices and group applications land here for your approval. Approve and it moves to Suppliers To Be Paid with the payment clock running from today per their terms; decline and the supplier is notified with your reason. 🕵️ CA can audit any single invoice for you.
✅ Supplier Paid Invoices
Everything you've paid out to suppliers, with remittances — filter by supplier or month.
💸 Suppliers To Be Paid
Every received supplier invoice not yet paid, with its due date from the supplier's payment terms (days from invoice, or end-of-month + days). Overdue rows are flagged — mark paid as you settle them.
| Task Ref | Client | Building | Supplier | Invoice Ref | Invoice Date | Amount (ex VAT) | Terms | Due | Client invoiced? | Status | CA check |
|---|
🧾 Invoices Raised to Client
A permanent log of every client invoice you raise (single-task or application) — filter by client, site or discipline.
| Task / App Ref | Client | Site | Discipline | Invoiced | Value (ex VAT) | Status | Document |
|---|
Client Received POs
POs raised by your clients — the reference and any uploaded PO document from each task.
| Task Ref | Client | Site | Client PO No. | Value (client £) | Document |
|---|
🔧 Asset Register
🛡 Compliance
🔎 FILTER
📋 Statutory compliance register
| Site | Client | Compliance Type | Frequency | Last Done | Next Due / Expiry | Status | Document | Notes |
|---|
🚦 Trading Status
Flag sites that are business-impacted or not trading — everyone sees the heat.| Site | Client | Status | Note | Updated |
|---|
⭐ Tracked Tasks
Your pinned tasks — star any task to keep it here until you unstar it.| Ref | Type | Client | Site | Description | Status | Pinned |
|---|
Reactive Rates Matrix — supply chain vs client rate card
Each discipline expands to show every supplier's rates at the chosen tier, the supply-chain average, and a suggested client rate (average +15%) — tick ✓ Use or type your own. Pick a client top-right to give them their own rates (⧉ copy a card in, then edit); the Default card covers everyone else. The rate document prints only the priorities ticked below.
PPM Rates Matrix — planned maintenance rate card
Supplier PPM service rates grouped by discipline (from their questionnaires / rate cards). Suggested client rate = supplier base +15% — tick ✓ Use or type your own; margin shows beside each. Pick a client top-right for per-client PPM rates (⧉ copy a card in, then edit).
PPM Planner — compliance grid
🟩 compliant · 🟨 due · 🟦 awaiting attendance · 🟪 certs pending · 🟥 overdue / quote required · ⬜ not required — click any month cell to update it. 🛡 = certificate reviewed, ⚠ = review flagged.
ETA: ⏳ no ETA — nobody has said when they are attending · 📅 booked — ETA still ahead · ⌛ ETA passed — the date has gone and the visit is still open, chase these first.
Supplier Register
| Supplier | Disciplines | Status | Contact | Certs | Updated |
|---|
🔎 Scout — source new contractors
Got a coverage gap? Scout web-searches for real, accredited contractors in a trade + area, and drafts an onboarding invite for each — draft only, you send it when ready.
Coverage Lookup — who covers what, at what price
🗺 UK Coverage Map — supplier depth per region
Coverage Required — supplier count per discipline & region · red 0–1 · amber 2 · green 3+ · click a cell to look it up
User Profiles
| Name | Role | Joined |
|---|
Audit Trail — every change, who made it, and when
| When | Who | Action | Record | Detail |
|---|
🛡 Compliance Audit — Prospects
Send us a folder of certificates and we'll tell a prospect the truth about their estate before they've signed anything.
Sage reads each certificate, Atlas lifts the plant out of it, and you get two scores — what they can prove today,
and what they'd score if the paperwork we think is missing turns out to exist.
Kept entirely separate from your live clients until you win the work.
🧱 Asset Register Import
Upload a client's asset list (Excel or CSV) — a lift schedule, an M&E register, a condition survey.
I'll work out what each column means, show you the mapping and exactly what will happen to every row,
and write nothing until you confirm. Assets we already hold are matched and enriched, never duplicated.
🏢 Site List Import
Upload a client's site or property list (Excel or CSV). I'll find the duplicates —
both against what we already hold and within the sheet itself — and show you exactly what will change.
Existing sites only ever have blank fields filled in; nothing we hold is overwritten or cleared,
whatever the spreadsheet says.
🧬 Data Scraper Upload
Upload a client's site list, historic job/works history, or a PPM planner (CSV, Excel, text or PDF). Tell me what to do with it — I'll read it, show you a preview and an activity/spend analysis, and only build anything once you confirm. No manual typing of 100 sites.
Import from the offline CAFM system
In the offline app press Backup to save an OCFM_Backup_….json file,
then choose it here. Imports everything: suppliers (with all tier rates, coverage
and notes), reactive jobs, quote requests and approved works (SLA outcomes, costs,
notes) and the full PPM planner (sites, tasks, month history, cert reviews).
Records that already exist are skipped, never overwritten — safe to re-run any time.
💬 Feedback
Bugs get a first-look diagnosis from Remi automatically. Owners can reply here and the reporter is emailed your response. You can also use the 🐞 button in the bottom-left corner from any screen.
🧩 Modules
Extra ways of working, off unless you need them.
⚠ Site Rules & Instructions
Standing rules a contractor must follow at a client or a specific site — PPE, induction, permits,
reporting-in, parking, anything. Set once here and they are stamped automatically onto
every work order that leaves the system: reactive job instructions, quote requests,
approved works, PPM orders, purchase orders and callout cards. Site rules stack on top of the
client's rules — they don't replace them.
🎨 Organisation & Branding
Your identity across the system — quote packs, purchase orders, invoices, rate cards,
client reports and emails all carry it. Leave anything blank to keep the OC FM default.
This is what makes each organisation's workspace their own when the system is sold on.
No logo uploaded.
PNG/JPG/SVG, under 2MB — shown in the header and on quotes, POs, invoices, rate cards and reports.
✉️ Email Service
Note notifications, supplier job instructions and 2-working-day chase reminders send automatically through the notify function (Resend). Until the sending domain is verified in Resend, emails only deliver to the account owner's own address.
🏛 Buildings Register
Every client site as a proper record — auto-coded (PA001, CO001…), with postcode, address, contact and opening times. These power the Site / Building dropdown when logging jobs, quotes and works. Buildings missing key info carry a ⚠ until completed. Admins can also add buildings straight from the job form.
🏢 Sub-clients
Your clients (e.g. PANDA, COX) — these power the Client dropdown on jobs, quotes, works and PPM sites, the View-as switcher and the budgets below. No more free-typing, no duplicate spellings.
📊 Client Budgets (monthly)
Set an expected monthly spend per client — the Dashboard then shows Budget vs Actual for whichever period is selected. Leave blank for no budget.
Export all cloud data
Downloads everything in your organisation — suppliers, jobs, quotes, works and the full
PPM planner — as a dated JSON file. Keep one now and then as your own independent backup
of the database. (Uploaded documents stay safe in storage and aren't included in the file.)
Restore is additive — existing records are never touched or deleted; anything missing from the database is re-created from the file (matched by ID). Perfect after an accidental delete or on a fresh database.
🏗 Projects
A project is quoted in priced sections. Those same sections become the phases, the progress and the valuation — so there is only ever one thing to keep up to date.
🏛 Tenants — organisations on your platform
A tenant is a direct customer of yours using the system (e.g. OC FM Ltd) · a sub-client is that tenant's client (e.g. PANDA, COX) · a supplier is a contractor the tenant uses. Suppliers you mark 🌐 are maintained centrally by you and available to every tenant. Adding a tenant creates their organisation and emails their admin an invite — they create a login and manage their own clients, suppliers and users from there.