- BOM paste: auto-detect columns by content (price, qty, PN, description); handles $5,114.00 and European comma-decimal formats - LOT input: HTML5 datalist rebuilt on each renderBOMTable from allComponents; oninput updates data only (no re-render), onchange validates+resolves - BOM persistence: PUT handler explicitly marshals VendorSpec to JSON string (GORM Update does not reliably call driver.Valuer for custom types) - BOM autosave after every resolveBOM() call - Pricing tab: async renderPricingTab() calls /api/quote/price-levels for all resolved LOTs directly — Estimate prices shown even before cart apply - Unresolved PNs pushed to qt_vendor_partnumber_seen via POST /api/sync/partnumber-seen (fire-and-forget from JS) - sync.PushPartnumberSeen(): upsert with ON DUPLICATE KEY UPDATE last_seen_at - partnumber_books: pull ALL books (not only is_active=1); re-pull items when header exists but item count is 0; fallback for missing description column - partnumber_books UI: collapsible snapshot section (collapsed by default), pagination (10/page), sync button always visible in header - vendorSpec handlers: use GetConfigurationByUUID + IsActive check (removed original_username from WHERE — GetUsername returns "" without JWT) - bible/09-vendor-spec.md: updated with all architectural decisions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
QuoteForge Bible — Architectural Documentation
The single source of truth for architecture, schemas, and patterns.
Table of Contents
| File | Topic |
|---|---|
| 01-overview.md | Product: purpose, features, tech stack, repository structure |
| 02-architecture.md | Architecture: local-first, sync, pricing, versioning |
| 03-database.md | DB schemas: SQLite + MariaDB, permissions, indexes |
| 04-api.md | API endpoints and web routes |
| 05-config.md | Configuration, environment variables, paths, installation |
| 06-backup.md | Backup: implementation, rotation policy |
| 07-dev.md | Development: commands, code style, guardrails |
Bible Rules
Every architectural decision must be recorded in the Bible.
Any change to DB schema, data access patterns, sync behavior, API contracts, configuration format, or any other system-level aspect — the corresponding
bible/file must be updated in the same commit as the code.On every user-requested commit, the Bible must be reviewed and updated in that commit.
The Bible is the single source of truth for architecture. Outdated documentation is worse than none.
Documentation language: English.
All files in
bible/are written and updated in English only. Mixing languages is not allowed.
Quick Reference
Where is user data stored?
SQLite → ~/Library/Application Support/QuoteForge/qfs.db (macOS). MariaDB is sync-only.
How to look up a price for a line item?
local_pricelist_items → by pricelist_id from config + lot_name. Prices are never taken from local_components.
Pre-commit check?
go build ./cmd/qfs && go vet ./...
What must never be restored? cron jobs, admin pricing, alerts, stock import, importer utility — all removed intentionally.
Where is the release changelog?
releases/memory/v{major}.{minor}.{patch}.md