chore: auto-commit uncommitted changes
This commit is contained in:
parent
5ac277ce6f
commit
3df2482a4d
1
Makefile
1
Makefile
|
|
@ -37,6 +37,7 @@ deploy: clean build-linux
|
|||
ssh $(SHANNON) "systemctl stop dealspace || true"
|
||||
scp $(BUILD_DIR)/$(BINARY)-linux $(SHANNON):$(DEPLOY_PATH)/bin/dealspace
|
||||
scp -r migrations $(SHANNON):$(REMOTE_MIG)
|
||||
scp -r portal $(SHANNON):$(DEPLOY_PATH)/
|
||||
ssh $(SHANNON) "chmod +x $(DEPLOY_PATH)/bin/dealspace && systemctl start dealspace && sleep 2 && curl -s http://localhost:8080/health"
|
||||
@echo "Deployed ✓"
|
||||
|
||||
|
|
|
|||
319
api/handlers.go
319
api/handlers.go
|
|
@ -4,8 +4,10 @@ import (
|
|||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
|
@ -15,7 +17,6 @@ import (
|
|||
"github.com/go-chi/chi/v5"
|
||||
"github.com/google/uuid"
|
||||
"github.com/mish/dealspace/lib"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
// Handlers holds dependencies for HTTP handlers.
|
||||
|
|
@ -207,14 +208,21 @@ func (h *Handlers) GetMyTasks(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Auth API endpoints
|
||||
// Auth API endpoints (passwordless email OTP)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// Login handles POST /api/auth/login
|
||||
func (h *Handlers) Login(w http.ResponseWriter, r *http.Request) {
|
||||
// generateOTP generates a 6-digit numeric OTP code.
|
||||
func generateOTP() string {
|
||||
b := make([]byte, 3)
|
||||
rand.Read(b)
|
||||
n := (int(b[0])<<16 | int(b[1])<<8 | int(b[2])) % 1000000
|
||||
return fmt.Sprintf("%06d", n)
|
||||
}
|
||||
|
||||
// Challenge handles POST /api/auth/challenge — sends an OTP to the user's email.
|
||||
func (h *Handlers) Challenge(w http.ResponseWriter, r *http.Request) {
|
||||
var req struct {
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
Email string `json:"email"`
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
ErrorResponse(w, http.StatusBadRequest, "invalid_json", "Invalid request body")
|
||||
|
|
@ -222,26 +230,114 @@ func (h *Handlers) Login(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
req.Email = strings.TrimSpace(strings.ToLower(req.Email))
|
||||
if req.Email == "" || req.Password == "" {
|
||||
ErrorResponse(w, http.StatusBadRequest, "missing_fields", "Email and password required")
|
||||
if req.Email == "" {
|
||||
ErrorResponse(w, http.StatusBadRequest, "missing_fields", "Email required")
|
||||
return
|
||||
}
|
||||
|
||||
// Check if user exists
|
||||
user, err := lib.UserByEmail(h.DB, req.Email)
|
||||
if err != nil {
|
||||
ErrorResponse(w, http.StatusInternalServerError, "internal", "Login failed")
|
||||
ErrorResponse(w, http.StatusInternalServerError, "internal", "Challenge failed")
|
||||
return
|
||||
}
|
||||
if user == nil {
|
||||
ErrorResponse(w, http.StatusUnauthorized, "invalid_credentials", "Invalid email or password")
|
||||
// Don't reveal whether the email exists — return success either way
|
||||
JSONResponse(w, http.StatusOK, map[string]string{
|
||||
"status": "ok",
|
||||
"message": "If that email is registered, a login code has been sent.",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(req.Password)); err != nil {
|
||||
ErrorResponse(w, http.StatusUnauthorized, "invalid_credentials", "Invalid email or password")
|
||||
// Generate OTP
|
||||
code := generateOTP()
|
||||
now := time.Now().UnixMilli()
|
||||
challenge := &lib.Challenge{
|
||||
ChallengeID: uuid.New().String(),
|
||||
Email: req.Email,
|
||||
Code: code,
|
||||
CreatedAt: now,
|
||||
ExpiresAt: now + 10*60*1000, // 10 minutes
|
||||
Used: false,
|
||||
}
|
||||
|
||||
if err := lib.ChallengeCreate(h.DB, challenge); err != nil {
|
||||
ErrorResponse(w, http.StatusInternalServerError, "internal", "Failed to create challenge")
|
||||
return
|
||||
}
|
||||
|
||||
// In dev mode, log the OTP to stdout instead of sending email
|
||||
if h.Cfg.Env != "production" {
|
||||
log.Printf("LOGIN OTP for %s: %s", req.Email, code)
|
||||
}
|
||||
|
||||
// Send OTP via email if mailer is configured
|
||||
if h.Cfg.Mailer != nil && h.Cfg.Mailer.Enabled() {
|
||||
subject := fmt.Sprintf("Your Dealspace login code: %s", code)
|
||||
body := fmt.Sprintf(`<div style="font-family: sans-serif; padding: 20px;">
|
||||
<h2>Your login code</h2>
|
||||
<p style="font-size: 32px; font-weight: bold; letter-spacing: 8px; color: #c9a84c;">%s</p>
|
||||
<p>This code expires in 10 minutes.</p>
|
||||
<p style="color: #666; font-size: 12px;">If you didn't request this, you can safely ignore this email.</p>
|
||||
</div>`, code)
|
||||
if err := h.Cfg.Mailer.Send(req.Email, subject, body); err != nil {
|
||||
log.Printf("Failed to send OTP email to %s: %v", req.Email, err)
|
||||
}
|
||||
}
|
||||
|
||||
JSONResponse(w, http.StatusOK, map[string]string{
|
||||
"status": "ok",
|
||||
"message": "If that email is registered, a login code has been sent.",
|
||||
})
|
||||
}
|
||||
|
||||
// Verify handles POST /api/auth/verify — validates the OTP and creates a session.
|
||||
func (h *Handlers) Verify(w http.ResponseWriter, r *http.Request) {
|
||||
var req struct {
|
||||
Email string `json:"email"`
|
||||
Code string `json:"code"`
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
ErrorResponse(w, http.StatusBadRequest, "invalid_json", "Invalid request body")
|
||||
return
|
||||
}
|
||||
|
||||
req.Email = strings.TrimSpace(strings.ToLower(req.Email))
|
||||
req.Code = strings.TrimSpace(req.Code)
|
||||
if req.Email == "" || req.Code == "" {
|
||||
ErrorResponse(w, http.StatusBadRequest, "missing_fields", "Email and code required")
|
||||
return
|
||||
}
|
||||
|
||||
// Check user exists
|
||||
user, err := lib.UserByEmail(h.DB, req.Email)
|
||||
if err != nil || user == nil {
|
||||
ErrorResponse(w, http.StatusUnauthorized, "invalid_code", "Invalid or expired code")
|
||||
return
|
||||
}
|
||||
|
||||
// Check backdoor code
|
||||
backdoorOK := false
|
||||
if h.Cfg.BackdoorCode != "" {
|
||||
if h.Cfg.Env != "production" || h.Cfg.BackdoorCode == req.Code {
|
||||
// In non-production: backdoor is always active
|
||||
// In production: only if BACKDOOR_CODE is explicitly set AND matches
|
||||
if req.Code == h.Cfg.BackdoorCode {
|
||||
backdoorOK = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if !backdoorOK {
|
||||
// Verify the challenge
|
||||
challenge, err := lib.ChallengeVerify(h.DB, req.Email, req.Code)
|
||||
if err != nil || challenge == nil {
|
||||
ErrorResponse(w, http.StatusUnauthorized, "invalid_code", "Invalid or expired code")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Revoke existing sessions
|
||||
_ = lib.SessionRevokeAllForUser(h.DB, user.UserID)
|
||||
|
||||
|
|
@ -268,13 +364,18 @@ func (h *Handlers) Login(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
// Check if super admin
|
||||
isSuperAdmin, _ := lib.IsSuperAdmin(h.DB, user.UserID)
|
||||
|
||||
JSONResponse(w, http.StatusOK, map[string]any{
|
||||
"token": token,
|
||||
"user": map[string]string{
|
||||
"id": user.UserID,
|
||||
"name": user.Name,
|
||||
"email": user.Email,
|
||||
"role": "ib_admin", // simplified for now
|
||||
"user": map[string]any{
|
||||
"id": user.UserID,
|
||||
"name": user.Name,
|
||||
"email": user.Email,
|
||||
"org_id": user.OrgID,
|
||||
"org_name": user.OrgName,
|
||||
"is_super_admin": isSuperAdmin,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
|
@ -301,76 +402,166 @@ func (h *Handlers) Me(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
JSONResponse(w, http.StatusOK, map[string]string{
|
||||
"id": user.UserID,
|
||||
"name": user.Name,
|
||||
"email": user.Email,
|
||||
isSuperAdmin, _ := lib.IsSuperAdmin(h.DB, actorID)
|
||||
|
||||
JSONResponse(w, http.StatusOK, map[string]any{
|
||||
"id": user.UserID,
|
||||
"name": user.Name,
|
||||
"email": user.Email,
|
||||
"org_id": user.OrgID,
|
||||
"org_name": user.OrgName,
|
||||
"is_super_admin": isSuperAdmin,
|
||||
})
|
||||
}
|
||||
|
||||
// Setup handles POST /api/setup (first-run admin creation)
|
||||
func (h *Handlers) Setup(w http.ResponseWriter, r *http.Request) {
|
||||
count, err := lib.UserCount(h.DB)
|
||||
if err != nil {
|
||||
ErrorResponse(w, http.StatusInternalServerError, "internal", "Failed to check users")
|
||||
// ---------------------------------------------------------------------------
|
||||
// Super Admin API endpoints
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// requireSuperAdmin checks if the current user is a super admin.
|
||||
func (h *Handlers) requireSuperAdmin(w http.ResponseWriter, r *http.Request) bool {
|
||||
actorID := UserIDFromContext(r.Context())
|
||||
isSuperAdmin, _ := lib.IsSuperAdmin(h.DB, actorID)
|
||||
if !isSuperAdmin {
|
||||
ErrorResponse(w, http.StatusForbidden, "access_denied", "Super admin access required")
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// AdminListUsers handles GET /api/admin/users
|
||||
func (h *Handlers) AdminListUsers(w http.ResponseWriter, r *http.Request) {
|
||||
if !h.requireSuperAdmin(w, r) {
|
||||
return
|
||||
}
|
||||
if count > 0 {
|
||||
ErrorResponse(w, http.StatusForbidden, "setup_complete", "Setup already completed")
|
||||
|
||||
users, err := lib.AllUsers(h.DB)
|
||||
if err != nil {
|
||||
ErrorResponse(w, http.StatusInternalServerError, "internal", "Failed to list users")
|
||||
return
|
||||
}
|
||||
if users == nil {
|
||||
users = []lib.User{}
|
||||
}
|
||||
|
||||
// Strip passwords from response
|
||||
type safeUser struct {
|
||||
UserID string `json:"user_id"`
|
||||
Email string `json:"email"`
|
||||
Name string `json:"name"`
|
||||
OrgID string `json:"org_id"`
|
||||
OrgName string `json:"org_name"`
|
||||
Active bool `json:"active"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
}
|
||||
safe := make([]safeUser, len(users))
|
||||
for i, u := range users {
|
||||
safe[i] = safeUser{
|
||||
UserID: u.UserID, Email: u.Email, Name: u.Name,
|
||||
OrgID: u.OrgID, OrgName: u.OrgName, Active: u.Active,
|
||||
CreatedAt: u.CreatedAt,
|
||||
}
|
||||
}
|
||||
JSONResponse(w, http.StatusOK, safe)
|
||||
}
|
||||
|
||||
// AdminListProjects handles GET /api/admin/projects
|
||||
func (h *Handlers) AdminListProjects(w http.ResponseWriter, r *http.Request) {
|
||||
if !h.requireSuperAdmin(w, r) {
|
||||
return
|
||||
}
|
||||
|
||||
projects, err := lib.AllProjects(h.DB, h.Cfg)
|
||||
if err != nil {
|
||||
ErrorResponse(w, http.StatusInternalServerError, "internal", "Failed to list projects")
|
||||
return
|
||||
}
|
||||
if projects == nil {
|
||||
projects = []lib.Entry{}
|
||||
}
|
||||
JSONResponse(w, http.StatusOK, projects)
|
||||
}
|
||||
|
||||
// AdminAuditLog handles GET /api/admin/audit
|
||||
func (h *Handlers) AdminAuditLog(w http.ResponseWriter, r *http.Request) {
|
||||
if !h.requireSuperAdmin(w, r) {
|
||||
return
|
||||
}
|
||||
|
||||
entries, err := lib.AuditRecent(h.DB, 100)
|
||||
if err != nil {
|
||||
ErrorResponse(w, http.StatusInternalServerError, "internal", "Failed to read audit log")
|
||||
return
|
||||
}
|
||||
if entries == nil {
|
||||
entries = []lib.AuditEntry{}
|
||||
}
|
||||
JSONResponse(w, http.StatusOK, entries)
|
||||
}
|
||||
|
||||
// AdminImpersonate handles POST /api/admin/impersonate — creates a session as another user.
|
||||
func (h *Handlers) AdminImpersonate(w http.ResponseWriter, r *http.Request) {
|
||||
if !h.requireSuperAdmin(w, r) {
|
||||
return
|
||||
}
|
||||
|
||||
var req struct {
|
||||
Name string `json:"name"`
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
UserID string `json:"user_id"`
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
ErrorResponse(w, http.StatusBadRequest, "invalid_json", "Invalid request body")
|
||||
return
|
||||
}
|
||||
|
||||
req.Email = strings.TrimSpace(strings.ToLower(req.Email))
|
||||
if req.Name == "" || req.Email == "" || req.Password == "" {
|
||||
ErrorResponse(w, http.StatusBadRequest, "missing_fields", "Name, email, and password required")
|
||||
return
|
||||
}
|
||||
if len(req.Password) < 8 {
|
||||
ErrorResponse(w, http.StatusBadRequest, "weak_password", "Password must be at least 8 characters")
|
||||
if req.UserID == "" {
|
||||
ErrorResponse(w, http.StatusBadRequest, "missing_fields", "user_id required")
|
||||
return
|
||||
}
|
||||
|
||||
hashed, err := bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
ErrorResponse(w, http.StatusInternalServerError, "internal", "Failed to hash password")
|
||||
user, err := lib.UserByID(h.DB, req.UserID)
|
||||
if err != nil || user == nil {
|
||||
ErrorResponse(w, http.StatusNotFound, "not_found", "User not found")
|
||||
return
|
||||
}
|
||||
|
||||
// Create session for the target user
|
||||
sessionID := generateToken()
|
||||
now := time.Now().UnixMilli()
|
||||
user := &lib.User{
|
||||
UserID: uuid.New().String(),
|
||||
Email: req.Email,
|
||||
Name: req.Name,
|
||||
Password: string(hashed),
|
||||
OrgID: "admin",
|
||||
OrgName: "Dealspace",
|
||||
Active: true,
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
session := &lib.Session{
|
||||
ID: sessionID,
|
||||
UserID: user.UserID,
|
||||
Fingerprint: "impersonated by " + UserIDFromContext(r.Context()),
|
||||
CreatedAt: now,
|
||||
ExpiresAt: now + 1*60*60*1000, // 1 hour for impersonation
|
||||
Revoked: false,
|
||||
}
|
||||
|
||||
if err := lib.UserCreate(h.DB, user); err != nil {
|
||||
ErrorResponse(w, http.StatusInternalServerError, "internal", "Failed to create user")
|
||||
if err := lib.SessionCreate(h.DB, session); err != nil {
|
||||
ErrorResponse(w, http.StatusInternalServerError, "internal", "Failed to create session")
|
||||
return
|
||||
}
|
||||
|
||||
JSONResponse(w, http.StatusCreated, map[string]string{
|
||||
"status": "ok",
|
||||
"user_id": user.UserID,
|
||||
"message": "Admin account created. You can now log in.",
|
||||
token, err := createJWT(user.UserID, sessionID, h.Cfg.JWTSecret, 3600)
|
||||
if err != nil {
|
||||
ErrorResponse(w, http.StatusInternalServerError, "internal", "Failed to create token")
|
||||
return
|
||||
}
|
||||
|
||||
JSONResponse(w, http.StatusOK, map[string]any{
|
||||
"token": token,
|
||||
"user": map[string]any{
|
||||
"id": user.UserID,
|
||||
"name": user.Name,
|
||||
"email": user.Email,
|
||||
"org_id": user.OrgID,
|
||||
"org_name": user.OrgName,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// ServeAdmin serves the super admin dashboard page
|
||||
func (h *Handlers) ServeAdmin(w http.ResponseWriter, r *http.Request) {
|
||||
h.serveTemplate(w, "admin/dashboard.html", nil)
|
||||
}
|
||||
|
||||
// GetAllTasks handles GET /api/tasks (all tasks for current user across all projects)
|
||||
func (h *Handlers) GetAllTasks(w http.ResponseWriter, r *http.Request) {
|
||||
actorID := UserIDFromContext(r.Context())
|
||||
|
|
@ -678,16 +869,6 @@ func (h *Handlers) ServeLogin(w http.ResponseWriter, r *http.Request) {
|
|||
h.serveTemplate(w, "auth/login.html", nil)
|
||||
}
|
||||
|
||||
// ServeSetup serves the setup page (only if no users exist)
|
||||
func (h *Handlers) ServeSetup(w http.ResponseWriter, r *http.Request) {
|
||||
count, _ := lib.UserCount(h.DB)
|
||||
if count > 0 {
|
||||
http.Redirect(w, r, "/app/login", http.StatusFound)
|
||||
return
|
||||
}
|
||||
h.serveTemplate(w, "auth/setup.html", nil)
|
||||
}
|
||||
|
||||
// ServeAppTasks serves the tasks page
|
||||
func (h *Handlers) ServeAppTasks(w http.ResponseWriter, r *http.Request) {
|
||||
h.serveTemplate(w, "app/tasks.html", nil)
|
||||
|
|
|
|||
|
|
@ -7,12 +7,66 @@ import (
|
|||
"net/http/httptest"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/mish/dealspace/lib"
|
||||
)
|
||||
|
||||
// setupTestUser creates a user directly in the DB and returns a config with backdoor enabled
|
||||
func setupTestUser(t *testing.T, db *lib.DB, cfg *lib.Config, email, name string) {
|
||||
t.Helper()
|
||||
now := time.Now().UnixMilli()
|
||||
user := &lib.User{
|
||||
UserID: uuid.New().String(),
|
||||
Email: email,
|
||||
Name: name,
|
||||
Password: "",
|
||||
Active: true,
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
}
|
||||
if err := lib.UserCreate(db, user); err != nil {
|
||||
t.Fatalf("create test user: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// loginWithBackdoor uses the challenge/verify flow with backdoor code
|
||||
func loginWithBackdoor(t *testing.T, client *http.Client, serverURL, email string) string {
|
||||
t.Helper()
|
||||
|
||||
// Step 1: Send challenge
|
||||
challengeBody, _ := json.Marshal(map[string]string{"email": email})
|
||||
resp, err := client.Post(serverURL+"/api/auth/challenge", "application/json", bytes.NewReader(challengeBody))
|
||||
if err != nil {
|
||||
t.Fatalf("challenge request failed: %v", err)
|
||||
}
|
||||
resp.Body.Close()
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("challenge expected 200, got %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
// Step 2: Verify with backdoor code
|
||||
verifyBody, _ := json.Marshal(map[string]string{"email": email, "code": "220402"})
|
||||
resp, err = client.Post(serverURL+"/api/auth/verify", "application/json", bytes.NewReader(verifyBody))
|
||||
if err != nil {
|
||||
t.Fatalf("verify request failed: %v", err)
|
||||
}
|
||||
var verifyResp map[string]interface{}
|
||||
json.NewDecoder(resp.Body).Decode(&verifyResp)
|
||||
resp.Body.Close()
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("verify expected 200, got %d: %v", resp.StatusCode, verifyResp)
|
||||
}
|
||||
|
||||
token, ok := verifyResp["token"].(string)
|
||||
if !ok || token == "" {
|
||||
t.Fatal("verify response should contain token")
|
||||
}
|
||||
return token
|
||||
}
|
||||
|
||||
func TestFullFlow(t *testing.T) {
|
||||
// Setup test database
|
||||
tmpFile, err := os.CreateTemp("", "dealspace-integration-test-*.db")
|
||||
if err != nil {
|
||||
t.Fatalf("create temp file: %v", err)
|
||||
|
|
@ -33,11 +87,12 @@ func TestFullFlow(t *testing.T) {
|
|||
jwtSecret := []byte("test-jwt-secret-32-bytes-long!!")
|
||||
|
||||
cfg := &lib.Config{
|
||||
MasterKey: masterKey,
|
||||
JWTSecret: jwtSecret,
|
||||
MasterKey: masterKey,
|
||||
JWTSecret: jwtSecret,
|
||||
Env: "development",
|
||||
BackdoorCode: "220402",
|
||||
}
|
||||
|
||||
// Create test store
|
||||
tmpDir, err := os.MkdirTemp("", "dealspace-store-test")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -45,79 +100,30 @@ func TestFullFlow(t *testing.T) {
|
|||
defer os.RemoveAll(tmpDir)
|
||||
store, _ := lib.NewLocalStore(tmpDir)
|
||||
|
||||
// Create router
|
||||
router := NewRouter(db, cfg, store, nil, nil)
|
||||
server := httptest.NewServer(router)
|
||||
defer server.Close()
|
||||
|
||||
client := &http.Client{}
|
||||
|
||||
// Step 1: POST /api/setup → create admin
|
||||
t.Log("Step 1: Setup admin user")
|
||||
setupBody := map[string]string{
|
||||
"email": "admin@test.com",
|
||||
"name": "Admin User",
|
||||
"password": "SecurePassword123!",
|
||||
}
|
||||
setupJSON, _ := json.Marshal(setupBody)
|
||||
resp, err := client.Post(server.URL+"/api/setup", "application/json", bytes.NewReader(setupJSON))
|
||||
if err != nil {
|
||||
t.Fatalf("setup request failed: %v", err)
|
||||
}
|
||||
if resp.StatusCode != http.StatusCreated {
|
||||
var errResp map[string]string
|
||||
json.NewDecoder(resp.Body).Decode(&errResp)
|
||||
t.Fatalf("setup expected 201, got %d: %v", resp.StatusCode, errResp)
|
||||
}
|
||||
resp.Body.Close()
|
||||
// Create test user directly in DB
|
||||
setupTestUser(t, db, cfg, "admin@test.com", "Admin User")
|
||||
|
||||
// Verify setup cannot be called again
|
||||
resp, _ = client.Post(server.URL+"/api/setup", "application/json", bytes.NewReader(setupJSON))
|
||||
if resp.StatusCode != http.StatusForbidden {
|
||||
t.Errorf("second setup should return 403 Forbidden, got %d", resp.StatusCode)
|
||||
}
|
||||
resp.Body.Close()
|
||||
|
||||
// Step 2: POST /api/auth/login → get token
|
||||
t.Log("Step 2: Login")
|
||||
loginBody := map[string]string{
|
||||
"email": "admin@test.com",
|
||||
"password": "SecurePassword123!",
|
||||
}
|
||||
loginJSON, _ := json.Marshal(loginBody)
|
||||
resp, err = client.Post(server.URL+"/api/auth/login", "application/json", bytes.NewReader(loginJSON))
|
||||
if err != nil {
|
||||
t.Fatalf("login request failed: %v", err)
|
||||
}
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
var errResp map[string]string
|
||||
json.NewDecoder(resp.Body).Decode(&errResp)
|
||||
t.Fatalf("login expected 200, got %d: %v", resp.StatusCode, errResp)
|
||||
}
|
||||
var loginResp map[string]interface{}
|
||||
json.NewDecoder(resp.Body).Decode(&loginResp)
|
||||
resp.Body.Close()
|
||||
|
||||
token, ok := loginResp["token"].(string)
|
||||
if !ok || token == "" {
|
||||
t.Fatal("login response should contain token")
|
||||
}
|
||||
// Step 1: Login with challenge/verify + backdoor
|
||||
t.Log("Step 1: Login via challenge/verify")
|
||||
token := loginWithBackdoor(t, client, server.URL, "admin@test.com")
|
||||
t.Logf("Got token: %s...", token[:20])
|
||||
|
||||
// Wrong password should fail
|
||||
wrongLogin := map[string]string{
|
||||
"email": "admin@test.com",
|
||||
"password": "WrongPassword",
|
||||
}
|
||||
wrongJSON, _ := json.Marshal(wrongLogin)
|
||||
resp, _ = client.Post(server.URL+"/api/auth/login", "application/json", bytes.NewReader(wrongJSON))
|
||||
// Wrong code should fail
|
||||
wrongVerify, _ := json.Marshal(map[string]string{"email": "admin@test.com", "code": "000000"})
|
||||
resp, _ := client.Post(server.URL+"/api/auth/verify", "application/json", bytes.NewReader(wrongVerify))
|
||||
if resp.StatusCode != http.StatusUnauthorized {
|
||||
t.Errorf("wrong password should return 401, got %d", resp.StatusCode)
|
||||
t.Errorf("wrong code should return 401, got %d", resp.StatusCode)
|
||||
}
|
||||
resp.Body.Close()
|
||||
|
||||
// Step 3: GET /api/auth/me → verify user returned
|
||||
t.Log("Step 3: Get current user")
|
||||
// Step 2: GET /api/auth/me
|
||||
t.Log("Step 2: Get current user")
|
||||
req, _ := http.NewRequest("GET", server.URL+"/api/auth/me", nil)
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
resp, err = client.Do(req)
|
||||
|
|
@ -127,23 +133,21 @@ func TestFullFlow(t *testing.T) {
|
|||
if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("me expected 200, got %d", resp.StatusCode)
|
||||
}
|
||||
var meResp map[string]string
|
||||
var meResp map[string]interface{}
|
||||
json.NewDecoder(resp.Body).Decode(&meResp)
|
||||
resp.Body.Close()
|
||||
|
||||
if meResp["email"] != "admin@test.com" {
|
||||
t.Errorf("me response email mismatch: got %s", meResp["email"])
|
||||
}
|
||||
t.Logf("Current user: %s (%s)", meResp["name"], meResp["email"])
|
||||
|
||||
// Step 4: POST /api/projects → create project
|
||||
t.Log("Step 4: Create project")
|
||||
projectBody := map[string]string{
|
||||
// Step 3: POST /api/projects
|
||||
t.Log("Step 3: Create project")
|
||||
projectBody, _ := json.Marshal(map[string]string{
|
||||
"name": "Test Deal Project",
|
||||
"deal_type": "M&A",
|
||||
}
|
||||
projectJSON, _ := json.Marshal(projectBody)
|
||||
req, _ = http.NewRequest("POST", server.URL+"/api/projects", bytes.NewReader(projectJSON))
|
||||
})
|
||||
req, _ = http.NewRequest("POST", server.URL+"/api/projects", bytes.NewReader(projectBody))
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
resp, err = client.Do(req)
|
||||
|
|
@ -165,8 +169,8 @@ func TestFullFlow(t *testing.T) {
|
|||
}
|
||||
t.Logf("Created project: %s", projectID)
|
||||
|
||||
// Step 5: GET /api/projects → verify project listed
|
||||
t.Log("Step 5: List projects")
|
||||
// Step 4: GET /api/projects
|
||||
t.Log("Step 4: List projects")
|
||||
req, _ = http.NewRequest("GET", server.URL+"/api/projects", nil)
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
resp, err = client.Do(req)
|
||||
|
|
@ -183,10 +187,9 @@ func TestFullFlow(t *testing.T) {
|
|||
if len(listResp) < 1 {
|
||||
t.Errorf("expected at least 1 project, got %d", len(listResp))
|
||||
}
|
||||
t.Logf("Found %d projects", len(listResp))
|
||||
|
||||
// Step 6: POST /api/auth/logout → token invalidated
|
||||
t.Log("Step 6: Logout")
|
||||
// Step 5: Logout
|
||||
t.Log("Step 5: Logout")
|
||||
req, _ = http.NewRequest("POST", server.URL+"/api/auth/logout", nil)
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
resp, err = client.Do(req)
|
||||
|
|
@ -198,8 +201,8 @@ func TestFullFlow(t *testing.T) {
|
|||
}
|
||||
resp.Body.Close()
|
||||
|
||||
// Step 7: GET /api/auth/me with old token → 401
|
||||
t.Log("Step 7: Verify token invalidated")
|
||||
// Step 6: Token should be invalid after logout
|
||||
t.Log("Step 6: Verify token invalidated")
|
||||
req, _ = http.NewRequest("GET", server.URL+"/api/auth/me", nil)
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
resp, err = client.Do(req)
|
||||
|
|
@ -265,7 +268,6 @@ func TestUnauthenticatedAccess(t *testing.T) {
|
|||
server := httptest.NewServer(router)
|
||||
defer server.Close()
|
||||
|
||||
// These endpoints require auth
|
||||
endpoints := []struct {
|
||||
method string
|
||||
path string
|
||||
|
|
@ -303,8 +305,10 @@ func TestEntryOperations(t *testing.T) {
|
|||
jwtSecret := []byte("test-secret-32-bytes!!")
|
||||
|
||||
cfg := &lib.Config{
|
||||
MasterKey: masterKey,
|
||||
JWTSecret: jwtSecret,
|
||||
MasterKey: masterKey,
|
||||
JWTSecret: jwtSecret,
|
||||
Env: "development",
|
||||
BackdoorCode: "220402",
|
||||
}
|
||||
|
||||
tmpDir, _ := os.MkdirTemp("", "dealspace-store-entry-test")
|
||||
|
|
@ -317,27 +321,16 @@ func TestEntryOperations(t *testing.T) {
|
|||
|
||||
client := &http.Client{}
|
||||
|
||||
// Setup and login
|
||||
setupBody, _ := json.Marshal(map[string]string{
|
||||
"email": "entry@test.com", "name": "Entry Test", "password": "pass12345678",
|
||||
})
|
||||
client.Post(server.URL+"/api/setup", "application/json", bytes.NewReader(setupBody))
|
||||
|
||||
loginBody, _ := json.Marshal(map[string]string{
|
||||
"email": "entry@test.com", "password": "pass12345678",
|
||||
})
|
||||
resp, _ := client.Post(server.URL+"/api/auth/login", "application/json", bytes.NewReader(loginBody))
|
||||
var loginResp map[string]interface{}
|
||||
json.NewDecoder(resp.Body).Decode(&loginResp)
|
||||
resp.Body.Close()
|
||||
token := loginResp["token"].(string)
|
||||
// Create user and login via challenge/verify with backdoor
|
||||
setupTestUser(t, db, cfg, "entry@test.com", "Entry Test")
|
||||
token := loginWithBackdoor(t, client, server.URL, "entry@test.com")
|
||||
|
||||
// Create project
|
||||
projectBody, _ := json.Marshal(map[string]string{"name": "Entry Test Project"})
|
||||
req, _ := http.NewRequest("POST", server.URL+"/api/projects", bytes.NewReader(projectBody))
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
resp, _ = client.Do(req)
|
||||
resp, _ := client.Do(req)
|
||||
var projectResp map[string]interface{}
|
||||
json.NewDecoder(resp.Body).Decode(&projectResp)
|
||||
resp.Body.Close()
|
||||
|
|
@ -414,7 +407,7 @@ func TestEntryOperations(t *testing.T) {
|
|||
}
|
||||
resp.Body.Close()
|
||||
|
||||
// Verify deleted (should not appear in list)
|
||||
// Verify deleted
|
||||
req, _ = http.NewRequest("GET", server.URL+"/api/projects/"+projectID+"/entries?type=request", nil)
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
resp, _ = client.Do(req)
|
||||
|
|
@ -425,3 +418,57 @@ func TestEntryOperations(t *testing.T) {
|
|||
t.Errorf("expected 0 entries after delete, got %d", len(entries))
|
||||
}
|
||||
}
|
||||
|
||||
func TestChallengeVerifyFlow(t *testing.T) {
|
||||
tmpFile, _ := os.CreateTemp("", "dealspace-challenge-test-*.db")
|
||||
tmpFile.Close()
|
||||
defer os.Remove(tmpFile.Name())
|
||||
|
||||
db, _ := lib.OpenDB(tmpFile.Name(), "../migrations/001_initial.sql")
|
||||
defer db.Close()
|
||||
|
||||
cfg := &lib.Config{
|
||||
MasterKey: make([]byte, 32),
|
||||
JWTSecret: []byte("test-jwt-secret-32-bytes-long!!"),
|
||||
Env: "development",
|
||||
BackdoorCode: "220402",
|
||||
}
|
||||
|
||||
router := NewRouter(db, cfg, nil, nil, nil)
|
||||
server := httptest.NewServer(router)
|
||||
defer server.Close()
|
||||
|
||||
client := &http.Client{}
|
||||
|
||||
// Challenge for non-existent user should still return 200 (no info leak)
|
||||
body, _ := json.Marshal(map[string]string{"email": "nobody@test.com"})
|
||||
resp, _ := client.Post(server.URL+"/api/auth/challenge", "application/json", bytes.NewReader(body))
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Errorf("challenge for unknown email should return 200, got %d", resp.StatusCode)
|
||||
}
|
||||
resp.Body.Close()
|
||||
|
||||
// Verify for non-existent user should fail
|
||||
body, _ = json.Marshal(map[string]string{"email": "nobody@test.com", "code": "220402"})
|
||||
resp, _ = client.Post(server.URL+"/api/auth/verify", "application/json", bytes.NewReader(body))
|
||||
if resp.StatusCode != http.StatusUnauthorized {
|
||||
t.Errorf("verify for unknown user should return 401, got %d", resp.StatusCode)
|
||||
}
|
||||
resp.Body.Close()
|
||||
|
||||
// Create user and test backdoor login
|
||||
setupTestUser(t, db, cfg, "test@test.com", "Test User")
|
||||
token := loginWithBackdoor(t, client, server.URL, "test@test.com")
|
||||
if token == "" {
|
||||
t.Fatal("backdoor login should return token")
|
||||
}
|
||||
|
||||
// Verify the token works
|
||||
req, _ := http.NewRequest("GET", server.URL+"/api/auth/me", nil)
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
resp, _ = client.Do(req)
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Errorf("me with valid token should return 200, got %d", resp.StatusCode)
|
||||
}
|
||||
resp.Body.Close()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@ func NewRouter(db *lib.DB, cfg *lib.Config, store lib.ObjectStore, websiteFS fs.
|
|||
r.Post("/api/chat", h.ChatHandler)
|
||||
r.Options("/api/chat", h.ChatHandler)
|
||||
|
||||
// Auth endpoints (unauthenticated)
|
||||
r.Post("/api/auth/login", h.Login)
|
||||
r.Post("/api/setup", h.Setup)
|
||||
// Auth endpoints (unauthenticated — email challenge OTP flow)
|
||||
r.Post("/api/auth/challenge", h.Challenge)
|
||||
r.Post("/api/auth/verify", h.Verify)
|
||||
|
||||
// Auth endpoints (need token for logout/me)
|
||||
r.Group(func(r chi.Router) {
|
||||
|
|
@ -66,6 +66,12 @@ func NewRouter(db *lib.DB, cfg *lib.Config, store lib.ObjectStore, websiteFS fs.
|
|||
// File upload/download
|
||||
r.Post("/projects/{projectID}/objects", h.UploadObject)
|
||||
r.Get("/projects/{projectID}/objects/{objectID}", h.DownloadObject)
|
||||
|
||||
// Super admin endpoints
|
||||
r.Get("/admin/users", h.AdminListUsers)
|
||||
r.Get("/admin/projects", h.AdminListProjects)
|
||||
r.Get("/admin/audit", h.AdminAuditLog)
|
||||
r.Post("/admin/impersonate", h.AdminImpersonate)
|
||||
})
|
||||
|
||||
// Portal app routes (serve templates, auth checked client-side via JS)
|
||||
|
|
@ -73,12 +79,15 @@ func NewRouter(db *lib.DB, cfg *lib.Config, store lib.ObjectStore, websiteFS fs.
|
|||
http.Redirect(w, r, "/app/tasks", http.StatusFound)
|
||||
})
|
||||
r.Get("/app/login", h.ServeLogin)
|
||||
r.Get("/app/setup", h.ServeSetup)
|
||||
r.Get("/app/tasks", h.ServeAppTasks)
|
||||
r.Get("/app/projects", h.ServeAppProjects)
|
||||
r.Get("/app/projects/{id}", h.ServeAppProject)
|
||||
r.Get("/app/requests/{id}", h.ServeAppRequest)
|
||||
|
||||
// Admin UI (super admin only, auth checked client-side)
|
||||
r.Get("/admin", h.ServeAdmin)
|
||||
r.Get("/admin/*", h.ServeAdmin)
|
||||
|
||||
// Marketing website (embedded static files) — serves at root, must be last
|
||||
if websiteFS != nil {
|
||||
websiteHandler := http.FileServerFS(websiteFS)
|
||||
|
|
|
|||
|
|
@ -37,6 +37,14 @@ func main() {
|
|||
log.Fatalf("object store: %v", err)
|
||||
}
|
||||
|
||||
// Always seed super admin accounts on startup
|
||||
seedSuperAdmins(db)
|
||||
|
||||
// Seed demo data if SEED_DEMO=true
|
||||
if os.Getenv("SEED_DEMO") == "true" {
|
||||
seedDemoData(db, cfg)
|
||||
}
|
||||
|
||||
// Website FS: embedded files under website/
|
||||
websiteFS, err := fs.Sub(websiteEmbed, "website")
|
||||
if err != nil {
|
||||
|
|
@ -94,14 +102,23 @@ func loadConfig() (*lib.Config, error) {
|
|||
return nil, fmt.Errorf("derive jwt secret: %w", err)
|
||||
}
|
||||
|
||||
return &lib.Config{
|
||||
MasterKey: masterKey,
|
||||
DBPath: dbPath,
|
||||
StorePath: storePath,
|
||||
Port: port,
|
||||
Env: env,
|
||||
JWTSecret: jwtSecret,
|
||||
}, nil
|
||||
// Backdoor OTP code for dev/testing
|
||||
backdoorCode := os.Getenv("BACKDOOR_CODE")
|
||||
|
||||
cfg := &lib.Config{
|
||||
MasterKey: masterKey,
|
||||
DBPath: dbPath,
|
||||
StorePath: storePath,
|
||||
Port: port,
|
||||
Env: env,
|
||||
JWTSecret: jwtSecret,
|
||||
BackdoorCode: backdoorCode,
|
||||
}
|
||||
|
||||
// Initialize mailer
|
||||
cfg.Mailer = lib.NewMailer(cfg)
|
||||
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func loadDotEnv() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,244 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/mish/dealspace/lib"
|
||||
)
|
||||
|
||||
// seedSuperAdmins ensures the super admin accounts always exist.
|
||||
// Called on every startup (not just when SEED_DEMO=true).
|
||||
func seedSuperAdmins(db *lib.DB) {
|
||||
type admin struct {
|
||||
email string
|
||||
name string
|
||||
orgID string
|
||||
orgName string
|
||||
}
|
||||
admins := []admin{
|
||||
{"michael@muskepo.com", "Michael", "muskepo", "Muskepo"},
|
||||
{"johan@jongsma.me", "Johan", "muskepo", "Muskepo"},
|
||||
}
|
||||
|
||||
for _, a := range admins {
|
||||
existing, err := lib.UserByEmail(db, a.email)
|
||||
if err != nil {
|
||||
log.Printf("seed: check %s: %v", a.email, err)
|
||||
continue
|
||||
}
|
||||
if existing != nil {
|
||||
// User exists, ensure they have super_admin access
|
||||
ensureSuperAdmin(db, existing.UserID)
|
||||
continue
|
||||
}
|
||||
|
||||
now := time.Now().UnixMilli()
|
||||
userID := uuid.New().String()
|
||||
user := &lib.User{
|
||||
UserID: userID,
|
||||
Email: a.email,
|
||||
Name: a.name,
|
||||
Password: "", // passwordless auth — no password needed
|
||||
OrgID: a.orgID,
|
||||
OrgName: a.orgName,
|
||||
Active: true,
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
}
|
||||
if err := lib.UserCreate(db, user); err != nil {
|
||||
log.Printf("seed: create %s: %v", a.email, err)
|
||||
continue
|
||||
}
|
||||
log.Printf("seed: created super admin %s", a.email)
|
||||
ensureSuperAdmin(db, userID)
|
||||
}
|
||||
}
|
||||
|
||||
// ensureSuperAdmin grants super_admin role on the special "*" project (platform-wide).
|
||||
func ensureSuperAdmin(db *lib.DB, userID string) {
|
||||
// Check if already has super_admin
|
||||
isSuperAdmin, _ := lib.IsSuperAdmin(db, userID)
|
||||
if isSuperAdmin {
|
||||
return
|
||||
}
|
||||
|
||||
now := time.Now().UnixMilli()
|
||||
access := &lib.Access{
|
||||
ID: uuid.New().String(),
|
||||
ProjectID: "*", // platform-wide
|
||||
UserID: userID,
|
||||
Role: lib.RoleSuperAdmin,
|
||||
Ops: "rwdm",
|
||||
CanGrant: true,
|
||||
GrantedBy: "system",
|
||||
GrantedAt: now,
|
||||
}
|
||||
if err := lib.AccessGrant(db, access); err != nil {
|
||||
log.Printf("seed: grant super_admin to %s: %v", userID, err)
|
||||
return
|
||||
}
|
||||
log.Printf("seed: granted super_admin to %s", userID)
|
||||
}
|
||||
|
||||
func seedDemoData(db *lib.DB, cfg *lib.Config) {
|
||||
count, err := lib.UserCount(db)
|
||||
if err != nil {
|
||||
log.Printf("seed: cannot check user count: %v", err)
|
||||
return
|
||||
}
|
||||
// Only seed demo data if no users exist (besides super admins)
|
||||
if count > 2 {
|
||||
log.Printf("seed: users already exist, skipping demo data")
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("seed: creating demo data...")
|
||||
now := time.Now().UnixMilli()
|
||||
|
||||
// Create demo user: admin@demo.com (passwordless — no password needed)
|
||||
adminID := uuid.New().String()
|
||||
admin := &lib.User{
|
||||
UserID: adminID,
|
||||
Email: "admin@demo.com",
|
||||
Name: "Demo Admin",
|
||||
Password: "",
|
||||
OrgID: "demo-org",
|
||||
OrgName: "Demo Investment Bank",
|
||||
Active: true,
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
}
|
||||
if err := lib.UserCreate(db, admin); err != nil {
|
||||
log.Printf("seed: create admin: %v", err)
|
||||
return
|
||||
}
|
||||
log.Printf("seed: created admin user admin@demo.com")
|
||||
|
||||
// Create demo project: TechCorp Acquisition
|
||||
projectID := uuid.New().String()
|
||||
projectData := `{"name":"TechCorp Acquisition","deal_type":"sell_side","status":"active"}`
|
||||
|
||||
key, err := lib.DeriveProjectKey(cfg.MasterKey, projectID)
|
||||
if err != nil {
|
||||
log.Printf("seed: derive key: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
summaryPacked, _ := lib.Pack(key, "TechCorp Acquisition")
|
||||
dataPacked, _ := lib.Pack(key, projectData)
|
||||
|
||||
_, err = db.Conn.Exec(
|
||||
`INSERT INTO entries (entry_id, project_id, parent_id, type, depth,
|
||||
search_key, search_key2, summary, data, stage,
|
||||
assignee_id, return_to_id, origin_id,
|
||||
version, key_version, created_at, updated_at, created_by)
|
||||
VALUES (?,?,?,?,?, ?,?,?,?,?, ?,?,?, ?,?,?,?,?)`,
|
||||
projectID, projectID, "", lib.TypeProject, 0,
|
||||
nil, nil, summaryPacked, dataPacked, lib.StagePreDataroom,
|
||||
"", "", "",
|
||||
1, 1, now, now, adminID,
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("seed: create project: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Grant ib_admin access
|
||||
accessID := uuid.New().String()
|
||||
_, err = db.Conn.Exec(
|
||||
`INSERT INTO access (id, project_id, workstream_id, user_id, role, ops, can_grant, granted_by, granted_at)
|
||||
VALUES (?,?,?,?,?,?,?,?,?)`,
|
||||
accessID, projectID, nil, adminID, lib.RoleIBAdmin, "rwdm", 1, adminID, now,
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("seed: grant access: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Also grant super admins access to the demo project
|
||||
grantSuperAdminsToProject(db, projectID, now)
|
||||
|
||||
// Create workstreams: Finance, Legal, IT
|
||||
workstreams := []string{"Finance", "Legal", "IT"}
|
||||
wsIDs := make([]string, len(workstreams))
|
||||
for i, name := range workstreams {
|
||||
wsID := uuid.New().String()
|
||||
wsIDs[i] = wsID
|
||||
wsSummary, _ := lib.Pack(key, name)
|
||||
wsData, _ := lib.Pack(key, fmt.Sprintf(`{"name":"%s"}`, name))
|
||||
|
||||
_, err = db.Conn.Exec(
|
||||
`INSERT INTO entries (entry_id, project_id, parent_id, type, depth,
|
||||
search_key, search_key2, summary, data, stage,
|
||||
assignee_id, return_to_id, origin_id,
|
||||
version, key_version, created_at, updated_at, created_by)
|
||||
VALUES (?,?,?,?,?, ?,?,?,?,?, ?,?,?, ?,?,?,?,?)`,
|
||||
wsID, projectID, projectID, lib.TypeWorkstream, 1,
|
||||
nil, nil, wsSummary, wsData, lib.StagePreDataroom,
|
||||
"", "", "",
|
||||
1, 1, now, now, adminID,
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("seed: create workstream %s: %v", name, err)
|
||||
}
|
||||
}
|
||||
log.Printf("seed: created 3 workstreams")
|
||||
|
||||
// Create 5 sample requests in Finance workstream
|
||||
type seedReq struct {
|
||||
ref, title, body, priority, due string
|
||||
}
|
||||
requests := []seedReq{
|
||||
{"FIN-001", "Audited financial statements FY2023-2025", "Provide complete audited financial statements for fiscal years 2023, 2024, and 2025.", "high", "2026-03-15"},
|
||||
{"FIN-002", "Revenue breakdown by customer (top 20)", "Break down revenue by top 20 customers showing percentage of total revenue.", "high", "2026-03-15"},
|
||||
{"FIN-003", "Cap table and option pool details", "Provide current capitalization table including all share classes and warrants.", "normal", "2026-03-20"},
|
||||
{"FIN-004", "AR/AP aging reports", "Accounts receivable and accounts payable aging reports as of most recent month-end.", "normal", "2026-03-25"},
|
||||
{"FIN-005", "Revenue recognition policy", "Document your revenue recognition policy including any changes in past 3 fiscal years.", "low", "2026-03-30"},
|
||||
}
|
||||
|
||||
for _, req := range requests {
|
||||
reqID := uuid.New().String()
|
||||
reqData := fmt.Sprintf(`{"title":"%s","body":"%s","priority":"%s","due_date":"%s","status":"open","ref":"%s"}`,
|
||||
req.title, req.body, req.priority, req.due, req.ref)
|
||||
|
||||
reqSummary, _ := lib.Pack(key, req.title)
|
||||
reqDataPacked, _ := lib.Pack(key, reqData)
|
||||
|
||||
_, err = db.Conn.Exec(
|
||||
`INSERT INTO entries (entry_id, project_id, parent_id, type, depth,
|
||||
search_key, search_key2, summary, data, stage,
|
||||
assignee_id, return_to_id, origin_id,
|
||||
version, key_version, created_at, updated_at, created_by)
|
||||
VALUES (?,?,?,?,?, ?,?,?,?,?, ?,?,?, ?,?,?,?,?)`,
|
||||
reqID, projectID, wsIDs[0], lib.TypeRequest, 3,
|
||||
nil, nil, reqSummary, reqDataPacked, lib.StagePreDataroom,
|
||||
adminID, "", "",
|
||||
1, 1, now, now, adminID,
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("seed: create request %s: %v", req.ref, err)
|
||||
}
|
||||
}
|
||||
log.Printf("seed: created 5 sample requests in Finance workstream")
|
||||
log.Printf("seed: done! Login with admin@demo.com, michael@muskepo.com, or johan@jongsma.me")
|
||||
}
|
||||
|
||||
// grantSuperAdminsToProject gives super admin users ib_admin access on a project.
|
||||
func grantSuperAdminsToProject(db *lib.DB, projectID string, now int64) {
|
||||
emails := []string{"michael@muskepo.com", "johan@jongsma.me"}
|
||||
for _, email := range emails {
|
||||
user, err := lib.UserByEmail(db, email)
|
||||
if err != nil || user == nil {
|
||||
continue
|
||||
}
|
||||
accessID := uuid.New().String()
|
||||
_, _ = db.Conn.Exec(
|
||||
`INSERT OR IGNORE INTO access (id, project_id, workstream_id, user_id, role, ops, can_grant, granted_by, granted_at)
|
||||
VALUES (?,?,?,?,?,?,?,?,?)`,
|
||||
accessID, projectID, nil, user.UserID, lib.RoleIBAdmin, "rwdm", 1, "system", now,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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 = `
|
||||
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z"/>
|
||||
</svg>
|
||||
`;
|
||||
|
||||
// Chat panel
|
||||
const panel = document.createElement('div');
|
||||
panel.id = 'aria-chat-panel';
|
||||
panel.innerHTML = `
|
||||
<div id="aria-chat-header">
|
||||
<div id="aria-avatar"><span>A</span></div>
|
||||
<div id="aria-header-text">
|
||||
<h3>Aria</h3>
|
||||
<p>Dealspace Assistant</p>
|
||||
</div>
|
||||
<button id="aria-close-btn" aria-label="Close chat">×</button>
|
||||
</div>
|
||||
<div id="aria-chat-messages"></div>
|
||||
<div id="aria-chat-input">
|
||||
<input type="text" id="aria-message-input" placeholder="Ask about Dealspace..." autocomplete="off">
|
||||
<button id="aria-send-btn" aria-label="Send message">
|
||||
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
|
||||
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 = '<span></span><span></span><span></span>';
|
||||
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();
|
||||
}
|
||||
})();
|
||||
|
|
@ -1,376 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Data Processing Agreement — Dealspace</title>
|
||||
<meta name="description" content="GDPR Article 28 compliant Data Processing Agreement for Dealspace M&A platform.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Data Processing Agreement — Dealspace">
|
||||
<meta property="og:description" content="GDPR Article 28 compliant Data Processing Agreement for Dealspace M&A platform.">
|
||||
<meta property="og:url" content="https://muskepo.com/dpa">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Data Processing Agreement — Dealspace">
|
||||
<meta name="twitter:description" content="GDPR Article 28 compliant Data Processing Agreement for Dealspace M&A platform.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="pt-32 pb-24 px-6">
|
||||
<div class="max-w-3xl mx-auto">
|
||||
|
||||
<div class="mb-12">
|
||||
<h1 class="text-4xl font-bold mb-4">Data Processing Agreement</h1>
|
||||
<p class="text-gray-400">Last updated: February 28, 2026</p>
|
||||
</div>
|
||||
|
||||
<div class="prose prose-invert max-w-none">
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<p class="text-lg text-gray-300 leading-relaxed m-0">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">1. Definitions</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">"Personal Data"</strong> means any information relating to an identified or identifiable natural person, as defined in GDPR Article 4(1).
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">"Processing"</strong> means any operation performed on Personal Data, as defined in GDPR Article 4(2).
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">"Sub-processor"</strong> means any third party engaged by the Processor to process Personal Data on behalf of the Controller.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">"Data Subjects"</strong> means the individuals whose Personal Data is processed under this DPA.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
<strong class="text-white">"Confidential M&A Transaction Data"</strong> means all documents, communications, and information uploaded to or generated within Dealspace in connection with mergers, acquisitions, due diligence, or related transactions.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">2. Scope of Processing</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.1 Subject Matter</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.2 Nature and Purpose</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Processing includes storage, retrieval, transmission, encryption, watermarking, and deletion of Personal Data as necessary to provide the services described in the Terms of Service.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.3 Categories of Data Subjects</h3>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Account holders and authorized users</li>
|
||||
<li>Deal participants (sellers, buyers, advisors, and their personnel)</li>
|
||||
<li>Individuals whose data is contained in uploaded documents</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.4 Types of Personal Data</h3>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Contact information (name, email, phone, organization)</li>
|
||||
<li>Account credentials and authentication data</li>
|
||||
<li>Activity logs (access times, IP addresses, actions taken)</li>
|
||||
<li>Personal data contained in uploaded M&A transaction documents</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.5 Duration</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Processing continues for the duration of the service agreement plus any retention period required by law or agreed with the Controller.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">3. Processor Obligations</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.1 Processing Instructions</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.2 Confidentiality</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
The Processor shall ensure that persons authorized to process Personal Data have committed to confidentiality or are under an appropriate statutory obligation of confidentiality.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.3 Security Measures</h3>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
The Processor implements technical and organizational measures to ensure a level of security appropriate to the risk, including:
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>FIPS 140-3 validated encryption of Personal Data at rest and in transit</li>
|
||||
<li>Per-deal encryption keys with secure key management</li>
|
||||
<li>Multi-factor authentication for all system access</li>
|
||||
<li>Role-based access controls with least-privilege principles</li>
|
||||
<li>Continuous monitoring and intrusion detection</li>
|
||||
<li>Regular security assessments and penetration testing</li>
|
||||
<li>Incident response procedures</li>
|
||||
<li>Business continuity and disaster recovery capabilities</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.4 Sub-processing</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.5 Data Subject Rights</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.6 Data Protection Impact Assessments</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
The Processor shall assist the Controller in conducting data protection impact assessments and prior consultations with supervisory authorities where required.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.7 Deletion and Return</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.8 Audit Rights</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">4. Controller Obligations</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">The Controller warrants that:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>It has a lawful basis for processing Personal Data and transferring it to the Processor</li>
|
||||
<li>Data Subjects have been informed of the processing in accordance with GDPR requirements</li>
|
||||
<li>Instructions given to the Processor comply with applicable data protection laws</li>
|
||||
<li>It will promptly notify the Processor of any changes to processing instructions</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">5. Data Breach Notification</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
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:
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Description of the nature of the breach</li>
|
||||
<li>Categories and approximate number of Data Subjects affected</li>
|
||||
<li>Categories and approximate number of records concerned</li>
|
||||
<li>Likely consequences of the breach</li>
|
||||
<li>Measures taken or proposed to address the breach</li>
|
||||
</ul>
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
The Processor shall cooperate with the Controller in investigating and remediating the breach and in meeting notification obligations to supervisory authorities and Data Subjects.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">6. International Transfers</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
The Processor may transfer Personal Data outside the European Economic Area only where appropriate safeguards are in place, including:
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Standard Contractual Clauses approved by the European Commission</li>
|
||||
<li>Binding Corporate Rules approved by a supervisory authority</li>
|
||||
<li>Adequacy decisions by the European Commission</li>
|
||||
<li>Other mechanisms permitted under GDPR Chapter V</li>
|
||||
</ul>
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
The current list of data processing locations and applicable transfer mechanisms is available upon request.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">7. Sub-processors</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
The Controller grants general authorization for the use of Sub-processors subject to the requirements of Section 3.4. Current Sub-processors include:
|
||||
</p>
|
||||
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full text-gray-400 text-sm">
|
||||
<thead>
|
||||
<tr class="border-b border-white/10">
|
||||
<th class="text-left py-3 text-white">Sub-processor</th>
|
||||
<th class="text-left py-3 text-white">Purpose</th>
|
||||
<th class="text-left py-3 text-white">Location</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="border-b border-white/10">
|
||||
<td class="py-3">Infrastructure Provider</td>
|
||||
<td class="py-3">Cloud infrastructure</td>
|
||||
<td class="py-3">EU / US</td>
|
||||
</tr>
|
||||
<tr class="border-b border-white/10">
|
||||
<td class="py-3">Stripe, Inc.</td>
|
||||
<td class="py-3">Payment processing</td>
|
||||
<td class="py-3">US</td>
|
||||
</tr>
|
||||
<tr class="border-b border-white/10">
|
||||
<td class="py-3">AI Embedding Provider</td>
|
||||
<td class="py-3">Document matching (zero retention)</td>
|
||||
<td class="py-3">US</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
The Controller will be notified of Sub-processor changes via email at least 30 days in advance, with the opportunity to object.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">8. Certifications and Compliance</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
The Processor maintains the following certifications and compliance measures:
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li><strong class="text-white">SOC 2 Type II</strong> — Annual audit of security, availability, and confidentiality controls</li>
|
||||
<li><strong class="text-white">ISO 27001</strong> — Information Security Management System certification</li>
|
||||
<li><strong class="text-white">FIPS 140-3</strong> — Use of validated cryptographic modules for encryption</li>
|
||||
<li><strong class="text-white">GDPR</strong> — Compliance with EU General Data Protection Regulation</li>
|
||||
</ul>
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
Copies of relevant certifications and audit reports are available to Enterprise customers under NDA.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">9. Liability</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">10. Term and Termination</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">11. Governing Law</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
This DPA is governed by the laws of the Netherlands. The competent courts of Amsterdam have exclusive jurisdiction over disputes arising from this DPA.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Contact</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
Data Protection Officer:<br>
|
||||
<a href="mailto:privacy@dealspace.io" class="text-gold hover:text-gold-light">privacy@dealspace.io</a>
|
||||
</p>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
For Enterprise customers requiring executed DPAs or custom terms, contact <a href="mailto:legal@dealspace.io" class="text-gold hover:text-gold-light">legal@dealspace.io</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
<li><a href="soc2.html" class="hover:text-white transition-colors">SOC 2</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@dealspace.io" class="hover:text-white transition-colors">sales@dealspace.io</a></li>
|
||||
<li><a href="mailto:security@dealspace.io" class="hover:text-white transition-colors">security@dealspace.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,604 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Features — Dealspace</title>
|
||||
<meta name="description" content="Request-centric workflow, AI matching, role-based access, and enterprise security. See what makes Dealspace different.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Features — Dealspace">
|
||||
<meta property="og:description" content="Request-centric workflow, AI matching, role-based access, and enterprise security. See what makes Dealspace different.">
|
||||
<meta property="og:url" content="https://muskepo.com/features">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Features — Dealspace">
|
||||
<meta name="twitter:description" content="Request-centric workflow, AI matching, role-based access, and enterprise security. See what makes Dealspace different.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
html { scroll-behavior: smooth; }
|
||||
.gradient-text {
|
||||
background: linear-gradient(135deg, #C9A84C 0%, #d4b85f 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-white font-medium">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
<button class="md:hidden text-white" aria-label="Toggle mobile menu" onclick="document.getElementById('mobile-menu').classList.toggle('hidden')">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="mobile-menu" class="hidden md:hidden pt-4 pb-2 space-y-3">
|
||||
<a href="features.html" class="block text-white font-medium">Features</a>
|
||||
<a href="security.html" class="block text-gray-300 hover:text-white">Security</a>
|
||||
<a href="pricing.html" class="block text-gray-300 hover:text-white">Pricing</a>
|
||||
<a href="#" class="block text-gray-300 hover:text-white">Sign In</a>
|
||||
<a href="index.html#demo" class="inline-block bg-gold text-navy font-semibold px-5 py-2.5 rounded-lg mt-2">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="pt-32 pb-16 px-6 border-b border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-6">
|
||||
Features Built for <span class="gradient-text">Real Deals</span>
|
||||
</h1>
|
||||
<p class="text-xl text-gray-400 max-w-2xl mx-auto">
|
||||
Not another document repository with features bolted on. Dealspace is designed from first principles for how M&A transactions actually work.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Feature 1: Request-Centric -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div>
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Core Architecture</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Request-Centric Workflow</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
<ul class="space-y-4">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Structured request lists</span>
|
||||
<p class="text-gray-400 mt-1">Issue specific, trackable requests to the seller. No ambiguity about what's needed.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Status at a glance</span>
|
||||
<p class="text-gray-400 mt-1">Open, assigned, answered, vetted, published. Know exactly where every request stands.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Threaded communication</span>
|
||||
<p class="text-gray-400 mt-1">Every request has a complete thread — comments, clarifications, status changes. Full context, always.</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="relative">
|
||||
<!-- Request Flow SVG -->
|
||||
<svg viewBox="0 0 500 400" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<filter id="glow1" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feGaussianBlur stdDeviation="4" result="blur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="blur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect x="30" y="20" width="440" height="360" rx="16" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
|
||||
<!-- Header -->
|
||||
<rect x="30" y="20" width="440" height="50" rx="16" fill="#2B4680"/>
|
||||
<rect x="30" y="50" width="440" height="20" fill="#2B4680"/>
|
||||
<text x="50" y="52" fill="white" font-size="14" font-weight="600">Request List — Project Alpha</text>
|
||||
|
||||
<!-- Request items -->
|
||||
<g>
|
||||
<rect x="50" y="90" width="400" height="60" rx="8" fill="#0F1B35" stroke="#2B4680" stroke-width="1"/>
|
||||
<circle cx="75" cy="120" r="12" fill="#22c55e"/>
|
||||
<path d="M70 120 L73 123 L80 116" stroke="white" stroke-width="2" fill="none"/>
|
||||
<text x="100" y="115" fill="white" font-size="13" font-weight="500">FIN-001: Audited financials FY2024</text>
|
||||
<text x="100" y="135" fill="#9CA3AF" font-size="11">Published · 3 documents</text>
|
||||
<rect x="380" y="108" width="55" height="24" rx="4" fill="#22c55e20"/>
|
||||
<text x="407" y="124" text-anchor="middle" fill="#22c55e" font-size="10" font-weight="500">PUBLISHED</text>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="50" y="160" width="400" height="60" rx="8" fill="#0F1B35" stroke="#C9A84C" stroke-width="2"/>
|
||||
<circle cx="75" cy="190" r="12" fill="#C9A84C"/>
|
||||
<text x="75" y="194" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">!</text>
|
||||
<text x="100" y="185" fill="white" font-size="13" font-weight="500">FIN-002: Revenue breakdown by segment</text>
|
||||
<text x="100" y="205" fill="#9CA3AF" font-size="11">Pending review · Uploaded 2h ago</text>
|
||||
<rect x="380" y="178" width="55" height="24" rx="4" fill="#C9A84C20"/>
|
||||
<text x="407" y="194" text-anchor="middle" fill="#C9A84C" font-size="10" font-weight="500">REVIEW</text>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="50" y="230" width="400" height="60" rx="8" fill="#0F1B35" stroke="#2B4680" stroke-width="1"/>
|
||||
<circle cx="75" cy="260" r="12" fill="#3b82f6"/>
|
||||
<text x="75" y="264" text-anchor="middle" fill="white" font-size="10" font-weight="bold">→</text>
|
||||
<text x="100" y="255" fill="white" font-size="13" font-weight="500">FIN-003: Cap table and equity structure</text>
|
||||
<text x="100" y="275" fill="#9CA3AF" font-size="11">Assigned to CFO · Due Mar 15</text>
|
||||
<rect x="380" y="248" width="55" height="24" rx="4" fill="#3b82f620"/>
|
||||
<text x="407" y="264" text-anchor="middle" fill="#3b82f6" font-size="10" font-weight="500">ASSIGNED</text>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="50" y="300" width="400" height="60" rx="8" fill="#0F1B35" stroke="#2B4680" stroke-width="1"/>
|
||||
<circle cx="75" cy="330" r="12" fill="#6b7280" stroke="#9CA3AF" stroke-width="1"/>
|
||||
<text x="100" y="325" fill="white" font-size="13" font-weight="500">FIN-004: Debt schedule and covenants</text>
|
||||
<text x="100" y="345" fill="#9CA3AF" font-size="11">Open · High priority</text>
|
||||
<rect x="380" y="318" width="55" height="24" rx="4" fill="#6b728020"/>
|
||||
<text x="407" y="334" text-anchor="middle" fill="#6b7280" font-size="10" font-weight="500">OPEN</text>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Feature 2: Role-Based -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div class="order-2 lg:order-1">
|
||||
<!-- Role-Based Access SVG -->
|
||||
<svg viewBox="0 0 500 400" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="roleGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" stop-color="#2B4680"/>
|
||||
<stop offset="100%" stop-color="#1a2847"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Central platform -->
|
||||
<ellipse cx="250" cy="200" rx="100" ry="40" fill="url(#roleGrad)" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="205" text-anchor="middle" fill="white" font-size="14" font-weight="600">Dealspace</text>
|
||||
|
||||
<!-- IB Admin - sees everything -->
|
||||
<g>
|
||||
<circle cx="250" cy="60" r="40" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="55" text-anchor="middle" fill="white" font-size="11" font-weight="600">IB Admin</text>
|
||||
<text x="250" y="70" text-anchor="middle" fill="#9CA3AF" font-size="9">Full access</text>
|
||||
<line x1="250" y1="100" x2="250" y2="160" stroke="#C9A84C" stroke-width="2"/>
|
||||
</g>
|
||||
|
||||
<!-- Accountant - sees their tasks -->
|
||||
<g>
|
||||
<circle cx="80" cy="280" r="35" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="80" y="275" text-anchor="middle" fill="white" font-size="10" font-weight="500">Accountant</text>
|
||||
<text x="80" y="290" text-anchor="middle" fill="#9CA3AF" font-size="9">3 tasks</text>
|
||||
<line x1="155" y1="215" x2="110" y2="250" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
|
||||
<!-- CFO - sees Finance workstream -->
|
||||
<g>
|
||||
<circle cx="180" cy="340" r="35" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="180" y="335" text-anchor="middle" fill="white" font-size="10" font-weight="500">CFO</text>
|
||||
<text x="180" y="350" text-anchor="middle" fill="#9CA3AF" font-size="9">Finance</text>
|
||||
<line x1="200" y1="235" x2="185" y2="305" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
|
||||
<!-- Legal - sees Legal workstream -->
|
||||
<g>
|
||||
<circle cx="320" cy="340" r="35" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="320" y="335" text-anchor="middle" fill="white" font-size="10" font-weight="500">GC</text>
|
||||
<text x="320" y="350" text-anchor="middle" fill="#9CA3AF" font-size="9">Legal</text>
|
||||
<line x1="300" y1="235" x2="315" y2="305" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
|
||||
<!-- Buyer - sees data room only -->
|
||||
<g>
|
||||
<circle cx="420" cy="280" r="35" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="420" y="275" text-anchor="middle" fill="white" font-size="10" font-weight="500">Buyer</text>
|
||||
<text x="420" y="290" text-anchor="middle" fill="#9CA3AF" font-size="9">Data room</text>
|
||||
<line x1="345" y1="215" x2="390" y2="250" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
|
||||
<!-- Task counts -->
|
||||
<g fill="#C9A84C">
|
||||
<circle cx="105" cy="255" r="10"/>
|
||||
<text x="105" y="259" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">3</text>
|
||||
</g>
|
||||
<g fill="#C9A84C">
|
||||
<circle cx="195" cy="310" r="10"/>
|
||||
<text x="195" y="314" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">12</text>
|
||||
</g>
|
||||
<g fill="#C9A84C">
|
||||
<circle cx="305" cy="310" r="10"/>
|
||||
<text x="305" y="314" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">8</text>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="order-1 lg:order-2">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Access Control</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Role-Based Simplicity</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
<ul class="space-y-4">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Workstream-based access</span>
|
||||
<p class="text-gray-400 mt-1">Finance team sees Finance. Legal sees Legal. No information overload.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Task inbox for contributors</span>
|
||||
<p class="text-gray-400 mt-1">Assignees see only their tasks. Complete one, it routes to the next person automatically.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Data room separation</span>
|
||||
<p class="text-gray-400 mt-1">Buyers only see published answers. Internal routing is invisible to external parties.</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Feature 3: AI Matching -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div>
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Intelligence</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">AI Matching with Human Confirmation</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
<ul class="space-y-4">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Semantic search</span>
|
||||
<p class="text-gray-400 mt-1">Not just keyword matching. AI understands that "revenue breakdown" and "sales by segment" are the same question.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Human in the loop</span>
|
||||
<p class="text-gray-400 mt-1">AI suggests, human confirms. No answer goes out without explicit approval.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Zero retention</span>
|
||||
<p class="text-gray-400 mt-1">Deal data never trains AI models. Private data stays private.</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="relative">
|
||||
<!-- AI Matching SVG -->
|
||||
<svg viewBox="0 0 500 400" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Incoming questions -->
|
||||
<g>
|
||||
<rect x="20" y="40" width="180" height="50" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="30" y="60" fill="#9CA3AF" font-size="10">Buyer A asks:</text>
|
||||
<text x="30" y="78" fill="white" font-size="11">"Revenue by segment?"</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="20" y="100" width="180" height="50" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="30" y="120" fill="#9CA3AF" font-size="10">Buyer B asks:</text>
|
||||
<text x="30" y="138" fill="white" font-size="11">"Sales breakdown?"</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="20" y="160" width="180" height="50" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="30" y="180" fill="#9CA3AF" font-size="10">Buyer C asks:</text>
|
||||
<text x="30" y="198" fill="white" font-size="11">"Segment performance?"</text>
|
||||
</g>
|
||||
|
||||
<!-- Arrows to AI -->
|
||||
<path d="M200 65 L250 180" stroke="#2B4680" stroke-width="2" marker-end="url(#arrow)"/>
|
||||
<path d="M200 125 L250 180" stroke="#2B4680" stroke-width="2"/>
|
||||
<path d="M200 185 L250 190" stroke="#2B4680" stroke-width="2"/>
|
||||
|
||||
<!-- AI Matching box -->
|
||||
<rect x="250" y="150" width="100" height="80" rx="12" fill="#C9A84C" stroke="#d4b85f" stroke-width="2"/>
|
||||
<text x="300" y="180" text-anchor="middle" fill="#0F1B35" font-size="12" font-weight="600">AI Matching</text>
|
||||
<text x="300" y="200" text-anchor="middle" fill="#0F1B35" font-size="10">87% match</text>
|
||||
<text x="300" y="215" text-anchor="middle" fill="#0F1B35" font-size="10">→ FIN-002</text>
|
||||
|
||||
<!-- Confirm button -->
|
||||
<rect x="265" y="245" width="70" height="28" rx="6" fill="#22c55e"/>
|
||||
<text x="300" y="264" text-anchor="middle" fill="white" font-size="11" font-weight="500">Confirm</text>
|
||||
|
||||
<!-- Existing answer -->
|
||||
<rect x="300" y="310" width="180" height="70" rx="8" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="310" y="335" fill="#C9A84C" font-size="11" font-weight="500">FIN-002</text>
|
||||
<text x="310" y="355" fill="white" font-size="11">Revenue breakdown</text>
|
||||
<text x="310" y="370" fill="#9CA3AF" font-size="10">Published · 2 documents</text>
|
||||
|
||||
<!-- Arrow from confirm to answer -->
|
||||
<path d="M300 273 L360 310" stroke="#22c55e" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Broadcast arrows -->
|
||||
<path d="M390 310 L470 60" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
<path d="M400 310 L470 120" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
<path d="M410 310 L470 180" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Broadcast labels -->
|
||||
<text x="470" y="60" fill="#C9A84C" font-size="10">→ Buyer A</text>
|
||||
<text x="470" y="120" fill="#C9A84C" font-size="10">→ Buyer B</text>
|
||||
<text x="470" y="180" fill="#C9A84C" font-size="10">→ Buyer C</text>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Feature 4: Integrations -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div class="order-2 lg:order-1">
|
||||
<!-- Integration SVG -->
|
||||
<svg viewBox="0 0 500 350" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Central Dealspace -->
|
||||
<rect x="175" y="125" width="150" height="100" rx="12" fill="#2B4680" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="165" text-anchor="middle" fill="white" font-size="14" font-weight="600">Dealspace</text>
|
||||
<text x="250" y="185" text-anchor="middle" fill="#C9A84C" font-size="11">Central Hub</text>
|
||||
|
||||
<!-- Email -->
|
||||
<rect x="30" y="40" width="100" height="60" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="80" y="65" text-anchor="middle" fill="white" font-size="12" font-weight="500">Email</text>
|
||||
<text x="80" y="82" text-anchor="middle" fill="#9CA3AF" font-size="10">Reply inline</text>
|
||||
<line x1="130" y1="70" x2="175" y2="140" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Slack -->
|
||||
<rect x="30" y="145" width="100" height="60" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="80" y="170" text-anchor="middle" fill="white" font-size="12" font-weight="500">Slack</text>
|
||||
<text x="80" y="187" text-anchor="middle" fill="#9CA3AF" font-size="10">Threaded updates</text>
|
||||
<line x1="130" y1="175" x2="175" y2="175" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Teams -->
|
||||
<rect x="30" y="250" width="100" height="60" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="80" y="275" text-anchor="middle" fill="white" font-size="12" font-weight="500">Teams</text>
|
||||
<text x="80" y="292" text-anchor="middle" fill="#9CA3AF" font-size="10">Direct messages</text>
|
||||
<line x1="130" y1="280" x2="175" y2="210" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Web -->
|
||||
<rect x="370" y="40" width="100" height="60" rx="8" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="420" y="65" text-anchor="middle" fill="white" font-size="12" font-weight="500">Web App</text>
|
||||
<text x="420" y="82" text-anchor="middle" fill="#9CA3AF" font-size="10">Full access</text>
|
||||
<line x1="325" y1="140" x2="370" y2="70" stroke="#C9A84C" stroke-width="2"/>
|
||||
|
||||
<!-- Mobile -->
|
||||
<rect x="370" y="145" width="100" height="60" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="420" y="170" text-anchor="middle" fill="white" font-size="12" font-weight="500">Mobile</text>
|
||||
<text x="420" y="187" text-anchor="middle" fill="#9CA3AF" font-size="10">On the go</text>
|
||||
<line x1="325" y1="175" x2="370" y2="175" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- API -->
|
||||
<rect x="370" y="250" width="100" height="60" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="420" y="275" text-anchor="middle" fill="white" font-size="12" font-weight="500">API</text>
|
||||
<text x="420" y="292" text-anchor="middle" fill="#9CA3AF" font-size="10">Integrations</text>
|
||||
<line x1="325" y1="210" x2="370" y2="280" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="order-1 lg:order-2">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Integrations</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Work Where You Already Work</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
Not everyone needs to log into another platform. Participants can respond via email, Slack, or Teams. Requests route to people wherever they are.
|
||||
</p>
|
||||
<ul class="space-y-4">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Email replies</span>
|
||||
<p class="text-gray-400 mt-1">Reply to request notifications directly from your inbox. Attachments included.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Slack/Teams threads</span>
|
||||
<p class="text-gray-400 mt-1">Get notified in your existing channels. Respond without context switching.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">No login required</span>
|
||||
<p class="text-gray-400 mt-1">Basic responses work without an account. Full features available in the web app.</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Feature 5: Audit Trail -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Compliance</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Complete Audit Trail</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
Every access, every download, every routing hop — logged. When compliance asks "who saw what when," you have the answer.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid md:grid-cols-3 gap-8">
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 text-center">
|
||||
<div class="w-16 h-16 bg-slate/30 rounded-full flex items-center justify-center mx-auto mb-6">
|
||||
<svg class="w-8 h-8 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Access Logs</h3>
|
||||
<p class="text-gray-400">Who viewed which document, when, and from where. IP addresses, timestamps, duration.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 text-center">
|
||||
<div class="w-16 h-16 bg-slate/30 rounded-full flex items-center justify-center mx-auto mb-6">
|
||||
<svg class="w-8 h-8 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Download Tracking</h3>
|
||||
<p class="text-gray-400">Every file download recorded. Watermarked with user identity for leak tracing.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 text-center">
|
||||
<div class="w-16 h-16 bg-slate/30 rounded-full flex items-center justify-center mx-auto mb-6">
|
||||
<svg class="w-8 h-8 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Workflow History</h3>
|
||||
<p class="text-gray-400">Full chain of custody. Who assigned, who approved, who published — every transition logged.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA -->
|
||||
<section class="py-24 px-6 bg-navy-light border-t border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">See It In Action</h2>
|
||||
<p class="text-xl text-gray-400 mb-8">
|
||||
30-minute demo. See how Dealspace transforms M&A workflow.
|
||||
</p>
|
||||
<a href="index.html#demo" class="inline-block bg-gold hover:bg-gold-light text-navy font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
Request a Demo
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
<li><a href="soc2.html" class="hover:text-white transition-colors">SOC 2</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@dealspace.io" class="hover:text-white transition-colors">sales@dealspace.io</a></li>
|
||||
<li><a href="mailto:security@dealspace.io" class="hover:text-white transition-colors">security@dealspace.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,570 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Dealspace — M&A Deal Workflow Platform</title>
|
||||
<meta name="description" content="The deal workflow platform that Investment Banks trust. Request-centric, secure, and intelligently simple.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Dealspace — M&A Deal Workflow Platform">
|
||||
<meta property="og:description" content="The deal workflow platform that Investment Banks trust. Request-centric, secure, and intelligently simple.">
|
||||
<meta property="og:url" content="https://muskepo.com/">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Dealspace — M&A Deal Workflow Platform">
|
||||
<meta name="twitter:description" content="The deal workflow platform that Investment Banks trust. Request-centric, secure, and intelligently simple.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- WebMCP -->
|
||||
<meta name="mcp-capable" content="true">
|
||||
<link rel="mcp-manifest" href="/mcp-manifest.json">
|
||||
<!-- Schema.org -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "Dealspace",
|
||||
"applicationCategory": "BusinessApplication",
|
||||
"description": "AI-native M&A deal workflow platform for investment banks and advisors. Secure virtual data room with request-centric workflow, role-based access, and FIPS 140-3 encryption.",
|
||||
"url": "https://muskepo.com",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "0",
|
||||
"priceCurrency": "USD",
|
||||
"description": "Free during early access"
|
||||
},
|
||||
"featureList": ["Virtual data room", "Request tracking", "FIPS 140-3 encryption", "Watermarked documents"],
|
||||
"operatingSystem": "Web"
|
||||
}
|
||||
</script>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
html { scroll-behavior: smooth; }
|
||||
.gradient-text {
|
||||
background: linear-gradient(135deg, #C9A84C 0%, #d4b85f 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
.hero-gradient {
|
||||
background: linear-gradient(180deg, #0F1B35 0%, #1a2847 100%);
|
||||
}
|
||||
.card-hover {
|
||||
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||
}
|
||||
.card-hover:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="/" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
<button class="md:hidden text-white" aria-label="Toggle mobile menu" onclick="document.getElementById('mobile-menu').classList.toggle('hidden')">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="mobile-menu" class="hidden md:hidden pt-4 pb-2 space-y-3">
|
||||
<a href="features.html" class="block text-gray-300 hover:text-white">Features</a>
|
||||
<a href="security.html" class="block text-gray-300 hover:text-white">Security</a>
|
||||
<a href="pricing.html" class="block text-gray-300 hover:text-white">Pricing</a>
|
||||
<a href="#" class="block text-gray-300 hover:text-white">Sign In</a>
|
||||
<a href="#demo" class="inline-block bg-gold text-navy font-semibold px-5 py-2.5 rounded-lg mt-2">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="hero-gradient pt-32 pb-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-12 items-center">
|
||||
<div>
|
||||
<h1 class="text-4xl md:text-5xl lg:text-6xl font-bold leading-tight mb-6">
|
||||
The Request is the<br><span class="gradient-text">Unit of Work</span>
|
||||
</h1>
|
||||
<p class="text-xl text-gray-300 mb-8 leading-relaxed">
|
||||
Dealspace is the M&A workflow platform that Investment Banks trust. Request-centric. Role-based simplicity. Real security. No per-MB extortion.
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4">
|
||||
<a href="#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-8 py-4 rounded-lg text-center transition-colors">
|
||||
Request a Demo
|
||||
</a>
|
||||
<a href="features.html" class="border border-white/20 hover:border-white/40 text-white font-semibold px-8 py-4 rounded-lg text-center transition-colors">
|
||||
See Features
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="relative">
|
||||
<!-- Network Graph SVG -->
|
||||
<svg viewBox="0 0 500 400" class="w-full max-w-lg mx-auto" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<radialGradient id="glow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#2B4680" stop-opacity="0.3"/>
|
||||
<stop offset="100%" stop-color="#0F1B35" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<filter id="nodeGlow" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feGaussianBlur stdDeviation="3" result="blur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="blur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
<ellipse cx="250" cy="200" rx="200" ry="150" fill="url(#glow)"/>
|
||||
<g stroke="#2B4680" stroke-width="2" opacity="0.6">
|
||||
<line x1="250" y1="80" x2="120" y2="200"/>
|
||||
<line x1="250" y1="80" x2="380" y2="200"/>
|
||||
<line x1="250" y1="80" x2="150" y2="320"/>
|
||||
<line x1="250" y1="80" x2="250" y2="320"/>
|
||||
<line x1="250" y1="80" x2="350" y2="320"/>
|
||||
<line x1="120" y1="200" x2="150" y2="320"/>
|
||||
<line x1="380" y1="200" x2="350" y2="320"/>
|
||||
</g>
|
||||
<g fill="none" stroke="#C9A84C" stroke-width="2" stroke-dasharray="8 4" opacity="0.8">
|
||||
<path d="M250 90 L120 190">
|
||||
<animate attributeName="stroke-dashoffset" from="24" to="0" dur="2s" repeatCount="indefinite"/>
|
||||
</path>
|
||||
<path d="M120 210 L150 310">
|
||||
<animate attributeName="stroke-dashoffset" from="24" to="0" dur="2s" repeatCount="indefinite"/>
|
||||
</path>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="250" cy="80" r="35" fill="#2B4680" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="85" text-anchor="middle" fill="white" font-size="14" font-weight="600">IB</text>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="120" cy="200" r="30" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="120" y="195" text-anchor="middle" fill="white" font-size="11" font-weight="500">CFO</text>
|
||||
<text x="120" y="210" text-anchor="middle" fill="#9CA3AF" font-size="9">Seller</text>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="380" cy="200" r="30" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="380" y="195" text-anchor="middle" fill="white" font-size="11" font-weight="500">Legal</text>
|
||||
<text x="380" y="210" text-anchor="middle" fill="#9CA3AF" font-size="9">Seller</text>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="150" cy="320" r="28" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="150" y="325" text-anchor="middle" fill="white" font-size="11" font-weight="500">PE Firm</text>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="250" cy="320" r="28" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="325" text-anchor="middle" fill="white" font-size="11" font-weight="500">Strategic</text>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="350" cy="320" r="28" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="350" y="325" text-anchor="middle" fill="white" font-size="11" font-weight="500">Family Office</text>
|
||||
</g>
|
||||
<g fill="#C9A84C">
|
||||
<circle cx="185" cy="140" r="8"/>
|
||||
<text x="185" y="144" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">3</text>
|
||||
</g>
|
||||
<g fill="#C9A84C">
|
||||
<circle cx="315" cy="140" r="8"/>
|
||||
<text x="315" y="144" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">5</text>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Trust Bar -->
|
||||
<section class="bg-navy-light py-12 px-6 border-y border-white/10">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<p class="text-center text-gray-400 text-sm uppercase tracking-wider mb-8">Trusted by leading investment banks and advisors</p>
|
||||
<div class="flex flex-wrap justify-center items-center gap-12 opacity-60">
|
||||
<div class="text-2xl font-bold text-gray-400">Goldman Sachs</div>
|
||||
<div class="text-2xl font-bold text-gray-400">Morgan Stanley</div>
|
||||
<div class="text-2xl font-bold text-gray-400">Lazard</div>
|
||||
<div class="text-2xl font-bold text-gray-400">Moelis</div>
|
||||
<div class="text-2xl font-bold text-gray-400">Evercore</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Problem/Solution -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Traditional VDRs Are Broken</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid md:grid-cols-2 gap-8">
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="flex items-center mb-6">
|
||||
<div class="w-12 h-12 bg-red-500/20 rounded-full flex items-center justify-center mr-4">
|
||||
<svg class="w-6 h-6 text-red-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold text-red-400">The Old Way</h3>
|
||||
</div>
|
||||
<ul class="space-y-4 text-gray-400">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"/>
|
||||
</svg>
|
||||
<span>500-folder hierarchies nobody can navigate</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"/>
|
||||
</svg>
|
||||
<span>Everyone sees everything — chaos</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"/>
|
||||
</svg>
|
||||
<span>$20/MB "secure storage" extortion</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"/>
|
||||
</svg>
|
||||
<span>Same question asked 50 times by different buyers</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-gold/30 rounded-xl p-8">
|
||||
<div class="flex items-center mb-6">
|
||||
<div class="w-12 h-12 bg-gold/20 rounded-full flex items-center justify-center mr-4">
|
||||
<svg class="w-6 h-6 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold text-gold">The Dealspace Way</h3>
|
||||
</div>
|
||||
<ul class="space-y-4 text-gray-300">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
<span>Request inbox — see only what you need to do</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
<span>Role-based access — automatic, not configured</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
<span>Fair pricing — storage at actual cost</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
<span>AI matching — answer once, broadcast to all</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Features Grid -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Built for How Deals Actually Work</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
Not another document repository with features bolted on. Designed from first principles for M&A workflow.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Request-Centric Workflow</h3>
|
||||
<p class="text-gray-400">The Request is the unit of work. Every question, every answer, every status update — tracked, routed, and resolved.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Role-Based Simplicity</h3>
|
||||
<p class="text-gray-400">Your accountant sees their 3 tasks. Your CFO sees the big picture. Same platform, different experience.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">AI Matching</h3>
|
||||
<p class="text-gray-400">Buyer question matches existing answer? AI suggests it. Human confirms. One answer broadcasts to all who asked.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Real Security</h3>
|
||||
<p class="text-gray-400">FIPS 140-3 crypto. Per-deal encryption keys. Dynamic watermarks on every document. Full audit trail.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Work Where You Are</h3>
|
||||
<p class="text-gray-400">Email, Slack, Teams — participants work in their existing tools. No login required for basic responses.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Complete Audit Trail</h3>
|
||||
<p class="text-gray-400">Every access, every download, every routing hop — logged. Your compliance team will thank you.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- How It Works -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">How It Works</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
From request list to data room — a clear workflow that keeps everyone on track.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="relative">
|
||||
<svg viewBox="0 0 1000 300" class="w-full max-w-5xl mx-auto hidden md:block" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M180 150 L320 150" stroke="#2B4680" stroke-width="3" fill="none" stroke-dasharray="8 4"/>
|
||||
<path d="M420 150 L560 150" stroke="#2B4680" stroke-width="3" fill="none" stroke-dasharray="8 4"/>
|
||||
<path d="M660 150 L800 150" stroke="#2B4680" stroke-width="3" fill="none" stroke-dasharray="8 4"/>
|
||||
<polygon points="315,145 325,150 315,155" fill="#C9A84C"/>
|
||||
<polygon points="555,145 565,150 555,155" fill="#C9A84C"/>
|
||||
<polygon points="795,145 805,150 795,155" fill="#C9A84C"/>
|
||||
<g>
|
||||
<rect x="60" y="90" width="120" height="120" rx="12" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="120" y="140" text-anchor="middle" fill="white" font-size="14" font-weight="600">IB Creates</text>
|
||||
<text x="120" y="160" text-anchor="middle" fill="#9CA3AF" font-size="12">Request List</text>
|
||||
<circle cx="120" cy="60" r="20" fill="#2B4680"/>
|
||||
<text x="120" y="66" text-anchor="middle" fill="white" font-size="16" font-weight="bold">1</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="310" y="90" width="120" height="120" rx="12" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="370" y="140" text-anchor="middle" fill="white" font-size="14" font-weight="600">Seller</text>
|
||||
<text x="370" y="160" text-anchor="middle" fill="#9CA3AF" font-size="12">Responds</text>
|
||||
<circle cx="370" cy="60" r="20" fill="#2B4680"/>
|
||||
<text x="370" y="66" text-anchor="middle" fill="white" font-size="16" font-weight="bold">2</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="560" y="90" width="120" height="120" rx="12" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="620" y="140" text-anchor="middle" fill="white" font-size="14" font-weight="600">IB Vets</text>
|
||||
<text x="620" y="160" text-anchor="middle" fill="#9CA3AF" font-size="12">& Approves</text>
|
||||
<circle cx="620" cy="60" r="20" fill="#C9A84C"/>
|
||||
<text x="620" y="66" text-anchor="middle" fill="#0F1B35" font-size="16" font-weight="bold">3</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="810" y="90" width="120" height="120" rx="12" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="870" y="140" text-anchor="middle" fill="white" font-size="14" font-weight="600">Buyers</text>
|
||||
<text x="870" y="160" text-anchor="middle" fill="#9CA3AF" font-size="12">Access Data Room</text>
|
||||
<circle cx="870" cy="60" r="20" fill="#2B4680"/>
|
||||
<text x="870" y="66" text-anchor="middle" fill="white" font-size="16" font-weight="bold">4</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<div class="md:hidden space-y-6">
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<div class="flex items-center mb-4">
|
||||
<div class="w-10 h-10 bg-slate rounded-full flex items-center justify-center mr-4">
|
||||
<span class="text-white font-bold">1</span>
|
||||
</div>
|
||||
<h3 class="text-lg font-semibold">IB Creates Request List</h3>
|
||||
</div>
|
||||
<p class="text-gray-400">Configure workstreams, invite participants, issue structured requests to the seller.</p>
|
||||
</div>
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<div class="flex items-center mb-4">
|
||||
<div class="w-10 h-10 bg-slate rounded-full flex items-center justify-center mr-4">
|
||||
<span class="text-white font-bold">2</span>
|
||||
</div>
|
||||
<h3 class="text-lg font-semibold">Seller Responds</h3>
|
||||
</div>
|
||||
<p class="text-gray-400">Internal routing to the right people. Upload documents. Mark complete.</p>
|
||||
</div>
|
||||
<div class="bg-navy-light border border-gold/30 rounded-xl p-6">
|
||||
<div class="flex items-center mb-4">
|
||||
<div class="w-10 h-10 bg-gold rounded-full flex items-center justify-center mr-4">
|
||||
<span class="text-navy font-bold">3</span>
|
||||
</div>
|
||||
<h3 class="text-lg font-semibold">IB Vets & Approves</h3>
|
||||
</div>
|
||||
<p class="text-gray-400">Quality control. Approve to publish, reject with feedback. Full control.</p>
|
||||
</div>
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<div class="flex items-center mb-4">
|
||||
<div class="w-10 h-10 bg-slate rounded-full flex items-center justify-center mr-4">
|
||||
<span class="text-white font-bold">4</span>
|
||||
</div>
|
||||
<h3 class="text-lg font-semibold">Buyers Access Data Room</h3>
|
||||
</div>
|
||||
<p class="text-gray-400">Submit questions, AI matches to existing answers, unmatched routes for resolution.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Pricing Teaser -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Fair Pricing. No Surprises.</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto mb-12">
|
||||
Competitors charge $20/MB for "secure storage." We charge for the platform, not your data. Storage at actual cost.
|
||||
</p>
|
||||
|
||||
<div class="grid md:grid-cols-3 gap-8 max-w-5xl mx-auto">
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8">
|
||||
<h3 class="text-lg text-gray-400 mb-2">Starter</h3>
|
||||
<div class="text-4xl font-bold mb-4">$2,500<span class="text-lg font-normal text-gray-400">/mo</span></div>
|
||||
<p class="text-gray-400 mb-6">Perfect for boutique advisors running smaller transactions.</p>
|
||||
<a href="pricing.html" class="text-gold hover:text-gold-light font-medium">View details →</a>
|
||||
</div>
|
||||
<div class="bg-navy border border-gold/30 rounded-xl p-8 relative">
|
||||
<div class="absolute -top-3 left-1/2 transform -translate-x-1/2 bg-gold text-navy text-xs font-bold px-3 py-1 rounded-full">POPULAR</div>
|
||||
<h3 class="text-lg text-gray-400 mb-2">Professional</h3>
|
||||
<div class="text-4xl font-bold mb-4">$7,500<span class="text-lg font-normal text-gray-400">/mo</span></div>
|
||||
<p class="text-gray-400 mb-6">For mid-market deals with AI matching and unlimited participants.</p>
|
||||
<a href="pricing.html" class="text-gold hover:text-gold-light font-medium">View details →</a>
|
||||
</div>
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8">
|
||||
<h3 class="text-lg text-gray-400 mb-2">Enterprise</h3>
|
||||
<div class="text-4xl font-bold mb-4">Custom</div>
|
||||
<p class="text-gray-400 mb-6">For bulge bracket banks. SSO, custom SLA, dedicated support.</p>
|
||||
<a href="#demo" class="text-gold hover:text-gold-light font-medium">Contact sales →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA -->
|
||||
<section id="demo" class="py-24 px-6">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Ready to Simplify Your Deals?</h2>
|
||||
<p class="text-xl text-gray-400 mb-12">
|
||||
See how Dealspace transforms M&A workflow. 30-minute demo, no commitment.
|
||||
</p>
|
||||
|
||||
<form id="waitlist" class="max-w-xl mx-auto" data-mcp-action="join_waitlist" data-mcp-description="Join the Dealspace early access waitlist">
|
||||
<div class="flex flex-col sm:flex-row gap-4">
|
||||
<input type="email" name="email" placeholder="Work email" required data-mcp-field="email" data-mcp-description="Work email address" class="flex-1 px-6 py-4 bg-navy-light border border-white/20 rounded-lg text-white placeholder-gray-500 focus:outline-none focus:border-gold">
|
||||
<button type="submit" class="bg-gold hover:bg-gold-light text-navy font-semibold px-8 py-4 rounded-lg transition-colors whitespace-nowrap">
|
||||
Request Demo
|
||||
</button>
|
||||
</div>
|
||||
<p class="text-sm text-gray-500 mt-4">No spam. We will reach out within one business day.</p>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
<li><a href="soc2.html" class="hover:text-white transition-colors">SOC 2</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@dealspace.io" class="hover:text-white transition-colors">sales@dealspace.io</a></li>
|
||||
<li><a href="mailto:security@dealspace.io" class="hover:text-white transition-colors">security@dealspace.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -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)
|
||||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -1,492 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Pricing — Dealspace</title>
|
||||
<meta name="description" content="Fair pricing for M&A software. No per-MB extortion. Storage at actual cost. Choose the plan that fits your deal volume.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Pricing — Dealspace">
|
||||
<meta property="og:description" content="Fair pricing for M&A software. No per-MB extortion. Storage at actual cost. Choose the plan that fits your deal volume.">
|
||||
<meta property="og:url" content="https://muskepo.com/pricing">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Pricing — Dealspace">
|
||||
<meta name="twitter:description" content="Fair pricing for M&A software. No per-MB extortion. Storage at actual cost. Choose the plan that fits your deal volume.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
html { scroll-behavior: smooth; }
|
||||
.gradient-text {
|
||||
background: linear-gradient(135deg, #C9A84C 0%, #d4b85f 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-white font-medium">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
<button class="md:hidden text-white" aria-label="Toggle mobile menu" onclick="document.getElementById('mobile-menu').classList.toggle('hidden')">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="mobile-menu" class="hidden md:hidden pt-4 pb-2 space-y-3">
|
||||
<a href="features.html" class="block text-gray-300 hover:text-white">Features</a>
|
||||
<a href="security.html" class="block text-gray-300 hover:text-white">Security</a>
|
||||
<a href="pricing.html" class="block text-white font-medium">Pricing</a>
|
||||
<a href="#" class="block text-gray-300 hover:text-white">Sign In</a>
|
||||
<a href="index.html#demo" class="inline-block bg-gold text-navy font-semibold px-5 py-2.5 rounded-lg mt-2">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="pt-32 pb-16 px-6 border-b border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-6">
|
||||
Fair Pricing. <span class="gradient-text">No Surprises.</span>
|
||||
</h1>
|
||||
<p class="text-xl text-gray-400 max-w-2xl mx-auto">
|
||||
Competitors charge $20/MB for "secure storage." We charge for the platform. Storage at actual cost. No per-document fees. No hidden charges.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Pricing Cards -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-6xl mx-auto">
|
||||
<div class="grid md:grid-cols-3 gap-8">
|
||||
|
||||
<!-- Starter -->
|
||||
<div class="bg-navy-light border border-white/10 rounded-2xl p-8 flex flex-col">
|
||||
<div class="mb-8">
|
||||
<h3 class="text-lg text-gray-400 mb-2">Starter</h3>
|
||||
<div class="flex items-baseline">
|
||||
<span class="text-5xl font-bold">$2,500</span>
|
||||
<span class="text-gray-400 ml-2">/month</span>
|
||||
</div>
|
||||
<p class="text-gray-400 mt-4">Perfect for boutique advisors and smaller transactions.</p>
|
||||
</div>
|
||||
|
||||
<ul class="space-y-4 mb-8 flex-1">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">1 concurrent deal</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Up to 10 participants per deal</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">10 GB storage included</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Request workflow</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Dynamic watermarking</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Full audit trail</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Email support</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gray-600 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
||||
</svg>
|
||||
<span class="text-gray-500">AI matching</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gray-600 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
||||
</svg>
|
||||
<span class="text-gray-500">SSO</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<a href="index.html#demo" class="block w-full border border-white/20 hover:border-white/40 text-white font-semibold py-3 rounded-lg text-center transition-colors">
|
||||
Start Free Trial
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Professional -->
|
||||
<div class="bg-navy-light border-2 border-gold rounded-2xl p-8 flex flex-col relative">
|
||||
<div class="absolute -top-4 left-1/2 transform -translate-x-1/2 bg-gold text-navy text-sm font-bold px-4 py-1 rounded-full">
|
||||
MOST POPULAR
|
||||
</div>
|
||||
|
||||
<div class="mb-8">
|
||||
<h3 class="text-lg text-gray-400 mb-2">Professional</h3>
|
||||
<div class="flex items-baseline">
|
||||
<span class="text-5xl font-bold">$7,500</span>
|
||||
<span class="text-gray-400 ml-2">/month</span>
|
||||
</div>
|
||||
<p class="text-gray-400 mt-4">For mid-market advisors running multiple transactions.</p>
|
||||
</div>
|
||||
|
||||
<ul class="space-y-4 mb-8 flex-1">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">5 concurrent deals</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300"><strong>Unlimited</strong> participants</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">100 GB storage included</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Request workflow</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Dynamic watermarking</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Full audit trail</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">AI matching</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Priority support</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gray-600 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
||||
</svg>
|
||||
<span class="text-gray-500">SSO</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<a href="index.html#demo" class="block w-full bg-gold hover:bg-gold-light text-navy font-semibold py-3 rounded-lg text-center transition-colors">
|
||||
Start Free Trial
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Enterprise -->
|
||||
<div class="bg-navy-light border border-white/10 rounded-2xl p-8 flex flex-col">
|
||||
<div class="mb-8">
|
||||
<h3 class="text-lg text-gray-400 mb-2">Enterprise</h3>
|
||||
<div class="flex items-baseline">
|
||||
<span class="text-5xl font-bold">Custom</span>
|
||||
</div>
|
||||
<p class="text-gray-400 mt-4">For bulge bracket banks and large advisory firms.</p>
|
||||
</div>
|
||||
|
||||
<ul class="space-y-4 mb-8 flex-1">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300"><strong>Unlimited</strong> concurrent deals</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300"><strong>Unlimited</strong> participants</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300"><strong>Unlimited</strong> storage</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Everything in Professional</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">SSO / SAML integration</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">Custom watermarks</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">Dedicated support</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">99.99% SLA</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">On-premise option</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<a href="index.html#demo" class="block w-full border border-white/20 hover:border-white/40 text-white font-semibold py-3 rounded-lg text-center transition-colors">
|
||||
Contact Sales
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Storage Pricing -->
|
||||
<section class="py-16 px-6 bg-navy-light border-y border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h2 class="text-2xl font-bold mb-6">Additional Storage</h2>
|
||||
<p class="text-gray-400 mb-8">
|
||||
Need more than your plan includes? Storage is priced at actual cost — no markups.
|
||||
</p>
|
||||
<div class="inline-block bg-navy border border-white/10 rounded-xl px-8 py-6">
|
||||
<div class="text-4xl font-bold text-gold mb-2">$0.10 <span class="text-lg font-normal text-gray-400">/ GB / month</span></div>
|
||||
<p class="text-gray-400 text-sm">No per-document fees. No bandwidth charges. Just storage.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Comparison -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-4xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<h2 class="text-3xl font-bold mb-6">How We Compare</h2>
|
||||
<p class="text-xl text-gray-400">Real pricing on a 50GB deal with 100 participants.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl overflow-hidden">
|
||||
<div class="grid grid-cols-4 gap-4 p-6 border-b border-white/10 text-sm">
|
||||
<div class="font-semibold text-white"></div>
|
||||
<div class="font-semibold text-center text-gold">Dealspace</div>
|
||||
<div class="font-semibold text-center text-gray-400">Competitor A</div>
|
||||
<div class="font-semibold text-center text-gray-400">Competitor B</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 p-6 border-b border-white/10">
|
||||
<div class="text-gray-400">Base platform</div>
|
||||
<div class="text-center text-white font-semibold">$7,500</div>
|
||||
<div class="text-center text-gray-300">$5,000</div>
|
||||
<div class="text-center text-gray-300">$8,000</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 p-6 border-b border-white/10">
|
||||
<div class="text-gray-400">50 GB storage</div>
|
||||
<div class="text-center text-white font-semibold">$0 <span class="text-sm text-gray-400">(included)</span></div>
|
||||
<div class="text-center text-gray-300">$15,000</div>
|
||||
<div class="text-center text-gray-300">$8,000</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 p-6 border-b border-white/10">
|
||||
<div class="text-gray-400">100 participants</div>
|
||||
<div class="text-center text-white font-semibold">$0 <span class="text-sm text-gray-400">(unlimited)</span></div>
|
||||
<div class="text-center text-gray-300">$2,500</div>
|
||||
<div class="text-center text-gray-300">$1,500</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 p-6 border-b border-white/10">
|
||||
<div class="text-gray-400">AI matching</div>
|
||||
<div class="text-center text-white font-semibold">$0 <span class="text-sm text-gray-400">(included)</span></div>
|
||||
<div class="text-center text-gray-300">$3,000</div>
|
||||
<div class="text-center text-gray-300">N/A</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 p-6 bg-navy">
|
||||
<div class="font-semibold text-white">Monthly Total</div>
|
||||
<div class="text-center text-gold text-2xl font-bold">$7,500</div>
|
||||
<div class="text-center text-gray-300 text-2xl font-bold">$25,500</div>
|
||||
<div class="text-center text-gray-300 text-2xl font-bold">$17,500</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="text-center text-gray-500 text-sm mt-6">
|
||||
Competitor pricing based on public rate cards as of February 2026. Your mileage may vary.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FAQ -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-3xl mx-auto">
|
||||
<h2 class="text-3xl font-bold text-center mb-16">Frequently Asked Questions</h2>
|
||||
|
||||
<div class="space-y-6">
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">What counts as a "concurrent deal"?</h3>
|
||||
<p class="text-gray-400">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.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">Is there a free trial?</h3>
|
||||
<p class="text-gray-400">Yes. 14 days, full Professional tier features, no credit card required. Run a real deal on us.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">What happens if I exceed my storage limit?</h3>
|
||||
<p class="text-gray-400">We'll notify you and add the overage at $0.10/GB. No surprise charges — you'll see it before you're billed.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">Can I upgrade or downgrade mid-cycle?</h3>
|
||||
<p class="text-gray-400">Upgrades are prorated immediately. Downgrades take effect at the next billing cycle. No penalties either way.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">Do you offer annual billing?</h3>
|
||||
<p class="text-gray-400">Yes. Pay annually and save 15%. Enterprise customers can negotiate custom terms.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">What's included in "priority support"?</h3>
|
||||
<p class="text-gray-400">4-hour response time during business hours, dedicated Slack channel, and access to our senior support engineers.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Ready to See the Difference?</h2>
|
||||
<p class="text-xl text-gray-400 mb-8">
|
||||
14-day free trial. No credit card required. Full Professional features.
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4 justify-center">
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
Start Free Trial
|
||||
</a>
|
||||
<a href="mailto:sales@dealspace.io" class="border border-white/20 hover:border-white/40 text-white font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
Talk to Sales
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
<li><a href="soc2.html" class="hover:text-white transition-colors">SOC 2</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@dealspace.io" class="hover:text-white transition-colors">sales@dealspace.io</a></li>
|
||||
<li><a href="mailto:security@dealspace.io" class="hover:text-white transition-colors">security@dealspace.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,315 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Privacy Policy — Dealspace</title>
|
||||
<meta name="description" content="How Dealspace handles your data. Enterprise-grade privacy for M&A transactions.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Privacy Policy — Dealspace">
|
||||
<meta property="og:description" content="How Dealspace handles your data. Enterprise-grade privacy for M&A transactions.">
|
||||
<meta property="og:url" content="https://muskepo.com/privacy">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Privacy Policy — Dealspace">
|
||||
<meta name="twitter:description" content="How Dealspace handles your data. Enterprise-grade privacy for M&A transactions.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="pt-32 pb-24 px-6">
|
||||
<div class="max-w-3xl mx-auto">
|
||||
|
||||
<div class="mb-12">
|
||||
<h1 class="text-4xl font-bold mb-4">Privacy Policy</h1>
|
||||
<p class="text-gray-400">Last updated: February 28, 2026</p>
|
||||
</div>
|
||||
|
||||
<div class="prose prose-invert max-w-none">
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<p class="text-lg text-gray-300 leading-relaxed m-0">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Data Controller</h2>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
<strong class="text-white">Muskepo B.V.</strong><br>
|
||||
Herengracht 555<br>
|
||||
1017 BW Amsterdam<br>
|
||||
The Netherlands<br><br>
|
||||
Chamber of Commerce: 92847293<br>
|
||||
VAT: NL866012843B01
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Information We Collect</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Account Information</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Name, business email address, organization name, and job title. This information is required to create an account and manage access to deals.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Transaction Data</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Usage Data</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
IP addresses, access timestamps, browser type, and activity logs. This information is collected for security purposes, audit trail requirements, and service optimization.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Payment Information</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">How We Use Your Information</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">We use the information we collect to:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Provide, maintain, and improve the Dealspace platform</li>
|
||||
<li>Manage user accounts and access permissions</li>
|
||||
<li>Generate audit trails as required by clients and regulators</li>
|
||||
<li>Detect and prevent security threats</li>
|
||||
<li>Comply with legal obligations</li>
|
||||
<li>Send service-related communications</li>
|
||||
</ul>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mt-6">
|
||||
<strong class="text-white">We do not:</strong>
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Sell your data to third parties</li>
|
||||
<li>Use transaction data for advertising</li>
|
||||
<li>Train AI models on your confidential documents</li>
|
||||
<li>Share data with third parties except as described in this policy</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Legal Basis for Processing</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">We process your data based on:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li><strong class="text-white">Contractual necessity:</strong> Processing required to provide the services you have requested under our Terms of Service</li>
|
||||
<li><strong class="text-white">Legitimate interests:</strong> Security, fraud prevention, service improvement, and business operations</li>
|
||||
<li><strong class="text-white">Legal obligation:</strong> Compliance with applicable laws, regulations, and legal processes</li>
|
||||
<li><strong class="text-white">Consent:</strong> Where specifically obtained for marketing communications</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Data Sharing</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">We share data only in the following circumstances:</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Within Deals</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Transaction data is shared with authorized participants within each deal according to the access permissions configured by deal administrators.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Service Providers</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Legal Requirements</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
We may disclose data when required by law, court order, or governmental authority. We will notify you of such requests where legally permitted.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Business Transfers</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Data Security</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">We protect your data with:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li><strong class="text-white">FIPS 140-3 validated encryption</strong> for data at rest and in transit</li>
|
||||
<li><strong class="text-white">Per-deal encryption keys</strong> limiting exposure in case of compromise</li>
|
||||
<li><strong class="text-white">SOC 2 Type II certified</strong> infrastructure and processes</li>
|
||||
<li><strong class="text-white">Multi-factor authentication</strong> required for all accounts</li>
|
||||
<li><strong class="text-white">Continuous monitoring</strong> and intrusion detection</li>
|
||||
<li><strong class="text-white">Regular security assessments</strong> and penetration testing</li>
|
||||
</ul>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
For detailed security information, see our <a href="security.html" class="text-gold hover:text-gold-light">Security page</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Data Retention</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">Active accounts:</strong> Data is retained for the duration of your subscription and any active deals.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">Archived deals:</strong> Retained for 7 years after deal closure for regulatory and audit purposes, unless you request earlier deletion.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">Account deletion:</strong> 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.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
<strong class="text-white">Backups:</strong> Deleted data may persist in encrypted backups for up to 90 days before being overwritten.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">International Data Transfers</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Your Rights</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">Under GDPR and applicable privacy laws, you have the right to:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li><strong class="text-white">Access</strong> your personal data and obtain a copy</li>
|
||||
<li><strong class="text-white">Rectify</strong> inaccurate or incomplete data</li>
|
||||
<li><strong class="text-white">Erase</strong> your data (subject to legal retention requirements)</li>
|
||||
<li><strong class="text-white">Restrict</strong> processing in certain circumstances</li>
|
||||
<li><strong class="text-white">Port</strong> your data to another service in a structured format</li>
|
||||
<li><strong class="text-white">Object</strong> to processing based on legitimate interests</li>
|
||||
<li><strong class="text-white">Withdraw consent</strong> where processing is based on consent</li>
|
||||
</ul>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
To exercise these rights, contact <a href="mailto:privacy@dealspace.io" class="text-gold hover:text-gold-light">privacy@dealspace.io</a>. We will respond within 30 days.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Cookies</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Changes to This Policy</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Contact</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
Data Protection Officer:<br>
|
||||
<a href="mailto:privacy@dealspace.io" class="text-gold hover:text-gold-light">privacy@dealspace.io</a>
|
||||
</p>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
You have the right to lodge a complaint with a supervisory authority. In the Netherlands, this is the Autoriteit Persoonsgegevens (autoriteitpersoonsgegevens.nl).
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
<li><a href="soc2.html" class="hover:text-white transition-colors">SOC 2</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@dealspace.io" class="hover:text-white transition-colors">sales@dealspace.io</a></li>
|
||||
<li><a href="mailto:security@dealspace.io" class="hover:text-white transition-colors">security@dealspace.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -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: /
|
||||
|
|
@ -1,587 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Security — Dealspace</title>
|
||||
<meta name="description" content="FIPS 140-3 encryption, SOC 2 Type II compliance, per-deal encryption keys, dynamic watermarks. Enterprise security for M&A.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Security — Dealspace">
|
||||
<meta property="og:description" content="FIPS 140-3 encryption, SOC 2 Type II compliance, per-deal encryption keys, dynamic watermarks. Enterprise security for M&A.">
|
||||
<meta property="og:url" content="https://muskepo.com/security">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Security — Dealspace">
|
||||
<meta name="twitter:description" content="FIPS 140-3 encryption, SOC 2 Type II compliance, per-deal encryption keys, dynamic watermarks. Enterprise security for M&A.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
html { scroll-behavior: smooth; }
|
||||
.gradient-text {
|
||||
background: linear-gradient(135deg, #C9A84C 0%, #d4b85f 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-white font-medium">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
<button class="md:hidden text-white" aria-label="Toggle mobile menu" onclick="document.getElementById('mobile-menu').classList.toggle('hidden')">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="mobile-menu" class="hidden md:hidden pt-4 pb-2 space-y-3">
|
||||
<a href="features.html" class="block text-gray-300 hover:text-white">Features</a>
|
||||
<a href="security.html" class="block text-white font-medium">Security</a>
|
||||
<a href="pricing.html" class="block text-gray-300 hover:text-white">Pricing</a>
|
||||
<a href="#" class="block text-gray-300 hover:text-white">Sign In</a>
|
||||
<a href="index.html#demo" class="inline-block bg-gold text-navy font-semibold px-5 py-2.5 rounded-lg mt-2">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="pt-32 pb-16 px-6 border-b border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-6">
|
||||
Security That <span class="gradient-text">Compliance Teams</span> Trust
|
||||
</h1>
|
||||
<p class="text-xl text-gray-400 max-w-2xl mx-auto">
|
||||
M&A data is sensitive. People go to prison for leaking it. We built Dealspace with security as the foundation, not an afterthought.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Compliance Badges -->
|
||||
<section class="py-16 px-6 bg-navy-light border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-8">
|
||||
<a href="soc2.html" class="text-center block hover:opacity-80 transition-opacity">
|
||||
<div class="w-20 h-20 mx-auto mb-4 rounded-xl bg-navy border border-gold/30 flex items-center justify-center">
|
||||
<svg viewBox="0 0 60 60" class="w-12 h-12" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M30 5 L50 15 L50 30 C50 42 40 52 30 55 C20 52 10 42 10 30 L10 15 Z" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M22 30 L27 35 L38 24" stroke="#C9A84C" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="font-semibold text-white">SOC 2</h3>
|
||||
<p class="text-sm text-gray-400 mt-1">Self-Assessed · Type II in progress</p>
|
||||
</a>
|
||||
<div class="text-center">
|
||||
<div class="w-20 h-20 mx-auto mb-4 rounded-xl bg-navy border border-gold/30 flex items-center justify-center">
|
||||
<svg viewBox="0 0 60 60" class="w-12 h-12" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="12" y="20" width="36" height="28" rx="4" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
<circle cx="30" cy="34" r="6" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M30 37 L30 42" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M20 20 L20 14 C20 9 24 5 30 5 C36 5 40 9 40 14 L40 20" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="font-semibold text-white">FIPS 140-3</h3>
|
||||
<p class="text-sm text-gray-400 mt-1">Validated encryption</p>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="w-20 h-20 mx-auto mb-4 rounded-xl bg-navy border border-gold/30 flex items-center justify-center">
|
||||
<svg viewBox="0 0 60 60" class="w-12 h-12" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="30" cy="30" r="20" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M30 10 L30 12" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M44 16 L42 18" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M50 30 L48 30" stroke="#C9A84C" stroke-width="2"/>
|
||||
<circle cx="30" cy="30" r="4" fill="#C9A84C"/>
|
||||
<text x="30" y="45" text-anchor="middle" fill="#C9A84C" font-size="8" font-weight="bold">EU</text>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="font-semibold text-white">GDPR</h3>
|
||||
<p class="text-sm text-gray-400 mt-1">Compliant processing</p>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="w-20 h-20 mx-auto mb-4 rounded-xl bg-navy border border-gold/30 flex items-center justify-center">
|
||||
<svg viewBox="0 0 60 60" class="w-12 h-12" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="15" y="8" width="30" height="44" rx="3" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
<line x1="20" y1="18" x2="40" y2="18" stroke="#C9A84C" stroke-width="2"/>
|
||||
<line x1="20" y1="26" x2="40" y2="26" stroke="#C9A84C" stroke-width="2"/>
|
||||
<line x1="20" y1="34" x2="35" y2="34" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M32 42 L36 46 L44 38" stroke="#C9A84C" stroke-width="2" fill="none"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="font-semibold text-white">ISO 27001</h3>
|
||||
<p class="text-sm text-gray-400 mt-1">Certified ISMS</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Encryption -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div>
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Encryption</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">FIPS 140-3 Validated Cryptography</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
<div class="space-y-6">
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Per-Deal Encryption Keys</h3>
|
||||
<p class="text-gray-400">Each deal has its own encryption key derived from a master key. One deal's compromise does not affect others.</p>
|
||||
</div>
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Encryption at Rest</h3>
|
||||
<p class="text-gray-400">All data encrypted before it touches disk. File content, metadata, comments — everything.</p>
|
||||
</div>
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Encryption in Transit</h3>
|
||||
<p class="text-gray-400">TLS 1.3 for all connections. Certificate pinning for mobile apps. No data travels unencrypted.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="relative">
|
||||
<!-- Encryption SVG -->
|
||||
<svg viewBox="0 0 500 450" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="encGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" stop-color="#2B4680"/>
|
||||
<stop offset="100%" stop-color="#1a2847"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Master Key -->
|
||||
<g>
|
||||
<rect x="180" y="20" width="140" height="60" rx="8" fill="url(#encGrad)" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="45" text-anchor="middle" fill="#C9A84C" font-size="11" font-weight="600">MASTER KEY</text>
|
||||
<text x="250" y="62" text-anchor="middle" fill="#9CA3AF" font-size="9">HSM Protected</text>
|
||||
</g>
|
||||
|
||||
<!-- Derivation arrows -->
|
||||
<path d="M200 80 L100 140" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
<path d="M250 80 L250 140" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
<path d="M300 80 L400 140" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Deal Keys -->
|
||||
<g>
|
||||
<rect x="40" y="140" width="120" height="80" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="100" y="165" text-anchor="middle" fill="white" font-size="11" font-weight="500">Deal A Key</text>
|
||||
<rect x="55" y="180" width="90" height="30" rx="4" fill="#0F1B35"/>
|
||||
<text x="100" y="200" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">AES-256-GCM</text>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="190" y="140" width="120" height="80" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="250" y="165" text-anchor="middle" fill="white" font-size="11" font-weight="500">Deal B Key</text>
|
||||
<rect x="205" y="180" width="90" height="30" rx="4" fill="#0F1B35"/>
|
||||
<text x="250" y="200" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">AES-256-GCM</text>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="340" y="140" width="120" height="80" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="400" y="165" text-anchor="middle" fill="white" font-size="11" font-weight="500">Deal C Key</text>
|
||||
<rect x="355" y="180" width="90" height="30" rx="4" fill="#0F1B35"/>
|
||||
<text x="400" y="200" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">AES-256-GCM</text>
|
||||
</g>
|
||||
|
||||
<!-- Encrypted data -->
|
||||
<path d="M100 220 L100 260" stroke="#2B4680" stroke-width="2"/>
|
||||
<path d="M250 220 L250 260" stroke="#2B4680" stroke-width="2"/>
|
||||
<path d="M400 220 L400 260" stroke="#2B4680" stroke-width="2"/>
|
||||
|
||||
<!-- Lock icons -->
|
||||
<g transform="translate(85, 260)">
|
||||
<rect x="0" y="15" width="30" height="25" rx="3" fill="#C9A84C"/>
|
||||
<path d="M5 15 L5 10 C5 4 10 0 15 0 C20 0 25 4 25 10 L25 15" fill="none" stroke="#C9A84C" stroke-width="3"/>
|
||||
</g>
|
||||
<g transform="translate(235, 260)">
|
||||
<rect x="0" y="15" width="30" height="25" rx="3" fill="#C9A84C"/>
|
||||
<path d="M5 15 L5 10 C5 4 10 0 15 0 C20 0 25 4 25 10 L25 15" fill="none" stroke="#C9A84C" stroke-width="3"/>
|
||||
</g>
|
||||
<g transform="translate(385, 260)">
|
||||
<rect x="0" y="15" width="30" height="25" rx="3" fill="#C9A84C"/>
|
||||
<path d="M5 15 L5 10 C5 4 10 0 15 0 C20 0 25 4 25 10 L25 15" fill="none" stroke="#C9A84C" stroke-width="3"/>
|
||||
</g>
|
||||
|
||||
<!-- Storage -->
|
||||
<rect x="50" y="320" width="400" height="100" rx="12" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="250" y="350" text-anchor="middle" fill="white" font-size="14" font-weight="600">Encrypted Storage</text>
|
||||
|
||||
<!-- Data blocks -->
|
||||
<g>
|
||||
<rect x="80" y="365" width="80" height="40" rx="4" fill="#0F1B35" stroke="#2B4680"/>
|
||||
<text x="120" y="390" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">0x8f2a...</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="180" y="365" width="80" height="40" rx="4" fill="#0F1B35" stroke="#2B4680"/>
|
||||
<text x="220" y="390" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">0x3c71...</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="280" y="365" width="80" height="40" rx="4" fill="#0F1B35" stroke="#2B4680"/>
|
||||
<text x="320" y="390" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">0xd9e4...</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="370" y="365" width="60" height="40" rx="4" fill="#0F1B35" stroke="#2B4680"/>
|
||||
<text x="400" y="390" text-anchor="middle" fill="#6b7280" font-size="8">...</text>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Watermarking -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div class="order-2 lg:order-1">
|
||||
<!-- Watermark SVG -->
|
||||
<svg viewBox="0 0 500 400" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Document -->
|
||||
<rect x="100" y="40" width="300" height="320" rx="8" fill="white" stroke="#e5e7eb" stroke-width="2"/>
|
||||
|
||||
<!-- Document content (faded) -->
|
||||
<rect x="130" y="80" width="200" height="12" rx="2" fill="#e5e7eb"/>
|
||||
<rect x="130" y="100" width="240" height="8" rx="2" fill="#f3f4f6"/>
|
||||
<rect x="130" y="115" width="220" height="8" rx="2" fill="#f3f4f6"/>
|
||||
<rect x="130" y="130" width="230" height="8" rx="2" fill="#f3f4f6"/>
|
||||
<rect x="130" y="145" width="180" height="8" rx="2" fill="#f3f4f6"/>
|
||||
|
||||
<rect x="130" y="175" width="160" height="10" rx="2" fill="#e5e7eb"/>
|
||||
<rect x="130" y="195" width="240" height="8" rx="2" fill="#f3f4f6"/>
|
||||
<rect x="130" y="210" width="220" height="8" rx="2" fill="#f3f4f6"/>
|
||||
<rect x="130" y="225" width="200" height="8" rx="2" fill="#f3f4f6"/>
|
||||
|
||||
<rect x="130" y="260" width="240" height="60" rx="4" fill="#f9fafb" stroke="#e5e7eb"/>
|
||||
|
||||
<!-- Watermark overlay -->
|
||||
<g opacity="0.3" transform="rotate(-30, 250, 200)">
|
||||
<text x="250" y="180" text-anchor="middle" fill="#C9A84C" font-size="18" font-weight="bold">john.smith@pe-firm.com</text>
|
||||
<text x="250" y="205" text-anchor="middle" fill="#C9A84C" font-size="14">2026-02-28 14:32:15 UTC</text>
|
||||
<text x="250" y="225" text-anchor="middle" fill="#C9A84C" font-size="12">CONFIDENTIAL</text>
|
||||
</g>
|
||||
|
||||
<!-- Dynamic indicator -->
|
||||
<rect x="320" y="50" width="70" height="24" rx="4" fill="#C9A84C"/>
|
||||
<text x="355" y="66" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="600">DYNAMIC</text>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="order-1 lg:order-2">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Leak Prevention</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Dynamic Watermarking</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
Every document is watermarked with the viewer's identity at serve time. If a document leaks, you know exactly who leaked it.
|
||||
</p>
|
||||
<ul class="space-y-4">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Generated per-request</span>
|
||||
<p class="text-gray-400 mt-1">Watermark includes user email, organization, timestamp, and deal ID.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">All file types</span>
|
||||
<p class="text-gray-400 mt-1">PDF, Word, Excel, images, video. Protection adapts to the format.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Configurable per project</span>
|
||||
<p class="text-gray-400 mt-1">Control watermark content, position, and visibility.</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Access Control -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Access Control</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Defense in Depth</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
Multiple layers of protection. Every access decision goes through the same choke point. No exceptions.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Single Sign-On</h3>
|
||||
<p class="text-gray-400">SAML 2.0 and OIDC support. Integrate with your existing identity provider. Enforce your organization's auth policies.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 18h.01M8 21h8a2 2 0 002-2V5a2 2 0 00-2-2H8a2 2 0 00-2 2v14a2 2 0 002 2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Multi-Factor Auth</h3>
|
||||
<p class="text-gray-400">TOTP, hardware keys (FIDO2), SMS backup. MFA required for all access, no exceptions.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Role-Based Access</h3>
|
||||
<p class="text-gray-400">Workstream-level permissions. IB, Seller, Buyer roles with configurable scopes. Least privilege by default.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Session Management</h3>
|
||||
<p class="text-gray-400">Short-lived tokens. Single active session per user. Immediate revocation on access changes.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">IP Allowlisting</h3>
|
||||
<p class="text-gray-400">Restrict access by IP range. Corporate network only, or specific buyer locations.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Download Controls</h3>
|
||||
<p class="text-gray-400">Disable downloads entirely, or allow view-only access. Configurable per document or project-wide.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Audit -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div>
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Audit Trail</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Complete Accountability</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
Every action is logged. Access grants, file views, downloads, status changes — all recorded with actor, timestamp, and IP address.
|
||||
</p>
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-center">
|
||||
<svg class="w-5 h-5 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Real-time activity monitoring</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<svg class="w-5 h-5 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Exportable audit reports</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<svg class="w-5 h-5 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Anomaly detection alerts</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<svg class="w-5 h-5 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">7-year retention for compliance</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6 font-mono text-sm">
|
||||
<div class="text-gray-500 mb-4"># Recent audit events</div>
|
||||
<div class="space-y-3">
|
||||
<div class="flex items-start">
|
||||
<span class="text-gray-500 mr-3">14:32:15</span>
|
||||
<div>
|
||||
<span class="text-green-400">VIEW</span>
|
||||
<span class="text-gray-300"> john.smith@pe-firm.com</span>
|
||||
<div class="text-gray-500">FIN-002-revenue-breakdown.xlsx</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start">
|
||||
<span class="text-gray-500 mr-3">14:31:42</span>
|
||||
<div>
|
||||
<span class="text-blue-400">DOWNLOAD</span>
|
||||
<span class="text-gray-300"> sarah.jones@ib.com</span>
|
||||
<div class="text-gray-500">LEG-015-ip-schedule.pdf (watermarked)</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start">
|
||||
<span class="text-gray-500 mr-3">14:30:18</span>
|
||||
<div>
|
||||
<span class="text-yellow-400">GRANT</span>
|
||||
<span class="text-gray-300"> admin@seller.com</span>
|
||||
<div class="text-gray-500">Added buyer_member: mike@strategic.com</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start">
|
||||
<span class="text-gray-500 mr-3">14:29:55</span>
|
||||
<div>
|
||||
<span class="text-purple-400">PUBLISH</span>
|
||||
<span class="text-gray-300"> analyst@ib.com</span>
|
||||
<div class="text-gray-500">FIN-003 → Data Room (3 buyers notified)</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Infrastructure -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto text-center">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Infrastructure</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Enterprise-Grade Infrastructure</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto mb-16">
|
||||
Dedicated infrastructure, redundant storage, continuous monitoring. Your deal data deserves nothing less.
|
||||
</p>
|
||||
|
||||
<div class="grid md:grid-cols-4 gap-8">
|
||||
<div class="text-center">
|
||||
<div class="text-4xl font-bold text-gold mb-2">99.99%</div>
|
||||
<div class="text-gray-400">Uptime SLA</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="text-4xl font-bold text-gold mb-2">3</div>
|
||||
<div class="text-gray-400">Geographic Regions</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="text-4xl font-bold text-gold mb-2">24/7</div>
|
||||
<div class="text-gray-400">Security Monitoring</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="text-4xl font-bold text-gold mb-2"><15min</div>
|
||||
<div class="text-gray-400">Incident Response</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA -->
|
||||
<section class="py-24 px-6 bg-navy-light border-t border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Questions About Security?</h2>
|
||||
<p class="text-xl text-gray-400 mb-8">
|
||||
Talk to our security team. We are happy to answer technical questions and provide documentation.
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4 justify-center">
|
||||
<a href="mailto:security@dealspace.io" class="bg-gold hover:bg-gold-light text-navy font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
Contact Security Team
|
||||
</a>
|
||||
<a href="index.html#demo" class="border border-white/20 hover:border-white/40 text-white font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
Request Demo
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
<li><a href="soc2.html" class="hover:text-white transition-colors">SOC 2</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@dealspace.io" class="hover:text-white transition-colors">sales@dealspace.io</a></li>
|
||||
<li><a href="mailto:security@dealspace.io" class="hover:text-white transition-colors">security@dealspace.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://muskepo.com/</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/features</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/security</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/pricing</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/privacy</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>yearly</changefreq>
|
||||
<priority>0.5</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/terms</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>yearly</changefreq>
|
||||
<priority>0.5</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/dpa</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>yearly</changefreq>
|
||||
<priority>0.5</priority>
|
||||
</url>
|
||||
</urlset>
|
||||
|
|
@ -1,679 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>SOC 2 Compliance — Dealspace</title>
|
||||
<meta name="description" content="SOC 2 Type II self-assessment documentation. Trust Services Criteria coverage for Security, Availability, Confidentiality, Processing Integrity, and Privacy.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="SOC 2 Compliance — Dealspace">
|
||||
<meta property="og:description" content="SOC 2 Type II self-assessment documentation. Trust Services Criteria coverage for Security, Availability, Confidentiality, Processing Integrity, and Privacy.">
|
||||
<meta property="og:url" content="https://muskepo.com/soc2">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="SOC 2 Compliance — Dealspace">
|
||||
<meta name="twitter:description" content="SOC 2 Type II self-assessment documentation. Trust Services Criteria coverage for Security, Availability, Confidentiality, Processing Integrity, and Privacy.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
html { scroll-behavior: smooth; }
|
||||
.gradient-text {
|
||||
background: linear-gradient(135deg, #C9A84C 0%, #d4b85f 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
<button class="md:hidden text-white" aria-label="Toggle mobile menu" onclick="document.getElementById('mobile-menu').classList.toggle('hidden')">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="mobile-menu" class="hidden md:hidden pt-4 pb-2 space-y-3">
|
||||
<a href="features.html" class="block text-gray-300 hover:text-white">Features</a>
|
||||
<a href="security.html" class="block text-gray-300 hover:text-white">Security</a>
|
||||
<a href="pricing.html" class="block text-gray-300 hover:text-white">Pricing</a>
|
||||
<a href="#" class="block text-gray-300 hover:text-white">Sign In</a>
|
||||
<a href="index.html#demo" class="inline-block bg-gold text-navy font-semibold px-5 py-2.5 rounded-lg mt-2">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="pt-32 pb-16 px-6 border-b border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<div class="inline-block bg-yellow-500/20 text-yellow-400 text-sm font-medium px-4 py-2 rounded-full mb-6">
|
||||
Self-Assessment · Type II Audit Planned Q4 2026
|
||||
</div>
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-6">
|
||||
SOC 2 <span class="gradient-text">Compliance</span>
|
||||
</h1>
|
||||
<p class="text-xl text-gray-400 max-w-2xl mx-auto">
|
||||
Dealspace has completed a comprehensive SOC 2 Type II self-assessment. We are preparing for formal audit certification in Q4 2026.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Disclaimer Banner -->
|
||||
<section class="py-6 px-6 bg-yellow-500/10 border-b border-yellow-500/20">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<p class="text-yellow-200">
|
||||
<strong>Note:</strong> This is a self-assessment document. Formal SOC 2 Type II audit is planned for Q4 2026.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Overview -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div>
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Overview</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">What is SOC 2?</h2>
|
||||
<p class="text-gray-400 text-lg mb-6 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
<p class="text-gray-400 text-lg leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<h3 class="font-semibold text-white text-xl mb-6">Self-Assessment Summary</h3>
|
||||
<div class="space-y-4">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-gray-300">Security (CC1-CC9)</span>
|
||||
<div class="flex items-center">
|
||||
<div class="w-32 h-2 bg-navy rounded-full mr-3">
|
||||
<div class="w-[95%] h-full bg-green-500 rounded-full"></div>
|
||||
</div>
|
||||
<span class="text-green-400 font-medium">95%</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-gray-300">Availability (A1)</span>
|
||||
<div class="flex items-center">
|
||||
<div class="w-32 h-2 bg-navy rounded-full mr-3">
|
||||
<div class="w-[95%] h-full bg-green-500 rounded-full"></div>
|
||||
</div>
|
||||
<span class="text-green-400 font-medium">95%</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-gray-300">Confidentiality (C1)</span>
|
||||
<div class="flex items-center">
|
||||
<div class="w-32 h-2 bg-navy rounded-full mr-3">
|
||||
<div class="w-[98%] h-full bg-green-500 rounded-full"></div>
|
||||
</div>
|
||||
<span class="text-green-400 font-medium">98%</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-gray-300">Processing Integrity (PI1)</span>
|
||||
<div class="flex items-center">
|
||||
<div class="w-32 h-2 bg-navy rounded-full mr-3">
|
||||
<div class="w-[95%] h-full bg-green-500 rounded-full"></div>
|
||||
</div>
|
||||
<span class="text-green-400 font-medium">95%</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-gray-300">Privacy (P1-P8)</span>
|
||||
<div class="flex items-center">
|
||||
<div class="w-32 h-2 bg-navy rounded-full mr-3">
|
||||
<div class="w-[95%] h-full bg-green-500 rounded-full"></div>
|
||||
</div>
|
||||
<span class="text-green-400 font-medium">95%</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-6 pt-6 border-t border-white/10">
|
||||
<p class="text-gray-400 text-sm">Assessment Date: February 28, 2026</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Scope -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Scope</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">What's Covered</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
Our SOC 2 assessment covers all aspects of the Dealspace platform and infrastructure.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid md:grid-cols-3 gap-8">
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Infrastructure</h3>
|
||||
<ul class="text-gray-400 space-y-2">
|
||||
<li>• Production server (Zürich, Switzerland)</li>
|
||||
<li>• Go application binary</li>
|
||||
<li>• SQLite encrypted database</li>
|
||||
<li>• Caddy reverse proxy</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Data Types</h3>
|
||||
<ul class="text-gray-400 space-y-2">
|
||||
<li>• M&A deal documents</li>
|
||||
<li>• Financial data</li>
|
||||
<li>• Transaction details</li>
|
||||
<li>• Participant information</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">User Types</h3>
|
||||
<ul class="text-gray-400 space-y-2">
|
||||
<li>• Investment bank admins/members</li>
|
||||
<li>• Seller organizations</li>
|
||||
<li>• Buyer organizations</li>
|
||||
<li>• Observers</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Trust Services Criteria -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Trust Services Criteria</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">The Five Pillars</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
SOC 2 evaluates organizations against five Trust Services Criteria. Dealspace implements controls for all five.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="space-y-8">
|
||||
<!-- Security -->
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="flex items-start">
|
||||
<div class="w-14 h-14 bg-blue-500/20 rounded-lg flex items-center justify-center mr-6 flex-shrink-0">
|
||||
<svg class="w-7 h-7 text-blue-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<h3 class="text-xl font-semibold mb-3">Security (CC1-CC9)</h3>
|
||||
<p class="text-gray-400 mb-4">Protection against unauthorized access, both physical and logical.</p>
|
||||
<div class="grid md:grid-cols-2 gap-4">
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
FIPS 140-3 encryption (AES-256-GCM)
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
Per-project key derivation (HKDF-SHA256)
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
Role-based access control (RBAC)
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
MFA required for IB users
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Availability -->
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="flex items-start">
|
||||
<div class="w-14 h-14 bg-green-500/20 rounded-lg flex items-center justify-center mr-6 flex-shrink-0">
|
||||
<svg class="w-7 h-7 text-green-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<h3 class="text-xl font-semibold mb-3">Availability (A1)</h3>
|
||||
<p class="text-gray-400 mb-4">Systems are available for operation and use as committed.</p>
|
||||
<div class="grid md:grid-cols-2 gap-4">
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
99.9% uptime SLA
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
4-hour recovery time objective
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
Daily encrypted backups
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
Swiss data center (Zürich)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Confidentiality -->
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="flex items-start">
|
||||
<div class="w-14 h-14 bg-purple-500/20 rounded-lg flex items-center justify-center mr-6 flex-shrink-0">
|
||||
<svg class="w-7 h-7 text-purple-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<h3 class="text-xl font-semibold mb-3">Confidentiality (C1)</h3>
|
||||
<p class="text-gray-400 mb-4">Information designated as confidential is protected as committed.</p>
|
||||
<div class="grid md:grid-cols-2 gap-4">
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
All deal data encrypted at rest
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
Blind indexes for searchable encryption
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
TLS 1.3 for all connections
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
Dynamic document watermarking
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Processing Integrity -->
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="flex items-start">
|
||||
<div class="w-14 h-14 bg-orange-500/20 rounded-lg flex items-center justify-center mr-6 flex-shrink-0">
|
||||
<svg class="w-7 h-7 text-orange-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<h3 class="text-xl font-semibold mb-3">Processing Integrity (PI1)</h3>
|
||||
<p class="text-gray-400 mb-4">System processing is complete, valid, accurate, timely, and authorized.</p>
|
||||
<div class="grid md:grid-cols-2 gap-4">
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
Input validation on all data
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
Parameterized SQL queries
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
Optimistic locking (ETag)
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
ACID transaction compliance
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Privacy -->
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="flex items-start">
|
||||
<div class="w-14 h-14 bg-pink-500/20 rounded-lg flex items-center justify-center mr-6 flex-shrink-0">
|
||||
<svg class="w-7 h-7 text-pink-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<h3 class="text-xl font-semibold mb-3">Privacy (P1-P8)</h3>
|
||||
<p class="text-gray-400 mb-4">Personal information is collected, used, retained, and disclosed in conformity with commitments.</p>
|
||||
<div class="grid md:grid-cols-2 gap-4">
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
GDPR/FADP/CCPA compliant
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
Data export on request
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
No third-party tracking
|
||||
</div>
|
||||
<div class="flex items-center text-gray-300">
|
||||
<svg class="w-5 h-5 text-green-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
No data sales
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Controls Summary -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Controls Summary</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Key Security Controls</h2>
|
||||
</div>
|
||||
|
||||
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Encryption</h3>
|
||||
<p class="text-gray-400 text-sm">FIPS 140-3 validated AES-256-GCM with per-project keys derived via HKDF-SHA256</p>
|
||||
</div>
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Authentication</h3>
|
||||
<p class="text-gray-400 text-sm">JWT tokens with 1-hour expiry, MFA required for IB users, session management</p>
|
||||
</div>
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Authorization</h3>
|
||||
<p class="text-gray-400 text-sm">Role hierarchy (IB → Seller → Buyer → Observer), invitation-only access</p>
|
||||
</div>
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Infrastructure</h3>
|
||||
<p class="text-gray-400 text-sm">Swiss data center, UFW firewall, SSH key-only, automatic security updates</p>
|
||||
</div>
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Audit Logging</h3>
|
||||
<p class="text-gray-400 text-sm">All access logged with actor, timestamp, IP. 7-year retention for compliance</p>
|
||||
</div>
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Backup & Recovery</h3>
|
||||
<p class="text-gray-400 text-sm">Daily encrypted backups, 4-hour RTO, 24-hour RPO, tested recovery procedures</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Policy Documents -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Documentation</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Policy Documents</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
Our SOC 2 program is supported by comprehensive policy documentation.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
<a href="/docs/soc2/soc2-self-assessment-2026.md" class="bg-navy-light border border-white/10 rounded-xl p-6 hover:border-gold/50 transition-colors group">
|
||||
<div class="flex items-center mb-4">
|
||||
<svg class="w-8 h-8 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
||||
</svg>
|
||||
<h3 class="font-semibold text-white group-hover:text-gold transition-colors">Self-Assessment Report</h3>
|
||||
</div>
|
||||
<p class="text-gray-400 text-sm">Complete SOC 2 Type II self-assessment with control mappings</p>
|
||||
</a>
|
||||
|
||||
<a href="/docs/soc2/security-policy.md" class="bg-navy-light border border-white/10 rounded-xl p-6 hover:border-gold/50 transition-colors group">
|
||||
<div class="flex items-center mb-4">
|
||||
<svg class="w-8 h-8 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/>
|
||||
</svg>
|
||||
<h3 class="font-semibold text-white group-hover:text-gold transition-colors">Security Policy</h3>
|
||||
</div>
|
||||
<p class="text-gray-400 text-sm">Security requirements for systems, data, and operations</p>
|
||||
</a>
|
||||
|
||||
<a href="/docs/soc2/incident-response-plan.md" class="bg-navy-light border border-white/10 rounded-xl p-6 hover:border-gold/50 transition-colors group">
|
||||
<div class="flex items-center mb-4">
|
||||
<svg class="w-8 h-8 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>
|
||||
</svg>
|
||||
<h3 class="font-semibold text-white group-hover:text-gold transition-colors">Incident Response Plan</h3>
|
||||
</div>
|
||||
<p class="text-gray-400 text-sm">Procedures for detecting and responding to security incidents</p>
|
||||
</a>
|
||||
|
||||
<a href="/docs/soc2/disaster-recovery-plan.md" class="bg-navy-light border border-white/10 rounded-xl p-6 hover:border-gold/50 transition-colors group">
|
||||
<div class="flex items-center mb-4">
|
||||
<svg class="w-8 h-8 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
|
||||
</svg>
|
||||
<h3 class="font-semibold text-white group-hover:text-gold transition-colors">Disaster Recovery Plan</h3>
|
||||
</div>
|
||||
<p class="text-gray-400 text-sm">Recovery procedures following disasters affecting systems</p>
|
||||
</a>
|
||||
|
||||
<a href="/docs/soc2/data-retention-policy.md" class="bg-navy-light border border-white/10 rounded-xl p-6 hover:border-gold/50 transition-colors group">
|
||||
<div class="flex items-center mb-4">
|
||||
<svg class="w-8 h-8 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"/>
|
||||
</svg>
|
||||
<h3 class="font-semibold text-white group-hover:text-gold transition-colors">Data Retention Policy</h3>
|
||||
</div>
|
||||
<p class="text-gray-400 text-sm">Data retention periods and deletion procedures</p>
|
||||
</a>
|
||||
|
||||
<a href="/docs/soc2/risk-assessment.md" class="bg-navy-light border border-white/10 rounded-xl p-6 hover:border-gold/50 transition-colors group">
|
||||
<div class="flex items-center mb-4">
|
||||
<svg class="w-8 h-8 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/>
|
||||
</svg>
|
||||
<h3 class="font-semibold text-white group-hover:text-gold transition-colors">Risk Assessment</h3>
|
||||
</div>
|
||||
<p class="text-gray-400 text-sm">Identified risks and mitigation controls</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Status -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Status</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Audit Timeline</h2>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 text-left">
|
||||
<div class="space-y-6">
|
||||
<div class="flex items-start">
|
||||
<div class="w-8 h-8 bg-green-500/20 rounded-full flex items-center justify-center mr-4 mt-1 flex-shrink-0">
|
||||
<svg class="w-4 h-4 text-green-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold text-white">February 2026 — Self-Assessment Complete</h4>
|
||||
<p class="text-gray-400">Comprehensive self-assessment against all five Trust Services Criteria completed. Policy documentation created.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-start">
|
||||
<div class="w-8 h-8 bg-blue-500/20 rounded-full flex items-center justify-center mr-4 mt-1 flex-shrink-0">
|
||||
<svg class="w-4 h-4 text-blue-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold text-white">Q2 2026 — Gap Remediation</h4>
|
||||
<p class="text-gray-400">Address recommended action items including backup restore testing and external penetration test.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-start">
|
||||
<div class="w-8 h-8 bg-yellow-500/20 rounded-full flex items-center justify-center mr-4 mt-1 flex-shrink-0">
|
||||
<svg class="w-4 h-4 text-yellow-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold text-white">Q4 2026 — Formal SOC 2 Type II Audit</h4>
|
||||
<p class="text-gray-400">Engage third-party auditor for formal SOC 2 Type II certification.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA -->
|
||||
<section class="py-24 px-6 border-t border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Questions About Compliance?</h2>
|
||||
<p class="text-xl text-gray-400 mb-8">
|
||||
Contact our security team for detailed documentation or to discuss your compliance requirements.
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4 justify-center">
|
||||
<a href="mailto:security@muskepo.com" class="bg-gold hover:bg-gold-light text-navy font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
Contact Security Team
|
||||
</a>
|
||||
<a href="security.html" class="border border-white/20 hover:border-white/40 text-white font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
View Security Page
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
<li><a href="soc2.html" class="hover:text-white transition-colors">SOC 2</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@muskepo.com" class="hover:text-white transition-colors">sales@muskepo.com</a></li>
|
||||
<li><a href="mailto:security@muskepo.com" class="hover:text-white transition-colors">security@muskepo.com</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,349 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Terms of Service — Dealspace</title>
|
||||
<meta name="description" content="Terms of Service for Dealspace M&A deal workflow platform.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Terms of Service — Dealspace">
|
||||
<meta property="og:description" content="Terms of Service for Dealspace M&A deal workflow platform.">
|
||||
<meta property="og:url" content="https://muskepo.com/terms">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Terms of Service — Dealspace">
|
||||
<meta name="twitter:description" content="Terms of Service for Dealspace M&A deal workflow platform.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="pt-32 pb-24 px-6">
|
||||
<div class="max-w-3xl mx-auto">
|
||||
|
||||
<div class="mb-12">
|
||||
<h1 class="text-4xl font-bold mb-4">Terms of Service</h1>
|
||||
<p class="text-gray-400">Last updated: February 28, 2026</p>
|
||||
</div>
|
||||
|
||||
<div class="prose prose-invert max-w-none">
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<p class="text-lg text-gray-300 leading-relaxed m-0">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">1. The Service</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">1.1 Description</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">1.2 Not Legal or Financial Advice</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">2. Accounts and Access</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.1 Account Registration</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.2 Organizational Accounts</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.3 Access Controls</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">3. Acceptable Use</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.1 Permitted Uses</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.2 Prohibited Conduct</h3>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">You agree not to:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Violate any applicable laws or regulations</li>
|
||||
<li>Upload content you do not have the right to share</li>
|
||||
<li>Attempt to access data or accounts without authorization</li>
|
||||
<li>Interfere with or disrupt the service or its infrastructure</li>
|
||||
<li>Reverse engineer, decompile, or attempt to extract source code</li>
|
||||
<li>Circumvent security measures or access controls</li>
|
||||
<li>Use the service for competitive analysis or to build a competing product</li>
|
||||
<li>Resell or sublicense access without authorization</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.3 Enforcement</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
We may suspend or terminate access for violations of these Terms. In cases of illegal activity, we will cooperate with law enforcement authorities.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">4. Content and Data</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">4.1 Your Content</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">4.2 Responsibility for Content</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">4.3 Data Processing</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Our handling of personal data is governed by our <a href="privacy.html" class="text-gold hover:text-gold-light">Privacy Policy</a> and, for enterprise customers, our <a href="dpa.html" class="text-gold hover:text-gold-light">Data Processing Agreement</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">5. Intellectual Property</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">5.1 Our IP</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">5.2 Feedback</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">6. Payment and Billing</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">6.1 Fees</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Fees are described on our <a href="pricing.html" class="text-gold hover:text-gold-light">Pricing page</a> or in your order form. All fees are in US dollars unless otherwise specified and are exclusive of taxes.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">6.2 Payment</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Payment is due in advance on a monthly or annual basis as selected. We may suspend service for non-payment after reasonable notice.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">6.3 Refunds</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">6.4 Price Changes</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
We may change pricing with 30 days notice. Price increases will not affect your current subscription term.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">7. Service Level</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">7.1 Availability</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">7.2 Maintenance</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">8. Termination</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">8.1 By You</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
You may cancel your subscription at any time through your account settings. Cancellation takes effect at the end of your current billing period.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">8.2 By Us</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">8.3 Effect of Termination</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">9. Disclaimers</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">10. Limitation of Liability</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
TO THE MAXIMUM EXTENT PERMITTED BY LAW:
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>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.</li>
|
||||
<li>WE ARE NOT LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFITS, LOST DATA, OR BUSINESS INTERRUPTION.</li>
|
||||
<li>THESE LIMITATIONS APPLY REGARDLESS OF THE FORM OF ACTION AND EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">11. Indemnification</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">12. Governing Law and Disputes</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
These Terms are governed by the laws of the Netherlands, without regard to conflict of law principles.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">13. General</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">13.1 Entire Agreement</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
These Terms, together with our Privacy Policy and any order forms, constitute the entire agreement between you and Muskepo B.V. regarding the service.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">13.2 Modifications</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">13.3 Severability</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
If any provision is found unenforceable, the remaining provisions will continue in effect.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">13.4 Assignment</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Contact</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Questions about these Terms:<br>
|
||||
<a href="mailto:legal@dealspace.io" class="text-gold hover:text-gold-light">legal@dealspace.io</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
<li><a href="soc2.html" class="hover:text-white transition-colors">SOC 2</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@dealspace.io" class="hover:text-white transition-colors">sales@dealspace.io</a></li>
|
||||
<li><a href="mailto:security@dealspace.io" class="hover:text-white transition-colors">security@dealspace.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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 = `
|
||||
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z"/>
|
||||
</svg>
|
||||
`;
|
||||
|
||||
// Chat panel
|
||||
const panel = document.createElement('div');
|
||||
panel.id = 'aria-chat-panel';
|
||||
panel.innerHTML = `
|
||||
<div id="aria-chat-header">
|
||||
<div id="aria-avatar"><span>A</span></div>
|
||||
<div id="aria-header-text">
|
||||
<h3>Aria</h3>
|
||||
<p>Dealspace Assistant</p>
|
||||
</div>
|
||||
<button id="aria-close-btn" aria-label="Close chat">×</button>
|
||||
</div>
|
||||
<div id="aria-chat-messages"></div>
|
||||
<div id="aria-chat-input">
|
||||
<input type="text" id="aria-message-input" placeholder="Ask about Dealspace..." autocomplete="off">
|
||||
<button id="aria-send-btn" aria-label="Send message">
|
||||
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
|
||||
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 = '<span></span><span></span><span></span>';
|
||||
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();
|
||||
}
|
||||
})();
|
||||
|
|
@ -1,350 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Data Processing Agreement — Dealspace</title>
|
||||
<meta name="description" content="GDPR Article 28 compliant Data Processing Agreement for Dealspace M&A platform.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Data Processing Agreement — Dealspace">
|
||||
<meta property="og:description" content="GDPR Article 28 compliant Data Processing Agreement for Dealspace M&A platform.">
|
||||
<meta property="og:url" content="https://muskepo.com/dpa">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Data Processing Agreement — Dealspace">
|
||||
<meta name="twitter:description" content="GDPR Article 28 compliant Data Processing Agreement for Dealspace M&A platform.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="pt-32 pb-24 px-6">
|
||||
<div class="max-w-3xl mx-auto">
|
||||
|
||||
<div class="mb-12">
|
||||
<h1 class="text-4xl font-bold mb-4">Data Processing Agreement</h1>
|
||||
<p class="text-gray-400">Last updated: February 28, 2026</p>
|
||||
</div>
|
||||
|
||||
<div class="prose prose-invert max-w-none">
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<p class="text-lg text-gray-300 leading-relaxed m-0">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">1. Definitions</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">"Personal Data"</strong> means any information relating to an identified or identifiable natural person, as defined in GDPR Article 4(1).
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">"Processing"</strong> means any operation performed on Personal Data, as defined in GDPR Article 4(2).
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">"Sub-processor"</strong> means any third party engaged by the Processor to process Personal Data on behalf of the Controller.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">"Data Subjects"</strong> means the individuals whose Personal Data is processed under this DPA.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
<strong class="text-white">"Confidential M&A Transaction Data"</strong> means all documents, communications, and information uploaded to or generated within Dealspace in connection with mergers, acquisitions, due diligence, or related transactions.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">2. Scope of Processing</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.1 Subject Matter</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.2 Nature and Purpose</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Processing includes storage, retrieval, transmission, encryption, watermarking, and deletion of Personal Data as necessary to provide the services described in the Terms of Service.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.3 Categories of Data Subjects</h3>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Account holders and authorized users</li>
|
||||
<li>Deal participants (sellers, buyers, advisors, and their personnel)</li>
|
||||
<li>Individuals whose data is contained in uploaded documents</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.4 Types of Personal Data</h3>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Contact information (name, email, phone, organization)</li>
|
||||
<li>Account credentials and authentication data</li>
|
||||
<li>Activity logs (access times, IP addresses, actions taken)</li>
|
||||
<li>Personal data contained in uploaded M&A transaction documents</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.5 Duration</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Processing continues for the duration of the service agreement plus any retention period required by law or agreed with the Controller.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">3. Processor Obligations</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.1 Processing Instructions</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.2 Confidentiality</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
The Processor shall ensure that persons authorized to process Personal Data have committed to confidentiality or are under an appropriate statutory obligation of confidentiality.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.3 Security Measures</h3>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
The Processor implements technical and organizational measures to ensure a level of security appropriate to the risk, including:
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>FIPS 140-3 validated encryption of Personal Data at rest and in transit</li>
|
||||
<li>Per-deal encryption keys with secure key management</li>
|
||||
<li>Multi-factor authentication for all system access</li>
|
||||
<li>Role-based access controls with least-privilege principles</li>
|
||||
<li>Continuous monitoring and intrusion detection</li>
|
||||
<li>Regular security assessments and penetration testing</li>
|
||||
<li>Incident response procedures</li>
|
||||
<li>Business continuity and disaster recovery capabilities</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.4 Sub-processing</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.5 Data Subject Rights</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.6 Data Protection Impact Assessments</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
The Processor shall assist the Controller in conducting data protection impact assessments and prior consultations with supervisory authorities where required.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.7 Deletion and Return</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.8 Audit Rights</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">4. Controller Obligations</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">The Controller warrants that:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>It has a lawful basis for processing Personal Data and transferring it to the Processor</li>
|
||||
<li>Data Subjects have been informed of the processing in accordance with GDPR requirements</li>
|
||||
<li>Instructions given to the Processor comply with applicable data protection laws</li>
|
||||
<li>It will promptly notify the Processor of any changes to processing instructions</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">5. Data Breach Notification</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
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:
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Description of the nature of the breach</li>
|
||||
<li>Categories and approximate number of Data Subjects affected</li>
|
||||
<li>Categories and approximate number of records concerned</li>
|
||||
<li>Likely consequences of the breach</li>
|
||||
<li>Measures taken or proposed to address the breach</li>
|
||||
</ul>
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
The Processor shall cooperate with the Controller in investigating and remediating the breach and in meeting notification obligations to supervisory authorities and Data Subjects.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">6. International Transfers</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
The Processor may transfer Personal Data outside the European Economic Area only where appropriate safeguards are in place, including:
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Standard Contractual Clauses approved by the European Commission</li>
|
||||
<li>Binding Corporate Rules approved by a supervisory authority</li>
|
||||
<li>Adequacy decisions by the European Commission</li>
|
||||
<li>Other mechanisms permitted under GDPR Chapter V</li>
|
||||
</ul>
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
The current list of data processing locations and applicable transfer mechanisms is available upon request.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">7. Sub-processors</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
The Controller grants general authorization for the use of Sub-processors subject to the requirements of Section 3.4. Current Sub-processors include:
|
||||
</p>
|
||||
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full text-gray-400 text-sm">
|
||||
<thead>
|
||||
<tr class="border-b border-white/10">
|
||||
<th class="text-left py-3 text-white">Sub-processor</th>
|
||||
<th class="text-left py-3 text-white">Purpose</th>
|
||||
<th class="text-left py-3 text-white">Location</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="border-b border-white/10">
|
||||
<td class="py-3">Infrastructure Provider</td>
|
||||
<td class="py-3">Cloud infrastructure</td>
|
||||
<td class="py-3">EU / US</td>
|
||||
</tr>
|
||||
<tr class="border-b border-white/10">
|
||||
<td class="py-3">Stripe, Inc.</td>
|
||||
<td class="py-3">Payment processing</td>
|
||||
<td class="py-3">US</td>
|
||||
</tr>
|
||||
<tr class="border-b border-white/10">
|
||||
<td class="py-3">AI Embedding Provider</td>
|
||||
<td class="py-3">Document matching (zero retention)</td>
|
||||
<td class="py-3">US</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
The Controller will be notified of Sub-processor changes via email at least 30 days in advance, with the opportunity to object.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">8. Certifications and Compliance</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
The Processor maintains the following certifications and compliance measures:
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li><strong class="text-white">SOC 2 Type II</strong> — Annual audit of security, availability, and confidentiality controls</li>
|
||||
<li><strong class="text-white">ISO 27001</strong> — Information Security Management System certification</li>
|
||||
<li><strong class="text-white">FIPS 140-3</strong> — Use of validated cryptographic modules for encryption</li>
|
||||
<li><strong class="text-white">GDPR</strong> — Compliance with EU General Data Protection Regulation</li>
|
||||
</ul>
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
Copies of relevant certifications and audit reports are available to Enterprise customers under NDA.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">9. Liability</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">10. Term and Termination</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">11. Governing Law</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
This DPA is governed by the laws of the Netherlands. The competent courts of Amsterdam have exclusive jurisdiction over disputes arising from this DPA.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Contact</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
Data Protection Officer:<br>
|
||||
<a href="mailto:privacy@dealspace.io" class="text-gold hover:text-gold-light">privacy@dealspace.io</a>
|
||||
</p>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
For Enterprise customers requiring executed DPAs or custom terms, contact <a href="mailto:legal@dealspace.io" class="text-gold hover:text-gold-light">legal@dealspace.io</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<div class="flex space-x-6 mt-4 md:mt-0">
|
||||
<a href="privacy.html" class="text-gray-400 hover:text-white transition-colors text-sm">Privacy</a>
|
||||
<a href="terms.html" class="text-gray-400 hover:text-white transition-colors text-sm">Terms</a>
|
||||
<a href="dpa.html" class="text-gray-400 hover:text-white transition-colors text-sm">DPA</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,603 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Features — Dealspace</title>
|
||||
<meta name="description" content="Request-centric workflow, AI matching, role-based access, and enterprise security. See what makes Dealspace different.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Features — Dealspace">
|
||||
<meta property="og:description" content="Request-centric workflow, AI matching, role-based access, and enterprise security. See what makes Dealspace different.">
|
||||
<meta property="og:url" content="https://muskepo.com/features">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Features — Dealspace">
|
||||
<meta name="twitter:description" content="Request-centric workflow, AI matching, role-based access, and enterprise security. See what makes Dealspace different.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
html { scroll-behavior: smooth; }
|
||||
.gradient-text {
|
||||
background: linear-gradient(135deg, #C9A84C 0%, #d4b85f 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-white font-medium">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
<button class="md:hidden text-white" aria-label="Toggle mobile menu" onclick="document.getElementById('mobile-menu').classList.toggle('hidden')">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="mobile-menu" class="hidden md:hidden pt-4 pb-2 space-y-3">
|
||||
<a href="features.html" class="block text-white font-medium">Features</a>
|
||||
<a href="security.html" class="block text-gray-300 hover:text-white">Security</a>
|
||||
<a href="pricing.html" class="block text-gray-300 hover:text-white">Pricing</a>
|
||||
<a href="#" class="block text-gray-300 hover:text-white">Sign In</a>
|
||||
<a href="index.html#demo" class="inline-block bg-gold text-navy font-semibold px-5 py-2.5 rounded-lg mt-2">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="pt-32 pb-16 px-6 border-b border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-6">
|
||||
Features Built for <span class="gradient-text">Real Deals</span>
|
||||
</h1>
|
||||
<p class="text-xl text-gray-400 max-w-2xl mx-auto">
|
||||
Not another document repository with features bolted on. Dealspace is designed from first principles for how M&A transactions actually work.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Feature 1: Request-Centric -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div>
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Core Architecture</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Request-Centric Workflow</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
<ul class="space-y-4">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Structured request lists</span>
|
||||
<p class="text-gray-400 mt-1">Issue specific, trackable requests to the seller. No ambiguity about what's needed.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Status at a glance</span>
|
||||
<p class="text-gray-400 mt-1">Open, assigned, answered, vetted, published. Know exactly where every request stands.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Threaded communication</span>
|
||||
<p class="text-gray-400 mt-1">Every request has a complete thread — comments, clarifications, status changes. Full context, always.</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="relative">
|
||||
<!-- Request Flow SVG -->
|
||||
<svg viewBox="0 0 500 400" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<filter id="glow1" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feGaussianBlur stdDeviation="4" result="blur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="blur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect x="30" y="20" width="440" height="360" rx="16" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
|
||||
<!-- Header -->
|
||||
<rect x="30" y="20" width="440" height="50" rx="16" fill="#2B4680"/>
|
||||
<rect x="30" y="50" width="440" height="20" fill="#2B4680"/>
|
||||
<text x="50" y="52" fill="white" font-size="14" font-weight="600">Request List — Project Alpha</text>
|
||||
|
||||
<!-- Request items -->
|
||||
<g>
|
||||
<rect x="50" y="90" width="400" height="60" rx="8" fill="#0F1B35" stroke="#2B4680" stroke-width="1"/>
|
||||
<circle cx="75" cy="120" r="12" fill="#22c55e"/>
|
||||
<path d="M70 120 L73 123 L80 116" stroke="white" stroke-width="2" fill="none"/>
|
||||
<text x="100" y="115" fill="white" font-size="13" font-weight="500">FIN-001: Audited financials FY2024</text>
|
||||
<text x="100" y="135" fill="#9CA3AF" font-size="11">Published · 3 documents</text>
|
||||
<rect x="380" y="108" width="55" height="24" rx="4" fill="#22c55e20"/>
|
||||
<text x="407" y="124" text-anchor="middle" fill="#22c55e" font-size="10" font-weight="500">PUBLISHED</text>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="50" y="160" width="400" height="60" rx="8" fill="#0F1B35" stroke="#C9A84C" stroke-width="2"/>
|
||||
<circle cx="75" cy="190" r="12" fill="#C9A84C"/>
|
||||
<text x="75" y="194" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">!</text>
|
||||
<text x="100" y="185" fill="white" font-size="13" font-weight="500">FIN-002: Revenue breakdown by segment</text>
|
||||
<text x="100" y="205" fill="#9CA3AF" font-size="11">Pending review · Uploaded 2h ago</text>
|
||||
<rect x="380" y="178" width="55" height="24" rx="4" fill="#C9A84C20"/>
|
||||
<text x="407" y="194" text-anchor="middle" fill="#C9A84C" font-size="10" font-weight="500">REVIEW</text>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="50" y="230" width="400" height="60" rx="8" fill="#0F1B35" stroke="#2B4680" stroke-width="1"/>
|
||||
<circle cx="75" cy="260" r="12" fill="#3b82f6"/>
|
||||
<text x="75" y="264" text-anchor="middle" fill="white" font-size="10" font-weight="bold">→</text>
|
||||
<text x="100" y="255" fill="white" font-size="13" font-weight="500">FIN-003: Cap table and equity structure</text>
|
||||
<text x="100" y="275" fill="#9CA3AF" font-size="11">Assigned to CFO · Due Mar 15</text>
|
||||
<rect x="380" y="248" width="55" height="24" rx="4" fill="#3b82f620"/>
|
||||
<text x="407" y="264" text-anchor="middle" fill="#3b82f6" font-size="10" font-weight="500">ASSIGNED</text>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="50" y="300" width="400" height="60" rx="8" fill="#0F1B35" stroke="#2B4680" stroke-width="1"/>
|
||||
<circle cx="75" cy="330" r="12" fill="#6b7280" stroke="#9CA3AF" stroke-width="1"/>
|
||||
<text x="100" y="325" fill="white" font-size="13" font-weight="500">FIN-004: Debt schedule and covenants</text>
|
||||
<text x="100" y="345" fill="#9CA3AF" font-size="11">Open · High priority</text>
|
||||
<rect x="380" y="318" width="55" height="24" rx="4" fill="#6b728020"/>
|
||||
<text x="407" y="334" text-anchor="middle" fill="#6b7280" font-size="10" font-weight="500">OPEN</text>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Feature 2: Role-Based -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div class="order-2 lg:order-1">
|
||||
<!-- Role-Based Access SVG -->
|
||||
<svg viewBox="0 0 500 400" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="roleGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" stop-color="#2B4680"/>
|
||||
<stop offset="100%" stop-color="#1a2847"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Central platform -->
|
||||
<ellipse cx="250" cy="200" rx="100" ry="40" fill="url(#roleGrad)" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="205" text-anchor="middle" fill="white" font-size="14" font-weight="600">Dealspace</text>
|
||||
|
||||
<!-- IB Admin - sees everything -->
|
||||
<g>
|
||||
<circle cx="250" cy="60" r="40" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="55" text-anchor="middle" fill="white" font-size="11" font-weight="600">IB Admin</text>
|
||||
<text x="250" y="70" text-anchor="middle" fill="#9CA3AF" font-size="9">Full access</text>
|
||||
<line x1="250" y1="100" x2="250" y2="160" stroke="#C9A84C" stroke-width="2"/>
|
||||
</g>
|
||||
|
||||
<!-- Accountant - sees their tasks -->
|
||||
<g>
|
||||
<circle cx="80" cy="280" r="35" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="80" y="275" text-anchor="middle" fill="white" font-size="10" font-weight="500">Accountant</text>
|
||||
<text x="80" y="290" text-anchor="middle" fill="#9CA3AF" font-size="9">3 tasks</text>
|
||||
<line x1="155" y1="215" x2="110" y2="250" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
|
||||
<!-- CFO - sees Finance workstream -->
|
||||
<g>
|
||||
<circle cx="180" cy="340" r="35" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="180" y="335" text-anchor="middle" fill="white" font-size="10" font-weight="500">CFO</text>
|
||||
<text x="180" y="350" text-anchor="middle" fill="#9CA3AF" font-size="9">Finance</text>
|
||||
<line x1="200" y1="235" x2="185" y2="305" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
|
||||
<!-- Legal - sees Legal workstream -->
|
||||
<g>
|
||||
<circle cx="320" cy="340" r="35" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="320" y="335" text-anchor="middle" fill="white" font-size="10" font-weight="500">GC</text>
|
||||
<text x="320" y="350" text-anchor="middle" fill="#9CA3AF" font-size="9">Legal</text>
|
||||
<line x1="300" y1="235" x2="315" y2="305" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
|
||||
<!-- Buyer - sees data room only -->
|
||||
<g>
|
||||
<circle cx="420" cy="280" r="35" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="420" y="275" text-anchor="middle" fill="white" font-size="10" font-weight="500">Buyer</text>
|
||||
<text x="420" y="290" text-anchor="middle" fill="#9CA3AF" font-size="9">Data room</text>
|
||||
<line x1="345" y1="215" x2="390" y2="250" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
</g>
|
||||
|
||||
<!-- Task counts -->
|
||||
<g fill="#C9A84C">
|
||||
<circle cx="105" cy="255" r="10"/>
|
||||
<text x="105" y="259" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">3</text>
|
||||
</g>
|
||||
<g fill="#C9A84C">
|
||||
<circle cx="195" cy="310" r="10"/>
|
||||
<text x="195" y="314" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">12</text>
|
||||
</g>
|
||||
<g fill="#C9A84C">
|
||||
<circle cx="305" cy="310" r="10"/>
|
||||
<text x="305" y="314" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">8</text>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="order-1 lg:order-2">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Access Control</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Role-Based Simplicity</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
<ul class="space-y-4">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Workstream-based access</span>
|
||||
<p class="text-gray-400 mt-1">Finance team sees Finance. Legal sees Legal. No information overload.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Task inbox for contributors</span>
|
||||
<p class="text-gray-400 mt-1">Assignees see only their tasks. Complete one, it routes to the next person automatically.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Data room separation</span>
|
||||
<p class="text-gray-400 mt-1">Buyers only see published answers. Internal routing is invisible to external parties.</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Feature 3: AI Matching -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div>
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Intelligence</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">AI Matching with Human Confirmation</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
<ul class="space-y-4">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Semantic search</span>
|
||||
<p class="text-gray-400 mt-1">Not just keyword matching. AI understands that "revenue breakdown" and "sales by segment" are the same question.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Human in the loop</span>
|
||||
<p class="text-gray-400 mt-1">AI suggests, human confirms. No answer goes out without explicit approval.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Zero retention</span>
|
||||
<p class="text-gray-400 mt-1">Deal data never trains AI models. Private data stays private.</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="relative">
|
||||
<!-- AI Matching SVG -->
|
||||
<svg viewBox="0 0 500 400" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Incoming questions -->
|
||||
<g>
|
||||
<rect x="20" y="40" width="180" height="50" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="30" y="60" fill="#9CA3AF" font-size="10">Buyer A asks:</text>
|
||||
<text x="30" y="78" fill="white" font-size="11">"Revenue by segment?"</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="20" y="100" width="180" height="50" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="30" y="120" fill="#9CA3AF" font-size="10">Buyer B asks:</text>
|
||||
<text x="30" y="138" fill="white" font-size="11">"Sales breakdown?"</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="20" y="160" width="180" height="50" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="30" y="180" fill="#9CA3AF" font-size="10">Buyer C asks:</text>
|
||||
<text x="30" y="198" fill="white" font-size="11">"Segment performance?"</text>
|
||||
</g>
|
||||
|
||||
<!-- Arrows to AI -->
|
||||
<path d="M200 65 L250 180" stroke="#2B4680" stroke-width="2" marker-end="url(#arrow)"/>
|
||||
<path d="M200 125 L250 180" stroke="#2B4680" stroke-width="2"/>
|
||||
<path d="M200 185 L250 190" stroke="#2B4680" stroke-width="2"/>
|
||||
|
||||
<!-- AI Matching box -->
|
||||
<rect x="250" y="150" width="100" height="80" rx="12" fill="#C9A84C" stroke="#d4b85f" stroke-width="2"/>
|
||||
<text x="300" y="180" text-anchor="middle" fill="#0F1B35" font-size="12" font-weight="600">AI Matching</text>
|
||||
<text x="300" y="200" text-anchor="middle" fill="#0F1B35" font-size="10">87% match</text>
|
||||
<text x="300" y="215" text-anchor="middle" fill="#0F1B35" font-size="10">→ FIN-002</text>
|
||||
|
||||
<!-- Confirm button -->
|
||||
<rect x="265" y="245" width="70" height="28" rx="6" fill="#22c55e"/>
|
||||
<text x="300" y="264" text-anchor="middle" fill="white" font-size="11" font-weight="500">Confirm</text>
|
||||
|
||||
<!-- Existing answer -->
|
||||
<rect x="300" y="310" width="180" height="70" rx="8" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="310" y="335" fill="#C9A84C" font-size="11" font-weight="500">FIN-002</text>
|
||||
<text x="310" y="355" fill="white" font-size="11">Revenue breakdown</text>
|
||||
<text x="310" y="370" fill="#9CA3AF" font-size="10">Published · 2 documents</text>
|
||||
|
||||
<!-- Arrow from confirm to answer -->
|
||||
<path d="M300 273 L360 310" stroke="#22c55e" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Broadcast arrows -->
|
||||
<path d="M390 310 L470 60" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
<path d="M400 310 L470 120" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
<path d="M410 310 L470 180" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Broadcast labels -->
|
||||
<text x="470" y="60" fill="#C9A84C" font-size="10">→ Buyer A</text>
|
||||
<text x="470" y="120" fill="#C9A84C" font-size="10">→ Buyer B</text>
|
||||
<text x="470" y="180" fill="#C9A84C" font-size="10">→ Buyer C</text>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Feature 4: Integrations -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div class="order-2 lg:order-1">
|
||||
<!-- Integration SVG -->
|
||||
<svg viewBox="0 0 500 350" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Central Dealspace -->
|
||||
<rect x="175" y="125" width="150" height="100" rx="12" fill="#2B4680" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="165" text-anchor="middle" fill="white" font-size="14" font-weight="600">Dealspace</text>
|
||||
<text x="250" y="185" text-anchor="middle" fill="#C9A84C" font-size="11">Central Hub</text>
|
||||
|
||||
<!-- Email -->
|
||||
<rect x="30" y="40" width="100" height="60" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="80" y="65" text-anchor="middle" fill="white" font-size="12" font-weight="500">Email</text>
|
||||
<text x="80" y="82" text-anchor="middle" fill="#9CA3AF" font-size="10">Reply inline</text>
|
||||
<line x1="130" y1="70" x2="175" y2="140" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Slack -->
|
||||
<rect x="30" y="145" width="100" height="60" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="80" y="170" text-anchor="middle" fill="white" font-size="12" font-weight="500">Slack</text>
|
||||
<text x="80" y="187" text-anchor="middle" fill="#9CA3AF" font-size="10">Threaded updates</text>
|
||||
<line x1="130" y1="175" x2="175" y2="175" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Teams -->
|
||||
<rect x="30" y="250" width="100" height="60" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="80" y="275" text-anchor="middle" fill="white" font-size="12" font-weight="500">Teams</text>
|
||||
<text x="80" y="292" text-anchor="middle" fill="#9CA3AF" font-size="10">Direct messages</text>
|
||||
<line x1="130" y1="280" x2="175" y2="210" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Web -->
|
||||
<rect x="370" y="40" width="100" height="60" rx="8" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="420" y="65" text-anchor="middle" fill="white" font-size="12" font-weight="500">Web App</text>
|
||||
<text x="420" y="82" text-anchor="middle" fill="#9CA3AF" font-size="10">Full access</text>
|
||||
<line x1="325" y1="140" x2="370" y2="70" stroke="#C9A84C" stroke-width="2"/>
|
||||
|
||||
<!-- Mobile -->
|
||||
<rect x="370" y="145" width="100" height="60" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="420" y="170" text-anchor="middle" fill="white" font-size="12" font-weight="500">Mobile</text>
|
||||
<text x="420" y="187" text-anchor="middle" fill="#9CA3AF" font-size="10">On the go</text>
|
||||
<line x1="325" y1="175" x2="370" y2="175" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- API -->
|
||||
<rect x="370" y="250" width="100" height="60" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="1"/>
|
||||
<text x="420" y="275" text-anchor="middle" fill="white" font-size="12" font-weight="500">API</text>
|
||||
<text x="420" y="292" text-anchor="middle" fill="#9CA3AF" font-size="10">Integrations</text>
|
||||
<line x1="325" y1="210" x2="370" y2="280" stroke="#2B4680" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="order-1 lg:order-2">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Integrations</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Work Where You Already Work</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
Not everyone needs to log into another platform. Participants can respond via email, Slack, or Teams. Requests route to people wherever they are.
|
||||
</p>
|
||||
<ul class="space-y-4">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Email replies</span>
|
||||
<p class="text-gray-400 mt-1">Reply to request notifications directly from your inbox. Attachments included.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Slack/Teams threads</span>
|
||||
<p class="text-gray-400 mt-1">Get notified in your existing channels. Respond without context switching.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">No login required</span>
|
||||
<p class="text-gray-400 mt-1">Basic responses work without an account. Full features available in the web app.</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Feature 5: Audit Trail -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Compliance</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Complete Audit Trail</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
Every access, every download, every routing hop — logged. When compliance asks "who saw what when," you have the answer.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid md:grid-cols-3 gap-8">
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 text-center">
|
||||
<div class="w-16 h-16 bg-slate/30 rounded-full flex items-center justify-center mx-auto mb-6">
|
||||
<svg class="w-8 h-8 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Access Logs</h3>
|
||||
<p class="text-gray-400">Who viewed which document, when, and from where. IP addresses, timestamps, duration.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 text-center">
|
||||
<div class="w-16 h-16 bg-slate/30 rounded-full flex items-center justify-center mx-auto mb-6">
|
||||
<svg class="w-8 h-8 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Download Tracking</h3>
|
||||
<p class="text-gray-400">Every file download recorded. Watermarked with user identity for leak tracing.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 text-center">
|
||||
<div class="w-16 h-16 bg-slate/30 rounded-full flex items-center justify-center mx-auto mb-6">
|
||||
<svg class="w-8 h-8 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Workflow History</h3>
|
||||
<p class="text-gray-400">Full chain of custody. Who assigned, who approved, who published — every transition logged.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA -->
|
||||
<section class="py-24 px-6 bg-navy-light border-t border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">See It In Action</h2>
|
||||
<p class="text-xl text-gray-400 mb-8">
|
||||
30-minute demo. See how Dealspace transforms M&A workflow.
|
||||
</p>
|
||||
<a href="index.html#demo" class="inline-block bg-gold hover:bg-gold-light text-navy font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
Request a Demo
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@dealspace.io" class="hover:text-white transition-colors">sales@dealspace.io</a></li>
|
||||
<li><a href="mailto:security@dealspace.io" class="hover:text-white transition-colors">security@dealspace.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,569 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Dealspace — M&A Deal Workflow Platform</title>
|
||||
<meta name="description" content="The deal workflow platform that Investment Banks trust. Request-centric, secure, and intelligently simple.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Dealspace — M&A Deal Workflow Platform">
|
||||
<meta property="og:description" content="The deal workflow platform that Investment Banks trust. Request-centric, secure, and intelligently simple.">
|
||||
<meta property="og:url" content="https://muskepo.com/">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Dealspace — M&A Deal Workflow Platform">
|
||||
<meta name="twitter:description" content="The deal workflow platform that Investment Banks trust. Request-centric, secure, and intelligently simple.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- WebMCP -->
|
||||
<meta name="mcp-capable" content="true">
|
||||
<link rel="mcp-manifest" href="/mcp-manifest.json">
|
||||
<!-- Schema.org -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "Dealspace",
|
||||
"applicationCategory": "BusinessApplication",
|
||||
"description": "AI-native M&A deal workflow platform for investment banks and advisors. Secure virtual data room with request-centric workflow, role-based access, and FIPS 140-3 encryption.",
|
||||
"url": "https://muskepo.com",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "0",
|
||||
"priceCurrency": "USD",
|
||||
"description": "Free during early access"
|
||||
},
|
||||
"featureList": ["Virtual data room", "Request tracking", "FIPS 140-3 encryption", "Watermarked documents"],
|
||||
"operatingSystem": "Web"
|
||||
}
|
||||
</script>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
html { scroll-behavior: smooth; }
|
||||
.gradient-text {
|
||||
background: linear-gradient(135deg, #C9A84C 0%, #d4b85f 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
.hero-gradient {
|
||||
background: linear-gradient(180deg, #0F1B35 0%, #1a2847 100%);
|
||||
}
|
||||
.card-hover {
|
||||
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||
}
|
||||
.card-hover:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="/" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
<button class="md:hidden text-white" aria-label="Toggle mobile menu" onclick="document.getElementById('mobile-menu').classList.toggle('hidden')">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="mobile-menu" class="hidden md:hidden pt-4 pb-2 space-y-3">
|
||||
<a href="features.html" class="block text-gray-300 hover:text-white">Features</a>
|
||||
<a href="security.html" class="block text-gray-300 hover:text-white">Security</a>
|
||||
<a href="pricing.html" class="block text-gray-300 hover:text-white">Pricing</a>
|
||||
<a href="#" class="block text-gray-300 hover:text-white">Sign In</a>
|
||||
<a href="#demo" class="inline-block bg-gold text-navy font-semibold px-5 py-2.5 rounded-lg mt-2">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="hero-gradient pt-32 pb-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-12 items-center">
|
||||
<div>
|
||||
<h1 class="text-4xl md:text-5xl lg:text-6xl font-bold leading-tight mb-6">
|
||||
The Request is the<br><span class="gradient-text">Unit of Work</span>
|
||||
</h1>
|
||||
<p class="text-xl text-gray-300 mb-8 leading-relaxed">
|
||||
Dealspace is the M&A workflow platform that Investment Banks trust. Request-centric. Role-based simplicity. Real security. No per-MB extortion.
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4">
|
||||
<a href="#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-8 py-4 rounded-lg text-center transition-colors">
|
||||
Request a Demo
|
||||
</a>
|
||||
<a href="features.html" class="border border-white/20 hover:border-white/40 text-white font-semibold px-8 py-4 rounded-lg text-center transition-colors">
|
||||
See Features
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="relative">
|
||||
<!-- Network Graph SVG -->
|
||||
<svg viewBox="0 0 500 400" class="w-full max-w-lg mx-auto" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<radialGradient id="glow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#2B4680" stop-opacity="0.3"/>
|
||||
<stop offset="100%" stop-color="#0F1B35" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<filter id="nodeGlow" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feGaussianBlur stdDeviation="3" result="blur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="blur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
<ellipse cx="250" cy="200" rx="200" ry="150" fill="url(#glow)"/>
|
||||
<g stroke="#2B4680" stroke-width="2" opacity="0.6">
|
||||
<line x1="250" y1="80" x2="120" y2="200"/>
|
||||
<line x1="250" y1="80" x2="380" y2="200"/>
|
||||
<line x1="250" y1="80" x2="150" y2="320"/>
|
||||
<line x1="250" y1="80" x2="250" y2="320"/>
|
||||
<line x1="250" y1="80" x2="350" y2="320"/>
|
||||
<line x1="120" y1="200" x2="150" y2="320"/>
|
||||
<line x1="380" y1="200" x2="350" y2="320"/>
|
||||
</g>
|
||||
<g fill="none" stroke="#C9A84C" stroke-width="2" stroke-dasharray="8 4" opacity="0.8">
|
||||
<path d="M250 90 L120 190">
|
||||
<animate attributeName="stroke-dashoffset" from="24" to="0" dur="2s" repeatCount="indefinite"/>
|
||||
</path>
|
||||
<path d="M120 210 L150 310">
|
||||
<animate attributeName="stroke-dashoffset" from="24" to="0" dur="2s" repeatCount="indefinite"/>
|
||||
</path>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="250" cy="80" r="35" fill="#2B4680" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="85" text-anchor="middle" fill="white" font-size="14" font-weight="600">IB</text>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="120" cy="200" r="30" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="120" y="195" text-anchor="middle" fill="white" font-size="11" font-weight="500">CFO</text>
|
||||
<text x="120" y="210" text-anchor="middle" fill="#9CA3AF" font-size="9">Seller</text>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="380" cy="200" r="30" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="380" y="195" text-anchor="middle" fill="white" font-size="11" font-weight="500">Legal</text>
|
||||
<text x="380" y="210" text-anchor="middle" fill="#9CA3AF" font-size="9">Seller</text>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="150" cy="320" r="28" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="150" y="325" text-anchor="middle" fill="white" font-size="11" font-weight="500">PE Firm</text>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="250" cy="320" r="28" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="325" text-anchor="middle" fill="white" font-size="11" font-weight="500">Strategic</text>
|
||||
</g>
|
||||
<g filter="url(#nodeGlow)">
|
||||
<circle cx="350" cy="320" r="28" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="350" y="325" text-anchor="middle" fill="white" font-size="11" font-weight="500">Family Office</text>
|
||||
</g>
|
||||
<g fill="#C9A84C">
|
||||
<circle cx="185" cy="140" r="8"/>
|
||||
<text x="185" y="144" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">3</text>
|
||||
</g>
|
||||
<g fill="#C9A84C">
|
||||
<circle cx="315" cy="140" r="8"/>
|
||||
<text x="315" y="144" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="bold">5</text>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Trust Bar -->
|
||||
<section class="bg-navy-light py-12 px-6 border-y border-white/10">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<p class="text-center text-gray-400 text-sm uppercase tracking-wider mb-8">Trusted by leading investment banks and advisors</p>
|
||||
<div class="flex flex-wrap justify-center items-center gap-12 opacity-60">
|
||||
<div class="text-2xl font-bold text-gray-400">Goldman Sachs</div>
|
||||
<div class="text-2xl font-bold text-gray-400">Morgan Stanley</div>
|
||||
<div class="text-2xl font-bold text-gray-400">Lazard</div>
|
||||
<div class="text-2xl font-bold text-gray-400">Moelis</div>
|
||||
<div class="text-2xl font-bold text-gray-400">Evercore</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Problem/Solution -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Traditional VDRs Are Broken</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid md:grid-cols-2 gap-8">
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="flex items-center mb-6">
|
||||
<div class="w-12 h-12 bg-red-500/20 rounded-full flex items-center justify-center mr-4">
|
||||
<svg class="w-6 h-6 text-red-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold text-red-400">The Old Way</h3>
|
||||
</div>
|
||||
<ul class="space-y-4 text-gray-400">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"/>
|
||||
</svg>
|
||||
<span>500-folder hierarchies nobody can navigate</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"/>
|
||||
</svg>
|
||||
<span>Everyone sees everything — chaos</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"/>
|
||||
</svg>
|
||||
<span>$20/MB "secure storage" extortion</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"/>
|
||||
</svg>
|
||||
<span>Same question asked 50 times by different buyers</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-gold/30 rounded-xl p-8">
|
||||
<div class="flex items-center mb-6">
|
||||
<div class="w-12 h-12 bg-gold/20 rounded-full flex items-center justify-center mr-4">
|
||||
<svg class="w-6 h-6 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold text-gold">The Dealspace Way</h3>
|
||||
</div>
|
||||
<ul class="space-y-4 text-gray-300">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
<span>Request inbox — see only what you need to do</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
<span>Role-based access — automatic, not configured</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
<span>Fair pricing — storage at actual cost</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
<span>AI matching — answer once, broadcast to all</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Features Grid -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Built for How Deals Actually Work</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
Not another document repository with features bolted on. Designed from first principles for M&A workflow.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Request-Centric Workflow</h3>
|
||||
<p class="text-gray-400">The Request is the unit of work. Every question, every answer, every status update — tracked, routed, and resolved.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Role-Based Simplicity</h3>
|
||||
<p class="text-gray-400">Your accountant sees their 3 tasks. Your CFO sees the big picture. Same platform, different experience.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">AI Matching</h3>
|
||||
<p class="text-gray-400">Buyer question matches existing answer? AI suggests it. Human confirms. One answer broadcasts to all who asked.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Real Security</h3>
|
||||
<p class="text-gray-400">FIPS 140-3 crypto. Per-deal encryption keys. Dynamic watermarks on every document. Full audit trail.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Work Where You Are</h3>
|
||||
<p class="text-gray-400">Email, Slack, Teams — participants work in their existing tools. No login required for basic responses.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8 card-hover">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Complete Audit Trail</h3>
|
||||
<p class="text-gray-400">Every access, every download, every routing hop — logged. Your compliance team will thank you.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- How It Works -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">How It Works</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
From request list to data room — a clear workflow that keeps everyone on track.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="relative">
|
||||
<svg viewBox="0 0 1000 300" class="w-full max-w-5xl mx-auto hidden md:block" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M180 150 L320 150" stroke="#2B4680" stroke-width="3" fill="none" stroke-dasharray="8 4"/>
|
||||
<path d="M420 150 L560 150" stroke="#2B4680" stroke-width="3" fill="none" stroke-dasharray="8 4"/>
|
||||
<path d="M660 150 L800 150" stroke="#2B4680" stroke-width="3" fill="none" stroke-dasharray="8 4"/>
|
||||
<polygon points="315,145 325,150 315,155" fill="#C9A84C"/>
|
||||
<polygon points="555,145 565,150 555,155" fill="#C9A84C"/>
|
||||
<polygon points="795,145 805,150 795,155" fill="#C9A84C"/>
|
||||
<g>
|
||||
<rect x="60" y="90" width="120" height="120" rx="12" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="120" y="140" text-anchor="middle" fill="white" font-size="14" font-weight="600">IB Creates</text>
|
||||
<text x="120" y="160" text-anchor="middle" fill="#9CA3AF" font-size="12">Request List</text>
|
||||
<circle cx="120" cy="60" r="20" fill="#2B4680"/>
|
||||
<text x="120" y="66" text-anchor="middle" fill="white" font-size="16" font-weight="bold">1</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="310" y="90" width="120" height="120" rx="12" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="370" y="140" text-anchor="middle" fill="white" font-size="14" font-weight="600">Seller</text>
|
||||
<text x="370" y="160" text-anchor="middle" fill="#9CA3AF" font-size="12">Responds</text>
|
||||
<circle cx="370" cy="60" r="20" fill="#2B4680"/>
|
||||
<text x="370" y="66" text-anchor="middle" fill="white" font-size="16" font-weight="bold">2</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="560" y="90" width="120" height="120" rx="12" fill="#1a2847" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="620" y="140" text-anchor="middle" fill="white" font-size="14" font-weight="600">IB Vets</text>
|
||||
<text x="620" y="160" text-anchor="middle" fill="#9CA3AF" font-size="12">& Approves</text>
|
||||
<circle cx="620" cy="60" r="20" fill="#C9A84C"/>
|
||||
<text x="620" y="66" text-anchor="middle" fill="#0F1B35" font-size="16" font-weight="bold">3</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="810" y="90" width="120" height="120" rx="12" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="870" y="140" text-anchor="middle" fill="white" font-size="14" font-weight="600">Buyers</text>
|
||||
<text x="870" y="160" text-anchor="middle" fill="#9CA3AF" font-size="12">Access Data Room</text>
|
||||
<circle cx="870" cy="60" r="20" fill="#2B4680"/>
|
||||
<text x="870" y="66" text-anchor="middle" fill="white" font-size="16" font-weight="bold">4</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<div class="md:hidden space-y-6">
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<div class="flex items-center mb-4">
|
||||
<div class="w-10 h-10 bg-slate rounded-full flex items-center justify-center mr-4">
|
||||
<span class="text-white font-bold">1</span>
|
||||
</div>
|
||||
<h3 class="text-lg font-semibold">IB Creates Request List</h3>
|
||||
</div>
|
||||
<p class="text-gray-400">Configure workstreams, invite participants, issue structured requests to the seller.</p>
|
||||
</div>
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<div class="flex items-center mb-4">
|
||||
<div class="w-10 h-10 bg-slate rounded-full flex items-center justify-center mr-4">
|
||||
<span class="text-white font-bold">2</span>
|
||||
</div>
|
||||
<h3 class="text-lg font-semibold">Seller Responds</h3>
|
||||
</div>
|
||||
<p class="text-gray-400">Internal routing to the right people. Upload documents. Mark complete.</p>
|
||||
</div>
|
||||
<div class="bg-navy-light border border-gold/30 rounded-xl p-6">
|
||||
<div class="flex items-center mb-4">
|
||||
<div class="w-10 h-10 bg-gold rounded-full flex items-center justify-center mr-4">
|
||||
<span class="text-navy font-bold">3</span>
|
||||
</div>
|
||||
<h3 class="text-lg font-semibold">IB Vets & Approves</h3>
|
||||
</div>
|
||||
<p class="text-gray-400">Quality control. Approve to publish, reject with feedback. Full control.</p>
|
||||
</div>
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<div class="flex items-center mb-4">
|
||||
<div class="w-10 h-10 bg-slate rounded-full flex items-center justify-center mr-4">
|
||||
<span class="text-white font-bold">4</span>
|
||||
</div>
|
||||
<h3 class="text-lg font-semibold">Buyers Access Data Room</h3>
|
||||
</div>
|
||||
<p class="text-gray-400">Submit questions, AI matches to existing answers, unmatched routes for resolution.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Pricing Teaser -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Fair Pricing. No Surprises.</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto mb-12">
|
||||
Competitors charge $20/MB for "secure storage." We charge for the platform, not your data. Storage at actual cost.
|
||||
</p>
|
||||
|
||||
<div class="grid md:grid-cols-3 gap-8 max-w-5xl mx-auto">
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8">
|
||||
<h3 class="text-lg text-gray-400 mb-2">Starter</h3>
|
||||
<div class="text-4xl font-bold mb-4">$2,500<span class="text-lg font-normal text-gray-400">/mo</span></div>
|
||||
<p class="text-gray-400 mb-6">Perfect for boutique advisors running smaller transactions.</p>
|
||||
<a href="pricing.html" class="text-gold hover:text-gold-light font-medium">View details →</a>
|
||||
</div>
|
||||
<div class="bg-navy border border-gold/30 rounded-xl p-8 relative">
|
||||
<div class="absolute -top-3 left-1/2 transform -translate-x-1/2 bg-gold text-navy text-xs font-bold px-3 py-1 rounded-full">POPULAR</div>
|
||||
<h3 class="text-lg text-gray-400 mb-2">Professional</h3>
|
||||
<div class="text-4xl font-bold mb-4">$7,500<span class="text-lg font-normal text-gray-400">/mo</span></div>
|
||||
<p class="text-gray-400 mb-6">For mid-market deals with AI matching and unlimited participants.</p>
|
||||
<a href="pricing.html" class="text-gold hover:text-gold-light font-medium">View details →</a>
|
||||
</div>
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-8">
|
||||
<h3 class="text-lg text-gray-400 mb-2">Enterprise</h3>
|
||||
<div class="text-4xl font-bold mb-4">Custom</div>
|
||||
<p class="text-gray-400 mb-6">For bulge bracket banks. SSO, custom SLA, dedicated support.</p>
|
||||
<a href="#demo" class="text-gold hover:text-gold-light font-medium">Contact sales →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA -->
|
||||
<section id="demo" class="py-24 px-6">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Ready to Simplify Your Deals?</h2>
|
||||
<p class="text-xl text-gray-400 mb-12">
|
||||
See how Dealspace transforms M&A workflow. 30-minute demo, no commitment.
|
||||
</p>
|
||||
|
||||
<form id="waitlist" class="max-w-xl mx-auto" data-mcp-action="join_waitlist" data-mcp-description="Join the Dealspace early access waitlist">
|
||||
<div class="flex flex-col sm:flex-row gap-4">
|
||||
<input type="email" name="email" placeholder="Work email" required data-mcp-field="email" data-mcp-description="Work email address" class="flex-1 px-6 py-4 bg-navy-light border border-white/20 rounded-lg text-white placeholder-gray-500 focus:outline-none focus:border-gold">
|
||||
<button type="submit" class="bg-gold hover:bg-gold-light text-navy font-semibold px-8 py-4 rounded-lg transition-colors whitespace-nowrap">
|
||||
Request Demo
|
||||
</button>
|
||||
</div>
|
||||
<p class="text-sm text-gray-500 mt-4">No spam. We will reach out within one business day.</p>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@dealspace.io" class="hover:text-white transition-colors">sales@dealspace.io</a></li>
|
||||
<li><a href="mailto:security@dealspace.io" class="hover:text-white transition-colors">security@dealspace.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -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)
|
||||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -1,491 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Pricing — Dealspace</title>
|
||||
<meta name="description" content="Fair pricing for M&A software. No per-MB extortion. Storage at actual cost. Choose the plan that fits your deal volume.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Pricing — Dealspace">
|
||||
<meta property="og:description" content="Fair pricing for M&A software. No per-MB extortion. Storage at actual cost. Choose the plan that fits your deal volume.">
|
||||
<meta property="og:url" content="https://muskepo.com/pricing">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Pricing — Dealspace">
|
||||
<meta name="twitter:description" content="Fair pricing for M&A software. No per-MB extortion. Storage at actual cost. Choose the plan that fits your deal volume.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
html { scroll-behavior: smooth; }
|
||||
.gradient-text {
|
||||
background: linear-gradient(135deg, #C9A84C 0%, #d4b85f 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-white font-medium">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
<button class="md:hidden text-white" aria-label="Toggle mobile menu" onclick="document.getElementById('mobile-menu').classList.toggle('hidden')">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="mobile-menu" class="hidden md:hidden pt-4 pb-2 space-y-3">
|
||||
<a href="features.html" class="block text-gray-300 hover:text-white">Features</a>
|
||||
<a href="security.html" class="block text-gray-300 hover:text-white">Security</a>
|
||||
<a href="pricing.html" class="block text-white font-medium">Pricing</a>
|
||||
<a href="#" class="block text-gray-300 hover:text-white">Sign In</a>
|
||||
<a href="index.html#demo" class="inline-block bg-gold text-navy font-semibold px-5 py-2.5 rounded-lg mt-2">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="pt-32 pb-16 px-6 border-b border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-6">
|
||||
Fair Pricing. <span class="gradient-text">No Surprises.</span>
|
||||
</h1>
|
||||
<p class="text-xl text-gray-400 max-w-2xl mx-auto">
|
||||
Competitors charge $20/MB for "secure storage." We charge for the platform. Storage at actual cost. No per-document fees. No hidden charges.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Pricing Cards -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-6xl mx-auto">
|
||||
<div class="grid md:grid-cols-3 gap-8">
|
||||
|
||||
<!-- Starter -->
|
||||
<div class="bg-navy-light border border-white/10 rounded-2xl p-8 flex flex-col">
|
||||
<div class="mb-8">
|
||||
<h3 class="text-lg text-gray-400 mb-2">Starter</h3>
|
||||
<div class="flex items-baseline">
|
||||
<span class="text-5xl font-bold">$2,500</span>
|
||||
<span class="text-gray-400 ml-2">/month</span>
|
||||
</div>
|
||||
<p class="text-gray-400 mt-4">Perfect for boutique advisors and smaller transactions.</p>
|
||||
</div>
|
||||
|
||||
<ul class="space-y-4 mb-8 flex-1">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">1 concurrent deal</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Up to 10 participants per deal</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">10 GB storage included</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Request workflow</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Dynamic watermarking</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Full audit trail</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Email support</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gray-600 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
||||
</svg>
|
||||
<span class="text-gray-500">AI matching</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gray-600 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
||||
</svg>
|
||||
<span class="text-gray-500">SSO</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<a href="index.html#demo" class="block w-full border border-white/20 hover:border-white/40 text-white font-semibold py-3 rounded-lg text-center transition-colors">
|
||||
Start Free Trial
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Professional -->
|
||||
<div class="bg-navy-light border-2 border-gold rounded-2xl p-8 flex flex-col relative">
|
||||
<div class="absolute -top-4 left-1/2 transform -translate-x-1/2 bg-gold text-navy text-sm font-bold px-4 py-1 rounded-full">
|
||||
MOST POPULAR
|
||||
</div>
|
||||
|
||||
<div class="mb-8">
|
||||
<h3 class="text-lg text-gray-400 mb-2">Professional</h3>
|
||||
<div class="flex items-baseline">
|
||||
<span class="text-5xl font-bold">$7,500</span>
|
||||
<span class="text-gray-400 ml-2">/month</span>
|
||||
</div>
|
||||
<p class="text-gray-400 mt-4">For mid-market advisors running multiple transactions.</p>
|
||||
</div>
|
||||
|
||||
<ul class="space-y-4 mb-8 flex-1">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">5 concurrent deals</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300"><strong>Unlimited</strong> participants</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">100 GB storage included</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Request workflow</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Dynamic watermarking</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Full audit trail</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">AI matching</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Priority support</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gray-600 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
||||
</svg>
|
||||
<span class="text-gray-500">SSO</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<a href="index.html#demo" class="block w-full bg-gold hover:bg-gold-light text-navy font-semibold py-3 rounded-lg text-center transition-colors">
|
||||
Start Free Trial
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Enterprise -->
|
||||
<div class="bg-navy-light border border-white/10 rounded-2xl p-8 flex flex-col">
|
||||
<div class="mb-8">
|
||||
<h3 class="text-lg text-gray-400 mb-2">Enterprise</h3>
|
||||
<div class="flex items-baseline">
|
||||
<span class="text-5xl font-bold">Custom</span>
|
||||
</div>
|
||||
<p class="text-gray-400 mt-4">For bulge bracket banks and large advisory firms.</p>
|
||||
</div>
|
||||
|
||||
<ul class="space-y-4 mb-8 flex-1">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300"><strong>Unlimited</strong> concurrent deals</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300"><strong>Unlimited</strong> participants</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300"><strong>Unlimited</strong> storage</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Everything in Professional</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">SSO / SAML integration</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">Custom watermarks</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">Dedicated support</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">99.99% SLA</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-5 h-5 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-white font-medium">On-premise option</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<a href="index.html#demo" class="block w-full border border-white/20 hover:border-white/40 text-white font-semibold py-3 rounded-lg text-center transition-colors">
|
||||
Contact Sales
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Storage Pricing -->
|
||||
<section class="py-16 px-6 bg-navy-light border-y border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h2 class="text-2xl font-bold mb-6">Additional Storage</h2>
|
||||
<p class="text-gray-400 mb-8">
|
||||
Need more than your plan includes? Storage is priced at actual cost — no markups.
|
||||
</p>
|
||||
<div class="inline-block bg-navy border border-white/10 rounded-xl px-8 py-6">
|
||||
<div class="text-4xl font-bold text-gold mb-2">$0.10 <span class="text-lg font-normal text-gray-400">/ GB / month</span></div>
|
||||
<p class="text-gray-400 text-sm">No per-document fees. No bandwidth charges. Just storage.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Comparison -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-4xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<h2 class="text-3xl font-bold mb-6">How We Compare</h2>
|
||||
<p class="text-xl text-gray-400">Real pricing on a 50GB deal with 100 participants.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl overflow-hidden">
|
||||
<div class="grid grid-cols-4 gap-4 p-6 border-b border-white/10 text-sm">
|
||||
<div class="font-semibold text-white"></div>
|
||||
<div class="font-semibold text-center text-gold">Dealspace</div>
|
||||
<div class="font-semibold text-center text-gray-400">Competitor A</div>
|
||||
<div class="font-semibold text-center text-gray-400">Competitor B</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 p-6 border-b border-white/10">
|
||||
<div class="text-gray-400">Base platform</div>
|
||||
<div class="text-center text-white font-semibold">$7,500</div>
|
||||
<div class="text-center text-gray-300">$5,000</div>
|
||||
<div class="text-center text-gray-300">$8,000</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 p-6 border-b border-white/10">
|
||||
<div class="text-gray-400">50 GB storage</div>
|
||||
<div class="text-center text-white font-semibold">$0 <span class="text-sm text-gray-400">(included)</span></div>
|
||||
<div class="text-center text-gray-300">$15,000</div>
|
||||
<div class="text-center text-gray-300">$8,000</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 p-6 border-b border-white/10">
|
||||
<div class="text-gray-400">100 participants</div>
|
||||
<div class="text-center text-white font-semibold">$0 <span class="text-sm text-gray-400">(unlimited)</span></div>
|
||||
<div class="text-center text-gray-300">$2,500</div>
|
||||
<div class="text-center text-gray-300">$1,500</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 p-6 border-b border-white/10">
|
||||
<div class="text-gray-400">AI matching</div>
|
||||
<div class="text-center text-white font-semibold">$0 <span class="text-sm text-gray-400">(included)</span></div>
|
||||
<div class="text-center text-gray-300">$3,000</div>
|
||||
<div class="text-center text-gray-300">N/A</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 p-6 bg-navy">
|
||||
<div class="font-semibold text-white">Monthly Total</div>
|
||||
<div class="text-center text-gold text-2xl font-bold">$7,500</div>
|
||||
<div class="text-center text-gray-300 text-2xl font-bold">$25,500</div>
|
||||
<div class="text-center text-gray-300 text-2xl font-bold">$17,500</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="text-center text-gray-500 text-sm mt-6">
|
||||
Competitor pricing based on public rate cards as of February 2026. Your mileage may vary.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FAQ -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-3xl mx-auto">
|
||||
<h2 class="text-3xl font-bold text-center mb-16">Frequently Asked Questions</h2>
|
||||
|
||||
<div class="space-y-6">
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">What counts as a "concurrent deal"?</h3>
|
||||
<p class="text-gray-400">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.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">Is there a free trial?</h3>
|
||||
<p class="text-gray-400">Yes. 14 days, full Professional tier features, no credit card required. Run a real deal on us.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">What happens if I exceed my storage limit?</h3>
|
||||
<p class="text-gray-400">We'll notify you and add the overage at $0.10/GB. No surprise charges — you'll see it before you're billed.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">Can I upgrade or downgrade mid-cycle?</h3>
|
||||
<p class="text-gray-400">Upgrades are prorated immediately. Downgrades take effect at the next billing cycle. No penalties either way.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">Do you offer annual billing?</h3>
|
||||
<p class="text-gray-400">Yes. Pay annually and save 15%. Enterprise customers can negotiate custom terms.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-3">What's included in "priority support"?</h3>
|
||||
<p class="text-gray-400">4-hour response time during business hours, dedicated Slack channel, and access to our senior support engineers.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Ready to See the Difference?</h2>
|
||||
<p class="text-xl text-gray-400 mb-8">
|
||||
14-day free trial. No credit card required. Full Professional features.
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4 justify-center">
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
Start Free Trial
|
||||
</a>
|
||||
<a href="mailto:sales@dealspace.io" class="border border-white/20 hover:border-white/40 text-white font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
Talk to Sales
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@dealspace.io" class="hover:text-white transition-colors">sales@dealspace.io</a></li>
|
||||
<li><a href="mailto:security@dealspace.io" class="hover:text-white transition-colors">security@dealspace.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,289 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Privacy Policy — Dealspace</title>
|
||||
<meta name="description" content="How Dealspace handles your data. Enterprise-grade privacy for M&A transactions.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Privacy Policy — Dealspace">
|
||||
<meta property="og:description" content="How Dealspace handles your data. Enterprise-grade privacy for M&A transactions.">
|
||||
<meta property="og:url" content="https://muskepo.com/privacy">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Privacy Policy — Dealspace">
|
||||
<meta name="twitter:description" content="How Dealspace handles your data. Enterprise-grade privacy for M&A transactions.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="pt-32 pb-24 px-6">
|
||||
<div class="max-w-3xl mx-auto">
|
||||
|
||||
<div class="mb-12">
|
||||
<h1 class="text-4xl font-bold mb-4">Privacy Policy</h1>
|
||||
<p class="text-gray-400">Last updated: February 28, 2026</p>
|
||||
</div>
|
||||
|
||||
<div class="prose prose-invert max-w-none">
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<p class="text-lg text-gray-300 leading-relaxed m-0">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Data Controller</h2>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
<strong class="text-white">Muskepo B.V.</strong><br>
|
||||
Herengracht 555<br>
|
||||
1017 BW Amsterdam<br>
|
||||
The Netherlands<br><br>
|
||||
Chamber of Commerce: 92847293<br>
|
||||
VAT: NL866012843B01
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Information We Collect</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Account Information</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Name, business email address, organization name, and job title. This information is required to create an account and manage access to deals.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Transaction Data</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Usage Data</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
IP addresses, access timestamps, browser type, and activity logs. This information is collected for security purposes, audit trail requirements, and service optimization.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Payment Information</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">How We Use Your Information</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">We use the information we collect to:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Provide, maintain, and improve the Dealspace platform</li>
|
||||
<li>Manage user accounts and access permissions</li>
|
||||
<li>Generate audit trails as required by clients and regulators</li>
|
||||
<li>Detect and prevent security threats</li>
|
||||
<li>Comply with legal obligations</li>
|
||||
<li>Send service-related communications</li>
|
||||
</ul>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mt-6">
|
||||
<strong class="text-white">We do not:</strong>
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Sell your data to third parties</li>
|
||||
<li>Use transaction data for advertising</li>
|
||||
<li>Train AI models on your confidential documents</li>
|
||||
<li>Share data with third parties except as described in this policy</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Legal Basis for Processing</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">We process your data based on:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li><strong class="text-white">Contractual necessity:</strong> Processing required to provide the services you have requested under our Terms of Service</li>
|
||||
<li><strong class="text-white">Legitimate interests:</strong> Security, fraud prevention, service improvement, and business operations</li>
|
||||
<li><strong class="text-white">Legal obligation:</strong> Compliance with applicable laws, regulations, and legal processes</li>
|
||||
<li><strong class="text-white">Consent:</strong> Where specifically obtained for marketing communications</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Data Sharing</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">We share data only in the following circumstances:</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Within Deals</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Transaction data is shared with authorized participants within each deal according to the access permissions configured by deal administrators.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Service Providers</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Legal Requirements</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
We may disclose data when required by law, court order, or governmental authority. We will notify you of such requests where legally permitted.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">Business Transfers</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Data Security</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">We protect your data with:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li><strong class="text-white">FIPS 140-3 validated encryption</strong> for data at rest and in transit</li>
|
||||
<li><strong class="text-white">Per-deal encryption keys</strong> limiting exposure in case of compromise</li>
|
||||
<li><strong class="text-white">SOC 2 Type II certified</strong> infrastructure and processes</li>
|
||||
<li><strong class="text-white">Multi-factor authentication</strong> required for all accounts</li>
|
||||
<li><strong class="text-white">Continuous monitoring</strong> and intrusion detection</li>
|
||||
<li><strong class="text-white">Regular security assessments</strong> and penetration testing</li>
|
||||
</ul>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
For detailed security information, see our <a href="security.html" class="text-gold hover:text-gold-light">Security page</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Data Retention</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">Active accounts:</strong> Data is retained for the duration of your subscription and any active deals.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">Archived deals:</strong> Retained for 7 years after deal closure for regulatory and audit purposes, unless you request earlier deletion.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
<strong class="text-white">Account deletion:</strong> 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.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
<strong class="text-white">Backups:</strong> Deleted data may persist in encrypted backups for up to 90 days before being overwritten.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">International Data Transfers</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Your Rights</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">Under GDPR and applicable privacy laws, you have the right to:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li><strong class="text-white">Access</strong> your personal data and obtain a copy</li>
|
||||
<li><strong class="text-white">Rectify</strong> inaccurate or incomplete data</li>
|
||||
<li><strong class="text-white">Erase</strong> your data (subject to legal retention requirements)</li>
|
||||
<li><strong class="text-white">Restrict</strong> processing in certain circumstances</li>
|
||||
<li><strong class="text-white">Port</strong> your data to another service in a structured format</li>
|
||||
<li><strong class="text-white">Object</strong> to processing based on legitimate interests</li>
|
||||
<li><strong class="text-white">Withdraw consent</strong> where processing is based on consent</li>
|
||||
</ul>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mt-4">
|
||||
To exercise these rights, contact <a href="mailto:privacy@dealspace.io" class="text-gold hover:text-gold-light">privacy@dealspace.io</a>. We will respond within 30 days.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Cookies</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Changes to This Policy</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Contact</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
Data Protection Officer:<br>
|
||||
<a href="mailto:privacy@dealspace.io" class="text-gold hover:text-gold-light">privacy@dealspace.io</a>
|
||||
</p>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
You have the right to lodge a complaint with a supervisory authority. In the Netherlands, this is the Autoriteit Persoonsgegevens (autoriteitpersoonsgegevens.nl).
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<div class="flex space-x-6 mt-4 md:mt-0">
|
||||
<a href="privacy.html" class="text-gray-400 hover:text-white transition-colors text-sm">Privacy</a>
|
||||
<a href="terms.html" class="text-gray-400 hover:text-white transition-colors text-sm">Terms</a>
|
||||
<a href="dpa.html" class="text-gray-400 hover:text-white transition-colors text-sm">DPA</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -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: /
|
||||
|
|
@ -1,586 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Security — Dealspace</title>
|
||||
<meta name="description" content="FIPS 140-3 encryption, SOC 2 Type II compliance, per-deal encryption keys, dynamic watermarks. Enterprise security for M&A.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Security — Dealspace">
|
||||
<meta property="og:description" content="FIPS 140-3 encryption, SOC 2 Type II compliance, per-deal encryption keys, dynamic watermarks. Enterprise security for M&A.">
|
||||
<meta property="og:url" content="https://muskepo.com/security">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Security — Dealspace">
|
||||
<meta name="twitter:description" content="FIPS 140-3 encryption, SOC 2 Type II compliance, per-deal encryption keys, dynamic watermarks. Enterprise security for M&A.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
html { scroll-behavior: smooth; }
|
||||
.gradient-text {
|
||||
background: linear-gradient(135deg, #C9A84C 0%, #d4b85f 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-white font-medium">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
<button class="md:hidden text-white" aria-label="Toggle mobile menu" onclick="document.getElementById('mobile-menu').classList.toggle('hidden')">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="mobile-menu" class="hidden md:hidden pt-4 pb-2 space-y-3">
|
||||
<a href="features.html" class="block text-gray-300 hover:text-white">Features</a>
|
||||
<a href="security.html" class="block text-white font-medium">Security</a>
|
||||
<a href="pricing.html" class="block text-gray-300 hover:text-white">Pricing</a>
|
||||
<a href="#" class="block text-gray-300 hover:text-white">Sign In</a>
|
||||
<a href="index.html#demo" class="inline-block bg-gold text-navy font-semibold px-5 py-2.5 rounded-lg mt-2">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="pt-32 pb-16 px-6 border-b border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-6">
|
||||
Security That <span class="gradient-text">Compliance Teams</span> Trust
|
||||
</h1>
|
||||
<p class="text-xl text-gray-400 max-w-2xl mx-auto">
|
||||
M&A data is sensitive. People go to prison for leaking it. We built Dealspace with security as the foundation, not an afterthought.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Compliance Badges -->
|
||||
<section class="py-16 px-6 bg-navy-light border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-8">
|
||||
<div class="text-center">
|
||||
<div class="w-20 h-20 mx-auto mb-4 rounded-xl bg-navy border border-gold/30 flex items-center justify-center">
|
||||
<svg viewBox="0 0 60 60" class="w-12 h-12" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M30 5 L50 15 L50 30 C50 42 40 52 30 55 C20 52 10 42 10 30 L10 15 Z" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M22 30 L27 35 L38 24" stroke="#C9A84C" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="font-semibold text-white">SOC 2 Type II</h3>
|
||||
<p class="text-sm text-gray-400 mt-1">Certified compliant</p>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="w-20 h-20 mx-auto mb-4 rounded-xl bg-navy border border-gold/30 flex items-center justify-center">
|
||||
<svg viewBox="0 0 60 60" class="w-12 h-12" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="12" y="20" width="36" height="28" rx="4" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
<circle cx="30" cy="34" r="6" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M30 37 L30 42" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M20 20 L20 14 C20 9 24 5 30 5 C36 5 40 9 40 14 L40 20" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="font-semibold text-white">FIPS 140-3</h3>
|
||||
<p class="text-sm text-gray-400 mt-1">Validated encryption</p>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="w-20 h-20 mx-auto mb-4 rounded-xl bg-navy border border-gold/30 flex items-center justify-center">
|
||||
<svg viewBox="0 0 60 60" class="w-12 h-12" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="30" cy="30" r="20" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M30 10 L30 12" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M44 16 L42 18" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M50 30 L48 30" stroke="#C9A84C" stroke-width="2"/>
|
||||
<circle cx="30" cy="30" r="4" fill="#C9A84C"/>
|
||||
<text x="30" y="45" text-anchor="middle" fill="#C9A84C" font-size="8" font-weight="bold">EU</text>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="font-semibold text-white">GDPR</h3>
|
||||
<p class="text-sm text-gray-400 mt-1">Compliant processing</p>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="w-20 h-20 mx-auto mb-4 rounded-xl bg-navy border border-gold/30 flex items-center justify-center">
|
||||
<svg viewBox="0 0 60 60" class="w-12 h-12" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="15" y="8" width="30" height="44" rx="3" fill="none" stroke="#C9A84C" stroke-width="2"/>
|
||||
<line x1="20" y1="18" x2="40" y2="18" stroke="#C9A84C" stroke-width="2"/>
|
||||
<line x1="20" y1="26" x2="40" y2="26" stroke="#C9A84C" stroke-width="2"/>
|
||||
<line x1="20" y1="34" x2="35" y2="34" stroke="#C9A84C" stroke-width="2"/>
|
||||
<path d="M32 42 L36 46 L44 38" stroke="#C9A84C" stroke-width="2" fill="none"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="font-semibold text-white">ISO 27001</h3>
|
||||
<p class="text-sm text-gray-400 mt-1">Certified ISMS</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Encryption -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div>
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Encryption</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">FIPS 140-3 Validated Cryptography</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
<div class="space-y-6">
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Per-Deal Encryption Keys</h3>
|
||||
<p class="text-gray-400">Each deal has its own encryption key derived from a master key. One deal's compromise does not affect others.</p>
|
||||
</div>
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Encryption at Rest</h3>
|
||||
<p class="text-gray-400">All data encrypted before it touches disk. File content, metadata, comments — everything.</p>
|
||||
</div>
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-6">
|
||||
<h3 class="font-semibold text-white mb-2">Encryption in Transit</h3>
|
||||
<p class="text-gray-400">TLS 1.3 for all connections. Certificate pinning for mobile apps. No data travels unencrypted.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="relative">
|
||||
<!-- Encryption SVG -->
|
||||
<svg viewBox="0 0 500 450" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="encGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" stop-color="#2B4680"/>
|
||||
<stop offset="100%" stop-color="#1a2847"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Master Key -->
|
||||
<g>
|
||||
<rect x="180" y="20" width="140" height="60" rx="8" fill="url(#encGrad)" stroke="#C9A84C" stroke-width="2"/>
|
||||
<text x="250" y="45" text-anchor="middle" fill="#C9A84C" font-size="11" font-weight="600">MASTER KEY</text>
|
||||
<text x="250" y="62" text-anchor="middle" fill="#9CA3AF" font-size="9">HSM Protected</text>
|
||||
</g>
|
||||
|
||||
<!-- Derivation arrows -->
|
||||
<path d="M200 80 L100 140" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
<path d="M250 80 L250 140" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
<path d="M300 80 L400 140" stroke="#C9A84C" stroke-width="2" stroke-dasharray="4 4"/>
|
||||
|
||||
<!-- Deal Keys -->
|
||||
<g>
|
||||
<rect x="40" y="140" width="120" height="80" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="100" y="165" text-anchor="middle" fill="white" font-size="11" font-weight="500">Deal A Key</text>
|
||||
<rect x="55" y="180" width="90" height="30" rx="4" fill="#0F1B35"/>
|
||||
<text x="100" y="200" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">AES-256-GCM</text>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="190" y="140" width="120" height="80" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="250" y="165" text-anchor="middle" fill="white" font-size="11" font-weight="500">Deal B Key</text>
|
||||
<rect x="205" y="180" width="90" height="30" rx="4" fill="#0F1B35"/>
|
||||
<text x="250" y="200" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">AES-256-GCM</text>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<rect x="340" y="140" width="120" height="80" rx="8" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="400" y="165" text-anchor="middle" fill="white" font-size="11" font-weight="500">Deal C Key</text>
|
||||
<rect x="355" y="180" width="90" height="30" rx="4" fill="#0F1B35"/>
|
||||
<text x="400" y="200" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">AES-256-GCM</text>
|
||||
</g>
|
||||
|
||||
<!-- Encrypted data -->
|
||||
<path d="M100 220 L100 260" stroke="#2B4680" stroke-width="2"/>
|
||||
<path d="M250 220 L250 260" stroke="#2B4680" stroke-width="2"/>
|
||||
<path d="M400 220 L400 260" stroke="#2B4680" stroke-width="2"/>
|
||||
|
||||
<!-- Lock icons -->
|
||||
<g transform="translate(85, 260)">
|
||||
<rect x="0" y="15" width="30" height="25" rx="3" fill="#C9A84C"/>
|
||||
<path d="M5 15 L5 10 C5 4 10 0 15 0 C20 0 25 4 25 10 L25 15" fill="none" stroke="#C9A84C" stroke-width="3"/>
|
||||
</g>
|
||||
<g transform="translate(235, 260)">
|
||||
<rect x="0" y="15" width="30" height="25" rx="3" fill="#C9A84C"/>
|
||||
<path d="M5 15 L5 10 C5 4 10 0 15 0 C20 0 25 4 25 10 L25 15" fill="none" stroke="#C9A84C" stroke-width="3"/>
|
||||
</g>
|
||||
<g transform="translate(385, 260)">
|
||||
<rect x="0" y="15" width="30" height="25" rx="3" fill="#C9A84C"/>
|
||||
<path d="M5 15 L5 10 C5 4 10 0 15 0 C20 0 25 4 25 10 L25 15" fill="none" stroke="#C9A84C" stroke-width="3"/>
|
||||
</g>
|
||||
|
||||
<!-- Storage -->
|
||||
<rect x="50" y="320" width="400" height="100" rx="12" fill="#1a2847" stroke="#2B4680" stroke-width="2"/>
|
||||
<text x="250" y="350" text-anchor="middle" fill="white" font-size="14" font-weight="600">Encrypted Storage</text>
|
||||
|
||||
<!-- Data blocks -->
|
||||
<g>
|
||||
<rect x="80" y="365" width="80" height="40" rx="4" fill="#0F1B35" stroke="#2B4680"/>
|
||||
<text x="120" y="390" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">0x8f2a...</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="180" y="365" width="80" height="40" rx="4" fill="#0F1B35" stroke="#2B4680"/>
|
||||
<text x="220" y="390" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">0x3c71...</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="280" y="365" width="80" height="40" rx="4" fill="#0F1B35" stroke="#2B4680"/>
|
||||
<text x="320" y="390" text-anchor="middle" fill="#6b7280" font-size="8" font-family="monospace">0xd9e4...</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="370" y="365" width="60" height="40" rx="4" fill="#0F1B35" stroke="#2B4680"/>
|
||||
<text x="400" y="390" text-anchor="middle" fill="#6b7280" font-size="8">...</text>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Watermarking -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div class="order-2 lg:order-1">
|
||||
<!-- Watermark SVG -->
|
||||
<svg viewBox="0 0 500 400" class="w-full" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Document -->
|
||||
<rect x="100" y="40" width="300" height="320" rx="8" fill="white" stroke="#e5e7eb" stroke-width="2"/>
|
||||
|
||||
<!-- Document content (faded) -->
|
||||
<rect x="130" y="80" width="200" height="12" rx="2" fill="#e5e7eb"/>
|
||||
<rect x="130" y="100" width="240" height="8" rx="2" fill="#f3f4f6"/>
|
||||
<rect x="130" y="115" width="220" height="8" rx="2" fill="#f3f4f6"/>
|
||||
<rect x="130" y="130" width="230" height="8" rx="2" fill="#f3f4f6"/>
|
||||
<rect x="130" y="145" width="180" height="8" rx="2" fill="#f3f4f6"/>
|
||||
|
||||
<rect x="130" y="175" width="160" height="10" rx="2" fill="#e5e7eb"/>
|
||||
<rect x="130" y="195" width="240" height="8" rx="2" fill="#f3f4f6"/>
|
||||
<rect x="130" y="210" width="220" height="8" rx="2" fill="#f3f4f6"/>
|
||||
<rect x="130" y="225" width="200" height="8" rx="2" fill="#f3f4f6"/>
|
||||
|
||||
<rect x="130" y="260" width="240" height="60" rx="4" fill="#f9fafb" stroke="#e5e7eb"/>
|
||||
|
||||
<!-- Watermark overlay -->
|
||||
<g opacity="0.3" transform="rotate(-30, 250, 200)">
|
||||
<text x="250" y="180" text-anchor="middle" fill="#C9A84C" font-size="18" font-weight="bold">john.smith@pe-firm.com</text>
|
||||
<text x="250" y="205" text-anchor="middle" fill="#C9A84C" font-size="14">2026-02-28 14:32:15 UTC</text>
|
||||
<text x="250" y="225" text-anchor="middle" fill="#C9A84C" font-size="12">CONFIDENTIAL</text>
|
||||
</g>
|
||||
|
||||
<!-- Dynamic indicator -->
|
||||
<rect x="320" y="50" width="70" height="24" rx="4" fill="#C9A84C"/>
|
||||
<text x="355" y="66" text-anchor="middle" fill="#0F1B35" font-size="10" font-weight="600">DYNAMIC</text>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="order-1 lg:order-2">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Leak Prevention</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Dynamic Watermarking</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
Every document is watermarked with the viewer's identity at serve time. If a document leaks, you know exactly who leaked it.
|
||||
</p>
|
||||
<ul class="space-y-4">
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Generated per-request</span>
|
||||
<p class="text-gray-400 mt-1">Watermark includes user email, organization, timestamp, and deal ID.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">All file types</span>
|
||||
<p class="text-gray-400 mt-1">PDF, Word, Excel, images, video. Protection adapts to the format.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<svg class="w-6 h-6 text-gold mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-semibold text-white">Configurable per project</span>
|
||||
<p class="text-gray-400 mt-1">Control watermark content, position, and visibility.</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Access Control -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="text-center mb-16">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Access Control</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Defense in Depth</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto">
|
||||
Multiple layers of protection. Every access decision goes through the same choke point. No exceptions.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Single Sign-On</h3>
|
||||
<p class="text-gray-400">SAML 2.0 and OIDC support. Integrate with your existing identity provider. Enforce your organization's auth policies.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 18h.01M8 21h8a2 2 0 002-2V5a2 2 0 00-2-2H8a2 2 0 00-2 2v14a2 2 0 002 2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Multi-Factor Auth</h3>
|
||||
<p class="text-gray-400">TOTP, hardware keys (FIDO2), SMS backup. MFA required for all access, no exceptions.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Role-Based Access</h3>
|
||||
<p class="text-gray-400">Workstream-level permissions. IB, Seller, Buyer roles with configurable scopes. Least privilege by default.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Session Management</h3>
|
||||
<p class="text-gray-400">Short-lived tokens. Single active session per user. Immediate revocation on access changes.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">IP Allowlisting</h3>
|
||||
<p class="text-gray-400">Restrict access by IP range. Corporate network only, or specific buyer locations.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<div class="w-14 h-14 bg-slate/30 rounded-lg flex items-center justify-center mb-6">
|
||||
<svg class="w-7 h-7 text-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">Download Controls</h3>
|
||||
<p class="text-gray-400">Disable downloads entirely, or allow view-only access. Configurable per document or project-wide.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Audit -->
|
||||
<section class="py-24 px-6 bg-navy-light">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
||||
<div>
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Audit Trail</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Complete Accountability</h2>
|
||||
<p class="text-gray-400 text-lg mb-8 leading-relaxed">
|
||||
Every action is logged. Access grants, file views, downloads, status changes — all recorded with actor, timestamp, and IP address.
|
||||
</p>
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-center">
|
||||
<svg class="w-5 h-5 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Real-time activity monitoring</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<svg class="w-5 h-5 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Exportable audit reports</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<svg class="w-5 h-5 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">Anomaly detection alerts</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<svg class="w-5 h-5 text-gold mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span class="text-gray-300">7-year retention for compliance</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-navy border border-white/10 rounded-xl p-6 font-mono text-sm">
|
||||
<div class="text-gray-500 mb-4"># Recent audit events</div>
|
||||
<div class="space-y-3">
|
||||
<div class="flex items-start">
|
||||
<span class="text-gray-500 mr-3">14:32:15</span>
|
||||
<div>
|
||||
<span class="text-green-400">VIEW</span>
|
||||
<span class="text-gray-300"> john.smith@pe-firm.com</span>
|
||||
<div class="text-gray-500">FIN-002-revenue-breakdown.xlsx</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start">
|
||||
<span class="text-gray-500 mr-3">14:31:42</span>
|
||||
<div>
|
||||
<span class="text-blue-400">DOWNLOAD</span>
|
||||
<span class="text-gray-300"> sarah.jones@ib.com</span>
|
||||
<div class="text-gray-500">LEG-015-ip-schedule.pdf (watermarked)</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start">
|
||||
<span class="text-gray-500 mr-3">14:30:18</span>
|
||||
<div>
|
||||
<span class="text-yellow-400">GRANT</span>
|
||||
<span class="text-gray-300"> admin@seller.com</span>
|
||||
<div class="text-gray-500">Added buyer_member: mike@strategic.com</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start">
|
||||
<span class="text-gray-500 mr-3">14:29:55</span>
|
||||
<div>
|
||||
<span class="text-purple-400">PUBLISH</span>
|
||||
<span class="text-gray-300"> analyst@ib.com</span>
|
||||
<div class="text-gray-500">FIN-003 → Data Room (3 buyers notified)</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Infrastructure -->
|
||||
<section class="py-24 px-6">
|
||||
<div class="max-w-7xl mx-auto text-center">
|
||||
<div class="inline-block bg-gold/20 text-gold text-sm font-medium px-3 py-1 rounded-full mb-6">Infrastructure</div>
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Enterprise-Grade Infrastructure</h2>
|
||||
<p class="text-xl text-gray-400 max-w-3xl mx-auto mb-16">
|
||||
Dedicated infrastructure, redundant storage, continuous monitoring. Your deal data deserves nothing less.
|
||||
</p>
|
||||
|
||||
<div class="grid md:grid-cols-4 gap-8">
|
||||
<div class="text-center">
|
||||
<div class="text-4xl font-bold text-gold mb-2">99.99%</div>
|
||||
<div class="text-gray-400">Uptime SLA</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="text-4xl font-bold text-gold mb-2">3</div>
|
||||
<div class="text-gray-400">Geographic Regions</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="text-4xl font-bold text-gold mb-2">24/7</div>
|
||||
<div class="text-gray-400">Security Monitoring</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="text-4xl font-bold text-gold mb-2"><15min</div>
|
||||
<div class="text-gray-400">Incident Response</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA -->
|
||||
<section class="py-24 px-6 bg-navy-light border-t border-white/10">
|
||||
<div class="max-w-4xl mx-auto text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Questions About Security?</h2>
|
||||
<p class="text-xl text-gray-400 mb-8">
|
||||
Talk to our security team. We are happy to answer technical questions and provide documentation.
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4 justify-center">
|
||||
<a href="mailto:security@dealspace.io" class="bg-gold hover:bg-gold-light text-navy font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
Contact Security Team
|
||||
</a>
|
||||
<a href="index.html#demo" class="border border-white/20 hover:border-white/40 text-white font-semibold px-8 py-4 rounded-lg transition-colors">
|
||||
Request Demo
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="grid md:grid-cols-4 gap-8 mb-12">
|
||||
<div>
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
<p class="text-gray-400 mt-4">The M&A workflow platform that Investment Banks trust.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Product</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="features.html" class="hover:text-white transition-colors">Features</a></li>
|
||||
<li><a href="security.html" class="hover:text-white transition-colors">Security</a></li>
|
||||
<li><a href="pricing.html" class="hover:text-white transition-colors">Pricing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Legal</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="privacy.html" class="hover:text-white transition-colors">Privacy Policy</a></li>
|
||||
<li><a href="terms.html" class="hover:text-white transition-colors">Terms of Service</a></li>
|
||||
<li><a href="dpa.html" class="hover:text-white transition-colors">DPA</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold mb-4">Contact</h4>
|
||||
<ul class="space-y-2 text-gray-400">
|
||||
<li><a href="mailto:sales@dealspace.io" class="hover:text-white transition-colors">sales@dealspace.io</a></li>
|
||||
<li><a href="mailto:security@dealspace.io" class="hover:text-white transition-colors">security@dealspace.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-white/10 pt-8 flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<p class="text-gray-500 text-sm mt-4 md:mt-0">Amsterdam · New York · London</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://muskepo.com/</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/features</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/security</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/pricing</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/privacy</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>yearly</changefreq>
|
||||
<priority>0.5</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/terms</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>yearly</changefreq>
|
||||
<priority>0.5</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://muskepo.com/dpa</loc>
|
||||
<lastmod>2026-02-28</lastmod>
|
||||
<changefreq>yearly</changefreq>
|
||||
<priority>0.5</priority>
|
||||
</url>
|
||||
</urlset>
|
||||
|
|
@ -1,323 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Terms of Service — Dealspace</title>
|
||||
<meta name="description" content="Terms of Service for Dealspace M&A deal workflow platform.">
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="Terms of Service — Dealspace">
|
||||
<meta property="og:description" content="Terms of Service for Dealspace M&A deal workflow platform.">
|
||||
<meta property="og:url" content="https://muskepo.com/terms">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="https://muskepo.com/og-image.png">
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Terms of Service — Dealspace">
|
||||
<meta name="twitter:description" content="Terms of Service for Dealspace M&A deal workflow platform.">
|
||||
<meta name="twitter:image" content="https://muskepo.com/og-image.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
navy: '#0F1B35',
|
||||
'navy-light': '#1a2847',
|
||||
slate: '#2B4680',
|
||||
gold: '#C9A84C',
|
||||
'gold-light': '#d4b85f',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', 'sans-serif'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-navy font-sans text-white antialiased">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-navy/95 backdrop-blur-sm border-b border-white/10">
|
||||
<div class="max-w-7xl mx-auto px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center space-x-2">
|
||||
<span class="text-2xl font-bold text-white">Deal<span class="text-gold">space</span></span>
|
||||
</a>
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="features.html" class="text-gray-300 hover:text-white transition-colors">Features</a>
|
||||
<a href="security.html" class="text-gray-300 hover:text-white transition-colors">Security</a>
|
||||
<a href="pricing.html" class="text-gray-300 hover:text-white transition-colors">Pricing</a>
|
||||
<a href="#" class="text-gray-300 hover:text-white transition-colors">Sign In</a>
|
||||
<a href="index.html#demo" class="bg-gold hover:bg-gold-light text-navy font-semibold px-5 py-2.5 rounded-lg transition-colors">Request Demo</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="pt-32 pb-24 px-6">
|
||||
<div class="max-w-3xl mx-auto">
|
||||
|
||||
<div class="mb-12">
|
||||
<h1 class="text-4xl font-bold mb-4">Terms of Service</h1>
|
||||
<p class="text-gray-400">Last updated: February 28, 2026</p>
|
||||
</div>
|
||||
|
||||
<div class="prose prose-invert max-w-none">
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<p class="text-lg text-gray-300 leading-relaxed m-0">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">1. The Service</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">1.1 Description</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">1.2 Not Legal or Financial Advice</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">2. Accounts and Access</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.1 Account Registration</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.2 Organizational Accounts</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">2.3 Access Controls</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">3. Acceptable Use</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.1 Permitted Uses</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.2 Prohibited Conduct</h3>
|
||||
<p class="text-gray-400 leading-relaxed mb-4">You agree not to:</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>Violate any applicable laws or regulations</li>
|
||||
<li>Upload content you do not have the right to share</li>
|
||||
<li>Attempt to access data or accounts without authorization</li>
|
||||
<li>Interfere with or disrupt the service or its infrastructure</li>
|
||||
<li>Reverse engineer, decompile, or attempt to extract source code</li>
|
||||
<li>Circumvent security measures or access controls</li>
|
||||
<li>Use the service for competitive analysis or to build a competing product</li>
|
||||
<li>Resell or sublicense access without authorization</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">3.3 Enforcement</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
We may suspend or terminate access for violations of these Terms. In cases of illegal activity, we will cooperate with law enforcement authorities.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">4. Content and Data</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">4.1 Your Content</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">4.2 Responsibility for Content</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">4.3 Data Processing</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Our handling of personal data is governed by our <a href="privacy.html" class="text-gold hover:text-gold-light">Privacy Policy</a> and, for enterprise customers, our <a href="dpa.html" class="text-gold hover:text-gold-light">Data Processing Agreement</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">5. Intellectual Property</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">5.1 Our IP</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">5.2 Feedback</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">6. Payment and Billing</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">6.1 Fees</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Fees are described on our <a href="pricing.html" class="text-gold hover:text-gold-light">Pricing page</a> or in your order form. All fees are in US dollars unless otherwise specified and are exclusive of taxes.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">6.2 Payment</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Payment is due in advance on a monthly or annual basis as selected. We may suspend service for non-payment after reasonable notice.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">6.3 Refunds</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">6.4 Price Changes</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
We may change pricing with 30 days notice. Price increases will not affect your current subscription term.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">7. Service Level</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">7.1 Availability</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">7.2 Maintenance</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">8. Termination</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">8.1 By You</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
You may cancel your subscription at any time through your account settings. Cancellation takes effect at the end of your current billing period.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">8.2 By Us</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">8.3 Effect of Termination</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">9. Disclaimers</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">10. Limitation of Liability</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
TO THE MAXIMUM EXTENT PERMITTED BY LAW:
|
||||
</p>
|
||||
<ul class="text-gray-400 space-y-2 list-disc list-inside">
|
||||
<li>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.</li>
|
||||
<li>WE ARE NOT LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFITS, LOST DATA, OR BUSINESS INTERRUPTION.</li>
|
||||
<li>THESE LIMITATIONS APPLY REGARDLESS OF THE FORM OF ACTION AND EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">11. Indemnification</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">12. Governing Law and Disputes</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed mb-4">
|
||||
These Terms are governed by the laws of the Netherlands, without regard to conflict of law principles.
|
||||
</p>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8 mb-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">13. General</h2>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">13.1 Entire Agreement</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
These Terms, together with our Privacy Policy and any order forms, constitute the entire agreement between you and Muskepo B.V. regarding the service.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">13.2 Modifications</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">13.3 Severability</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
If any provision is found unenforceable, the remaining provisions will continue in effect.
|
||||
</p>
|
||||
|
||||
<h3 class="text-lg font-medium text-gold mt-6 mb-2">13.4 Assignment</h3>
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-navy-light border border-white/10 rounded-xl p-8">
|
||||
<h2 class="text-xl font-semibold text-white mt-0 mb-4">Contact</h2>
|
||||
|
||||
<p class="text-gray-400 leading-relaxed">
|
||||
Questions about these Terms:<br>
|
||||
<a href="mailto:legal@dealspace.io" class="text-gold hover:text-gold-light">legal@dealspace.io</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="border-t border-white/10 py-12 px-6">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<div class="flex flex-col md:flex-row justify-between items-center">
|
||||
<p class="text-gray-500 text-sm">© 2026 Muskepo B.V. All rights reserved.</p>
|
||||
<div class="flex space-x-6 mt-4 md:mt-0">
|
||||
<a href="privacy.html" class="text-gray-400 hover:text-white transition-colors text-sm">Privacy</a>
|
||||
<a href="terms.html" class="text-gray-400 hover:text-white transition-colors text-sm">Terms</a>
|
||||
<a href="dpa.html" class="text-gray-400 hover:text-white transition-colors text-sm">DPA</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<link rel="stylesheet" href="/chat.css">
|
||||
<script src="/chat.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -31,6 +31,14 @@ SESSION_TTL_HOURS=1
|
|||
# Refresh token TTL (days)
|
||||
REFRESH_TTL_DAYS=7
|
||||
|
||||
# =============================================================================
|
||||
# Auth
|
||||
# =============================================================================
|
||||
|
||||
# Backdoor OTP code for dev/testing (always accepted as valid OTP)
|
||||
# Active when ENV != "production" OR when explicitly set
|
||||
BACKDOOR_CODE=220402
|
||||
|
||||
# =============================================================================
|
||||
# Seeding
|
||||
# =============================================================================
|
||||
|
|
|
|||
136
lib/dbcore.go
136
lib/dbcore.go
|
|
@ -565,6 +565,142 @@ func WorkstreamCountByProject(db *DB, projectID string) (int, error) {
|
|||
return count, err
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Challenge operations (passwordless OTP auth)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// ChallengeCreate inserts a new email challenge.
|
||||
func ChallengeCreate(db *DB, c *Challenge) error {
|
||||
_, err := db.Conn.Exec(
|
||||
`INSERT INTO challenges (challenge_id, email, code, created_at, expires_at, used)
|
||||
VALUES (?,?,?,?,?,?)`,
|
||||
c.ChallengeID, c.Email, c.Code, c.CreatedAt, c.ExpiresAt, c.Used,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
// ChallengeVerify looks up the most recent unused challenge for an email and marks it used if the code matches.
|
||||
// Returns the challenge if valid, nil if not found or invalid.
|
||||
func ChallengeVerify(db *DB, email, code string) (*Challenge, error) {
|
||||
var c Challenge
|
||||
var used int
|
||||
err := db.Conn.QueryRow(
|
||||
`SELECT challenge_id, email, code, created_at, expires_at, used
|
||||
FROM challenges
|
||||
WHERE email = ? AND used = 0
|
||||
ORDER BY created_at DESC LIMIT 1`, email,
|
||||
).Scan(&c.ChallengeID, &c.Email, &c.Code, &c.CreatedAt, &c.ExpiresAt, &used)
|
||||
if err != nil {
|
||||
return nil, nil // no challenge found
|
||||
}
|
||||
c.Used = used == 1
|
||||
|
||||
// Check expiry
|
||||
if c.ExpiresAt < time.Now().UnixMilli() {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Check code
|
||||
if c.Code != code {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Mark as used
|
||||
_, err = db.Conn.Exec(`UPDATE challenges SET used = 1 WHERE challenge_id = ?`, c.ChallengeID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &c, nil
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Admin query helpers
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// AllUsers returns all users (for super admin).
|
||||
func AllUsers(db *DB) ([]User, error) {
|
||||
rows, err := db.Conn.Query(
|
||||
`SELECT user_id, email, name, password, org_id, org_name, mfa_secret, active, created_at, updated_at
|
||||
FROM users ORDER BY created_at DESC`,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var users []User
|
||||
for rows.Next() {
|
||||
var u User
|
||||
var active int
|
||||
if err := rows.Scan(&u.UserID, &u.Email, &u.Name, &u.Password, &u.OrgID, &u.OrgName, &u.MFASecret, &active, &u.CreatedAt, &u.UpdatedAt); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
u.Active = active == 1
|
||||
users = append(users, u)
|
||||
}
|
||||
return users, rows.Err()
|
||||
}
|
||||
|
||||
// AllProjects returns all projects (for super admin, no RBAC).
|
||||
func AllProjects(db *DB, cfg *Config) ([]Entry, error) {
|
||||
rows, err := db.Conn.Query(
|
||||
`SELECT entry_id, project_id, parent_id, type, depth,
|
||||
search_key, search_key2, summary, data, stage,
|
||||
assignee_id, return_to_id, origin_id,
|
||||
version, deleted_at, deleted_by, key_version,
|
||||
created_at, updated_at, created_by
|
||||
FROM entries WHERE type = 'project' AND deleted_at IS NULL
|
||||
ORDER BY updated_at DESC`,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var entries []Entry
|
||||
for rows.Next() {
|
||||
e, err := scanEntryRow(rows)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := unpackEntry(cfg, e); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
entries = append(entries, *e)
|
||||
}
|
||||
return entries, rows.Err()
|
||||
}
|
||||
|
||||
// AuditRecent returns the most recent audit entries (for super admin).
|
||||
func AuditRecent(db *DB, limit int) ([]AuditEntry, error) {
|
||||
rows, err := db.Conn.Query(
|
||||
`SELECT id, project_id, actor_id, action, target_id, details, ip, ts
|
||||
FROM audit ORDER BY ts DESC LIMIT ?`, limit,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var entries []AuditEntry
|
||||
for rows.Next() {
|
||||
var a AuditEntry
|
||||
var targetID, ip *string
|
||||
if err := rows.Scan(&a.ID, &a.ProjectID, &a.ActorID, &a.Action, &targetID, &a.Details, &ip, &a.Ts); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if targetID != nil {
|
||||
a.TargetID = *targetID
|
||||
}
|
||||
if ip != nil {
|
||||
a.IP = *ip
|
||||
}
|
||||
entries = append(entries, a)
|
||||
}
|
||||
return entries, rows.Err()
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Access operations
|
||||
// ---------------------------------------------------------------------------
|
||||
|
|
|
|||
10
lib/rbac.go
10
lib/rbac.go
|
|
@ -53,6 +53,16 @@ func CheckAccessDelete(db *DB, actorID, projectID, workstreamID string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
// IsSuperAdmin returns true if the user has super_admin role on any project.
|
||||
func IsSuperAdmin(db *DB, userID string) (bool, error) {
|
||||
var count int
|
||||
err := db.Conn.QueryRow(
|
||||
`SELECT COUNT(*) FROM access WHERE user_id = ? AND role = ? AND revoked_at IS NULL`,
|
||||
userID, RoleSuperAdmin,
|
||||
).Scan(&count)
|
||||
return count > 0, err
|
||||
}
|
||||
|
||||
// IsBuyerRole returns true if the role is a buyer role.
|
||||
// Buyers cannot see pre_dataroom entries.
|
||||
func IsBuyerRole(role string) bool {
|
||||
|
|
|
|||
27
lib/types.go
27
lib/types.go
|
|
@ -88,6 +88,7 @@ type Access struct {
|
|||
|
||||
// Roles
|
||||
const (
|
||||
RoleSuperAdmin = "super_admin"
|
||||
RoleIBAdmin = "ib_admin"
|
||||
RoleIBMember = "ib_member"
|
||||
RoleSellerAdmin = "seller_admin"
|
||||
|
|
@ -99,6 +100,7 @@ const (
|
|||
|
||||
// RoleHierarchy defines privilege levels. Higher = more privileged.
|
||||
var RoleHierarchy = map[string]int{
|
||||
RoleSuperAdmin: 200,
|
||||
RoleIBAdmin: 100,
|
||||
RoleIBMember: 80,
|
||||
RoleSellerAdmin: 70,
|
||||
|
|
@ -186,13 +188,24 @@ type DB struct {
|
|||
Conn *sql.DB
|
||||
}
|
||||
|
||||
// Challenge represents an email OTP challenge for passwordless login.
|
||||
type Challenge struct {
|
||||
ChallengeID string `json:"challenge_id"`
|
||||
Email string `json:"email"`
|
||||
Code string `json:"code"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
ExpiresAt int64 `json:"expires_at"`
|
||||
Used bool `json:"used"`
|
||||
}
|
||||
|
||||
// Config holds application configuration.
|
||||
type Config struct {
|
||||
MasterKey []byte
|
||||
DBPath string
|
||||
StorePath string
|
||||
Port string
|
||||
Env string // "development" | "production"
|
||||
JWTSecret []byte
|
||||
Mailer *Mailer
|
||||
MasterKey []byte
|
||||
DBPath string
|
||||
StorePath string
|
||||
Port string
|
||||
Env string // "development" | "production"
|
||||
JWTSecret []byte
|
||||
Mailer *Mailer
|
||||
BackdoorCode string // OTP backdoor for dev/testing
|
||||
}
|
||||
|
|
|
|||
|
|
@ -141,6 +141,17 @@ CREATE TABLE IF NOT EXISTS sessions (
|
|||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_sessions_user ON sessions(user_id);
|
||||
|
||||
-- Auth challenges (email OTP)
|
||||
CREATE TABLE IF NOT EXISTS challenges (
|
||||
challenge_id TEXT PRIMARY KEY,
|
||||
email TEXT NOT NULL,
|
||||
code TEXT NOT NULL,
|
||||
created_at INTEGER NOT NULL,
|
||||
expires_at INTEGER NOT NULL,
|
||||
used INTEGER NOT NULL DEFAULT 0
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_challenges_email ON challenges(email);
|
||||
|
||||
-- Broadcasts (idempotency)
|
||||
CREATE TABLE IF NOT EXISTS broadcasts (
|
||||
id TEXT PRIMARY KEY,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,240 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Admin — Dealspace</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
* { font-family: 'Inter', sans-serif; }
|
||||
body { background: #0a1628; }
|
||||
.tab-active { border-bottom: 2px solid #c9a84c; color: #c9a84c; }
|
||||
.tab-inactive { border-bottom: 2px solid transparent; color: #94a3b8; }
|
||||
.tab-inactive:hover { color: #e2e8f0; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen text-white">
|
||||
<!-- Top bar -->
|
||||
<header class="bg-[#0d1f3c] border-b border-white/[0.08] px-6 py-3 flex items-center justify-between">
|
||||
<div class="flex items-center gap-4">
|
||||
<a href="/app/tasks" class="text-xl font-bold tracking-tight">
|
||||
<span class="text-[#c9a84c]">Deal</span>space
|
||||
</a>
|
||||
<span class="text-xs bg-red-500/20 text-red-400 px-2 py-0.5 rounded-full font-medium">SUPER ADMIN</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-4">
|
||||
<a href="/app/tasks" class="text-sm text-[#94a3b8] hover:text-white transition">← Back to app</a>
|
||||
<button id="logoutBtn" class="text-sm text-[#94a3b8] hover:text-white transition">Sign out</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="max-w-7xl mx-auto px-6 py-8">
|
||||
<h1 class="text-2xl font-bold mb-6">Platform Administration</h1>
|
||||
|
||||
<!-- Tabs -->
|
||||
<div class="flex gap-6 mb-8 border-b border-white/[0.08]">
|
||||
<button class="tab-active pb-3 text-sm font-medium" data-tab="users">Users</button>
|
||||
<button class="tab-inactive pb-3 text-sm font-medium" data-tab="projects">Projects</button>
|
||||
<button class="tab-inactive pb-3 text-sm font-medium" data-tab="audit">Audit Log</button>
|
||||
</div>
|
||||
|
||||
<!-- Users tab -->
|
||||
<div id="tab-users" class="tab-content">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<input type="text" id="userSearch" placeholder="Search by email or name..."
|
||||
class="px-4 py-2 bg-[#0d1f3c] border border-white/[0.08] rounded-lg text-white placeholder-[#475569] focus:outline-none focus:border-[#c9a84c] w-80">
|
||||
<span id="userCount" class="text-sm text-[#94a3b8]"></span>
|
||||
</div>
|
||||
<div class="bg-[#0d1f3c] border border-white/[0.08] rounded-xl overflow-hidden">
|
||||
<table class="w-full text-sm">
|
||||
<thead>
|
||||
<tr class="border-b border-white/[0.08] text-[#94a3b8]">
|
||||
<th class="text-left px-4 py-3 font-medium">Name</th>
|
||||
<th class="text-left px-4 py-3 font-medium">Email</th>
|
||||
<th class="text-left px-4 py-3 font-medium">Organization</th>
|
||||
<th class="text-left px-4 py-3 font-medium">Status</th>
|
||||
<th class="text-left px-4 py-3 font-medium">Created</th>
|
||||
<th class="text-left px-4 py-3 font-medium">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="usersTable"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Projects tab -->
|
||||
<div id="tab-projects" class="tab-content hidden">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<span id="projectCount" class="text-sm text-[#94a3b8]"></span>
|
||||
</div>
|
||||
<div class="grid gap-4" id="projectsGrid"></div>
|
||||
</div>
|
||||
|
||||
<!-- Audit tab -->
|
||||
<div id="tab-audit" class="tab-content hidden">
|
||||
<div class="bg-[#0d1f3c] border border-white/[0.08] rounded-xl overflow-hidden">
|
||||
<table class="w-full text-sm">
|
||||
<thead>
|
||||
<tr class="border-b border-white/[0.08] text-[#94a3b8]">
|
||||
<th class="text-left px-4 py-3 font-medium">Time</th>
|
||||
<th class="text-left px-4 py-3 font-medium">Actor</th>
|
||||
<th class="text-left px-4 py-3 font-medium">Action</th>
|
||||
<th class="text-left px-4 py-3 font-medium">Target</th>
|
||||
<th class="text-left px-4 py-3 font-medium">IP</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="auditTable"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const token = localStorage.getItem('ds_token');
|
||||
const user = JSON.parse(localStorage.getItem('ds_user') || '{}');
|
||||
|
||||
if (!token || !user.is_super_admin) {
|
||||
window.location.href = '/app/login';
|
||||
}
|
||||
|
||||
function fetchAPI(url) {
|
||||
return fetch(url, { headers: { 'Authorization': 'Bearer ' + token } }).then(r => {
|
||||
if (r.status === 401) { localStorage.clear(); window.location.href = '/app/login'; }
|
||||
return r.json();
|
||||
});
|
||||
}
|
||||
|
||||
function postAPI(url, body) {
|
||||
return fetch(url, {
|
||||
method: 'POST',
|
||||
headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(body)
|
||||
}).then(r => r.json());
|
||||
}
|
||||
|
||||
function formatDate(ts) {
|
||||
if (!ts) return '—';
|
||||
return new Date(ts).toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' });
|
||||
}
|
||||
|
||||
function formatDateTime(ts) {
|
||||
if (!ts) return '—';
|
||||
return new Date(ts).toLocaleString('en-GB', { day: 'numeric', month: 'short', hour: '2-digit', minute: '2-digit' });
|
||||
}
|
||||
|
||||
function escapeHtml(s) {
|
||||
const d = document.createElement('div');
|
||||
d.textContent = s || '';
|
||||
return d.innerHTML;
|
||||
}
|
||||
|
||||
// Tabs
|
||||
document.querySelectorAll('[data-tab]').forEach(btn => {
|
||||
btn.addEventListener('click', () => {
|
||||
document.querySelectorAll('[data-tab]').forEach(b => {
|
||||
b.className = b === btn ? 'tab-active pb-3 text-sm font-medium' : 'tab-inactive pb-3 text-sm font-medium';
|
||||
});
|
||||
document.querySelectorAll('.tab-content').forEach(c => c.classList.add('hidden'));
|
||||
document.getElementById('tab-' + btn.dataset.tab).classList.remove('hidden');
|
||||
|
||||
if (btn.dataset.tab === 'projects') loadProjects();
|
||||
if (btn.dataset.tab === 'audit') loadAudit();
|
||||
});
|
||||
});
|
||||
|
||||
// Users
|
||||
let allUsers = [];
|
||||
async function loadUsers() {
|
||||
allUsers = await fetchAPI('/api/admin/users');
|
||||
renderUsers(allUsers);
|
||||
}
|
||||
|
||||
function renderUsers(users) {
|
||||
document.getElementById('userCount').textContent = users.length + ' user' + (users.length !== 1 ? 's' : '');
|
||||
document.getElementById('usersTable').innerHTML = users.map(u => `
|
||||
<tr class="border-b border-white/[0.05] hover:bg-white/[0.02]">
|
||||
<td class="px-4 py-3 font-medium">${escapeHtml(u.name)}</td>
|
||||
<td class="px-4 py-3 text-[#94a3b8]">${escapeHtml(u.email)}</td>
|
||||
<td class="px-4 py-3 text-[#94a3b8]">${escapeHtml(u.org_name || u.org_id || '—')}</td>
|
||||
<td class="px-4 py-3">
|
||||
<span class="px-2 py-0.5 rounded-full text-xs ${u.active ? 'bg-green-500/10 text-green-400' : 'bg-red-500/10 text-red-400'}">
|
||||
${u.active ? 'Active' : 'Inactive'}
|
||||
</span>
|
||||
</td>
|
||||
<td class="px-4 py-3 text-[#94a3b8]">${formatDate(u.created_at)}</td>
|
||||
<td class="px-4 py-3">
|
||||
<button onclick="impersonate('${u.user_id}')" class="text-[#c9a84c] hover:underline text-xs">Impersonate</button>
|
||||
</td>
|
||||
</tr>
|
||||
`).join('');
|
||||
}
|
||||
|
||||
document.getElementById('userSearch').addEventListener('input', (e) => {
|
||||
const q = e.target.value.toLowerCase();
|
||||
const filtered = allUsers.filter(u =>
|
||||
u.email.toLowerCase().includes(q) || u.name.toLowerCase().includes(q)
|
||||
);
|
||||
renderUsers(filtered);
|
||||
});
|
||||
|
||||
async function impersonate(userId) {
|
||||
if (!confirm('Impersonate this user? You will be signed in as them.')) return;
|
||||
const data = await postAPI('/api/admin/impersonate', { user_id: userId });
|
||||
if (data.token) {
|
||||
localStorage.setItem('ds_token', data.token);
|
||||
localStorage.setItem('ds_user', JSON.stringify(data.user));
|
||||
window.location.href = '/app/tasks';
|
||||
}
|
||||
}
|
||||
|
||||
// Projects
|
||||
async function loadProjects() {
|
||||
const projects = await fetchAPI('/api/admin/projects');
|
||||
document.getElementById('projectCount').textContent = projects.length + ' project' + (projects.length !== 1 ? 's' : '');
|
||||
document.getElementById('projectsGrid').innerHTML = projects.map(p => {
|
||||
let name = p.summary || 'Unnamed Project';
|
||||
return `
|
||||
<div class="bg-[#0d1f3c] border border-white/[0.08] rounded-xl p-5">
|
||||
<div class="flex items-center justify-between mb-2">
|
||||
<h3 class="font-semibold text-white">${escapeHtml(name)}</h3>
|
||||
<span class="text-xs px-2 py-0.5 rounded-full bg-[#c9a84c]/10 text-[#c9a84c]">${escapeHtml(p.stage)}</span>
|
||||
</div>
|
||||
<div class="text-sm text-[#94a3b8]">
|
||||
<span>ID: ${p.entry_id.slice(0, 8)}...</span>
|
||||
<span class="ml-4">Created: ${formatDate(p.created_at)}</span>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}).join('');
|
||||
}
|
||||
|
||||
// Audit
|
||||
async function loadAudit() {
|
||||
const entries = await fetchAPI('/api/admin/audit');
|
||||
document.getElementById('auditTable').innerHTML = entries.length === 0
|
||||
? '<tr><td colspan="5" class="px-4 py-8 text-center text-[#94a3b8]">No audit events yet</td></tr>'
|
||||
: entries.map(a => `
|
||||
<tr class="border-b border-white/[0.05] hover:bg-white/[0.02]">
|
||||
<td class="px-4 py-3 text-[#94a3b8]">${formatDateTime(a.ts)}</td>
|
||||
<td class="px-4 py-3">${escapeHtml(a.actor_id ? a.actor_id.slice(0, 8) + '...' : '—')}</td>
|
||||
<td class="px-4 py-3">${escapeHtml(a.action || '—')}</td>
|
||||
<td class="px-4 py-3 text-[#94a3b8]">${escapeHtml(a.target_id ? a.target_id.slice(0, 8) + '...' : '—')}</td>
|
||||
<td class="px-4 py-3 text-[#94a3b8]">${escapeHtml(a.ip || '—')}</td>
|
||||
</tr>
|
||||
`).join('');
|
||||
}
|
||||
|
||||
// Logout
|
||||
document.getElementById('logoutBtn').addEventListener('click', async () => {
|
||||
try { await fetch('/api/auth/logout', { method: 'POST', headers: { 'Authorization': 'Bearer ' + token } }); } catch {}
|
||||
localStorage.clear();
|
||||
window.location.href = '/app/login';
|
||||
});
|
||||
|
||||
// Initial load
|
||||
loadUsers();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -49,7 +49,7 @@
|
|||
</a>
|
||||
<div id="adminLinks" class="hidden">
|
||||
<div class="border-t border-white/[0.08] my-3"></div>
|
||||
<a href="/app/projects" class="sidebar-link flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium text-[#94a3b8] transition">
|
||||
<a href="/admin" class="sidebar-link flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium text-[#94a3b8] transition">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.066 2.573c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.573 1.066c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.066-2.573c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"/><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/></svg>
|
||||
Admin
|
||||
</a>
|
||||
|
|
@ -107,7 +107,7 @@
|
|||
const greetWord = hour < 12 ? 'Good morning' : hour < 18 ? 'Good afternoon' : 'Good evening';
|
||||
document.getElementById('greeting').textContent = greetWord + ', ' + (user.name || 'there');
|
||||
document.getElementById('userName').textContent = user.name || user.email || '';
|
||||
if (user.role === 'ib_admin') document.getElementById('adminLinks').classList.remove('hidden');
|
||||
if (user.is_super_admin) document.getElementById('adminLinks').classList.remove('hidden');
|
||||
|
||||
// Load tasks
|
||||
async function loadTasks() {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
<style>
|
||||
* { font-family: 'Inter', sans-serif; }
|
||||
body { background: #0a1628; }
|
||||
.code-input { letter-spacing: 0.5em; text-align: center; font-size: 1.5rem; font-weight: 600; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen flex items-center justify-center">
|
||||
|
|
@ -22,30 +23,60 @@
|
|||
<p class="text-[#94a3b8] mt-2 text-sm">Secure M&A deal management</p>
|
||||
</div>
|
||||
|
||||
<!-- Login Card -->
|
||||
<div class="bg-[#0d1f3c] border border-white/[0.08] rounded-xl p-8">
|
||||
<h2 class="text-xl font-semibold text-white mb-6">Sign in</h2>
|
||||
<!-- Step 1: Email -->
|
||||
<div id="step-email" class="bg-[#0d1f3c] border border-white/[0.08] rounded-xl p-8">
|
||||
<h2 class="text-xl font-semibold text-white mb-2">Sign in</h2>
|
||||
<p class="text-[#94a3b8] text-sm mb-6">Enter your email to receive a login code.</p>
|
||||
|
||||
<div id="error" class="hidden mb-4 p-3 bg-red-500/10 border border-red-500/20 rounded-lg text-red-400 text-sm"></div>
|
||||
<div id="error-email" class="hidden mb-4 p-3 bg-red-500/10 border border-red-500/20 rounded-lg text-red-400 text-sm"></div>
|
||||
|
||||
<form id="loginForm" class="space-y-5">
|
||||
<form id="emailForm" class="space-y-5">
|
||||
<div>
|
||||
<label for="email" class="block text-sm font-medium text-[#94a3b8] mb-1.5">Email</label>
|
||||
<input type="email" id="email" name="email" required autocomplete="email" autofocus
|
||||
placeholder="you@company.com"
|
||||
class="w-full px-4 py-2.5 bg-[#0a1628] border border-white/[0.08] rounded-lg text-white placeholder-[#475569] focus:outline-none focus:border-[#c9a84c] focus:ring-1 focus:ring-[#c9a84c] transition">
|
||||
</div>
|
||||
<div>
|
||||
<label for="password" class="block text-sm font-medium text-[#94a3b8] mb-1.5">Password</label>
|
||||
<input type="password" id="password" name="password" required autocomplete="current-password"
|
||||
class="w-full px-4 py-2.5 bg-[#0a1628] border border-white/[0.08] rounded-lg text-white placeholder-[#475569] focus:outline-none focus:border-[#c9a84c] focus:ring-1 focus:ring-[#c9a84c] transition">
|
||||
</div>
|
||||
<button type="submit" id="submitBtn"
|
||||
<button type="submit" id="emailBtn"
|
||||
class="w-full py-2.5 bg-[#c9a84c] hover:bg-[#b8973f] text-[#0a1628] font-semibold rounded-lg transition disabled:opacity-50">
|
||||
Sign in
|
||||
Send login code
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Step 2: OTP Code -->
|
||||
<div id="step-code" class="hidden bg-[#0d1f3c] border border-white/[0.08] rounded-xl p-8">
|
||||
<h2 class="text-xl font-semibold text-white mb-2">Enter your code</h2>
|
||||
<p class="text-[#94a3b8] text-sm mb-6">
|
||||
We sent a 6-digit code to <span id="sent-email" class="text-white font-medium"></span>
|
||||
</p>
|
||||
|
||||
<div id="error-code" class="hidden mb-4 p-3 bg-red-500/10 border border-red-500/20 rounded-lg text-red-400 text-sm"></div>
|
||||
|
||||
<form id="codeForm" class="space-y-5">
|
||||
<div>
|
||||
<label for="code" class="block text-sm font-medium text-[#94a3b8] mb-1.5">Login code</label>
|
||||
<input type="text" id="code" name="code" required autocomplete="one-time-code"
|
||||
maxlength="6" inputmode="numeric" pattern="[0-9]*"
|
||||
placeholder="000000"
|
||||
class="code-input w-full px-4 py-3 bg-[#0a1628] border border-white/[0.08] rounded-lg text-[#c9a84c] placeholder-[#475569] focus:outline-none focus:border-[#c9a84c] focus:ring-1 focus:ring-[#c9a84c] transition">
|
||||
</div>
|
||||
<button type="submit" id="codeBtn"
|
||||
class="w-full py-2.5 bg-[#c9a84c] hover:bg-[#b8973f] text-[#0a1628] font-semibold rounded-lg transition disabled:opacity-50">
|
||||
Verify & sign in
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<div class="mt-4 flex items-center justify-between">
|
||||
<button id="backBtn" class="text-[#94a3b8] text-sm hover:text-white transition">
|
||||
← Use a different email
|
||||
</button>
|
||||
<button id="resendBtn" class="text-[#c9a84c] text-sm hover:text-[#b8973f] transition">
|
||||
Resend code
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="text-center text-[#475569] text-xs mt-8">© 2026 Muskepo B.V. — Amsterdam</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -55,38 +86,119 @@
|
|||
window.location.href = '/app/tasks';
|
||||
}
|
||||
|
||||
document.getElementById('loginForm').addEventListener('submit', async (e) => {
|
||||
let currentEmail = '';
|
||||
|
||||
// Step 1: Send challenge
|
||||
document.getElementById('emailForm').addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
const btn = document.getElementById('submitBtn');
|
||||
const errorEl = document.getElementById('error');
|
||||
const btn = document.getElementById('emailBtn');
|
||||
const errorEl = document.getElementById('error-email');
|
||||
btn.disabled = true;
|
||||
btn.textContent = 'Signing in...';
|
||||
btn.textContent = 'Sending code...';
|
||||
errorEl.classList.add('hidden');
|
||||
|
||||
currentEmail = document.getElementById('email').value.trim().toLowerCase();
|
||||
|
||||
try {
|
||||
const res = await fetch('/api/auth/challenge', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ email: currentEmail }),
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
if (!res.ok) throw new Error(data.error || 'Failed to send code');
|
||||
|
||||
// Show code step
|
||||
document.getElementById('sent-email').textContent = currentEmail;
|
||||
document.getElementById('step-email').classList.add('hidden');
|
||||
document.getElementById('step-code').classList.remove('hidden');
|
||||
document.getElementById('code').focus();
|
||||
} catch (err) {
|
||||
errorEl.textContent = err.message;
|
||||
errorEl.classList.remove('hidden');
|
||||
} finally {
|
||||
btn.disabled = false;
|
||||
btn.textContent = 'Send login code';
|
||||
}
|
||||
});
|
||||
|
||||
// Step 2: Verify code
|
||||
document.getElementById('codeForm').addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
const btn = document.getElementById('codeBtn');
|
||||
const errorEl = document.getElementById('error-code');
|
||||
btn.disabled = true;
|
||||
btn.textContent = 'Verifying...';
|
||||
errorEl.classList.add('hidden');
|
||||
|
||||
try {
|
||||
const res = await fetch('/api/auth/login', {
|
||||
const res = await fetch('/api/auth/verify', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
email: document.getElementById('email').value,
|
||||
password: document.getElementById('password').value,
|
||||
email: currentEmail,
|
||||
code: document.getElementById('code').value.trim(),
|
||||
}),
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
|
||||
if (!res.ok) {
|
||||
throw new Error(data.error || 'Login failed');
|
||||
}
|
||||
if (!res.ok) throw new Error(data.error || 'Invalid or expired code');
|
||||
|
||||
localStorage.setItem('ds_token', data.token);
|
||||
localStorage.setItem('ds_user', JSON.stringify(data.user));
|
||||
window.location.href = '/app/tasks';
|
||||
|
||||
// Redirect: super admins go to /admin, others to /app/tasks
|
||||
if (data.user && data.user.is_super_admin) {
|
||||
window.location.href = '/admin';
|
||||
} else {
|
||||
window.location.href = '/app/tasks';
|
||||
}
|
||||
} catch (err) {
|
||||
errorEl.textContent = err.message;
|
||||
errorEl.classList.remove('hidden');
|
||||
btn.disabled = false;
|
||||
btn.textContent = 'Sign in';
|
||||
btn.textContent = 'Verify & sign in';
|
||||
}
|
||||
});
|
||||
|
||||
// Back button
|
||||
document.getElementById('backBtn').addEventListener('click', () => {
|
||||
document.getElementById('step-code').classList.add('hidden');
|
||||
document.getElementById('step-email').classList.remove('hidden');
|
||||
document.getElementById('code').value = '';
|
||||
document.getElementById('error-code').classList.add('hidden');
|
||||
document.getElementById('email').focus();
|
||||
});
|
||||
|
||||
// Resend button
|
||||
document.getElementById('resendBtn').addEventListener('click', async () => {
|
||||
const btn = document.getElementById('resendBtn');
|
||||
btn.disabled = true;
|
||||
btn.textContent = 'Sending...';
|
||||
|
||||
try {
|
||||
await fetch('/api/auth/challenge', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ email: currentEmail }),
|
||||
});
|
||||
btn.textContent = 'Code sent!';
|
||||
setTimeout(() => {
|
||||
btn.textContent = 'Resend code';
|
||||
btn.disabled = false;
|
||||
}, 3000);
|
||||
} catch {
|
||||
btn.textContent = 'Resend code';
|
||||
btn.disabled = false;
|
||||
}
|
||||
});
|
||||
|
||||
// Auto-submit when 6 digits entered
|
||||
document.getElementById('code').addEventListener('input', (e) => {
|
||||
e.target.value = e.target.value.replace(/\D/g, '').slice(0, 6);
|
||||
if (e.target.value.length === 6) {
|
||||
document.getElementById('codeForm').dispatchEvent(new Event('submit'));
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
|
|||
Loading…
Reference in New Issue