| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- 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 -> 1.25rem (routine
page), empty-state spacing 0.75/1.5rem -> 1/2rem (grocery detail),
save-status margin -0.25rem applied on both pages, back-link margin
1.5rem -> 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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
labels, and drizzle migrate
- 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
|
| |
|
|
|
|
|
|
| |
- Categories table (id, name unique) with FK from groceries.category_id
- /categories page for add/delete categories
- Main page uses native <select> dropdown for category
- Categories grouped by name in list/catalog views
- Regenerated drizzle migrations from scratch
|
|
|
- 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)
|