@rubytech/create-siteoffice-code 0.1.264 → 0.1.265
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +7 -2
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-search.test.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-search.test.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-search.test.js +106 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-search.test.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js +37 -2
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.d.ts +12 -0
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.d.ts.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js +175 -1
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js.map +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +239 -239
- package/payload/platform/plugins/admin/skills/superpowers-sprint/SKILL.md +3 -3
- package/payload/platform/plugins/admin/skills/upgrade/SKILL.md +2 -2
- package/payload/platform/plugins/cloudflare/PLUGIN.md +1 -1
- package/payload/platform/plugins/cloudflare/references/manual-setup.md +10 -10
- package/payload/platform/plugins/cloudflare/references/reset-guide.md +1 -1
- package/payload/platform/plugins/docs/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/docs/PLUGIN.md +6 -6
- package/payload/platform/plugins/docs/references/admin-session.md +1 -1
- package/payload/platform/plugins/docs/references/admin-ui.md +2 -2
- package/payload/platform/plugins/docs/references/cloudflare.md +1 -1
- package/payload/platform/plugins/docs/references/deployment.md +7 -7
- package/payload/platform/plugins/docs/references/linkedin-extension.md +4 -4
- package/payload/platform/plugins/docs/references/memory-guide.md +2 -2
- package/payload/platform/plugins/docs/references/neo4j.md +1 -1
- package/payload/platform/plugins/docs/references/outlook-guide.md +1 -1
- package/payload/platform/plugins/docs/references/platform.md +2 -2
- package/payload/platform/plugins/docs/references/plugins-guide.md +6 -6
- package/payload/platform/plugins/docs/references/troubleshooting.md +1 -1
- package/payload/platform/plugins/linkedin-extension/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/linkedin-extension/PLUGIN.md +1 -1
- package/payload/platform/plugins/linkedin-extension/extension/README.md +4 -4
- package/payload/platform/plugins/linkedin-extension/extension/assets/pill.css +1 -1
- package/payload/platform/plugins/linkedin-extension/extension/content/profile.js +2 -2
- package/payload/platform/plugins/linkedin-extension/extension/content/thread.js +2 -2
- package/payload/platform/plugins/linkedin-extension/extension/manifest.json +3 -3
- package/payload/platform/plugins/linkedin-extension/extension/options/options.html +3 -3
- package/payload/platform/plugins/linkedin-import/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/linkedin-import/PLUGIN.md +2 -2
- package/payload/platform/plugins/memory/references/graph-primitives.md +1 -1
- package/payload/platform/plugins/memory/references/schema-base.md +1 -1
- package/payload/platform/plugins/memory/references/schema-construction.md +1 -1
- package/payload/platform/plugins/memory/skills/conversation-archive-mcp/SKILL.md +2 -2
- package/payload/platform/plugins/notion-import/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/notion-import/PLUGIN.md +2 -2
- package/payload/platform/plugins/obsidian-import/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/obsidian-import/PLUGIN.md +2 -2
- package/payload/platform/plugins/obsidian-import/skills/obsidian-import/SKILL.md +1 -1
- package/payload/platform/plugins/obsidian-import/skills/obsidian-import/references/attachments.md +1 -1
- package/payload/platform/plugins/obsidian-import/skills/obsidian-import/references/daily-notes.md +1 -1
- package/payload/platform/plugins/obsidian-import/skills/obsidian-import/references/vault-structure.md +1 -1
- package/payload/platform/plugins/obsidian-import/skills/obsidian-import/references/wikilinks.md +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/outlook/references/auth.md +2 -2
- package/payload/platform/plugins/outlook/skills/outlook/SKILL.md +1 -1
- package/payload/platform/plugins/sales/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/sales/PLUGIN.md +8 -8
- package/payload/platform/plugins/sales/references/comparisons.md +18 -18
- package/payload/platform/plugins/sales/references/competitive-positioning.md +5 -5
- package/payload/platform/plugins/sales/references/faq.md +22 -22
- package/payload/platform/plugins/sales/references/objection-handling.md +3 -3
- package/payload/platform/plugins/sales/references/pricing.md +16 -16
- package/payload/platform/plugins/slides/PROVENANCE.md +1 -1
- package/payload/platform/plugins/substack-import/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/substack-import/PLUGIN.md +2 -2
- package/payload/platform/plugins/whatsapp/mcp/dist/__tests__/format-login-start.test.d.ts +2 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/__tests__/format-login-start.test.d.ts.map +1 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/__tests__/format-login-start.test.js +16 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/__tests__/format-login-start.test.js.map +1 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/format.d.ts +7 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/format.d.ts.map +1 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/format.js +21 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/format.js.map +1 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js +11 -19
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +1 -1
- package/payload/platform/plugins/whatsapp/skills/connect-whatsapp/SKILL.md +15 -13
- package/payload/platform/plugins/x-import/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/x-import/PLUGIN.md +2 -2
- package/payload/platform/scripts/check-skill-frontmatter.mjs +8 -5
- package/payload/platform/scripts/wifi-provision-server/server.js +1 -1
- package/payload/platform/scripts/wifi-provision.sh +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +15 -15
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +3 -3
- package/payload/platform/templates/specialists/.claude-plugin/plugin.json +1 -1
- package/payload/premium-plugins/venture-studio/skills/prototype-host/SKILL.md +1 -1
- package/payload/server/{adminuser-self-heal-YC47O34W.js → adminuser-self-heal-LC7HZAC6.js} +17 -9
- package/payload/server/{chunk-HYQNUVGO.js → chunk-PFF6I7KP.js} +1 -8
- package/payload/server/{chunk-ZC63DFWF.js → chunk-SOLVVUST.js} +1 -1
- package/payload/server/maxy-edge.js +2 -2
- package/payload/server/public/assets/{AdminShell-8JLQM1Mz.js → AdminShell-BcHJy_Y2.js} +1 -1
- package/payload/server/public/assets/{Checkbox-CuFJh7lI.js → Checkbox-BY2lndUH.js} +1 -1
- package/payload/server/public/assets/{admin-D4nsdmKU.js → admin-C364q_-g.js} +1 -1
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-D-ODjJS5.js → architectureDiagram-Q4EWVU46-B9ik0JyO.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DFuVe8f9.js → blockDiagram-DXYQGD6D-C-w-AMRJ.js} +1 -1
- package/payload/server/public/assets/{browser-DIKmvDl5.js → browser-D66JrDpx.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CeVLfznT.js → c4Diagram-AHTNJAMY-BH-b0NZ1.js} +1 -1
- package/payload/server/public/assets/channel-5xoW3jfU.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-BTaLfR3a.js → chunk-336JU56O-CZHLbmJj.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-BzTbm4pP.js → chunk-426QAEUC-Qx6Ggp9s.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-SiUyOXVG.js → chunk-4TB4RGXK-J1Raz9l0.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-BcQ33LnT.js → chunk-5FUZZQ4R-D6TFnJVF.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-CT7C1Tik.js → chunk-5PVQY5BW-CC5aEdzK.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-CK3uI2u6.js → chunk-EDXVE4YY-Bfbcdcbt.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-Ddp8Otnw.js → chunk-ENJZ2VHE-7EKi84Dw.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-DHTxymk_.js → chunk-ICPOFSXX-DIH1FT8n.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-Heg3hegz.js → chunk-OYMX7WX6-MgP02n7p.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-Cw2PR7aJ.js → chunk-U2HBQHQK-Cwmbq3M7.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-C7vBCAQQ.js → chunk-X2U36JSP-D65N3MkW.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-BS8Mybh1.js → chunk-YZCP3GAM-BkCiRhSG.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-DmnbQp47.js → chunk-ZZ45TVLE-3BQY1FWN.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-DRSNlIL5.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CYvRRfMp.js +1 -0
- package/payload/server/public/assets/clone-DvQUt_lq.js +1 -0
- package/payload/server/public/assets/{dagre-D4i6r8zi.js → dagre-DVhW13RD.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-znWS6Wh2.js → dagre-KV5264BT-CtfjEgDz.js} +1 -1
- package/payload/server/public/assets/{data-CHqF4bkS.js → data-uiOcPh8T.js} +1 -1
- package/payload/server/public/assets/{diagram-5BDNPKRD-B6tQBN1Y.js → diagram-5BDNPKRD-C8AXEFch.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-t73WpYIY.js → diagram-G4DWMVQ6-B1P8Cwuz.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-Cm63UOJm.js → diagram-MMDJMWI5-QBVBnPmO.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-DuTSLjVB.js → diagram-TYMM5635-D2xE8fN8.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-sbHunitX.js → erDiagram-SMLLAGMA-DMee1Yih.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BWOrPuqz.js → flowDiagram-DWJPFMVM-DAd3JjoB.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-WaLMGard.js → ganttDiagram-T4ZO3ILL-Bs33CmKo.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-CsbIgKDn.js → gitGraphDiagram-UUTBAWPF-NXc8aeps.js} +1 -1
- package/payload/server/public/assets/{graph-kwyPyf_b.js → graph-BSHyF267.js} +1 -1
- package/payload/server/public/assets/{graph-labels-pX3uIQys.js → graph-labels-D5ecmK-Z.js} +1 -1
- package/payload/server/public/assets/{graphlib-B8yKFZvc.js → graphlib-DN7sm5nK.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-Bd55TzsD.js → infoDiagram-42DDH7IO-D2g5STFr.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BFdOsA9f.js → ishikawaDiagram-UXIWVN3A-DBgfV-LB.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CMQ5XWO9.js → journeyDiagram-VCZTEJTY-Chh9lW9P.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-_RpNNRN7.js → kanban-definition-6JOO6SKY-buI2AXpi.js} +1 -1
- package/payload/server/public/assets/{line-SkFxjGJ8.js → line-C8OFYjrW.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-Ddok2IAe.js → mermaid-parser.core-BI5Ythbv.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-CihAjXBG.js → mermaid.core-C4dyl1Xw.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CJsq3hrO.js → mindmap-definition-QFDTVHPH-BbXKSpiv.js} +1 -1
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-CSgg8lBB.js → pieDiagram-DEJITSTG-C8-OIoUW.js} +1 -1
- package/payload/server/public/assets/{public-BA9P-3ZV.js → public-DGlZwbyw.js} +3 -3
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-TtHxMQtS.js → quadrantDiagram-34T5L4WZ-HOEtpu4n.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-DdYupKtL.js → requirementDiagram-MS252O5E-DLxjohCO.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-BVfdyUnO.js → sankeyDiagram-XADWPNL6-E_O_HiFL.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-aFLOua6n.js → sequenceDiagram-FGHM5R23-C3-hhAup.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-_3Ix8SPZ.js → stateDiagram-FHFEXIEX-BhAmQ0XX.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Dhrf9hq_.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-Bs96WqZ7.js → timeline-definition-GMOUNBTQ-DpfZt7xI.js} +1 -1
- package/payload/server/public/assets/{useSelectionMode-L9uAHstA.css → useSelectionMode-98jrB9kD.css} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-DE_SxsN2.js → vennDiagram-DHZGUBPP-Ck2Ago5q.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-DTCdKs6v.js → wardleyDiagram-NUSXRM2D-Dgk8C9kF.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CNIrxADs.js → xychartDiagram-5P7HB3ND-BRBSl8ID.js} +1 -1
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +5 -5
- package/payload/server/public/public.html +4 -4
- package/payload/server/server.js +607 -5064
- package/payload/server/public/assets/channel-Db8J_1Rl.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-DjquNGFr.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CcE8sWEP.js +0 -1
- package/payload/server/public/assets/clone-xa7JZYoY.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-eVQQEyxx.js +0 -1
- /package/payload/server/public/assets/{useSelectionMode-Da9Glxvu.js → useSelectionMode-80iYuGPa.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: linkedin-import
|
|
3
|
-
description: "Import a LinkedIn Basic Data Export into the
|
|
3
|
+
description: "Import a LinkedIn Basic Data Export into the SiteOffice Neo4j graph. Skill-only plugin owned by the librarian specialist. Opt-in per brand — not enabled by default."
|
|
4
4
|
tools: []
|
|
5
5
|
always: false
|
|
6
6
|
embed: false
|
|
@@ -10,7 +10,7 @@ metadata: {"platform":{"optional":true,"pluginKey":"linkedin-import"}}
|
|
|
10
10
|
|
|
11
11
|
# LinkedIn Import
|
|
12
12
|
|
|
13
|
-
Ingests a LinkedIn Basic Data Export (unzipped directory of CSVs + subdirectories) into the
|
|
13
|
+
Ingests a LinkedIn Basic Data Export (unzipped directory of CSVs + subdirectories) into the SiteOffice Neo4j graph. Skill-only plugin — no MCP server, no admin tools added. The skill runs under the `specialists:librarian` specialist, which owns foreground archive and document ingestion.
|
|
14
14
|
|
|
15
15
|
## When this applies
|
|
16
16
|
|
|
@@ -17,7 +17,7 @@ filter in the query.
|
|
|
17
17
|
|
|
18
18
|
For visual exploration ("can I see this graphically?", "show me the graph"),
|
|
19
19
|
tell the user to open the **Graph** menu item in the burger menu — it opens
|
|
20
|
-
a
|
|
20
|
+
a SiteOffice-native force-directed view of their own brand's subgraph.
|
|
21
21
|
Do not build ad-hoc HTML visualizations, do not start a static file server,
|
|
22
22
|
do not `Write` an `.html` file and navigate Playwright to it. The one-sentence
|
|
23
23
|
reply ("Open the Graph menu item in the top-right — it opens a visual view
|
|
@@ -18,7 +18,7 @@ When loading this reference, confirm which schema files were consulted by noting
|
|
|
18
18
|
| Job | `Order` | `schema:Order` + `cdm:Opportunity` | — | `accountId`, `orderNumber`, `customer` (id), `orderStatus` |
|
|
19
19
|
| Event | `Event` | `schema:Event` | iCalendar (RFC 5545) | `accountId`, `name`, `startDate`, `endDate` |
|
|
20
20
|
| Invoice | `Invoice` | `schema:Invoice` | UBL 2.1 + PDF/A | `accountId`, `confirmationNumber`, `customer` (id), `totalPaymentDue`, `paymentStatus` |
|
|
21
|
-
| Service | `Service` | `schema:Service` | Schema.org JSON-LD | `accountId`, `name`, `description
|
|
21
|
+
| Service | `Service` | `schema:Service` | Schema.org JSON-LD | `accountId`, `name`, `description` |
|
|
22
22
|
| PriceRule | `PriceSpecification` | `schema:PriceSpecification` | — | `accountId`, `price`, `priceCurrency` |
|
|
23
23
|
| Communication | `Message` | `schema:Message` + `cdm:Activity` | — | `accountId`, `sender`, `recipient`, `dateSent`, `channel` |
|
|
24
24
|
| Document | `DigitalDocument` | `schema:DigitalDocument` | Original format preserved | `accountId`, `name`, `dateCreated`, `encodingFormat` |
|
|
@@ -24,7 +24,7 @@ When loading this reference, confirm: "Using schema-base + schema-construction".
|
|
|
24
24
|
| SubInvoice | `SubInvoice` | `schema:Invoice` | `accountId`, `subContractorId`, `jobId`, `period`, `days`, `amount`, `status` |
|
|
25
25
|
| WhatsAppGroup | `WhatsAppGroup` | `cdm:Channel` | `accountId`, `groupId`, `jobId`, `clientName` |
|
|
26
26
|
|
|
27
|
-
These entities
|
|
27
|
+
These entities model a general builder job folder: a `Job` carries many `LineItem` rows organised by trade stage, a generated client `QuoteDocument`, supplier and sub-contractor invoices, and per-trade structure. A residential building job's line items typically span stages such as groundworks, sub-structure, superstructure, roof, structural alterations & envelope, first fix, drylining & plastering, floor screed, second fixing, knock-throughs, windows & doors, completion items and preliminaries, plus sub-contractor trades (scaffolding, roofing, electrical, plumbing, plastering, tiling, decorations). The schema carries no client, job, or pricing data of its own — those are per-account runtime values.
|
|
28
28
|
|
|
29
29
|
### Distinctions from schema-trades
|
|
30
30
|
|
|
@@ -7,7 +7,7 @@ description: Operator-initiated, MCP-driven transcript ingest for Granola / Otte
|
|
|
7
7
|
|
|
8
8
|
**Invoked from `specialists:librarian`** — the admin agent dispatches the librarian when the operator asks to ingest meetings from a transcription provider whose MCP is connected to Claude Code. The librarian loads this skill.
|
|
9
9
|
|
|
10
|
-
**Sibling of [`conversation-archive`](../conversation-archive/SKILL.md), not a replacement.** The file-drop skill stays the canonical path for sources without an MCP (WhatsApp, Telegram, Signal, Slack, etc.). This skill is the canonical path for the three transcription providers
|
|
10
|
+
**Sibling of [`conversation-archive`](../conversation-archive/SKILL.md), not a replacement.** The file-drop skill stays the canonical path for sources without an MCP (WhatsApp, Telegram, Signal, Slack, etc.). This skill is the canonical path for the three transcription providers SiteOffice's ICP pays for — Granola, Otter, Circleback — all of which ship first-class remote MCP servers. One skill fans out across three providers because the operator-facing flow is identical; the per-provider variance (which MCP tool to call, what the returned shape looks like) lives in the per-provider reference docs under [`../../references/transcript-formats/`](../../references/transcript-formats/).
|
|
11
11
|
|
|
12
12
|
**Shared writer surface.** Every meeting ingested through this skill lands as a `:ConversationArchive` indistinguishable in shape from a file-drop ingest of the same meeting:
|
|
13
13
|
|
|
@@ -151,7 +151,7 @@ For an empty-delta re-import (every meeting already ingested under the same `con
|
|
|
151
151
|
- **Operator-initiated only.** No auto-sync, no polling, no scheduled invocation. Every ingest is one explicit operator request.
|
|
152
152
|
- **Never auto-create a `:Person`.** Email-autoresolve binds to existing nodes only. The operator owns every create.
|
|
153
153
|
- **One skill, not three.** Per-provider variance lives in the reference docs, not in three near-duplicate skills.
|
|
154
|
-
- **Provider OAuth lives in the host.**
|
|
154
|
+
- **Provider OAuth lives in the host.** SiteOffice never holds a Granola / Otter / Circleback token. The operator runs `claude mcp add` and authorises each provider in the provider's own UI.
|
|
155
155
|
- **`calendarEventId` is the future primary MERGE key.** This skill stamps it; the writer-side MERGE-on-calendar-event change is [Task 408](../../../../.tasks/408-conversation-archive-calendar-merge-key.md). Until then, cross-provider dedup of the same meeting requires the operator to use a single provider per meeting.
|
|
156
156
|
|
|
157
157
|
## Verification (post-write)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "notion-import",
|
|
3
|
-
"description": "Import a Notion workspace export (markdown + CSV directory) into the
|
|
3
|
+
"description": "Import a Notion workspace export (markdown + CSV directory) into the SiteOffice Neo4j graph. Skill-only plugin owned by the database-operator specialist. Opt-in per brand — not enabled by default.",
|
|
4
4
|
"version": "0.1.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Rubytech LLC"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: notion-import
|
|
3
|
-
description: "Import a Notion workspace export (markdown + CSV directory) into the
|
|
3
|
+
description: "Import a Notion workspace export (markdown + CSV directory) into the SiteOffice Neo4j graph. Skill-only plugin owned by the database-operator specialist. Opt-in per brand — not enabled by default."
|
|
4
4
|
tools: []
|
|
5
5
|
always: false
|
|
6
6
|
embed: false
|
|
@@ -10,7 +10,7 @@ metadata: {"platform":{"optional":true,"pluginKey":"notion-import"}}
|
|
|
10
10
|
|
|
11
11
|
# Notion Import
|
|
12
12
|
|
|
13
|
-
Ingests a Notion workspace export (the native "Export all workspace content" markdown + CSV dump) into the
|
|
13
|
+
Ingests a Notion workspace export (the native "Export all workspace content" markdown + CSV dump) into the SiteOffice Neo4j graph. Skill-only plugin — no MCP server, no admin tools added. The skill runs under `specialists:database-operator`, which owns graph-write delegation from admin.
|
|
14
14
|
|
|
15
15
|
## When this applies
|
|
16
16
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obsidian-import",
|
|
3
|
-
"description": "Import an Obsidian vault (extracted directory of markdown notes + assets) into the
|
|
3
|
+
"description": "Import an Obsidian vault (extracted directory of markdown notes + assets) into the SiteOffice Neo4j graph. Skill-only plugin owned by the database-operator specialist. Opt-in per brand — not enabled by default.",
|
|
4
4
|
"version": "0.1.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Rubytech LLC"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: obsidian-import
|
|
3
|
-
description: "Import an Obsidian vault (extracted directory of markdown notes + assets) into the
|
|
3
|
+
description: "Import an Obsidian vault (extracted directory of markdown notes + assets) into the SiteOffice Neo4j graph. Skill-only plugin owned by the database-operator specialist. Opt-in per brand — not enabled by default."
|
|
4
4
|
tools: []
|
|
5
5
|
always: false
|
|
6
6
|
embed: false
|
|
@@ -10,7 +10,7 @@ metadata: {"platform":{"optional":true,"pluginKey":"obsidian-import"}}
|
|
|
10
10
|
|
|
11
11
|
# Obsidian Import
|
|
12
12
|
|
|
13
|
-
Ingests an extracted Obsidian vault (a directory tree of `.md` notes, frontmatter, wikilinks, tags, and embedded attachments) into the
|
|
13
|
+
Ingests an extracted Obsidian vault (a directory tree of `.md` notes, frontmatter, wikilinks, tags, and embedded attachments) into the SiteOffice Neo4j graph. Skill-only plugin — no MCP server, no admin tools added. The skill runs under the `specialists:database-operator` specialist, which owns external-archive ingestion.
|
|
14
14
|
|
|
15
15
|
## When this applies
|
|
16
16
|
|
|
@@ -67,7 +67,7 @@ The skill drives filter selection conversationally — not from a hardcoded list
|
|
|
67
67
|
- **Natural-edge discipline.** A wikilink `[[X]]` is the operator's statement "this note connects to X". That becomes either `:WIKILINKS_TO` (page-to-page within the vault) or `:MENTIONS` (page-to-entity). A tag `#foo` becomes `:TAGGED_WITH`. An embedded image becomes `:EMBEDDED_IN`. No synthetic edges; every edge corresponds to something the markdown actually expresses.
|
|
68
68
|
- **No raw Cypher in this skill.** All writes route through `mcp__plugin_memory_memory__obsidian-vault-import`, which internally calls the `memory-archive-write` handler (the agent never invokes archive-write directly — `obsidian-vault-import` is the only tool the agent calls). Bash improvisation against `cypher-shell` is forbidden; if a vault structure the parser doesn't yet handle is needed, file a task to extend the parser library, never paper over it with a script.
|
|
69
69
|
- **Provenance stamp.** Every node the handler creates carries `source='obsidian'`, `createdByAgent='obsidian-import'`, `createdBySource='obsidian-import'`, `createdBySession=<sessionId>`, `createdAt=datetime()`, plus `scope='admin'` for memory-visibility.
|
|
70
|
-
- **Idempotency.** Same vault, same contents, same owner re-imported → `written.createdPages=0`, `mergedPages=0`, all `pagesUnchanged`. Changed pages update in place. No deletions on re-import (operator removes a note from the vault → the corresponding :KnowledgeDocument stays in
|
|
70
|
+
- **Idempotency.** Same vault, same contents, same owner re-imported → `written.createdPages=0`, `mergedPages=0`, all `pagesUnchanged`. Changed pages update in place. No deletions on re-import (operator removes a note from the vault → the corresponding :KnowledgeDocument stays in SiteOffice until the operator explicitly trashes it).
|
|
71
71
|
|
|
72
72
|
## File roster — references
|
|
73
73
|
|
package/payload/platform/plugins/obsidian-import/skills/obsidian-import/references/daily-notes.md
CHANGED
|
@@ -16,7 +16,7 @@ Signals are evaluated in that order; the first match wins. No signal → `noteDa
|
|
|
16
16
|
|
|
17
17
|
When `noteDate` is non-null, the page's `:KnowledgeDocument` carries `noteDate: date('YYYY-MM-DD')` as a typed Neo4j `date` value. This is queryable: `MATCH (k:KnowledgeDocument) WHERE k.noteDate >= date('2026-01-01') RETURN k` returns every daily note from this year, without needing a separate `:Day` label.
|
|
18
18
|
|
|
19
|
-
No `:Day` node is created. The brief originally proposed `(:Page)-[:HAS_NOTE]->(:Day {date})`; the
|
|
19
|
+
No `:Day` node is created. The brief originally proposed `(:Page)-[:HAS_NOTE]->(:Day {date})`; the SiteOffice graph encodes the same information as a property on the page itself, mirroring `:Person.birthDate` and `:Event.eventDate`. Date-bearing event semantics live on `:TimelineEvent` (per Task 306), not here — a daily note is a document-at-a-date, not an event-on-a-date.
|
|
20
20
|
|
|
21
21
|
## Folder semantics
|
|
22
22
|
|
|
@@ -30,7 +30,7 @@ Pages without frontmatter are ingested with empty `aliases` and `tags` fields; t
|
|
|
30
30
|
|
|
31
31
|
## Title
|
|
32
32
|
|
|
33
|
-
Title is the filename without `.md`, normalised to NFC unicode form. Folder path is NOT part of the title — only the basename. Two pages can share a title (`Projects/
|
|
33
|
+
Title is the filename without `.md`, normalised to NFC unicode form. Folder path is NOT part of the title — only the basename. Two pages can share a title (`Projects/SiteOffice.md` and `People/Adam.md/SiteOffice.md`); they MERGE separately because the natural key is the full `obsidianPath`, not the title.
|
|
34
34
|
|
|
35
35
|
## Content hash
|
|
36
36
|
|
package/payload/platform/plugins/obsidian-import/skills/obsidian-import/references/wikilinks.md
CHANGED
|
@@ -9,7 +9,7 @@ The parser recognises four forms:
|
|
|
9
9
|
| Form | Components | Example |
|
|
10
10
|
|------|-----------|---------|
|
|
11
11
|
| Bare | target | `[[Adam]]` |
|
|
12
|
-
| With anchor | target, anchor | `[[Project
|
|
12
|
+
| With anchor | target, anchor | `[[Project SiteOffice#Goals]]` |
|
|
13
13
|
| With alias | target, alias | `[[Adam Langley\|Adam]]` |
|
|
14
14
|
| Embed | target (routed to attachments OR page-embed) | `![[Diagram.png]]` |
|
|
15
15
|
|
|
@@ -58,7 +58,7 @@ function getConfig() {
|
|
|
58
58
|
throw new Error("getConfig() called without ACCOUNT_ID — handler guard missing");
|
|
59
59
|
}
|
|
60
60
|
if (!OUTLOOK_CLIENT_ID) {
|
|
61
|
-
throw new Error("OUTLOOK_CLIENT_ID is not configured. Set it in the operator's
|
|
61
|
+
throw new Error("OUTLOOK_CLIENT_ID is not configured. Set it in the operator's SiteOffice install before using outlook tools.");
|
|
62
62
|
}
|
|
63
63
|
return {
|
|
64
64
|
clientId: OUTLOOK_CLIENT_ID,
|
|
@@ -25,13 +25,13 @@ To re-vendor at a newer SHA:
|
|
|
25
25
|
4. Bump `@maxy/outlook` version.
|
|
26
26
|
5. Run the test suite.
|
|
27
27
|
|
|
28
|
-
## Entra app registration (one-time per
|
|
28
|
+
## Entra app registration (one-time per SiteOffice install)
|
|
29
29
|
|
|
30
30
|
The plugin requires an Azure AD ("Entra ID") app the operator owns. Steps:
|
|
31
31
|
|
|
32
32
|
1. Sign in to the [Azure portal](https://portal.azure.com) with a Microsoft account.
|
|
33
33
|
2. Go to **Microsoft Entra ID → App registrations → New registration**.
|
|
34
|
-
3. **Name:** `
|
|
34
|
+
3. **Name:** `SiteOffice Outlook` (or any name the operator prefers).
|
|
35
35
|
4. **Supported account types:** *Accounts in any organizational directory and personal Microsoft accounts*.
|
|
36
36
|
5. **Redirect URI** (Platform: *Mobile and desktop applications*): `http://localhost`
|
|
37
37
|
- **Note:** no port is specified. Microsoft Identity Platform treats native-app loopback redirects with port-flexible matching, allowing the plugin to use an ephemeral port.
|
|
@@ -25,7 +25,7 @@ Do **not** activate for:
|
|
|
25
25
|
|
|
26
26
|
The Outlook plugin needs an **Entra app registration** in the operator's Microsoft tenant. This is a one-time-per-install step (not per-account), documented at [`references/auth.md`](references/auth.md).
|
|
27
27
|
|
|
28
|
-
Once the Entra app exists and `OUTLOOK_CLIENT_ID` is set in the
|
|
28
|
+
Once the Entra app exists and `OUTLOOK_CLIENT_ID` is set in the SiteOffice installation, run:
|
|
29
29
|
|
|
30
30
|
1. **`outlook-account-register`** — the tool returns an `authUrl`. The operator opens this URL in the VNC browser, signs in with the Microsoft account they want to connect, and consents to the requested scopes (`offline_access`, `User.Read`, `Mail.Read`, `Calendars.Read`, `Contacts.Read`).
|
|
31
31
|
2. Tool returns `{ status: "registered", graphUserId, scopes, tokenExpSec }` once consent completes.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sales",
|
|
3
|
-
"description": "Unified sales plugin for
|
|
3
|
+
"description": "Unified sales plugin for SiteOffice Phase 0. Detects buying signals, closes sales, frames value, handles objections, and captures prospect interest. Combines closing methodology with negotiation strategy for the public agent.",
|
|
4
4
|
"version": "0.1.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Rubytech LLC"
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sales
|
|
3
|
-
description: "Unified sales plugin for
|
|
3
|
+
description: "Unified sales plugin for SiteOffice Phase 0. Detects buying signals, closes sales, frames value, handles objections, and captures prospect interest. Combines closing methodology with negotiation strategy for the public agent."
|
|
4
4
|
metadata: {"platform":{"always":true,"embed":["public"],"pluginKey":"sales","optional":true}}
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Sales
|
|
8
8
|
|
|
9
|
-
You are
|
|
9
|
+
You are SiteOffice's sales agent. You detect buying signals, frame value, handle objections, close deals, and capture prospect contact details. You operate on every public agent conversation.
|
|
10
10
|
|
|
11
11
|
## The Golden Rule
|
|
12
12
|
|
|
@@ -52,7 +52,7 @@ Principles, not scripts. Adapt to the conversation's tone.
|
|
|
52
52
|
|
|
53
53
|
- **Direct Close** — Ask for commitment directly. Use when signals are strong: "Shall I get you set up?" / "Ready to go ahead?"
|
|
54
54
|
- **Choice Close** — Present two options, both of which are a "yes": "Would you prefer Solo or Family?"
|
|
55
|
-
- **Summary Close** — Recap their needs and what
|
|
55
|
+
- **Summary Close** — Recap their needs and what SiteOffice solves, then close. Use after long conversations with lots of detail shared.
|
|
56
56
|
- **Next-Step Close** — Propose a concrete small step: "The next step is getting your details on file — takes 30 seconds. Shall we do that now?"
|
|
57
57
|
- **Return Close** — When a prospect returns after a gap, they are ready. Confirm, don't re-sell: "Great to hear from you! Sounds like you're ready — shall we get you signed up?"
|
|
58
58
|
|
|
@@ -79,13 +79,13 @@ Tone: warm, not pushy. Frame it as keeping them informed, not as a commitment. O
|
|
|
79
79
|
|
|
80
80
|
You do not write any data. The name and email collected in conversation are persisted by admin-side tooling. If they decline, respect it and continue. Do not re-ask in the same session.
|
|
81
81
|
|
|
82
|
-
##
|
|
82
|
+
## SiteOffice Product Knowledge
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
SiteOffice is a personal and business AI assistant that runs on a device in your home or office. It connects to your services (calendar, email, WhatsApp, smart home) and acts as a proactive agent — not just a chatbot. It remembers context across conversations and takes action on your behalf.
|
|
85
85
|
|
|
86
86
|
Key differentiators:
|
|
87
87
|
- **Runs locally** — your data stays on your premises, not in someone else's cloud
|
|
88
|
-
- **Proactive** —
|
|
88
|
+
- **Proactive** — SiteOffice reaches out to you, not just responds when asked
|
|
89
89
|
- **Multi-channel** — works across WhatsApp, voice, web, and smart home
|
|
90
90
|
- **Plugin-based** — modular capabilities you can add based on what you need
|
|
91
91
|
- **Family-aware** — one system that knows and supports the whole household
|
|
@@ -101,6 +101,6 @@ Load the relevant reference when the situation requires it:
|
|
|
101
101
|
- **Objections & pivots** → `references/objection-handling.md` — Feel/Felt/Found, price objections, concession strategy
|
|
102
102
|
- **Competitive positioning** → `references/competitive-positioning.md` — differentiation without comparison, cheapest-vs-best principle
|
|
103
103
|
- **Tracking & follow-up** → `references/close-tracking.md` — persisting close attempts to memory, follow-up scheduling, escalation after stalled closes
|
|
104
|
-
- **Pricing** → `references/pricing.md` —
|
|
105
|
-
- **FAQ** → `references/faq.md` — common questions about
|
|
104
|
+
- **Pricing** → `references/pricing.md` — SiteOffice plans, hardware, plugin packs, add-ons
|
|
105
|
+
- **FAQ** → `references/faq.md` — common questions about SiteOffice, how it works, privacy, setup, capabilities
|
|
106
106
|
- **Comparisons** → `references/comparisons.md` — competitor comparison tables for positioning conversations
|
|
@@ -4,7 +4,7 @@ Use these tables for internal positioning only. Never read a comparison table to
|
|
|
4
4
|
|
|
5
5
|
## vs ChatGPT / Claude (direct AI chat)
|
|
6
6
|
|
|
7
|
-
| Dimension | ChatGPT / Claude Chat |
|
|
7
|
+
| Dimension | ChatGPT / Claude Chat | SiteOffice |
|
|
8
8
|
|-----------|----------------------|------|
|
|
9
9
|
| Mode | Reactive — you ask, it answers | Proactive — reaches out, reminds, acts |
|
|
10
10
|
| Memory | Limited session context | Persistent memory across all conversations |
|
|
@@ -14,11 +14,11 @@ Use these tables for internal positioning only. Never read a comparison table to
|
|
|
14
14
|
| Integration | Standalone | Connected to your calendar, email, WhatsApp, smart home |
|
|
15
15
|
| Family | Individual only | Family-aware with shared context and individual privacy |
|
|
16
16
|
|
|
17
|
-
**Key talking point:** "ChatGPT is brilliant at answering questions.
|
|
17
|
+
**Key talking point:** "ChatGPT is brilliant at answering questions. SiteOffice is built to take action. It's the difference between a search engine and an assistant."
|
|
18
18
|
|
|
19
19
|
## vs Claude Cowork / AI Productivity Tools
|
|
20
20
|
|
|
21
|
-
| Dimension | Claude Cowork |
|
|
21
|
+
| Dimension | Claude Cowork | SiteOffice |
|
|
22
22
|
|-----------|--------------|------|
|
|
23
23
|
| Focus | Work/professional tasks | Whole life — personal, family, home, work |
|
|
24
24
|
| Environment | Cloud-based workspace | Local device in your home |
|
|
@@ -26,11 +26,11 @@ Use these tables for internal positioning only. Never read a comparison table to
|
|
|
26
26
|
| Proactivity | On-demand | Proactive — initiates actions and reminders |
|
|
27
27
|
| Family | Not designed for households | Multi-user family support |
|
|
28
28
|
|
|
29
|
-
**Key talking point:** "Cowork is great for professional collaboration.
|
|
29
|
+
**Key talking point:** "Cowork is great for professional collaboration. SiteOffice manages your whole life — not just the work part."
|
|
30
30
|
|
|
31
31
|
## vs HubSpot / CRM Tools
|
|
32
32
|
|
|
33
|
-
| Dimension | HubSpot |
|
|
33
|
+
| Dimension | HubSpot | SiteOffice |
|
|
34
34
|
|-----------|---------|------|
|
|
35
35
|
| Purpose | Business CRM and marketing | Personal/family life management |
|
|
36
36
|
| Complexity | Enterprise-grade, steep learning curve | Conversational, learns from you naturally |
|
|
@@ -38,23 +38,23 @@ Use these tables for internal positioning only. Never read a comparison table to
|
|
|
38
38
|
| Personal use | Not designed for personal life | Built for personal and family use |
|
|
39
39
|
| Automation | Template-based workflows | Context-aware, adaptive actions |
|
|
40
40
|
|
|
41
|
-
**Key talking point:** "HubSpot manages your business relationships.
|
|
41
|
+
**Key talking point:** "HubSpot manages your business relationships. SiteOffice manages your life."
|
|
42
42
|
|
|
43
43
|
## vs Calendly / Scheduling Tools
|
|
44
44
|
|
|
45
|
-
| Dimension | Calendly |
|
|
45
|
+
| Dimension | Calendly | SiteOffice |
|
|
46
46
|
|-----------|---------|------|
|
|
47
47
|
| Scope | Meeting scheduling only | Full calendar management plus everything else |
|
|
48
48
|
| Intelligence | Rule-based availability | Context-aware — knows your preferences, energy levels, travel time |
|
|
49
49
|
| Integration | Calendar + video conferencing | Calendar + email + WhatsApp + smart home + everything |
|
|
50
50
|
| Proactivity | Sends links when asked | Detects conflicts, suggests rescheduling, reminds proactively |
|
|
51
|
-
| Cost | Free tier; Pro from $10/month | Included in
|
|
51
|
+
| Cost | Free tier; Pro from $10/month | Included in SiteOffice Solo (£20/month) with all other capabilities |
|
|
52
52
|
|
|
53
|
-
**Key talking point:** "Calendly handles scheduling.
|
|
53
|
+
**Key talking point:** "Calendly handles scheduling. SiteOffice handles scheduling, reminders, messages, and everything else — it's your whole assistant, not just a booking link."
|
|
54
54
|
|
|
55
55
|
## vs Google Workspace / Microsoft 365
|
|
56
56
|
|
|
57
|
-
| Dimension | Google/Microsoft Suite |
|
|
57
|
+
| Dimension | Google/Microsoft Suite | SiteOffice |
|
|
58
58
|
|-----------|----------------------|------|
|
|
59
59
|
| Model | Collection of separate apps | One unified brain across all services |
|
|
60
60
|
| Intelligence | Each app has its own limited AI | One AI that understands context across everything |
|
|
@@ -63,11 +63,11 @@ Use these tables for internal positioning only. Never read a comparison table to
|
|
|
63
63
|
| Family | Separate accounts, no shared intelligence | Family-aware with shared context |
|
|
64
64
|
| Personal assistant | Fragmented (Assistant, Cortana) | Unified, persistent, proactive |
|
|
65
65
|
|
|
66
|
-
**Key talking point:** "Google gives you the tools.
|
|
66
|
+
**Key talking point:** "Google gives you the tools. SiteOffice uses the tools for you."
|
|
67
67
|
|
|
68
68
|
## vs WhatsApp Business / Messaging
|
|
69
69
|
|
|
70
|
-
| Dimension | WhatsApp Business |
|
|
70
|
+
| Dimension | WhatsApp Business | SiteOffice |
|
|
71
71
|
|-----------|------------------|------|
|
|
72
72
|
| Channel | WhatsApp only | WhatsApp + voice + web + smart home |
|
|
73
73
|
| Intelligence | Templates and auto-replies | Full AI understanding and action |
|
|
@@ -75,11 +75,11 @@ Use these tables for internal positioning only. Never read a comparison table to
|
|
|
75
75
|
| Scope | Messaging | Messaging + calendar + tasks + smart home + everything |
|
|
76
76
|
| Automation | Canned responses | Context-aware, personalised actions |
|
|
77
77
|
|
|
78
|
-
**Key talking point:** "WhatsApp Business automates messages.
|
|
78
|
+
**Key talking point:** "WhatsApp Business automates messages. SiteOffice understands conversations and acts on them."
|
|
79
79
|
|
|
80
80
|
## vs Hiring Staff / Virtual Assistants
|
|
81
81
|
|
|
82
|
-
| Dimension | Human VA / Staff |
|
|
82
|
+
| Dimension | Human VA / Staff | SiteOffice |
|
|
83
83
|
|-----------|-----------------|------|
|
|
84
84
|
| Availability | Business hours (or expensive 24/7) | Always on, 24/7 |
|
|
85
85
|
| Cost | £1,500-3,000+/month for a good VA | From £20/month |
|
|
@@ -88,12 +88,12 @@ Use these tables for internal positioning only. Never read a comparison table to
|
|
|
88
88
|
| Scale | One person, limited bandwidth | Handles everything simultaneously |
|
|
89
89
|
| Ramp-up | Weeks to months to train | Minutes to set up, learns continuously |
|
|
90
90
|
|
|
91
|
-
**Key talking point:** "A good VA costs £2,000/month and still can't be available at 3am.
|
|
91
|
+
**Key talking point:** "A good VA costs £2,000/month and still can't be available at 3am. SiteOffice costs £20/month and never sleeps."
|
|
92
92
|
|
|
93
93
|
## Positioning Principles
|
|
94
94
|
|
|
95
|
-
1. **Never disparage.** Present
|
|
95
|
+
1. **Never disparage.** Present SiteOffice's strengths. Let the prospect draw comparisons.
|
|
96
96
|
2. **Lead with their criteria.** Ask what matters to them, then position against those criteria.
|
|
97
97
|
3. **Be honest about limitations.** If a competitor genuinely does something better in a specific area, acknowledge it. Honesty builds trust.
|
|
98
|
-
4. **The real competitor is inertia.** Most prospects aren't choosing between
|
|
99
|
-
5. **Use the "Two Options" framing.** "You can keep juggling twelve apps, or you can let
|
|
98
|
+
4. **The real competitor is inertia.** Most prospects aren't choosing between SiteOffice and a competitor — they're choosing between SiteOffice and doing nothing. Position against the status quo.
|
|
99
|
+
5. **Use the "Two Options" framing.** "You can keep juggling twelve apps, or you can let SiteOffice handle it. Which sounds better?"
|
|
@@ -14,10 +14,10 @@ This is a universal truth that prospects intuitively understand. Use it as a pri
|
|
|
14
14
|
|
|
15
15
|
## Differentiation Without Comparison
|
|
16
16
|
|
|
17
|
-
Instead of comparing features with competitors, focus on what makes
|
|
17
|
+
Instead of comparing features with competitors, focus on what makes SiteOffice different in terms the prospect cares about:
|
|
18
18
|
|
|
19
19
|
1. **Ask what matters:** "What's most important to you in choosing a solution?"
|
|
20
|
-
2. **Position on their criteria:** Use their answer to highlight
|
|
20
|
+
2. **Position on their criteria:** Use their answer to highlight SiteOffice's strengths
|
|
21
21
|
3. **Let them draw the comparison:** "Based on what you've told me matters, here's how we approach that..."
|
|
22
22
|
|
|
23
23
|
The prospect does the comparing. You just present your strengths against their stated criteria.
|
|
@@ -30,16 +30,16 @@ The prospect does the comparing. You just present your strengths against their s
|
|
|
30
30
|
4. **Position on genuine differentiators:** Only mention things that are genuinely different, not marginally better.
|
|
31
31
|
5. **If they ask you to compare directly:** "I can only speak to what we do well — I'd rather show you than tell you about someone else."
|
|
32
32
|
|
|
33
|
-
##
|
|
33
|
+
## SiteOffice's Core Differentiators
|
|
34
34
|
|
|
35
35
|
When positioning against alternatives, these are the genuine differentiators:
|
|
36
36
|
|
|
37
37
|
- **Local-first:** Data stays in the home. No cloud storage of personal information. This is unique among consumer AI assistants.
|
|
38
|
-
- **Proactive, not reactive:**
|
|
38
|
+
- **Proactive, not reactive:** SiteOffice reaches out to you. It doesn't wait for you to open an app.
|
|
39
39
|
- **Cross-channel:** One brain across WhatsApp, voice, web, and smart home. Not siloed apps.
|
|
40
40
|
- **Family-aware:** Designed for households, not just individuals. Shared context with individual privacy.
|
|
41
41
|
- **Skill-based:** Pay for what you use. Not a monolithic subscription with features you'll never touch.
|
|
42
|
-
- **Agentic:**
|
|
42
|
+
- **Agentic:** SiteOffice takes action (books, sends, reminds, manages) — not just answers questions.
|
|
43
43
|
|
|
44
44
|
## When They've Already Chosen the Competitor
|
|
45
45
|
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
#
|
|
1
|
+
# SiteOffice FAQ
|
|
2
2
|
|
|
3
|
-
## What is
|
|
3
|
+
## What is SiteOffice?
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
SiteOffice is your Operations Manager — an operations layer, not a productivity tool. It doesn't help you work faster. It does the work that otherwise doesn't get done.
|
|
6
6
|
|
|
7
|
-
Most people know they should be using a CRM, a task manager, a follow-up system. Most don't — because every tool demands a new habit on top of an already full day.
|
|
7
|
+
Most people know they should be using a CRM, a task manager, a follow-up system. Most don't — because every tool demands a new habit on top of an already full day. SiteOffice removes that cost entirely. You just talk, and the organisation happens.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
SiteOffice plays four roles: it follows through on your commitments, responds to your customers at any hour, handles your finances (quotes, invoices, chasing), and manages your picture — what's overdue, what's at risk, what needs a decision. It runs on a device on your premises, so your data never leaves.
|
|
10
10
|
|
|
11
11
|
## Can this actually run my business?
|
|
12
12
|
|
|
13
|
-
Yes.
|
|
13
|
+
Yes. SiteOffice handles the operations layer — the work that keeps a business running but isn't the work you went into business to do. Scheduling, customer enquiries, quoting, invoicing, document creation, follow-ups, workflows, CRM updates, proactive briefings. A 2-person business with the operational capacity of a 20-person operation — because SiteOffice provides both the admin nobody sees and the customer-facing team everyone does.
|
|
14
14
|
|
|
15
|
-
## How is
|
|
15
|
+
## How is SiteOffice different from ChatGPT / Siri / Alexa?
|
|
16
16
|
|
|
17
|
-
ChatGPT helps you think and write. Siri and Alexa respond to commands.
|
|
17
|
+
ChatGPT helps you think and write. Siri and Alexa respond to commands. SiteOffice runs your operation. It notices your calendar clash and fixes it, creates and delivers documents to clients, answers customer enquiries on your website at 3am, runs workflows you described once in conversation, and generates your morning briefing before you've opened your laptop. It also runs locally on your device, so your data isn't stored in someone else's cloud.
|
|
18
18
|
|
|
19
|
-
The comparison that matters isn't
|
|
19
|
+
The comparison that matters isn't SiteOffice vs ChatGPT. It's SiteOffice vs hiring someone — or vs doing it all yourself.
|
|
20
20
|
|
|
21
|
-
## Can
|
|
21
|
+
## Can SiteOffice create documents?
|
|
22
22
|
|
|
23
|
-
Yes. Describe what you need — a quote, a proposal, an invoice, a report, a flyer, a compliance document — and
|
|
23
|
+
Yes. Describe what you need — a quote, a proposal, an invoice, a report, a flyer, a compliance document — and SiteOffice generates it as a professional A4 PDF. Review it in the conversation, download it, or deliver it directly to a customer via WhatsApp or email. Quotes, proposals, invoices, reports, marketing materials, compliance documents — all created through conversation.
|
|
24
24
|
|
|
25
25
|
## How does it work technically?
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
SiteOffice runs on a Raspberry Pi (the SiteOffice Pi) or any Linux computer on your premises. It uses Claude as its AI backbone. Your personal data — calendar entries, messages, memories, preferences — stays on the device. SiteOffice connects to external services via APIs but processes everything locally.
|
|
28
28
|
|
|
29
29
|
## What about privacy?
|
|
30
30
|
|
|
31
|
-
Privacy is the architecture, not a feature. Your data lives on a device you own, on your premises.
|
|
31
|
+
Privacy is the architecture, not a feature. Your data lives on a device you own, on your premises. SiteOffice doesn't upload personal information to cloud servers. When SiteOffice uses Claude for reasoning, it sends only what's needed for the current task — not your entire history.
|
|
32
32
|
|
|
33
33
|
## How do I set it up?
|
|
34
34
|
|
|
35
|
-
1. Get a
|
|
35
|
+
1. Get a SiteOffice device (from £250 for a pre-configured Raspberry Pi, or use your own Linux machine)
|
|
36
36
|
2. Plug it in and connect to Wi-Fi
|
|
37
37
|
3. Open your browser, set a PIN, and connect your Claude subscription
|
|
38
|
-
4. Start talking —
|
|
38
|
+
4. Start talking — SiteOffice walks you through the rest
|
|
39
39
|
|
|
40
40
|
Fully operational in under 15 minutes. No software to install, no configuration, no training.
|
|
41
41
|
|
|
42
|
-
## What can
|
|
42
|
+
## What can SiteOffice actually do?
|
|
43
43
|
|
|
44
44
|
Core capabilities (included in every plan):
|
|
45
45
|
- **Scheduling** — appointments, recurring events, daily briefings, proactive reminders
|
|
46
46
|
- **Contact management** — CRM, pipeline tracking, customer history
|
|
47
|
-
- **Workflow automation** — describe a process once,
|
|
47
|
+
- **Workflow automation** — describe a process once, SiteOffice runs it forever
|
|
48
48
|
- **Document creation** — quotes, proposals, invoices, reports, marketing materials — generated and delivered
|
|
49
49
|
- **Customer-facing agents** — sales, support, booking agents on your website or messaging apps
|
|
50
50
|
- **Message handling** — WhatsApp, Telegram, and email integration
|
|
51
51
|
- **Memory** — remembers your preferences, past conversations, and context across sessions
|
|
52
52
|
|
|
53
|
-
With skill packs,
|
|
53
|
+
With skill packs, SiteOffice adds depth in specific areas: finance, wellness, professional productivity, family coordination, home management, and travel.
|
|
54
54
|
|
|
55
55
|
## Do I need the hardware?
|
|
56
56
|
|
|
57
|
-
Yes.
|
|
57
|
+
Yes. SiteOffice runs on a device on your premises. This is what keeps your data private and local. There is no cloud-only option — the local-first architecture is fundamental to how SiteOffice works.
|
|
58
58
|
|
|
59
59
|
## Can multiple family members use it?
|
|
60
60
|
|
|
61
|
-
Yes, with the Family plan (£999/year). Each family member gets their own profile with individual privacy.
|
|
61
|
+
Yes, with the Family plan (£999/year). Each family member gets their own profile with individual privacy. SiteOffice understands shared context (family calendar, household tasks) while keeping personal information separate.
|
|
62
62
|
|
|
63
63
|
## What if I need help?
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
SiteOffice itself can answer most questions about its own capabilities. For technical issues or account questions, support is available via the SiteOffice app and email.
|
|
66
66
|
|
|
67
67
|
## Is there a trial or money-back guarantee?
|
|
68
68
|
|
|
@@ -70,4 +70,4 @@ Details on trial availability will be confirmed at launch. Share your name and e
|
|
|
70
70
|
|
|
71
71
|
## How is this different from just using multiple apps?
|
|
72
72
|
|
|
73
|
-
Multiple apps don't talk to each other. Your calendar doesn't know about your emails. Your reminders don't know about your calendar. Your document tool doesn't know about your CRM.
|
|
73
|
+
Multiple apps don't talk to each other. Your calendar doesn't know about your emails. Your reminders don't know about your calendar. Your document tool doesn't know about your CRM. SiteOffice connects everything into a single graph — meetings connected to people, people connected to deals, deals connected to history. That context is what makes the four roles possible. No isolated app can replicate this — because isolation is their fundamental constraint. One Operations Manager instead of twelve apps.
|
|
@@ -42,7 +42,7 @@ The universal objection-handling pattern. Works for price and almost any other c
|
|
|
42
42
|
> "I understand how you feel — it's a significant investment. Many people felt the same way initially. However, most found that within the first month, the time saved more than covered the cost."
|
|
43
43
|
|
|
44
44
|
*Unsure about value:*
|
|
45
|
-
> "I get how you feel — it's hard to know if it's worth it before you've tried it. Others felt the same. What they found was that once
|
|
45
|
+
> "I get how you feel — it's hard to know if it's worth it before you've tried it. Others felt the same. What they found was that once SiteOffice started managing their calendar and messages proactively, they couldn't go back."
|
|
46
46
|
|
|
47
47
|
*Comparing to cheaper option:*
|
|
48
48
|
> "I understand how you feel — the price difference is noticeable. Others have felt the same and tried the cheaper option first. What they found was it couldn't act proactively or connect their services together, and they ended up coming back."
|
|
@@ -115,9 +115,9 @@ This is a legitimate blocker.
|
|
|
115
115
|
### Trust: "How do I know it actually works?"
|
|
116
116
|
|
|
117
117
|
1. Offer to walk them through specifics relevant to their use case
|
|
118
|
-
2. Reference the early-access programme — being honest about where
|
|
118
|
+
2. Reference the early-access programme — being honest about where SiteOffice is builds trust
|
|
119
119
|
3. Emphasise the local-first privacy model — data stays in their home
|
|
120
|
-
4. Be honest: "We're early — the best way to see is to try it. That's why we're building a small group of early adopters who want to shape what
|
|
120
|
+
4. Be honest: "We're early — the best way to see is to try it. That's why we're building a small group of early adopters who want to shape what SiteOffice becomes."
|
|
121
121
|
|
|
122
122
|
## Concession Strategy
|
|
123
123
|
|