<feed xmlns='http://www.w3.org/2005/Atom'>
<title>neko/models/feed, branch claude/add-css-themes-QGTmP</title>
<subtitle>self-hosted, single user rss reader</subtitle>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/'/>
<entry>
<title>Apply SQL injection fix and repair CI config from fix-sql-injection branch</title>
<updated>2026-02-18T04:55:12+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-18T04:55:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=8eb86cdc49c3c2f69d8a64f855220ebd68be336c'/>
<id>8eb86cdc49c3c2f69d8a64f855220ebd68be336c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Backend: Fix linting issues, improve error handling, and replace magic numbers</title>
<updated>2026-02-15T21:48:34+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-15T21:48:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=2327f93098b4278c93055a96224ae82cef60b083'/>
<id>2327f93098b4278c93055a96224ae82cef60b083</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Create 'make check' unified workflow and fix various lint issues</title>
<updated>2026-02-15T16:41:08+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-15T16:41:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=ea5d89b47a5424fc81e99934183c0ad7a0cf2426'/>
<id>ea5d89b47a5424fc81e99934183c0ad7a0cf2426</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>security: add HTTP security headers (fixing NK-7xuajb)</title>
<updated>2026-02-14T17:20:40+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-14T17:20:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=08032aab10f0e1429d25ecae1acf6c40d63e9ff4'/>
<id>08032aab10f0e1429d25ecae1acf6c40d63e9ff4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>security: mitigate SSRF in image proxy and feed fetcher (fixing NK-0ca7nq)</title>
<updated>2026-02-14T17:17:56+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-14T17:17:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=cac85dc06b519d9bd6db4d017d501dffbbd8bac4'/>
<id>cac85dc06b519d9bd6db4d017d501dffbbd8bac4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>chore: cleanup ignored files</title>
<updated>2026-02-14T02:43:55+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-14T02:43:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=b7f2a8ecf06a3ae190cab9a26e157dd2c586f7e7'/>
<id>b7f2a8ecf06a3ae190cab9a26e157dd2c586f7e7</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>refactor(backend): improve testability and add tests (NK-6q9nyg)</title>
<updated>2026-02-14T02:43:03+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-14T02:43:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=21b4eec6c1e096573bcd5f2079bc21e23a960621'/>
<id>21b4eec6c1e096573bcd5f2079bc21e23a960621</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>fix(crawler): prevent panic on missing Content-Type and use custom UA (NK-uywybr)</title>
<updated>2026-02-14T01:03:02+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-14T01:03:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=ddcbfc92b9c7b1c932c4bdcadf393b95aa0adc0c'/>
<id>ddcbfc92b9c7b1c932c4bdcadf393b95aa0adc0c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>wip: tui updates (buggy)</title>
<updated>2026-02-13T05:35:46+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-13T05:35:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=de96851d8eb0a0b45d7bf0cee67339fea54349f0'/>
<id>de96851d8eb0a0b45d7bf0cee67339fea54349f0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add comprehensive test suite — 81% cross-package coverage</title>
<updated>2026-02-13T03:55:05+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@adammathes.com</email>
</author>
<published>2026-02-13T03:55:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=16186a344a7b61633cb7342aac37ac56ad83d261'/>
<id>16186a344a7b61633cb7342aac37ac56ad83d261</id>
<content type='text'>
Bug fixes:
- config: remove unused log import
- item: fix Printf format %d-&gt;%t for boolean ReadState
- util: update stale config.Read -&gt; config.Init, remove config.Config.DBServer

Test files added:
- config/config_test.go: Init, readConfig, addDefaults (100%)
- vlog/vlog_test.go: Printf, Println verbose/silent (100%)
- models/db_test.go: InitDB tests
- models/feed/feed_test.go: CRUD, filter, Categories, NewFeed, ResolveFeedURL (87%)
- models/item/item_test.go: CRUD, Filter with category/search/starred, rewriteImages (71%)
- exporter/exporter_test.go: all export formats (91%)
- importer/importer_test.go: InsertIItem, ImportJSON (90%)
- crawler/crawler_test.go: GetFeedContent, CrawlFeed, CrawlWorker, Crawl (89%)
- web/web_test.go: auth, login/logout, stream, item, feed, category,
  export, crawl, imageProxy handlers (77%)

Remaining 0% functions require HTTP/rice.MustFindBox/main entry and
can't be unit tested without refactoring (see tickets NK-gqkh96, NK-6q9nyg).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Bug fixes:
- config: remove unused log import
- item: fix Printf format %d-&gt;%t for boolean ReadState
- util: update stale config.Read -&gt; config.Init, remove config.Config.DBServer

Test files added:
- config/config_test.go: Init, readConfig, addDefaults (100%)
- vlog/vlog_test.go: Printf, Println verbose/silent (100%)
- models/db_test.go: InitDB tests
- models/feed/feed_test.go: CRUD, filter, Categories, NewFeed, ResolveFeedURL (87%)
- models/item/item_test.go: CRUD, Filter with category/search/starred, rewriteImages (71%)
- exporter/exporter_test.go: all export formats (91%)
- importer/importer_test.go: InsertIItem, ImportJSON (90%)
- crawler/crawler_test.go: GetFeedContent, CrawlFeed, CrawlWorker, Crawl (89%)
- web/web_test.go: auth, login/logout, stream, item, feed, category,
  export, crawl, imageProxy handlers (77%)

Remaining 0% functions require HTTP/rice.MustFindBox/main entry and
can't be unit tested without refactoring (see tickets NK-gqkh96, NK-6q9nyg).
</pre>
</div>
</content>
</entry>
</feed>
