<feed xmlns='http://www.w3.org/2005/Atom'>
<title>home-sveltekit/src/lib/server/services/groceries.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-10-05T22:46:53Z</updated>
<entry>
<title>fix: make grocery and reference ordering deterministic</title>
<updated>2026-10-05T22:46:53Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-10-05T22:46:53Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=c915f91fbe8d97201d813c792f4e1fe8c4401e15'/>
<id>urn:sha1:c915f91fbe8d97201d813c792f4e1fe8c4401e15</id>
<content type='text'>
Every list query lacked a tiebreak, so rows sharing a sort key (same-ms
createdAt inserts, tied or NULL quality scores) came back in unspecified
order and bestRef flipped between loads. Add explicit tiebreaks: items
createdAt desc, id desc (newest first); references qualityScore desc,
id asc (first inserted wins ties). Categories were already total
(order, name unique).

Pin the rules with service tests.
</content>
</entry>
<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>feat: drag-to-reorder categories with persistent order</title>
<updated>2026-07-29T13:01:38Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-07-29T13:01:38Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=63e003a718782e2ca3ffcb2d11b0be97560a7259'/>
<id>urn:sha1:63e003a718782e2ca3ffcb2d11b0be97560a7259</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: multi-select and bulk-update category from catalog</title>
<updated>2026-07-29T08:31:36Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-07-29T08:31:36Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=684d3c954e3577a6488101bf5ee85e36439fd53c'/>
<id>urn:sha1:684d3c954e3577a6488101bf5ee85e36439fd53c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: editable name and category in grocery detail page</title>
<updated>2026-07-28T13:29:32Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-07-28T13:29:32Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/home-sveltekit/commit/?id=db2f142aaf98ba36d1e9b17ce8a4299268d1b69b'/>
<id>urn:sha1:db2f142aaf98ba36d1e9b17ce8a4299268d1b69b</id>
<content type='text'>
</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>
