<feed xmlns='http://www.w3.org/2005/Atom'>
<title>home-sveltekit/src/lib/server/db/groceries.test.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-08T15:06:51Z</updated>
<entry>
<title>Migrate date handling from Date to Temporal API</title>
<updated>2026-09-08T15:06:51Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-09-08T15:06:51Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=bd2f982c489b15ce1165c051fdedf35af979f784'/>
<id>urn:sha1:bd2f982c489b15ce1165c051fdedf35af979f784</id>
<content type='text'>
Routine scheduling, health series, service stamps, session expiry, and
date formatting move to native Temporal (Instant / ZonedDateTime in
UTC), with ISO strings kept at DB and chart boundaries. Ambient types
in src/temporal-ambient.d.ts cover the native runtime; no polyfill.
Observable behavior and stored formats are unchanged.
</content>
</entry>
<entry>
<title>Consolidate duplicated page CSS into app.css, share TestDb type</title>
<updated>2026-09-08T07:12:25Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-09-08T07:12:25Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=7d85a18867ca0fe2310218c63cfc696c0f916171'/>
<id>urn:sha1:7d85a18867ca0fe2310218c63cfc696c0f916171</id>
<content type='text'>
- Move .page-header/.back-link/.input-invalid/.save-status/.btn-done
  (plus hover/variant rules) into app.css as shared route scaffolding;
  delete per-page scoped copies
- Unify drifted values: page-header padding 1rem -&gt; 1.25rem (routine
  page), empty-state spacing 0.75/1.5rem -&gt; 1/2rem (grocery detail),
  save-status margin -0.25rem applied on both pages, back-link margin
  1.5rem -&gt; 1rem (grocery detail); routine page's large Fait button is
  kept via a .btn-done-lg modifier
- Export TestDb from test-helper and use it in the five db/service
  test files to shrink duplicated fixture scaffolding
</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>
<entry>
<title>feat: separate categories table + /categories management page</title>
<updated>2026-07-27T16:31:26Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-07-27T16:31:26Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=e14717b2e7853705469275d64023bb902b195ebb'/>
<id>urn:sha1:e14717b2e7853705469275d64023bb902b195ebb</id>
<content type='text'>
- Categories table (id, name unique) with FK from groceries.category_id
- /categories page for add/delete categories
- Main page uses native &lt;select&gt; dropdown for category
- Categories grouped by name in list/catalog views
- Regenerated drizzle migrations from scratch
</content>
</entry>
<entry>
<title>feat: catalog section + deduplicate items by name</title>
<updated>2026-07-27T15:18:40Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-07-27T15:18:40Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=6722589b515ccee267212cf783fc0ebbaa20cd90'/>
<id>urn:sha1:6722589b515ccee267212cf783fc0ebbaa20cd90</id>
<content type='text'>
- Show all items split into List (unchecked) and Catalog (checked) sections
- Tapping a catalog item unchecks it (returns to list)
- Add action now upserts: unchecks existing item instead of creating duplicate
- UNIQUE constraint on groceries.name as defense-in-depth
- Tests for dedup behavior (insert, re-add from catalog, no-op on list)
</content>
</entry>
</feed>
