<feed xmlns='http://www.w3.org/2005/Atom'>
<title>neko/web/dist/v3/assets, branch master</title>
<subtitle>self-hosted, single user rss reader</subtitle>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/'/>
<entry>
<title>Fix star/read buttons: _id string vs number type mismatch</title>
<updated>2026-02-28T22:53:24+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-02-28T22:53:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=df5e7d93963f0256285b13ddf750761930797e78'/>
<id>df5e7d93963f0256285b13ddf750761930797e78</id>
<content type='text'>
The Go API returns _id as a JSON string (due to the `json:",string"` tag
on Item.Id), but the frontend compared it with === against numbers from
parseInt(). String "5" === number 5 is always false in JS, so toggleStar,
mark-as-read, and keyboard shortcuts silently did nothing.

Fix:
- Coerce _id to Number() when items are loaded from the API
- Use Number() coercion in all store.items.find() comparisons as defense
- Revert the CSS touch-target changes (the issue was never about size)
- Add a regression test with string _id to prevent reintroduction

https://claude.ai/code/session_012CNdRhGhU3hxjrwvZt2BHZ
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The Go API returns _id as a JSON string (due to the `json:",string"` tag
on Item.Id), but the frontend compared it with === against numbers from
parseInt(). String "5" === number 5 is always false in JS, so toggleStar,
mark-as-read, and keyboard shortcuts silently did nothing.

Fix:
- Coerce _id to Number() when items are loaded from the API
- Use Number() coercion in all store.items.find() comparisons as defense
- Revert the CSS touch-target changes (the issue was never about size)
- Add a regression test with string _id to prevent reintroduction

https://claude.ai/code/session_012CNdRhGhU3hxjrwvZt2BHZ
</pre>
</div>
</content>
</entry>
<entry>
<title>Add AGENTS.md and fix star button tap targets on mobile</title>
<updated>2026-02-28T21:31:25+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-02-28T21:31:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=15aa629972c4bd9fd3ab5ddb442783483f57a61f'/>
<id>15aa629972c4bd9fd3ab5ddb442783483f57a61f</id>
<content type='text'>
Add AGENTS.md with TDD workflow and check-in guidance for agents.

Fix star buttons being nearly impossible to tap on mobile by:
- Adding min-width/min-height of 44px for proper touch targets
- Adding flex-shrink: 0 so the button isn't squeezed by long titles
- Overriding generic button styles (height, text-transform, font-weight)
  that bled into the star button

https://claude.ai/code/session_012CNdRhGhU3hxjrwvZt2BHZ
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add AGENTS.md with TDD workflow and check-in guidance for agents.

Fix star buttons being nearly impossible to tap on mobile by:
- Adding min-width/min-height of 44px for proper touch targets
- Adding flex-shrink: 0 so the button isn't squeezed by long titles
- Overriding generic button styles (height, text-transform, font-weight)
  that bled into the star button

https://claude.ai/code/session_012CNdRhGhU3hxjrwvZt2BHZ
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove scrape/text button that caused squished body text</title>
<updated>2026-02-28T16:19:50+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-02-28T16:19:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=4ec762350c9bc0704bb81357949f910124fac0c6'/>
<id>4ec762350c9bc0704bb81357949f910124fac0c6</id>
<content type='text'>
The float:right "text" button inside .dateline was causing .item-description
content to wrap around it when .feed-item gained overflow:hidden. Removing
the button fixes the squished text regression. The backend scrape endpoint
and scrapeItem() handler remain intact for potential future use.

https://claude.ai/code/session_0141nhxmYfoFPVPZ813K1XFD
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The float:right "text" button inside .dateline was causing .item-description
content to wrap around it when .feed-item gained overflow:hidden. Removing
the button fixes the squished text regression. The backend scrape endpoint
and scrapeItem() handler remain intact for potential future use.

https://claude.ai/code/session_0141nhxmYfoFPVPZ813K1XFD
</pre>
</div>
</content>
</entry>
<entry>
<title>Exclude test files from tsc build and rebuild production assets</title>
<updated>2026-02-28T05:40:51+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-02-28T05:40:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=474a93374340fa3aa5997b66ac1fecbffa620375'/>
<id>474a93374340fa3aa5997b66ac1fecbffa620375</id>
<content type='text'>
Test files use Node built-ins (fs, path) which aren't available to the
browser-targeted tsconfig. Excluding *.test.ts from tsc is the standard
Vite/Vitest pattern — vitest handles test type-checking separately.

Also rebuilds web/dist/v3/ to include the CSS overflow fixes.

https://claude.ai/code/session_0141nhxmYfoFPVPZ813K1XFD
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Test files use Node built-ins (fs, path) which aren't available to the
browser-targeted tsconfig. Excluding *.test.ts from tsc is the standard
Vite/Vitest pattern — vitest handles test type-checking separately.

Also rebuilds web/dist/v3/ to include the CSS overflow fixes.

https://claude.ai/code/session_0141nhxmYfoFPVPZ813K1XFD
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove link underline on hover for item titles</title>
<updated>2026-02-21T21:47:32+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-02-21T21:47:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=c64977f17a9d0c73a23a11d69ab090fa0ca48d31'/>
<id>c64977f17a9d0c73a23a11d69ab090fa0ca48d31</id>
<content type='text'>
Removed text-decoration: underline from .item-title:hover in the source
CSS and rebuilt the frontend assets so the compiled dist reflects the change.

https://claude.ai/code/session_011Y2tBL3goxNWHqUaJ8Bpzh
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Removed text-decoration: underline from .item-title:hover in the source
CSS and rebuilt the frontend assets so the compiled dist reflects the change.

https://claude.ai/code/session_011Y2tBL3goxNWHqUaJ8Bpzh
</pre>
</div>
</content>
</entry>
<entry>
<title>Check in production assets for V3 UI</title>
<updated>2026-02-19T03:46:19+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-19T03:46:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=463fe5d8564a48bcba5cd9b9c804f90a6538f5c9'/>
<id>463fe5d8564a48bcba5cd9b9c804f90a6538f5c9</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Improve scroll-to-read robustness and add visual feedback for read items across all themes</title>
<updated>2026-02-19T03:40:46+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-19T03:40:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=8518868ee671c4bc99b27fbda47bb93a1e366eff'/>
<id>8518868ee671c4bc99b27fbda47bb93a1e366eff</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Rebuild production assets after rebase</title>
<updated>2026-02-19T03:26:21+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-19T03:26:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=7a7217d023d8decb433a57300072bb00064ef88d'/>
<id>7a7217d023d8decb433a57300072bb00064ef88d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix mark-as-read regression and add debugging tools</title>
<updated>2026-02-19T03:25:30+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-19T03:07:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=d466cf8a4717e09cef6d8b3c39c06e0935dafba7'/>
<id>d466cf8a4717e09cef6d8b3c39c06e0935dafba7</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Revert polling interval back to 1s</title>
<updated>2026-02-18T22:56:56+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-02-18T22:56:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=0876a683cdc344b200dbd65aa137969a1528c85d'/>
<id>0876a683cdc344b200dbd65aa137969a1528c85d</id>
<content type='text'>
https://claude.ai/code/session_0187FXrbScDSWfbNEk9SfJaj
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
https://claude.ai/code/session_0187FXrbScDSWfbNEk9SfJaj
</pre>
</div>
</content>
</entry>
</feed>
