David Beccue 8cbaa55b48 Soft-delete parts and hide SKU/location/description from the UI
Deleting a part used to be impossible. Hard delete would cascade
stock_movements (FK ON DELETE CASCADE) and orphan invoice_lines, losing
the audit trail. Instead, the part detail page now has a Delete button
that flips active=0; listParts and categoriesWithParts filter on active,
but historical joins (recentMovements, linesFor, topSellingParts) stay
unfiltered so old movements and invoices still render the part name.
The existing active checkbox on the detail page doubles as a reactivate
switch.

SKU, location, and description fields are removed from every UI surface
(forms, /parts table, dashboard, movement/invoice pickers, invoice line
labels, top-sellers report). None were load-bearing — barcode + name +
category already cover lookup. The SKU column is kept in the DB
(NOT NULL UNIQUE) and auto-stamped server-side as `SKU-{id}` after
insert, so the change is reversible without a migration. updatePart no
longer writes SKU, freezing it after creation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 20:49:53 +05:00
2026-05-18 09:38:20 +05:00

AvtoAmbor

Simple auto-parts inventory for a single shop. SvelteKit + SQLite. UI is bilingual (English / Тоҷикӣ).

Prerequisites

  • Docker + Docker Compose

Everything else (Node, npm, native build tools for better-sqlite3) runs inside the container.

Quickstart

make install     # install dependencies inside the container
make db-init     # create data/avtoambor.db with schema + seed
make run         # dev server at http://localhost:3000

make help lists every target.

Production

Build with make build, copy the build/ directory plus node_modules and data/avtoambor.db to the Windows host, then run:

node build/index.js

The server listens on port 3000 by default. Open http://localhost:3000 in the browser on that machine.

Data

The SQLite database lives at data/avtoambor.db. The data/ directory is gitignored and bind-mounted into the container, so the DB file persists on the host.

  • make db-init — create the DB if it doesn't exist (does nothing otherwise).
  • make db-reset — delete and recreate the DB (asks for confirmation).
Description
Simple inventory control system for auto shop
Readme 52 MiB
Languages
Svelte 41.9%
JavaScript 35.7%
HTML 12.3%
Shell 5.4%
Batchfile 2.3%
Other 2.4%