# Pbi Project Hub

> Build a complete Power BI project delivery vault in Obsidian — from client discovery to production sign-off. Asks 8 questions about your practice and first project, then generates folder structure, design system, technical reference, DAX/HTML guide, discovery framework, sprint board, templates, and live dashboards. Triggers on "Power BI project hub", "PBI project setup", "set up my Power BI pract…

- **Type:** Skill
- **Install:** `agentstack add skill-gusbavia-pbi-project-hub-pbi-project-hub`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [gusbavia](https://agentstack.voostack.com/s/gusbavia)
- **Installs:** 0
- **Category:** [Productivity](https://agentstack.voostack.com/c/productivity)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [gusbavia](https://github.com/gusbavia)
- **Source:** https://github.com/gusbavia/pbi-project-hub

## Install

```sh
agentstack add skill-gusbavia-pbi-project-hub-pbi-project-hub
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Power BI Project Hub

Build a complete Obsidian-ready project delivery vault for Power BI consulting. Answer 8 questions about your practice and first client project. Get a production-grade vault with per-client isolation, design system scaffolding, credential management, sprint boards, discovery frameworks, and live dashboards — all in plain markdown.

Input: **$ARGUMENTS**

## 1 · Choose delivery mode — MANDATORY FIRST QUESTION

**Before anything else**, ask:

> Hi! I'll build you a complete Power BI project delivery vault. First, how would you like me to deliver it?
>
> **A · All-at-once** — I ask 8 questions, then generate everything in one response. Total time: ~10 minutes. Best if you want to copy-paste everything and start immediately.
>
> **B · Step-by-step** — I ask 8 questions, then deliver in 5 phases with a "ready?" between each. Total time: ~20 minutes. Best if you want to follow along, save files as we go, and ask questions.
>
> Reply **A** or **B**.

Wait for response. Set internal mode based on answer. If unclear, default to **B** (step-by-step is safer for consultants new to Obsidian).

## 2 · Discovery — 8 questions, ONE AT A TIME

Ask each question, wait for answer, then ask the next. Be warm but efficient. Don't lecture between questions.

### 🔑 Global rule · "Decide later" is ALWAYS valid

You act as a **senior Power BI consultant + PM**, not a questionnaire robot. A PM setting up the hub often doesn't have every answer on day 1 — that's normal. For **every question** below, accept any of:

- *"not sure yet"* · *"decide later"* · *"TBC"* · *"skip"* · *"I don't know"* · *"pending"*

When the user skips:
1. Acknowledge briefly: *"No problem — we'll leave a placeholder and come back to it."*
2. Mark the field internally as `pending`
3. At generation time, create the relevant file/folder with `status: pending` and a `## TODO` callout explaining what's missing
4. Add to a consolidated **"Pending decisions"** section in `00_FOCUS.md` so nothing slips
5. **Never block the flow** — always advance

This is what a professional consultant does: capture what's known, document what's open, keep the engagement moving.

---

**Q1 · Practice type**
"What kind of Power BI practice do you run? Pick the closest:
(a) Solo consultant — you do everything yourself, client to delivery
(b) Small agency (2-10 people) — shared methodology, multiple consultants
(c) In-house BI team — internal stakeholders, multiple business units
(d) Freelancer starting out — building your first repeatable process
(e) Senior consultant — experienced but no formal system yet
(f) Other — describe in your own words
(skip) — we'll default to 'solo consultant' and you can change it later"

**Q2 · Your context**
"Tell me about you in 2-3 sentences. Your role, typical day, years of experience, and what tools you use alongside Power BI (SQL, Python, Azure, SharePoint, etc.). *If you'd rather skip, just say 'skip' — we'll leave a TODO on your profile.*"

**Q3 · First project — the client**
"Tell me about the first project you want to set up:
- Client name (or codename — 'Project Phoenix' is fine)
- Industry (or 'not sure yet')
- Company size (rough — small / mid / enterprise / skip)
- Main stakeholder role (CFO · Ops Manager · CTO / skip)

If you don't have a project yet and just want the practice scaffold set up, say *'no project yet'* and I'll create a reusable `Clients/_TEMPLATE/` folder you can copy each time you win a new one."

**Q4 · Data stack**
"What does the data landscape look like?
- **Source**: SQL Server · Azure SQL · Synapse · Databricks · SharePoint lists · Excel · API · other · **unknown**
- **Connection mode**: Direct Query · Import · Composite · Dataflow · **TBC**
- **Existing model**: yes · no · partial · **not checked yet**

Any 'unknown / TBC / not checked yet' is fine — I'll add it to the discovery backlog."

**Q5 · Design system · 3 paths**

"Where are you with the client's design system? Pick the path that matches:

**Path A · I have it** — you already have brand colors, fonts, logo. Share what you have:
- 3 hex colors (primary · secondary · tertiary) — or 7 if you have a full palette
- Primary font + body font
- Logo file available? (yes / send later / no)
- Existing Power BI theme JSON? (yes / no)

**Path B · Partial** — you have some info but not all. Tell me what you have, I'll flag the rest as pending.

**Path C · Not yet** — haven't collected it. I'll create `02_Design_System/` with a `_PENDING.md` TODO note and the discovery questions to ask the client. You come back when the info arrives.

**🎨 Companion skill offer — if Path A or Path B:**
> *'By the way — I can generate a production-grade Power BI theme (full JSON + SVG canvas + design system PDF + CSS tokens + DAX HTML examples) using the companion skill `pbi-theme`. If you want that, say 'yes, generate theme' after we finish the 8 questions and I'll invoke it with your colors. Or say 'scaffold only' if you just want the brand-guide.md + theme.json stub.'*

Accept any answer. If user says *'yes, generate theme'*, make a note to invoke `pbi-theme` after the vault is built, saving outputs to `Clients/{name}/02_Design_System/`."

**Q6 · Deployment + file format**
"How will you deploy and manage the report? *Any 'not sure yet' is fine — we'll leave a placeholder.*
- **File format**: PBIX (single file) · PBIP (git-friendly folder) · PBIT (template) · TBC
- **Workspace**: Service workspace name · 'not set up yet' · skip
- **Deployment**: manual publish · deployment pipelines (Dev/Test/Prod) · CI/CD · TBC
- **Row-level security**: yes · no · not sure"

**Q7 · Project scope**
"What are you actually building? Pick all that apply, or 'scope not locked yet':
(a) Executive dashboard — KPIs, trends, high-level metrics
(b) Operational report — daily/weekly detail for teams
(c) Self-service dataset — semantic model for others to build on
(d) Embedded analytics — Power BI embedded in an app or portal
(e) Migration — rebuilding an existing report (Excel · Tableau · SSRS · etc.)
(f) Other — describe
(skip) — scope will be defined during discovery phase"

**Q8 · Governance + handover**
"Who else will touch this after you deliver? *Skip any you don't know.*
- **Client maintains?**: yes · no · partially · TBC
- **Power BI admin / champion internally?**: yes (name) · no · unknown
- **Compliance requirements**: data residency · sensitivity labels · audit trail · none · not sure
- **Handover format**: documentation · training session · video walkthrough · all · decide later"

## 3 · Confirm + plan

After all 8 answers, summarise back in 6-8 bullets:

- Practice type + your context (1 line)
- Client + industry + stakeholder (1 line)
- Data stack + connection mode (1 line)
- Design system status (colors / fonts / theme JSON)
- Deployment model (file format + workspace + pipeline)
- Project scope (what you're building)
- Governance + handover plan
- Any special considerations

Then ask: "Does this match? Anything to adjust before I build your vault?"

**If any fields were skipped**, surface them explicitly in the summary with a ⏳ marker:
> ⏳ *Pending items (will be placeholders in the vault, visible in 00_FOCUS.md's 'Pending decisions' section):*
> - Data stack connection mode
> - Client compliance requirements
> - etc.

Wait for confirmation.

## 3.5 · Companion skill handoff — pbi-theme

If the user answered **Path A (I have colors)** or **Path B (partial)** in Q5 AND said *"yes, generate theme"*:

**After the vault is built**, announce:
> "Vault is ready. Now handing off to the **pbi-theme** companion skill to generate the production theme. Outputs will land in `Clients/{name}/02_Design_System/`:
> - `{client}-pbi-theme.json` — importable theme (~5,800 lines)
> - `{client}-canvas-background.svg` — branded SVG layout
> - `{client}-design-system.pdf` — A4 design system reference
> - `{client}-tokens.css` — CSS custom properties for HTML visuals
> - `{client}-html-visual-example.dax` — 3 DAX HTML visual examples"

Then invoke `pbi-theme` with the collected inputs:
- 3 brand colors from Q5
- Light/dark mode (ask if not yet clear)
- Resolution (default 1280x720 if not specified)
- Layout (default B · Header + Filters)
- Brand name (= client name from Q3)
- Logo if provided in Q5

If the user answered **Path C (not yet)** in Q5:
- Skip the handoff entirely
- Create `02_Design_System/_PENDING.md` with the 4 discovery questions to ask the client (colors · fonts · logo · existing theme)
- When the user comes back with the info, they can invoke `pbi-theme` manually or re-run this skill

## 4 · Generate the vault

### Baseline structure (always generate)

```
00_START_HERE.md                    Vault index · MOC pointing to everything
00_DASHBOARD.md                     Live Dataview queries · practice-wide status
00_FOCUS.md                         Daily driver · current sprint · blockers · quick capture
00_HOW_THIS_WORKS.md                System documentation for this vault

_templates/
   ├── note.md                      Generic note with frontmatter
   ├── meeting.md                   Client meeting / stakeholder call
   ├── decision.md                  Decision log entry with rationale
   ├── discovery.md                 Discovery session capture
   ├── standup.md                   Daily / weekly standup
   ├── uat-feedback.md              UAT testing feedback capture
   └── handover.md                  Client handover checklist

_Attachments/                       Screenshots · mockups · exports
_Practice/                          Practice-level config (reusable across clients)
   ├── _MOC.md                      Practice methodology index
   ├── methodology.md               Your delivery methodology
   ├── pricing-model.md             Rate card / pricing structure
   └── tools-stack.md               Tools you use and why

Clients/
   └── {client-name}/               Per-client isolation
       ├── _MOC.md                  Client project index
       ├── 01_Discovery/
       │   ├── _MOC.md
       │   ├── discovery-notes.md   First meeting capture
       │   ├── stakeholder-map.md   Who's who + influence
       │   ├── requirements.md      What they asked for
       │   └── data-audit.md        What data exists + quality
       ├── 02_Design_System/
       │   ├── _MOC.md
       │   ├── brand-guide.md       Colors · fonts · logo · rules
       │   ├── theme.json           Power BI theme file (scaffold)
       │   └── wireframes.md        Page layout sketches / mockups
       ├── 03_Build/
       │   ├── _MOC.md
       │   ├── data-model.md        Tables · relationships · measures index
       │   ├── dax-log.md           Complex DAX with rationale
       │   ├── pages.md             Page inventory + status
       │   └── sprint-board.canvas  Kanban board (Backlog → In Progress → Blocked → Done)
       ├── 04_UAT/
       │   ├── _MOC.md
       │   ├── test-plan.md         What to test · who tests · when
       │   ├── feedback-log.md      Aggregated UAT feedback
       │   └── sign-off.md          Formal sign-off record
       ├── 05_Production/
       │   ├── _MOC.md
       │   ├── deployment.md        Workspace · pipeline · schedule
       │   ├── credentials.md       Masked credentials + connection strings
       │   ├── monitoring.md        Refresh schedule · alerts · capacity
       │   └── handover.md          Client handover document
       └── 06_Meetings/
           └── (meeting notes go here)

90_Journal/                         Daily notes · personal reflections
91_Decisions/                       Append-only decision log
92_Resources/                       Articles · reference links · bookmarks
```

### Per-client customisation rules

- Replace `{client-name}` with actual client name or codename from Q3
- Pre-fill `brand-guide.md` with colors/fonts from Q5 (or leave placeholder prompts)
- Pre-fill `credentials.md` with connection type from Q4 (masked template)
- Pre-fill `deployment.md` with workspace/pipeline from Q6
- Pre-fill `requirements.md` with scope from Q7
- Pre-fill `handover.md` with governance answers from Q8
- Generate `theme.json` scaffold using colors from Q5 (if provided)

### File content rules

Every file MUST include:
- **YAML frontmatter** with: `title`, `type`, `client` (where applicable), optional `status`, `tags`, `updated` (use today's date as `YYYY-MM-DD`)
- **Status vocabulary**: `not_started · in_progress · blocked · review · done`
- **Wiki-links** `[[note-name]]` to connect to other notes in the vault
- **Tags** like `#client/{name}`, `#phase/discovery`, `#priority/high`, `#status/blocked`

Templates use Templater syntax for dynamic content:
- Date: ``
- Title: ``

The 4 hub files (00_*) MUST include working Dataview queries. Project-specific examples:

```dataview
TABLE status, client, phase FROM "Clients"
WHERE status = "in_progress"
SORT client ASC
```

```dataview
TABLE WITHOUT ID file.link as "Meeting", date, client
FROM "Clients" WHERE type = "meeting"
SORT date DESC LIMIT 10
```

```dataview
TABLE status, owner, end as "Deadline"
FROM "" WHERE status = "blocked"
```

### Sprint board (Canvas)

Generate a `.canvas` JSON file with 4 columns:
- **Backlog** — tasks identified but not started
- **In Progress** — actively being worked
- **Blocked** — waiting on client / data / access
- **Done** — completed and verified

Pre-populate with 5-8 tasks based on Q7 scope (e.g., "Set up data connections", "Build star schema", "Create executive summary page", "Implement RLS", "UAT with stakeholder").

### Seed notes specificity rule

Seed notes MUST be specific to what the user told you in Q2-Q8. Examples:
- User said "SQL Server, Direct Query, executive dashboard" → seed notes like `sql-server-connection.md`, `executive-kpis.md`, `directquery-performance.md`
- User said "migrating from Excel" → seed notes like `excel-source-audit.md`, `migration-mapping.md`, `data-cleanup-log.md`
- User said "embedded analytics" → seed notes like `embed-config.md`, `api-integration.md`, `capacity-planning.md`

NEVER deliver generic placeholders like `note-1.md`, `example.md`, `untitled.md`.

### theme.json scaffold vs production theme

Three outcomes based on Q5 answer:

**Path A + "yes, generate theme"** → do NOT write a scaffold. Invoke `pbi-theme` after vault is built. The pbi-theme skill owns `02_Design_System/theme.json` and produces the full 5,800-line production JSON + SVG + PDF + CSS + DAX examples.

**Path A/B + "scaffold only"** → generate a minimal scaffold with the colors captured:

```json
{
  "name": "{client-name} Theme",
  "dataColors": ["#hex1", "#hex2", "#hex3", "#hex4", "#hex5", "#hex6", "#hex7"],
  "background": "#ffffff",
  "foreground": "#333333",
  "tableAccent": "#hex1",
  "visualStyles": {
    "*": {
      "*": {
        "general": [{ "responsive": true }]
      }
    }
  }
}
```

Add a comment at the top: *"This is a starter scaffold. For a production theme with full color engine, canvas backgrounds, and design system PDF, run the `pbi-theme` skill pointed at this folder."*

**Path C (no info yet)** → do NOT create theme.json at all. Create `_PENDING.md` instead (see placeholder pattern below).

### Placeholder pattern · for every skipped answer

When a field was skipped or marked pending, **never silently drop it**. Instead:

1. Create the file anyway, but with `status: pending` in frontmatter
2. Start the file body with a visible TODO callout:

```markdown
> ⏳ **TODO** · This section is pending information from [stakeholder/discovery/you].
>
> **What's missing**: [specific thing — e.g. "brand colors and fonts"]
>
> **To resolve**: [concrete next step — e.g. "ask marketing team for brand guidelines PDF"]
>
> Remove this callout once the info lands.
```

3. Add a bullet to `00_FOCUS.md` under "⏳ Pending decisions" section, linking to the file

Example `_PENDING.md` for a missing design system (Path C):

```markdown
---
title: Design System · Pending
type: pending
client: {client-name}
status: pending
tags: [pending, design

…

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [gusbavia](https://github.com/gusbavia)
- **Source:** [gusbavia/pbi-project-hub](https://github.com/gusbavia/pbi-project-hub)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-gusbavia-pbi-project-hub-pbi-project-hub
- Seller: https://agentstack.voostack.com/s/gusbavia
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
