<feed xmlns='http://www.w3.org/2005/Atom'>
<title>home-sveltekit/src/lib/server/services/validation.ts, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://git.kagamino.dev/home-sveltekit/atom?h=main</id>
<link rel='self' href='https://git.kagamino.dev/home-sveltekit/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/'/>
<updated>2026-09-30T20:13:07Z</updated>
<entry>
<title>Allow granular routine frequencies like 5/2w</title>
<updated>2026-09-30T20:13:07Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-09-30T20:13:07Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=a725d4c7d28fee701b6997cc46cffddefbcd26bf'/>
<id>urn:sha1:a725d4c7d28fee701b6997cc46cffddefbcd26bf</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Compress comments to terse single lines within line width</title>
<updated>2026-09-25T07:10:31Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-09-25T07:10:31Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=760a61001edafb462ca9c7f5bc8013f31fb15a5c'/>
<id>urn:sha1:760a61001edafb462ca9c7f5bc8013f31fb15a5c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Deduplicate routine actions and badges across project routes</title>
<updated>2026-09-08T06:57:08Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-09-08T06:57:08Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=4b2b964283075712de98743720ff3e31370ddc8e'/>
<id>urn:sha1:4b2b964283075712de98743720ff3e31370ddc8e</id>
<content type='text'>
- Share edit/complete/archive form actions in routine-actions.ts; route
  servers become thin wrappers (strictest guard semantics in one place)
- Move parseFrequencyDays into validation.ts
- Extract ScoreBadge/StatusBadge components; use on project pages and
  the home page instead of duplicated scoreClass/statusClass helpers
- Fix archiveProject calling the routine archive with the project id
</content>
</entry>
<entry>
<title>refactor: services layer, valibot validation, shared CSS utilities, aria labels, and drizzle migrate</title>
<updated>2026-07-28T13:07:57Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-07-28T13:07:57Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=04fabf115ccea31ac504b06cc51d78423b697f60'/>
<id>urn:sha1:04fabf115ccea31ac504b06cc51d78423b697f60</id>
<content type='text'>
- Extract groceries/categories/references services with db injection
- Add valibot for form validation and safe numeric id parsing
- Fix category delete FK behavior with onDelete: set null + migration
- Replace custom migrate.js with drizzle-orm/libsql/migrator
- Add shared CSS utility classes in app.css (forms, lists, buttons)
- Add aria-pressed and aria-label on interactive elements
- Remove redundant app.css imports and unused /stores import
- Add integration tests for all services using drizzle migrate helper
- Remove smoke test; add db:migrate and db:studio scripts
</content>
</entry>
</feed>
