Captain Van's POS
Retail point-of-sale system for Captain Van's store in Roatan, Honduras
Production
Odoo 17.0
Honduras SAR
Docker
What This Project Does
Captain Van's POS is a retail checkout system built on Odoo 17 Community Edition. It runs the point-of-sale terminal for Captain Van's retail store in West End, Roatan, Honduras. The store stocks ~3,700 products and serves ~1,800 customers.
The system handles product lookup, customer management, multi-payment processing (cash + card), receipt printing, and inventory tracking. It includes a custom Honduras SAR module for tax compliance — generating legally-required invoice numbers (CAI system), tracking authorized ranges, and printing compliant receipts with RTN, CAI code, and ISV tax breakdowns.
It runs as a Docker containerized application on OVH3 (production server) and is accessible via HTTPS at pos.ipnoelp.com.
Architecture
Cloudflare DNS
pos.ipnoelp.com → 15.204.11.95
↓ HTTPS
Nginx + Certbot
OVH3 :443 → :8069
Let's Encrypt SSL
↓ HTTP proxy
captainvans-odoo
Odoo 17.0 :8069
POS + Accounting + Inventory
captainvans-odoo-db
PostgreSQL 15 :5435
DB: captain-van-pos
↑ mounted volumes
Custom Addons
honduras_sar + captainvans_defaults
Filestore
/var/lib/odoo/filestore/
Images, attachments
How It Works
1
Cashier opens POS — Logs in at pos.ipnoelp.com, enters PIN (5098), opens POS session
2
Ring up products — Touchscreen product catalog with categories, search by name/barcode, 3,710 products loaded
3
Apply taxes — ISV 15% standard, 18% luxury (alcohol/tobacco), 0% exempt — auto-calculated per product
4
Accept payment — Cash or card via compact payment screen, confirmation dialog before validate
5
Print receipt — SAR-compliant receipt with CAI, RTN, invoice number, authorized range, and tax breakdown
6
Close session — End-of-day summary with tax report, cash reconciliation
Infrastructure
| Server | Role | IP | Access |
| OVH3 |
Production |
15.204.11.95 |
ssh ovh3 |
| OVH2 |
Dev (n8n, NocoDB, etc.) |
15.204.10.51 |
ssh ovh2 |
| jazclaude |
Dev / Code / Git |
10.0.3.14 (OVH5) |
ssh jazclaude |
Production URL: https://pos.ipnoelp.com
SSL: Let's Encrypt via Certbot (auto-renew, expires 2026-06-29)
Reverse Proxy: Nginx on OVH3 → captainvans-odoo:8069
Project Path (OVH3): /opt/captainvans-odoo/
Project Path (jazclaude): /home/dev/code/CaptainVans-Odoo/
Code Map
CaptainVans-Odoo/
addons/
honduras_sar/ ← CAI invoice compliance module
models/cai_authorization.py CAI range management
models/pos_session.py POS session overrides
models/res_partner.py Customer RTN field
controllers/tax_summary.py Tax report endpoint
wizard/tax_summary_wizard.py Tax report wizard
views/ XML views for CAI, partner, reports
captainvans_defaults/ ← Store defaults module
models/res_users.py Default user config
config/
odoo.conf Odoo server configuration
data/
odoo_products.csv 3,710 products
odoo_customers.csv 1,821 customers
odoo_suppliers.csv 36 suppliers
documentation/ Deployment, user guide, SAR compliance docs
docker-compose.yml Container orchestration
import_data.py XML-RPC data import script
convert_data.py OSPOS → Odoo CSV converter
Tech Stack
Application
Odoo 17.0 Community
Full-featured ERP/POS with built-in touchscreen interface, inventory, accounting. Chosen over OSPOS and Chromis for better touch UX.
Database
PostgreSQL 15
Odoo's native database. Runs in Docker (postgres:15-alpine) on port 5435.
Infrastructure
Docker Compose
Two containers (odoo + postgres) with named volumes for data persistence and config/addons bind mounts.
Reverse Proxy
Nginx + Certbot
Handles HTTPS termination with auto-renewed Let's Encrypt certificates. Proxies to Odoo on port 8069.
DNS
Cloudflare
A record: pos.ipnoelp.com → 15.204.11.95 (DNS only, no proxy).
Custom Module
Honduras SAR
Python/XML Odoo addon for CAI invoice compliance. Manages authorized number ranges, generates legal invoice format (001-001-01-NNNNNNNN).
Current State
| Item | Value |
| Status | Production on OVH3 |
| URL | https://pos.ipnoelp.com |
| Login | murray@captainvans.com |
| POS PIN | 5098 |
| Products | 3,710 imported |
| Customers | 1,821 imported |
| SSL Expires | 2026-06-29 (auto-renew) |
| Last Updated | 2026-03-31 |
| GitHub Branch | feature/payment-screen-compact |
Recent Changes
2026-03-31
Migration from OVH2 to OVH3 (Production)
- Moved Captain Van's Odoo from OVH2 (dev) to OVH3 (production)
- Set up Nginx + Certbot for HTTPS on OVH3
- Updated DNS: pos.ipnoelp.com → 15.204.11.95 (OVH3)
- Shut down Captain Van's containers on OVH2
- Removed Caddy reverse proxy entry from OVH2
2026-03-12
Migration from OVH3 to OVH2 + HTTPS + Fixes
- Initial migration from OVH3 to OVH2
- Set up HTTPS via Caddy reverse proxy with pos.ipnoelp.com
- Fixed POS receipt logo (filestore regeneration)
- Changed admin login to murray@captainvans.com, set POS PIN 5098
- Compact payment screen layout with validation confirmation
- Fixed receipt to hide unused payment methods, show CHANGE only for cash
2026-02-27
Initial Setup
- Git repository created, Odoo 17 + PostgreSQL 15 Docker environment
- 3,710 products, 1,821 customers, 36 suppliers imported
- Honduras SAR module built (CAI compliance)
- Taxes configured: ISV 15%, 18%, Exempt
Go Deeper