{
  "version": "1.3",
  "data": {
    "project": {
      "id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
      "name": "Meetcute — Values-Based Dating App",
      "description": "A dating app positioned against swipe-fatigue: instead of left/right on photos, users answer prompts about values and the ML algorithm surfaces compatible matches with explainability ('you both prioritize career flexibility, both prefer city living'). Mobile-first (iOS + Android), with E2EE messaging, photo liveness verification, and premium subscription via App Store IAP. Targeting professionals 25-40 in the US/EU. Trust & safety is the central differentiator.",
      "system_type": "mobile_product",
      "created_at": "2026-05-21T17:20:30.984Z",
      "updated_at": "2026-05-21T17:20:30.984Z",
      "owner_id": null,
      "organization_id": null,
      "visibility": "private",
      "tags": [
        "consumer-mobile",
        "matchmaking",
        "gdpr",
        "ios",
        "android"
      ]
    },
    "stakeholders": [
      {
        "id": "1168a98e-4b5c-4018-a5ab-4211239de6f3",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Founder / CEO",
        "role": "vision + investor relations",
        "influence": "critical",
        "scope": "internal",
        "description": "Final call on positioning, runway burn, and which markets to enter. Reports to the board.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "07c8432f-f489-4e82-8ab6-11f058978380",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Product Manager",
        "role": "feature prioritization + roadmap",
        "influence": "high",
        "scope": "internal",
        "description": "Balances user feedback, competitive moves, and engineering capacity. Owns the spec.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "1f52def9-b232-4ee4-9c09-da58336a87f1",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "ML Engineer",
        "role": "matching algorithm + image moderation models",
        "influence": "high",
        "scope": "internal",
        "description": "Owns model training, evaluation, and rollout. Currently a single person — key-person dependency.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "f796853a-8c69-4dba-84f8-d0002c3e3a0a",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Trust & Safety Lead",
        "role": "moderation + user safety + abuse response",
        "influence": "critical",
        "scope": "internal",
        "description": "Runs the human review queue. Sets policy on banning, escalation to law enforcement, and underage reports.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "c7476cba-f234-41b5-b2e0-a11e1a69cd5e",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "iOS Developer",
        "role": "native iOS engineering",
        "influence": "medium",
        "scope": "internal",
        "description": "Two-person team. Handles App Store submissions and iOS-specific UX.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "39fcf72c-5992-4240-a413-ce136307c20b",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Android Developer",
        "role": "native Android engineering",
        "influence": "medium",
        "scope": "internal",
        "description": "One-person team. Handles Play Store and Android-specific UX.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "fa9d2e0d-cf14-4a12-a269-442aca7fdfba",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Backend Engineer",
        "role": "API + services + infrastructure",
        "influence": "high",
        "scope": "internal",
        "description": "Three-person team. Owns uptime, deploys, and DB schema.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "2fc7bd83-8550-4041-9391-8c78c342c142",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Product Designer",
        "role": "UI + UX + brand",
        "influence": "medium",
        "scope": "internal",
        "description": "Maintains iOS/Android design parity. Voice of accessibility.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "867ba27c-a65f-4e75-9013-d5773b65746a",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Growth Marketing Lead",
        "role": "paid acquisition + ASO + content",
        "influence": "medium",
        "scope": "internal",
        "description": "Owns CAC, LTV, and the paid funnel from ad to first match.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "User: professional, 25-35",
        "role": "primary target demographic",
        "influence": "critical",
        "scope": "external",
        "description": "Career-focused, time-poor, values-driven. Burned out on swipe apps. Willing to pay $15/mo for higher quality matches. Will leave if matches feel low-quality after 2 weeks.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "71ee5790-4367-4d02-ad5d-07281b53589c",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "User: 50+",
        "role": "secondary demographic, growing",
        "influence": "high",
        "scope": "external",
        "description": "Often divorced/widowed. Needs simpler UI, larger text, less aggressive notification frequency. Higher willingness to pay but less tolerant of bad UX.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "8adb7795-aed7-45db-aa5a-efb60fbf15dd",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "User: LGBTQ+",
        "role": "secondary demographic, vocal",
        "influence": "high",
        "scope": "external",
        "description": "Sensitive to mishandling of gender identity in forms and matching. Negative experience here travels fast on Twitter/Reddit and tanks ratings.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "ccdc3c24-5258-46aa-988b-c16fdddcfdca",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Apple App Review",
        "role": "App Store gatekeeper",
        "influence": "critical",
        "scope": "external",
        "description": "Hard veto on every release. Strict on IAP rules, data collection disclosure, harmful content. Reviewers vary in interpretation — same submission gets different verdicts.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "4c488196-fd46-4d18-891e-7f986bb642d7",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Google Play Review",
        "role": "Play Store gatekeeper",
        "influence": "high",
        "scope": "external",
        "description": "Less strict than Apple but enforces Play Store policies (dating-specific rules, child safety, fee disclosure). 24-72h review SLA.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "3f002117-9faa-4a2a-bbc5-c026b26ec3a9",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Stripe (alt-payment provider)",
        "role": "non-IAP payment processor",
        "influence": "medium",
        "scope": "external",
        "description": "Used only for web-paid plans. PCI compliance SAQ-A. Could freeze account if chargeback ratio >0.9%.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "f36951d9-0e1a-44c0-9521-dcaec9c1d55d",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Twilio",
        "role": "SMS verification provider",
        "influence": "medium",
        "scope": "external",
        "description": "Sends OTPs during signup. Strict on AUP — rate-limit + carrier-fraud detection. SMS unit cost is a real OPEX line item.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "2f16fcae-d8dd-4629-aac9-b5bca3db3558",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Persona",
        "role": "photo liveness + ID verification API",
        "influence": "medium",
        "scope": "external",
        "description": "Third-party KYC vendor for liveness checks and (optional) government-ID verification. SLA 30s response, 95th percentile <5s.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "fccb758b-f6f2-41c9-badc-63fbefabbc66",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Lead GDPR Supervisory Authority (Irish DPC)",
        "role": "EU data protection enforcement",
        "influence": "critical",
        "scope": "external",
        "description": "Our EU lead authority (one-stop-shop). Fines up to 4% of global revenue. Particularly active on dating-app cases (Grindr was fined €6.5M). Audits triggered by user complaints or media.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "86e881cd-45df-4790-8517-81bc215af39f",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "US FTC / KOSA enforcement",
        "role": "US child safety + privacy regulator",
        "influence": "high",
        "scope": "external",
        "description": "KOSA (Kids Online Safety Act) imposes duties of care on platforms with under-18 users. FTC settlements run multi-million-dollar for failures.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "a2689065-7019-4c29-95e8-fe6748908858",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Series A investor (lead VC)",
        "role": "growth + governance",
        "influence": "high",
        "scope": "external",
        "description": "Board seat. Expects 15% MoM user growth for 6 months to greenlight Series B. Patient on revenue but not on engagement metrics.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "6e4377ae-ad29-4400-b6ed-bd73f4d26ddc",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Competitive landscape (Hinge, Bumble, etc.)",
        "role": "market context",
        "influence": "medium",
        "scope": "external",
        "description": "Not a single actor but a force. Hinge introduces values-prompt features → we lose differentiation. Bumble loosens women-first → market shifts. Worth modeling as 'environment'.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      }
    ],
    "needs": [
      {
        "id": "02c13b85-b725-4d7b-a943-4091566d9de1",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
        "statement": "I want matches who actually share my values, not just look attractive",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "42e886a6-1366-401a-8753-eba6cced4d2f",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
        "statement": "I want to feel safe — confidence that profiles are real and bad actors get banned",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "b232d681-7aab-409c-9796-aa645b3edd1b",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
        "statement": "I want to understand why a match was suggested, not be matched by a black-box algorithm",
        "priority": 2,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "c655ab6b-813c-4e16-bdc3-118b6d4dd03c",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
        "statement": "I want my data not sold to advertisers or data brokers",
        "priority": 2,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "68d022ad-e535-47ae-bc2c-c8e4eea54949",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
        "statement": "I want to pay only for premium features I actually want, not be bundled",
        "priority": 3,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "3dd14b41-74b7-44f0-82f5-0ce45690e92d",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "71ee5790-4367-4d02-ad5d-07281b53589c",
        "statement": "I want a simple interface — large text, no swipe gestures I have to learn",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "9505dc53-1c73-4c59-ab1e-e79013eacfbe",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "71ee5790-4367-4d02-ad5d-07281b53589c",
        "statement": "I don't want push notifications late at night",
        "priority": 2,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "25bc0219-b5f1-4152-9f03-39c5c7b78886",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "8adb7795-aed7-45db-aa5a-efb60fbf15dd",
        "statement": "I want my actual gender identity respected (not forced to pick from male/female)",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "450a3544-4647-4d45-a9e8-af3d7358a1cd",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "8adb7795-aed7-45db-aa5a-efb60fbf15dd",
        "statement": "I want matching to respect my sexual orientation precisely (not assume hetero default)",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "8cb3b84c-32aa-4a8d-8e40-b67ba7e9c096",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "f796853a-8c69-4dba-84f8-d0002c3e3a0a",
        "statement": "I need to ban a confirmed bad actor across all platforms within an hour",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "edd97eb6-1fb3-4343-8d83-cef757794c2c",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "f796853a-8c69-4dba-84f8-d0002c3e3a0a",
        "statement": "I need an automated pre-filter for image moderation so my human reviewers only see edge cases",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "e7245eb4-2f27-454d-bba2-da08b16dd35e",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "fccb758b-f6f2-41c9-badc-63fbefabbc66",
        "statement": "I need explicit, granular, capture-able consent per data-processing category",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "34bce54d-6587-4120-9176-b715a9044fb8",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "fccb758b-f6f2-41c9-badc-63fbefabbc66",
        "statement": "I need data export and deletion within 30 days of user request",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "1a470513-3fdb-44d5-abbe-5abffb8fe7f0",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "fccb758b-f6f2-41c9-badc-63fbefabbc66",
        "statement": "I need transparency about the matching algorithm under the EU DSA",
        "priority": 2,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "6d3dbdd4-67d4-49dd-95a2-b59132bbf315",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "ccdc3c24-5258-46aa-988b-c16fdddcfdca",
        "statement": "I require all in-app digital purchases to go through IAP (App Store Guideline 3.1.1)",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "140debc7-5928-4209-bcc0-ea0f309cd9e0",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "ccdc3c24-5258-46aa-988b-c16fdddcfdca",
        "statement": "I require data collection categories to be accurately disclosed in App Store privacy nutrition label",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "dbbcd708-1a73-4e83-87ab-a4231450fb31",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "86e881cd-45df-4790-8517-81bc215af39f",
        "statement": "I require effective age verification to keep under-18 users off the platform",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "d716df90-aabc-4df1-83e9-5e1a0d18dab9",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "1168a98e-4b5c-4018-a5ab-4211239de6f3",
        "statement": "I need to reach 100k Monthly Active Users within 12 months to unlock the Series B",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "45b1a5c5-0ce8-4007-a622-36393803b1f5",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "a2689065-7019-4c29-95e8-fe6748908858",
        "statement": "I need to see 15% MoM MAU growth sustained over 6 months",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "c7f873b3-cf57-4958-9859-8f9954d0a665",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "stakeholder_id": "1f52def9-b232-4ee4-9c09-da58336a87f1",
        "statement": "I need to train models without exposing user PII (no plaintext messages or DOBs in training corpus)",
        "priority": 1,
        "description": "",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      }
    ],
    "scenarios": [
      {
        "id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "First-time user onboarding",
        "description": "New user installs the app and completes signup to first match displayed. Critical for retention — drop-off in onboarding is the #1 funnel leak.",
        "primary_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
        "preconditions": "User has downloaded the app from App Store or Play Store. Has cellular or Wi-Fi connectivity. Phone supports BLE for nearby suggestions (optional).",
        "postconditions": "User account created. Profile complete with photo + bio + values prompts. First match feed loaded and shown.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null,
        "steps": [
          {
            "id": "b2c067c5-4613-4f9b-be6f-32cd26027874",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 0,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "User opens the app for the first time; sees a 3-screen value-prop intro",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "32b69364-4b5d-49c3-945d-317d525394b8",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 1,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User taps 'Get started', enters email and a chosen password",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "7f184c19-95f0-4a09-b53b-ac9583df0c19",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 2,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User enters phone number for SMS verification",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "673c0337-9565-4b1b-8cb7-9ea95c6d50aa",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 3,
            "actor": "Twilio API",
            "actor_stakeholder_id": null,
            "action": "Twilio sends a 6-digit OTP SMS within 5 seconds",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "ff3085d0-4ebc-45a0-9d0e-5be720c975c5",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 4,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User enters OTP; backend verifies and creates the account",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "12b6fa00-47a1-4fd2-bbc3-62445fa092f1",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 5,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User uploads their first profile photo from camera roll",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "1a967c64-2d94-4f3e-896b-3853aceff8ee",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 6,
            "actor": "Persona API",
            "actor_stakeholder_id": null,
            "action": "Persona runs liveness check on the uploaded photo (selfie-match against camera)",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "7dbf2257-354f-4cb2-bdcd-ac4bc99fcf98",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 7,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User answers 6 values prompts (importance of career, kids, religion, lifestyle, politics, hobbies)",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "353f1775-c7ca-4f36-b159-97ebfad625d9",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 8,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User sets gender identity and orientation from inclusive picker (10+ options)",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "e1c41f97-a4cc-490f-8db3-42c9c55ae1e3",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 9,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User sets discovery preferences (age range, distance, must-haves)",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "3513d1f8-1092-4679-a895-e7360a847b1a",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 10,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "Match Service computes initial 10-profile feed using value-prompt embeddings",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "d0899539-e24e-4804-aa91-1d809edf02d9",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "7a9177d0-bf06-4dde-ba07-d1fefa698f33",
            "order_index": 11,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User sees Match Feed — first profile shown with explainability ('you both prioritize career flexibility')",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          }
        ]
      },
      {
        "id": "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Reporting a fake profile",
        "description": "User encounters a suspicious profile (overly polished photos, generic bio, asks to move to WhatsApp immediately) and reports it. Trust & Safety reviews and bans if confirmed.",
        "primary_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
        "preconditions": "User has matched with or messaged the suspect profile. User has Trust & Safety controls enabled (default).",
        "postconditions": "Reported user banned (if confirmed) or warned (if borderline). Reporter receives confirmation notification. Both users no longer see each other's profiles. Incident logged for moderation team metrics.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null,
        "steps": [
          {
            "id": "c66d64be-8771-4731-b397-53b8d7629ebe",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a",
            "order_index": 0,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User taps the ⋯ menu on the suspect profile",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "6f6bf8a8-c40a-480b-9346-cf69a53f1a17",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a",
            "order_index": 1,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User selects 'Report', chooses 'Fake profile / catfish' as reason",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "6d3b13aa-3ef2-4a3e-a2df-71f3ffbe5a86",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a",
            "order_index": 2,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User adds optional note ('asked to move to WhatsApp on first message')",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "1f8be09f-ae7d-4963-9f7d-608f2ce35aa5",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a",
            "order_index": 3,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "App immediately hides the suspect profile from the reporting user (no waiting for review)",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "b5cec576-5f28-4d1d-aa3f-ffcae15a4a58",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a",
            "order_index": 4,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "Moderation Service queues the report with auto-attached evidence (photos, message excerpts)",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "05bc2154-fb7d-4a7f-a419-c4f71ac9da81",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a",
            "order_index": 5,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "Image Moderation Model scores the suspect's photos for AI-generation likelihood",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "6aeebb3c-9a08-4e6a-a2ed-90ffa56e0104",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a",
            "order_index": 6,
            "actor": "",
            "actor_stakeholder_id": "f796853a-8c69-4dba-84f8-d0002c3e3a0a",
            "action": "T&S reviewer sees the queued report in their dashboard, reviews evidence",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "86f97063-6272-4cc7-b11c-c2d533f04d2c",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a",
            "order_index": 7,
            "actor": "",
            "actor_stakeholder_id": "f796853a-8c69-4dba-84f8-d0002c3e3a0a",
            "action": "T&S confirms; clicks 'Ban — fake profile'",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "2cffb89c-5403-4963-b134-de0d0f3185bb",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a",
            "order_index": 8,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "User Service flags the banned account across all platforms within 60 seconds",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "c34ee60e-e9c1-4136-aac0-4e9c062f7192",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a",
            "order_index": 9,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "Notification Service sends 'Report processed — user banned' confirmation to reporter",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          }
        ]
      },
      {
        "id": "52886546-a732-4752-beb7-97ae8c295f72",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "GDPR data export request",
        "description": "EU user exercises their Article 20 right to data portability — requests all their data in machine-readable format. We have 30 days to honor; in practice we should finish much faster.",
        "primary_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
        "preconditions": "User has an active or recently-deleted account. User is or was an EU resident (we treat all requests as GDPR-eligible to be safe).",
        "postconditions": "User has downloaded a JSON file containing their profile, messages (encrypted blob + their key), match history, preferences, and consent log. Export job logged for audit.",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null,
        "steps": [
          {
            "id": "839423ec-8623-4601-88a0-e2b06749a290",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "52886546-a732-4752-beb7-97ae8c295f72",
            "order_index": 0,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User goes to Settings → Privacy → 'Download my data'",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "7cefe0c6-2218-44b3-8e17-a8ea869ae802",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "52886546-a732-4752-beb7-97ae8c295f72",
            "order_index": 1,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User confirms the request (one-tap, no friction)",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "eceefa66-8af1-43b7-9323-7c41b11d69e8",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "52886546-a732-4752-beb7-97ae8c295f72",
            "order_index": 2,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "User Service queues an export job to a worker process",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "bc61a1ae-1999-463d-b2fe-e2ade2544521",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "52886546-a732-4752-beb7-97ae8c295f72",
            "order_index": 3,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "Export worker collects: profile, photos, value-prompt answers, match history, sent/received messages (E2EE blobs only), consent log",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "42449224-afae-43cd-953a-f3a890d460e9",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "52886546-a732-4752-beb7-97ae8c295f72",
            "order_index": 4,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "Worker packages everything as JSON + raw photo files into a ZIP archive",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "1cdfc013-1b9e-4fc3-bd6e-89c3e7370250",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "52886546-a732-4752-beb7-97ae8c295f72",
            "order_index": 5,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "Worker uploads ZIP to S3 with a pre-signed URL valid for 7 days",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "57bafacb-b9ab-45c7-836e-07823f82f7b3",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "52886546-a732-4752-beb7-97ae8c295f72",
            "order_index": 6,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "Notification Service emails the user a signed download link",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "b3492b45-0e7b-4af9-afa9-9dc8a3742bff",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "52886546-a732-4752-beb7-97ae8c295f72",
            "order_index": 7,
            "actor": "",
            "actor_stakeholder_id": "75125624-45b3-4ab2-b8b8-10b089272bdc",
            "action": "User downloads ZIP and verifies contents",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "8a89f682-d9a4-4e0a-87a5-fff347f7b705",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "52886546-a732-4752-beb7-97ae8c295f72",
            "order_index": 8,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "After 7 days, S3 lifecycle policy auto-deletes the ZIP",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          },
          {
            "id": "5807d8ee-d9d7-4304-af65-d7d3f291064c",
            "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
            "scenario_id": "52886546-a732-4752-beb7-97ae8c295f72",
            "order_index": 9,
            "actor": "",
            "actor_stakeholder_id": null,
            "action": "Export job logged with timestamp + user ID + bytes-transferred for audit; retention 5 years per GDPR",
            "element_id": null,
            "notes": "",
            "created_at": "2026-05-21T17:20:30.984Z",
            "updated_at": "2026-05-21T17:20:30.984Z"
          }
        ]
      }
    ],
    "requirements": [
      {
        "id": "927c67fd-dce0-43aa-b750-ede4421ebbaa",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-001",
        "title": "Match feed returns ≥10 profiles within 200ms",
        "statement": "The Match Service shall return at least 10 ranked profile suggestions in response to a feed-refresh call within 200 ms (p95).",
        "priority": 1,
        "type": "functional",
        "status": "approved",
        "verification_method": "test",
        "rationale": "User retention drops sharply if feed loads slowly — measured in our v0 prototype.",
        "source_reference": "",
        "stakeholder_ids": [
          "75125624-45b3-4ab2-b8b8-10b089272bdc",
          "1f52def9-b232-4ee4-9c09-da58336a87f1"
        ],
        "need_ids": [
          "02c13b85-b725-4d7b-a943-4091566d9de1"
        ],
        "scenario_ids": [
          "7a9177d0-bf06-4dde-ba07-d1fefa698f33"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "6ef96c1b-e5bf-4335-8565-a1e7e294ff5c",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-002",
        "title": "Block + report in ≤2 taps",
        "statement": "The user shall be able to fully block and report another user with no more than 2 taps from any context where the other user is visible.",
        "priority": 1,
        "type": "functional",
        "status": "approved",
        "verification_method": "demonstration",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "75125624-45b3-4ab2-b8b8-10b089272bdc",
          "f796853a-8c69-4dba-84f8-d0002c3e3a0a"
        ],
        "need_ids": [
          "42e886a6-1366-401a-8753-eba6cced4d2f",
          "8cb3b84c-32aa-4a8d-8e40-b67ba7e9c096"
        ],
        "scenario_ids": [
          "61505916-4a1d-4ba0-92e1-e0aa2a0bfa9a"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "167f4fad-34ac-4188-a695-bc03084ca663",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-003",
        "title": "End-to-end encrypted messaging",
        "statement": "Chat messages between users shall be end-to-end encrypted using a Signal-protocol-compatible scheme. Server shall not have plaintext access to message contents.",
        "priority": 1,
        "type": "functional",
        "status": "approved",
        "verification_method": "inspection",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "75125624-45b3-4ab2-b8b8-10b089272bdc",
          "fccb758b-f6f2-41c9-badc-63fbefabbc66"
        ],
        "need_ids": [
          "c655ab6b-813c-4e16-bdc3-118b6d4dd03c",
          "c7f873b3-cf57-4958-9859-8f9954d0a665"
        ],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "6444f3bb-17d4-4135-bc48-e02fe7f8bd0b",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-004",
        "title": "Inclusive gender identity picker (≥10 options)",
        "statement": "Profile gender field shall offer at least 10 identity options including 'non-binary', 'genderfluid', 'transgender woman', 'transgender man', plus 'prefer to self-describe' with free text.",
        "priority": 1,
        "type": "functional",
        "status": "approved",
        "verification_method": "inspection",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "8adb7795-aed7-45db-aa5a-efb60fbf15dd",
          "2fc7bd83-8550-4041-9391-8c78c342c142"
        ],
        "need_ids": [
          "25bc0219-b5f1-4152-9f03-39c5c7b78886"
        ],
        "scenario_ids": [
          "7a9177d0-bf06-4dde-ba07-d1fefa698f33"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "ecd6e571-4053-4aae-9bef-2ef550e608a2",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-005",
        "title": "Photo liveness verification within 24h",
        "statement": "Every profile photo uploaded shall pass an automated liveness check from a third-party verification vendor within 24 hours; failed checks shall prevent profile activation.",
        "priority": 1,
        "type": "functional",
        "status": "approved",
        "verification_method": "test",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "75125624-45b3-4ab2-b8b8-10b089272bdc",
          "f796853a-8c69-4dba-84f8-d0002c3e3a0a"
        ],
        "need_ids": [
          "42e886a6-1366-401a-8753-eba6cced4d2f"
        ],
        "scenario_ids": [
          "7a9177d0-bf06-4dde-ba07-d1fefa698f33"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "92974246-4f78-4655-98cc-314f2e320958",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-006",
        "title": "Match score explainability",
        "statement": "Each match suggestion shall be accompanied by at least one human-readable explanation of why the user was suggested (e.g. 'you both prioritize career flexibility').",
        "priority": 2,
        "type": "functional",
        "status": "approved",
        "verification_method": "demonstration",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "75125624-45b3-4ab2-b8b8-10b089272bdc",
          "fccb758b-f6f2-41c9-badc-63fbefabbc66"
        ],
        "need_ids": [
          "b232d681-7aab-409c-9796-aa645b3edd1b",
          "1a470513-3fdb-44d5-abbe-5abffb8fe7f0"
        ],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "57aadfce-4198-435d-a6bb-8316ee2dda74",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-007",
        "title": "Push notification quiet hours",
        "statement": "Push notifications shall not be delivered between 22:00 and 08:00 local time of the receiving device, with a per-user override.",
        "priority": 2,
        "type": "functional",
        "status": "approved",
        "verification_method": "test",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "71ee5790-4367-4d02-ad5d-07281b53589c"
        ],
        "need_ids": [
          "9505dc53-1c73-4c59-ab1e-e79013eacfbe"
        ],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "678f2a3d-2aa6-4d01-86f5-89e6b2cb8c6e",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-008",
        "title": "Cold start ≤3s on mid-range devices",
        "statement": "Cold start time from icon tap to interactive Match Feed shall be ≤3 seconds on iPhone 12 / Pixel 5 with median Wi-Fi.",
        "priority": 1,
        "type": "non_functional",
        "status": "approved",
        "verification_method": "test",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "75125624-45b3-4ab2-b8b8-10b089272bdc"
        ],
        "need_ids": [],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "9d3ea56d-958b-49cc-9787-42d38fb955af",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-009",
        "title": "99.5% uptime SLA",
        "statement": "Backend services shall maintain at least 99.5% uptime measured monthly, excluding scheduled maintenance windows announced 7 days in advance.",
        "priority": 2,
        "type": "non_functional",
        "status": "approved",
        "verification_method": "test",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "a2689065-7019-4c29-95e8-fe6748908858"
        ],
        "need_ids": [],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "fa333f68-e767-4da0-b9a2-28a8fd74e840",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-010",
        "title": "App install size ≤80 MB",
        "statement": "The signed iOS app bundle and Android APK shall not exceed 80 MB to support emerging-market adoption.",
        "priority": 3,
        "type": "non_functional",
        "status": "draft",
        "verification_method": "inspection",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "867ba27c-a65f-4e75-9013-d5773b65746a"
        ],
        "need_ids": [],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "4278951e-d83a-4746-b370-18146d076ca3",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-011",
        "title": "Profile bio max 500 characters",
        "statement": "Profile bio field shall accept at most 500 characters to encourage thoughtful writing over essays.",
        "priority": 3,
        "type": "constraint",
        "status": "implemented",
        "verification_method": "inspection",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "07c8432f-f489-4e82-8ab6-11f058978380"
        ],
        "need_ids": [],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "e2c10008-5ed9-4b40-9ebc-d75ed6d9af1a",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-012",
        "title": "Premium subscription only via IAP",
        "statement": "All premium subscriptions purchased from the mobile app shall use Apple StoreKit / Google Billing exclusively, not third-party payment.",
        "priority": 1,
        "type": "constraint",
        "status": "approved",
        "verification_method": "inspection",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "ccdc3c24-5258-46aa-988b-c16fdddcfdca",
          "4c488196-fd46-4d18-891e-7f986bb642d7"
        ],
        "need_ids": [
          "6d3dbdd4-67d4-49dd-95a2-b59132bbf315"
        ],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "bea5f1d9-2917-4164-8e4d-f13e6463b977",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-013",
        "title": "GDPR Article 17 — right to be forgotten",
        "statement": "User shall be able to fully delete their account and all associated data within 30 days of request, with audit log retained per Article 30.",
        "priority": 1,
        "type": "regulatory",
        "status": "approved",
        "verification_method": "demonstration",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "fccb758b-f6f2-41c9-badc-63fbefabbc66"
        ],
        "need_ids": [
          "34bce54d-6587-4120-9176-b715a9044fb8"
        ],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "9843cf59-6a4c-49bc-8cd8-62bcb7b1bbce",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-014",
        "title": "GDPR Article 20 — data portability",
        "statement": "User shall be able to export all their personal data in machine-readable JSON within 30 days of request.",
        "priority": 1,
        "type": "regulatory",
        "status": "implemented",
        "verification_method": "test",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "fccb758b-f6f2-41c9-badc-63fbefabbc66"
        ],
        "need_ids": [
          "34bce54d-6587-4120-9176-b715a9044fb8"
        ],
        "scenario_ids": [
          "52886546-a732-4752-beb7-97ae8c295f72"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "f8bb7210-046f-4b20-af08-b6ac9274c2e7",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-015",
        "title": "App Store Guideline 5.1 — data minimization",
        "statement": "Data collected by the app shall be limited to categories disclosed in the App Store privacy nutrition label.",
        "priority": 1,
        "type": "regulatory",
        "status": "approved",
        "verification_method": "inspection",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "ccdc3c24-5258-46aa-988b-c16fdddcfdca"
        ],
        "need_ids": [
          "140debc7-5928-4209-bcc0-ea0f309cd9e0"
        ],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "19cb2041-eca4-4daa-b325-8a6442bba306",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-016",
        "title": "KOSA — under-18 prevention",
        "statement": "Effective age verification (declared DOB cross-checked with payment-method age + optional ID check) shall prevent under-18 account creation. Age-gate-bypass detection runs on signal patterns.",
        "priority": 1,
        "type": "regulatory",
        "status": "draft",
        "verification_method": "demonstration",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "86e881cd-45df-4790-8517-81bc215af39f"
        ],
        "need_ids": [
          "dbbcd708-1a73-4e83-87ab-a4231450fb31"
        ],
        "scenario_ids": [
          "7a9177d0-bf06-4dde-ba07-d1fefa698f33"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "fe7e5f2f-c6d3-4555-8623-2c0a2e1acb81",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-017",
        "title": "California CCPA — 'Do Not Sell My Info' link",
        "statement": "iOS/Android settings shall contain a 'Do Not Sell My Personal Information' link compliant with CCPA §1798.135.",
        "priority": 1,
        "type": "regulatory",
        "status": "approved",
        "verification_method": "inspection",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "fccb758b-f6f2-41c9-badc-63fbefabbc66"
        ],
        "need_ids": [],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "9b07004c-be7f-4e9d-b905-a2f8c95a36e3",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-018",
        "title": "EU DSA — algorithmic transparency disclosure",
        "statement": "The app shall display, in plain language accessible from settings, the main parameters used by the matching algorithm to rank profiles (Article 27 of the Digital Services Act).",
        "priority": 2,
        "type": "regulatory",
        "status": "draft",
        "verification_method": "inspection",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "fccb758b-f6f2-41c9-badc-63fbefabbc66"
        ],
        "need_ids": [
          "1a470513-3fdb-44d5-abbe-5abffb8fe7f0"
        ],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "a891f4ba-6477-4e6f-a8f0-2cd7d4f042bc",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "REQ-019",
        "title": "Twilio AUP — SMS rate limiting",
        "statement": "SMS verification requests per phone number shall be rate-limited to 5 per 24-hour window to comply with Twilio Acceptable Use Policy and avoid carrier blocks.",
        "priority": 2,
        "type": "regulatory",
        "status": "implemented",
        "verification_method": "test",
        "rationale": "",
        "source_reference": "",
        "stakeholder_ids": [
          "f36951d9-0e1a-44c0-9521-dcaec9c1d55d"
        ],
        "need_ids": [],
        "scenario_ids": [],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      }
    ],
    "system_elements": [
      {
        "id": "11bafc76-e764-4d60-9137-8cafec755be5",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Backend Services",
        "element_type": "subsystem",
        "scope": "internal",
        "description": "AWS-hosted microservices, REST API behind ALB.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "d220f618-ee6a-40d8-a74b-2bad1a40c847",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "ML Pipeline",
        "element_type": "subsystem",
        "scope": "internal",
        "description": "Training + serving for matching + moderation models. Daily retraining for matching, weekly for moderation.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "414f31cd-8c54-410d-971a-39cc10c96a3e",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "App ↔ Backend REST API",
        "element_type": "interface",
        "scope": "interface",
        "description": "TLS 1.3, JSON over HTTPS. JWT auth. Rate-limited per user.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "fff0c4a7-0457-44eb-b35c-ce78a4bf1aa4",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "App ↔ Apple App Store + StoreKit",
        "element_type": "interface",
        "scope": "interface",
        "description": "App Store distribution + IAP receipts for premium subscriptions.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "70badd43-997a-4e15-b6bf-55d3aeaeb6a6",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "App ↔ Google Play Billing",
        "element_type": "interface",
        "scope": "interface",
        "description": "Play Store distribution + Google Play Billing for IAP.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "5afaaa64-16d7-4e45-986d-0fa7b06f5e59",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "App ↔ Push Services (APNs / FCM)",
        "element_type": "interface",
        "scope": "interface",
        "description": "Apple Push Notification service + Firebase Cloud Messaging.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "f4e34d75-bfa2-4320-808f-564171284cba",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Apple App Store + Review",
        "element_type": "external_system",
        "scope": "external",
        "description": "Distribution + review gate. Strict on IAP, content, data collection disclosure.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "a2f37537-392b-4c94-945a-11ab2f93d2d6",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Google Play Store + Review",
        "element_type": "external_system",
        "scope": "external",
        "description": "Distribution + review. Less strict than Apple but enforces dating-specific rules.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "ebf379ec-7a42-4ba4-8e2a-091ea4b9f4a0",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Stripe (web checkout only)",
        "element_type": "external_system",
        "scope": "external",
        "description": "Web checkout for users who land via web (rare). Mobile uses IAP exclusively.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "e6e2e272-b360-481d-b2ae-963a2bafc247",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Profile Editor",
        "element_type": "component",
        "scope": "internal",
        "description": "Edit photos, bio, values prompts, preferences, identity. Live preview.",
        "parent_id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "99869128-ab4d-4242-a2b4-c19a87bd4307",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Settings",
        "element_type": "component",
        "scope": "internal",
        "description": "Privacy controls, notification prefs, subscription, account deletion, GDPR export.",
        "parent_id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "cbb33552-b884-4233-8f62-c5ab5b7f9d6e",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Push Notification Handler",
        "element_type": "component",
        "scope": "internal",
        "description": "Receives APNs/FCM messages, respects quiet hours, deep-links into chat or feed.",
        "parent_id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "726aa31c-a06a-4721-b5e2-9065a806c84f",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "User Service",
        "element_type": "service",
        "scope": "internal",
        "description": "Account lifecycle: signup, auth, deletion, GDPR export queueing, ban enforcement.",
        "parent_id": "11bafc76-e764-4d60-9137-8cafec755be5",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "69f795c3-2e0f-4f92-afa0-242a1b1e2f73",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Match Service",
        "element_type": "service",
        "scope": "internal",
        "description": "Serves Match Feed. Calls ML scoring model + applies hard filters (age, distance, preferences).",
        "parent_id": "11bafc76-e764-4d60-9137-8cafec755be5",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "d05cb074-b947-4119-9cfe-75d65338e2b0",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Chat Service",
        "element_type": "service",
        "scope": "internal",
        "description": "Routes E2EE message blobs. Server cannot decrypt; only sees envelope metadata for delivery + read receipts.",
        "parent_id": "11bafc76-e764-4d60-9137-8cafec755be5",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "9dd5b2fc-044b-4a6c-92bb-64b9346868ad",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Notification Service",
        "element_type": "service",
        "scope": "internal",
        "description": "Owns APNs + FCM integration. Enforces quiet hours and frequency caps server-side.",
        "parent_id": "11bafc76-e764-4d60-9137-8cafec755be5",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "0d5f13d8-9db6-420d-9da3-94e819034329",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Moderation Service",
        "element_type": "service",
        "scope": "internal",
        "description": "Queues reported content, runs ML pre-filter, presents to T&S reviewers, enforces bans.",
        "parent_id": "11bafc76-e764-4d60-9137-8cafec755be5",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "c82838db-6f5f-4566-b352-9deb00445975",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Payment Service",
        "element_type": "service",
        "scope": "internal",
        "description": "Handles IAP receipt validation with Apple/Google. Reconciles subscriptions to user entitlements.",
        "parent_id": "11bafc76-e764-4d60-9137-8cafec755be5",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "ef4ae204-b02b-4909-88bd-44fdd9942c3e",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Match Scoring Model",
        "element_type": "algorithm",
        "scope": "internal",
        "description": "Two-tower neural network producing user embeddings; cosine similarity ranks candidates. Inputs: values-prompt embeddings + behavioral signals.",
        "parent_id": "d220f618-ee6a-40d8-a74b-2bad1a40c847",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "c72cfd86-62bb-4c61-9b5d-5fa418a4bcb0",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Image Moderation Model",
        "element_type": "algorithm",
        "scope": "internal",
        "description": "Multi-class classifier: NSFW, AI-generated, deceptive composition. Pre-filters reports before human review.",
        "parent_id": "d220f618-ee6a-40d8-a74b-2bad1a40c847",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "7c22637b-ffaf-47f7-afef-57c820bf9620",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Training Data Lake",
        "element_type": "data_store",
        "scope": "internal",
        "description": "Parquet files in S3, PII-stripped at ingestion. Used for model retraining only.",
        "parent_id": "d220f618-ee6a-40d8-a74b-2bad1a40c847",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Meetcute Mobile App",
        "element_type": "subsystem",
        "scope": "internal",
        "description": "The user-facing application on iOS and Android, with shared design but native code per platform.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "7337004d-7e51-466f-b603-091f2d583712",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "iOS App",
        "element_type": "software",
        "scope": "internal",
        "description": "Swift / SwiftUI. Targets iOS 16+. App Store distribution.",
        "parent_id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "51abcaee-4b16-476e-addd-01854c7b50a1",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Android App",
        "element_type": "software",
        "scope": "internal",
        "description": "Kotlin / Compose. Targets Android 12+. Play Store distribution.",
        "parent_id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "f5f18365-ace5-466b-9997-d8a4d710db71",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Onboarding Flow",
        "element_type": "component",
        "scope": "internal",
        "description": "Sign-up + verification + initial profile creation. The most-A/B-tested area of the app.",
        "parent_id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "5405e341-9ad3-4749-9c57-24abfb791277",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Match Feed",
        "element_type": "component",
        "scope": "internal",
        "description": "Vertical card stack showing ranked matches with explainability snippets. Main daily-use surface.",
        "parent_id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "8dcbde2b-915f-406d-8f95-e0e8e03cfc13",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Chat Screen",
        "element_type": "component",
        "scope": "internal",
        "description": "Encrypted message UI. Read receipts respect privacy settings. Built-in unmatch + report.",
        "parent_id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "b2ba7db5-1099-4ac1-91bd-cafceb363e85",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Twilio (SMS API)",
        "element_type": "external_system",
        "scope": "external",
        "description": "SMS OTP delivery for phone verification.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "cdb53f2a-e9e0-46da-9ecb-0a2c0d230f7c",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Persona (KYC + liveness API)",
        "element_type": "external_system",
        "scope": "external",
        "description": "Photo liveness verification + optional government-ID check for premium tier.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "9b1c6c83-5912-489a-8127-d168d7aa3388",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "AWS Infrastructure",
        "element_type": "external_system",
        "scope": "external",
        "description": "EC2 / ECS / RDS / S3 / Lambda / CloudWatch. Single-region (eu-west-1) for GDPR data residency.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "fffc28ed-0484-4504-a03f-8ba97f3974a0",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Regulatory landscape (GDPR + CCPA + KOSA + DSA)",
        "element_type": "environment",
        "scope": "environment",
        "description": "The body of privacy + safety regulations we operate under. Changes here (new state laws, EU regulation) force product changes.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "95dc38a0-15e8-47f9-ba38-f36c0333a330",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Competitive landscape (Hinge, Bumble, Tinder, Coffee Meets Bagel)",
        "element_type": "environment",
        "scope": "environment",
        "description": "Established competitors with deep network effects. Differentiation on values-based matching is our wedge but can be copied.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "afe89958-09f2-4f60-b8fa-2b8e0cd83434",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "name": "Cultural norms around dating + privacy",
        "element_type": "environment",
        "scope": "environment",
        "description": "Shifts in how dating apps are perceived (post-2024 backlash on swipe fatigue, growing concern about AI-generated profiles) shape user expectations.",
        "parent_id": null,
        "metadata": {},
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      }
    ],
    "connections": [
      {
        "id": "ed907b4d-50bd-4dac-bb8b-406087a327a2",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "69f795c3-2e0f-4f92-afa0-242a1b1e2f73",
        "from_type": "system_element",
        "to_id": "927c67fd-dce0-43aa-b750-ede4421ebbaa",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Match Service implements feed-fetch with 200ms p95 target",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "a88ab710-0ec5-4e77-b0d6-1e7707ab74ba",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "ef4ae204-b02b-4909-88bd-44fdd9942c3e",
        "from_type": "system_element",
        "to_id": "927c67fd-dce0-43aa-b750-ede4421ebbaa",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Two-tower model produces ranked candidates",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "41e9e543-5a2a-4b6e-91b7-c25398f73b55",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "8dcbde2b-915f-406d-8f95-e0e8e03cfc13",
        "from_type": "system_element",
        "to_id": "6ef96c1b-e5bf-4335-8565-a1e7e294ff5c",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Report/block UI lives in chat + profile contexts, 2 taps deep",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "78a5ff51-f75d-4f4d-846f-a6905379aa9f",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "0d5f13d8-9db6-420d-9da3-94e819034329",
        "from_type": "system_element",
        "to_id": "6ef96c1b-e5bf-4335-8565-a1e7e294ff5c",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Backend processes the report",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "1329e2a4-bb3c-4bdb-b961-687e86f188eb",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "d05cb074-b947-4119-9cfe-75d65338e2b0",
        "from_type": "system_element",
        "to_id": "167f4fad-34ac-4188-a695-bc03084ca663",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "E2EE only sees envelopes, not plaintext",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "35190a6a-a11d-4522-bd65-19cb9afcfbae",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "e6e2e272-b360-481d-b2ae-963a2bafc247",
        "from_type": "system_element",
        "to_id": "6444f3bb-17d4-4135-bc48-e02fe7f8bd0b",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Identity picker UI with 10+ options",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "bd9762c0-c0e7-4eef-bf30-3514a623d87f",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "cdb53f2a-e9e0-46da-9ecb-0a2c0d230f7c",
        "from_type": "system_element",
        "to_id": "ecd6e571-4053-4aae-9bef-2ef550e608a2",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Liveness check via Persona API",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "0bca0ace-cc4a-462b-8ccb-a2c89ad435a7",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "f5f18365-ace5-466b-9997-d8a4d710db71",
        "from_type": "system_element",
        "to_id": "ecd6e571-4053-4aae-9bef-2ef550e608a2",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Liveness check is part of signup flow",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "c89365fa-2f91-4c8d-b8cd-8369365693b7",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "5405e341-9ad3-4749-9c57-24abfb791277",
        "from_type": "system_element",
        "to_id": "92974246-4f78-4655-98cc-314f2e320958",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Feed cards show explanation strings",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "7dbd3dcf-7ee6-4afa-8453-86b9a68bdfaf",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "9dd5b2fc-044b-4a6c-92bb-64b9346868ad",
        "from_type": "system_element",
        "to_id": "57aadfce-4198-435d-a6bb-8316ee2dda74",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Server-side quiet-hours enforcement",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "cafe5ab5-772f-4bef-a293-ac1cb76b2da2",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "c82838db-6f5f-4566-b352-9deb00445975",
        "from_type": "system_element",
        "to_id": "e2c10008-5ed9-4b40-9ebc-d75ed6d9af1a",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Validates IAP receipts only, no Stripe in-app",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "9ed8b759-02dd-45c6-91cf-3e59c156d725",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "726aa31c-a06a-4721-b5e2-9065a806c84f",
        "from_type": "system_element",
        "to_id": "bea5f1d9-2917-4164-8e4d-f13e6463b977",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Implements deletion + audit log",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "6ed68b00-d280-4c19-ae48-c8ec7fd9d565",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "726aa31c-a06a-4721-b5e2-9065a806c84f",
        "from_type": "system_element",
        "to_id": "9843cf59-6a4c-49bc-8cd8-62bcb7b1bbce",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Implements export job queue",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "0daca4f7-b150-4c5a-a6b4-d75cdab4e465",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "f5f18365-ace5-466b-9997-d8a4d710db71",
        "from_type": "system_element",
        "to_id": "19cb2041-eca4-4daa-b325-8a6442bba306",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Age verification logic in signup",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "f4f497e3-f4cb-45ad-a863-a24d27f4755d",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "99869128-ab4d-4242-a2b4-c19a87bd4307",
        "from_type": "system_element",
        "to_id": "fe7e5f2f-c6d3-4555-8623-2c0a2e1acb81",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Do Not Sell My Info link in privacy settings",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "98b49800-53d5-4565-83d5-ea73a3526f75",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "99869128-ab4d-4242-a2b4-c19a87bd4307",
        "from_type": "system_element",
        "to_id": "9b07004c-be7f-4e9d-b905-a2f8c95a36e3",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Algorithm transparency page (in progress)",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "fa3fb19b-44af-4bc9-b204-b588df16698d",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "726aa31c-a06a-4721-b5e2-9065a806c84f",
        "from_type": "system_element",
        "to_id": "a891f4ba-6477-4e6f-a8f0-2cd7d4f042bc",
        "to_type": "requirement",
        "relation_type": "satisfies",
        "description": "Per-phone rate limit on SMS verification",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "4a91e30e-87d3-4c34-b9ef-e97b9486b2d3",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "from_type": "system_element",
        "to_id": "f4e34d75-bfa2-4320-808f-564171284cba",
        "to_type": "system_element",
        "relation_type": "interfaces_with",
        "description": "App Store distribution + IAP",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "9a8d019d-1c89-4618-b226-8d39d746a7b7",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "from_type": "system_element",
        "to_id": "a2f37537-392b-4c94-945a-11ab2f93d2d6",
        "to_type": "system_element",
        "relation_type": "interfaces_with",
        "description": "Play Store distribution + Billing",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "094def7f-d45b-404a-8a04-9e35b7eb622b",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "726aa31c-a06a-4721-b5e2-9065a806c84f",
        "from_type": "system_element",
        "to_id": "b2ba7db5-1099-4ac1-91bd-cafceb363e85",
        "to_type": "system_element",
        "relation_type": "interfaces_with",
        "description": "SMS OTP delivery",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "331e6035-d87e-4542-be55-85f6af6c2cad",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "f5f18365-ace5-466b-9997-d8a4d710db71",
        "from_type": "system_element",
        "to_id": "cdb53f2a-e9e0-46da-9ecb-0a2c0d230f7c",
        "to_type": "system_element",
        "relation_type": "interfaces_with",
        "description": "Liveness verification call",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "f414f2d6-488d-4a2e-99df-90b8e1aaf50b",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "11bafc76-e764-4d60-9137-8cafec755be5",
        "from_type": "system_element",
        "to_id": "9b1c6c83-5912-489a-8127-d168d7aa3388",
        "to_type": "system_element",
        "relation_type": "interfaces_with",
        "description": "Backend runs on AWS eu-west-1",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "bf400c17-075b-4643-9a4e-ea5df100f052",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "3fcd7985-843d-4a2b-8c77-652a9cb39e85",
        "from_type": "system_element",
        "to_id": "11bafc76-e764-4d60-9137-8cafec755be5",
        "to_type": "system_element",
        "relation_type": "interfaces_with",
        "description": "REST/JSON API over HTTPS",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "cedf3897-b417-4b7a-b847-1584e6a7dc72",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "fffc28ed-0484-4504-a03f-8ba97f3974a0",
        "from_type": "system_element",
        "to_id": "fccb758b-f6f2-41c9-badc-63fbefabbc66",
        "to_type": "stakeholder",
        "relation_type": "relates_to",
        "description": "GDPR enforcement acts within the regulatory environment",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "8a281494-229a-4f26-a420-74bb8c19a766",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "fffc28ed-0484-4504-a03f-8ba97f3974a0",
        "from_type": "system_element",
        "to_id": "86e881cd-45df-4790-8517-81bc215af39f",
        "to_type": "stakeholder",
        "relation_type": "relates_to",
        "description": "FTC/KOSA enforcement is part of the regulatory environment",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "6b1b2127-342e-489d-bf23-f0cb1771aa52",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "from_id": "95dc38a0-15e8-47f9-ba38-f36c0333a330",
        "from_type": "system_element",
        "to_id": "6e4377ae-ad29-4400-b6ed-bd73f4d26ddc",
        "to_type": "stakeholder",
        "relation_type": "relates_to",
        "description": "Competitor moves materialize within the broader competitive landscape",
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      }
    ],
    "risks": [
      {
        "id": "4571fe84-c883-4588-ba7d-b6015f497434",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "R-001",
        "title": "Fake / bot profiles erode user trust",
        "description": "AI-generated photos + scripted bios make catfishing trivially easy. If 1 in 20 profiles a user sees is fake, ratings drop and churn spikes.",
        "probability": 4,
        "impact": 4,
        "status": "analyzed",
        "mitigation": "Liveness check on signup (REQ-005); image-moderation model pre-filter; report queue with <60s response (sc-report).",
        "owner_stakeholder_id": "f796853a-8c69-4dba-84f8-d0002c3e3a0a",
        "related_requirement_ids": [
          "6ef96c1b-e5bf-4335-8565-a1e7e294ff5c",
          "ecd6e571-4053-4aae-9bef-2ef550e608a2"
        ],
        "related_element_ids": [
          "c72cfd86-62bb-4c61-9b5d-5fa418a4bcb0",
          "0d5f13d8-9db6-420d-9da3-94e819034329",
          "cdb53f2a-e9e0-46da-9ecb-0a2c0d230f7c"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "fd3f1fb0-07f4-4abf-b606-0a1c3caff112",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "R-002",
        "title": "Match algorithm demographic bias",
        "description": "Two-tower model may learn to over-recommend racially or socially homogeneous matches if training data is skewed. Documented industry issue.",
        "probability": 3,
        "impact": 5,
        "status": "identified",
        "mitigation": "Fairness audits in CI pipeline (per-cohort recall + presentation rates); diversity floor in candidate generation; quarterly external review.",
        "owner_stakeholder_id": "1f52def9-b232-4ee4-9c09-da58336a87f1",
        "related_requirement_ids": [
          "927c67fd-dce0-43aa-b750-ede4421ebbaa",
          "92974246-4f78-4655-98cc-314f2e320958",
          "9b07004c-be7f-4e9d-b905-a2f8c95a36e3"
        ],
        "related_element_ids": [
          "ef4ae204-b02b-4909-88bd-44fdd9942c3e",
          "7c22637b-ffaf-47f7-afef-57c820bf9620"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "a7c3f1f5-59c7-4365-bcbe-509e8ffb4736",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "R-003",
        "title": "Data breach exposing private messages",
        "description": "Even though messages are E2EE in transit + at rest, server retains envelope metadata (sender, recipient, timestamp). Leak of metadata enables relationship-graph reconstruction.",
        "probability": 2,
        "impact": 5,
        "status": "analyzed",
        "mitigation": "Defense in depth: VPC isolation, KMS-encrypted RDS, AWS Config compliance, quarterly pen-tests. Public bug bounty.",
        "owner_stakeholder_id": "fa9d2e0d-cf14-4a12-a269-442aca7fdfba",
        "related_requirement_ids": [
          "167f4fad-34ac-4188-a695-bc03084ca663"
        ],
        "related_element_ids": [
          "d05cb074-b947-4119-9cfe-75d65338e2b0",
          "9b1c6c83-5912-489a-8127-d168d7aa3388"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "572b47fb-7d47-46b5-b2b1-b64bd9e11184",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "R-004",
        "title": "Apple App Store rejection on IAP rule",
        "description": "If we add web checkout offering and link to it from app, Apple will reject (Guideline 3.1.1 covers explicit and 'reasonable inference' linking). Could block a release.",
        "probability": 2,
        "impact": 5,
        "status": "mitigated",
        "mitigation": "No mention of web pricing inside the app. Web checkout reachable only via marketing site, never deep-linked from app. Pre-submission review with App Store consultant for each release.",
        "owner_stakeholder_id": "c7476cba-f234-41b5-b2e0-a11e1a69cd5e",
        "related_requirement_ids": [
          "e2c10008-5ed9-4b40-9ebc-d75ed6d9af1a",
          "f8bb7210-046f-4b20-af08-b6ac9274c2e7"
        ],
        "related_element_ids": [
          "7337004d-7e51-466f-b603-091f2d583712",
          "fff0c4a7-0457-44eb-b35c-ce78a4bf1aa4"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "783b3680-49e2-4dd6-a9cc-e9fd4945f547",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "R-005",
        "title": "Under-18 user bypasses age verification",
        "description": "Declared DOB is unverified for free tier. KOSA violation if a minor harmed on platform; FTC fines + state AG actions.",
        "probability": 3,
        "impact": 5,
        "status": "identified",
        "mitigation": "DOB + payment-method age cross-check on signup; ID verification gate on premium features; ML signal pattern detector (school WiFi, school-age behavior); legal hold on suspect accounts for review.",
        "owner_stakeholder_id": "f796853a-8c69-4dba-84f8-d0002c3e3a0a",
        "related_requirement_ids": [
          "19cb2041-eca4-4daa-b325-8a6442bba306"
        ],
        "related_element_ids": [
          "f5f18365-ace5-466b-9997-d8a4d710db71",
          "726aa31c-a06a-4721-b5e2-9065a806c84f",
          "cdb53f2a-e9e0-46da-9ecb-0a2c0d230f7c"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "83cda6cb-8767-4c8c-bd45-a1f3adb670fd",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "R-006",
        "title": "ML training data contains PII",
        "description": "If photos or bios with embedded PII leak into training set despite ingestion-time scrubbing, GDPR violation + potential mass deletion order.",
        "probability": 3,
        "impact": 4,
        "status": "analyzed",
        "mitigation": "Two-stage scrubbing (ingestion + pre-training audit); differential privacy budget on bio embeddings; periodic random sample audit by privacy engineer.",
        "owner_stakeholder_id": "1f52def9-b232-4ee4-9c09-da58336a87f1",
        "related_requirement_ids": [
          "bea5f1d9-2917-4164-8e4d-f13e6463b977",
          "9843cf59-6a4c-49bc-8cd8-62bcb7b1bbce"
        ],
        "related_element_ids": [
          "7c22637b-ffaf-47f7-afef-57c820bf9620",
          "ef4ae204-b02b-4909-88bd-44fdd9942c3e"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "c1c751fb-c54d-4aad-840b-feaa11405bad",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "R-007",
        "title": "Twilio SMS costs explode during viral growth",
        "description": "If TikTok / Reddit drives a 10x signup spike, SMS verification cost jumps from $5K/mo to $50K/mo in a week — OPEX surprise.",
        "probability": 3,
        "impact": 3,
        "status": "accepted",
        "mitigation": "Per-day caps on new SMS verifications with queue fallback; voice-OTP as backup; budgeted spike absorber in monthly opex plan.",
        "owner_stakeholder_id": "fa9d2e0d-cf14-4a12-a269-442aca7fdfba",
        "related_requirement_ids": [
          "a891f4ba-6477-4e6f-a8f0-2cd7d4f042bc"
        ],
        "related_element_ids": [
          "b2ba7db5-1099-4ac1-91bd-cafceb363e85",
          "726aa31c-a06a-4721-b5e2-9065a806c84f"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "09b344b2-d4d6-474a-a869-302ef8c11010",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "R-008",
        "title": "Competitor launches values-matching feature",
        "description": "Hinge or Bumble adds a similar values-prompt + explainability layer; our differentiation evaporates.",
        "probability": 4,
        "impact": 2,
        "status": "identified",
        "mitigation": "Build deeper moats: vibrant community of curated content, partnership with relationship coaches, in-person events, longer-term retention metrics.",
        "owner_stakeholder_id": "07c8432f-f489-4e82-8ab6-11f058978380",
        "related_requirement_ids": [
          "927c67fd-dce0-43aa-b750-ede4421ebbaa",
          "92974246-4f78-4655-98cc-314f2e320958"
        ],
        "related_element_ids": [
          "ef4ae204-b02b-4909-88bd-44fdd9942c3e",
          "95dc38a0-15e8-47f9-ba38-f36c0333a330"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "e8e26118-f40b-4f78-82d3-ed07f804299f",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "R-009",
        "title": "Key-person dependency on single ML engineer",
        "description": "All matching + moderation models owned by one engineer. If they leave or burn out, retraining halts.",
        "probability": 3,
        "impact": 4,
        "status": "identified",
        "mitigation": "Document model architecture in writing; pair on retraining workflows; hire a second ML engineer within 6 months; ensure CI pipeline runs without human intervention.",
        "owner_stakeholder_id": "1168a98e-4b5c-4018-a5ab-4211239de6f3",
        "related_requirement_ids": [],
        "related_element_ids": [
          "ef4ae204-b02b-4909-88bd-44fdd9942c3e",
          "c72cfd86-62bb-4c61-9b5d-5fa418a4bcb0"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      },
      {
        "id": "092ff519-f6c4-4c20-89a5-11ddc3541329",
        "project_id": "a754f616-5b15-4e45-a0d8-20207879fa0c",
        "identifier": "R-010",
        "title": "EU DSA non-compliance — algorithmic transparency",
        "description": "Article 27 DSA requires clear explanation of recommender algorithm. Our current 'explainability' snippet may be insufficient under DSA audit.",
        "probability": 3,
        "impact": 3,
        "status": "identified",
        "mitigation": "Add a dedicated 'How matching works' page in Settings with input categories, weights, opt-out instructions. Legal review by EU privacy counsel before EU launch.",
        "owner_stakeholder_id": "fccb758b-f6f2-41c9-badc-63fbefabbc66",
        "related_requirement_ids": [
          "92974246-4f78-4655-98cc-314f2e320958",
          "9b07004c-be7f-4e9d-b905-a2f8c95a36e3"
        ],
        "related_element_ids": [
          "99869128-ab4d-4242-a2b4-c19a87bd4307",
          "fffc28ed-0484-4504-a03f-8ba97f3974a0"
        ],
        "created_at": "2026-05-21T17:20:30.984Z",
        "updated_at": "2026-05-21T17:20:30.984Z",
        "owner_id": null,
        "organization_id": null
      }
    ]
  }
}