Releases: codexofc/cigarspace
Releases · codexofc/cigarspace
Cigarspace 1.0.0
Cigarspace 1.0.0 — initial public release
Cigarspace is an open-source knowledge platform for the global cigar market. It ingests merchant catalogues and customs publications, links them with a hybrid pgvector + trigram matcher, and exposes the canonical knowledge through a public HTTP API and a React admin UI.
What's inside
- Ingestion — multi-merchant scraping (mistercigar.com, cigarpassion.ch) with a parser registry by domain, and a resilient tiered fetcher (direct → HTTP proxy → ProtonVPN WireGuard sidecar → Tor SOCKS5).
- Domain model — canonical Brand / CigarLine / Cigar / Package / Media entities, with explicit blend, tasting and dimensions value objects.
- Customs ingestion — jurisdiction-neutral
CustomsSource/CustomsPublication/CustomsPriceEntry. France adapter targets the Douane FR open-data CSV. - Hybrid matching —
pgvector+ MPNet 768-d embeddings combined with trigram and structured signals via Reciprocal Rank Fusion. Human verdicts (HUMAN_ACCEPTED/HUMAN_REJECTED) preserved across re-matches. - Public HTTP API — FastAPI service: OAuth2 password grant with rotating refresh tokens, RFC 7807 errors, ETag/304, RFC 5988 pagination, OpenAPI 3.1 auto-generated.
- Web admin UI — React + Vite + TypeScript + shadcn/ui, with HttpOnly cookie auth, dashboard, cigar browser, hybrid search, and review queue.
- i18n —
react-intlwith English and French locales, in-app language switcher. - Docker — multi-stage
api,web, andall-in-oneimages (light + demo variants);docker composetopology with Postgres (pgvector), Redis, SeaweedFS. - CI/CD — GitHub Actions workflows for lint+test, multi-arch Docker buildx → GHCR, release-please, CodeQL, OpenSSF Scorecard.
Getting started
git clone https://github.com/codexofc/cigarspace.git
cd cigarspace
cp .env.example .env
docker compose -f docker/compose.yml up -dSee the README, architecture docs and ADRs.
Licensing
Sources distributed under PolyForm Noncommercial 1.0.0. A parallel commercial path is documented in COMMERCIAL_LICENSE.md.