diff --git a/api/routes.go b/api/routes.go index 0e44ac8..b1d446f 100644 --- a/api/routes.go +++ b/api/routes.go @@ -47,7 +47,8 @@ func NewRouter(db *lib.DB, cfg *lib.Config, store lib.ObjectStore, websiteFS fs. // Projects r.Get("/projects", h.GetAllProjects) r.Post("/projects", h.CreateProject) - r.Get("/projects/{projectID}/detail", h.GetProjectDetail) + r.Get("/projects/{projectID}", h.GetProjectDetail) + r.Get("/projects/{projectID}/detail", h.GetProjectDetail) // legacy alias // Workstreams r.Post("/projects/{projectID}/workstreams", h.CreateWorkstream) diff --git a/cmd/server/website/chat.css b/cmd/server/website/chat.css deleted file mode 100644 index ced8dc0..0000000 --- a/cmd/server/website/chat.css +++ /dev/null @@ -1,286 +0,0 @@ -/* Aria Chat Widget Styles */ -#aria-chat-button { - position: fixed; - bottom: 24px; - right: 24px; - width: 60px; - height: 60px; - border-radius: 50%; - background: #0F1B35; - border: 2px solid #C9A84C; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); - transition: transform 0.2s ease, box-shadow 0.2s ease; - z-index: 9999; -} - -#aria-chat-button:hover { - transform: scale(1.05); - box-shadow: 0 6px 24px rgba(0, 0, 0, 0.4); -} - -#aria-chat-button svg { - width: 28px; - height: 28px; - fill: white; -} - -#aria-chat-panel { - position: fixed; - bottom: 100px; - right: 24px; - width: 380px; - height: 520px; - background: #0F1B35; - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 16px; - box-shadow: 0 10px 40px rgba(0, 0, 0, 0.4); - display: none; - flex-direction: column; - overflow: hidden; - z-index: 9998; - font-family: 'Inter', system-ui, sans-serif; -} - -#aria-chat-panel.open { - display: flex; - animation: slideUp 0.3s ease; -} - -@keyframes slideUp { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -#aria-chat-header { - background: #1a2847; - padding: 16px; - display: flex; - align-items: center; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); -} - -#aria-avatar { - width: 40px; - height: 40px; - border-radius: 50%; - background: linear-gradient(135deg, #C9A84C 0%, #d4b85f 100%); - display: flex; - align-items: center; - justify-content: center; - margin-right: 12px; - flex-shrink: 0; -} - -#aria-avatar span { - color: #0F1B35; - font-size: 18px; - font-weight: 700; -} - -#aria-header-text { - flex: 1; -} - -#aria-header-text h3 { - margin: 0; - font-size: 16px; - font-weight: 600; - color: white; -} - -#aria-header-text p { - margin: 2px 0 0; - font-size: 12px; - color: #9CA3AF; -} - -#aria-close-btn { - background: none; - border: none; - color: #9CA3AF; - font-size: 24px; - cursor: pointer; - padding: 4px; - line-height: 1; - transition: color 0.2s; -} - -#aria-close-btn:hover { - color: white; -} - -#aria-chat-messages { - flex: 1; - overflow-y: auto; - padding: 16px; - display: flex; - flex-direction: column; - gap: 12px; -} - -.aria-message { - max-width: 85%; - padding: 12px 16px; - border-radius: 16px; - font-size: 14px; - line-height: 1.5; - animation: fadeIn 0.2s ease; -} - -@keyframes fadeIn { - from { opacity: 0; } - to { opacity: 1; } -} - -.aria-message.user { - background: #2B4680; - color: white; - align-self: flex-end; - border-bottom-right-radius: 4px; -} - -.aria-message.assistant { - background: #1a2847; - color: #E5E7EB; - align-self: flex-start; - border-bottom-left-radius: 4px; -} - -.aria-typing { - display: flex; - gap: 4px; - padding: 12px 16px; - background: #1a2847; - border-radius: 16px; - border-bottom-left-radius: 4px; - align-self: flex-start; -} - -.aria-typing span { - width: 8px; - height: 8px; - background: #C9A84C; - border-radius: 50%; - animation: typing 1.4s infinite; -} - -.aria-typing span:nth-child(2) { - animation-delay: 0.2s; -} - -.aria-typing span:nth-child(3) { - animation-delay: 0.4s; -} - -@keyframes typing { - 0%, 60%, 100% { - transform: translateY(0); - opacity: 0.4; - } - 30% { - transform: translateY(-4px); - opacity: 1; - } -} - -#aria-chat-input { - padding: 16px; - border-top: 1px solid rgba(255, 255, 255, 0.1); - display: flex; - gap: 12px; - background: #1a2847; -} - -#aria-message-input { - flex: 1; - background: #0F1B35; - border: 1px solid rgba(255, 255, 255, 0.2); - border-radius: 8px; - padding: 12px 16px; - color: white; - font-size: 14px; - font-family: inherit; - outline: none; - transition: border-color 0.2s; -} - -#aria-message-input::placeholder { - color: #6B7280; -} - -#aria-message-input:focus { - border-color: #C9A84C; -} - -#aria-send-btn { - background: #C9A84C; - border: none; - border-radius: 8px; - padding: 12px 16px; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - transition: background 0.2s; -} - -#aria-send-btn:hover { - background: #d4b85f; -} - -#aria-send-btn:disabled { - background: #4B5563; - cursor: not-allowed; -} - -#aria-send-btn svg { - width: 20px; - height: 20px; - fill: #0F1B35; -} - -/* Mobile responsive */ -@media (max-width: 480px) { - #aria-chat-panel { - width: calc(100% - 32px); - right: 16px; - bottom: 90px; - height: 60vh; - max-height: 500px; - } - - #aria-chat-button { - bottom: 16px; - right: 16px; - width: 56px; - height: 56px; - } -} - -/* Scrollbar styling */ -#aria-chat-messages::-webkit-scrollbar { - width: 6px; -} - -#aria-chat-messages::-webkit-scrollbar-track { - background: transparent; -} - -#aria-chat-messages::-webkit-scrollbar-thumb { - background: #2B4680; - border-radius: 3px; -} - -#aria-chat-messages::-webkit-scrollbar-thumb:hover { - background: #3B5998; -} diff --git a/cmd/server/website/chat.js b/cmd/server/website/chat.js deleted file mode 100644 index f781d49..0000000 --- a/cmd/server/website/chat.js +++ /dev/null @@ -1,180 +0,0 @@ -// Aria Chat Widget - Dealspace Product Assistant -(function() { - 'use strict'; - - // Generate or retrieve session ID - function getSessionId() { - let sessionId = sessionStorage.getItem('aria_session_id'); - if (!sessionId) { - sessionId = 'aria_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9); - sessionStorage.setItem('aria_session_id', sessionId); - } - return sessionId; - } - - // Chat state - const state = { - isOpen: false, - isLoading: false, - history: [], - sessionId: getSessionId() - }; - - // Create chat widget HTML - function createWidget() { - // Chat button - const button = document.createElement('button'); - button.id = 'aria-chat-button'; - button.setAttribute('aria-label', 'Open chat with Aria'); - button.innerHTML = ` - - - - `; - - // Chat panel - const panel = document.createElement('div'); - panel.id = 'aria-chat-panel'; - panel.innerHTML = ` -
-
A
-
-

Aria

-

Dealspace Assistant

-
- -
-
-
- - -
- `; - - document.body.appendChild(button); - document.body.appendChild(panel); - - // Event listeners - button.addEventListener('click', toggleChat); - document.getElementById('aria-close-btn').addEventListener('click', toggleChat); - document.getElementById('aria-send-btn').addEventListener('click', sendMessage); - document.getElementById('aria-message-input').addEventListener('keypress', function(e) { - if (e.key === 'Enter' && !e.shiftKey) { - e.preventDefault(); - sendMessage(); - } - }); - } - - function toggleChat() { - const panel = document.getElementById('aria-chat-panel'); - state.isOpen = !state.isOpen; - - if (state.isOpen) { - panel.classList.add('open'); - // Show welcome message if no history - if (state.history.length === 0) { - addMessage("Hi, I'm Aria! I can answer questions about Dealspace — features, pricing, security, or how it works. What would you like to know?", 'assistant'); - } - document.getElementById('aria-message-input').focus(); - } else { - panel.classList.remove('open'); - } - } - - function addMessage(content, role) { - const messagesContainer = document.getElementById('aria-chat-messages'); - const messageDiv = document.createElement('div'); - messageDiv.className = 'aria-message ' + role; - messageDiv.textContent = content; - messagesContainer.appendChild(messageDiv); - messagesContainer.scrollTop = messagesContainer.scrollHeight; - - // Store in history (exclude welcome message) - if (role !== 'assistant' || state.history.length > 0 || content !== "Hi, I'm Aria! I can answer questions about Dealspace — features, pricing, security, or how it works. What would you like to know?") { - state.history.push({ role: role, content: content }); - // Keep only last 6 messages - if (state.history.length > 6) { - state.history = state.history.slice(-6); - } - } - } - - function showTyping() { - const messagesContainer = document.getElementById('aria-chat-messages'); - const typingDiv = document.createElement('div'); - typingDiv.id = 'aria-typing-indicator'; - typingDiv.className = 'aria-typing'; - typingDiv.innerHTML = ''; - messagesContainer.appendChild(typingDiv); - messagesContainer.scrollTop = messagesContainer.scrollHeight; - } - - function hideTyping() { - const typingIndicator = document.getElementById('aria-typing-indicator'); - if (typingIndicator) { - typingIndicator.remove(); - } - } - - async function sendMessage() { - const input = document.getElementById('aria-message-input'); - const sendBtn = document.getElementById('aria-send-btn'); - const message = input.value.trim(); - - if (!message || state.isLoading) return; - - // Add user message - addMessage(message, 'user'); - input.value = ''; - - // Show loading state - state.isLoading = true; - sendBtn.disabled = true; - showTyping(); - - try { - const response = await fetch('/api/chat', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - session_id: state.sessionId, - message: message, - history: state.history.slice(0, -1) // Exclude the message we just added - }) - }); - - hideTyping(); - - if (!response.ok) { - const error = await response.json(); - throw new Error(error.error || 'Something went wrong'); - } - - const data = await response.json(); - addMessage(data.reply, 'assistant'); - - } catch (error) { - hideTyping(); - console.error('Chat error:', error); - addMessage("Sorry, I'm having trouble connecting. Please try again in a moment.", 'assistant'); - } finally { - state.isLoading = false; - sendBtn.disabled = false; - input.focus(); - } - } - - // Initialize when DOM is ready - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', createWidget); - } else { - createWidget(); - } -})(); diff --git a/cmd/server/website/dpa.html b/cmd/server/website/dpa.html deleted file mode 100644 index c576f17..0000000 --- a/cmd/server/website/dpa.html +++ /dev/null @@ -1,376 +0,0 @@ - - - - - - Data Processing Agreement — Dealspace - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-

Data Processing Agreement

-

Last updated: February 28, 2026

-
- -
- -
-

- This Data Processing Agreement ("DPA") forms part of the Terms of Service between you ("Controller") and Muskepo B.V. ("Processor") for the provision of Dealspace services. This DPA governs the processing of personal data in accordance with GDPR Article 28 and other applicable data protection laws. -

-
- -
-

1. Definitions

- -

- "Personal Data" means any information relating to an identified or identifiable natural person, as defined in GDPR Article 4(1). -

-

- "Processing" means any operation performed on Personal Data, as defined in GDPR Article 4(2). -

-

- "Sub-processor" means any third party engaged by the Processor to process Personal Data on behalf of the Controller. -

-

- "Data Subjects" means the individuals whose Personal Data is processed under this DPA. -

-

- "Confidential M&A Transaction Data" means all documents, communications, and information uploaded to or generated within Dealspace in connection with mergers, acquisitions, due diligence, or related transactions. -

-
- -
-

2. Scope of Processing

- -

2.1 Subject Matter

-

- The Processor processes Personal Data to provide Dealspace services including document storage, access management, request workflow, communication facilitation, and audit logging for M&A transactions. -

- -

2.2 Nature and Purpose

-

- Processing includes storage, retrieval, transmission, encryption, watermarking, and deletion of Personal Data as necessary to provide the services described in the Terms of Service. -

- -

2.3 Categories of Data Subjects

-
    -
  • Account holders and authorized users
  • -
  • Deal participants (sellers, buyers, advisors, and their personnel)
  • -
  • Individuals whose data is contained in uploaded documents
  • -
- -

2.4 Types of Personal Data

-
    -
  • Contact information (name, email, phone, organization)
  • -
  • Account credentials and authentication data
  • -
  • Activity logs (access times, IP addresses, actions taken)
  • -
  • Personal data contained in uploaded M&A transaction documents
  • -
- -

2.5 Duration

-

- Processing continues for the duration of the service agreement plus any retention period required by law or agreed with the Controller. -

-
- -
-

3. Processor Obligations

- -

3.1 Processing Instructions

-

- The Processor shall process Personal Data only on documented instructions from the Controller, including transfers to third countries, unless required by EU or Member State law. The Processor shall inform the Controller of any such legal requirement before processing, unless prohibited by law. -

- -

3.2 Confidentiality

-

- The Processor shall ensure that persons authorized to process Personal Data have committed to confidentiality or are under an appropriate statutory obligation of confidentiality. -

- -

3.3 Security Measures

-

- The Processor implements technical and organizational measures to ensure a level of security appropriate to the risk, including: -

-
    -
  • FIPS 140-3 validated encryption of Personal Data at rest and in transit
  • -
  • Per-deal encryption keys with secure key management
  • -
  • Multi-factor authentication for all system access
  • -
  • Role-based access controls with least-privilege principles
  • -
  • Continuous monitoring and intrusion detection
  • -
  • Regular security assessments and penetration testing
  • -
  • Incident response procedures
  • -
  • Business continuity and disaster recovery capabilities
  • -
- -

3.4 Sub-processing

-

- The Processor shall not engage Sub-processors without prior specific or general written authorization from the Controller. In the case of general authorization, the Processor shall inform the Controller of any intended changes concerning the addition or replacement of Sub-processors, giving the Controller an opportunity to object. Sub-processors are bound by equivalent data protection obligations. -

- -

3.5 Data Subject Rights

-

- The Processor shall assist the Controller in responding to requests from Data Subjects exercising their rights under GDPR (access, rectification, erasure, restriction, portability, and objection). The Processor shall promptly notify the Controller of any such requests received directly. -

- -

3.6 Data Protection Impact Assessments

-

- The Processor shall assist the Controller in conducting data protection impact assessments and prior consultations with supervisory authorities where required. -

- -

3.7 Deletion and Return

-

- Upon termination of the service, the Processor shall, at the Controller's choice, delete or return all Personal Data and delete existing copies, unless EU or Member State law requires storage. The Controller has 30 days following termination to export data before deletion. -

- -

3.8 Audit Rights

-

- The Processor shall make available to the Controller all information necessary to demonstrate compliance with GDPR Article 28 and allow for and contribute to audits, including inspections, conducted by the Controller or an auditor mandated by the Controller. For Enterprise customers, specific audit procedures and schedules may be agreed in writing. -

-
- -
-

4. Controller Obligations

- -

The Controller warrants that:

-
    -
  • It has a lawful basis for processing Personal Data and transferring it to the Processor
  • -
  • Data Subjects have been informed of the processing in accordance with GDPR requirements
  • -
  • Instructions given to the Processor comply with applicable data protection laws
  • -
  • It will promptly notify the Processor of any changes to processing instructions
  • -
-
- -
-

5. Data Breach Notification

- -

- In the event of a Personal Data breach, the Processor shall notify the Controller without undue delay and in any event within 48 hours of becoming aware of the breach. The notification shall include: -

-
    -
  • Description of the nature of the breach
  • -
  • Categories and approximate number of Data Subjects affected
  • -
  • Categories and approximate number of records concerned
  • -
  • Likely consequences of the breach
  • -
  • Measures taken or proposed to address the breach
  • -
-

- The Processor shall cooperate with the Controller in investigating and remediating the breach and in meeting notification obligations to supervisory authorities and Data Subjects. -

-
- -
-

6. International Transfers

- -

- The Processor may transfer Personal Data outside the European Economic Area only where appropriate safeguards are in place, including: -

-
    -
  • Standard Contractual Clauses approved by the European Commission
  • -
  • Binding Corporate Rules approved by a supervisory authority
  • -
  • Adequacy decisions by the European Commission
  • -
  • Other mechanisms permitted under GDPR Chapter V
  • -
-

- The current list of data processing locations and applicable transfer mechanisms is available upon request. -

-
- -
-

7. Sub-processors

- -

- The Controller grants general authorization for the use of Sub-processors subject to the requirements of Section 3.4. Current Sub-processors include: -

- -
- - - - - - - - - - - - - - - - - - - - - - - - - -
Sub-processorPurposeLocation
Infrastructure ProviderCloud infrastructureEU / US
Stripe, Inc.Payment processingUS
AI Embedding ProviderDocument matching (zero retention)US
-
- -

- The Controller will be notified of Sub-processor changes via email at least 30 days in advance, with the opportunity to object. -

-
- -
-

8. Certifications and Compliance

- -

- The Processor maintains the following certifications and compliance measures: -

-
    -
  • SOC 2 Type II — Annual audit of security, availability, and confidentiality controls
  • -
  • ISO 27001 — Information Security Management System certification
  • -
  • FIPS 140-3 — Use of validated cryptographic modules for encryption
  • -
  • GDPR — Compliance with EU General Data Protection Regulation
  • -
-

- Copies of relevant certifications and audit reports are available to Enterprise customers under NDA. -

-
- -
-

9. Liability

- -

- Liability under this DPA is governed by the limitation of liability provisions in the Terms of Service. Each party shall be liable for damages caused by processing that infringes GDPR or this DPA to the extent provided by applicable law. -

-
- -
-

10. Term and Termination

- -

- This DPA is effective from the date the Controller begins using Dealspace and continues until termination of all service agreements. Sections that by their nature should survive termination will survive, including data deletion, audit rights, and confidentiality obligations. -

-
- -
-

11. Governing Law

- -

- This DPA is governed by the laws of the Netherlands. The competent courts of Amsterdam have exclusive jurisdiction over disputes arising from this DPA. -

-
- -
-

Contact

- -

- Data Protection Officer:
- privacy@dealspace.io -

- -

- For Enterprise customers requiring executed DPAs or custom terms, contact legal@dealspace.io. -

-
- -
-
-
- - - - - - - - diff --git a/cmd/server/website/features.html b/cmd/server/website/features.html deleted file mode 100644 index 70e3508..0000000 --- a/cmd/server/website/features.html +++ /dev/null @@ -1,604 +0,0 @@ - - - - - - Features — Dealspace - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

- Features Built for Real Deals -

-

- Not another document repository with features bolted on. Dealspace is designed from first principles for how M&A transactions actually work. -

-
-
- - -
-
-
-
-
Core Architecture
-

Request-Centric Workflow

-

- Traditional VDRs are document-centric — you upload files into folders and hope people find them. Dealspace flips the model: the Request is the unit of work. -

-
    -
  • - - - -
    - Structured request lists -

    Issue specific, trackable requests to the seller. No ambiguity about what's needed.

    -
    -
  • -
  • - - - -
    - Status at a glance -

    Open, assigned, answered, vetted, published. Know exactly where every request stands.

    -
    -
  • -
  • - - - -
    - Threaded communication -

    Every request has a complete thread — comments, clarifications, status changes. Full context, always.

    -
    -
  • -
-
-
- - - - - - - - - - - - - - - - - - - Request List — Project Alpha - - - - - - - FIN-001: Audited financials FY2024 - Published · 3 documents - - PUBLISHED - - - - - - ! - FIN-002: Revenue breakdown by segment - Pending review · Uploaded 2h ago - - REVIEW - - - - - - - FIN-003: Cap table and equity structure - Assigned to CFO · Due Mar 15 - - ASSIGNED - - - - - - FIN-004: Debt schedule and covenants - Open · High priority - - OPEN - - -
-
-
-
- - -
-
-
-
- - - - - - - - - - - - Dealspace - - - - - IB Admin - Full access - - - - - - - Accountant - 3 tasks - - - - - - - CFO - Finance - - - - - - - GC - Legal - - - - - - - Buyer - Data room - - - - - - - 3 - - - - 12 - - - - 8 - - -
-
-
Access Control
-

Role-Based Simplicity

-

- Most users are workers, not deal managers. When the accountant logs in, they see their task inbox — not a deal room, not workstream dashboards. Just: what do I need to do today. -

-
    -
  • - - - -
    - Workstream-based access -

    Finance team sees Finance. Legal sees Legal. No information overload.

    -
    -
  • -
  • - - - -
    - Task inbox for contributors -

    Assignees see only their tasks. Complete one, it routes to the next person automatically.

    -
    -
  • -
  • - - - -
    - Data room separation -

    Buyers only see published answers. Internal routing is invisible to external parties.

    -
    -
  • -
-
-
-
-
- - -
-
-
-
-
Intelligence
-

AI Matching with Human Confirmation

-

- When a buyer submits a question, AI searches for existing answers. Match found? Human confirms, answer broadcasts to everyone who asked the same thing. One answer, many recipients. -

-
    -
  • - - - -
    - Semantic search -

    Not just keyword matching. AI understands that "revenue breakdown" and "sales by segment" are the same question.

    -
    -
  • -
  • - - - -
    - Human in the loop -

    AI suggests, human confirms. No answer goes out without explicit approval.

    -
    -
  • -
  • - - - -
    - Zero retention -

    Deal data never trains AI models. Private data stays private.

    -
    -
  • -
-
-
- - - - - - Buyer A asks: - "Revenue by segment?" - - - - Buyer B asks: - "Sales breakdown?" - - - - Buyer C asks: - "Segment performance?" - - - - - - - - - - AI Matching - 87% match - → FIN-002 - - - - Confirm - - - - FIN-002 - Revenue breakdown - Published · 2 documents - - - - - - - - - - - → Buyer A - → Buyer B - → Buyer C - -
-
-
-
- - -
-
-
-
- - - - - Dealspace - Central Hub - - - - Email - Reply inline - - - - - Slack - Threaded updates - - - - - Teams - Direct messages - - - - - Web App - Full access - - - - - Mobile - On the go - - - - - API - Integrations - - -
-
-
Integrations
-

Work Where You Already Work

-

- Not everyone needs to log into another platform. Participants can respond via email, Slack, or Teams. Requests route to people wherever they are. -

-
    -
  • - - - -
    - Email replies -

    Reply to request notifications directly from your inbox. Attachments included.

    -
    -
  • -
  • - - - -
    - Slack/Teams threads -

    Get notified in your existing channels. Respond without context switching.

    -
    -
  • -
  • - - - -
    - No login required -

    Basic responses work without an account. Full features available in the web app.

    -
    -
  • -
-
-
-
-
- - -
-
-
-
Compliance
-

Complete Audit Trail

-

- Every access, every download, every routing hop — logged. When compliance asks "who saw what when," you have the answer. -

-
- -
-
-
- - - - -
-

Access Logs

-

Who viewed which document, when, and from where. IP addresses, timestamps, duration.

-
- -
-
- - - -
-

Download Tracking

-

Every file download recorded. Watermarked with user identity for leak tracing.

-
- -
-
- - - -
-

Workflow History

-

Full chain of custody. Who assigned, who approved, who published — every transition logged.

-
-
-
-
- - -
-
-

See It In Action

-

- 30-minute demo. See how Dealspace transforms M&A workflow. -

- - Request a Demo - -
-
- - - - - - - - diff --git a/cmd/server/website/index.html b/cmd/server/website/index.html deleted file mode 100644 index a156ab1..0000000 --- a/cmd/server/website/index.html +++ /dev/null @@ -1,570 +0,0 @@ - - - - - - Dealspace — M&A Deal Workflow Platform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-

- The Request is the
Unit of Work -

-

- Dealspace is the M&A workflow platform that Investment Banks trust. Request-centric. Role-based simplicity. Real security. No per-MB extortion. -

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IB - - - - CFO - Seller - - - - Legal - Seller - - - - PE Firm - - - - Strategic - - - - Family Office - - - - 3 - - - - 5 - - -
-
-
-
- - -
-
-

Trusted by leading investment banks and advisors

-
-
Goldman Sachs
-
Morgan Stanley
-
Lazard
-
Moelis
-
Evercore
-
-
-
- - -
-
-
-

Traditional VDRs Are Broken

-

- Document-centric platforms bury your team in folders. Dealspace flips the model: the Request is the unit of work. Your accountant sees their 3 tasks — not the entire deal room. -

-
- -
-
-
-
- - - -
-

The Old Way

-
-
    -
  • - - - - 500-folder hierarchies nobody can navigate -
  • -
  • - - - - Everyone sees everything — chaos -
  • -
  • - - - - $20/MB "secure storage" extortion -
  • -
  • - - - - Same question asked 50 times by different buyers -
  • -
-
- -
-
-
- - - -
-

The Dealspace Way

-
-
    -
  • - - - - Request inbox — see only what you need to do -
  • -
  • - - - - Role-based access — automatic, not configured -
  • -
  • - - - - Fair pricing — storage at actual cost -
  • -
  • - - - - AI matching — answer once, broadcast to all -
  • -
-
-
-
-
- - -
-
-
-

Built for How Deals Actually Work

-

- Not another document repository with features bolted on. Designed from first principles for M&A workflow. -

-
- -
-
-
- - - -
-

Request-Centric Workflow

-

The Request is the unit of work. Every question, every answer, every status update — tracked, routed, and resolved.

-
- -
-
- - - -
-

Role-Based Simplicity

-

Your accountant sees their 3 tasks. Your CFO sees the big picture. Same platform, different experience.

-
- -
-
- - - -
-

AI Matching

-

Buyer question matches existing answer? AI suggests it. Human confirms. One answer broadcasts to all who asked.

-
- -
-
- - - -
-

Real Security

-

FIPS 140-3 crypto. Per-deal encryption keys. Dynamic watermarks on every document. Full audit trail.

-
- -
-
- - - -
-

Work Where You Are

-

Email, Slack, Teams — participants work in their existing tools. No login required for basic responses.

-
- -
-
- - - -
-

Complete Audit Trail

-

Every access, every download, every routing hop — logged. Your compliance team will thank you.

-
-
-
-
- - -
-
-
-

How It Works

-

- From request list to data room — a clear workflow that keeps everyone on track. -

-
- -
- - -
-
-
-
- 1 -
-

IB Creates Request List

-
-

Configure workstreams, invite participants, issue structured requests to the seller.

-
-
-
-
- 2 -
-

Seller Responds

-
-

Internal routing to the right people. Upload documents. Mark complete.

-
-
-
-
- 3 -
-

IB Vets & Approves

-
-

Quality control. Approve to publish, reject with feedback. Full control.

-
-
-
-
- 4 -
-

Buyers Access Data Room

-
-

Submit questions, AI matches to existing answers, unmatched routes for resolution.

-
-
-
-
-
- - -
-
-

Fair Pricing. No Surprises.

-

- Competitors charge $20/MB for "secure storage." We charge for the platform, not your data. Storage at actual cost. -

- -
-
-

Starter

-
$2,500/mo
-

Perfect for boutique advisors running smaller transactions.

- View details → -
-
-
POPULAR
-

Professional

-
$7,500/mo
-

For mid-market deals with AI matching and unlimited participants.

- View details → -
-
-

Enterprise

-
Custom
-

For bulge bracket banks. SSO, custom SLA, dedicated support.

- Contact sales → -
-
-
-
- - -
-
-

Ready to Simplify Your Deals?

-

- See how Dealspace transforms M&A workflow. 30-minute demo, no commitment. -

- -
-
- - -
-

No spam. We will reach out within one business day.

-
-
-
- - - - - - - - diff --git a/cmd/server/website/llms.txt b/cmd/server/website/llms.txt deleted file mode 100644 index 8c24a1b..0000000 --- a/cmd/server/website/llms.txt +++ /dev/null @@ -1,21 +0,0 @@ -# Dealspace -> AI-native M&A deal workflow platform for investment banks and advisors. - -Dealspace is a secure, encrypted deal management platform for M&A transactions. Investment banks use it to manage due diligence data rooms, track requests across workstreams, and collaborate with sell-side and buy-side parties. All data is encrypted end-to-end with per-project keys. - -## Features -- Secure virtual data room with watermarked document serving -- Request tracking across workstreams (Finance, Legal, IT, Operations) -- Role-based access: IB advisor, seller, buyer, analyst -- FIPS 140-3 encryption (AES-256-GCM, HKDF-SHA256) -- AI document matching (coming v1.1) -- MCP server for agent integration (coming v2.0) - -## Contact -- Waitlist: https://muskepo.com/#waitlist -- Pricing: https://muskepo.com/pricing -- Security: https://muskepo.com/security -- Privacy: https://muskepo.com/privacy - -## Optional -- API docs: https://muskepo.com/api (coming soon) diff --git a/cmd/server/website/mcp-manifest.json b/cmd/server/website/mcp-manifest.json deleted file mode 100644 index 31e56e1..0000000 --- a/cmd/server/website/mcp-manifest.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "schema_version": "1.0", - "name": "Dealspace", - "description": "M&A deal workflow platform", - "tools": [ - { - "name": "join_waitlist", - "description": "Join the Dealspace early access waitlist", - "input_schema": { - "type": "object", - "properties": { - "email": {"type": "string", "description": "Work email address"}, - "company": {"type": "string", "description": "Company or firm name"}, - "role": {"type": "string", "description": "Job title or role"} - }, - "required": ["email"] - } - }, - { - "name": "get_pricing", - "description": "Get Dealspace pricing information", - "returns": "Pricing tiers and details" - }, - { - "name": "get_security_info", - "description": "Get security and compliance information", - "returns": "FIPS 140-3 compliance, encryption details, audit capabilities" - } - ] -} diff --git a/cmd/server/website/pricing.html b/cmd/server/website/pricing.html deleted file mode 100644 index b202223..0000000 --- a/cmd/server/website/pricing.html +++ /dev/null @@ -1,492 +0,0 @@ - - - - - - Pricing — Dealspace - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

- Fair Pricing. No Surprises. -

-

- Competitors charge $20/MB for "secure storage." We charge for the platform. Storage at actual cost. No per-document fees. No hidden charges. -

-
-
- - -
-
-
- - -
-
-

Starter

-
- $2,500 - /month -
-

Perfect for boutique advisors and smaller transactions.

-
- -
    -
  • - - - - 1 concurrent deal -
  • -
  • - - - - Up to 10 participants per deal -
  • -
  • - - - - 10 GB storage included -
  • -
  • - - - - Request workflow -
  • -
  • - - - - Dynamic watermarking -
  • -
  • - - - - Full audit trail -
  • -
  • - - - - Email support -
  • -
  • - - - - AI matching -
  • -
  • - - - - SSO -
  • -
- - - Start Free Trial - -
- - -
-
- MOST POPULAR -
- -
-

Professional

-
- $7,500 - /month -
-

For mid-market advisors running multiple transactions.

-
- -
    -
  • - - - - 5 concurrent deals -
  • -
  • - - - - Unlimited participants -
  • -
  • - - - - 100 GB storage included -
  • -
  • - - - - Request workflow -
  • -
  • - - - - Dynamic watermarking -
  • -
  • - - - - Full audit trail -
  • -
  • - - - - AI matching -
  • -
  • - - - - Priority support -
  • -
  • - - - - SSO -
  • -
- - - Start Free Trial - -
- - -
-
-

Enterprise

-
- Custom -
-

For bulge bracket banks and large advisory firms.

-
- -
    -
  • - - - - Unlimited concurrent deals -
  • -
  • - - - - Unlimited participants -
  • -
  • - - - - Unlimited storage -
  • -
  • - - - - Everything in Professional -
  • -
  • - - - - SSO / SAML integration -
  • -
  • - - - - Custom watermarks -
  • -
  • - - - - Dedicated support -
  • -
  • - - - - 99.99% SLA -
  • -
  • - - - - On-premise option -
  • -
- - - Contact Sales - -
-
-
-
- - -
-
-

Additional Storage

-

- Need more than your plan includes? Storage is priced at actual cost — no markups. -

-
-
$0.10 / GB / month
-

No per-document fees. No bandwidth charges. Just storage.

-
-
-
- - -
-
-
-

How We Compare

-

Real pricing on a 50GB deal with 100 participants.

-
- -
-
-
-
Dealspace
-
Competitor A
-
Competitor B
-
-
-
Base platform
-
$7,500
-
$5,000
-
$8,000
-
-
-
50 GB storage
-
$0 (included)
-
$15,000
-
$8,000
-
-
-
100 participants
-
$0 (unlimited)
-
$2,500
-
$1,500
-
-
-
AI matching
-
$0 (included)
-
$3,000
-
N/A
-
-
-
Monthly Total
-
$7,500
-
$25,500
-
$17,500
-
-
- -

- Competitor pricing based on public rate cards as of February 2026. Your mileage may vary. -

-
-
- - -
-
-

Frequently Asked Questions

- -
-
-

What counts as a "concurrent deal"?

-

An active deal that hasn't been archived. Once a deal closes and you archive it, it no longer counts toward your limit. Archived deals remain accessible for audit purposes.

-
- -
-

Is there a free trial?

-

Yes. 14 days, full Professional tier features, no credit card required. Run a real deal on us.

-
- -
-

What happens if I exceed my storage limit?

-

We'll notify you and add the overage at $0.10/GB. No surprise charges — you'll see it before you're billed.

-
- -
-

Can I upgrade or downgrade mid-cycle?

-

Upgrades are prorated immediately. Downgrades take effect at the next billing cycle. No penalties either way.

-
- -
-

Do you offer annual billing?

-

Yes. Pay annually and save 15%. Enterprise customers can negotiate custom terms.

-
- -
-

What's included in "priority support"?

-

4-hour response time during business hours, dedicated Slack channel, and access to our senior support engineers.

-
-
-
-
- - -
-
-

Ready to See the Difference?

-

- 14-day free trial. No credit card required. Full Professional features. -

- -
-
- - - - - - - - diff --git a/cmd/server/website/privacy.html b/cmd/server/website/privacy.html deleted file mode 100644 index d215d83..0000000 --- a/cmd/server/website/privacy.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - - Privacy Policy — Dealspace - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-

Privacy Policy

-

Last updated: February 28, 2026

-
- -
- -
-

- Dealspace is a platform for managing confidential M&A transaction data. We understand the sensitivity of the information you entrust to us. This policy describes how we collect, use, and protect that data. -

-
- -
-

Data Controller

-

- Muskepo B.V.
- Herengracht 555
- 1017 BW Amsterdam
- The Netherlands

- Chamber of Commerce: 92847293
- VAT: NL866012843B01 -

-
- -
-

Information We Collect

- -

Account Information

-

- Name, business email address, organization name, and job title. This information is required to create an account and manage access to deals. -

- -

Transaction Data

-

- Documents, requests, responses, and communications uploaded to or generated within the platform. This includes confidential M&A transaction materials, due diligence documents, and related correspondence. -

- -

Usage Data

-

- IP addresses, access timestamps, browser type, and activity logs. This information is collected for security purposes, audit trail requirements, and service optimization. -

- -

Payment Information

-

- Payment processing is handled by third-party providers (Stripe). We do not store credit card numbers or bank account details. We receive only transaction confirmations and billing addresses. -

-
- -
-

How We Use Your Information

- -

We use the information we collect to:

-
    -
  • Provide, maintain, and improve the Dealspace platform
  • -
  • Manage user accounts and access permissions
  • -
  • Generate audit trails as required by clients and regulators
  • -
  • Detect and prevent security threats
  • -
  • Comply with legal obligations
  • -
  • Send service-related communications
  • -
- -

- We do not: -

-
    -
  • Sell your data to third parties
  • -
  • Use transaction data for advertising
  • -
  • Train AI models on your confidential documents
  • -
  • Share data with third parties except as described in this policy
  • -
-
- -
-

Legal Basis for Processing

- -

We process your data based on:

-
    -
  • Contractual necessity: Processing required to provide the services you have requested under our Terms of Service
  • -
  • Legitimate interests: Security, fraud prevention, service improvement, and business operations
  • -
  • Legal obligation: Compliance with applicable laws, regulations, and legal processes
  • -
  • Consent: Where specifically obtained for marketing communications
  • -
-
- -
-

Data Sharing

- -

We share data only in the following circumstances:

- -

Within Deals

-

- Transaction data is shared with authorized participants within each deal according to the access permissions configured by deal administrators. -

- -

Service Providers

-

- We use carefully selected third-party providers for infrastructure, payment processing, and support operations. These providers are bound by data processing agreements and process data only on our instructions. -

- -

Legal Requirements

-

- We may disclose data when required by law, court order, or governmental authority. We will notify you of such requests where legally permitted. -

- -

Business Transfers

-

- In the event of a merger, acquisition, or sale of assets, your data may be transferred. We will notify you and ensure the receiving party is bound by equivalent data protection obligations. -

-
- -
-

Data Security

- -

We protect your data with:

-
    -
  • FIPS 140-3 validated encryption for data at rest and in transit
  • -
  • Per-deal encryption keys limiting exposure in case of compromise
  • -
  • SOC 2 Type II certified infrastructure and processes
  • -
  • Multi-factor authentication required for all accounts
  • -
  • Continuous monitoring and intrusion detection
  • -
  • Regular security assessments and penetration testing
  • -
- -

- For detailed security information, see our Security page. -

-
- -
-

Data Retention

- -

- Active accounts: Data is retained for the duration of your subscription and any active deals. -

-

- Archived deals: Retained for 7 years after deal closure for regulatory and audit purposes, unless you request earlier deletion. -

-

- Account deletion: Upon account termination, personal data is deleted within 30 days. Transaction data associated with active deals of other parties is retained per those deals' retention policies. -

-

- Backups: Deleted data may persist in encrypted backups for up to 90 days before being overwritten. -

-
- -
-

International Data Transfers

- -

- Dealspace operates infrastructure in the European Union and the United States. Data may be transferred between these regions. For transfers outside the EEA, we rely on Standard Contractual Clauses approved by the European Commission. Enterprise customers may request data residency in specific regions. -

-
- -
-

Your Rights

- -

Under GDPR and applicable privacy laws, you have the right to:

-
    -
  • Access your personal data and obtain a copy
  • -
  • Rectify inaccurate or incomplete data
  • -
  • Erase your data (subject to legal retention requirements)
  • -
  • Restrict processing in certain circumstances
  • -
  • Port your data to another service in a structured format
  • -
  • Object to processing based on legitimate interests
  • -
  • Withdraw consent where processing is based on consent
  • -
- -

- To exercise these rights, contact privacy@dealspace.io. We will respond within 30 days. -

-
- -
-

Cookies

- -

- We use essential cookies to maintain your session and preferences. We do not use advertising cookies or third-party tracking. Analytics, where used, are privacy-preserving and do not track individuals. -

-
- -
-

Changes to This Policy

- -

- We may update this policy to reflect changes in our practices or legal requirements. Material changes will be communicated via email to account holders. Continued use of the service after changes constitutes acceptance. -

-
- -
-

Contact

- -

- Data Protection Officer:
- privacy@dealspace.io -

- -

- You have the right to lodge a complaint with a supervisory authority. In the Netherlands, this is the Autoriteit Persoonsgegevens (autoriteitpersoonsgegevens.nl). -

-
- -
-
-
- - - - - - - - diff --git a/cmd/server/website/robots.txt b/cmd/server/website/robots.txt deleted file mode 100644 index 244250b..0000000 --- a/cmd/server/website/robots.txt +++ /dev/null @@ -1,12 +0,0 @@ -User-agent: * -Allow: / -Sitemap: https://muskepo.com/sitemap.xml - -User-agent: GPTBot -Allow: / - -User-agent: Claude-Web -Allow: / - -User-agent: Googlebot -Allow: / diff --git a/cmd/server/website/security.html b/cmd/server/website/security.html deleted file mode 100644 index c4ce3b5..0000000 --- a/cmd/server/website/security.html +++ /dev/null @@ -1,587 +0,0 @@ - - - - - - Security — Dealspace - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

- Security That Compliance Teams Trust -

-

- M&A data is sensitive. People go to prison for leaking it. We built Dealspace with security as the foundation, not an afterthought. -

-
-
- - -
-
-
- -
- - - - -
-

SOC 2

-

Self-Assessed · Type II in progress

-
-
-
- - - - - - -
-

FIPS 140-3

-

Validated encryption

-
-
-
- - - - - - - EU - -
-

GDPR

-

Compliant processing

-
-
-
- - - - - - - -
-

ISO 27001

-

Certified ISMS

-
-
-
-
- - -
-
-
-
-
Encryption
-

FIPS 140-3 Validated Cryptography

-

- We use the same encryption standards required by US federal agencies. Your deal data is encrypted with AES-256-GCM using FIPS 140-3 validated cryptographic modules. -

-
-
-

Per-Deal Encryption Keys

-

Each deal has its own encryption key derived from a master key. One deal's compromise does not affect others.

-
-
-

Encryption at Rest

-

All data encrypted before it touches disk. File content, metadata, comments — everything.

-
-
-

Encryption in Transit

-

TLS 1.3 for all connections. Certificate pinning for mobile apps. No data travels unencrypted.

-
-
-
-
- - - - - - - - - - - - - MASTER KEY - HSM Protected - - - - - - - - - - - Deal A Key - - AES-256-GCM - - - - - Deal B Key - - AES-256-GCM - - - - - Deal C Key - - AES-256-GCM - - - - - - - - - - - - - - - - - - - - - - - - Encrypted Storage - - - - - 0x8f2a... - - - - 0x3c71... - - - - 0xd9e4... - - - - ... - - -
-
-
-
- - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - john.smith@pe-firm.com - 2026-02-28 14:32:15 UTC - CONFIDENTIAL - - - - - DYNAMIC - -
-
-
Leak Prevention
-

Dynamic Watermarking

-

- Every document is watermarked with the viewer's identity at serve time. If a document leaks, you know exactly who leaked it. -

-
    -
  • - - - -
    - Generated per-request -

    Watermark includes user email, organization, timestamp, and deal ID.

    -
    -
  • -
  • - - - -
    - All file types -

    PDF, Word, Excel, images, video. Protection adapts to the format.

    -
    -
  • -
  • - - - -
    - Configurable per project -

    Control watermark content, position, and visibility.

    -
    -
  • -
-
-
-
-
- - -
-
-
-
Access Control
-

Defense in Depth

-

- Multiple layers of protection. Every access decision goes through the same choke point. No exceptions. -

-
- -
-
-
- - - -
-

Single Sign-On

-

SAML 2.0 and OIDC support. Integrate with your existing identity provider. Enforce your organization's auth policies.

-
- -
-
- - - -
-

Multi-Factor Auth

-

TOTP, hardware keys (FIDO2), SMS backup. MFA required for all access, no exceptions.

-
- -
-
- - - -
-

Role-Based Access

-

Workstream-level permissions. IB, Seller, Buyer roles with configurable scopes. Least privilege by default.

-
- -
-
- - - -
-

Session Management

-

Short-lived tokens. Single active session per user. Immediate revocation on access changes.

-
- -
-
- - - -
-

IP Allowlisting

-

Restrict access by IP range. Corporate network only, or specific buyer locations.

-
- -
-
- - - -
-

Download Controls

-

Disable downloads entirely, or allow view-only access. Configurable per document or project-wide.

-
-
-
-
- - -
-
-
-
-
Audit Trail
-

Complete Accountability

-

- Every action is logged. Access grants, file views, downloads, status changes — all recorded with actor, timestamp, and IP address. -

-
-
- - - - Real-time activity monitoring -
-
- - - - Exportable audit reports -
-
- - - - Anomaly detection alerts -
-
- - - - 7-year retention for compliance -
-
-
-
-
# Recent audit events
-
-
- 14:32:15 -
- VIEW - john.smith@pe-firm.com -
FIN-002-revenue-breakdown.xlsx
-
-
-
- 14:31:42 -
- DOWNLOAD - sarah.jones@ib.com -
LEG-015-ip-schedule.pdf (watermarked)
-
-
-
- 14:30:18 -
- GRANT - admin@seller.com -
Added buyer_member: mike@strategic.com
-
-
-
- 14:29:55 -
- PUBLISH - analyst@ib.com -
FIN-003 → Data Room (3 buyers notified)
-
-
-
-
-
-
-
- - -
-
-
Infrastructure
-

Enterprise-Grade Infrastructure

-

- Dedicated infrastructure, redundant storage, continuous monitoring. Your deal data deserves nothing less. -

- -
-
-
99.99%
-
Uptime SLA
-
-
-
3
-
Geographic Regions
-
-
-
24/7
-
Security Monitoring
-
-
-
<15min
-
Incident Response
-
-
-
-
- - -
-
-

Questions About Security?

-

- Talk to our security team. We are happy to answer technical questions and provide documentation. -

- -
-
- - - - - - - - diff --git a/cmd/server/website/sitemap.xml b/cmd/server/website/sitemap.xml deleted file mode 100644 index 539324d..0000000 --- a/cmd/server/website/sitemap.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - https://muskepo.com/ - 2026-02-28 - weekly - 1.0 - - - https://muskepo.com/features - 2026-02-28 - monthly - 0.8 - - - https://muskepo.com/security - 2026-02-28 - monthly - 0.8 - - - https://muskepo.com/pricing - 2026-02-28 - monthly - 0.8 - - - https://muskepo.com/privacy - 2026-02-28 - yearly - 0.5 - - - https://muskepo.com/terms - 2026-02-28 - yearly - 0.5 - - - https://muskepo.com/dpa - 2026-02-28 - yearly - 0.5 - - diff --git a/cmd/server/website/soc2.html b/cmd/server/website/soc2.html deleted file mode 100644 index aded105..0000000 --- a/cmd/server/website/soc2.html +++ /dev/null @@ -1,679 +0,0 @@ - - - - - - SOC 2 Compliance — Dealspace - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- Self-Assessment · Type II Audit Planned Q4 2026 -
-

- SOC 2 Compliance -

-

- Dealspace has completed a comprehensive SOC 2 Type II self-assessment. We are preparing for formal audit certification in Q4 2026. -

-
-
- - -
-
-

- Note: This is a self-assessment document. Formal SOC 2 Type II audit is planned for Q4 2026. -

-
-
- - -
-
-
-
-
Overview
-

What is SOC 2?

-

- SOC 2 (System and Organization Controls 2) is an auditing framework developed by the AICPA that evaluates how organizations manage customer data based on five Trust Services Criteria. -

-

- For M&A platforms handling confidential deal data, SOC 2 compliance demonstrates a commitment to security, availability, and data protection that investment banks and advisors require. -

-
-
-

Self-Assessment Summary

-
-
- Security (CC1-CC9) -
-
-
-
- 95% -
-
-
- Availability (A1) -
-
-
-
- 95% -
-
-
- Confidentiality (C1) -
-
-
-
- 98% -
-
-
- Processing Integrity (PI1) -
-
-
-
- 95% -
-
-
- Privacy (P1-P8) -
-
-
-
- 95% -
-
-
-
-

Assessment Date: February 28, 2026

-
-
-
-
-
- - -
-
-
-
Scope
-

What's Covered

-

- Our SOC 2 assessment covers all aspects of the Dealspace platform and infrastructure. -

-
- -
-
-
- - - -
-

Infrastructure

-
    -
  • • Production server (Zürich, Switzerland)
  • -
  • • Go application binary
  • -
  • • SQLite encrypted database
  • -
  • • Caddy reverse proxy
  • -
-
- -
-
- - - -
-

Data Types

-
    -
  • • M&A deal documents
  • -
  • • Financial data
  • -
  • • Transaction details
  • -
  • • Participant information
  • -
-
- -
-
- - - -
-

User Types

-
    -
  • • Investment bank admins/members
  • -
  • • Seller organizations
  • -
  • • Buyer organizations
  • -
  • • Observers
  • -
-
-
-
-
- - -
-
-
-
Trust Services Criteria
-

The Five Pillars

-

- SOC 2 evaluates organizations against five Trust Services Criteria. Dealspace implements controls for all five. -

-
- -
- -
-
-
- - - -
-
-

Security (CC1-CC9)

-

Protection against unauthorized access, both physical and logical.

-
-
- - - - FIPS 140-3 encryption (AES-256-GCM) -
-
- - - - Per-project key derivation (HKDF-SHA256) -
-
- - - - Role-based access control (RBAC) -
-
- - - - MFA required for IB users -
-
-
-
-
- - -
-
-
- - - -
-
-

Availability (A1)

-

Systems are available for operation and use as committed.

-
-
- - - - 99.9% uptime SLA -
-
- - - - 4-hour recovery time objective -
-
- - - - Daily encrypted backups -
-
- - - - Swiss data center (Zürich) -
-
-
-
-
- - -
-
-
- - - -
-
-

Confidentiality (C1)

-

Information designated as confidential is protected as committed.

-
-
- - - - All deal data encrypted at rest -
-
- - - - Blind indexes for searchable encryption -
-
- - - - TLS 1.3 for all connections -
-
- - - - Dynamic document watermarking -
-
-
-
-
- - -
-
-
- - - -
-
-

Processing Integrity (PI1)

-

System processing is complete, valid, accurate, timely, and authorized.

-
-
- - - - Input validation on all data -
-
- - - - Parameterized SQL queries -
-
- - - - Optimistic locking (ETag) -
-
- - - - ACID transaction compliance -
-
-
-
-
- - -
-
-
- - - -
-
-

Privacy (P1-P8)

-

Personal information is collected, used, retained, and disclosed in conformity with commitments.

-
-
- - - - GDPR/FADP/CCPA compliant -
-
- - - - Data export on request -
-
- - - - No third-party tracking -
-
- - - - No data sales -
-
-
-
-
-
-
-
- - -
-
-
-
Controls Summary
-

Key Security Controls

-
- -
-
-

Encryption

-

FIPS 140-3 validated AES-256-GCM with per-project keys derived via HKDF-SHA256

-
-
-

Authentication

-

JWT tokens with 1-hour expiry, MFA required for IB users, session management

-
-
-

Authorization

-

Role hierarchy (IB → Seller → Buyer → Observer), invitation-only access

-
-
-

Infrastructure

-

Swiss data center, UFW firewall, SSH key-only, automatic security updates

-
-
-

Audit Logging

-

All access logged with actor, timestamp, IP. 7-year retention for compliance

-
-
-

Backup & Recovery

-

Daily encrypted backups, 4-hour RTO, 24-hour RPO, tested recovery procedures

-
-
-
-
- - -
-
-
-
Documentation
-

Policy Documents

-

- Our SOC 2 program is supported by comprehensive policy documentation. -

-
- - -
-
- - -
-
-
Status
-

Audit Timeline

- -
-
-
-
- - - -
-
-

February 2026 — Self-Assessment Complete

-

Comprehensive self-assessment against all five Trust Services Criteria completed. Policy documentation created.

-
-
- -
-
- - - -
-
-

Q2 2026 — Gap Remediation

-

Address recommended action items including backup restore testing and external penetration test.

-
-
- -
-
- - - -
-
-

Q4 2026 — Formal SOC 2 Type II Audit

-

Engage third-party auditor for formal SOC 2 Type II certification.

-
-
-
-
-
-
- - -
-
-

Questions About Compliance?

-

- Contact our security team for detailed documentation or to discuss your compliance requirements. -

- -
-
- - - - - - - - diff --git a/cmd/server/website/terms.html b/cmd/server/website/terms.html deleted file mode 100644 index 148d147..0000000 --- a/cmd/server/website/terms.html +++ /dev/null @@ -1,349 +0,0 @@ - - - - - - Terms of Service — Dealspace - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-

Terms of Service

-

Last updated: February 28, 2026

-
- -
- -
-

- These Terms of Service ("Terms") govern your use of Dealspace, a deal workflow platform operated by Muskepo B.V. By accessing or using Dealspace, you agree to be bound by these Terms. -

-
- -
-

1. The Service

- -

1.1 Description

-

- Dealspace is a deal workflow platform for managing M&A transactions, due diligence processes, and related document exchanges. The platform provides request tracking, document management, access control, and communication tools. -

- -

1.2 Not Legal or Financial Advice

-

- Dealspace is a technology platform. It does not provide legal, financial, tax, or investment advice. Users are responsible for obtaining appropriate professional advice for their transactions. Dealspace does not verify the accuracy or completeness of any content uploaded to the platform. -

-
- -
-

2. Accounts and Access

- -

2.1 Account Registration

-

- To use Dealspace, you must register an account with accurate and complete information. You are responsible for maintaining the confidentiality of your account credentials and for all activities under your account. -

- -

2.2 Organizational Accounts

-

- If you create an account on behalf of an organization, you represent that you have authority to bind that organization to these Terms. The organization is responsible for all activities under accounts it controls. -

- -

2.3 Access Controls

-

- Deal administrators are responsible for configuring access permissions within their deals. Dealspace enforces these permissions but is not responsible for access decisions made by administrators. -

-
- -
-

3. Acceptable Use

- -

3.1 Permitted Uses

-

- You may use Dealspace for lawful business purposes related to M&A transactions, due diligence, and similar deal processes. You may upload, share, and manage documents in accordance with your subscription and applicable access permissions. -

- -

3.2 Prohibited Conduct

-

You agree not to:

-
    -
  • Violate any applicable laws or regulations
  • -
  • Upload content you do not have the right to share
  • -
  • Attempt to access data or accounts without authorization
  • -
  • Interfere with or disrupt the service or its infrastructure
  • -
  • Reverse engineer, decompile, or attempt to extract source code
  • -
  • Circumvent security measures or access controls
  • -
  • Use the service for competitive analysis or to build a competing product
  • -
  • Resell or sublicense access without authorization
  • -
- -

3.3 Enforcement

-

- We may suspend or terminate access for violations of these Terms. In cases of illegal activity, we will cooperate with law enforcement authorities. -

-
- -
-

4. Content and Data

- -

4.1 Your Content

-

- You retain ownership of all content you upload to Dealspace. By uploading content, you grant us a limited license to store, process, and transmit that content as necessary to provide the service. -

- -

4.2 Responsibility for Content

-

- You are solely responsible for the content you upload, including its accuracy, legality, and compliance with confidentiality obligations. Dealspace does not review, approve, or endorse user content. -

- -

4.3 Data Processing

-

- Our handling of personal data is governed by our Privacy Policy and, for enterprise customers, our Data Processing Agreement. -

-
- -
-

5. Intellectual Property

- -

5.1 Our IP

-

- Dealspace, including its software, design, branding, and documentation, is owned by Muskepo B.V. These Terms grant you a limited, non-exclusive, non-transferable license to use the service for its intended purpose during your subscription term. -

- -

5.2 Feedback

-

- If you provide feedback, suggestions, or ideas about the service, you grant us a perpetual, irrevocable, royalty-free license to use that feedback for any purpose. -

-
- -
-

6. Payment and Billing

- -

6.1 Fees

-

- Fees are described on our Pricing page or in your order form. All fees are in US dollars unless otherwise specified and are exclusive of taxes. -

- -

6.2 Payment

-

- Payment is due in advance on a monthly or annual basis as selected. We may suspend service for non-payment after reasonable notice. -

- -

6.3 Refunds

-

- Annual subscriptions are non-refundable except as required by law or at our discretion. Monthly subscriptions may be cancelled at any time; no refund is provided for partial months. -

- -

6.4 Price Changes

-

- We may change pricing with 30 days notice. Price increases will not affect your current subscription term. -

-
- -
-

7. Service Level

- -

7.1 Availability

-

- We target 99.9% uptime for Professional plans and 99.99% for Enterprise plans. Uptime commitments and remedies for Enterprise customers are specified in service level agreements. -

- -

7.2 Maintenance

-

- We may perform scheduled maintenance with reasonable advance notice. Emergency maintenance may be performed without notice when necessary to protect the service or its users. -

-
- -
-

8. Termination

- -

8.1 By You

-

- You may cancel your subscription at any time through your account settings. Cancellation takes effect at the end of your current billing period. -

- -

8.2 By Us

-

- We may terminate your access for violation of these Terms, non-payment, or if we discontinue the service. We will provide reasonable notice where possible. -

- -

8.3 Effect of Termination

-

- Upon termination, you will have 30 days to export your data. After this period, we may delete your data in accordance with our retention policies. Provisions that by their nature should survive termination will survive. -

-
- -
-

9. Disclaimers

- -

- THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE DO NOT WARRANT THAT THE SERVICE WILL BE UNINTERRUPTED, ERROR-FREE, OR SECURE. -

-
- -
-

10. Limitation of Liability

- -

- TO THE MAXIMUM EXTENT PERMITTED BY LAW: -

-
    -
  • OUR TOTAL LIABILITY FOR ANY CLAIM ARISING FROM THESE TERMS OR THE SERVICE IS LIMITED TO THE AMOUNTS YOU PAID US IN THE 12 MONTHS PRECEDING THE CLAIM.
  • -
  • WE ARE NOT LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFITS, LOST DATA, OR BUSINESS INTERRUPTION.
  • -
  • THESE LIMITATIONS APPLY REGARDLESS OF THE FORM OF ACTION AND EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  • -
-
- -
-

11. Indemnification

- -

- You agree to indemnify and hold harmless Muskepo B.V., its officers, directors, employees, and agents from any claims, damages, losses, or expenses (including reasonable attorneys' fees) arising from your use of the service, your content, or your violation of these Terms. -

-
- -
-

12. Governing Law and Disputes

- -

- These Terms are governed by the laws of the Netherlands, without regard to conflict of law principles. -

-

- Any disputes arising from these Terms or the service shall be submitted to the exclusive jurisdiction of the courts of Amsterdam, the Netherlands. For Enterprise customers, alternative dispute resolution mechanisms may be agreed in writing. -

-
- -
-

13. General

- -

13.1 Entire Agreement

-

- These Terms, together with our Privacy Policy and any order forms, constitute the entire agreement between you and Muskepo B.V. regarding the service. -

- -

13.2 Modifications

-

- We may modify these Terms by posting updated terms on our website. Material changes will be communicated via email. Continued use after changes constitutes acceptance. -

- -

13.3 Severability

-

- If any provision is found unenforceable, the remaining provisions will continue in effect. -

- -

13.4 Assignment

-

- You may not assign these Terms without our written consent. We may assign these Terms in connection with a merger, acquisition, or sale of assets. -

-
- -
-

Contact

- -

- Questions about these Terms:
- legal@dealspace.io -

-
- -
-
-
- - - - - - - - diff --git a/portal/templates/app/project.html b/portal/templates/app/project.html index 1c116c0..1c89264 100644 --- a/portal/templates/app/project.html +++ b/portal/templates/app/project.html @@ -159,9 +159,10 @@ try { const res = await fetchAPI('/api/projects/' + projectID); if (!res.ok) { document.getElementById('projectTitle').textContent = 'Not found'; return; } - const p = await res.json(); + const raw = await res.json(); + const p = raw.project || raw; const d = parseData(p.data_text); - const name = d.name || p.summary || 'Untitled'; + const name = d.name || p.summary_text || p.summary || 'Untitled'; document.title = name + ' — Dealspace'; document.getElementById('projectName').textContent = name; document.getElementById('projectTitle').textContent = name; @@ -180,7 +181,7 @@ const list = document.getElementById('requestList'); if (!items || items.length === 0) { list.classList.add('hidden'); document.getElementById('requestEmpty').classList.remove('hidden'); return; } list.innerHTML = items.map(r => { - const d = parseData(r.data_text); + const d = r.data || parseData(r.data_text) || {}; return `