7b15f18e59ed106f3a13ff9ecf5f973de599a041
Phase 3a backend API for point-of-sale. Includes:
Schema (packages/backend/src/db/schema/pos.ts):
- pgEnums: transaction_type, transaction_status, payment_method,
discount_type, discount_applies_to, drawer_status
- Tables: transaction, transaction_line_item, discount,
discount_audit, drawer_session
- Transaction links to accounts, repair_tickets, repair_batches
- Line items link to products and inventory_units
Tax system:
- tax_rate + service_tax_rate columns on location
- tax_category enum (goods/service/exempt) on product
- Tax resolves per line item: goods→tax_rate, service→service_tax_rate,
exempt→0. Repair line items map: part→goods, labor→service
- GET /tax/lookup/:zip stubbed for future API integration (TAX_API_KEY)
Services (export const pattern, matching existing codebase):
- TransactionService: create, addLineItem, removeLineItem, applyDiscount,
recalculateTotals, complete (decrements inventory), void, getReceipt
- DiscountService: CRUD + listAll for dropdowns
- DrawerService: open/close with expected balance + over/short calc
- TaxService: getRateForLocation (by tax category), calculateTax
Routes:
- POST/GET /transactions, GET /transactions/:id, GET /transactions/:id/receipt
- POST /transactions/:id/line-items, DELETE /transactions/:id/line-items/:id
- POST /transactions/:id/discounts, /complete, /void
- POST /drawer/open, POST /drawer/:id/close, GET /drawer/current, GET /drawer
- CRUD /discounts + GET /discounts/all
- GET /products/lookup/upc/:upc (barcode scanner support)
All routes gated by pos.view/pos.edit/pos.admin + withModule('pos').
POS module already seeded in migration 0026.
Still needed: bun install, drizzle-kit generate + migrate, tests, lint.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
LunarFront
Small business management platform — POS, inventory, rentals, scheduling, repairs, and accounting.
Built by Lunarfront Tech LLC.
Tech Stack
- Runtime: Bun
- Language: TypeScript (end-to-end)
- API: Fastify + Drizzle ORM + PostgreSQL 16
- Frontend: React + TanStack Router + TanStack Query
- Validation: Zod (shared schemas)
- Queue/Cache: BullMQ + Valkey 8
- Monorepo: Turborepo + Bun workspaces
Quick Start
bun install
cp .env.example .env # configure DATABASE_URL, REDIS_URL, JWT_SECRET
cd packages/backend && bunx drizzle-kit migrate
bun run dev # starts backend (:8000) + admin UI (:5173)
Packages
| Package | Description |
|---|---|
packages/backend |
Fastify API server |
packages/admin |
Admin UI (React + Vite) |
packages/shared |
Zod schemas, types, shared utils |
Documentation
| Doc | Description |
|---|---|
| Setup | Prerequisites, environment, installation, running |
| Architecture | Monorepo structure, backend/frontend design, state management |
| API Reference | All endpoints, pagination, auth, permissions |
| Database | Schema overview, migrations, multi-tenancy |
| Testing | Test runner, suites, writing tests, assertions |
Commands
bun run dev # start all packages in dev mode
bun run test # run all tests
bun run lint # lint all packages
bun run format # format with Prettier
License
Proprietary. All rights reserved.
Description
Languages
TypeScript
99.2%
Shell
0.5%
CSS
0.2%