# The Agent OS

Complete Notion blueprint for independent real estate agents in the US market.

This deliverable is written in English and designed to be recreated directly inside Notion without code or third-party integrations.

## What this template solves

Most agents do not need a brokerage CRM with locked workflows and noisy tabs. They need:

- One dashboard for the real business
- A flexible pipeline that follows the deal
- Alert logic that does not depend on manual memory
- Clean separation between business and personal planning
- A system that feels premium enough to sell as a product

The Agent OS is built around those five goals.

## Global Architecture

The workspace is built around 4 top-level pages and 12 connected databases.

### Top-level pages

1. `📊 Master Dashboard`
2. `🎛️ Control Panel`
3. `💼 Pro Space`
4. `🏠 Personal Space`

### Core databases

- `Alert Settings`
- `Clients`
- `Properties`
- `Pipeline`
- `Visits`
- `Appointments`
- `Commissions Tracker`
- `Personal Tasks`
- `Personal Calendar`
- `Personal Alerts`

### Support databases required for a clean Notion-only build

- `Pro Alerts`
- `Admin Deadlines`

## Important Notion Constraints

Two platform realities shape this blueprint:

1. Notion cannot merge multiple databases into one single native table or calendar view.
2. Notion relations connect databases to records, not to a database object itself.

To keep the build 100% inside Notion:

- `Pro Alerts` is added as a central alert engine for professional items.
- `Admin Deadlines` is added to support pro card renewal, tax, and training reminders.
- The Dashboard stacks linked views from multiple databases under the same section title where a single combined view is not possible.
- In `Alert Settings`, use a `Source Database` select to represent "Linked to" at database level, and keep the actual relation on `Pro Alerts`.

## Shared Design Rules

Add the same top navigation block at the top of every main page:

`[📊 Master Dashboard] [🎛️ Control Panel] [💼 Pro Space] [🏠 Personal Space]`

Recommended visual style:

- Warm neutral background
- Deep green or charcoal accent
- Bronze or sand secondary accent
- Emoji only for navigation and section labels
- Clear H1/H2 hierarchy
- Databases shown as linked views, not raw clutter

---

## Page 1 - 📊 Master Dashboard

### Purpose

This is the home page the agent opens every morning. It must answer:

- What is urgent today?
- What is happening this week?
- Which deals are moving?
- How much money has closed?
- Who needs follow-up?
- What personal tasks still need attention?

### Page structure

1. Top navigation block
2. H1: `The Agent OS`
3. Subtitle: `Your business, pipeline, and personal planning in one command center.`
4. Divider or callout block with quick instruction:
   `Open Control Panel first to set your alert timing rules, then return here for your live dashboard.`

### Dashboard sections

#### 1. `🔔 ALERTS TODAY`

Use two linked database views stacked inside one section:

- `Pro Alerts - Due Now`
- `Personal Alerts - Due Now`

#### 2. `📅 THIS WEEK`

Use two linked views side by side:

- `Appointments - This Week`
- `Personal Tasks - This Week`

Notion does not support one native calendar mixing two databases, so the clean solution is a two-column agenda block.

#### 3. `🏗️ PIPELINE AT A GLANCE`

Use a Board view from `Pipeline` grouped by `Stage`.

#### 4. `💰 COMMISSION SUMMARY`

Use 3 small linked views or number blocks sourced from `Commissions Tracker` and `Pipeline`:

- Current month commission total
- Year-to-date commission total
- Closed deals count

#### 5. `👥 CLIENTS TO FOLLOW UP`

Use a linked `Clients` view filtered on follow-up logic.

#### 6. `✅ MY TASKS TODAY`

Use a linked `Personal Tasks` view filtered to due today and not done.

---

## Page 2 - 🎛️ Control Panel

### Purpose

This page contains the operating rules of the workspace. The agent edits alert timing here once, and the formulas in `Pro Alerts` calculate the actual due dates from those settings.

### Main sections on the page

1. Top navigation block
2. H1: `Control Panel`
3. Intro text:
   `Edit your reminder rules here. The alert engine reads these settings to calculate due dates across the workspace.`
4. Linked view: `Alert Settings`
5. Linked view: `Admin Deadlines`
6. Optional setup checklist block:
   - Confirm alert rules
   - Add your business admin deadlines
   - Create your first client, property, and deal templates

### Database: `Alert Settings`

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Alert Name | Title | Text | Human-readable rule label |
| Rule Key | Text | Example: `compromise_deadline` | Stable key used by formulas |
| Category | Select | Transaction, Client, Appointment, Admin, Pipeline | Display grouping |
| Source Database | Select | Clients, Properties, Pipeline, Appointments, Admin Deadlines | Replaces impossible database-level relation |
| Delay Value | Number | Integer | Offset amount |
| Trigger Direction | Select | Days Before, Days After, Hours Before, Hours After, Months Before, Months After, Years Before, Years After, Fixed Date | Formula trigger type |
| Active | Checkbox | Checked / Unchecked | Master toggle |
| Priority | Select | High, Medium, Low | Used in alert sorting |
| Linked Alerts | Relation | Relation -> `Pro Alerts` | Lets rollups read settings into live alert rows |
| Notes | Text | Free text | Implementation note or reminder |

### Seed rows for `Alert Settings`

| Alert Name | Rule Key | Category | Source Database | Delay Value | Trigger Direction | Priority | Active |
|---|---|---|---|---:|---|---|---|
| Compromise deadline | compromise_deadline | Transaction | Pipeline | 7 | Days Before | High | Yes |
| Signature date | signature_date | Transaction | Pipeline | 3 | Days Before | High | Yes |
| Mandate expiration | mandate_expiration | Transaction | Properties | 30 | Days Before | High | Yes |
| Client follow-up - 7 days | client_follow_up_7 | Client | Clients | 7 | Days After | Medium | Yes |
| Client follow-up - 30 days | client_follow_up_30 | Client | Clients | 30 | Days After | Medium | Yes |
| Client anniversary | client_anniversary | Client | Clients | 1 | Years After | Low | Yes |
| Post-sale follow-up | post_sale_follow_up | Client | Pipeline | 3 | Months After | Medium | Yes |
| Appointment reminder - 1 day | appointment_reminder_1d | Appointment | Appointments | 1 | Days Before | High | Yes |
| Appointment reminder - 1 hour | appointment_reminder_1h | Appointment | Appointments | 1 | Hours Before | High | Yes |
| Pro card renewal | pro_card_renewal | Admin | Admin Deadlines | 60 | Days Before | High | Yes |
| Tax declaration | tax_declaration | Admin | Admin Deadlines | 30 | Days Before | High | Yes |
| Mandatory training | mandatory_training | Admin | Admin Deadlines | 90 | Days Before | Medium | Yes |
| Inactive prospect | inactive_prospect | Pipeline | Pipeline | 14 | Days After | Medium | Yes |
| Unanswered offer | unanswered_offer | Pipeline | Pipeline | 48 | Hours After | High | Yes |

### Database: `Admin Deadlines`

This database is necessary to support the admin alerts listed in the brief.

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Item | Title | Text | Example: CA License Renewal, Q4 Tax Filing |
| Type | Select | Pro Card, Taxes, Training, Insurance, License, Other | Admin category |
| Due Date | Date | Date | Main deadline |
| Status | Select | Upcoming, In Progress, Submitted, Completed | Track progress |
| Renewal Cycle | Select | Annual, Quarterly, Monthly, One-Time | Reference only |
| Owner | Text | Optional | If team use |
| Notes | Text | Free text | Context |
| Alerts | Relation | Relation -> `Pro Alerts` | Connects admin item to alert engine |

---

## Page 3 - 💼 Pro Space

### Purpose

This page houses the business databases and their clean linked views.

### Suggested page layout

1. Top navigation block
2. H1: `Pro Space`
3. Short intro:
   `Run listings, buyers, deals, appointments, and commissions from one connected system.`
4. Linked views in this order:
   - Clients
   - Properties
   - Pipeline
   - Visits
   - Appointments
   - Pro Alerts
   - Commissions Tracker
   - Admin Deadlines

### Database: `Clients`

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Name | Title | Text | Client name |
| Type | Select | Buyer, Seller, Buyer/Seller, Investor | Role |
| Status | Select | Active, Inactive, Closed | Live status |
| Phone | Phone | - | Contact |
| Email | Email | - | Contact |
| Source | Select | Referral, Zillow, Sphere, Instagram, Open House, Website, Other | Lead source |
| Client Since | Date | Date | Required for anniversary alert |
| Last Contact Date | Date | Date | Required for follow-up logic |
| Next Action | Text | Free text | What should happen next |
| Next Action Date | Date | Date | Optional scheduling helper |
| Notes | Text | Free text | Notes |
| Linked Properties | Relation | Relation -> `Properties` | Connected listings or interest |
| Linked Appointments | Relation | Relation -> `Appointments` | Calls, meetings, signings |
| Alerts | Relation | Relation -> `Pro Alerts` | Alert records tied to this client |
| Days Since Last Contact | Formula | See formula library | Follow-up helper |
| Needs Follow-Up | Formula | See formula library | Dashboard filter helper |

### Database: `Properties`

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Address | Title | Text | Property identifier |
| Type | Select | Apartment, House, Commercial, Land, Condo, Multi-Family | Property type |
| Status | Select | Available, Under Offer, Sold, Withdrawn | Listing state |
| Price | Number | Currency: USD | Asking or sold price |
| Seller | Relation | Relation -> `Clients` | Listing owner |
| Buyer | Relation | Relation -> `Clients` | Buyer if assigned |
| Mandate Expiry Date | Date | Date | Required for mandate alert |
| Commission % | Number | Example: 2.5 or 3 | Percent value |
| Estimated Commission $ | Formula | See formula library | Estimated gross commission |
| Notes | Text | Free text | Internal notes |
| Alerts | Relation | Relation -> `Pro Alerts` | Property alert rows |
| Mandate Days Left | Formula | See formula library | Dashboard helper |

### Database: `Pipeline`

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Deal Name | Title | Text | Deal label |
| Stage | Select | Prospect, Offer, Compromise, Notaire, Signed | Main workflow |
| Buyer | Relation | Relation -> `Clients` | Linked buyer |
| Seller | Relation | Relation -> `Clients` | Linked seller |
| Property | Relation | Relation -> `Properties` | Linked property |
| Offer Sent Date | Date | Date + time if possible | Needed for unanswered offer alert |
| Compromise Date | Date | Date | Needed for compromise alert |
| Signature Date | Date | Date | Needed for signing alert and post-sale follow-up |
| Last Stage Update | Date | Date | Needed for inactive prospect logic |
| Commission Amount | Number | Currency: USD | Expected or confirmed commission |
| Notes | Text | Free text | Deal notes |
| Alerts | Relation | Relation -> `Pro Alerts` | Deal alert rows |
| Stage Order | Formula | See formula library | Sort helper |
| Days Since Update | Formula | See formula library | Pipeline aging helper |

### Database: `Visits`

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Visit | Title | Suggested formula-like naming manually: `Client - Address - Date` | Visit label |
| Property | Relation | Relation -> `Properties` | Visited property |
| Client | Relation | Relation -> `Clients` | Visitor |
| Date & Time | Date | Date + time | Visit slot |
| Status | Select | Scheduled, Done, Cancelled | Visit state |
| Feedback | Text | Free text | Client feedback |
| Next Step | Text | Free text | Follow-up action |

### Database: `Appointments`

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Title | Title | Text | Appointment label |
| Type | Select | Visit, Mandate, Signing, Call, Other | Appointment kind |
| Date & Time | Date | Date + time | Main appointment date |
| Client | Relation | Relation -> `Clients` | Related person |
| Location | Text | Address or Zoom | Where it happens |
| Status | Select | Scheduled, Done, Cancelled | Appointment state |
| Reminder Sent | Checkbox | Checked / Unchecked | Optional manual tracking |
| Alerts | Relation | Relation -> `Pro Alerts` | Reminder alert rows |
| Is This Week | Formula | See formula library | Dashboard helper |

### Database: `Pro Alerts`

This is the core alert database for all professional reminders.

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Alert | Title | Manual label, usually same as rule + context | Alert record title |
| Rule | Relation | Relation -> `Alert Settings` | Connects to the rule |
| Client | Relation | Relation -> `Clients` | Optional source relation |
| Property | Relation | Relation -> `Properties` | Optional source relation |
| Deal | Relation | Relation -> `Pipeline` | Optional source relation |
| Appointment | Relation | Relation -> `Appointments` | Optional source relation |
| Admin Item | Relation | Relation -> `Admin Deadlines` | Optional source relation |
| Resolved | Checkbox | Checked / Unchecked | Dashboard filter |
| Rule Key | Rollup | From `Rule -> Rule Key` | Stable formula driver |
| Rule Active | Rollup | From `Rule -> Active` | Master toggle |
| Category | Rollup | From `Rule -> Category` | Display grouping |
| Trigger Direction | Rollup | From `Rule -> Trigger Direction` | Offset logic |
| Delay Value | Rollup | From `Rule -> Delay Value` | Offset amount |
| Priority | Rollup | From `Rule -> Priority` | Sorting |
| Deal Compromise Date | Rollup | From `Deal -> Compromise Date` | Formula source |
| Deal Signature Date | Rollup | From `Deal -> Signature Date` | Formula source |
| Deal Offer Sent Date | Rollup | From `Deal -> Offer Sent Date` | Formula source |
| Deal Last Stage Update | Rollup | From `Deal -> Last Stage Update` | Formula source |
| Client Last Contact Date | Rollup | From `Client -> Last Contact Date` | Formula source |
| Client Since | Rollup | From `Client -> Client Since` | Formula source |
| Property Mandate Expiry | Rollup | From `Property -> Mandate Expiry Date` | Formula source |
| Appointment Date & Time | Rollup | From `Appointment -> Date & Time` | Formula source |
| Admin Due Date | Rollup | From `Admin Item -> Due Date` | Formula source |
| Reference Date | Formula | See formula library | Chooses the source date |
| Alert Date | Formula | See formula library | Calculates actual due date |
| Days to Alert | Formula | See formula library | Urgency math |
| Urgency | Formula | See formula library | Overdue / Today / Upcoming |

### Database: `Commissions Tracker`

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Entry | Title | Example: `Deal Name - Commission` | Record label |
| Deal | Relation | Relation -> `Pipeline` | Deal source |
| Amount Earned | Number | Currency: USD | Actual received amount |
| Date Received | Date | Date | Cash received date |
| Tax Period | Select | Q1, Q2, Q3, Q4, Annual | Reporting period |
| Notes | Text | Free text | Payout notes |
| Month Label | Formula | See formula library | Dashboard grouping |
| Quarter Label | Formula | See formula library | Dashboard grouping |
| Is YTD | Formula | See formula library | Dashboard filter |

---

## Page 4 - 🏠 Personal Space

### Purpose

This page is visually separate from the Pro Space but still connected to the Dashboard.

### Suggested page layout

1. Top navigation block
2. H1: `Personal Space`
3. Intro:
   `Keep personal tasks, dates, and reminders visible without polluting the business pipeline.`
4. Linked views in this order:
   - Personal Tasks
   - Personal Calendar
   - Personal Alerts

### Database: `Personal Tasks`

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Task | Title | Text | Task name |
| Priority | Select | High, Medium, Low | Personal priority |
| Due Date | Date | Date | Due date |
| Status | Select | To Do, In Progress, Done | Task state |
| Category | Select | Personal, Admin, Finance, Health | Personal grouping |
| Notes | Text | Free text | Optional |
| Is Today | Formula | See formula library | Dashboard helper |
| Is This Week | Formula | See formula library | Dashboard helper |

### Database: `Personal Calendar`

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Event | Title | Text | Event label |
| Date | Date | Date + time optional | Calendar date |
| Type | Select | Family, Travel, Health, Personal, Other | Event type |
| Notes | Text | Free text | Notes |

### Database: `Personal Alerts`

| Property | Type | Options / Formula | Purpose |
|---|---|---|---|
| Alert Name | Title | Text | Reminder label |
| Date | Date | Date | Due date |
| Type | Select | Birthday, Bill, Appointment, Other | Alert type |
| Done | Checkbox | Checked / Unchecked | Completion |
| Notes | Text | Free text | Context |
| Is Due | Formula | See formula library | Dashboard helper |

---

## Formula Library

Use these formulas after relations and rollups are in place.

### `Clients -> Days Since Last Contact`

```notion
if(
  empty(prop("Last Contact Date")),
  empty(),
  dateBetween(now(), prop("Last Contact Date"), "days")
)
```

### `Clients -> Needs Follow-Up`

```notion
and(
  prop("Status") == "Active",
  not empty(prop("Last Contact Date")),
  dateBetween(now(), prop("Last Contact Date"), "days") > 7
)
```

### `Properties -> Estimated Commission $`

```notion
if(
  or(empty(prop("Price")), empty(prop("Commission %"))),
  empty(),
  round(prop("Price") * prop("Commission %") / 100)
)
```

### `Properties -> Mandate Days Left`

```notion
if(
  empty(prop("Mandate Expiry Date")),
  empty(),
  dateBetween(prop("Mandate Expiry Date"), today(), "days")
)
```

### `Pipeline -> Stage Order`

```notion
ifs(
  prop("Stage") == "Prospect", 1,
  prop("Stage") == "Offer", 2,
  prop("Stage") == "Compromise", 3,
  prop("Stage") == "Notaire", 4,
  prop("Stage") == "Signed", 5,
  99
)
```

### `Pipeline -> Days Since Update`

```notion
if(
  empty(prop("Last Stage Update")),
  empty(),
  dateBetween(now(), prop("Last Stage Update"), "days")
)
```

### `Appointments -> Is This Week`

```notion
and(
  not empty(prop("Date & Time")),
  dateBetween(prop("Date & Time"), today(), "days") >= 0,
  dateBetween(prop("Date & Time"), today(), "days") <= 6
)
```

### `Personal Tasks -> Is Today`

```notion
and(
  not empty(prop("Due Date")),
  formatDate(prop("Due Date"), "YYYY-MM-DD") == formatDate(today(), "YYYY-MM-DD")
)
```

### `Personal Tasks -> Is This Week`

```notion
and(
  not empty(prop("Due Date")),
  dateBetween(prop("Due Date"), today(), "days") >= 0,
  dateBetween(prop("Due Date"), today(), "days") <= 6
)
```

### `Personal Alerts -> Is Due`

```notion
and(
  prop("Done") == false,
  not empty(prop("Date")),
  prop("Date") <= today()
)
```

### `Commissions Tracker -> Month Label`

```notion
if(
  empty(prop("Date Received")),
  "",
  formatDate(prop("Date Received"), "MMMM YYYY")
)
```

### `Commissions Tracker -> Quarter Label`

```notion
if(
  empty(prop("Date Received")),
  "",
  "Q" + format(ceil(toNumber(formatDate(prop("Date Received"), "M")) / 3)) + " " + formatDate(prop("Date Received"), "YYYY")
)
```

### `Commissions Tracker -> Is YTD`

```notion
if(
  empty(prop("Date Received")),
  false,
  formatDate(prop("Date Received"), "YYYY") == formatDate(today(), "YYYY")
)
```

### `Pro Alerts -> Reference Date`

```notion
ifs(
  prop("Rule Key") == "compromise_deadline", prop("Deal Compromise Date"),
  prop("Rule Key") == "signature_date", prop("Deal Signature Date"),
  prop("Rule Key") == "mandate_expiration", prop("Property Mandate Expiry"),
  prop("Rule Key") == "client_follow_up_7", prop("Client Last Contact Date"),
  prop("Rule Key") == "client_follow_up_30", prop("Client Last Contact Date"),
  prop("Rule Key") == "client_anniversary", prop("Client Since"),
  prop("Rule Key") == "post_sale_follow_up", prop("Deal Signature Date"),
  prop("Rule Key") == "appointment_reminder_1d", prop("Appointment Date & Time"),
  prop("Rule Key") == "appointment_reminder_1h", prop("Appointment Date & Time"),
  prop("Rule Key") == "pro_card_renewal", prop("Admin Due Date"),
  prop("Rule Key") == "tax_declaration", prop("Admin Due Date"),
  prop("Rule Key") == "mandatory_training", prop("Admin Due Date"),
  prop("Rule Key") == "inactive_prospect", prop("Deal Last Stage Update"),
  prop("Rule Key") == "unanswered_offer", prop("Deal Offer Sent Date"),
  empty()
)
```

### `Pro Alerts -> Alert Date`

```notion
if(
  or(empty(prop("Reference Date")), prop("Rule Active") == false),
  empty(),
  ifs(
    prop("Trigger Direction") == "Days Before", dateSubtract(prop("Reference Date"), prop("Delay Value"), "days"),
    prop("Trigger Direction") == "Days After", dateAdd(prop("Reference Date"), prop("Delay Value"), "days"),
    prop("Trigger Direction") == "Hours Before", dateSubtract(prop("Reference Date"), prop("Delay Value"), "hours"),
    prop("Trigger Direction") == "Hours After", dateAdd(prop("Reference Date"), prop("Delay Value"), "hours"),
    prop("Trigger Direction") == "Months Before", dateSubtract(prop("Reference Date"), prop("Delay Value"), "months"),
    prop("Trigger Direction") == "Months After", dateAdd(prop("Reference Date"), prop("Delay Value"), "months"),
    prop("Trigger Direction") == "Years Before", dateSubtract(prop("Reference Date"), prop("Delay Value"), "years"),
    prop("Trigger Direction") == "Years After", dateAdd(prop("Reference Date"), prop("Delay Value"), "years"),
    prop("Trigger Direction") == "Fixed Date", prop("Reference Date"),
    prop("Reference Date")
  )
)
```

### `Pro Alerts -> Days to Alert`

```notion
if(
  empty(prop("Alert Date")),
  empty(),
  dateBetween(prop("Alert Date"), now(), "days")
)
```

### `Pro Alerts -> Urgency`

```notion
ifs(
  prop("Resolved"), "Resolved",
  empty(prop("Alert Date")), "Missing Date",
  prop("Alert Date") < now(), "Overdue",
  dateBetween(prop("Alert Date"), now(), "hours") <= 24, "Today",
  dateBetween(prop("Alert Date"), now(), "days") <= 7, "This Week",
  "Upcoming"
)
```

---

## Dashboard Views and Filters

Configure the Dashboard using the following linked views.

### `🔔 ALERTS TODAY`

#### View 1: `Pro Alerts - Due Now`

- Database: `Pro Alerts`
- Layout: Table or List
- Filter:
  - `Resolved` is unchecked
  - `Alert Date` is on or before `Today`
  - `Rule Active` is checked
- Sort:
  - `Priority` descending
  - `Alert Date` ascending

#### View 2: `Personal Alerts - Due Now`

- Database: `Personal Alerts`
- Layout: Table or List
- Filter:
  - `Done` is unchecked
  - `Date` is on or before `Today`
- Sort:
  - `Date` ascending

### `📅 THIS WEEK`

#### View 1: `Appointments - This Week`

- Database: `Appointments`
- Layout: Calendar or List
- Filter:
  - `Status` is not `Cancelled`
  - `Date & Time` is within `This week`
- Sort:
  - `Date & Time` ascending

#### View 2: `Personal Tasks - This Week`

- Database: `Personal Tasks`
- Layout: List
- Filter:
  - `Status` is not `Done`
  - `Due Date` is within `This week`
- Sort:
  - `Due Date` ascending
  - `Priority` descending

### `🏗️ PIPELINE AT A GLANCE`

- Database: `Pipeline`
- Layout: Board
- Group by: `Stage`
- Filter:
  - `Stage` is not empty
  - Optional: hide `Signed` if you only want active deals
- Sort:
  - `Stage Order` ascending
  - `Signature Date` ascending

### `💰 COMMISSION SUMMARY`

Use 3 small linked views:

#### View 1: `Commission This Month`

- Database: `Commissions Tracker`
- Filter:
  - `Date Received` is within `This month`
- Show:
  - `Amount Earned`
- Footer calculation:
  - `Sum`

#### View 2: `Commission YTD`

- Database: `Commissions Tracker`
- Filter:
  - `Is YTD` is checked
- Show:
  - `Amount Earned`
- Footer calculation:
  - `Sum`

#### View 3: `Closed Deals This Year`

- Database: `Pipeline`
- Filter:
  - `Stage` is `Signed`
  - `Signature Date` is within `This year`
- Footer calculation:
  - `Count all`

### `👥 CLIENTS TO FOLLOW UP`

- Database: `Clients`
- Layout: Table or List
- Filter:
  - `Status` is `Active`
  - `Needs Follow-Up` is checked
- Sort:
  - `Days Since Last Contact` descending

### `✅ MY TASKS TODAY`

- Database: `Personal Tasks`
- Layout: List
- Filter:
  - `Status` is not `Done`
  - `Is Today` is checked
- Sort:
  - `Priority` descending
  - `Due Date` ascending

---

## Recommended Database Templates and Buttons

To make the alert engine usable without external automation, create database templates with internal Notion buttons.

### Recommended buttons

- On `Clients` template:
  - Button: `Create client alert set`
  - Creates `Pro Alerts` rows for:
    - `Client follow-up - 7 days`
    - `Client follow-up - 30 days`
    - `Client anniversary`

- On `Properties` template:
  - Button: `Create listing alert set`
  - Creates `Pro Alerts` row for:
    - `Mandate expiration`

- On `Pipeline` template:
  - Button: `Create transaction alert set`
  - Creates `Pro Alerts` rows for:
    - `Compromise deadline`
    - `Signature date`
    - `Post-sale follow-up`
    - `Inactive prospect`
    - `Unanswered offer`

- On `Appointments` template:
  - Button: `Create appointment reminders`
  - Creates `Pro Alerts` rows for:
    - `Appointment reminder - 1 day`
    - `Appointment reminder - 1 hour`

- On `Admin Deadlines` template:
  - Button: `Create admin alert`
  - Creates the appropriate `Pro Alerts` row tied to the selected admin item

This keeps the system 100% Notion while avoiding manual alert recreation every time.

---

## Implementation Order

Build the template in this exact order so relations and rollups work cleanly.

1. Create the four top-level pages:
   - `📊 Master Dashboard`
   - `🎛️ Control Panel`
   - `💼 Pro Space`
   - `🏠 Personal Space`

2. Add the same top navigation block to each page.

3. Create these databases without formulas first:
   - `Alert Settings`
   - `Admin Deadlines`
   - `Clients`
   - `Properties`
   - `Pipeline`
   - `Visits`
   - `Appointments`
   - `Pro Alerts`
   - `Commissions Tracker`
   - `Personal Tasks`
   - `Personal Calendar`
   - `Personal Alerts`

4. Add the basic select options and date fields before creating any rollups.

5. Create all required relations:
   - Clients <-> Properties
   - Clients <-> Appointments
   - Clients <-> Pro Alerts
   - Properties <-> Pro Alerts
   - Pipeline <-> Pro Alerts
   - Appointments <-> Pro Alerts
   - Admin Deadlines <-> Pro Alerts
   - Alert Settings <-> Pro Alerts
   - Pipeline <-> Commissions Tracker

6. Add all `Pro Alerts` rollups from `Rule` and from each source relation.

7. Add the helper formulas to `Clients`, `Properties`, `Pipeline`, `Appointments`, `Commissions Tracker`, `Personal Tasks`, and `Personal Alerts`.

8. Add the `Reference Date`, `Alert Date`, `Days to Alert`, and `Urgency` formulas to `Pro Alerts`.

9. Seed the `Alert Settings` rows exactly as listed in the Control Panel section.

10. Create database templates and Notion buttons for Clients, Properties, Pipeline, Appointments, and Admin Deadlines so alert rows can be created fast.

11. Build linked views on `Pro Space`, `Personal Space`, and `Control Panel`.

12. Build the `Master Dashboard` linked views using the filters listed above.

13. Final polish:
   - Add icons and cover images
   - Hide helper properties from default views
   - Lock the top-level navigation block if preferred
   - Duplicate the workspace and test with 1 fake buyer, 1 fake seller, 1 property, and 1 active deal

---

## Suggested Dashboard Copy

Use this text directly on the Dashboard page.

### Page title

`The Agent OS`

### Subtitle

`Your business, pipeline, and personal planning in one command center.`

### Intro callout

`Start in Control Panel if this is your first setup. Once your alert rules are configured, the views below become your daily operating board.`

### Section intros

- `🔔 ALERTS TODAY`
  `Everything due now or overdue, across professional alerts and personal reminders.`

- `📅 THIS WEEK`
  `A live view of the week ahead: appointments on one side, personal tasks on the other.`

- `🏗️ PIPELINE AT A GLANCE`
  `Every active deal, grouped by stage, so nothing sits unseen.`

- `💰 COMMISSION SUMMARY`
  `Track closed income this month, this year, and how many deals actually made it across the finish line.`

- `👥 CLIENTS TO FOLLOW UP`
  `Active clients who have gone quiet and need a touchpoint.`

- `✅ MY TASKS TODAY`
  `Personal to-dos due today, without mixing them into your professional pipeline.`

---

## Final Product Positioning for Sales Page

Use this if you want a simple sales summary:

`The Agent OS is a complete Notion operating system for independent real estate agents. It replaces rigid CRMs with a cleaner setup built around clients, listings, transactions, commissions, and personal planning.`

