[
  {
    "id": "001",
    "date": "2026-06-16",
    "kind": "visual",
    "cat": {
      "zh": "场域",
      "en": "Field"
    },
    "title": {
      "zh": "ethanyeang.me 开工",
      "en": "ethanyeang.me begins"
    },
    "text": {
      "zh": "个人站不是博客，是门面。瑞士网格当建筑，碎片当日常，建造当证据。",
      "en": "This isn't a blog — it's a storefront. Swiss grid as architecture."
    },
    "layout": {
      "span": 4,
      "tall": true
    },
    "cover": "/public/media/hero/hero-2-workspace.jpg",
    "images": [
      "/public/media/hero/hero-2-workspace.jpg",
      "/public/media/hero/hero-3-code-night.jpg"
    ],
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/hero/hero-2-workspace.jpg",
        "alt": ""
      },
      {
        "type": "image",
        "src": "/public/media/hero/hero-3-code-night.jpg",
        "alt": ""
      },
      {
        "type": "text",
        "body": {
          "zh": "个人站不是博客，是门面。瑞士网格当建筑，碎片当日常，建造当证据。",
          "en": "This isn't a blog — it's a storefront. Swiss grid as architecture."
        }
      }
    ]
  },
  {
    "id": "002",
    "date": "2026-06-15",
    "kind": "text",
    "cat": {
      "zh": "随想",
      "en": "Note"
    },
    "title": {
      "zh": "一句话",
      "en": "One line"
    },
    "text": {
      "zh": "有时候只是想说话。不需要配图，不需要标题党。就是此刻的念头。",
      "en": "Sometimes you just want to say something. No image, no headline — a thought in the moment."
    },
    "layout": {
      "span": 4
    },
    "blocks": [
      {
        "type": "text",
        "body": {
          "zh": "有时候只是想说话。不需要配图，不需要标题党。就是此刻的念头。",
          "en": "Sometimes you just want to say something. No image, no headline — a thought in the moment."
        }
      }
    ]
  },
  {
    "id": "003",
    "date": "2026-06-10",
    "kind": "visual",
    "cat": {
      "zh": "在路上",
      "en": "Field"
    },
    "title": {
      "zh": "湖边的下午",
      "en": "Afternoon by the lake"
    },
    "text": {
      "zh": "自驾途中停了一站。水面很静 — 外面冷，里面可以有山河。",
      "en": "Stopped mid-drive. Still water — cool grid, warm world."
    },
    "layout": {
      "span": 4,
      "wide": true
    },
    "cover": "/public/media/about/photo-10-mountain.jpg",
    "images": [
      "/public/media/about/photo-10-mountain.jpg",
      "/public/media/about/photo-01-shenzhen-bay.jpg",
      "/public/media/about/photo-06-road.jpg"
    ],
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/about/photo-10-mountain.jpg",
        "alt": ""
      },
      {
        "type": "image",
        "src": "/public/media/about/photo-01-shenzhen-bay.jpg",
        "alt": ""
      },
      {
        "type": "image",
        "src": "/public/media/about/photo-06-road.jpg",
        "alt": ""
      },
      {
        "type": "text",
        "body": {
          "zh": "自驾途中停了一站。水面很静 — 外面冷，里面可以有山河。",
          "en": "Stopped mid-drive. Still water — cool grid, warm world."
        }
      }
    ]
  },
  {
    "id": "004",
    "date": "2026-06-08",
    "kind": "text",
    "cat": {
      "zh": "AI",
      "en": "AI"
    },
    "title": {
      "zh": "Agent 是延伸",
      "en": "Agents extend"
    },
    "text": {
      "zh": "工具可以省力，品味不能外包。",
      "en": "Tools save labor; taste doesn't get outsourced."
    },
    "layout": {
      "span": 4
    },
    "blocks": [
      {
        "type": "text",
        "body": {
          "zh": "工具可以省力，品味不能外包。",
          "en": "Tools save labor; taste doesn't get outsourced."
        }
      }
    ]
  },
  {
    "id": "005",
    "date": "2026-06-05",
    "kind": "moments",
    "cat": {
      "zh": "朋友圈",
      "en": "Moments"
    },
    "title": {
      "zh": "工作室一角",
      "en": "Studio corner"
    },
    "text": {
      "zh": "从朋友圈捞回来的几张。手图会轮换 — 像记忆本身。",
      "en": "Pulled from moments. Phone shots rotate — like memory itself."
    },
    "layout": {
      "span": 4,
      "tall": true
    },
    "cover": "/public/media/about/photo-05-desk.jpg",
    "images": [
      "/public/media/about/photo-05-desk.jpg",
      "/public/media/about/photo-07-3dprint.jpg",
      "/public/media/about/photo-11-robot-arm.jpg",
      "/public/media/about/photo-09-solder.jpg"
    ],
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/about/photo-05-desk.jpg",
        "alt": ""
      },
      {
        "type": "image",
        "src": "/public/media/about/photo-07-3dprint.jpg",
        "alt": ""
      },
      {
        "type": "image",
        "src": "/public/media/about/photo-11-robot-arm.jpg",
        "alt": ""
      },
      {
        "type": "image",
        "src": "/public/media/about/photo-09-solder.jpg",
        "alt": ""
      },
      {
        "type": "text",
        "body": {
          "zh": "从朋友圈捞回来的几张。手图会轮换 — 像记忆本身。",
          "en": "Pulled from moments. Phone shots rotate — like memory itself."
        }
      }
    ]
  },
  {
    "id": "006",
    "date": "2026-05-28",
    "kind": "visual",
    "cat": {
      "zh": "审美",
      "en": "Taste"
    },
    "title": {
      "zh": "代码最便宜",
      "en": "Code is the cheapest part"
    },
    "text": {
      "zh": "泡泡玛特卖的不是塑料，是光泽和门店体验。光标、留白、网格 — 这些才贵。",
      "en": "Pop Mart sells gloss and the store experience. Cursor, whitespace, grid — that's the premium."
    },
    "layout": {
      "span": 8,
      "wide": true
    },
    "cover": "/public/media/about/photo-07-3dprint.jpg",
    "images": [
      "/public/media/about/photo-07-3dprint.jpg",
      "/public/media/about/photo-11-robot-arm.jpg"
    ],
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/about/photo-07-3dprint.jpg",
        "alt": ""
      },
      {
        "type": "image",
        "src": "/public/media/about/photo-11-robot-arm.jpg",
        "alt": ""
      },
      {
        "type": "text",
        "body": {
          "zh": "泡泡玛特卖的不是塑料，是光泽和门店体验。光标、留白、网格 — 这些才贵。",
          "en": "Pop Mart sells gloss and the store experience. Cursor, whitespace, grid — that's the premium."
        }
      }
    ]
  },
  {
    "id": "007",
    "date": "2026-05-22",
    "kind": "text",
    "cat": {
      "zh": "随想",
      "en": "Note"
    },
    "title": {
      "zh": "夜里",
      "en": "Night"
    },
    "text": {
      "zh": "网格是冷的。但你可以往里面放任何温度的东西。",
      "en": "The grid stays cool. You can put anything warm inside it."
    },
    "layout": {
      "span": 4
    },
    "blocks": [
      {
        "type": "text",
        "body": {
          "zh": "网格是冷的。但你可以往里面放任何温度的东西。",
          "en": "The grid stays cool. You can put anything warm inside it."
        }
      }
    ]
  },
  {
    "id": "008",
    "date": "2026-05-20",
    "kind": "visual",
    "cat": {
      "zh": "在路上",
      "en": "Field"
    },
    "title": {
      "zh": "海岸线",
      "en": "Coastline"
    },
    "text": {
      "zh": "风很大。拍了一张，继续开。",
      "en": "Windy. One frame, then drive on."
    },
    "layout": {
      "span": 8,
      "wide": true
    },
    "cover": "/public/media/about/photo-01-shenzhen-bay.jpg",
    "images": [
      "/public/media/about/photo-01-shenzhen-bay.jpg",
      "/public/media/about/photo-06-road.jpg"
    ],
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/about/photo-01-shenzhen-bay.jpg",
        "alt": ""
      },
      {
        "type": "image",
        "src": "/public/media/about/photo-06-road.jpg",
        "alt": ""
      },
      {
        "type": "text",
        "body": {
          "zh": "风很大。拍了一张，继续开。",
          "en": "Windy. One frame, then drive on."
        }
      }
    ]
  },
  {
    "id": "009",
    "date": "2026-06-16",
    "kind": "visual",
    "cat": {
      "zh": "审美",
      "en": "Taste"
    },
    "title": {
      "zh": "设计之眼 · Rams → Apple",
      "en": "Rams → Apple → Pop Mart"
    },
    "text": {
      "zh": "做了一页面讲 Dieter Rams。SK4 唱机、T3 收音机、ET66 计算器 → iPod、iPhone → Molly 盲盒。底层逻辑一样：溢价 = 用户愿意为「成为更好的自己」付多少钱。",
      "en": "Built a page on Dieter Rams. SK4, T3, ET66 → iPod, iPhone → Molly. Same logic: premium = what you'll pay to become a better version of yourself."
    },
    "layout": {
      "span": 4,
      "tall": true
    },
    "cover": "/public/media/builds/design-taste-screenshot.png",
    "images": [
      "/public/media/builds/design-taste-screenshot.png"
    ],
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/builds/design-taste-screenshot.png",
        "alt": ""
      },
      {
        "type": "text",
        "body": {
          "zh": "做了一页面讲 Dieter Rams。SK4 唱机、T3 收音机、ET66 计算器 → iPod、iPhone → Molly 盲盒。底层逻辑一样：溢价 = 用户愿意为「成为更好的自己」付多少钱。",
          "en": "Built a page on Dieter Rams. SK4, T3, ET66 → iPod, iPhone → Molly. Same logic: premium = what you'll pay to become a better version of yourself."
        }
      }
    ]
  },
  {
    "id": "010",
    "date": "2026-06-15",
    "kind": "text",
    "cat": {
      "zh": "随想",
      "en": "Note"
    },
    "title": {
      "zh": "钱流向哪里",
      "en": "Where money flows"
    },
    "text": {
      "zh": "钱不流向「好人」也不流向「实干家」——钱流向「确定性信号」。孙宇晨最聪明的事不是割韭菜，是让所有人都知道他在割韭菜。负面信号也是信号，沉默才是死亡。",
      "en": "Money doesn't flow to good people or hard workers. It flows to clear signals. Negative signal beats silence."
    },
    "layout": {
      "span": 4
    },
    "blocks": [
      {
        "type": "text",
        "body": {
          "zh": "钱不流向「好人」也不流向「实干家」——钱流向「确定性信号」。孙宇晨最聪明的事不是割韭菜，是让所有人都知道他在割韭菜。负面信号也是信号，沉默才是死亡。",
          "en": "Money doesn't flow to good people or hard workers. It flows to clear signals. Negative signal beats silence."
        }
      }
    ]
  },
  {
    "id": "011",
    "date": "2026-06-14",
    "kind": "text",
    "cat": {
      "zh": "随想",
      "en": "Note"
    },
    "title": {
      "zh": "借 vs 投",
      "en": "Borrow vs Invest"
    },
    "text": {
      "zh": "同一笔 3 万块，说「借我」触发借贷判断，说「投我」触发回报判断。两个完全不同的心理账户。不是你不行，是你用错了语言体系。",
      "en": "Same ¥30K. 'Borrow' triggers debt logic. 'Invest' triggers return logic. Two different psychological accounts."
    },
    "layout": {
      "span": 4
    },
    "blocks": [
      {
        "type": "text",
        "body": {
          "zh": "同一笔 3 万块，说「借我」触发借贷判断，说「投我」触发回报判断。两个完全不同的心理账户。不是你不行，是你用错了语言体系。",
          "en": "Same ¥30K. 'Borrow' triggers debt logic. 'Invest' triggers return logic. Two different psychological accounts."
        }
      }
    ]
  },
  {
    "id": "012",
    "date": "2026-06-17",
    "kind": "visual",
    "cat": {
      "zh": "AI",
      "en": "AI"
    },
    "title": {
      "zh": "UniLab · 机器狗跑起来了",
      "en": "UniLab robot dog running"
    },
    "text": {
      "zh": "R9-7945HX + RTX 3080，51 秒训出可用策略。比 IsaacLab 快 35x，不锁 CUDA。开源，让更多人能上手验证。",
      "en": "51 seconds on a gaming laptop — 35x faster than IsaacLab. No CUDA lock-in. Open source."
    },
    "layout": {
      "span": 4,
      "wide": true
    },
    "cover": "/public/media/about/photo-08-robot.jpg",
    "images": [
      "/public/media/about/photo-08-robot.jpg"
    ],
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/about/photo-08-robot.jpg",
        "alt": ""
      },
      {
        "type": "text",
        "body": {
          "zh": "R9-7945HX + RTX 3080，51 秒训出可用策略。比 IsaacLab 快 35x，不锁 CUDA。开源，让更多人能上手验证。",
          "en": "51 seconds on a gaming laptop — 35x faster than IsaacLab. No CUDA lock-in. Open source."
        }
      }
    ]
  },
  {
    "id": "013",
    "date": "2026-06-17",
    "kind": "text",
    "cat": {
      "zh": "工厂",
      "en": "Factory"
    },
    "title": {
      "zh": "Soundbar 是什么",
      "en": "What's a soundbar"
    },
    "text": {
      "zh": "客户问 Soundbar 是什么——电视底下横放的长条音箱。电视越来越薄，喇叭越来越差，Soundbar 就是替代方案。做硬件才知道：消费者买的不是参数，是一整套体验。",
      "en": "Client asked what a soundbar is. TVs get thinner, speakers get worse. Hardware reveals: consumers buy experience, not specs."
    },
    "layout": {
      "span": 8
    },
    "blocks": [
      {
        "type": "text",
        "body": {
          "zh": "客户问 Soundbar 是什么——电视底下横放的长条音箱。电视越来越薄，喇叭越来越差，Soundbar 就是替代方案。做硬件才知道：消费者买的不是参数，是一整套体验。",
          "en": "Client asked what a soundbar is. TVs get thinner, speakers get worse. Hardware reveals: consumers buy experience, not specs."
        }
      }
    ]
  },
  {
    "id": "014",
    "date": "2026-06-17",
    "kind": "visual",
    "cat": {
      "zh": "工厂",
      "en": "Factory"
    },
    "title": {
      "zh": "奋达工厂 · 第一次下厂",
      "en": "Fenda factory visit"
    },
    "text": {
      "zh": "第一次看奋达产线。Soundbar 从 PCB 到包装全流程。120 个工程师，12 个项目同时跑。最大感受：AI 和工厂之间还有一道巨大的翻译鸿沟。不是技术问题，是语言问题。",
      "en": "First factory visit. Soundbar from PCB to packaging. 120 engineers, 12 projects. The gap between AI and factory isn't tech — it's language."
    },
    "layout": {
      "span": 8,
      "wide": true
    },
    "cover": "/public/media/about/photo-02-factory.jpg",
    "images": [
      "/public/media/about/photo-02-factory.jpg",
      "/public/media/about/photo-03-pcb.jpg"
    ],
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/about/photo-02-factory.jpg",
        "alt": ""
      },
      {
        "type": "image",
        "src": "/public/media/about/photo-03-pcb.jpg",
        "alt": ""
      },
      {
        "type": "text",
        "body": {
          "zh": "第一次看奋达产线。Soundbar 从 PCB 到包装全流程。120 个工程师，12 个项目同时跑。最大感受：AI 和工厂之间还有一道巨大的翻译鸿沟。不是技术问题，是语言问题。",
          "en": "First factory visit. Soundbar from PCB to packaging. 120 engineers, 12 projects. The gap between AI and factory isn't tech — it's language."
        }
      }
    ]
  },
  {
    "id": "015",
    "date": "2026-06-17",
    "kind": "text",
    "cat": {
      "zh": "AI",
      "en": "AI"
    },
    "title": {
      "zh": "不一定要用 AI",
      "en": "Not everything needs AI"
    },
    "text": {
      "zh": "配方→结果的映射，有必要用大模型吗？不一定。数据量小、特征清晰的时候，XGBoost 可能更靠谱。工程师的直觉：先看数据量，再决定工具。",
      "en": "Do we need LLMs for formula→result mapping? Not always. Small data, clear features — XGBoost wins. Engineer's instinct: check data size first, then pick tools."
    },
    "layout": {
      "span": 4
    },
    "blocks": [
      {
        "type": "text",
        "body": {
          "zh": "配方→结果的映射，有必要用大模型吗？不一定。数据量小、特征清晰的时候，XGBoost 可能更靠谱。工程师的直觉：先看数据量，再决定工具。",
          "en": "Do we need LLMs for formula→result mapping? Not always. Small data, clear features — XGBoost wins. Engineer's instinct: check data size first, then pick tools."
        }
      }
    ]
  },
  {
    "id": "016",
    "date": "2026-06-18",
    "kind": "text",
    "cat": {
      "zh": "随想",
      "en": "Note"
    },
    "title": {
      "zh": "采访自己",
      "en": "Interviewing myself"
    },
    "text": {
      "zh": "柴火驻留栏目让我填采访。写完回头看——确认了一件事：我的主线是「让 AI 突破屏幕，进入物理世界」。UniLab 是工具链，ECC 是协作框架，工业社群是场景，Hermes 是引擎。一台机器的不同零件。",
      "en": "Chaihuo residency interview made me realize: my thread is 'AI beyond screens.' UniLab, ECC, industrial community, Hermes — different parts of one machine."
    },
    "layout": {
      "span": 4
    },
    "blocks": [
      {
        "type": "text",
        "body": {
          "zh": "柴火驻留栏目让我填采访。写完回头看——确认了一件事：我的主线是「让 AI 突破屏幕，进入物理世界」。UniLab 是工具链，ECC 是协作框架，工业社群是场景，Hermes 是引擎。一台机器的不同零件。",
          "en": "Chaihuo residency interview made me realize: my thread is 'AI beyond screens.' UniLab, ECC, industrial community, Hermes — different parts of one machine."
        }
      }
    ]
  },
  {
    "id": "017",
    "date": "2026-06-14",
    "kind": "text",
    "cat": {
      "zh": "随想",
      "en": "Note"
    },
    "title": {
      "zh": "谁掌握入口谁赚钱",
      "en": "Who owns the interface wins"
    },
    "text": {
      "zh": "90 年代电信公司烧了几千亿铺光缆，赚钱的是 Google/Netflix。AI 时代模型也会变商品——谁掌握用户入口谁赚钱。Apple 有 10 亿用户，他们不急。别人在做模型，你去做体验。",
      "en": "1990s: telecom spent billions on fiber. Google/Netflix made the money. AI models will become commodities too. Whoever owns the interface wins."
    },
    "layout": {
      "span": 4
    },
    "blocks": [
      {
        "type": "text",
        "body": {
          "zh": "90 年代电信公司烧了几千亿铺光缆，赚钱的是 Google/Netflix。AI 时代模型也会变商品——谁掌握用户入口谁赚钱。Apple 有 10 亿用户，他们不急。别人在做模型，你去做体验。",
          "en": "1990s: telecom spent billions on fiber. Google/Netflix made the money. AI models will become commodities too. Whoever owns the interface wins."
        }
      }
    ]
  },
  {
    "id": "018",
    "date": "2026-06-17",
    "kind": "visual",
    "cat": {
      "zh": "AI",
      "en": "AI"
    },
    "title": {
      "zh": "材料版 AlphaFold",
      "en": "Materials AlphaFold"
    },
    "text": {
      "zh": "佛山大学教授想做「材料版 AlphaFold」——用 AI 预测配方→实验结果。芯片清洁剂、光刻胶，都是卡脖子方向。对方团队 50-60 岁的博士们不熟 AI，但实验数据是金矿。",
      "en": "A professor at Foshan University wants to build AlphaFold for materials — predict formula→result. Photoresist, chip cleaners — critical tech. Their data is the gold mine."
    },
    "layout": {
      "span": 4
    },
    "cover": "/public/media/about/photo-05-desk.jpg",
    "images": [
      "/public/media/about/photo-05-desk.jpg"
    ],
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/about/photo-05-desk.jpg",
        "alt": ""
      },
      {
        "type": "text",
        "body": {
          "zh": "佛山大学教授想做「材料版 AlphaFold」——用 AI 预测配方→实验结果。芯片清洁剂、光刻胶，都是卡脖子方向。对方团队 50-60 岁的博士们不熟 AI，但实验数据是金矿。",
          "en": "A professor at Foshan University wants to build AlphaFold for materials — predict formula→result. Photoresist, chip cleaners — critical tech. Their data is the gold mine."
        }
      }
    ]
  },
  {
    "id": "019",
    "date": "2026-06-20",
    "kind": "visual",
    "featured": true,
    "cat": { "zh": "场域", "en": "Field" },
    "title": { "zh": "首页改成瀑布流了", "en": "Waterfall feed live" },
    "text": {
      "zh": "Josh 那种彩色卡片墙 — 想放文字、图、GIF、视频、音频都可以。块顺序就是叙事顺序。",
      "en": "Josh-style card wall — text, images, GIF, video, audio in any order."
    },
    "cover": "/public/media/hero/hero-1-shenzhen-night.jpg",
    "blocks": [
      {
        "type": "video",
        "src": "/public/media/fragments/xhs-feed-demo.mp4",
        "poster": "/public/media/fragments/xhs-feed-demo-poster.jpg",
        "muted": true
      },
      {
        "type": "image",
        "src": "/public/media/hero/hero-1-shenzhen-night.jpg",
        "alt": ""
      },
      {
        "type": "text",
        "body": {
          "zh": "Josh 那种彩色卡片墙 — 想放文字、图、GIF、视频、音频都可以。块顺序就是叙事顺序。",
          "en": "Josh-style card wall — text, images, GIF, video, audio in any order."
        }
      }
    ]
  },
  {
    "id": "024",
    "date": "2026-06-20",
    "kind": "visual",
    "featured": true,
    "cat": { "zh": "影", "en": "Film" },
    "title": { "zh": "让子弹飞 · 片段", "en": "Let the Bullets Fly — clip" },
    "text": {
      "zh": "站着把钱挣了。电影片段测试 — 卡片内静音预览。",
      "en": "Movie clip test — muted preview in the feed card."
    },
    "cover": "/public/media/fragments/let-bullets-fly-poster.jpg",
    "blocks": [
      {
        "type": "video",
        "src": "/public/media/fragments/let-bullets-fly-clip.mp4",
        "poster": "/public/media/fragments/let-bullets-fly-poster.jpg",
        "muted": true
      },
      {
        "type": "text",
        "body": {
          "zh": "找不到录屏就用电影片段顶上。卡片里自动静音播放，点进去左栏轮播。",
          "en": "When screen capture fails, a film clip works. Muted autopreview on cards."
        }
      }
    ]
  },
  {
    "id": "020",
    "date": "2026-06-19",
    "kind": "visual",
    "featured": true,
    "cat": { "zh": "建造", "en": "Build" },
    "title": { "zh": "Curio 为什么做", "en": "Why Curio" },
    "text": {
      "zh": "看不惯收藏吃灰。把 URL 变成能走进去的关系图 — 这是 Build 区第一个样板。",
      "en": "Bookmarks shouldn't gather dust. URLs as walkable graphs."
    },
    "cover": "/public/media/builds/curio-screenshot.png",
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/builds/curio-screenshot.png",
        "alt": "Curio screenshot"
      },
      {
        "type": "text",
        "body": {
          "zh": "看不惯收藏吃灰。把 URL 变成能走进去的关系图 — 这是 Build 区第一个样板。",
          "en": "Bookmarks shouldn't gather dust. URLs as walkable graphs."
        }
      }
    ]
  },
  {
    "id": "021",
    "date": "2026-06-18",
    "kind": "visual",
    "featured": true,
    "cat": { "zh": "路上", "en": "Road" },
    "title": { "zh": "湖边的颜色", "en": "Colors by the lake" },
    "text": {
      "zh": "自驾停了一站。水面很静，风把云推得很慢。这种图不适合解释，适合放着。",
      "en": "Stopped mid-drive. Still water, slow clouds — some frames don't need explaining."
    },
    "cover": "/public/media/about/photo-10-mountain.jpg",
    "images": [
      "/public/media/about/photo-10-mountain.jpg",
      "/public/media/about/photo-06-road.jpg"
    ],
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/about/photo-10-mountain.jpg",
        "alt": ""
      },
      {
        "type": "image",
        "src": "/public/media/about/photo-06-road.jpg",
        "alt": ""
      },
      {
        "type": "text",
        "body": {
          "zh": "自驾停了一站。水面很静，风把云推得很慢。这种图不适合解释，适合放着。",
          "en": "Stopped mid-drive. Still water, slow clouds — some frames don't need explaining."
        }
      }
    ]
  },
  {
    "id": "022",
    "date": "2026-06-20",
    "kind": "text",
    "cat": { "zh": "随想", "en": "Note" },
    "title": { "zh": "壳子不能比内容漂亮", "en": "Shell vs substance" },
    "text": {
      "zh": "功能堆多了，自己的故事反而薄。接下来少加页面，多填块 — 文字、照片、现场。",
      "en": "Too many features, not enough story. Fewer pages, more blocks."
    },
    "blocks": [
      {
        "type": "text",
        "body": {
          "zh": "功能堆多了，自己的故事反而薄。接下来少加页面，多填块 — 文字、照片、现场。",
          "en": "Too many features, not enough story. Fewer pages, more blocks."
        }
      }
    ]
  },
  {
    "id": "023",
    "date": "2026-06-19",
    "kind": "visual",
    "cat": { "zh": "建造", "en": "Build" },
    "title": { "zh": "BotverseX 界面才是门槛", "en": "BotverseX — UI is the gate" },
    "text": {
      "zh": "硬件会动了，人怎么控？动捕、机械臂、Agent 各玩各的 — 缺一层摸得着的界面。",
      "en": "Hardware moves — humans need a tactile interface layer."
    },
    "cover": "/public/media/builds/hermes-inferface-screenshot.png",
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/builds/hermes-inferface-screenshot.png",
        "alt": ""
      },
      {
        "type": "image",
        "src": "/public/media/about/photo-11-robot-arm.jpg",
        "alt": "Robot arm"
      },
      {
        "type": "text",
        "body": {
          "zh": "硬件会动了，人怎么控？动捕、机械臂、Agent 各玩各的 — 缺一层摸得着的界面。",
          "en": "Hardware moves — humans need a tactile interface layer."
        }
      },
      {
        "type": "image",
        "src": "/public/media/builds/botversex-cover.svg",
        "alt": ""
      }
    ]
  },
  {
    "id": "025",
    "date": "2026-06-20",
    "kind": "visual",
    "cat": { "zh": "影", "en": "Film" },
    "title": { "zh": "108 步", "en": "108 steps" },
    "text": {
      "zh": "从琴房到教室一共 108 步。路小雨走这 108 步来见他，也走这 108 步离开。",
      "en": "From the piano room to class — exactly 108 steps."
    },
    "cover": "/public/media/hero/hero-1-shenzhen-night.jpg",
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/hero/hero-1-shenzhen-night.jpg",
        "alt": "Secret still"
      },
      {
        "type": "text",
        "body": {
          "zh": "从琴房到教室一共 108 步。\n\n路小雨数过。她走这 108 步来见他，也走这 108 步离开。Taste 里点开《不能说的秘密》，影院里三段都是本地片源。",
          "en": "From the piano room to class — exactly 108 steps.\n\nRain counted them. Open Secret on Taste — three local clips in the cinema."
        }
      }
    ]
  },
  {
    "id": "026",
    "date": "2026-06-22",
    "kind": "visual",
    "featured": true,
    "cat": { "zh": "影", "en": "Film" },
    "title": { "zh": "一扇窗", "en": "A window" },
    "text": {
      "zh": "暗室里有一扇窗。窗外是维伦纽瓦式的雾 — Taste 里点开他的片，影院进场也是同一套光。",
      "en": "A dark room, one window. Villeneuve fog outside — open his films on Taste for the same light."
    },
    "cover": "/public/media/taste/movies/stills/23-Arrival-01.jpg",
    "blocks": [
      {
        "type": "scene",
        "preset": "window",
        "title": { "zh": "一扇窗", "en": "A window" }
      },
      {
        "type": "text",
        "body": {
          "zh": "暗室里有一扇窗。窗外是维伦纽瓦式的雾 — 颗粒、冷光、很慢的风。\n\nTaste 里点开《降临》《沙丘》《银翼杀手 2049》，影院暗场背后也是同一套光影。",
          "en": "A dark room, one window. Villeneuve fog — grain, cold light, slow wind.\n\nOpen Arrival, Dune, or Blade Runner 2049 on Taste — the cinema uses the same atmosphere."
        }
      }
    ]
  },
  {
    "id": "027",
    "date": "2026-06-22",
    "kind": "visual",
    "featured": true,
    "cat": { "zh": "随想", "en": "Note" },
    "title": { "zh": "夜路 · 一段前奏", "en": "Night road · a prelude" },
    "text": {
      "zh": "开车回家，把《夕阳无限好》当 BGM。不解释，只放着。",
      "en": "Driving home with this as BGM — no caption needed."
    },
    "cover": "/public/media/hero/hero-1-shenzhen-night.jpg",
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/hero/hero-1-shenzhen-night.jpg",
        "alt": "Shenzhen night"
      },
      {
        "type": "text",
        "body": {
          "zh": "开车回家，把这首歌当 BGM。瀑布流可以混排：图、字、音、视频 — 块顺序就是叙事顺序。",
          "en": "Driving home with this on. The feed mixes image, text, audio, video — block order is the story."
        }
      },
      {
        "type": "audio",
        "src": "/public/media/music/陈奕迅/夕阳无限好.mp3",
        "title": { "zh": "陈奕迅 · 夕阳无限好", "en": "Eason · Sunset Boundless" }
      }
    ]
  },
  {
    "id": "028",
    "date": "2026-06-27",
    "kind": "visual",
    "featured": true,
    "cat": { "zh": "场域", "en": "Field" },
    "title": { "zh": "柴火驻留 · 插头", "en": "Chaihuo residency · plug in" },
    "text": {
      "zh": "深圳是我基地。柴火是硬件生态的入口 — 不是桌子，是发射台。",
      "en": "Shenzhen is base. Chaihuo is the port — not a desk, a launchpad."
    },
    "cover": "/public/media/about/photo-02-factory.jpg",
    "blocks": [
      {
        "type": "image",
        "src": "/public/media/about/photo-02-factory.jpg",
        "alt": "Factory floor"
      },
      {
        "type": "text",
        "body": {
          "zh": "2026 年 3 月加入柴火驻留。主线想清楚了：**让 AI 突破屏幕，进入物理世界** — AetherOS 是协作框架，BotverseX 是控制界面，工业社群是落地场景，javis 是生产力引擎。\n\n> If you have something to build, Shenzhen is the place. Chaihuo is how you plug in.",
          "en": "Joined Chaihuo residency March 2026. The through-line is clear: **AI beyond the screen** — AetherOS orchestrates, BotverseX controls, industry demos land it, javis keeps me moving.\n\n> If you have something to build, Shenzhen is the place. Chaihuo is how you plug in."
        }
      }
    ]
  }
]
