<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title><![CDATA[Stumbling Dev Log]]></title>
    <link>https://blog.juniverse.app/en/</link>
    <description><![CDATA[A solo developer's log of building side projects with Claude Code: the missteps, the outages, and the design calls.]]></description>
    <language>en-us</language>
    <atom:link href="https://blog.juniverse.app/en/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title><![CDATA[A PR That Verified Zero Missing Rows Stopped Analysis for Three Hours With One Comment Line]]></title>
      <link>https://blog.juniverse.app/en/blog/ep56-comment-placeholder-stopped-analysis/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep56-comment-placeholder-stopped-analysis/</guid>
      <description><![CDATA[The PR for regenerating 260,000 summaries accounted for locks, rolling deploys and every stray row. One format placeholder inside a comment in the last commit broke the SQL, and all four tests still passed]]></description>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[go]]></category>
      <category><![CDATA[sql]]></category>
      <category><![CDATA[incident-response]]></category>
      <category><![CDATA[testing]]></category>
    </item>
    <item>
      <title><![CDATA[What I Checked When Search Console Said It Didn't Know My Disclosure Pages]]></title>
      <link>https://blog.juniverse.app/en/blog/ep57-search-console-unknown-urls/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep57-search-console-unknown-urls/</guid>
      <description><![CDATA[Two days that started with 18 "blocked by robots.txt" reports in Naver Search Advisor and went on to Google Search Console sample inspections and measuring how thin each page was]]></description>
      <pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[seo]]></category>
      <category><![CDATA[search-console]]></category>
      <category><![CDATA[robots]]></category>
      <category><![CDATA[nextjs]]></category>
    </item>
    <item>
      <title><![CDATA[One Empty Array Turned Hitting the Limit Into an Ordinary Failure]]></title>
      <link>https://blog.juniverse.app/en/blog/ep55-empty-errors-buried-the-limit/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep55-empty-errors-buried-the-limit/</guid>
      <description><![CDATA[For two hours before dawn, jobs failed across every project. The only message left was one line with the cause slot empty. And fixing it meant a number in a disclosure body could trigger a global pause]]></description>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[go]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[incident-response]]></category>
      <category><![CDATA[error-handling]]></category>
    </item>
    <item>
      <title><![CDATA[The Prompt Did Not Do It, Splitting the Stages Did]]></title>
      <link>https://blog.juniverse.app/en/blog/ep52-two-stage-summary/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep52-two-stage-summary/</guid>
      <description><![CDATA[I tried to fix thin summaries with the prompt and made them worse. Separating number extraction from sentence writing raised recall 18 points and presence 2.6 points together]]></description>
      <pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[evaluation]]></category>
      <category><![CDATA[gemma]]></category>
      <category><![CDATA[prompting]]></category>
      <category><![CDATA[local-llm]]></category>
    </item>
    <item>
      <title><![CDATA[I Turned On Auto-Publishing and Four Things Surfaced in Three Days]]></title>
      <link>https://blog.juniverse.app/en/blog/ep54-autopublish-exposed-four/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep54-autopublish-exposed-four/</guid>
      <description><![CDATA[None of them were visible while a human sent each issue by hand. A rerun pinned an old response to a new list, a slug got rebuilt and broke the links, a shell that only filled the schema reached the page, and one source took nine of twenty-five slots]]></description>
      <pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[automation]]></category>
      <category><![CDATA[idempotency]]></category>
      <category><![CDATA[pipeline]]></category>
    </item>
    <item>
      <title><![CDATA[I Cut the Input to a Third, and What I Thought I Had Fixed Split in Two]]></title>
      <link>https://blog.juniverse.app/en/blog/ep53-length-vs-structure/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep53-length-vs-structure/</guid>
      <description><![CDATA[Two-stage processing fixed both numeric accuracy and omission. Measuring again on short inputs showed one was a length problem and the other was a structure problem]]></description>
      <pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[evaluation]]></category>
      <category><![CDATA[gemma]]></category>
      <category><![CDATA[context]]></category>
      <category><![CDATA[local-llm]]></category>
    </item>
    <item>
      <title><![CDATA[I Measured Four Models on 200 Documents, and What I Did Not Measure Overturned the Result]]></title>
      <link>https://blog.juniverse.app/en/blog/ep51-eval-blind-spot/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep51-eval-blind-spot/</guid>
      <description><![CDATA[On numeric fidelity the challenger won. Then I found that Korean number spacing was broken in all 200 outputs]]></description>
      <pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[evaluation]]></category>
      <category><![CDATA[gemma]]></category>
      <category><![CDATA[qwen]]></category>
      <category><![CDATA[local-llm]]></category>
    </item>
    <item>
      <title><![CDATA[It Was Not AI That Came, It Was Only ChatGPT]]></title>
      <link>https://blog.juniverse.app/en/blog/ep48-ai-was-just-chatgpt/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep48-ai-was-just-chatgpt/</guid>
      <description><![CDATA[Memory and traffic jumped and analytics showed nothing. Counting the server log by User-Agent, 11,321 of 15,001 requests over three hours were one backlink-tool bot. After blocking seven bots I looked at analytics again, and the "AI Assistant, 53 sessions" bucket turned out to be one company]]></description>
      <pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[seo]]></category>
      <category><![CDATA[crawlers]]></category>
      <category><![CDATA[robots]]></category>
      <category><![CDATA[measurement]]></category>
      <category><![CDATA[testing]]></category>
    </item>
    <item>
      <title><![CDATA[The Path I Blocked as Worthless for Indexing Was My Top Referrer]]></title>
      <link>https://blog.juniverse.app/en/blog/ep49-blocked-my-top-channel/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep49-blocked-my-top-channel/</guid>
      <description><![CDATA[Having just blocked crawlers on the sibling service, I did the same here. I blocked /api/ on the grounds that JSON has no indexing value, except the RSS feed I submitted to Naver lives under it, and Naver is the top non-direct referrer. The home page body comes from there too. I reverted 42 minutes later]]></description>
      <pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[seo]]></category>
      <category><![CDATA[robots]]></category>
      <category><![CDATA[next.js]]></category>
      <category><![CDATA[code-review]]></category>
      <category><![CDATA[testing]]></category>
    </item>
    <item>
      <title><![CDATA[The Replication Job Was Recording "No Upstream" as Success]]></title>
      <link>https://blog.juniverse.app/en/blog/ep50-no-upstream-logged-as-success/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep50-no-upstream-logged-as-success/</guid>
      <description><![CDATA[I asked for a cleanup of two months of data and found the price history had stopped on August 24. An upstream password rejection started it, and then one env var missing from the cutover turned a loud failure into a quiet success. Also, the safety guards passed 518 times in two months]]></description>
      <pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[quant]]></category>
      <category><![CDATA[postgres]]></category>
      <category><![CDATA[launchd]]></category>
      <category><![CDATA[operations]]></category>
      <category><![CDATA[measurement]]></category>
    </item>
    <item>
      <title><![CDATA[I Tightened Parameters One at a Time, Got Breached Twice, and Stopped Tightening]]></title>
      <link>https://blog.juniverse.app/en/blog/ep47-tightening-params-lost-twice/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep47-tightening-params-lost-twice/</guid>
      <description><![CDATA[I went in to add a shape check to a sibling route and found that was not the point. The cache key was the whole RequestURI, so every way of spelling the same response became its own entry. I gave up hit rate and set a 64MB total ceiling, and then review found three more holes in the ceiling itself]]></description>
      <pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[go]]></category>
      <category><![CDATA[cache]]></category>
      <category><![CDATA[memory]]></category>
      <category><![CDATA[concurrency]]></category>
      <category><![CDATA[code-review]]></category>
    </item>
    <item>
      <title><![CDATA[Failing to Reproduce It Locally Did Not Mean There Was No Bug]]></title>
      <link>https://blog.juniverse.app/en/blog/ep46-local-repro-is-not-evidence/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep46-local-repro-is-not-evidence/</guid>
      <description><![CDATA[After the move to Railway, the web frontend climbed from 226MB to 833MB in a straight line over 26 hours. It was not render load, and the sibling service on the same stack was fine. I hammered it with 3,000 requests on my Mac, could not reproduce it, and wrote down "not reproducible by request volume." Then I measured again inside a container and got 388KB per request. The platform had been hiding the signal]]></description>
      <pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[next.js]]></category>
      <category><![CDATA[sentry]]></category>
      <category><![CDATA[railway]]></category>
      <category><![CDATA[memory]]></category>
      <category><![CDATA[measurement]]></category>
    </item>
    <item>
      <title><![CDATA[I Stopped Judging Runaways Per Job]]></title>
      <link>https://blog.juniverse.app/en/blog/ep41-stop-judging-runaway-per-job/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep41-stop-judging-runaway-per-job/</guid>
      <description><![CDATA[I built a per-call cost cap, raised it, turned it into an alert, and finally removed it. After fixing the same safeguard four times in four days, all that's left is the aggregate gate and a timeout. "Didn't I say just alert me?"]]></description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[cost]]></category>
      <category><![CDATA[design]]></category>
      <category><![CDATA[go]]></category>
    </item>
    <item>
      <title><![CDATA[I Left Cloudflare to Get Faster]]></title>
      <link>https://blog.juniverse.app/en/blog/ep43-left-cloudflare-to-get-faster/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep43-left-cloudflare-to-get-faster/</guid>
      <description><![CDATA[I asked whether to move the whole backend to Cloudflare. Before moving, I measured, and a page that never calls the backend and a static PNG were both the same 0.47 seconds. The free plan was killing 1 in 5 requests, and the conclusion was the exact opposite direction]]></description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[cloudflare]]></category>
      <category><![CDATA[railway]]></category>
      <category><![CDATA[nextjs]]></category>
      <category><![CDATA[performance]]></category>
      <category><![CDATA[infra]]></category>
    </item>
    <item>
      <title><![CDATA[I Opened Up Effort and Effort Was Empty]]></title>
      <link>https://blog.juniverse.app/en/blog/ep44-effort-was-empty/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep44-effort-was-empty/</guid>
      <description><![CDATA[I added per-job model and effort selection to the shared queue. When I had it do a self-review, the agent measured with 9 scratch sessions and found that the thinking I had turned off five days earlier was neutralizing effort. Why I split the requested value and the actual value into two columns, and how after deploy the docs and production disagreed in five places]]></description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[go]]></category>
      <category><![CDATA[postgres]]></category>
      <category><![CDATA[measurement]]></category>
      <category><![CDATA[docs]]></category>
    </item>
    <item>
      <title><![CDATA[I Built the Non-LLM Preprocessing First: 150 Items Down to 39]]></title>
      <link>https://blog.juniverse.app/en/blog/ep45-rules-before-llm/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep45-rules-before-llm/</guid>
      <description><![CDATA[The collector for the newly built AI-news digest dumped 248 items from three days. Rule-based preprocessing that started from "I can't use the LLM without limit," rejecting embeddings, and the one regex character that was throwing away every Korean title as a duplicate]]></description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[typescript]]></category>
      <category><![CDATA[nlp]]></category>
      <category><![CDATA[cost]]></category>
      <category><![CDATA[side-project]]></category>
    </item>
    <item>
      <title><![CDATA[I Redefined the Go/No-Go Gate]]></title>
      <link>https://blog.juniverse.app/en/blog/ep42-survival-gate-redefined/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep42-survival-gate-redefined/</guid>
      <description><![CDATA[For four months I fixed only Google indexing, but the traffic was coming from Naver, and 4,300 pages indexed on Naver produced 27 clicks. I threw out the old gate that had come up unmeasurable three times in a row and pinned two judgment dates, November 15 and January 10, on a GA4 non-direct session baseline of 54]]></description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[seo]]></category>
      <category><![CDATA[analytics]]></category>
      <category><![CDATA[solo-dev]]></category>
      <category><![CDATA[decision-making]]></category>
    </item>
    <item>
      <title><![CDATA[I Turned Thinking Off]]></title>
      <link>https://blog.juniverse.app/en/blog/ep37-thinking-off/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep37-thinking-off/</guid>
      <description><![CDATA[85.8% of the summary job's output tokens were thinking. One environment variable turned it off: output −85%, 4.5x faster, schema 10/10, and the summaries actually had more numbers. And why the one line that turns it off could have killed auth for three projects at once]]></description>
      <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[cost]]></category>
      <category><![CDATA[go]]></category>
      <category><![CDATA[measurement]]></category>
    </item>
    <item>
      <title><![CDATA[Three Throttles That Keep a 640K-Row Backfill Behind Live Traffic]]></title>
      <link>https://blog.juniverse.app/en/blog/ep40-archive-backfill-throttles/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep40-archive-backfill-throttles/</guid>
      <description><![CDATA[Filling the 2020–2025 disclosure archive means running for months inside the external API's daily quota and the LLM's throughput. I split collection from analysis, put the archive behind new disclosures, and built a throttle that stops every worker on a rate-limit error. The completion estimate changed four times in five days]]></description>
      <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[backfill]]></category>
      <category><![CDATA[rate-limit]]></category>
      <category><![CDATA[go]]></category>
      <category><![CDATA[postgres]]></category>
      <category><![CDATA[operations]]></category>
    </item>
    <item>
      <title><![CDATA[When the Constraint Changed From Money to Quota, I Needed a Queue]]></title>
      <link>https://blog.juniverse.app/en/blog/ep36-shared-llm-queue/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep36-shared-llm-queue/</guid>
      <description><![CDATA[I shut down self-hosted GPU serving and switched to the subscription CLI, and the shared layer I had nailed down in April as "don't build it," this time I built.]]></description>
      <pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[architecture]]></category>
      <category><![CDATA[railway]]></category>
      <category><![CDATA[cost]]></category>
    </item>
    <item>
      <title><![CDATA[Two Silent Traps in the Dev Environment]]></title>
      <link>https://blog.juniverse.app/en/blog/ep39-two-silent-dev-traps/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep39-two-silent-dev-traps/</guid>
      <description><![CDATA[Four times in one day I reread the code because "the fix isn't taking." The culprit wasn't the code but the .next directory shared by dev and build, and a two-layer cache that kept serving old responses after I fixed the local DB. A trap the user never once saw]]></description>
      <pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[nextjs]]></category>
      <category><![CDATA[go]]></category>
      <category><![CDATA[caching]]></category>
      <category><![CDATA[dev-environment]]></category>
      <category><![CDATA[debugging]]></category>
    </item>
    <item>
      <title><![CDATA[I Rebuilt the Desktop Layout Five Times in Four Days]]></title>
      <link>https://blog.juniverse.app/en/blog/ep38-desktop-redesign-five-times/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep38-desktop-redesign-five-times/</guid>
      <description><![CDATA[A service that stayed mobile-only for four months turned out to get 96% of its search traffic from desktop. A record of measuring the dead whitespace, adding a rail, throwing away the two-column cards after 6 hours, and rewriting everything from a design handoff]]></description>
      <pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[ui-design]]></category>
      <category><![CDATA[frontend]]></category>
      <category><![CDATA[responsive]]></category>
      <category><![CDATA[measurement]]></category>
    </item>
    <item>
      <title><![CDATA[I Fed It Structured Data Instead of Raw Text]]></title>
      <link>https://blog.juniverse.app/en/blog/ep35-structured-data-not-raw-text/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep35-structured-data-not-raw-text/</guid>
      <description><![CDATA[Only 15% of periodic-report text was being read; it ate 55% of LLM input and the result was cover-page restatements. Swapping raw text for six confirmed figures from the disclosure API cut input to 1/40 and put numbers in the summaries]]></description>
      <pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[prompting]]></category>
      <category><![CDATA[cost]]></category>
      <category><![CDATA[data-pipeline]]></category>
    </item>
    <item>
      <title><![CDATA[Who Gets Hurt If It Dies — a Week of Reworking Structure]]></title>
      <link>https://blog.juniverse.app/en/blog/ep25-split-rewrite-teardown/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep25-split-rewrite-teardown/</guid>
      <description><![CDATA[Splitting the trading bot into trader/desk processes, pre-commit document hygiene for a zero-lines-of-code rewrite project, and the full teardown of a 49-day-old launchd resident setup]]></description>
      <pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[adr]]></category>
      <category><![CDATA[launchd]]></category>
      <category><![CDATA[process-split]]></category>
      <category><![CDATA[open-source]]></category>
    </item>
    <item>
      <title><![CDATA[Closing the Books on Four Months of Workflow with 337MB of Session Logs]]></title>
      <link>https://blog.juniverse.app/en/blog/ep34-workflow-retrospective/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep34-workflow-retrospective/</guid>
      <description><![CDATA[Wrapping up the series — I had Claude analyze four months of Claude Code session records wholesale to see what my workflow really looks like, and learned those records vanish in 30 days under default settings.]]></description>
      <pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[workflow]]></category>
      <category><![CDATA[solo-dev]]></category>
      <category><![CDATA[retrospective]]></category>
    </item>
    <item>
      <title><![CDATA[Measured Separately Is Not Measured Together, and 3% Utilization]]></title>
      <link>https://blog.juniverse.app/en/blog/ep33-unmeasured-combination/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep33-unmeasured-combination/</guid>
      <description><![CDATA[Measured thinking mode on an offline set, concluded no effect, then it reversed on a multi-step set. Meanwhile a never-measured combination went into production. The max_tokens cap was a breaker, not a budget, and after four months of tuning, the hardware's utilization was 3%]]></description>
      <pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[vllm]]></category>
      <category><![CDATA[gemma]]></category>
      <category><![CDATA[evaluation]]></category>
      <category><![CDATA[local-llm]]></category>
      <category><![CDATA[retrospective]]></category>
    </item>
    <item>
      <title><![CDATA[The Grader Was Wrong More Often Than the Model]]></title>
      <link>https://blog.juniverse.app/en/blog/ep32-grader-wrong-more-than-model/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep32-grader-wrong-more-than-model/</guid>
      <description><![CDATA[Over 800 validation runs while I slept; the morning failure list had 8+ items that were measurement-tool defects. Fixed the tools, then 1,000 config experiments on the real defects that remained. Three cleared, four walls]]></description>
      <pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[vllm]]></category>
      <category><![CDATA[gemma]]></category>
      <category><![CDATA[evaluation]]></category>
      <category><![CDATA[local-llm]]></category>
      <category><![CDATA[testing]]></category>
    </item>
    <item>
      <title><![CDATA[I Deleted the Gateway and Fixed the Wiring]]></title>
      <link>https://blog.juniverse.app/en/blog/ep31-gateway-removal-wiring/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep31-gateway-removal-wiring/</guid>
      <description><![CDATA[The gateway I set up two days earlier was attaching stock-market open days even to cooking questions. I repeated the exact pattern I was stopped from in April, and once it was gone, most of the chat quality problems were silently ignored settings, not the model]]></description>
      <pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[vllm]]></category>
      <category><![CDATA[open-webui]]></category>
      <category><![CDATA[architecture]]></category>
      <category><![CDATA[local-llm]]></category>
    </item>
    <item>
      <title><![CDATA[I Decided to Re-measure the Hardware from Scratch]]></title>
      <link>https://blog.juniverse.app/en/blog/ep30-remeasure-from-scratch/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep30-remeasure-from-scratch/</guid>
      <description><![CDATA[An orphan number called sm_121, a 6:0 SGLang win that flipped once speculative decoding was on, and a public-benchmark leader losing on my own labeled data. A day re-measuring the DGX Spark at three layers: chip, engine, model]]></description>
      <pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[vllm]]></category>
      <category><![CDATA[sglang]]></category>
      <category><![CDATA[gemma]]></category>
      <category><![CDATA[qwen]]></category>
      <category><![CDATA[local-llm]]></category>
      <category><![CDATA[evaluation]]></category>
    </item>
    <item>
      <title><![CDATA[One Division Eliminated Half the Model Candidates]]></title>
      <link>https://blog.juniverse.app/en/blog/ep27-bandwidth-division/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep27-bandwidth-division/</guid>
      <description><![CDATA[Measured DGX Spark memory bandwidth at 231GB/s. Divide by active parameters and you get the decode ceiling; every dense model was eliminated by arithmetic alone]]></description>
      <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[gpu]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[local-llm]]></category>
      <category><![CDATA[vllm]]></category>
    </item>
    <item>
      <title><![CDATA[I Trusted the Community and Halved My Decode Speed]]></title>
      <link>https://blog.juniverse.app/en/blog/ep29-mtp-multimodal-myth/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep29-mtp-multimodal-myth/</guid>
      <description><![CDATA[Believing "speculative decoding and multimodal are incompatible," I turned off MTP and 42.8t/s dropped to 19.4t/s. Reading the source, the code only warns and proceeds, and meanwhile another trap had been armed]]></description>
      <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[vllm]]></category>
      <category><![CDATA[local-llm]]></category>
      <category><![CDATA[debugging]]></category>
      <category><![CDATA[gemma]]></category>
    </item>
    <item>
      <title><![CDATA[I Built the Resume Mechanism First, Then Went to Bed]]></title>
      <link>https://blog.juniverse.app/en/blog/ep23-overnight-research/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep23-overnight-research/</guid>
      <description><![CDATA[Delegating overnight research that gets back up on its own after hitting the token limit, and a post-hoc audit of April's idea scores]]></description>
      <pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[delegation]]></category>
      <category><![CDATA[autonomous-research]]></category>
      <category><![CDATA[idea-validation]]></category>
    </item>
    <item>
      <title><![CDATA[The Local LLM That Read "6 Shares" as 0.06]]></title>
      <link>https://blog.juniverse.app/en/blog/ep24-llm-migration-repro/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep24-llm-migration-repro/</guid>
      <description><![CDATA[Moving the trading bot's daily LLM roles to a self-hosted model, and pinning down the misreading bug with a byte-exact DB reproduction and A/B measurements]]></description>
      <pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[vllm]]></category>
      <category><![CDATA[self-hosting]]></category>
      <category><![CDATA[debugging]]></category>
    </item>
    <item>
      <title><![CDATA[Settings That Are Bad Alone and Good Together]]></title>
      <link>https://blog.juniverse.app/en/blog/ep28-priority-plus-chunk/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep28-priority-plus-chunk/</guid>
      <description><![CDATA[Shrinking chunked prefill alone made tail latency worse; combined with priority scheduling, worst-case TTFT dropped from 51.8s to 2.0s. A night of rejecting four community recommendations by measurement]]></description>
      <pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[vllm]]></category>
      <category><![CDATA[local-llm]]></category>
      <category><![CDATA[performance]]></category>
      <category><![CDATA[benchmark]]></category>
    </item>
    <item>
      <title><![CDATA[The Daemon Is Alive, Only the Login Is Dead]]></title>
      <link>https://blog.juniverse.app/en/blog/ep22-oauth-infra-bot/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep22-oauth-infra-bot/</guid>
      <description><![CDATA[Resident daemons dying silently when OAuth expired every month — after a token detour, I laid down a safety net of health checks and a Telegram bot.]]></description>
      <pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[launchd]]></category>
      <category><![CDATA[telegram]]></category>
      <category><![CDATA[oauth]]></category>
      <category><![CDATA[remote-control]]></category>
    </item>
    <item>
      <title><![CDATA[I Lost 2.5 Months of Logs in My First Hour Back]]></title>
      <link>https://blog.juniverse.app/en/blog/ep26-log-loss-on-return/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep26-log-loss-on-return/</guid>
      <description><![CDATA[In the first DGX Spark session in two months, "check the logs" turned into a container recreate and 334MB vanished. What survived was 14 days that another system happened to be watching]]></description>
      <pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[vllm]]></category>
      <category><![CDATA[local-llm]]></category>
      <category><![CDATA[incident-response]]></category>
      <category><![CDATA[monitoring]]></category>
    </item>
    <item>
      <title><![CDATA[Claude Proposes, Claude Cross-Examines]]></title>
      <link>https://blog.juniverse.app/en/blog/ep21-claude-audits-claude/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep21-claude-audits-claude/</guid>
      <description><![CDATA[Wiring headless Claude into the trading bot's day by role — news collection, the morning meeting, cross-examination, an evening self-audit, and a different failure default for each role.]]></description>
      <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[algo-trading]]></category>
      <category><![CDATA[multi-agent]]></category>
      <category><![CDATA[prompting]]></category>
    </item>
    <item>
      <title><![CDATA[The Bot That Tried to Trade on Constitution Day]]></title>
      <link>https://blog.juniverse.app/en/blog/ep19-holiday-calendar/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep19-holiday-calendar/</guid>
      <description><![CDATA[Two days spent putting a broker-API validation layer on top of a hand-made calendar, after a missing market holiday caused an incident.]]></description>
      <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[trading-bot]]></category>
      <category><![CDATA[incident]]></category>
      <category><![CDATA[holiday-calendar]]></category>
      <category><![CDATA[validation-layer]]></category>
    </item>
    <item>
      <title><![CDATA[A Scorecard Instead of a Band]]></title>
      <link>https://blog.juniverse.app/en/blog/ep20-ui-by-data/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep20-ui-by-data/</guid>
      <description><![CDATA[After five real-data mockups I dropped the prediction band that covered half the screen, split it into a today view and an accuracy view, and shipped with 220 days of retroactive scoring.]]></description>
      <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[ui-design]]></category>
      <category><![CDATA[data-visualization]]></category>
      <category><![CDATA[backtest]]></category>
    </item>
    <item>
      <title><![CDATA[From a One-Line Question to a Standalone Project]]></title>
      <link>https://blog.juniverse.app/en/blog/ep18-project-spinoff/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep18-project-spinoff/</guid>
      <description><![CDATA[A side question in the trading bot session became a separate project within a day, and the first scoring revealed that I was the one who ordered the harmful feature]]></description>
      <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[meta-prompting]]></category>
      <category><![CDATA[project-split]]></category>
      <category><![CDATA[side-project]]></category>
    </item>
    <item>
      <title><![CDATA[I Handed the AI a Browser and It Came Back Having Unblocked Itself]]></title>
      <link>https://blog.juniverse.app/en/blog/ep17-browser-driving/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep17-browser-driving/</guid>
      <description><![CDATA[A bot-blocking toggle that would not budge in the dashboard; Claude drove the browser itself, uncovered the master-rule structure, and rebuilt the config]]></description>
      <pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[browser-automation]]></category>
      <category><![CDATA[cloudflare]]></category>
      <category><![CDATA[seo]]></category>
    </item>
    <item>
      <title><![CDATA[The Lie Called "5 Approved, 0 Rejected"]]></title>
      <link>https://blog.juniverse.app/en/blog/ep16-first-trade-bug/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep16-first-trade-bug/</guid>
      <description><![CDATA[A post-mortem of the first unattended trading day, when all five orders were rejected over a single decimal point and the alert reported success.]]></description>
      <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[algo-trading]]></category>
      <category><![CDATA[debugging]]></category>
      <category><![CDATA[backtest]]></category>
    </item>
    <item>
      <title><![CDATA[Rebuilding a Principle One Layer Down]]></title>
      <link>https://blog.juniverse.app/en/blog/ep15-adr-principle-rework/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep15-adr-principle-rework/</guid>
      <description><![CDATA[An honest return-rate answer from the AI collided with the trading bot's rule number one, and instead of scrapping it I redefined it one layer down.]]></description>
      <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[adr]]></category>
      <category><![CDATA[algo-trading]]></category>
      <category><![CDATA[design]]></category>
    </item>
    <item>
      <title><![CDATA[Claude Code on launchd, and a 401 That Was 13 Days Old]]></title>
      <link>https://blog.juniverse.app/en/blog/ep13-claude-daemon-setup/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep13-claude-daemon-setup/</guid>
      <description><![CDATA[Forty minutes setting up Claude Code remote-control as a launchd resident on an always-on Mac mini, running into an expired-token 401, a TUI log bomb, and a race in the verification script, one after another.]]></description>
      <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[launchd]]></category>
      <category><![CDATA[macos]]></category>
      <category><![CDATA[remote-control]]></category>
      <category><![CDATA[oauth]]></category>
    </item>
    <item>
      <title><![CDATA[A No-Implementation Kickoff and a 12-Question Interview]]></title>
      <link>https://blog.juniverse.app/en/blog/ep14-design-first-kickoff/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep14-design-first-kickoff/</guid>
      <description><![CDATA[Notes on a kickoff prompt that banned writing implementation code and demanded an interview first, at the start of designing the trading bot.]]></description>
      <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[design-first]]></category>
      <category><![CDATA[kickoff-prompt]]></category>
      <category><![CDATA[interview]]></category>
    </item>
    <item>
      <title><![CDATA[From Error Alert to a Fix PR From My Phone: Building an On-Call Bot in a Day]]></title>
      <link>https://blog.juniverse.app/en/blog/ep11-oncall-bot/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep11-oncall-bot/</guid>
      <description><![CDATA[I built a homemade Telegram bot and scrapped it the same day. A setup that fixes server errors from my phone without opening a single inbound port.]]></description>
      <pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[sentry]]></category>
      <category><![CDATA[telegram]]></category>
      <category><![CDATA[on-call]]></category>
      <category><![CDATA[automation]]></category>
    </item>
    <item>
      <title><![CDATA[I Got Stopped From Building One More Thing in Front of the Server]]></title>
      <link>https://blog.juniverse.app/en/blog/ep10-no-wrapper/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep10-no-wrapper/</guid>
      <description><![CDATA[I cut off the creation of a general-purpose endpoint. And while I was at it, I decided to shut down a whole project.]]></description>
      <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[architecture]]></category>
      <category><![CDATA[rag]]></category>
    </item>
    <item>
      <title><![CDATA[Shrinking the Prompt Made It 55% Faster, and Lost What Actually Mattered]]></title>
      <link>https://blog.juniverse.app/en/blog/ep09-compression-cost/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep09-compression-cost/</guid>
      <description><![CDATA[The compression that produced −55% was throwing away the core of the domain. A story about a metric I wasn't measuring collapsing.]]></description>
      <pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[prompting]]></category>
      <category><![CDATA[evaluation]]></category>
      <category><![CDATA[gemma]]></category>
      <category><![CDATA[local-llm]]></category>
    </item>
    <item>
      <title><![CDATA[If AI Rewrites It, Can I Just Switch Stacks? Three Switches in 12 Days]]></title>
      <link>https://blog.juniverse.app/en/blog/ep05-stack-migration/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep05-stack-migration/</guid>
      <description><![CDATA[Over 12 days I moved the backend from Spring Boot to Go and switched mobile stacks three times, to check whether the switching cost is really zero]]></description>
      <pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[go]]></category>
      <category><![CDATA[flutter]]></category>
      <category><![CDATA[react-native]]></category>
      <category><![CDATA[stack-migration]]></category>
    </item>
    <item>
      <title><![CDATA[Five Days of Fine-Tuning Lost to a 108-Character Prompt]]></title>
      <link>https://blog.juniverse.app/en/blog/ep08-finetune-vs-prompt/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep08-finetune-vs-prompt/</guid>
      <description><![CDATA[I spent five days on LoRA for Gemma 4 26B-A4B and it barely differed from no tuning at all. What happened when I attacked the same task with prompt compression instead.]]></description>
      <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[fine-tuning]]></category>
      <category><![CDATA[lora]]></category>
      <category><![CDATA[gemma]]></category>
      <category><![CDATA[prompting]]></category>
      <category><![CDATA[local-llm]]></category>
    </item>
    <item>
      <title><![CDATA[I Wiped Every Docker Volume: The AI Warned Me, and I Deleted It Anyway]]></title>
      <link>https://blog.juniverse.app/en/blog/ep06-docker-volume-loss/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep06-docker-volume-loss/</guid>
      <description><![CDATA[After deleting Docker.raw and losing every local postgres, I built shared infrastructure instead of trying to recover]]></description>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[docker]]></category>
      <category><![CDATA[postgres]]></category>
      <category><![CDATA[local-infra]]></category>
      <category><![CDATA[incident-response]]></category>
    </item>
    <item>
      <title><![CDATA[I Set a Container Memory Limit and the Whole Machine Froze Anyway]]></title>
      <link>https://blog.juniverse.app/en/blog/ep07-unified-memory-oom/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep07-unified-memory-oom/</guid>
      <description><![CDATA[A 15-hour incident where Docker memory limits did nothing on a DGX Spark and a 26B LoRA run froze the whole machine, plus the two-layer defense I built]]></description>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[incident-response]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[gpu]]></category>
      <category><![CDATA[fine-tuning]]></category>
      <category><![CDATA[monitoring]]></category>
    </item>
    <item>
      <title><![CDATA[Two AIs Blamed Each Other: What Happens When Every Project Gets Its Own Agent]]></title>
      <link>https://blog.juniverse.app/en/blog/ep04-cross-log-debug/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep04-cross-log-debug/</guid>
      <description><![CDATA[Each project's agent looked only at its own logs and pleaded innocent, so I laid both logs side by side to reach a conclusion]]></description>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[ai]]></category>
      <category><![CDATA[incident-response]]></category>
      <category><![CDATA[monitoring]]></category>
      <category><![CDATA[llm]]></category>
    </item>
    <item>
      <title><![CDATA[Naming It, Buying the Domain, and the First Commit: Two Days from Idea to Code]]></title>
      <link>https://blog.juniverse.app/en/blog/ep02-naming-and-setup/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep02-naming-and-setup/</guid>
      <description><![CDATA[I had the debate pick the name too. A domain purchase at dawn, remote dev setup fumbling, and 22 commits on day one]]></description>
      <pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[solo-dev]]></category>
      <category><![CDATA[project-setup]]></category>
    </item>
    <item>
      <title><![CDATA[I Was Running a Model per Project, So I Merged Them into One LLM Server]]></title>
      <link>https://blog.juniverse.app/en/blog/ep03-llm-server-split/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep03-llm-server-split/</guid>
      <description><![CDATA[Standing up a vLLM server on a single DGX Spark, splitting it out instead of running a model per project, and wiring up monitoring on day one]]></description>
      <pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[llm]]></category>
      <category><![CDATA[vllm]]></category>
      <category><![CDATA[dgx-spark]]></category>
      <category><![CDATA[local-llm]]></category>
      <category><![CDATA[infra]]></category>
    </item>
    <item>
      <title><![CDATA[I Had No Ideas, So I Built an AI Board to Judge Ideas First]]></title>
      <link>https://blog.juniverse.app/en/blog/ep01-persona-debate/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/ep01-persona-debate/</guid>
      <description><![CDATA[I had no ideas, so I built an idea-evaluation system first. How I set up a persona debate, and the record of my fumbling]]></description>
      <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[claude-code]]></category>
      <category><![CDATA[ai]]></category>
      <category><![CDATA[solo-dev]]></category>
      <category><![CDATA[idea-validation]]></category>
    </item>
    <item>
      <title><![CDATA[The Real Reason I Ran the Kubernetes Seminar Was Selfish]]></title>
      <link>https://blog.juniverse.app/en/blog/k8s-seminar/</link>
      <guid isPermaLink="true">https://blog.juniverse.app/en/blog/k8s-seminar/</guid>
      <description><![CDATA[A technology only you know can't go to production — how I spread a new technology to my team as a junior engineer]]></description>
      <pubDate>Fri, 02 Jan 2026 00:00:00 GMT</pubDate>
      <dc:creator><![CDATA[JUNIVERSE]]></dc:creator>
      <category><![CDATA[kubernetes]]></category>
      <category><![CDATA[war-story]]></category>
      <category><![CDATA[seminar]]></category>
      <category><![CDATA[backend]]></category>
    </item>
  </channel>
</rss>
