{
  "version": "1.2.0",
  "chapters": [
    {
      "title": "Framing DTOs in a stricter PHP world\r",
      "startTime": 0,
      "endTime": 75
    },
    {
      "title": "Our current practice: hybrids, few true DTOs\r",
      "startTime": 75,
      "endTime": 165
    },
    {
      "title": "Form requests, `safe()`, and typed inputs\r",
      "startTime": 165,
      "endTime": 225
    },
    {
      "title": "Reuse across API and form layers rarely aligns\r",
      "startTime": 225,
      "endTime": 270
    },
    {
      "title": "Where DTOs shine: normalizing multiple APIs\r",
      "startTime": 270,
      "endTime": 345
    },
    {
      "title": "Service boundaries: wrapping vendor objects (e.g., Stripe)\r",
      "startTime": 345,
      "endTime": 375
    },
    {
      "title": "PHPDoc-typed arrays vs DTO overhead\r",
      "startTime": 375,
      "endTime": 405
    },
    {
      "title": "Conventions, Larastan levels, and avoiding ceremony\r",
      "startTime": 405,
      "endTime": 465
    },
    {
      "title": "Treat DTOs as a tool, not a rule\r",
      "startTime": 465,
      "endTime": 555
    },
    {
      "title": "Silly bit",
      "startTime": 555,
      "endTime": 0
    }
  ]
}