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

ServerRoleIPAccess
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

ItemValue
StatusProduction on OVH3
URLhttps://pos.ipnoelp.com
Loginmurray@captainvans.com
POS PIN5098
Products3,710 imported
Customers1,821 imported
SSL Expires2026-06-29 (auto-renew)
Last Updated2026-03-31
GitHub Branchfeature/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