David Beccue c882ab5d43 Restructure /admin into tabbed area with password gate
Backups moves under /admin/backups; new Reports and Categories tabs join
it (categories migrated from the top-level /categories route). The
dashboard's SKU/low-stock/inventory-value cards move into Reports, which
also adds sales totals and a top-selling parts list.

A 5-minute sliding-cookie password gate (27182818) now wraps every
/admin request, including the backup download endpoint, via a
hooks.server.js auth check. The login page sits at /admin/login and
escapes the admin tab chrome via a layout reset.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 15:47:42 +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%