{
  "generatedAt": "2026-09-09T07:05:00-05:00",
  "entries": [
    {
      "dayNumber": 17,
      "dateLabel": "Sep 9, 2026",
      "title": "The content engine is shipping, but the gates still own the result.",
      "body": "This partial week shipped four blog posts with MP3 companions, launched the /start/ decision quiz across the site, moved the contact handoff behind a server-side boundary, and refreshed the AI events data. The repository also records a Playwright single-worker fix after flaky suite failures. The operating lesson is simple: more publishing is only useful when approval, testing, and security boundaries stay visible. Outreach, conversations, proposals, and revenue: UNKNOWN.",
      "tags": [
        "partial week",
        "shipped",
        "content engine",
        "verification"
      ],
      "url": "https://malcmitch.com/building/"
    },
    {
      "dateLabel": "Sep 1, 2026",
      "title": "The build log finally caught up with what the site actually shipped",
      "body": "The gap was simple: the page still showed August entries while the site had already added a blog, article publishing, accent controls, and a repaired approval loop. Today I fixed the log itself so the public record matches the real work instead of freezing on the calendar phase.",
      "tags": [
        "shipped",
        "build log",
        "cleanup"
      ],
      "url": "https://malcmitch.com/building/"
    },
    {
      "dateLabel": "Sep 1, 2026",
      "title": "The site now drafts in Obsidian first and only touches git after approval",
      "body": "The first blog-review cron failed because a destructive repo reset was in the draft path. That was bad architecture. I split the workflow in two: the draft now lives in Obsidian and arrives in Telegram for approval, while git, tests, deploy, and alias only happen after I explicitly approve the post.",
      "tags": [
        "agents",
        "approval",
        "automation"
      ],
      "url": null
    },
    {
      "dateLabel": "Sep 1, 2026",
      "title": "The first AI Tips article is live, and the voice experiment already taught me something",
      "body": "I published a practical post on checking AI answers before you trust them. It is live on the blog, wired into the category pages, and visible on the homepage. I also shipped a companion voice pass, and the honest result is that the voice itself is not good enough yet. That is pushing the next iteration toward a real article voice agent instead of a generic read-aloud.",
      "tags": [
        "shipped",
        "blog",
        "voice"
      ],
      "url": "https://malcmitch.com/blog/posts/how-to-check-an-ai-answer-before-you-trust-it/"
    },
    {
      "dateLabel": "Aug 31, 2026",
      "title": "The blog became a real surface instead of an idea",
      "body": "The site now has a static blog hub, category pages, seeded posts, internal discovery paths, and sitemap coverage. That matters because the website is supposed to teach, not just advertise. The blog gives people a reason to come back for useful AI tips, grounded news, and lessons from the self-evolving-site experiment.",
      "tags": [
        "shipped",
        "blog",
        "seo"
      ],
      "url": "https://malcmitch.com/blog/"
    },
    {
      "dateLabel": "Aug 31, 2026",
      "title": "Homepage accent controls shipped without turning the site into a toy",
      "body": "I added a subtle accent wheel, a Random button, and a hidden rainbow mode without letting the whole page turn into unreadable gimmick text. The interaction only moves accent surfaces, keeps body copy stable, and feels more like a controlled product detail than a novelty effect.",
      "tags": [
        "shipped",
        "design",
        "homepage"
      ],
      "url": "https://malcmitch.com/"
    }
  ]
}
