- Filter chips for in-use categories with OR semantics; "All" chip shown
when nothing is selected.
- Search input filters as the user types (150 ms debounce, replaceState
so back-button stays useful).
- Fix sort indicators: the `arrow()` helper read `sort`/`dir` from a
plain function, which Svelte's static dep tracking doesn't trace —
the ▲/▼ never updated on client-side sorts. Made it a reactive `$:`
declaration.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
SvelteKit 2 + Svelte 4 + adapter-node, SQLite via better-sqlite3 (WAL,
foreign keys on). Bilingual EN/Тоҷикӣ throughout, locale persisted in
localStorage.
Pages: dashboard (totals, low stock, recent movements), parts list with
search and sort, part create/edit, record movement (in/out/adjust with
smart unit-price and adjust-quantity prefill), suppliers list with
inline add.
Schema: categories, suppliers, parts (with _en/_tg name+description
columns, dirams for money), stock_movements with check on movement_type.
On-hand updates are done in JS inside a transaction with the movement
insert.
Dockerized dev: docker compose, named project, bind-mounted data/ for
DB persistence. Seed contains 6 categories, 4 suppliers, 31 realistic
parts (Lada / Nexia / Opel / Toyota bias).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>