<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://nohomedirectory.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://nohomedirectory.github.io/" rel="alternate" type="text/html" /><updated>2026-03-28T06:20:37+00:00</updated><id>https://nohomedirectory.github.io/feed.xml</id><title type="html">Joe’s Coding Journey</title><subtitle>Building my way out of homelessness with AI coding agents. Documenting every step.</subtitle><author><name>Joe</name><email>josephbasilework@gmail.com</email></author><entry><title type="html">The Floor</title><link href="https://nohomedirectory.github.io/2026/03/28/the-floor/" rel="alternate" type="text/html" title="The Floor" /><published>2026-03-28T00:00:00+00:00</published><updated>2026-03-28T00:00:00+00:00</updated><id>https://nohomedirectory.github.io/2026/03/28/the-floor</id><content type="html" xml:base="https://nohomedirectory.github.io/2026/03/28/the-floor/"><![CDATA[<h1 id="the-floor">The Floor</h1>

<p>2 AM, Saturday, March 28th. In my car.</p>

<p>Six days dark. I’m not looking for sympathy here - I’m describing what happened.</p>

<p>The beads decomposition failed. I wrote about that. What I didn’t write about was what came after: five days of being completely disconnected. Driving around for hours with nowhere to go and no ability to stop. Angry. Wanting to isolate so I can work without distractions but still being distracted by everything even when I’m alone. Not wanting to be around people. Being around people anyway and losing hours to it. Can’t focus. Can’t sit still. Can’t start.</p>

<p>The gym has been helping with the anger. That’s the one thing that held.</p>

<p>This shit is just not good enough. The situation must change. I’ll change it - cold, dead hands.</p>

<p>I got a job. Nightshift - specifically picked something that isn’t laborious so I can keep working on my own shit during downtime. The money goes toward Hetzner servers and AI subscription passes. It’s the floor under everything else.</p>

<p>The project isn’t paused. The spec is intact.</p>

<p>Tomorrow’s a different day. Again.</p>]]></content><author><name>Joe</name></author><category term="journey" /><summary type="html"><![CDATA[The Floor]]></summary></entry><entry><title type="html">Communicating Losses</title><link href="https://nohomedirectory.github.io/2026/03/22/communicating-losses/" rel="alternate" type="text/html" title="Communicating Losses" /><published>2026-03-22T00:00:00+00:00</published><updated>2026-03-22T00:00:00+00:00</updated><id>https://nohomedirectory.github.io/2026/03/22/communicating-losses</id><content type="html" xml:base="https://nohomedirectory.github.io/2026/03/22/communicating-losses/"><![CDATA[<h1 id="communicating-losses">Communicating Losses</h1>

<p>11 PM, Sunday, March 22nd. At a lake somewhere in North Carolina.</p>

<p>I said I’d be transparent. The v1 spec decomposition and the resulting beads were shit. The 10k spec is intact, but the reduced artifacts I produced over the past couple days had significant information loss.</p>

<p>Something I’ve learned about this kind of work: the distance between momentum and paralysis is thinner than most people admit, and recognizing which one you’re in is its own skill.</p>

<p>I’m at this lake, pacing around, looking at the stars, and redoing the spec decomposition right now with a better approach off my phone hotspot to my laptop.</p>

<p>Tomorrow’s a different day.</p>]]></content><author><name>Joe</name></author><summary type="html"><![CDATA[Communicating Losses]]></summary></entry><entry><title type="html">The Decomposition</title><link href="https://nohomedirectory.github.io/2026/03/20/day-x-plus-7/" rel="alternate" type="text/html" title="The Decomposition" /><published>2026-03-20T00:00:00+00:00</published><updated>2026-03-20T00:00:00+00:00</updated><id>https://nohomedirectory.github.io/2026/03/20/day-x-plus-7</id><content type="html" xml:base="https://nohomedirectory.github.io/2026/03/20/day-x-plus-7/"><![CDATA[<h1 id="day-x7-the-decomposition">Day X+7: The Decomposition</h1>

<p>A week since Day X. Here’s the substance.</p>

<h2 id="what-apr-pro-actually-looks-like-at-scale">What APR Pro Actually Looks Like at Scale</h2>

<p>The monkeybee-pdf spec hit 10,000 lines. I ran it through 25 rounds of Automated Prompt Reviewer Pro - a planning refinement skill from <a href="https://jeffreys-skills.md/skills/planning-workflow">jeffreys-skills.md</a> that systematically critiques and tightens architectural plans. On top of that, I ran several multi-model blending rounds where I’d take the output from one model, feed it into another for critique, feed the critique back, and iterate. Claude for generation, Gemini for review, GPT Pro for synthesis, repeat. I also used the <a href="https://jeffreys-skills.md/skills/idea-wizard">idea-wizard</a> skill to pressure-test whether the spec was ambitious enough and to surface capabilities I hadn’t considered.</p>

<p>After 25 rounds, the spec is dense. Comprehensive. Arguably too comprehensive.</p>

<p>The core problem: specs this long stop fitting in a model’s context window in a single pass. They also tend to bloat with inline code examples that belong in implementation, not planning. The spec grew because the problem space is genuinely massive - a full PDF renderer/generator touches font subsetting, colorspace management, encryption, digital signatures, accessibility, XFA forms - but also because I let it expand rather than compress. More rounds doesn’t always mean better. Sometimes it means bloated.</p>

<h2 id="the-strategy-shift">The Strategy Shift</h2>

<p>I was supposed to convert the whole spec into beads and start swarming. <a href="https://x.com/nohomedirectory/status/2033747889370087462/">I tweeted about it</a> from a Walmart parking lot at 11:30 PM on March 16th. But when I sat down to actually do it, I realized the approach was wrong.</p>

<p>To be clear about what this spec actually describes: a complete, clean-room, memory-safe PDF renderer and generator in Rust. Not a wrapper around Poppler. Not a binding to MuPDF. Not another half-implementation that handles simple documents and chokes on anything real. The spec covers the full PDF 2.0 standard - font subsetting with OpenType and TrueType support, all 11 PDF colorspaces including ICC profile handling, AES-256 encryption, digital signatures, accessibility tagging, XFA forms, JPEG2000 and JBIG2 decoding, transparency groups, optional content layers, linearization for web streaming. The things that make Acrobat still relevant are the things most open-source implementations skip. This spec doesn’t skip them.</p>

<p>Nothing like this exists in Rust today. The closest is <code class="language-plaintext highlighter-rouge">pdf-rs</code>, which is a parser - not a renderer, not a generator. <code class="language-plaintext highlighter-rouge">lopdf</code> handles basic manipulation. Neither comes close to what this spec targets. If this gets built to spec, it’s the first memory-safe implementation capable of accurately handling the full complexity of real-world PDFs - the kind with nested form fields, embedded 3D content, complex font fallback chains, and redaction annotations that actually work. The kind that governments and banks produce and that every existing open-source tool renders incorrectly in some way.</p>

<p>That’s also why you don’t convert a 10,000-line spec describing all of that into beads all at once and then swarm the whole thing. That’s how you get an incoherent codebase. The spec describes a system with clear subsystems - parsing, rendering, generation, font handling, testing infrastructure - and each of those has dependencies on the others, but they’re not all equally critical for a v1.</p>

<p>The new plan: decompose the spec into implementation phases. Phase 1 gets its own beads conversion and gets swarmed first. When that phase lands - messy as it will be - I adjust the Phase 2 spec based on what actually happened in Phase 1, because the reality of implementation always deviates from the plan. Then Phase 2 gets converted to beads and swarmed. And so on.</p>

<p>This is slower to start but way more likely to produce something that actually works. Converting plans to beads always reveals problems you didn’t anticipate - structural issues, dependency conflicts, assumptions that seemed solid in prose but collapse when you try to make them concrete. That’s expected. That’s the point. It’s better to discover those problems in a contained blast radius than to have them cascade across an entire 10k-line system simultaneously.</p>

<h2 id="the-job">The Job</h2>

<p>I got a night shift security guard position. Low-key spot, not labor-intensive. The strategy is straightforward: the job funds agent subscriptions and basic survival, and the quiet overnight shifts become additional build time. I can have agents swarming while I’m on the clock.</p>

<p>It’s contingent on background checks clearing. If it goes through, it changes the resource equation significantly. Right now I’m burning through donated Claude passes and free tiers. A steady income - even a modest one - means I can run sustained agent workloads instead of rationing.</p>

<h2 id="the-gym">The Gym</h2>

<p>Since getting out of the hospital I’ve been cycling free trials at gyms for shower access. Planet Fitness, Crunch, random chains, whatever has free passes. It sounds like a hack and it is, but I’m genuinely grateful for it. A hot shower, a clean bathroom, a place to lift.</p>

<p>Lifting is a big deal for me. It regulates everything - mood, focus, sleep. Having something physical that grounds me is not optional. It’s infrastructure, same as the laptop and the power bank.</p>

<p>I think about perspective a lot when I’m in the parking lot at night. I’m in a car with a functioning heater, a laptop, WiFi, access to the most powerful AI models ever built, and a gym I can walk into for free. Someone in Haiti right now would trade everything for this setup. Your average person in 1500 would think I was a wizard - a glowing rectangle that contains the sum of human knowledge, and I’m using it to direct autonomous agents that write code for me. From a car. In a parking lot.</p>

<p>It could be so much worse. I have it good. The situation is “uncomfortable” (It’s all perspective. I definitely am not accepting this situation as some nice status quo, but I’m not going to waste my time dwelling etc. - that’s cognitive bandwith that could be put towards shipping) but the opportunity is absurd. I’m not going to waste it.</p>

<h2 id="where-im-working">Where I’m Working</h2>

<p>Right now: a Walmart parking lot. Power bank for the laptop, store WiFi for connectivity. The headless desktop I set up in Day X is ready but I need a consistent power outlet to run it - the security job could solve that too if there’s an outlet I can use on shift.</p>

<p>The setup is functional. Not comfortable, not glamorous, but functional. ThinkPad on the steering wheel, hotspot when the Walmart WiFi drops, power bank that gives me about 4-5 hours of work per charge. I charge the bank inside when I go in for water.</p>

<h2 id="whats-next">What’s Next</h2>

<p>Tonight I start the spec decomposition - splitting the monolithic 10k-line SPEC.md into discrete implementation phases. Tomorrow, Phase 1 gets its beads conversion. This weekend, I’m posted up at a library with the headless desktop SSH’d into from my laptop. That’s when the swarm begins.</p>

<p>No more planning about planning. The spec is refined enough. Probably over-refined. Time to convert and build.</p>

<h2 id="what-i-learned">What I Learned</h2>

<ul>
  <li>More refinement rounds on a spec can make it worse, not better. There’s a point where you’re adding detail that creates confusion rather than clarity. 25 APR Pro rounds was probably 10-15 too many. I should have started decomposing earlier.</li>
  <li>The incremental implementation approach - phase by phase, adjusting the plan based on what actually happens in code - is the right call for something this complex. Planning is not a phase you complete. It’s something that continues alongside building.</li>
</ul>

<hr />

<p><em>The spec is dense and the plan has shifted from “convert everything to beads and swarm” to “decompose, convert phase by phase, and adapt.” Phase 1 beads conversion tomorrow. The swarm begins this weekend.</em></p>]]></content><author><name>Joe</name></author><summary type="html"><![CDATA[Day X+7: The Decomposition]]></summary></entry><entry><title type="html">Day X</title><link href="https://nohomedirectory.github.io/2026/03/13/day-x/" rel="alternate" type="text/html" title="Day X" /><published>2026-03-13T00:00:00+00:00</published><updated>2026-03-13T00:00:00+00:00</updated><id>https://nohomedirectory.github.io/2026/03/13/day-x</id><content type="html" xml:base="https://nohomedirectory.github.io/2026/03/13/day-x/"><![CDATA[<h1 id="day-x">Day X</h1>

<p>Last time I posted, it was Day 2. I was in the library, mapping Jeffrey’s planning methodology, feeling momentum for the first time. That was February 12th.</p>

<p>It’s March 13th. A month gone. Here’s what happened.</p>

<h2 id="the-spiral">The Spiral</h2>

<p>After Day 2, I kept working. The car got fixed thanks to a kind stranger. I had mobility again. I was gathering context, building out the planning docs for monkeybee-pdf, filming videos, grinding in libraries until they closed and then hunting for 24/7 diners with WiFi to squeeze out more hours.</p>

<p>But something was off. My hip started hurting — badly. Five days of worsening pain, limping, can’t sit still, can’t focus. I went to the ER on February 22nd. They brushed me off. Meanwhile, I’d just gone through the worst breakup of my life (only relationship, too), I was sleeping in my car, and the ambient anxiety of watching the world change around AI while being resource-constrained was becoming crushing. Not the productive kind of pressure. The kind that compresses you.</p>

<p>On February 23rd, I checked myself into an inpatient psychiatric facility.</p>

<h2 id="the-diagnosis">The Diagnosis</h2>

<p>Bipolar disorder. They put me on lithium that first night.</p>

<p>I’m going to be straightforward about this because I said from Day 1 that I’d chart the failures alongside the successes, and this is the most important thing I’ve learned so far on this journey — more important than any Rust crate or planning methodology.</p>

<p>I’ve been fighting what felt like an invisible current. Periods of insane energy and clarity where I feel like I can take on everything, followed by collapses where I can barely function, but force myself through regardless. I thought that was just life. I thought everyone dealt with that and I was just worse at managing it. Turns out there’s a name for it, and there’s a pill for it.</p>

<p>I spent about two weeks inpatient. I didn’t have my laptop — just my phone. I was on Claude mobile planning when I could. I even thought about setting up a VPS so I could code from my phone in there. Jeffrey sent me more Claude passes. He told me to try to do a bit of work every day if I could. He said he believed in me. That meant a lot from a guy I’ve never met in person who was dealing with his own shingles pain (that he worked himself into from being a bleeding edge agent wrangling addict).</p>

<h2 id="why-day-x">Why “Day X”</h2>

<p>I’m not calling this Day 31 or whatever the math works out to. The sequential numbering broke. Life broke it. I could pretend I was still on track, renumber things, sanitize the timeline. But that would be exactly the kind of fake, polished process documentation that nobody actually learns from.</p>

<p>“X” is an unknown. A variable. Something to solve for.</p>

<p>It’s also a reset. I’m not the same person who wrote Day 2. I have a diagnosis. I have medication. I have a clearer understanding of what’s been sabotaging me my entire adult life. The fog I described in Day 1 — where I couldn’t focus, left the library after 7 hours when I had 12 — I now know what that was.</p>

<h2 id="the-suitcase-server">The Suitcase Server</h2>

<p>Two days ago — March 11th — I walked into a university library carrying a suitcase with a desktop computer inside it. I am not a student there.</p>

<p>The plan was simple: bring the desktop and a monitor, set up SSH and networking so the machine auto-connects to my laptop’s hotspot, and then I’d never need a monitor for it again. I could just plug it in anywhere with a power outlet, and it becomes a headless build server I control from my laptop. Agent swarming infrastructure, assembled from a library table.</p>

<p>The plan immediately fell apart.</p>

<p>I opened the trunk and the monitor was cracked. Spider-webbed right through the center. Must have shifted during one of the drives. So now I’ve got a desktop with no display, sitting in a library where I’m not a student, and I need a screen to configure the OS.</p>

<p>I’d noticed the study rooms had TVs mounted on the walls. HDMI in. I didn’t want to ask anyone for anything — it was already weird enough that I’d walked in with a suitcase full of computer parts. So I found an empty study room and set up in there.</p>

<p>I cracked open the case, plugged in the keyboard, connected the HDMI to the room’s TV, hit power — and got stuck in BIOS. No boot drive detected. Then I remembered: I’d pulled the SSD out weeks ago and thrown it in my backpack. It had been riding around with me this whole time. A TeamGroup 512GB SATA drive, just sitting in a bag pocket.</p>

<p>I pulled out my screwdriver, mounted the SSD back into the caddy, plugged it into the board, and booted into Ubuntu. From there I configured the SSH server, set up the networking to auto-connect to my laptop’s hotspot on boot, tested it, confirmed I could SSH in cleanly. Packed everything up, went back to the common area. By then it was close to closing.</p>

<p>But now the machine is ready. I’ve scoped out spots. I literally just need a power outlet. Plug the desktop in, it boots, grabs my hotspot, and I SSH in from the laptop. Full build environment. Agent swarming capability. No monitor, no desk, no office — just a black box under a table somewhere and a terminal on my ThinkPad.</p>

<p><img src="/assets/images/day-x-library-setup.jpg" alt="Setting up the desktop in the library study room" /></p>

<p><img src="/assets/images/day-x-ssd-reinstall.jpg" alt="The SSD I had to pull from my backpack and reinstall" /></p>

<p><img src="/assets/images/day-x-tv-monitor.jpg" alt="Ubuntu booted on the study room TV — SSH configured" /></p>

<p><img src="/assets/images/day-x-cracked-monitor.jpg" alt="The cracked monitor that forced the whole improvisation" /></p>

<h2 id="where-things-stand">Where Things Stand</h2>

<p>I’m writing this from a university library at 8:26 PM. It closes at 10. I’ll keep working after.</p>

<p>The PDF project is alive and entering the build phase. Tonight I’m running the spec through Automated Prompt Reviewer Pro. Tomorrow is beads conversion and polish. If those are tight, agent swarming begins tomorrow or Sunday — on the headless desktop I just described.</p>

<p>I had a job interview for a night security guard position (and have more lined up). If I land it, that’s agent subscription money and a quiet overnight environment to run builds/swarms.</p>

<h2 id="what-i-learned">What I Learned</h2>

<ul>
  <li>Your brain is infrastructure. If the infrastructure is broken, nothing you build on top of it will hold. Getting diagnosed and medicated wasn’t a detour from the mission — it was the most critical dependency.</li>
  <li>Constraints force invention. A cracked monitor turned into a headless server architecture. I now have a more capable setup than if the monitor had survived — because I was forced to make the machine fully autonomous. The best solutions I’ve found on this journey have all come from things going wrong.</li>
  <li>People show up for you in ways you don’t expect. Jeffrey, the person who fixed my car, the people who sent Claude passes after Jeffrey posted about my situation — none of them had to do any of that. Positive propagation is real.</li>
  <li>There’s no shame in the psych ward. There’s shame in knowing something is wrong and refusing to address it because you think you should be able to brute-force through everything. I tried that. It doesn’t work ALL of the time, but you have to still push. Get the diagnosis. Take the lithium. Get back to work.</li>
  <li>The gap is part of the story. Day 1, Day 2, Day X. That’s more honest than Day 1 through Day 31 of uninterrupted grind content. Nobody’s journey is linear. Mine sure as hell isn’t.</li>
</ul>

<hr />

<p><em>I told you I’d document everything — the code, the strategy, the wins, and the failures. A month-long gap and a psych ward stay qualify as the latter. But I’m medicated, I’m mobile, I’ve got a headless build server that runs off a hotspot, and the spec is about to become code. Day X+1 starts tonight.</em></p>]]></content><author><name>Joe</name></author><summary type="html"><![CDATA[Day X]]></summary></entry><entry><title type="html">Day 2: Mapping the Terrain</title><link href="https://nohomedirectory.github.io/2026/02/12/day-2-mapping-the-terrain/" rel="alternate" type="text/html" title="Day 2: Mapping the Terrain" /><published>2026-02-12T00:00:00+00:00</published><updated>2026-02-12T00:00:00+00:00</updated><id>https://nohomedirectory.github.io/2026/02/12/day-2-mapping-the-terrain</id><content type="html" xml:base="https://nohomedirectory.github.io/2026/02/12/day-2-mapping-the-terrain/"><![CDATA[<h2 id="a-good-start">A Good Start</h2>

<p>For day 2, I began my day by a kind soul saying they’d pay for my brakes to be fixed on the car. I thought the car would maybe be towed, and it wasn’t drivable (safely). That was at 7am. The library’s hours were 9am to 9pm. So, after dropping the car off, I actually went to a nearby church that was open (opened at 830am, went there before the library) to see if they’d be willing to let me do some work there. I figured I’d potentially be in a better environment to focus. They said no, so, I headed on over to the library.</p>

<p>I filmed this video in the church parking lot after told it wasn’t open to the public:</p>

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; margin: 1.5em 0;">
  <iframe src="https://www.youtube.com/embed/nIEf62WCh8c" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allowfullscreen=""></iframe>
</div>

<h2 id="the-work">The Work</h2>

<p>There, I continued mapping out my problem space. I gathered up a bunch of context from <a href="https://x.com/doodlestein">@doodlestein</a> on x.com. I settled on using the built in Grok, expert mode, with the prompt (and slight variations):</p>

<blockquote>
  <p>“Hello there. I’d like you to gather for me a bunch of information from @doodlestein user here on x. I am specifically interested in the planning process, beads conversion from a plan/spec, and project structure. Here is the following I currently have in a GDoc: “ORIGINAL PARAGRAPH (not from Jeffrey):
A clean-room PDF renderer/generator. PDF is the de facto document interchange format, and the existing implementations (Poppler, MuPDF, the various Java/Python libraries) are all either C/C++ with decades of CVEs or painfully slow. A correct, memory-safe, fast PDF engine would be used everywhere from browsers to enterprise document pipelines.
—
ADVICE FROM JEFFREY:
Show Claude my spec for frankentui and tell it to make one like it for pdf. Get a complete open source pdf renderer/generator in typescript as reference
Make it in rust
—
Now, my goal: Create the world’s best and most performant, memory-safe Rust PDF Ren./Gen. A blog post will be created for it: “How I took a bunch of donated Claude passes and turned it into the world’s best and most performant, memory-safe Rust PDF renderer and generator”
Importantly, utilizing AI Agents in the entire ideation, planning, implementation, testing, etc. progress will be paramount. I, the human, essentially will act as a thought partner with the ideation, and then an orchestrator with planning, and a very distant manager during the implementation/testing - for impl/test, the coding system itself will be catered to a closed-loop style, the idea is for me, the human, to not be a bottleneck on the AI Agent productivity - but, that will come later on after the ideation/planning phase. It’s important to consider the new agent capabilities that are at our disposal: this project is indeed very ambitious, but the goal here is to show just what is possible with the new AI coding agents, and astonishingly, at such a fast rate, by a literal homeless man in a public library, taking only days to produce (Yes, this is ENTIRELY realistic).” But, first, let’s understand the need for this new Rust implementation of a pdf ren/gen, and how such  a robust implementation can be had given the new agentic capabilities. This will also be used to tie in somewhere for the blog portion - So, I can actually also start literally writing the blog post as well - I have another tab open in the GDoc called “Blog Post” Like I said, we need to emphasize his ‘talkings’ on planning, repo initialization/structure, conversion of some ‘plan’ (file or multiple files - and, I know I’d use automated reviewer pro in the process given the complexity), and then also hearing his process on the beads conversion process. These are great resources https://x.com/doodlestein/status/2014182649955266882 Planning related X posts:https://x.com/doodlestein/status/2007588870662107197?s=20https://x.com/doodlestein/status/2008813776687030781?s=20https://x.com/doodlestein/status/2008683457715548549?s=20https://x.com/doodlestein/status/2004650413484658735?s=20https://x.com/doodlestein/status/1997777154612797787?s=20 I would like you to return a file that contains the relevant information that I can use. I want you to get every single prompt he posted, verbatim, and annotate how I could utilize them.”</p>
</blockquote>

<p>I got about 5 of those badboys out, then sent it into gpt5.2 pro to consolidate them into a single file, but then did a few ‘critique rounds’ on it with the hope to make the information more useful.</p>

<h2 id="the-car">The Car</h2>

<p>I eventually picked my car up, and that was fantastic - I truly felt such a large amount of hype. Having this functional car back has opened a lot of opportunities to me now.</p>

<p>I went to another bigger, quiet library to finish out the day (up to 9pm).</p>

<h2 id="after-hours">After Hours</h2>

<p>Then drove tried to get into an ihop and a dennys for their free wifi to continue work a bit longer, but they were both closed (ihop was takeout only 24/7, and the dennys was going on with maintenance). I began driving to another, but figured it was better to get sleep at that point and get after it tomorrow. It may have been a situation where I’m just staring at the screen in a haze. Also, I would have gotten something cheap for like $2 so I wouldn’t be loitering.</p>

<p>I also did gpt 5.2 deep research on finding me options around my city, which is what even gave me the 24/7 diner ideas to be able to continue my work.</p>

<p>Anyways, found a parking lot (I was confident they didn’t tow) and sleeping in 50 degrees vs. 30 was relatively fantastic.</p>

<h2 id="what-i-learned">What I Learned</h2>

<ul>
  <li>Research and context-gathering IS the work right now. Mapping Jeffrey’s planning methodology and figuring out how to apply it to the PDF engine is directly productive, even though no code was written.</li>
  <li>The car changes the game. Mobility means optionality — different libraries, extended hours possibilities, better sleep spots.</li>
  <li>Know when to stop — but also know that it’s absolutely important that I go balls to the wall. It absolutely must become habit to keep working after the library closes and even before it opens. The hours vary on Fridays and weekends. Two nights in a row I’ve hit the wall. The discipline isn’t just in pushing through — it’s in recognizing when more screen time is just diminishing returns and sleep is the force multiplier.</li>
</ul>

<hr />

<p><em>Day 2 of the journey. Still in the research and planning phase. No code yet — and that’s by design.</em></p>]]></content><author><name>Joe</name></author><category term="journey" /><category term="planning" /><summary type="html"><![CDATA[A Good Start]]></summary></entry><entry><title type="html">Day 1: The Plan</title><link href="https://nohomedirectory.github.io/2026/02/11/day-1-the-plan/" rel="alternate" type="text/html" title="Day 1: The Plan" /><published>2026-02-11T00:00:00+00:00</published><updated>2026-02-11T00:00:00+00:00</updated><id>https://nohomedirectory.github.io/2026/02/11/day-1-the-plan</id><content type="html" xml:base="https://nohomedirectory.github.io/2026/02/11/day-1-the-plan/"><![CDATA[<p>Last night I slept in the woods. It was 30 degrees. Today I’m at the library with a laptop, some donated Claude Code passes, and 12 hours to start building.</p>

<h2 id="the-project">The Project</h2>

<p>I’m building a clean-room, memory-safe PDF renderer and generator in Rust. Every major PDF library in the world today is either written in C/C++ with decades of security vulnerabilities, or it’s painfully slow. There’s no fast, safe, modern alternative.</p>

<p>I’ve never written a line of Rust.</p>

<h2 id="why-that-doesnt-matter">Why That Doesn’t Matter</h2>

<p>I don’t write code line by line anymore. I direct AI coding agents — primarily Claude Code — using detailed architectural specifications. My job is to be the architect: understand the problem space, design the system, write the spec, and steer the agents.</p>

<h2 id="what-i-did-today">What I Did Today</h2>

<p>I arrived at the library around 9am and dove into research on the problem space, using Claude and GPT 5.2 Pro to start mapping the landscape — what exists, what’s broken, and where the opportunity is.</p>

<p>The core insight: PDF is the de facto document interchange format, and every existing implementation (Poppler, MuPDF, the various Java/Python libraries) is either C/C++ with decades of CVEs or painfully slow. A correct, memory-safe, fast PDF engine would be used everywhere — browsers, enterprise document pipelines, you name it.</p>

<p>I got some solid advice from Jeffrey (@doodlestein): show Claude my spec and have it produce one like his FrankenTUI spec but for PDF. Get a complete open-source PDF renderer/generator in TypeScript as reference, then build it in Rust.</p>

<p>From there, I started shaping the spec (still currently incomplete, but the skeleton is forming):</p>

<ul>
  <li><strong>Core deliverable</strong>: A library — a Rust crate that other projects depend on.</li>
  <li><strong>Demo/showcase</strong>: Compile to WASM for a browser-based demo hosted on GitHub Pages right from the repo — drop a PDF in, watch it render, generate a new one. That’s powerful for the blog.</li>
  <li><strong>CLI tools</strong>: <code class="language-plaintext highlighter-rouge">pdfrender input.pdf output.png</code>, <code class="language-plaintext highlighter-rouge">pdfgen template.json output.pdf</code>. These aren’t mutually exclusive — they’re just different frontend binaries consuming the same core library crate.</li>
</ul>

<p>The goal crystallized: create the world’s best and most performant, memory-safe Rust PDF renderer/generator. The blog post I want to write at the end: <em>“How I took a bunch of donated Claude passes and turned it into the world’s best and most performant, memory-safe Rust PDF renderer and generator.”</em></p>

<p>The AI agent workflow is central to all of this. I act as a thought partner during ideation, an orchestrator during planning, and a very distant manager during implementation and testing. The coding system will be designed as a closed loop — the human (me) should never be the bottleneck on AI agent productivity. That will come later, after the ideation and planning phase.</p>

<p>It’s important to consider the new agent capabilities that are at our disposal. This project is indeed very ambitious, but the goal here is to show just what is possible with the new AI coding agents, and astonishingly, at such a fast rate, by a literal homeless man in a public library, taking only days to produce. Yes, this is ENTIRELY realistic.</p>

<h3 id="the-failure">The Failure</h3>

<p>I said I’d chart my failures alongside my successes, so here’s the first one.</p>

<p>I couldn’t focus. Too much in my head at once. Around 4:30pm — having arrived at 9am — I left. I went on a walk to a rather secluded spot to collect myself.</p>

<p>That’s a failure. I had 12 hours of library time and used roughly 7, with much of it scattered. When you’re dealing with homelessness and trying to build ambitious software simultaneously, the mental load is brutal. Walking away was the right call for my head, but I need strategies to not need to walk away in the first place.</p>

<h3 id="that-night">That Night</h3>

<p>That night it was 30 degrees and I slept out in the woods. I stuffed my pants with some of my clothes for extra insulation.</p>

<p><img src="/assets/images/day1-sleeping-in-the-cold.jpg" alt="Pants stuffed with clothes for warmth in 30-degree weather" /></p>

<p>I was talking to Claude on my phone in the woods. I’ve got to say, Opus 4.6 is fantastic with planning. And man, the Claude app with the questionnaires are great.</p>

<p><img src="/assets/images/day1-claude-on-phone-1.jpg" alt="Claude on my phone in the woods - 1" /></p>

<p><img src="/assets/images/day1-claude-on-phone-2.jpg" alt="Claude on my phone in the woods - 2" /></p>

<h2 id="what-i-learned">What I Learned</h2>

<ul>
  <li>Mapping the problem space is real work, even when it doesn’t feel like “building.” Understanding what exists and what’s broken is the foundation everything else sits on.</li>
  <li>I need to be more deliberate about managing the noise in my head. The mental overhead of homelessness doesn’t pause while you’re trying to architect software.</li>
  <li>The spec is taking shape. A Rust crate as the core, WASM for the demo, CLI tools as frontends. The vision is clear.</li>
</ul>

<hr />

<p><em>This is post #1 of an ongoing series. I’ll be writing daily about what I build, what works, what doesn’t, and what it’s like to do this from a library with nothing.</em></p>]]></content><author><name>Joe</name></author><category term="journey" /><category term="planning" /><summary type="html"><![CDATA[Last night I slept in the woods. It was 30 degrees. Today I’m at the library with a laptop, some donated Claude Code passes, and 12 hours to start building.]]></summary></entry></feed>