Roadmap covers all features across talleres, refaccionarias, and distribuidores.
Includes competitive comparison vs Pitz, Meru, Jetz, and traditional POS.
Pricing strategy and feature differentiation documented.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Multi-tenant POS system for Mexican auto parts stores (refaccionarias):
- DB-per-tenant isolation with template versioning
- PWA with offline-first via IndexedDB + Service Worker
- Inventory by operations (append-only, no conflicts)
- CFDI 4.0 via Horux360 API with offline queue
- Accounting with auto journal entries
- Role-based permissions (owner/admin/cashier/warehouse/accountant)
- Themeable frontend via CSS custom properties
- 22 table schemas defined, offline edge cases addressed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
If no qualified round ($500K+ USD) is raised within 12 months,
investors can choose to: (A) keep the SAFE, or (B) convert to
a loan at 15% annual interest payable in 3 months.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each race checkpoint now includes specific feature deliverables:
- Mes 1: CFDI 4.0, VIN decoder, carrito multi-bodega
- Mes 3: Chatbot IA, WhatsApp API, SaaS refaccionarias
- Mes 6: Kanban, BNPL/APLAZO, programa de lealtad
- Mes 9: Sync ERP, flotillas, alianza nacional
- Mes 12: ML/Amazon, IA por voz, API pública
- Mes 15: PWA, escala
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
13-slide F&F round presentation with roadmap, competitive landscape,
and updated product features. Accessible at /pitch endpoint.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- README.md: project overview, features, quick start, API overview
- docs/API.md: full endpoint reference with examples
- docs/ARCHITECTURE.md: system diagram, DB schema, data pipeline, auth flow
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- import_phase1.py: skip AFT- part creation when no OEM data
- link_vehicle_parts.py: remove AFT- fallback lookup in part cache
- import_tecdoc_parts.py: add VW to TOP_BRANDS list
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Migrates 357K AFT-prefixed parts from parts table to aftermarket_parts.
Parses part_number and manufacturer from AFT-{partNo}-{manufacturer} format.
Links to OEM parts via cross-references. Batch processing with progress.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New Sistema > Usuarios section with user listing, role badges
(ADMIN=blue, OWNER=purple, TALLER=green, BODEGA=orange),
activate/deactivate toggle, and pending users badge count.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Shows business name + logout button when authenticated.
Shows login link when not authenticated. Adds bodega to nav links.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Login form with role-based redirect (ADMIN→demo, BODEGA→bodega, TALLER→demo).
Register form for TALLER/BODEGA with admin approval required.
Includes authFetch() wrapper with automatic token refresh.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implements hash_password, check_password, create_access_token,
create_refresh_token, decode_token, and require_auth() decorator
for role-based endpoint protection.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add PyJWT, bcrypt, openpyxl to requirements.
Add JWT_SECRET, JWT_ACCESS_EXPIRES, JWT_REFRESH_EXPIRES to config.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix console/main.py: import DB_URL instead of missing DB_PATH
- Add sqlalchemy text() import for connection test
- Replace file-exists check with actual PostgreSQL connection test
- Mask password in startup banner
- Add docs/METABASE_ACTIONS.md: complete guide for data entry via
Metabase Actions (models, forms, dashboard layout, workflows)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Backend (server.py):
- Fix N+1 query in /api/diagrams/<id>/parts with batch cross-ref query
- Add LIMIT safety nets to 15 endpoints (50-5000 per data type)
- Add pagination to /api/vehicles, /api/model-year-engine, /api/vehicles/<id>/parts, /api/admin/export
- Optimize search_vehicles() EXISTS subquery to JOIN
- Restrict static route to /static/* subdir (security fix)
- Add detailed=true support to /api/brands and /api/models
Frontend:
- Extract shared CSS into shared.css (variables, reset, buttons, forms, scrollbar)
- Create shared nav.js component (logo + navigation links, auto-highlights)
- Update all 4 HTML pages to use shared CSS and nav
- Update JS to handle paginated API responses
Data quality:
- Fix cross-reference source field: map 72K records from catalog names to actual brands
- Fix aftermarket_parts manufacturer_id: correct 8K records with wrong brand attribution
- Delete 98MB backup file, orphan records, and garbage cross-references
- Add import scripts for DAR, FRAM, WIX, MOOG, Cartek catalogs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove the Rich-based textual renderer and all --mode modern references.
The console now runs exclusively in VT220 curses mode (green on black).
No external dependencies required.
Removed: console/renderers/textual_renderer.py, --mode flag, DEFAULT_MODE
Updated: main.py, config.py, README.md, console/README.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Both renderers now draw the menu inside a centered box with:
- Rounded corners (modern) / box-drawing (VT220)
- Title centered inside the box top
- Section separators as horizontal lines within the box
- Selected item highlighted across the full box width
- Vertical and horizontal centering on screen
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two bugs fixed:
1. Arrow keys detected as ESC: sys.stdin.read(1) uses Python's internal
buffer, so after reading ESC byte, the remaining escape sequence
bytes ([A for up-arrow) were in Python's buffer but not visible to
select.select() on the OS fd. Switched to os.read(fd, 1) which
reads directly from the file descriptor, bypassing Python's buffer.
2. Footer positioned wrong: draw_footer() counted buffer items to
calculate padding, but a Rich Table renders as multiple lines.
Added _line_count tracker with _add_line() and _add_lines(n) so
footer padding is calculated from actual rendered line count.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Major issues fixed:
- Rich printed directly to stdout causing visible flicker on every redraw
- get_key() toggled raw mode per keypress causing glitches and slowness
- No alternate screen buffer — output contaminated terminal scrollback
Rewrite approach:
- Use alternate screen buffer (ESC[?1049h) for clean enter/exit
- Persistent raw mode for entire session instead of per-keypress toggle
- Buffer all Rich renderables during render cycle, flush once in refresh()
- Render to StringIO then write entire frame in single sys.stdout.write()
- Reduced ESC sequence timeout from 50ms to 20ms for snappier response
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Curses waits up to 1 second after ESC to distinguish it from escape
sequences (arrow keys, F-keys). Set ESCDELAY=25 before curses.initscr()
so ESC responds near-instantly while still handling escape sequences.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>