# Project Management Hub – Premium Edition  

## Overview & Quick Start  
A central, **turn‑key** hub to plan, track, and deliver projects from idea to launch. This hub connects **Projects**, **Tasks**, **Milestones**, **Risks**, **Resources**, **Knowledge Base**, **Retrospectives**, **Gantt**, **Capacity**, **Version History**, and **Automation** so you always know what’s next, who’s responsible, and where you stand.  

> 💡 **One‑click setup:** Click **Duplicate** at the top‑right of this page to create a fully‑configured copy for a new client, department, or product line. All databases, formulas, views, and template buttons are ready‑to‑go.  

---  

## Permissions & Sharing Schema  

| Role | Notion Permission | Typical Use‑Case |
|------|-------------------|------------------|
| **Owner** | Full access (can edit, share, delete) | Agency lead / PMO |
| **Editor** | Can edit content, add rows, change views | Project managers, designers, developers |
| **Viewer** | Can view & comment only | Stakeholders, clients, external reviewers |
| **Guest (Read‑Only)** | Can view pages but cannot comment | External auditors |

**How to apply:**  
1. Open the hub page → **Share** → **Invite**.  
2. Choose **Can edit**, **Can comment**, or **Can view** per person.  
3. For client‑specific projects, create a **Project‑Level** group (e.g., “Acme – Viewer”) and assign the group to the **Projects** database via a **Relation → Permission** filter (see “Projects Database” section).  

---  

## Projects Database  

| Property | Type | Description |
|----------|------|-------------|
| **Project Name** | Title | Unique project identifier |
| **Owner** | Person | Project lead |
| **Status** | Select (Planned, In Progress, Review, Completed, On Hold) | Drives filtered views |
| **Start Date** | Date | Project kickoff |
| **End Date** | Date | Target delivery |
| **Budget** | Number (USD) | Total approved spend |
| **Spent** | Rollup (Tasks → **Cost**) | Auto‑sum of all task costs |
| **Budget % Used** | Formula | `prop("Spent") / prop("Budget")` |
| **Budget Burn‑Down** | Formula (progress bar) | `if(prop("Budget") == 0, "", slice("██████████", 0, floor(prop("Spent") / prop("Budget") * 10)) + slice("----------", 0, 10 - floor(prop("Spent") / prop("Budget") * 10)))` |
| **Total Tasks** | Rollup (Tasks → **Name**, count) | Auto‑count of linked tasks |
| **Completed Tasks** | Rollup (Tasks → **Status**, filter “Done”, count) | Auto‑count of done tasks |
| **Progress %** | Formula | `if(prop("Total Tasks") == 0, 0, prop("Completed Tasks") / prop("Total Tasks"))` |
| **Progress Bar** | Formula | `repeat("▮", floor(prop("Progress %") * 20)) + repeat("▯", 20 - floor(prop("Progress %") * 20))` |
| **Priority** | Select (High, Medium, Low) | Visual cue for resource allocation |
| **Tags** | Multi‑select | Project‑level categorisation (e.g., “Marketing”, “Product”) |
| **Related Risks** | Relation → **Risks** | One‑click view of all risks for the project |
| **Retrospective** | Relation → **Retrospectives** | Link to the latest retro entry |
| **Gantt Link** | Formula | `formatDate(prop("Start Date"), "YYYY‑MM‑DD") + " → " + formatDate(prop("End Date"), "YYYY‑MM‑DD")` |
| **Capacity %** | Rollup (Capacity → **Utilisation**) | Shows overall resource utilisation for the project |

### Sample Data  

| Project Name | Owner | Status | Start Date | End Date | Budget | Priority |
|--------------|-------|--------|------------|----------|--------|----------|
| Website Redesign | Alex Rivera | 🚀 In Progress | 2024‑05‑01 | 2024‑08‑15 | $45,000 | High |
| Mobile App MVP | Priya Singh | ⏳ Planned | 2024‑06‑10 | 2024‑10‑01 | $80,000 | Medium |
| Marketing Campaign Q3 | Luis Gomez | ✅ Completed | 2024‑04‑01 | 2024‑06‑30 | $20,000 | Low |

---  

## Tasks Database  

| Property | Type | Description |
|----------|------|-------------|
| **Task** | Title | Short description |
| **Project** | Relation → **Projects** | Links task to a project |
| **Assignee** | Person | Owner of the work |
| **Due Date** | Date | When it should be finished |
| **Status** | Select (To Do, In Progress, Review, Done, Blocked) | Core workflow |
| **Tags** | Multi‑select (Design, Dev, QA, Ops) | Quick categorisation |
| **Effort (hrs)** | Number | Estimated effort |
| **Cost** | Formula | `prop("Effort (hrs)") * 75` *(assumes $75/hr rate – adjust per team)* |
| **Auto‑Status** | Formula | `if(prop("Due Date") < now() and prop("Status") != "Done", "⚠️ Overdue", prop("Status"))` |
| **Progress Icon** | Formula | `if(prop("Status") == "Done", "✅", if(prop("Status") == "In Progress", "🚧", "🔲"))` |
| **Sprint** | Relation → **Sprints** | Optional sprint grouping |
| **Risk** | Relation → **Risks** | Link to a risk if applicable |
| **Dependency** | Relation → **Tasks** (self‑relation) | Predecessor task(s) for critical‑path calculations |
| **Utilisation** | Formula | `prop("Effort (hrs)") / 40` *(assumes 40 hrs/week capacity per person)* |

### Ready‑Made Template Buttons (placed at the top of the **Tasks** page)

1. **New Task – Standard** – Pre‑fills **Status = To Do**, **Effort = 2 hrs**, empty fields for title, assignee, due date.  
2. **New Sprint – 2‑Week Sprint** – Creates a **Sprint** entry (see “Sprints” database) and a filtered **Tasks** view for that sprint.  
3. **New Risk Log** – Opens a new row in the **Risks** database with default severity “Medium” and status “Open”.  

*Implementation:* Insert a **Template button** block → **New task** → **Duplicate** the button for each variant, setting the **Pre‑filled properties** accordingly.  

### Sample Data  

| Task | Project | Assignee | Due Date | Status | Tags | Effort (hrs) |
|------|---------|----------|----------|--------|------|--------------|
| Wireframe home page | Website Redesign | Maya Liu | 2024‑05‑10 | ✅ Done | Design, UI | 12 |
| Set up CI/CD pipeline | Mobile App MVP | Omar Patel | 2024‑06‑20 | 🚧 In Progress | DevOps | 8 |
| Draft email copy | Marketing Campaign Q3 | Sara Kim | 2024‑05‑05 | 📋 To Do | Copywriting | 4 |
| Conduct user interviews | Mobile App MVP | Priya Singh | 2024‑06‑15 | 📋 To Do | Research | 6 |

> 💡 **My Tasks view:** Filter → **Assignee** = `@Me` AND **Status** ≠ `Done`.  

---  

## Milestones Database  

| Property | Type | Description |
|----------|------|-------------|
| **Milestone** | Title | Name of the milestone |
| **Project** | Relation → **Projects** | Parent project |
| **Target Date** | Date | Planned completion |
| **Owner** | Person | Owner of the milestone |
| **Status** | Select (To Do, In Progress, Done) | Current state |
| **Progress** | Formula | `if(prop("Status") == "Done", 1, if(prop("Status") == "In Progress", 0.5, 0))` |
| **Progress Bar** | Formula | `repeat("▮", floor(prop("Progress") * 10)) + repeat("▯", 10 - floor(prop("Progress") * 10))` |

### Sample Data  

| Milestone | Project | Target Date | Owner | Status |
|-----------|---------|-------------|-------|--------|
| Design Approval | Website Redesign | 2024‑05‑15 | Alex Rivera | ✅ Done |
| Beta Release | Mobile App MVP | 2024‑09‑01 | Priya Singh | 📋 To Do |
| Campaign Launch | Marketing Campaign Q3 | 2024‑07‑01 | Luis Gomez | 🚧 In Progress |

> 💡 **Timeline view:** Switch the Milestones database to a **Timeline** grouped by **Project** and colour‑coded by **Status**.  

---  

## Risks Log  

| Property | Type | Description |
|----------|------|-------------|
| **Risk** | Title | Short description of the risk |
| **Project** | Relation → **Projects** | Affected project |
| **Severity** | Select (Low, Medium, High, Critical) | Impact level |
| **Probability** | Select (Low, Medium, High) | Likelihood |
| **Owner** | Person | Who is monitoring |
| **Status** | Select (Open, Mitigated, Closed) | Current handling |
| **Mitigation Plan** | Text | Action steps |
| **Score** | Formula | `if(prop("Severity") == "Critical", 4, if(prop("Severity") == "High", 3, if(prop("Severity") == "Medium", 2, 1))) * if(prop("Probability") == "High", 3, if(prop("Probability") == "Medium", 2, 1))` |
| **Score Bar** | Formula | `repeat("▮", floor(prop("Score") / 12 * 10)) + repeat("▯", 10 - floor(prop("Score") / 12 * 10))` |

> 💡 **Risk Dashboard view:** Filter → **Score** ≥ 6, grouped by **Owner**.  

---  

## Resources & Knowledge Base  

### Embedded Files (Version‑Controlled)  

| Resource | Type | Linked Project | Owner | Version | File |
|----------|------|----------------|-------|---------|------|
| Brand Guidelines | Document | Website Redesign | Alex Rivera | v2.1 | *(embed file block – PDF)* |
| API Spec v2 | Document | Mobile App MVP | Omar Patel | v2.0 | *(embed file block – PDF)* |
| Creative Brief | Document | Marketing Campaign Q3 | Luis Gomez | v1.3 | *(embed file block – PDF)* |

> 📁 **Version control:** Update the **Version** select each time the file is replaced. The previous file remains in the page history for audit.  

### Knowledge Base Database  

| Property | Type | Description |
|----------|------|-------------|
| **Article Title** | Title | Knowledge article |
| **Tags** | Multi‑select | e.g., “Onboarding”, “API”, “Design System” |
| **Owner** | Person | Author / maintainer |
| **Last Updated** | Date (auto‑now) | Tracks freshness |
| **Content** | Text | Full article (supports rich media) |
| **Attachments** | Files | Supporting PDFs, images, etc. |
| **Searchable** | – | Use Notion’s global search (⌘ K) – all rows are indexed. |

> 💡 **Quick add:** Use the **New Knowledge Article** template button (see bottom of this page).  

---  

## Gantt & Critical‑Path View  

> **Why it matters:** Visual timelines with dependencies let you see bottlenecks, adjust dates, and keep the whole team aligned.  

### Gantt Database (derived from Tasks)  

| Property | Type | Description |
|----------|------|-------------|
| **Task** | Relation → **Tasks** (rollup) | Pulls the task title |
| **Project** | Rollup (Task → **Project**) | Parent project |
| **Start** | Rollup (Task → **Start Date**) | Auto‑filled from task’s **Start Date** (add a **Start Date** property to Tasks if not present) |
| **End** | Rollup (Task → **Due Date**) | Auto‑filled from task’s **Due Date** |
| **Dependency** | Rollup (Task → **Dependency**) | List of predecessor tasks |
| **Critical Path** | Formula | `if(length(prop("Dependency")) > 0, "🔗", "—")` |
| **Status** | Rollup (Task → **Status**) | Mirrors task status |

#### Gantt View Settings  
1. Open **Gantt** database → **Add a view** → **Timeline**.  
2. Set **Timeline** to **Start** → **End**.  
3. Group by **Project**, colour‑code by **Status**.  
4. Turn on **Show dependencies** (Notion now supports a simple arrow line when a **Relation** to the same database exists).  

#### Critical‑Path Highlight  
Create a filtered view called **Critical Path**:  
- Filter → **Critical Path** = “🔗”.  
- Sort → **Start** ascending.  

> 📌 **Tip:** Drag the timeline bars to shift dates; dependent tasks automatically shift when you enable the “Auto‑adjust dependent dates” toggle (available in the timeline view toolbar).  

---  

## Consolidated Project‑Level Dashboard  

Create a **Project Dashboard** page (sub‑page of the hub) and embed the following blocks:

### 1. KPI Summary (Inline Table)  
| Metric | Value |
|--------|-------|
| **Budget % Used** | `prop("Budget % Used")` (from Projects) |
| **Overall Progress %** | `prop("Progress %")` (from Projects) |
| **Sprint Velocity** | `prop("Velocity")` (rollup from **Sprints**) |
| **Risk Heat‑Map** | `prop("Score")` (average of Risks) |
| **Resource Utilisation** | `prop("Capacity %")` (from Capacity) |

### 2. Burn‑Down Chart (Embedded Google Sheet)  
1. Create a Google Sheet with two columns: **Date** and **Remaining Budget** (use a simple line chart).  
2. Publish the sheet to the web → **File → Publish to the web → Link**.  
3. In Notion, add an **Embed** block → paste the published link.  

### 3. Sprint Velocity Chart (Embedded Notion Chart Block)  
- Use the **Chart** block (available in the Notion marketplace) and point it at the **Sprints** database, selecting **Bar** → X‑axis **Sprint**, Y‑axis **Completed Story Points**.  

### 4. Risk Heat‑Map (Board View)  
- Insert a **Board** view of the **Risks** database, grouped by **Severity**, and set the card preview to show **Score**.  

### 5. Resource Allocation Gauge (Formula)  
- Add a **Formula** card: `if(prop("Capacity %") > 0.85, "⚠️ Over‑allocated", "✅ OK")`.  

All of the above updates automatically as underlying databases change, giving stakeholders a single‑page “executive snapshot”.  

---  

## Automation & Reminder System  

### 1. Zapier / Make Snippets (copy‑paste)  

| Trigger | Action | Notion API Call (cURL) |
|---------|--------|------------------------|
| **New Task created** (Zapier) | **Assign to Assignee** (auto‑set **Assignee** based on **Tags**) | `curl -X PATCH "https://api.notion.com/v1/pages/<PAGE_ID>" -H "Authorization: Bearer <YOUR_INTEGRATION_TOKEN>" -H "Notion-Version: 2022-06-28" -d '{"properties":{"Assignee":{"people":[{"id":"<USER_ID>"}]}}}'` |
| **Task overdue** (Zapier) | **Send Slack alert** | `curl -X POST "https://slack.com/api/chat.postMessage" -H "Authorization: Bearer <SLACK_BOT_TOKEN>" -d '{"channel":"#project‑alerts","text":"⚠️ Task *<TASK_NAME>* is overdue!"}'` |
| **Task moved to “Done”** (Make) | **Update Project “Spent”** (rollup auto‑updates) – no extra call needed, just rely on rollup. |
| **Risk status changes to “Open”** | **Create Escalation entry** in **Escalations** view (new row) | `curl -X POST "https://api.notion.com/v1/pages" -H "Authorization: Bearer <TOKEN>" -H "Notion-Version: 2022-06-28" -d '{"parent":{"database_id":"<RISKS_DB_ID>"},"properties":{...}}'` |

> 📄 **How to enable:**  
1. Go to **Settings → Integrations → + New integration**.  
2. Copy the **Internal Integration Token**.  
3. Paste it into your Zapier/Make connection.  

### 2. Built‑in Reminder Formula (Tasks)  

| Property | Formula |
|----------|---------|
| **Reminder** | `if(prop("Due Date") - now() <= 86400000, "⏰ Today", if(prop("Due Date") - now() <= 259200000, "⏰ Tomorrow", ""))` |

Add a **Filtered view** called **Today’s Reminders** that shows rows where **Reminder** is not empty.  

---  

## Resource Allocation & Capacity Table  

### Capacity Database  

| Property | Type | Description |
|----------|------|-------------|
| **Team Member** | Person | Individual resource |
| **Weekly Capacity (hrs)** | Number | Default 40 hrs (editable per contract) |
| **Allocated Hours** | Rollup (Tasks → **Assignee**, filter **Status** ≠ “Done”, sum **Effort (hrs)**) | Auto‑sum of all open work |
| **Utilisation** | Formula | `prop("Allocated Hours") / prop("Weekly Capacity (hrs)")` |
| **Overallocation Flag** | Formula | `if(prop("Utilisation") > 0.85, "⚠️ >85%", "✅ OK")` |
| **Current Project(s)** | Rollup (Tasks → **Assignee**, show unique **Project**) | Quick glance at where the person is busy |

#### Capacity Views  
- **Team Overview** – Table view with **Utilisation** bar (use the same progress‑bar formula as in Projects).  
- **Overallocation** – Filter → **Overallocation Flag** = “⚠️ >85%”.  

---  

## Retrospective Analysis Framework  

### Retrospectives Database  

| Property | Type | Description |
|----------|------|-------------|
| **Retro Date** | Date | When the retro took place |
| **Project** | Relation → **Projects** | Project the retro belongs to |
| **Facilitator** | Person | Who ran the retro |
| **Sentiment Score** | Number (1‑5) | Average of participant votes (see **Voting** sub‑table) |
| **Highlights** | Text | What went well |
| **Lowlights** | Text | What didn’t go well |
| **Action Items** | Relation → **Retro Action Items** | Linked action‑item rows |
| **Voting** | Relation → **Retro Votes** | Individual votes for sentiment |

### Retro Votes (sub‑database)  

| Property | Type | Description |
|----------|------|-------------|
| **Voter** | Person | Participant |
| **Score** | Number (1‑5) | Sentiment rating |
| **Comment** | Text | Optional note |

> **Formula (Sentiment Score)** in **Retrospectives**: `round(avg(prop("Voting").Score), 1)`  

### Retro Action Items Database  

| Property | Type | Description |
|----------|------|-------------|
| **Action** | Title | Short description of the improvement |
| **Owner** | Person | Who will implement |
| **Due Date** | Date | Target completion |
| **Status** | Select (Open, In Progress, Done) | Progress |
| **Retro** | Relation → **Retrospectives** | Parent retro |
| **Priority** | Select (High, Medium, Low) | Impact rating |
| **Score Impact** | Number | Optional numeric impact (e.g., “5 pts”) |

#### Retro Views  
- **Voting Board** – Board view of **Retro Votes**, grouped by **Score** (1‑5).  
- **Action Tracker** – Table view of **Retro Action Items**, filtered to **Status** ≠ “Done”.  

---  

## Mobile‑Friendly Optimizations  

| Section | Mobile‑Specific Change |
|---------|------------------------|
| **Projects** | Add a **Compact Table** view (hide all but **Project Name**, **Status**, **Progress %**, **Owner**) – fits on a single phone screen. |
| **Tasks** | Use a **Toggle List** (Insert → Toggle List) for each **Sprint**; inside each toggle place the filtered **Tasks** view. |
| **Milestones** | Enable **Hide columns** → keep only **Milestone**, **Target Date**, **Status**. |
| **Dashboard** | Collapse the **KPI Summary** and **Charts** into **Toggle** blocks so users can expand only what they need. |
| **Retrospectives** | Provide a **Full‑Screen** view button (link to the retro page) to avoid horizontal scrolling. |
| **All databases** | Turn on **“Group by”** for the **Status** column and set **“Show as list”** – reduces the need to scroll horizontally. |

> 📱 **Testing tip:** Open the hub on an iPhone, tap the three‑dot menu → **Full‑screen** → verify each toggle works without side‑scroll.  

---  

## Export & Reporting Guide  

1. **One‑Click CSV Export** – At the top of each database, click the three‑dot menu → **Export** → **CSV**.  
2. **One‑Click PDF Export** – On the **Project Dashboard** page, click the three‑dot menu → **Export** → **PDF** (choose “Include sub‑pages”).  
3. **Automated Report Generation (Zapier)** –  
   ```yaml
   trigger: "Schedule – Every Friday 16:00"
   actions:
     - type: "Notion – Export Database"
       database_id: "<PROJECTS_DB_ID>"
       format: "csv"
     - type: "Google Drive – Upload File"
       file: "{{exported_file}}"
       folder: "Project Reports"
     - type: "Slack – Send Message"
       channel: "#project‑reports"
       text: "📊 Weekly project report attached."
   ```  
4. **Stakeholder Update Template** – Add a sub‑page called **Stakeholder Update** with pre‑filled sections: *Executive Summary*, *Key Metrics* (linked to dashboard formulas), *Risks & Mitigations*, *Next Steps*. Duplicate this page for each reporting cycle.  

---  

## Version‑History Database (File Change Log)  

| Property | Type | Description |
|----------|------|-------------|
| **File** | Files | Uploaded document (PDF, DOCX, etc.) |
| **Project** | Relation → **Projects** | Parent project |
| **Version** | Number | Incremental version number |
| **Changed By** | Person | Who uploaded the new version |
| **Change Date** | Date (auto‑now) | Timestamp of upload |
| **Change Notes** | Text | Summary of what changed |
| **Previous Version** | Relation → **Version‑History** (self‑relation) | Link to the prior version |

### Auto‑Log via Zapier (Snippet)  

```bash
curl -X POST "https://api.notion.com/v1/pages" \
 -H "Authorization: Bearer <TOKEN>" \
 -H "Notion-Version: 2022-06-28" \
 -d '{
   "parent": {"database_id":"<VERSION_DB_ID>"},
   "properties": {
     "File": {"files":[{"name":"Brand_Guidelines_v2.2.pdf","external":{"url":"https://.../v2.2.pdf"}}]},
     "Project": {"relation":[{"id":"<PROJECT_ID>"}]},
     "Version": {"number":2.2},
     "Changed By": {"people":[{"id":"<USER_ID>"}]},
     "Change Notes": {"rich_text":[{"text":{"content":"Updated colour palette"}}]}
   }
 }'
```

Whenever a file is replaced in the **Resources** table, run the above Zap to create a new row in **Version‑History**. The previous file remains accessible via the **Previous Version** relation, giving a full audit trail.  

---  

## Sprints Database (unchanged – retained for reference)  

| Property | Type | Description |
|----------|------|-------------|
| **Sprint Name** | Title | e.g., “Sprint