# Chainsight PM Across — Universal Multi-Client Edition

A single, self-contained **offline** project-plan application. Everything runs in one HTML file in your
browser — **no install, no server, no internet, and no data leaves the file.** Originally built for Bob's
Phase 1.2 Extension; now **universal** — one tool can manage many clients, each saved as a portable project file.

- **App:** `Chainsight_Project_Console_BobsPhase12.html` — double-click to open in any modern browser.
- Ships seeded with the Bob's Phase 1.2 plan (6 workstreams, ~40 tasks, milestones 8/10 & 8/17) from the
  Extension Kickoff deck + Fathom (7/22–7/24).

> **Two editions:** the **offline single-file** app (documented first, below) and the newer **Team (Cloud) edition** — a shared, multi-user version where everyone signs in with Microsoft and edits one live plan stored in SharePoint. **Its configuration and the shared-update automation are documented in the "TEAM (CLOUD) EDITION" section near the bottom.**

---

## Views (top tabs)

| View | What it does |
|------|--------------|
| **Timeline** | Tasks by workstream in a table + inline **Gantt** with a live "today" line. Each row shows the **serial number**, editable **owner / priority / status / %**, dates, task **links**, and a **🗑 delete** button. |
| **Board** | Jira-style **Kanban** — six columns (Backlog → To Do → In Progress → Blocked → Done → **Cancelled**). **Drag cards** to change status. Cards show workstream, serial, owner, priority flag, due date. |
| **Meeting Intel** | Latest **decisions** and **follow-up items** from Fathom, **scoped to the active project** and its Fathom folder. Each follow-up has **"→ Add as task"** (owner + due prefilled). A toolbar shows the client + Fathom target and a **⌫ Clear all intel** button to **purge** this project's decisions & follow-ups (only this project is affected; repopulate from ⟳ Plan Refresh). |

## Task fields & editing

- **Serial numbers** — every task gets a permanent, unique ID (e.g., `BDF-001`) that tracks it for the whole
  lifecycle. Serials are **never reused**, even after a task is deleted. The prefix comes from Setup.
- **Priority** — Critical / High / Medium / Low, editable inline (Timeline) or in the task editor; shown as a
  colored flag on Board cards.
- **Status** — Backlog / To Do / In Progress / Blocked / Done / **Cancelled**. Cancelled tasks are struck through
  and excluded from % complete and RAG.
- **Comments** — a **date-stamped** comment log per task (open a task → add a comment; each is tagged with the
  date). These feed the **Log** column of the Excel export.
- **Linked tasks** — link any task to others (checkboxes in the editor). Links are **two-way** and appear as
  clickable 🔗 chips; deleting a task cleans up its links automatically.
- **Delete** — 🗑 on every Timeline row (or the editor's Delete). Always **asks you to confirm** first.
- **+ Task** adds one manually; click any task (row or card) to open the full editor.

## Filter, levers & status

- **Filter Status bar** — toggle status chips to show/hide tasks by status across Timeline and Board. "Show all" resets.
- **Project length lever (6 / 8 / 10 / 12 weeks)** — rescales **every target date** proportionally. Pair with the **Start** date picker.
- Program status (**RAG**) and each workstream's roll-up recompute automatically; overdue targets flag red.

## Projects — many clients in one tool

The console holds **every client project in this one HTML file** (a browser "workspace"):
- **Project dropdown** (top control bar) — switch between clients instantly. Switching auto-saves the one you're leaving first, so nothing is lost.
- **⚙ Setup → ✚ New project / ⧉ Duplicate / 🗑 Delete project** — New and Duplicate create a *separate, isolated* project and never touch the others. Each project has **its own serial numbers** (e.g., `BDF-001`, `ACME-001`), so there's **no mismatch or duplicates** across clients.
- **💾 Save (.json)** exports the active project; **⭳ Import project** brings a `.json` in as a *new* project (never overwrites the current one).

## ⚙ Setup — per-client configuration

- **Client name, Project, PM name, Task ID prefix** — drive the header, exports, and serial numbers.
- **Default hourly rate ($/hr)** — the fallback rate; each **assignee** can carry their own $/hr (in the Assignees list) which overrides it. Internal-task cost uses the owner's rate.
- **Client logo** — upload the client's logo; it co-brands the header (beside the Chainsight mark) and the **PPT status slide**. *Remove* clears it.
- **Fathom MCP targets** — the Fathom team/workspace and meeting folders Chainsight uses when regenerating the Plan Refresh sync.
- **Assignees** — add / remove members with name + color + **hourly rate ($/hr)** (blank uses the default rate), or **⭱ Import** a `.csv` (`name`, optional `#hexcolor`, optional `rate` per line) or a `.json`. New assignees appear in every task's Owner dropdown; removing one reassigns its tasks to *Unassigned*.
- **Workstreams** — rename, recolor, add, or remove the workstreams that group your tasks. Renaming updates everywhere; removing one moves its tasks to the first remaining workstream. (A brand-new project starts with generic Workstream 1–4.)

## Chainsight internal resource & budget

- Any task can be flagged **Chainsight internal resource** with an **Effort (hours)** value (task editor). Internal tasks show a **CS** badge + hours on the Timeline/Board.
- The summary strip shows **CS internal cost** = Σ (each internal task's hours × its owner's rate).
- Excel adds a **Budget** sheet (ID · Task · Owner · Workstream · Hours · **Rate** · Cost) with the internal total.

## 🔒 Data lock &amp; auto-save (zero data loss)

- **Auto-save** — every change is saved to the browser automatically (the header shows **✓ Saved**). Close and reopen, or refresh the page, and your work is **restored exactly** — nothing is lost between refreshes. (Works when you open the local file; a header note reads *"Auto-save off"* if a sandboxed viewer blocks storage.)
- **🔒 Data lock** (header toggle) — click to **lock**. While locked, **⟳ Plan Refresh only adds new tasks and never changes the ones you have**, and Load/New-client can't overwrite your data. Unlock to let refresh update progress again.
- **Adjustment protection** — even unlocked, any task **you edited** (owner/status/%/priority/drag) is left untouched by Plan Refresh. The refresh dialog reports what it added, what it updated, and what it **held/protected**.

## ⟳ Plan Refresh (Fathom sync)

Applies the latest Fathom review — **bumps progress** on tasks meetings advanced, **adds newly-surfaced
tasks**, and also **refreshes Meeting Intel** (merges new **decisions** and **follow-ups** into that tab).
Everything is **de-duplicated by text**, so it's safe to click / re-load again; you get a changelog of what
changed (new tasks, progress updates, and new intel). The refresh dialog gives you **three sources**:

1. **⟡ Refresh from Fathom (live)** — *published (hosted) version only.* When you open the tool from its
   claude.ai artifact link and have the **Fathom connector** added (claude.ai → Settings → Connectors), this
   pulls your recent Fathom meetings for this client, extracts decisions / follow-ups / tasks, and opens a
   **review screen** so you pick what to apply. (In the offline file this button explains it's hosted-only.)
2. **⭱ Analyze transcript / summary** — *works everywhere, including offline.* Upload a meeting **transcript or
   summary** (`.txt`, `.md`, `.vtt`, `.srt`) — the tool parses it into candidate decisions and action items
   (owner, workstream, and due-date guessed, all editable) and opens the same **review screen**. Fathom-style
   summaries (with **Key Takeaways** / **Next Steps** headings) parse best.
3. **Load .json** — a pre-built sync file (`progress`, `newTasks`, `decisions`, `followups`); Chainsight can
   regenerate this from a client's Fathom folder on request.

**Review before apply:** live and transcript sources never write blindly — every extracted item is a checkbox
you can edit (owner / workstream / due) or uncheck, and "add as task" turns a follow-up into a tracked task.
The review screen also has a **Replace this project's meeting intel** option — tick it to **purge existing
decisions & follow-ups first**, so Meeting Intel reflects *only* the pull you just made from the selected
Fathom folder (leave it off to add to what's there).

## Exports

| Button | Output |
|--------|--------|
| **▦ Excel** | A workbook whose primary **RAID Log** sheet uses your exact column layout — *ID · RAID ID · RAID Type · CR Impacted · Date Added · Description · Impact · Status · Owner · Log · Resolution · Target Date · Comments* — plus **Status Summary** and **Decisions & Follow-ups** sheets. Serials populate *RAID ID*; the date-stamped comment log populates *Log*. |
| **▤ PPT Status** | One branded **Program Status Summary** slide (overall RAG, workstreams, milestones, latest decisions) — titled from your Setup client/project. |

Both are generated entirely in the browser and open cleanly in Excel / PowerPoint.

## ⓘ Overview

An in-app overview panel summarizing every feature — handy for anyone you share the tool with.

---

## Good to know

- Edits **auto-save** to the browser and survive refreshes. For a portable copy or to move between machines, use **⚙ Setup → Save project** (and **Load project** to restore).
- Export to **Excel** / **PPT** anytime to snapshot the current plan.
- Re-branding or refreshing the Fathom sync for another client: ask Chainsight — both are quick.
- Brand: Chainsight navy `#123C62` / orange `#E98211`, Montserrat + Open Sans. Logo embedded in the file.

---

# TEAM (CLOUD) EDITION — shared, multi-user

The **cloud edition** turns PM Across into a truly shared tool: everyone opens **one web link**, signs in with their **Chainsight Microsoft account**, and edits the **same live plan**. Data is stored in a **SharePoint list in your own Microsoft 365 tenant** — nothing leaves Chainsight, and there's no more "my copy vs your copy" or edits reverting.

- **Source file:** `Chainsight_PM_Across_CLOUD.html`
- **Deploy folder:** `PMA_Deploy\` — `index.html` (a copy of the CLOUD file) + `msal-browser.min.js`
- **Live team URL:** https://pma-chainsight.pages.dev/ (Cloudflare Pages)
- Header badge reads **☁ TEAM · SHARED**; version tag shows **build vNN · cloud**.

| | Offline file | Team (Cloud) edition |
|---|---|---|
| Storage | browser localStorage (per person) | **SharePoint list `PMA_Store`** (shared) |
| Sign-in | none | **Microsoft (M365 SSO)** |
| Multiple editors | no — each has own copy | **yes — live ~9s sync + collision protection** |
| How it runs | double-click the file | open a **web URL** (localhost for testing) |

## One-time configuration (already set up — reference)

**1) Entra (Azure AD) app registration** — signs users in.
- Name **PM Across** · **Application (client) ID** `4ce83106-100e-46b5-8bf5-c45f472d6fc1` · **Directory (tenant) ID** `121507d1-a7e1-4677-9af6-7175626fba03`
- Platform **Single-page application (SPA)**. **Redirect URIs** (Authentication → SPA) — one per address the app is served from, e.g. `https://pma-chainsight.pages.dev/` (team) and `http://localhost:8080/Chainsight_PM_Across_CLOUD.html` (local testing).
- **API permission:** Microsoft Graph → **Delegated → `Sites.ReadWrite.All`**, with **admin consent granted**.
- These values live near the top of the cloud module inside `Chainsight_PM_Across_CLOUD.html` (`CLIENT_ID`, `TENANT_ID`, `SITE_ID`, `LIST_ID`).

**2) SharePoint list — the shared store.**
- Site **https://chainsight2023.sharepoint.com** · List **`PMA_Store`**.
- Columns: **Title** (record key), **ItemType** (Task/RAID/Meta), **PayloadJSON** (multiple lines, *plain text*), **Ver** (number).
- Each task / RAID / CI / RACI item is its own row (keyed by serial); config, owners, workstreams, decisions, follow-ups & intake are stored as section rows — so **two people editing different items never collide**.

**3) Hosting (Cloudflare Pages).**
- The project serves the `PMA_Deploy` folder. The app is fully self-contained (logo embedded, MSAL bundled locally), so any static host works.
- **To publish an update:** copy the latest `Chainsight_PM_Across_CLOUD.html` over `PMA_Deploy\index.html`, then Cloudflare → your project → **Create deployment** → drag the `PMA_Deploy` folder. URL and data stay the same. Serving from a **new** address means adding that address as a redirect URI (step 1).

## ⚙ Setup — cloud configuration

In **⚙ Setup → Fathom MCP targets — for Plan Refresh**:
- **Fathom team / workspace** and **Target meeting folders / keywords** — where Chainsight pulls meetings from when regenerating a sync.
- **Client-relevance keywords** — used by the Intake ⚑ Client-relevant filter.
- **☑ Auto-add meeting items to Intake** *(new)* — **on** = decisions & follow-ups from a Plan Refresh auto-populate the **Intake** tab. **Uncheck** to control it yourself: synced items wait in **Meeting Intel** until you press **⟳ Seed** on the Intake tab. (It's a plan setting, so it syncs for the whole team.)

## 🔄 Automating shared updates (Story Teller → the whole team)

New meeting/email intel reaches everyone through the sync flow — **one person loads it, the whole team gets it**:

1. **Ask Chainsight (Claude) to run "Story Teller"** — e.g. *"Story Teller the Bob's Phase 1.2"* or *"pull the latest Bob's meetings + emails."* This runs the **MTG_Email** skill (Fathom meetings **+** Outlook email, client-relevance filtered) and writes a dated **sync `.json`** to this folder (e.g. `Bobs_MTG_Email_Sync_2026-08-17.json`) in the Plan-Refresh shape: `progress`, `newTasks`, `decisions`, `followups`, `comments`.
2. **One person loads it once:** open the cloud app (signed in) → **⟳ Plan Refresh → Load .json** → pick the file.
3. **It applies + auto-pushes to SharePoint.** `applyRefresh` merges the intel (de-duplicated), respecting your **data lock / edit protection**, then saves to the shared list — so **every teammate sees it within ~1–2 seconds** (and on their next ~9s sync).

**You do NOT download the plan from the cloud first.** The sync is a *delta* of new intel, not a copy of the plan — the app de-duplicates on load and never overwrites existing edits. (Use **Setup → Save project → .json** only if you want to hand Chainsight the current live state, e.g. for a leadership readout.)

> The in-app **⟡ Refresh from Fathom (live)** button works only in the old claude.ai artifact (needs a Fathom connector) — on the Cloud edition use **Load .json** (or **⭱ Analyze transcript**). The **last sync date** now shows at the top of the **⟳ Plan Refresh** dialog (it's off the header).

## Live-editing safety

- **Status pill** (bottom-right): **● Synced / Syncing… / Sync error** — click to force a sync now.
- **Collision protection** — if two people edit the **same** task at once, the later save is **refused, not silently overwritten**; the app loads the other person's version and warns *"⚠ Edit conflict — <item> was changed by someone else."*
- **⇄ Merge assignee** (Setup → Assignees) — each row has a **⇄ Merge…** dropdown that folds a duplicate person into another, **reassigning all their Project tasks + RAID (and CI/RACI/tags)** and removing the duplicate. Use it to consolidate duplicate owners.

*Built by Chainsight · terrell@chainsight.ai*
