<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Daniel J Wilson</title>
  <subtitle>Writing on research, technology, building, and everyday life.</subtitle>
  <link href="https://danieljwilson.com/feed.xml" rel="self"/>
  <link href="https://danieljwilson.com/"/>
  <updated>2026-02-09T00:00:00.000Z</updated>
  <id>https://danieljwilson.com/</id>
  <author>
    <name>Daniel J Wilson</name>
  </author>
  <entry>
    <title>An Email-to-Input Pipeline with Claude Code</title>
    <link href="https://danieljwilson.com/writing/post_email-to-input-pipeline/"/>
    <id>https://danieljwilson.com/writing/post_email-to-input-pipeline/</id>
    <updated>2026-02-09T00:00:00.000Z</updated>
    <content type="html">&amp;lt;p&amp;gt;I consume a lot of podcasts, books, movies, and articles. Keeping track of them was always a friction point — enough friction that I mostly didn&amp;apos;t bother, which meant losing references I wanted to revisit later.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;So I built a simple pipeline: &amp;lt;strong&amp;gt;email a URL to myself, and a Claude Code skill turns it into a structured note.&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h4&amp;gt;How it works&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;The system has two parts: a Python script that fetches URLs from Gmail, and a Claude Code skill that processes each one.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;1. Send an email.&amp;lt;/strong&amp;gt; I forward or compose an email to a dedicated Gmail +inputs address. The body contains the URL. That&amp;apos;s it.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;2. The email subject controls metadata.&amp;lt;/strong&amp;gt; The subject line is a simple flag system:&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Empty — not finished, not recommended&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt; — finished consuming it&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; — recommended but not finished&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;FR&amp;lt;/code&amp;gt; — finished and recommended&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;If the subject is &amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;FR&amp;lt;/code&amp;gt;, the finish date is automatically set to when the email was sent.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;3. Run &amp;lt;code&amp;gt;/input-batch&amp;lt;/code&amp;gt;.&amp;lt;/strong&amp;gt; A Claude Code slash command triggers the pipeline. It connects to Gmail via IMAP, pulls unread emails from the +inputs address, extracts URLs, and deletes the processed emails.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;4. Auto-detect and fetch metadata.&amp;lt;/strong&amp;gt; Each URL is categorized by domain — Apple Podcasts becomes a podcast entry, Goodreads becomes a book, IMDB becomes a movie, and so on. Claude then fetches the page and extracts structured metadata: title, creator, duration, release date, cover art, and whatever else is relevant to the category.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;5. Generate a summary.&amp;lt;/strong&amp;gt; Each input gets a 2-4 sentence summary with key concepts bolded.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;6. Create a markdown file.&amp;lt;/strong&amp;gt; The note is written to my Obsidian vault as a markdown file with structured frontmatter — ready to be rendered on my website or queried later.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;7. Commit and push.&amp;lt;/strong&amp;gt; The content repo is automatically committed and pushed to GitHub, which triggers a site rebuild.&amp;lt;/p&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h4&amp;gt;Handling NotebookLM&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;One edge case: I use &amp;lt;a href=&amp;quot;https://notebooklm.google.com/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;NotebookLM&amp;lt;/a&amp;gt; to generate podcast-style audio summaries of papers and essays. These URLs require Google auth, so Claude can&amp;apos;t fetch them directly.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;The workaround: I attach a screenshot of the NotebookLM summary page to the email. Claude reads the image to extract the title, author, and publication date, then searches the web for any missing metadata.&amp;lt;/p&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h4&amp;gt;Why email?&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;Email is the universal &amp;amp;quot;share to&amp;amp;quot; target. Every app on my phone can share a link via email. No special app needed, no API to configure, no bookmarklet to maintain. The subject line flag system (&amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FR&amp;lt;/code&amp;gt;) adds just enough metadata without any real friction.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;The whole thing takes about 5 seconds per input on my end. Everything else is automated.&amp;lt;/p&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h4&amp;gt;The stack&amp;lt;/h4&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Gmail&amp;lt;/strong&amp;gt; — inbox as a queue (IMAP access via Python)&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Claude Code&amp;lt;/strong&amp;gt; — slash command skill for orchestration, metadata extraction, and summary generation&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Obsidian&amp;lt;/strong&amp;gt; — markdown files with YAML frontmatter&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;GitHub&amp;lt;/strong&amp;gt; — content repo that triggers site deploys&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
</content>
  </entry>
  <entry>
    <title>Constipated Altruism</title>
    <link href="https://danieljwilson.com/writing/post_constipated-altruism/"/>
    <id>https://danieljwilson.com/writing/post_constipated-altruism/</id>
    <updated>2026-02-07T00:00:00.000Z</updated>
    <content type="html">&amp;lt;p&amp;gt;While reading a recent &amp;lt;a href=&amp;quot;https://substack.com/@experimentalhistory&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Adam Mastroianni&amp;lt;/a&amp;gt; &amp;lt;a href=&amp;quot;https://www.experimental-history.com/p/underrated-ways-to-change-the-world&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;post&amp;lt;/a&amp;gt; I came across a term/concept that struck a chord: &amp;lt;mark&amp;gt;&amp;lt;strong&amp;gt;Constipated altruism&amp;lt;/strong&amp;gt;&amp;lt;/mark&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;The phrase is used to describe what seems to be a common failure mode:&amp;lt;/p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;You want to help.&amp;lt;br&amp;gt;
You care.&amp;lt;br&amp;gt;
But you don’t actually do anything.&amp;lt;/p&amp;gt;
&amp;lt;/blockquote&amp;gt;
&amp;lt;p&amp;gt;Not because you’re selfish.&amp;lt;br&amp;gt;
Because you’ve unconsciously decided that only &amp;lt;em&amp;gt;huge&amp;lt;/em&amp;gt; or &amp;lt;em&amp;gt;heroic&amp;lt;/em&amp;gt; actions “count.”&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;So unless you:&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;donate a life-changing amount of money,&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;switch careers to work full-time on a cause,&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;or launch something world-saving,&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;…you do nothing.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;The altruistic impulse has nowhere to go.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;It just sits there.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Hence: &amp;lt;strong&amp;gt;constipated&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h4&amp;gt;The trap&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;The hidden assumption is that impact must be either:&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;High-status&amp;lt;/strong&amp;gt; — become rich/powerful first, then fix things&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;High-sacrifice&amp;lt;/strong&amp;gt; — give up comfort, stability, or your career&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;p&amp;gt;Everything else feels trivial, performative, or not worth doing.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;But that framing quietly eliminates 95% of the actions that actually move the world.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Most change comes from:&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;small, repeatable help&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;local improvements&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;medium-scale efforts&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;connecting people&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;building tools&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;sharing knowledge&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;removing friction&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;being the “second-bravest person” who supports someone else’s initiative&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;In other words: &amp;lt;strong&amp;gt;boring, doable help&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h4&amp;gt;Why this idea matters&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;This framing removes guilt and replaces it with agency.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Instead of:&amp;lt;/p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;“This problem is too big, so nothing I do matters.”&amp;lt;/p&amp;gt;
&amp;lt;/blockquote&amp;gt;
&amp;lt;p&amp;gt;It becomes:&amp;lt;/p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;“What’s the smallest concrete thing I could do today that slightly improves this?”&amp;lt;/p&amp;gt;
&amp;lt;/blockquote&amp;gt;
&amp;lt;p&amp;gt;That question is almost always answerable. An altruism action &amp;amp;quot;laxative&amp;amp;quot; of sorts?
And once you allow small actions to count, action becomes easy again.
Momentum beats moral purity.&amp;lt;/p&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h4&amp;gt;A simple heuristic I’m keeping&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;When I notice myself “caring but not acting,” I try:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Lower the bar until action feels trivial. Then do that.&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Tiny counts.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Because the alternative isn’t “bigger impact.”&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;It’s usually nothing.&amp;lt;/p&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h4&amp;gt;Original essay&amp;lt;/h4&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Adam Mastroianni — &amp;lt;em&amp;gt;&amp;lt;a href=&amp;quot;https://www.experimental-history.com/p/underrated-ways-to-change-the-world&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Underrated ways to change the world&amp;lt;/a&amp;gt;&amp;lt;/em&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;h4&amp;gt;Related links&amp;lt;/h4&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://www.experimental-history.com/p/underrated-ways-to-change-the-world/comments&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Comments/discussion on the post&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://substack.com/@amrita112/note/c-79142642&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Short Substack note quoting the idea&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://www.metafilter.com/212060/Underrated-ways-to-change-the-world-Part-1&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;MetaFilter discussion&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://www.linkedin.com/posts/shyju-varkey-98282712_sharingstories-storytelling-whatireadlastweek-activity-7274680600718954496-y9If&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;LinkedIn reference&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://www.thecoloradojournal.com/journal-xxv/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&amp;gt;Reprint/context mention&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;hr&amp;gt;
</content>
  </entry>
  <entry>
    <title>LLM code de-cruftification</title>
    <link href="https://danieljwilson.com/writing/tips -llm-code-cleanup/"/>
    <id>https://danieljwilson.com/writing/tips -llm-code-cleanup/</id>
    <updated>2026-02-05T00:00:00.000Z</updated>
    <content type="html">&amp;lt;h4&amp;gt;Reducing LLM “cruft” after large refactors&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;One simple strategy that’s worked well for me is a &amp;lt;strong&amp;gt;reviewer → verifier&amp;lt;/strong&amp;gt; two-pass workflow.&amp;lt;/p&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;language-less&amp;quot;&amp;gt;Codebase
   ↓
Pass A: Reviewer → produces checklist only
   ↓
Pass B: Verifier → applies fixes + runs checks
   ↓
Clean repo
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;blockquote class=&amp;quot;callout callout-note&amp;quot; data-callout=&amp;quot;note&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span class=&amp;quot;callout-title&amp;quot;&amp;gt;Example&amp;lt;/span&amp;gt;Here is an example of the prompt I am currently using (I will try to keep it updated). It is current as of 2026-02-05 14:25.&amp;lt;/p&amp;gt;
&amp;lt;/blockquote&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;Use a reviewer + verifier paradigm to now go over all the code in [path].

Pass A (reviewer): Audit the refactor for dead code, duplicate paths, inconsistent patterns, and doc drift. Produce a checklist of fixes.
Pass B (verifier): Apply fixes, run lint/format/tests/build, and update impacted READMEs. Report deletions and results.

Goals:
- Remove all obsolete/duplicate code created by the refactor.
- Reduce complexity and redundancy (no parallel implementations).
- Ensure repo consistency (naming, structure, patterns).
- Update all impacted docs/READMEs.

Notes:
- Prefer deletion over deprecation. If something is unused, remove it.
- No new abstractions unless they reduce duplication across ≥2 call sites.
- No TODOs unless they include owner + next action + condition.
- If you touch a public API, update examples and changelog notes.
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;h4&amp;gt;Why this works&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;LLMs tend to add layers and leave residue during refactors. Separating &amp;lt;em&amp;gt;analysis&amp;lt;/em&amp;gt; from &amp;lt;em&amp;gt;execution&amp;lt;/em&amp;gt; forces:&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;less speculative code&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;fewer unnecessary abstractions&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;more aggressive deletion&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;tighter repo consistency&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;docs that actually match reality&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;Net effect: smaller diffs, simpler code, and a repo that stays clean instead of slowly accreting AI sludge.&amp;lt;/p&amp;gt;
</content>
  </entry>
  <entry>
    <title>Option (⌥) + Shift (⇧) + 2 = €</title>
    <link href="https://danieljwilson.com/writing/tips-euro-keyboard-shortcut/"/>
    <id>https://danieljwilson.com/writing/tips-euro-keyboard-shortcut/</id>
    <updated>2026-02-04T00:00:00.000Z</updated>
    <content type="html">&amp;lt;p&amp;gt;Given that I live in France right now, I have to type the € sign on a semi-regular basis. If you’re using a &amp;lt;strong&amp;gt;U.S. keyboard layout on macOS&amp;lt;/strong&amp;gt;, typing the euro symbol isn’t obvious — it’s not printed on any key (in initial days I found myself searching for the symbol on the web and then copy pasting the it).&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;But the shortcut is pretty simple:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;Option (⌥) + Shift (⇧) + 2&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Press all three together → &amp;lt;strong&amp;gt;€&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;h4&amp;gt;Why this combo?&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;On the U.S. layout:&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;Shift + 2&amp;lt;/code&amp;gt; normally gives &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Holding &amp;lt;code&amp;gt;Option&amp;lt;/code&amp;gt; switches the keyboard to the alternate symbol layer&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;So &amp;lt;code&amp;gt;Option + Shift + 2&amp;lt;/code&amp;gt; maps to €&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;h4&amp;gt;Quick memory trick&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;Think:&amp;lt;/p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;“@ becomes € when you add Option.”&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/blockquote&amp;gt;
&amp;lt;p&amp;gt;Same key, just one extra modifier.&amp;lt;/p&amp;gt;
&amp;lt;h4&amp;gt;Bonus: discover other hidden symbols&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;macOS has many built-in characters behind the Option key:&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Go to &amp;lt;strong&amp;gt;System Settings → Keyboard&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Enable &amp;lt;strong&amp;gt;Show Keyboard Viewer&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Hold &amp;lt;strong&amp;gt;Option&amp;lt;/strong&amp;gt; or &amp;lt;strong&amp;gt;Option + Shift&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;p&amp;gt;You’ll see every hidden character live.&amp;lt;/p&amp;gt;
</content>
  </entry>
  <entry>
    <title>Uniqlo cycling base layer</title>
    <link href="https://danieljwilson.com/writing/tips-uniqlo-base-layer-cycling/"/>
    <id>https://danieljwilson.com/writing/tips-uniqlo-base-layer-cycling/</id>
    <updated>2026-02-04T00:00:00.000Z</updated>
    <content type="html">&amp;lt;p&amp;gt;As a cyclist sometimes I wear a base layer on cooler days.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Base layers, as with much in cycling, can seem pretty overpriced.
&amp;lt;img src=&amp;quot;/assets/IMG-20260204155938224.png&amp;quot; alt=&amp;quot;IMG-20260204155938224&amp;quot; width=&amp;quot;250&amp;quot; loading=&amp;quot;lazy&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;The other day I wore one of my new long sleeve uniqlo t-shirts on a ride and it was great. Comfortable fit, soft and warm fabric.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;And 15€.&amp;lt;/p&amp;gt;
&amp;lt;img src=&amp;quot;/assets/IMG-20260204155938240.png&amp;quot; alt=&amp;quot;IMG-20260204155938240&amp;quot; width=&amp;quot;250&amp;quot; loading=&amp;quot;lazy&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Strong recommend.&amp;lt;/p&amp;gt;
</content>
  </entry>
</feed>
