reference

startup.json schema

playbook/startup.schema.json

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Atelier — startup.json contract",
  "description": "Source unique de vérité par sprint Atelier. Versionné. Chaque station enrichit sa section.",
  "type": "object",
  "required": ["atelier_version", "sprint_id", "input"],
  "additionalProperties": false,
  "properties": {
    "atelier_version": { "type": "string", "enum": ["1.0"] },
    "sprint_id": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}-[a-z0-9-]+$",
      "description": "Format YYYY-MM-DD-slug, ex: 2026-05-16-prearrival"
    },
    "started_at": { "type": "string", "format": "date-time" },
    "current_station": { "type": "string", "enum": ["S1", "S2", "S3", "S4", "S5", "S6", "S7", "DONE"] },
    "input": {
      "type": "object",
      "description": "Idea card brute, copiée depuis saas-pipeline.json ou autre source.",
      "required": ["title", "tagline", "problem", "icp"],
      "properties": {
        "source_id": { "type": "string" },
        "title": { "type": "string" },
        "tagline": { "type": "string" },
        "problem": { "type": "string" },
        "solution_hint": { "type": "string" },
        "icp": { "type": "string" },
        "wedge": { "type": "string" },
        "martin_asset": { "type": "string" },
        "pricing_hint": { "type": "string" }
      }
    },
    "s1_stress_test": {
      "type": "object",
      "description": "Livrable S1 — Idea Stress Test (J1)",
      "properties": {
        "completed_at": { "type": "string", "format": "date-time" },
        "verdict": { "type": "string", "enum": ["GO", "STOP"] },
        "score": { "type": "number", "minimum": 0, "maximum": 10 },
        "doc": { "type": "string", "description": "Chemin relatif vers le MD" },
        "yc_one_pager": {
          "type": "object",
          "properties": {
            "what_you_do": { "type": "string" },
            "problem": { "type": "string" },
            "solution": { "type": "string" },
            "why_now": { "type": "string" },
            "who_for": { "type": "string" },
            "why_us": { "type": "string" }
          }
        },
        "stress_test_responses": {
          "type": "object",
          "description": "Réponses aux questions critiques (problème réel ? combien sont-ils ? paient-ils déjà pour des palliatifs ?)"
        }
      }
    },
    "s2_market_intel": {
      "type": "object",
      "properties": {
        "completed_at": { "type": "string", "format": "date-time" },
        "doc": { "type": "string" },
        "tam_sam_som": {
          "type": "object",
          "properties": {
            "tam_eur": { "type": "string" },
            "sam_eur": { "type": "string" },
            "som_eur": { "type": "string" },
            "method": { "type": "string" }
          }
        },
        "competitors": {
          "type": "array",
          "description": "20 concurrents (directs + indirects) avec pricing + reviews + SEO gap",
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "url": { "type": "string" },
              "type": { "type": "string", "enum": ["direct", "indirect", "adjacent"] },
              "pricing": { "type": "string" },
              "positioning": { "type": "string" },
              "weakness": { "type": "string" }
            }
          }
        },
        "positioning_gap": { "type": "string" },
        "unfair_angle": { "type": "string" }
      }
    },
    "s3_brand": {
      "type": "object",
      "properties": {
        "completed_at": { "type": "string", "format": "date-time" },
        "doc": { "type": "string" },
        "telegram_gate_approved_at": { "type": "string", "format": "date-time" },
        "candidates": {
          "type": "array",
          "description": "20-50 noms générés selon 4 frameworks",
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "framework": { "type": "string", "enum": ["compound", "abstract", "metaphor", "founder-credible"] },
              "rationale": { "type": "string" }
            }
          }
        },
        "finalists": {
          "type": "array",
          "maxItems": 5,
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "domain_com_available": { "type": "boolean" },
              "domain_io_available": { "type": "boolean" },
              "x_handle_available": { "type": "boolean" },
              "instagram_handle_available": { "type": "boolean" },
              "linkedin_handle_available": { "type": "boolean" },
              "trademark_uspto_clear": { "type": "boolean" },
              "trademark_euipo_clear": { "type": "boolean" },
              "verified_at": { "type": "string", "format": "date-time" }
            }
          }
        },
        "final_name": { "type": "string" },
        "final_domain": { "type": "string" }
      }
    },
    "s4_spec": {
      "type": "object",
      "properties": {
        "completed_at": { "type": "string", "format": "date-time" },
        "doc": { "type": "string" },
        "telegram_gate_approved_at": { "type": "string", "format": "date-time" },
        "features_v1": {
          "type": "array",
          "maxItems": 3,
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "user_story": { "type": "string" },
              "acceptance_criteria": { "type": "array", "items": { "type": "string" } }
            }
          }
        },
        "out_of_scope_v1": { "type": "array", "items": { "type": "string" } },
        "design_tokens": {
          "type": "object",
          "properties": {
            "palette": { "type": "object" },
            "typography": { "type": "object" },
            "motion": { "type": "object" },
            "radius": { "type": "object" }
          }
        },
        "wireframes": { "type": "array", "items": { "type": "string" }, "description": "Chemins vers PNG/Figma exports" }
      }
    },
    "s5_build": {
      "type": "object",
      "properties": {
        "completed_at": { "type": "string", "format": "date-time" },
        "telegram_gate_approved_at": { "type": "string", "format": "date-time" },
        "repo_url": { "type": "string", "format": "uri" },
        "live_url": { "type": "string", "format": "uri" },
        "custom_domain_pointed": { "type": "boolean" },
        "stripe_live": { "type": "boolean" },
        "supabase_project_ref": { "type": "string" },
        "e2e_passing": { "type": "boolean" },
        "playwright_run_url": { "type": "string" }
      }
    },
    "s6_launch": {
      "type": "object",
      "properties": {
        "completed_at": { "type": "string", "format": "date-time" },
        "telegram_gate_approved_at": { "type": "string", "format": "date-time" },
        "landing_url": { "type": "string", "format": "uri" },
        "product_hunt_scheduled_at": { "type": "string", "format": "date-time" },
        "emails_sent": { "type": "integer", "minimum": 0 },
        "prospects_source": { "type": "string", "description": "VibeProspecting / Apollo / LinkedIn Sales Nav" },
        "build_in_public_posts": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "platform": { "type": "string", "enum": ["x", "linkedin", "tiktok", "youtube"] },
              "url": { "type": "string" },
              "published_at": { "type": "string", "format": "date-time" }
            }
          }
        }
      }
    },
    "s7_iterate": {
      "type": "object",
      "properties": {
        "posthog_project_id": { "type": "string" },
        "weekly_retros": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "week": { "type": "integer" },
              "doc": { "type": "string" },
              "mrr_eur": { "type": "number" },
              "activation_d1_pct": { "type": "number" },
              "retention_d7_pct": { "type": "number" },
              "free_to_paid_pct": { "type": "number" }
            }
          }
        },
        "j30_verdict": { "type": "string", "enum": ["GO", "PIVOT", "KILL"] },
        "j30_doc": { "type": "string" }
      }
    }
  }
}