# Dealspace — Onboarding Flow Specification **Version:** 0.1 — 2026-02-28 **Status:** Pre-implementation specification --- ## 1. Account Creation (IB Admin) ### 1.1 Registration Form **URL:** `https://app.muskepo.com/register` **Form Fields:** ``` ┌─────────────────────────────────────────────────────────────┐ │ Create Your Account │ ├─────────────────────────────────────────────────────────────┤ │ Organization Name [Goldman Sachs ] │ │ Your Name [Sarah Mitchell ] │ │ Work Email [sarah.mitchell@gs.com ] │ │ Password [•••••••••••••• ] │ │ Confirm Password [•••••••••••••• ] │ │ │ │ □ I agree to the Terms of Service and Privacy Policy │ │ │ │ [ Create Account ] │ │ │ │ Already have an account? Sign in │ └─────────────────────────────────────────────────────────────┘ ``` **Validation:** - Email must be corporate domain (no gmail.com, yahoo.com, etc.) — soft warning, not hard block - Password: 12+ characters, at least one uppercase, one number, one special - Organization name: required, 2–100 characters **Data Created:** ```sql -- User record (pending verification) INSERT INTO users (id, email, name, password_hash, org_name, status, created_at) VALUES ('usr_abc123', 'sarah.mitchell@gs.com', 'Sarah Mitchell', '$argon2id$...', 'Goldman Sachs', 'pending_verification', 1709136000000); ``` ### 1.2 Email Verification Flow **Email sent immediately after form submission:** ``` Subject: Verify your Dealspace account Hi Sarah, Click below to verify your email and activate your Dealspace account: [Verify Email Address] https://app.muskepo.com/verify?token=abc123def456 This link expires in 24 hours. If you didn't create this account, you can safely ignore this email. — The Dealspace Team ``` **On click:** 1. Token validated (single-use, 24h expiry) 2. User status → `pending_mfa` 3. Redirect to `/setup/mfa` ### 1.3 MFA Setup (Mandatory for IB Admin) **URL:** `https://app.muskepo.com/setup/mfa` **Step-by-step flow:** ``` ┌─────────────────────────────────────────────────────────────┐ │ Set Up Two-Factor Authentication │ │ │ │ Step 1 of 3: Install Authenticator App │ │ ───────────────────────────────────────────────────────── │ │ │ │ Download one of these apps on your phone: │ │ │ │ • Google Authenticator (iOS / Android) │ │ • Microsoft Authenticator (iOS / Android) │ │ • 1Password, Authy, or any TOTP app │ │ │ │ Already have one? [Continue →] │ └─────────────────────────────────────────────────────────────┘ ``` ``` ┌─────────────────────────────────────────────────────────────┐ │ Set Up Two-Factor Authentication │ │ │ │ Step 2 of 3: Scan QR Code │ │ ───────────────────────────────────────────────────────── │ │ │ │ ┌───────────────┐ │ │ │ [QR CODE] │ │ │ │ │ │ │ └───────────────┘ │ │ │ │ Can't scan? Enter this code manually: │ │ JBSWY3DPEHPK3PXP (tap to copy) │ │ │ │ [Continue →] │ └─────────────────────────────────────────────────────────────┘ ``` ``` ┌─────────────────────────────────────────────────────────────┐ │ Set Up Two-Factor Authentication │ │ │ │ Step 3 of 3: Verify Setup │ │ ───────────────────────────────────────────────────────── │ │ │ │ Enter the 6-digit code from your authenticator app: │ │ │ │ [ 4 ] [ 7 ] [ 2 ] [ 9 ] [ 1 ] [ 5 ] │ │ │ │ [ Verify & Complete Setup ] │ └─────────────────────────────────────────────────────────────┘ ``` **On successful verification:** 1. TOTP secret stored (encrypted) in user record 2. Recovery codes generated (10 codes, 8 characters each) 3. User status → `active` 4. Show recovery codes screen: ``` ┌─────────────────────────────────────────────────────────────┐ │ Save Your Recovery Codes │ │ │ │ Store these in a safe place. You'll need them if you │ │ lose access to your authenticator app. │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 1. XKCD-7843 6. BEEF-2947 │ │ │ │ 2. PASS-9126 7. DORK-5182 │ │ │ │ 3. MOON-4521 8. JAZZ-7394 │ │ │ │ 4. TREE-8734 9. FORK-6215 │ │ │ │ 5. WAVE-3069 10. LAMP-9847 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ [Download as PDF] [Copy to clipboard] │ │ │ │ □ I have saved my recovery codes │ │ │ │ [ Continue to Dealspace ] │ └─────────────────────────────────────────────────────────────┘ ``` ### 1.4 First Login Experience **URL:** `https://app.muskepo.com/app` User lands on an empty dashboard with a prominent call to action: ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ DEALSPACE Goldman Sachs | Sarah Mitchell ▼ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ │ ┌──────────────────────────┐ │ │ │ 📁 │ │ │ │ │ │ │ │ No projects yet │ │ │ │ │ │ │ │ Create your first │ │ │ │ deal to get started │ │ │ │ │ │ │ │ [+ Create Project] │ │ │ │ │ │ │ └──────────────────────────┘ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 2. First Project Setup Wizard Clicking "Create Project" launches a 5-step wizard. Each step is a focused screen. Progress bar at top. ### 2.1 Step 1: Project Name + Deal Type **URL:** `https://app.muskepo.com/app/projects/new/basics` ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ Create Project Step 1 of 5 ━━━○○○○ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ Project Name │ │ [TechCorp Acquisition - Project Phoenix ] │ │ │ │ Deal Type │ │ ┌───────────────────┐ ┌───────────────────┐ │ │ │ ○ Sell-side │ │ ○ Buy-side │ │ │ │ M&A Advisory │ │ M&A Advisory │ │ │ └───────────────────┘ └───────────────────┘ │ │ ┌───────────────────┐ ┌───────────────────┐ │ │ │ ○ Merger │ │ ○ Other │ │ │ │ │ │ │ │ │ └───────────────────┘ └───────────────────┘ │ │ │ │ Code Name (optional, shown to buyers instead of project name) │ │ [Project Phoenix ] │ │ │ │ [Cancel] [Next: Workstreams] │ └─────────────────────────────────────────────────────────────────────────────┘ ``` **Data Created (in memory, not persisted until Step 5):** ```json { "name": "TechCorp Acquisition - Project Phoenix", "deal_type": "sell_side", "code_name": "Project Phoenix", "workstreams": [], "team": [], "seller_contacts": [] } ``` ### 2.2 Step 2: Configure Workstreams **URL:** `https://app.muskepo.com/app/projects/new/workstreams` ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ Create Project Step 2 of 5 ━━━━○○○ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ Configure Workstreams │ │ │ │ These are the areas your deal will cover. You can add, remove, or │ │ rename them. Each workstream has its own access controls. │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ ☑ Finance [Edit name] [Remove] │ │ │ │ ☑ Legal [Edit name] [Remove] │ │ │ │ ☑ IT [Edit name] [Remove] │ │ │ │ ☑ HR [Edit name] [Remove] │ │ │ │ ☑ Operations [Edit name] [Remove] │ │ │ │ ☐ Tax [Edit name] [Remove] │ │ │ │ ☐ Commercial [Edit name] [Remove] │ │ │ │ ☐ Environmental [Edit name] [Remove] │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ [+ Add Custom Workstream] │ │ │ │ [Back] [Next: Invite Team] │ └─────────────────────────────────────────────────────────────────────────────┘ ``` **Default workstreams (pre-checked):** - Finance - Legal - IT - HR - Operations **Additional suggestions (unchecked):** - Tax - Commercial - Environmental - Regulatory - Insurance **Custom workstream modal:** ``` ┌────────────────────────────────────┐ │ Add Workstream │ │ │ │ Name: [IP & Patents ] │ │ │ │ [Cancel] [Add Workstream] │ └────────────────────────────────────┘ ``` ### 2.3 Step 3: Invite IB Team Members **URL:** `https://app.muskepo.com/app/projects/new/team` ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ Create Project Step 3 of 5 ━━━━━○○ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ Invite Your Team │ │ Add team members and assign them to workstreams. │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ Email Name Role Workstreams │ │ │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ mike@gs.com Mike Chen ib_member Finance, Tax │ │ │ │ [Edit] [Remove] │ │ │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ jen@gs.com Jen Park ib_member Legal │ │ │ │ [Edit] [Remove] │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ [+ Add Team Member] │ │ │ │ ────────────────────────────────────────────────────────────────────── │ │ Or paste multiple emails (one per line): │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ alex@gs.com │ │ │ │ david@gs.com │ │ │ │ lisa@gs.com │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ [Parse & Add] │ │ │ │ [Back] [Next: Invite Seller] │ └─────────────────────────────────────────────────────────────────────────────┘ ``` **Add team member modal:** ``` ┌─────────────────────────────────────────────────────────────┐ │ Add Team Member │ │ │ │ Email Address │ │ [mike.chen@gs.com ] │ │ │ │ Full Name │ │ [Mike Chen ] │ │ │ │ Role │ │ ○ IB Admin (full access, can manage project) │ │ ● IB Member (manage requests + vet answers in workstreams) │ │ │ │ Workstream Access │ │ ☑ Finance │ │ ☐ Legal │ │ ☐ IT │ │ ☐ HR │ │ ☐ Operations │ │ ☑ Tax │ │ │ │ [Cancel] [Add to Team] │ └─────────────────────────────────────────────────────────────┘ ``` ### 2.4 Step 4: Invite Seller Contacts **URL:** `https://app.muskepo.com/app/projects/new/seller` ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ Create Project Step 4 of 5 ━━━━━━○ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ Invite Seller Team │ │ Add the sell-side company's contacts. They'll receive access invites. │ │ │ │ Seller Organization Name │ │ [TechCorp Inc. ] │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ Email Name Title Role │ │ │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ john.smith@techcorp. John Smith CFO seller_ │ │ │ │ com admin │ │ │ │ [Edit] [Remove] │ │ │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ mary.johnson@techcorp Mary Johnson Controller seller_ │ │ │ │ .com member │ │ │ │ [Edit] [Remove] │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ [+ Add Seller Contact] │ │ │ │ ⓘ Seller Admin can manage their team and see all workstreams. │ │ ⓘ Seller Members only see assigned workstreams. │ │ │ │ [Back] [Next: Review & Launch] │ └─────────────────────────────────────────────────────────────────────────────┘ ``` **Add seller contact modal:** ``` ┌─────────────────────────────────────────────────────────────┐ │ Add Seller Contact │ │ │ │ Email Address │ │ [john.smith@techcorp.com ] │ │ │ │ Full Name │ │ [John Smith ] │ │ │ │ Title │ │ [CFO ] │ │ │ │ Role │ │ ● Seller Admin (manage seller team, all workstreams) │ │ ○ Seller Member (answer requests in assigned workstreams) │ │ │ │ Workstream Access (for Seller Member only) │ │ ☑ Finance │ │ ☐ Legal │ │ ... │ │ │ │ [Cancel] [Add Contact] │ └─────────────────────────────────────────────────────────────┘ ``` ### 2.5 Step 5: Review & Launch **URL:** `https://app.muskepo.com/app/projects/new/review` ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ Create Project Step 5 of 5 ━━━━━━━ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ Review & Launch │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ PROJECT DETAILS │ │ │ │ Name: TechCorp Acquisition - Project Phoenix │ │ │ │ Code Name: Project Phoenix (shown to buyers) │ │ │ │ Type: Sell-side M&A Advisory [Edit] │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ WORKSTREAMS (5) │ │ │ │ Finance · Legal · IT · HR · Operations [Edit] │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ YOUR TEAM (3 invites will be sent) │ │ │ │ • Mike Chen (mike@gs.com) — IB Member, Finance + Tax │ │ │ │ • Jen Park (jen@gs.com) — IB Member, Legal │ │ │ │ • Alex Wong (alex@gs.com) — IB Member, IT [Edit] │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ SELLER TEAM (2 invites will be sent) │ │ │ │ • John Smith (john.smith@techcorp.com) — Seller Admin │ │ │ │ • Mary Johnson (mary.johnson@techcorp.com) — Seller Member │ │ │ │ [Edit] │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ ⓘ 5 invitation emails will be sent when you launch. │ │ │ │ [Back] [Launch Project →] │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ### 2.6 Data Created on Launch **Database operations (single transaction):** ```sql -- Project entry INSERT INTO entries (entry_id, project_id, parent_id, type, depth, search_key, summary, data, stage) VALUES ('prj_abc123', 'prj_abc123', '', 'project', 0, 'techcorp-acquisition', 'TechCorp Acquisition - Project Phoenix', PACK('{"name":"...","code_name":"...","deal_type":"sell_side","seller_org":"TechCorp Inc."}'), 'pre_dataroom'); -- Workstream entries (5x) INSERT INTO entries (entry_id, project_id, parent_id, type, depth, search_key, summary, data, stage) VALUES ('ws_fin', 'prj_abc123', 'prj_abc123', 'workstream', 1, 'finance', 'Finance', PACK('{}'), 'pre_dataroom'), ('ws_leg', 'prj_abc123', 'prj_abc123', 'workstream', 1, 'legal', 'Legal', PACK('{}'), 'pre_dataroom'), ('ws_it', 'prj_abc123', 'prj_abc123', 'workstream', 1, 'it', 'IT', PACK('{}'), 'pre_dataroom'), ('ws_hr', 'prj_abc123', 'prj_abc123', 'workstream', 1, 'hr', 'HR', PACK('{}'), 'pre_dataroom'), ('ws_ops', 'prj_abc123', 'prj_abc123', 'workstream', 1, 'operations', 'Operations', PACK('{}'), 'pre_dataroom'); -- Access records (for creating IB admin) INSERT INTO access (id, project_id, workstream_id, user_id, role, ops, granted_by, granted_at) VALUES ('acc_001', 'prj_abc123', NULL, 'usr_sarah', 'ib_admin', 'rwdm', 'usr_sarah', 1709136000000); -- Pending invitations (stored until accepted) INSERT INTO invitations (id, project_id, email, name, role, workstream_ids, invited_by, expires_at) VALUES ('inv_001', 'prj_abc123', 'mike@gs.com', 'Mike Chen', 'ib_member', '["ws_fin"]', 'usr_sarah', ...), ('inv_002', 'prj_abc123', 'jen@gs.com', 'Jen Park', 'ib_member', '["ws_leg"]', 'usr_sarah', ...), ('inv_003', 'prj_abc123', 'john.smith@techcorp.com', 'John Smith', 'seller_admin', NULL, 'usr_sarah', ...), ('inv_004', 'prj_abc123', 'mary.johnson@techcorp.com', 'Mary Johnson', 'seller_member', '["ws_fin"]', 'usr_sarah', ...); ``` ### 2.7 Emails Sent on Launch **To IB team members (3x):** See [Section 6.1 — IB Team Invite Email](#61-ib-team-invite-email) **To Seller contacts (2x):** See [Section 6.2 — Seller Invite Email](#62-seller-invite-email) ### 2.8 Post-Launch Screen ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ DEALSPACE [TechCorp Acquisition ▼] Goldman Sachs | Sarah ▼ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ Finance | Legal | IT | HR | Operations │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ✓ Project Created │ │ │ │ 5 invitations sent. Here's what happens next: │ │ │ │ 1. Your team accepts their invitations │ │ 2. Seller contacts accept and set up their accounts │ │ 3. Create your first request list to start the due diligence │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ Ready to start? │ │ │ │ │ │ │ │ [+ Create Request List] [View Team Status] │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 3. Invite Flow (Seller Side) ### 3.1 Seller Invite Email **The actual email the Seller CFO receives:** ``` From: TechCorp Acquisition via Dealspace Reply-To: sarah.mitchell@gs.com To: john.smith@techcorp.com Subject: You've been invited to Project Phoenix ─────────────────────────────────────────────────────────────────────── Hi John, Sarah Mitchell from Goldman Sachs has invited you to join the due diligence process for Project Phoenix. You've been assigned as Seller Admin, which means you can: • See all requests from the deal team • Assign tasks to your colleagues • Manage your team's access and responses [Accept Invitation] https://app.muskepo.com/invite/abc123def456 This invitation expires in 7 days. If you have questions, reply to this email to reach Sarah directly. ─────────────────────────────────────────────────────────────────────── What is Dealspace? Dealspace is a secure platform for managing M&A due diligence. All documents are encrypted and watermarked. You control what gets shared and when. Questions? Contact support@muskepo.com ``` ### 3.2 Invitation Landing Page **URL:** `https://app.muskepo.com/invite/abc123def456` **For new users (no existing account):** ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ You're invited to │ │ │ │ PROJECT PHOENIX │ │ │ │ │ │ │ │ Goldman Sachs has invited you to participate in this deal. │ │ │ │ │ │ │ │ Your Role: Seller Admin │ │ │ │ Organization: TechCorp Inc. │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ Create Your Account │ │ │ │ Email (pre-filled, read-only) │ │ [john.smith@techcorp.com ] │ │ │ │ Your Name │ │ [John Smith ] │ │ │ │ Create Password │ │ [•••••••••••• ] │ │ 12+ characters, including uppercase, number, and special character │ │ │ │ Confirm Password │ │ [•••••••••••• ] │ │ │ │ □ I agree to the Terms of Service and Privacy Policy │ │ │ │ [ Create Account & Join Project ] │ │ │ │ Already have an account? Sign in │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ### 3.3 MFA Setup (Seller) **For seller_admin: strongly recommended (shown after account creation)** **For seller_member: optional (can skip)** ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ Secure Your Account │ │ │ │ Two-factor authentication adds an extra layer of security. │ │ Goldman Sachs recommends enabling this for all deal participants. │ │ │ │ [Set Up Two-Factor Authentication] │ │ │ │ [Skip for now — I'll do this later] │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ### 3.4 First Login: Seller Task Inbox **URL:** `https://app.muskepo.com/app` (after accepting invite) On first login, the Seller Admin sees their task inbox — which is likely empty until the IB team creates request lists. **Empty state (no requests yet):** ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ DEALSPACE [Project Phoenix ▼] TechCorp | John ▼ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ MY TASKS [All Workstreams ▼] │ │ │ │ ┌──────────────────────────┐ │ │ │ ✓ │ │ │ │ │ │ │ │ No tasks yet │ │ │ │ │ │ │ │ Goldman Sachs hasn't │ │ │ │ sent any requests yet. │ │ │ │ We'll notify you when │ │ │ │ they do. │ │ │ │ │ │ │ └──────────────────────────┘ │ │ │ │ ────────────────────────────────────────────────────────────────────── │ │ While you wait, you can: │ │ • [Invite your team members] │ │ • [Set up your profile] │ │ • [Review the quick start guide] │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` **When requests exist (typical first login):** ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ DEALSPACE [Project Phoenix ▼] TechCorp | John ▼ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ MY TASKS [Filter ▼] [Sort: Due Date ▼] 🔍 │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ You have 12 new requests │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ FINANCE (8) │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ ⚡ FIN-001 Audited financial statements FY2023-2024 │ │ │ │ Due: Mar 15 • High Priority • Assigned to: You [→] │ │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ FIN-002 Revenue breakdown by product line │ │ │ │ Due: Mar 18 • Normal • Assigned to: You [→] │ │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ FIN-003 Accounts receivable aging report │ │ │ │ Due: Mar 18 • Normal • Assigned to: Mary Johnson [→] │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ [Show 5 more...] │ │ │ │ LEGAL (4) │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ LEG-001 Material contracts list │ │ │ │ Due: Mar 20 • High Priority • Assigned to: You [→] │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ [Show 3 more...] │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 4. First Request List ### 4.1 Creating a Request List **IB member navigates to a workstream and clicks "New Request List"** ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ DEALSPACE [TechCorp Acquisition ▼] Goldman Sachs | Mike ▼ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ Finance | Legal | IT | HR | Operations │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ FINANCE — Request Lists │ │ │ │ [+ New Request List] [Import from Excel] │ │ │ │ (No request lists yet) │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ### 4.2 New Request List Modal ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ Create Request List │ │ │ │ List Name │ │ [Initial Finance DD Requests ] │ │ │ │ Description (optional) │ │ [First round of financial due diligence requests for Project Phoenix ] │ │ │ │ Default Due Date │ │ [2026-03-15 ] (can be overridden per request) │ │ │ │ Default Assignee │ │ [John Smith (Seller Admin) ▼ ] (can be overridden per request) │ │ │ │ ────────────────────────────────────────────────────────────────────── │ │ │ │ How would you like to add requests? │ │ │ │ ○ Add requests manually (one at a time) │ │ ● Import from Excel template │ │ [Download Template] │ │ │ │ [Cancel] [Create List] │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ### 4.3 Excel Import Template **File: `dealspace-request-template.xlsx`** | Column | Header | Required | Description | Valid Values | |--------|--------|----------|-------------|--------------| | A | ref | No | Reference number (auto-generated if blank) | e.g., FIN-001 | | B | title | Yes | Request title | Max 200 chars | | C | description | No | Detailed description | Max 5000 chars | | D | priority | No | Priority level | high, normal, low (default: normal) | | E | due_date | No | Due date | YYYY-MM-DD (default: list default) | | F | assigned_to | No | Assignee email | Must be valid seller email | **Sample template content:** ``` ref title description priority due_date assigned_to FIN-001 Audited financial statements FY2023-2024 Complete audited financials for the last two fiscal... high 2026-03-15 john.smith@techcorp.com FIN-002 Revenue breakdown by product line Monthly revenue by product line for last 24 months normal 2026-03-18 john.smith@techcorp.com FIN-003 Accounts receivable aging report Current AR aging as of latest month-end normal 2026-03-18 mary.johnson@techcorp.com FIN-004 Accounts payable aging report Current AP aging as of latest month-end normal 2026-03-18 mary.johnson@techcorp.com FIN-005 Cash flow projections FY2025-2027 3-year projected cash flows high 2026-03-20 john.smith@techcorp.com FIN-006 Bank statements (all accounts) Last 12 months of bank statements for all accounts normal 2026-03-22 FIN-007 Debt schedule Current debt obligations with terms and covenants high 2026-03-18 john.smith@techcorp.com FIN-008 Capital expenditure history CapEx by category for last 3 years normal 2026-03-25 mary.johnson@techcorp.com ``` ### 4.4 Import Preview Screen ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ Import Requests — Preview │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ✓ 8 requests parsed successfully │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ Ref Title Priority Due To │ │ │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ FIN-001 Audited financial statements... ⚡ High Mar 15 JS │ │ │ │ FIN-002 Revenue breakdown by product... — Mar 18 JS │ │ │ │ FIN-003 Accounts receivable aging... — Mar 18 MJ │ │ │ │ FIN-004 Accounts payable aging... — Mar 18 MJ │ │ │ │ FIN-005 Cash flow projections... ⚡ High Mar 20 JS │ │ │ │ FIN-006 Bank statements (all accounts) — Mar 22 — │ │ │ │ FIN-007 Debt schedule ⚡ High Mar 18 JS │ │ │ │ FIN-008 Capital expenditure history — Mar 25 MJ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ ⚠ 1 request has no assignee (FIN-006) — will be assigned to John Smith │ │ │ │ □ Send notification emails to assignees now │ │ □ Send a single summary email per assignee (instead of per-request) │ │ │ │ [Cancel] [Back to Edit] [Import 8 Requests →] │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ### 4.5 Notifications Fired **On import with "Send notification emails" checked:** 1. **John Smith receives:** "You have 6 new requests in Project Phoenix" 2. **Mary Johnson receives:** "You have 2 new requests in Project Phoenix" See [Section 6.3 — New Tasks Notification](#63-new-tasks-notification) for email copy. --- ## 5. The "Aha Moment" ### 5.1 For the Investment Bank **The moment:** When the first answer comes back with documents attached, automatically indexed and searchable, and they click "Approve" to publish it to the data room — all in 3 clicks. **The comparison:** In the old workflow, this would involve: 1. Receiving email with attachment 2. Downloading attachment 3. Opening VDR 4. Navigating to correct folder 5. Uploading document 6. Renaming to match convention 7. Setting permissions 8. Updating tracking spreadsheet 9. Emailing confirmation **Design toward this:** - Answer review screen shows document preview inline - One-click approve → "Published to Data Room" confirmation - Activity feed shows real-time: "FIN-001 answered → vetted → published" - Buyer count badge: "3 buyers can now see this" ### 5.2 For the Seller **The moment:** When they upload their first answer and immediately see exactly what the bank is waiting on — a clear task list with priorities, due dates, and progress tracking, instead of hunting through email threads. **The comparison:** In the old workflow: 1. Receive request list via email (usually PDF or Word) 2. Print it out / copy to spreadsheet 3. Manually track who's doing what 4. Hunt through email for clarifications 5. Reply-all with attachments 6. No visibility into whether IB received/reviewed **Design toward this:** - Clear task inbox with filters (by workstream, priority, due date, assignee) - Progress bar per workstream: "Finance: 3/12 complete" - Real-time status: "Submitted → Under Review → Approved ✓" - Comments thread inline — no email back-and-forth - Mobile-friendly for on-the-go approvals ### 5.3 For the Buyer **The moment:** When they submit a question and the AI matches it to an existing answer instantly — no waiting, no IB intermediary, just immediate access to relevant documents. **Design toward this:** - Search bar prominent in data room - "Ask a question" that triggers AI matching - Instant match: "This might answer your question" with preview - If no match: "Your question has been submitted" with expected response time - Broadcast notification: "New answer matches your previous question" --- ## 6. Email Templates ### 6.1 IB Team Invite Email ``` From: Dealspace Reply-To: sarah.mitchell@gs.com To: mike.chen@gs.com Subject: Join Project Phoenix on Dealspace ─────────────────────────────────────────────────────────────────────── Hi Mike, Sarah Mitchell has invited you to join the deal team for Project Phoenix on Dealspace. Your Role: IB Member Workstreams: Finance, Tax [Accept Invitation] https://app.muskepo.com/invite/xyz789 This invitation expires in 7 days. ─────────────────────────────────────────────────────────────────────── Dealspace is Goldman Sachs' secure platform for managing M&A due diligence. If you have questions about this invitation, contact Sarah directly. ``` ### 6.2 Seller Invite Email ``` From: Project Phoenix via Dealspace Reply-To: sarah.mitchell@gs.com To: john.smith@techcorp.com Subject: You've been invited to Project Phoenix ─────────────────────────────────────────────────────────────────────── Hi John, Sarah Mitchell from Goldman Sachs has invited you to join the due diligence process for Project Phoenix. You've been assigned as Seller Admin, which means you can: • View and respond to all due diligence requests • Assign tasks to your colleagues • Track your team's progress across all workstreams [Accept Invitation] https://app.muskepo.com/invite/abc123 This invitation expires in 7 days. If you have questions, reply to this email to reach Sarah directly. ─────────────────────────────────────────────────────────────────────── What is Dealspace? Dealspace is a secure platform for managing M&A due diligence. All documents are encrypted and dynamically watermarked. You maintain full control over what gets shared and when. Need help? Contact support@muskepo.com ``` ### 6.3 New Tasks Notification ``` From: Project Phoenix via Dealspace To: john.smith@techcorp.com Subject: You have 6 new requests in Project Phoenix ─────────────────────────────────────────────────────────────────────── Hi John, Goldman Sachs has sent you 6 new requests for Project Phoenix. HIGH PRIORITY (3): • FIN-001: Audited financial statements FY2023-2024 — Due Mar 15 • FIN-005: Cash flow projections FY2025-2027 — Due Mar 20 • FIN-007: Debt schedule — Due Mar 18 NORMAL PRIORITY (3): • FIN-002: Revenue breakdown by product line — Due Mar 18 • FIN-006: Bank statements (all accounts) — Due Mar 22 • Plus 1 more [View Your Tasks] https://app.muskepo.com/app/tasks ─────────────────────────────────────────────────────────────────────── You're receiving this because you're assigned to requests in Project Phoenix. Manage notification preferences in your settings. ``` ### 6.4 Answer Submitted — Needs Vetting ``` From: Project Phoenix via Dealspace To: mike.chen@gs.com Subject: [Action Required] Answer submitted: FIN-001 Audited financials ─────────────────────────────────────────────────────────────────────── Hi Mike, John Smith from TechCorp has submitted an answer that needs your review. REQUEST: FIN-001 — Audited financial statements FY2023-2024 SUBMITTED: 2 files attached • TechCorp_Audited_Financials_2023.pdf (2.4 MB) • TechCorp_Audited_Financials_2024.pdf (2.8 MB) COMMENT FROM SELLER: "Attached are the audited financials for FY2023 and FY2024. The 2024 audit was completed last month. Let me know if you need the management letters as well." [Review & Approve] https://app.muskepo.com/app/review/ans_xyz123 ─────────────────────────────────────────────────────────────────────── Once approved, this answer will be published to the data room and visible to all authorized buyers. ``` ### 6.5 Answer Approved / Rejected (Seller Notification) **Approved:** ``` From: Project Phoenix via Dealspace To: john.smith@techcorp.com Subject: ✓ Answer approved: FIN-001 Audited financials ─────────────────────────────────────────────────────────────────────── Hi John, Your answer to FIN-001 has been approved and published to the data room. REQUEST: FIN-001 — Audited financial statements FY2023-2024 STATUS: ✓ Published to Data Room APPROVED BY: Mike Chen (Goldman Sachs) [View in Data Room] https://app.muskepo.com/app/dataroom/ans_xyz123 ─────────────────────────────────────────────────────────────────────── ``` **Rejected:** ``` From: Project Phoenix via Dealspace To: john.smith@techcorp.com Subject: ⚠ Revision requested: FIN-001 Audited financials ─────────────────────────────────────────────────────────────────────── Hi John, Your answer to FIN-001 requires revision before it can be published. REQUEST: FIN-001 — Audited financial statements FY2023-2024 STATUS: Revision Requested FEEDBACK FROM MIKE CHEN: "The 2024 financials are draft — we need the final audited version with the auditor's opinion letter. Please also include the management representation letters for both years." [Update Your Answer] https://app.muskepo.com/app/tasks/req_001 ─────────────────────────────────────────────────────────────────────── Reply to this request directly in Dealspace to keep the conversation in one place. ``` ### 6.6 New Answer Available in Data Room (Buyer Notification) ``` From: Project Phoenix via Dealspace To: analyst@buyside-pe.com Subject: New document available: Audited Financials ─────────────────────────────────────────────────────────────────────── A new document matching your interests is now available in the Project Phoenix data room. DOCUMENT: Audited Financial Statements FY2023-2024 CATEGORY: Finance ADDED: February 28, 2026 This document may be relevant to your previous question about "historical financial performance." [View in Data Room] https://app.muskepo.com/app/dataroom/ans_xyz123 ─────────────────────────────────────────────────────────────────────── You're receiving this because you requested information about financial statements. Manage notification preferences in settings. ``` --- ## 7. Empty States ### 7.1 IB Admin — No Projects ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ DEALSPACE Goldman Sachs | Sarah Mitchell ▼ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ │ ┌──────────────────────────┐ │ │ │ 📁 │ │ │ │ │ │ │ │ No projects yet │ │ │ │ │ │ │ │ Dealspace helps you │ │ │ │ run M&A due diligence │ │ │ │ 10x faster. │ │ │ │ │ │ │ │ [+ Create Your First │ │ │ │ Project] │ │ │ │ │ │ │ └──────────────────────────┘ │ │ │ │ ────────────────────────────────────────────────────────────────────── │ │ │ │ Or explore with sample data: │ │ [Load Demo Project] — See how a typical deal flows │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ### 7.2 Seller Member — Empty Task Inbox ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ DEALSPACE [Project Phoenix ▼] TechCorp | Mary ▼ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ MY TASKS │ │ │ │ ┌──────────────────────────┐ │ │ │ ✓ │ │ │ │ │ │ │ │ You're all caught up! │ │ │ │ │ │ │ │ No tasks assigned to │ │ │ │ you right now. │ │ │ │ │ │ │ └──────────────────────────┘ │ │ │ │ ────────────────────────────────────────────────────────────────────── │ │ │ │ Your completed tasks (3): │ │ • FIN-003: Accounts receivable aging — Approved ✓ │ │ • FIN-004: Accounts payable aging — Approved ✓ │ │ • FIN-008: Capital expenditure history — Under Review │ │ │ │ [View Completed Tasks] │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ### 7.3 Buyer — Empty Data Room ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ DEALSPACE [Project Phoenix ▼] Blackstone | James ▼ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ Data Room | My Questions │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ DATA ROOM 🔍 Search documents... │ │ │ │ ┌──────────────────────────┐ │ │ │ 📂 │ │ │ │ │ │ │ │ Data room is being │ │ │ │ prepared │ │ │ │ │ │ │ │ The sell-side team is │ │ │ │ gathering documents. │ │ │ │ We'll notify you when │ │ │ │ materials are ready. │ │ │ │ │ │ │ └──────────────────────────┘ │ │ │ │ ────────────────────────────────────────────────────────────────────── │ │ │ │ In the meantime: │ │ [Submit Questions] — Tell us what you're looking for │ │ [View Deal Summary] — Overview of Project Phoenix │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 8. Demo Data ### 8.1 Seed Script Concept ```go // cmd/seed/main.go // Run: go run ./cmd/seed --demo package main func seedDemoProject(db *sql.DB) { // 1. Create organizations gsOrg := createOrg("Goldman Sachs", "gs.com") techCorpOrg := createOrg("TechCorp Inc.", "techcorp.com") blackstoneOrg := createOrg("Blackstone", "blackstone.com") baincapOrg := createOrg("Bain Capital", "baincapital.com") // 2. Create users // Goldman Sachs (IB) sarahIB := createUser("sarah.mitchell@gs.com", "Sarah Mitchell", gsOrg, "ib_admin") mikeIB := createUser("mike.chen@gs.com", "Mike Chen", gsOrg, "ib_member") jenIB := createUser("jen.park@gs.com", "Jen Park", gsOrg, "ib_member") alexIB := createUser("alex.wong@gs.com", "Alex Wong", gsOrg, "ib_member") // TechCorp (Seller) johnSeller := createUser("john.smith@techcorp.com", "John Smith", techCorpOrg, "seller_admin") marySeller := createUser("mary.johnson@techcorp.com", "Mary Johnson", techCorpOrg, "seller_member") tomSeller := createUser("tom.wilson@techcorp.com", "Tom Wilson", techCorpOrg, "seller_member") lisaSeller := createUser("lisa.chen@techcorp.com", "Lisa Chen", techCorpOrg, "seller_member") // Buyers jamesBuyer := createUser("james.lee@blackstone.com", "James Lee", blackstoneOrg, "buyer_admin") emilaBuyer := createUser("emily.davis@baincapital.com", "Emily Davis", baincapOrg, "buyer_admin") // 3. Create project project := createProject(ProjectInput{ Name: "TechCorp Acquisition - Project Phoenix", CodeName: "Project Phoenix", DealType: "sell_side", SellerOrg: techCorpOrg, CreatedBy: sarahIB, }) // 4. Create workstreams financeWS := createWorkstream(project, "Finance", "finance") legalWS := createWorkstream(project, "Legal", "legal") itWS := createWorkstream(project, "IT", "it") // 5. Assign access // IB team grantAccess(sarahIB, project, nil, "ib_admin") grantAccess(mikeIB, project, financeWS, "ib_member") grantAccess(jenIB, project, legalWS, "ib_member") grantAccess(alexIB, project, itWS, "ib_member") // Seller team grantAccess(johnSeller, project, nil, "seller_admin") grantAccess(marySeller, project, financeWS, "seller_member") grantAccess(tomSeller, project, legalWS, "seller_member") grantAccess(lisaSeller, project, itWS, "seller_member") // Buyers (data room only) grantAccess(jamesBuyer, project, nil, "buyer_admin") grantAccess(emilaBuyer, project, nil, "buyer_admin") // 6. Create Finance request list financeRL := createRequestList(RequestListInput{ Name: "Initial Finance DD", Workstream: financeWS, CreatedBy: mikeIB, DefaultDue: time.Now().Add(14 * 24 * time.Hour), }) // Finance requests (mix of statuses for realism) createRequest(financeRL, RequestInput{ Ref: "FIN-001", Title: "Audited financial statements FY2023-2024", Priority: "high", AssignedTo: johnSeller, Status: "published", // Already in data room }) createRequest(financeRL, RequestInput{ Ref: "FIN-002", Title: "Revenue breakdown by product line", Priority: "normal", AssignedTo: marySeller, Status: "vetted", // Approved, pending publish }) createRequest(financeRL, RequestInput{ Ref: "FIN-003", Title: "Accounts receivable aging report", Priority: "normal", AssignedTo: marySeller, Status: "submitted", // Awaiting IB review }) createRequest(financeRL, RequestInput{ Ref: "FIN-004", Title: "Accounts payable aging report", Priority: "normal", AssignedTo: marySeller, Status: "assigned", // Seller working on it }) createRequest(financeRL, RequestInput{ Ref: "FIN-005", Title: "Cash flow projections FY2025-2027", Priority: "high", AssignedTo: johnSeller, Status: "open", // Not started }) // 7. Create Legal request list legalRL := createRequestList(RequestListInput{ Name: "Legal DD - Contracts & IP", Workstream: legalWS, CreatedBy: jenIB, }) createRequest(legalRL, RequestInput{ Ref: "LEG-001", Title: "Material contracts list", Priority: "high", AssignedTo: tomSeller, Status: "submitted", }) createRequest(legalRL, RequestInput{ Ref: "LEG-002", Title: "Customer contracts (top 10 by revenue)", Priority: "high", AssignedTo: tomSeller, Status: "assigned", }) createRequest(legalRL, RequestInput{ Ref: "LEG-003", Title: "IP portfolio summary", Priority: "normal", AssignedTo: tomSeller, Status: "open", }) createRequest(legalRL, RequestInput{ Ref: "LEG-004", Title: "Pending litigation summary", Priority: "high", AssignedTo: tomSeller, Status: "open", }) // 8. Create IT request list itRL := createRequestList(RequestListInput{ Name: "IT Infrastructure & Security", Workstream: itWS, CreatedBy: alexIB, }) createRequest(itRL, RequestInput{ Ref: "IT-001", Title: "System architecture diagram", Priority: "high", AssignedTo: lisaSeller, Status: "published", }) createRequest(itRL, RequestInput{ Ref: "IT-002", Title: "Cloud infrastructure costs", Priority: "normal", AssignedTo: lisaSeller, Status: "submitted", }) createRequest(itRL, RequestInput{ Ref: "IT-003", Title: "Security audit report (SOC2)", Priority: "high", AssignedTo: lisaSeller, Status: "assigned", }) // 9. Create sample answers for published requests createAnswer(AnswerInput{ RequestRef: "FIN-001", Title: "Audited Financial Statements FY2023-2024", Files: []string{"TechCorp_Audited_FY2023.pdf", "TechCorp_Audited_FY2024.pdf"}, SubmittedBy: johnSeller, ApprovedBy: mikeIB, Status: "published", }) createAnswer(AnswerInput{ RequestRef: "IT-001", Title: "TechCorp System Architecture", Files: []string{"TechCorp_Architecture_2026.pdf"}, SubmittedBy: lisaSeller, ApprovedBy: alexIB, Status: "published", }) // 10. Create sample buyer questions createBuyerQuestion(BuyerQuestionInput{ Workstream: financeWS, AskedBy: jamesBuyer, Question: "Can you provide customer concentration analysis?", Status: "pending", // No match, routed to IB }) createBuyerQuestion(BuyerQuestionInput{ Workstream: itWS, AskedBy: emilaBuyer, Question: "What's the tech stack?", Status: "matched", // AI matched to IT-001 MatchedTo: "IT-001", }) // 11. Create activity events for timeline createEvent(project, "Sarah Mitchell created Project Phoenix", sarahIB, -7*24*time.Hour) createEvent(project, "Initial Finance DD requests sent to TechCorp (12 items)", mikeIB, -6*24*time.Hour) createEvent(project, "John Smith accepted invitation", johnSeller, -5*24*time.Hour) createEvent(project, "FIN-001 submitted by John Smith", johnSeller, -3*24*time.Hour) createEvent(project, "FIN-001 approved and published to data room", mikeIB, -2*24*time.Hour) createEvent(project, "Blackstone joined as buyer", jamesBuyer, -1*24*time.Hour) createEvent(project, "Bain Capital joined as buyer", emilaBuyer, -12*time.Hour) } ``` ### 8.2 Demo Login Credentials | Role | Email | Password | What they see | |------|-------|----------|---------------| | IB Admin | sarah.mitchell@gs.com | Demo2026! | Full project dashboard, all workstreams | | IB Member | mike.chen@gs.com | Demo2026! | Finance workstream, vetting queue | | Seller Admin | john.smith@techcorp.com | Demo2026! | Task inbox with 12 requests | | Seller Member | mary.johnson@techcorp.com | Demo2026! | Task inbox with 4 Finance requests | | Buyer Admin | james.lee@blackstone.com | Demo2026! | Data room with 2 published docs | ### 8.3 Demo Scenario Flow **For a live demo, walk through this sequence:** 1. **Login as Sarah (IB Admin)** — Show project overview, team status, request progress 2. **Switch to Mike (IB Member)** — Show vetting queue, approve FIN-003, publish to data room 3. **Switch to John (Seller Admin)** — Show task inbox, respond to FIN-004 4. **Switch to James (Buyer)** — Show data room, new document notification, ask a question 5. **Back to Mike** — Show buyer question routed, AI match suggestion **Demo data realism:** - Mix of statuses (open → assigned → submitted → vetted → published) - Some high-priority items - Some overdue items (creates urgency) - Comment threads on submitted items - Activity timeline with realistic timestamps --- ## 9. Implementation Notes ### 9.1 API Endpoints Required ``` POST /api/register — Account creation POST /api/verify — Email verification POST /api/mfa/setup — Start MFA enrollment POST /api/mfa/verify — Complete MFA enrollment POST /api/login — Authenticate POST /api/invitations/accept — Accept invitation POST /api/projects — Create project (wizard) POST /api/projects/:id/invites — Send invitations POST /api/projects/:id/requests/import — Excel import GET /api/tasks — My task inbox PATCH /api/requests/:id — Update request status POST /api/answers — Submit answer PATCH /api/answers/:id/approve — Approve answer PATCH /api/answers/:id/reject — Reject answer ``` ### 9.2 Email Service - Use SendGrid or AWS SES - All emails from: `noreply@muskepo.com` - Reply-To: set to inviting user's email - Unsubscribe links required (CAN-SPAM compliance) - Track open/click rates for onboarding optimization ### 9.3 Metrics to Track **Onboarding funnel:** - Registration → Email Verified (%) - Email Verified → MFA Complete (%) - MFA Complete → First Project Created (%) - First Project → First Request List (%) - First Request → First Seller Response (time) **Activation:** - Time to first request list created - Time to first seller login - Time to first answer submitted - Time to first data room publication --- *This document defines the complete first-run experience. Implementation should follow these flows exactly — deviations require spec update first.*