DEMO Demo Public demonstration system.

Release history

version text
0.12.9 Security fixes for payments: subscription terms only change after a confirmed payment, plan changes cancel the old subscription, refunds stay final, and Stripe amounts are checked
0.12.8 Photo identify can use the self-hosted recognizer service (image + OCR) where enabled, with the built-in matcher as fallback; disabled by default
0.12.7 Inline i18n QA fixes: legacy texts archived before the 0.11.39 move, CSV formula guard aligned with export, API text import needs a single-use preview token, staged imports cleaned up hourly
0.12.6 Privacy page: confirmed identify photos are used as training material for Purofolio's own image recognition models; stored privately, not shared with third parties, subject to retention, deletable on request
0.12.5 Identify photos of unconfirmed attempts are now deleted after 90 days by default (keep forever only when an admin sets 0); member-confirmed identify photos no longer count toward the 5-photo limit and never block admin uploads
0.12.4 Deploy 5.1.0: VPS runner mode (systemd job, release tags X.Y.Z only on PROD, snapshots), destructive DB steps locked on productive environments (typed OVERWRITE <ENV>), DB credentials from server.env, identify-rehash after every deploy
0.12.3 Scan button: on phones it opens the camera directly (plus "Choose from gallery"), on desktops with a webcam a live camera dialog; photos are resized to 1600 px JPEG without metadata in the browser before upload
0.12.2 Photo identify follow-ups: old public identify-pending photos move to private storage, iPhone HEIC photos are converted in the browser, generic stock photos stay out of the matching index, new privacy page in all 6 languages
0.12.1 Photo identify Phase 0: every catalog photo counts with all its fingerprints (same type compared only), OCR/HEIC skip cleanly without proc_open, "Is it this cigar?" with yes / pick another / none, confirmed photos become private reference photos
0.12.0 Release iteration: docs consolidated, schema baseline and one reference seeder, dead code out, CSP-safe confirmations, HTTP hardening, self-hosted fonts, lighter images, Markdown editor with toolbar, upload icons, SEO (titles, meta, JSON-LD, sitemap)
0.11.40 UI texts and content as CSV: export all or one language, import with a dry run (new, changed, conflicts, errors) and confirm; keys and placeholders validated, formula-injection guard, same rights; old language pack removed from import packages
0.11.39 Inline text & language management: every UI text and the managed descriptions of shops, brands, manufacturers and cigars are editable in place (edit dock, edit mode, copy to languages, undo, rollback); edits are audit-logged and publish immediately

Legal notice

Responsible for this website:

Creabyte
creabyte.com
Bern, Switzerland

Full legal notice (Impressum): creabyte.com/impressum

Content is provided without warranty. Swiss law applies. Venue: Bern.

Privacy

How we handle personal data, photos, cookies and emails is described in the privacy policy: Privacy policy

What’s new

Version Summary
0.12.9 Security fixes for payments: subscription terms only change after a confirmed payment, plan changes cancel the old subscription, refunds stay final, and Stripe amounts are checked
0.12.8 Photo identify can use the self-hosted recognizer service (image + OCR) where enabled, with the built-in matcher as fallback; disabled by default
0.12.7 Inline i18n QA fixes: legacy texts archived before the 0.11.39 move, CSV formula guard aligned with export, API text import needs a single-use preview token, staged imports cleaned up hourly
0.12.6 Privacy page: confirmed identify photos are used as training material for Purofolio's own image recognition models; stored privately, not shared with third parties, subject to retention, deletable on request
0.12.5 Identify photos of unconfirmed attempts are now deleted after 90 days by default (keep forever only when an admin sets 0); member-confirmed identify photos no longer count toward the 5-photo limit and never block admin uploads
0.12.4 Deploy 5.1.0: VPS runner mode (systemd job, release tags X.Y.Z only on PROD, snapshots), destructive DB steps locked on productive environments (typed OVERWRITE <ENV>), DB credentials from server.env, identify-rehash after every deploy
0.12.3 Scan button: on phones it opens the camera directly (plus "Choose from gallery"), on desktops with a webcam a live camera dialog; photos are resized to 1600 px JPEG without metadata in the browser before upload
0.12.2 Photo identify follow-ups: old public identify-pending photos move to private storage, iPhone HEIC photos are converted in the browser, generic stock photos stay out of the matching index, new privacy page in all 6 languages
0.12.1 Photo identify Phase 0: every catalog photo counts with all its fingerprints (same type compared only), OCR/HEIC skip cleanly without proc_open, "Is it this cigar?" with yes / pick another / none, confirmed photos become private reference photos
0.12.0 Release iteration: docs consolidated, schema baseline and one reference seeder, dead code out, CSP-safe confirmations, HTTP hardening, self-hosted fonts, lighter images, Markdown editor with toolbar, upload icons, SEO (titles, meta, JSON-LD, sitemap)
0.11.40 UI texts and content as CSV: export all or one language, import with a dry run (new, changed, conflicts, errors) and confirm; keys and placeholders validated, formula-injection guard, same rights; old language pack removed from import packages
0.11.39 Inline text & language management: every UI text and the managed descriptions of shops, brands, manufacturers and cigars are editable in place (edit dock, edit mode, copy to languages, undo, rollback); edits are audit-logged and publish immediately
0.11.38 Database name always from config.local.php (separate PROD/INT databases): backup/restore use the configured connection incl. DB_SOCKET, dumps carry no database name, restore drops USE/CREATE DATABASE and refuses db-qualified tables
0.11.37 Accent/umlaut-insensitive city typeahead (Zu/Zü/Zue/Zuer → Zürich, neuch → Neuchâtel) via cities.search_name/search_name_alt + migration backfill; shop/brand/manufacturer/admin city search uses the same matcher; tests run on MySQL only (dedicated *_test D
0.11.36 Green test suite: rating edit history no longer fails on duplicate public_id (500 on comment edit); catalog seeders and import/export use canonical chd instead of legacy sde locale key; public_id collision probe fix; stale tests updated for opaque API ids
0.11.35 Home redesign: search is the one primary action; photo identify as camera button in the search bar (one tap for members); quiet explore links; version removed from hero copy; stronger hero scrim; clearer labels in all locales; plain identify help copy
0.11.34 Admin P2 polish: wrap+sticky remaining bare tables; system ZIP/SQL restore file-pick; brands/manufacturers shops-parity toolbar; public btn-ghost → .btn.ghost
0.11.33 Shop/admin desk UX: stock table readability (wrap, sticky header, compact editable cells, num align); CSV uploads use file-pick; style-guide table patterns
0.11.32 Cigar Angebote tile: rename + compact offer rows (icon Order/direct link); move shop contact form to public shop page with desk toggle (public_contact_form, default on)
0.11.31 Shop desk: move locale descriptions into collapsible Beschreibung des Shops tile (before Standorte); copy-to-empty icon on filled locale fields (stacks under Markdown preview / autosave)
0.11.30 Profile avatar upload matches shop Bilder: Bild hochladen / Upload image button with upload icon via file-pick (hide native Datei wählen chrome)
0.11.29 Deploy syncs database/packages (catalog seed pack + samples); Initial install catalog check messaging
0.11.28 Shop desk full-bleed Kontakt/Standorte/location cards; UI style guide; harmonize delete/rotate icons and border token
0.11.27 Shop Bilder carousel UX: role prompt inside select (no label above), remove duplicate role next to upload, Bild hochladen + upload icon, trash delete icon
0.11.26 Inline autosave status icons inside fields (right edge; below Markdown preview eye when present), with padding and aria labels
0.11.25 Fix shop Kontakt/Standorte not saving (nested carousel forms closed the settings form); system-wide unique shop URL slugs including soft-deleted; multi-shop desk/attach pickers exclude inactive and deleted
0.11.24 Shop UX polish: carousel nav always visible (disabled ≤1), Festlegen als… role label, identity width match Kontakt, flat right-edge Markdown preview icons, empty Filialname placeholder
0.11.23 Shop portrait: unified image carousel (logo/cover roles, rotate/delete); Markdown for contact/descriptions/locations with preview; looser Identität layout; public shop header Ken Burns blur-fill (no letterbox bars)
0.11.22 Fix admin shop show 500 (users.name select after username rename); soft-deleted name reuse redirects to restore; bulk Entfernen wired with validation feedback; admin shops UI polish (icon toolbar)
0.11.21 Expand premium/lifetime animal avatars to 8 each; CSP-safe multi-shop desk switcher (onchange via humidor.js)
0.11.20 Animal avatars (sheep/crocodile/pelican) by plan color + shop brown set; collapsible avatar picker; profile age-gate incomplete banner hides when birth year and residence are set
0.11.19 Fix admin shop create/show 500s (location description column + missing shop_locations / header_path guards); multi-shop desk switcher near title with session persistence
0.11.18 Public shop location cards: tighter expand spacing, centered chevron, title ellipsis, website+id row below map, mobile polish; collapsing Standorte list resets map to all markers
0.11.17 Shop stock: single vs box packaging with cigars-per-box; offer list thumbs on first paint; CSV help texts visible with clearer DE/EN instructions
0.11.16 Cigar detail UX: icon action toolbar (humidor/wishlist/edit/report), tasting notes directly under All details as collapsible (default open), mid-page spacing polish
0.11.15 Public shop show: expandable location details (description), distinct Google/Apple/OSM map icons, list toggle collapse label, shop contact fields
0.11.14 Cigar detail offer locations map (fitBounds); shop attach label rename; multi-shop picker when listing from catalog
0.11.13 Public shop show polish: collapsible multi-locations, map overview reset, Google/Apple Maps icon links, cleaner hero without duplicate name
0.11.12 Shop public map fitBounds for multi-locations + clickable addresses; directory cards show logo and header; shop desk header/cover upload
0.11.11 Order notification settings on /shop/orders (collapsed tile + user email picker); shop-desk delete icons red with white glyph
0.11.10 URL slug auto-normalize on create/edit: keep umlauts/accents, lowercase, hyphenate; client + server shared helper
0.11.9 Swiss number formatting (de_CH): period decimals for CH users; UI language unchanged
0.11.8 Shop stock/offer photo-from-URL (fix HTTP 500); manufacturer optional on create
0.11.7 Manufacturer optional on cigar create (shop stock + shared validation)
0.11.6 Cigar form inch↔mm auto-convert for length and ring gauge/diameter
0.11.5 Shop stock create: Herkunft/origin_country_id validation, Dein Angebot title layout, full-width Shop SKU help, price 2 decimals
0.11.4 Shop order mail immediate + daily digest; Bestand UX — catalog thumbnails, collapsed create-offer, clearer stock/prices CSV copy
0.11.3 Locations UI: Standorte icons, street label, map mark/zoom, Mein Shop nav badge fix
0.11.2 Shop desk UX: Mein Shop vs Bestand, SKU help, catalog one-click attach, collapsed location cards + description, nav badge
0.11.1 Opaque city search IDs; brand/mfr admin user picker; geocode CLI backoff + locations
0.11.0 Harden geo/Nominatim, Orte UX, shop city_id ER
0.10.24 Address place typeahead (Orte); remove redundant Stadtname free-text field
0.10.23 Shop multi-location, country-first cities, CH localities, map picker, cities admin
0.10.22 Image thumbs, lazy-load, hardened upload pipeline
0.10.21 Environment registry with banner and productive flags
0.10.20 Sheep avatar presets across standard, premium, lifetime, and admin tiers
0.10.19 Friends: cancel pending invites; catalog-style friend tiles with share-gated peeks
0.10.18 Profile shipping country dropdown from Admin countries; seed ResidenceCountrySeeder on update
0.10.17 import/export stock header refs; shops.user_id nullable
0.10.16 mail: PHP mail()/sendmail only; drop SMTP and sendmail path picker
0.10.15 stop Alias rewrite loop; require vhost RewriteBase
0.10.14 subdirectory Alias RewriteBase; age-gate cookie/return path
0.10.13 short MySQL index name on manufacturer_listing_reports
0.10.12 updater composer HOME, prefill config.local form
0.10.11 composer lock pinned to PHP 8.3 (Symfony 7.4)
0.10.10 admin mail sendmail path + test
0.10.9 Locale nav UX (cedar pill + cream nav-drop items); system image URL list + import-from-web
0.10.8 Scoped data packs + site assets; site access gates; mail recipients + mail_enabled; captcha master on/off; dashboard inbox after stats; System nav → hub
0.10.7 Gallery stay-put rotate/delete; autosave fly hide; header locale CHD dropdown; drop header Register; shop map near-me + locality geocode; friend tiles + accept notify; admin shop show username sort
0.10.6 JSON-safe org logo/header upload (fix TypeError on Accept application/json)
0.10.5 README: dedicated Database password section; document purofolio:rotate-db-password
0.10.4 Fail-closed DB password on prod/imp/demo; auto-rotate via updater + purofolio:rotate-db-password (deploy 3.0.5)
0.10.3 Non-prod env banner with version history; APP_ENV demo; Humidor submenu Catalog
0.10.2 Mobile nav fix: header backdrop-filter no longer clips drawer
0.10.1 City entity; JSON API drops numeric ids (breaking)
0.10.0 Security hardening (age-gate return, hashed updater secret, no webroot updater logs); dead nav keys; ER confirm; deploy 3.0.4
0.9.115 Media gallery UX: tile overlays (rotate/delete/open), source_url, private-disk image backup/restore, lazy public carousel credits
0.9.114 Header nav IA: Humidor/Brands/Account dropdowns, avatar unread badge, Identify off main nav
0.9.113 ensure-super-admin: bind by username after email vault miss (APP_KEY/pepper rotate); conflict if email and username match different users
0.9.112 README: clean playground setup + accurate super_admin_reset; fix stale migrate --seed docs
0.9.111 Hero login button contrast; catalog pagination plain-text Previous/Next (no HTML entities)
0.9.110 Hygiene: align deploy update example version to 3.0.3
0.9.109 Low security: SESSION_ENCRYPT prod, journal email redaction, CSP script nonces, leftover .env quarantine (deploy 3.0.3)
0.9.108 Medium security: email pepper boot fail, invitation block ciphertext, Stripe CSRF, super-admin one-shot wipe, RemotePhoto DNS pin
0.9.106 Selective master-data import/export packages; catalog removed from default seed; Admin Import/Export UX
0.9.105 config.local.php replaces .env; super-admin from config; PHPUnit without Dotenv
0.9.104 Stripe + SumUp provider toggles: independent enable, Checkout Session, webhook fulfill, admin secrets UI, CSP
0.9.103 ER follow-up: country FKs + submission brand_id, API public_id deprecation, human URL slugs for brands/mfr/shops/cigars, cities deferred
0.9.102 ER/ID pass: brand/shop residence_country_id, public_id route keys, admin ID columns, dead tabacalera filter removed
0.9.101 Dedicated EMAIL_HASH_PEPPER, public-photo eager loads, MySQL photo indexes, security polish
0.9.100 Ship-ready maps+reference-photo hardening: internal media authz, storage bypass, empty states, near-you UX
0.9.99 Internal cigar reference photos (max 5): vertical auto-orient, admin/catalog gallery, seed is_internal, coverage audit
0.9.98 Free Leaflet/OSM maps for manufacturers and shops; shops near you; Nominatim geocode command; admin map settings
0.9.97 Netherlands brand↔primary-factory map; Henri Wintermans Eersel + Agio/Ritmeester/De Olifant media; 10 NL cigars; deploy_version stays 3.0.0
0.9.96 Final country-gap batch: CR/EC/ID/DE/BE brand↔factory maps; Tabacos de Costa Rica + Villiger DE/ID; Clubmaster/Handelsgold/Neos cigars; EC Oliva estates
0.9.95 Philippines brand↔primary-factory map; Tabacalera Cavite + Tabaquería Laguna; Alhambra/DJU/1881/Flor de Filipinas; PH logos
0.9.94 Italy brand↔primary-factory map; Lucca/Cava/Orsago/Sansepolcro/Bassano factories; Toscano/MOSI/CTS/Nostrano; IT logos
0.9.93 Spain brand↔primary-factory map; Canary Dos Santos/Canariense/CITLP/Julio; Vegas de Santiago→CR correction; ES logos
0.9.92 Switzerland brand↔primary-factory map; Pfeffikon/Brissago/Reinach/Basel HQ factories; Patoro→De Los Reyes; CH logos
0.9.91 Brazil brand↔primary-factory map; Bahia Recôncavo factories; Dona Flor→Menendez Amerino; Villiger do Brasil; Le Cigar; BR logos
0.9.90 USA brand↔primary-factory map; Little Havana / El Reloj factories; Martinez Ybor removal; US HQ vs offshore mother factories; US logos
0.9.89 Mexico brand↔primary-factory map; San Andrés Tuxtla factories; Te-Amo→Turrent correction; MX logos
0.9.88 Honduras brand↔primary-factory map; Diadema / JRE Danlí / CLE Danlí; Tabacos de Danlí; Mi Querida→NACSA correction; HN logos
0.9.87 Dominican Republic brand↔primary-factory map; TABADEX / Tabacalera Palencia; Tabacalera Díaz Cabrera rename; DO logos
0.9.86 Nicaragua brand↔primary-factory map; STG Estelí / J. Fuego Estelí / Tabacalera Carreras; brand.manufacturer_id for NI marcas
0.9.85 Cuba Habano brand↔mother-factory map; Miguel Fernández Roig rename; extra Tabacuba factories; brand.manufacturer_id
0.9.84 Dual version label app-deploy; updater deploy_version 3.0.0
0.9.83 World catalog media texts photos: rest-of-world manufacturer logos/headers and cigar recognition photos from original web sources (Cuba/NI already covered); version scheme corrected to 0.9.x
0.9.82 Nicaragua catalog media texts photos: manufacturer logos/headers, rewritten i18n cigar texts with sources, recognition photos from original web sources
0.9.81 Catalog media Cuba/Nicaragua pipeline: audit/apply commands, RemotePhoto hardening, rewritten Cuba texts + recognition photos from original web sources
0.9.71 Manufacturer value-add: verified claim/badge, portal analytics dashboard, official master-data history, shop coverage gaps; inquiry inbox, wrong-listing reports, multilingual portal descriptions, embed snippet. Future: factory tours/events, distributor ma
0.9.63 Cleanup unused admin catalog edit surface; catalog/humidor query and highlight performance; throttle catalog mutate routes; shared portal writes via CigarUpdateService
0.9.62 Unified catalog inline and bulk editing; admin and portal editors redirect to the public catalog edit surface
0.9.61 UX adapted from Vibeero patterns: click nav, hero CTA hierarchy, filters/chips, breadcrumbs, empty states, admin section nav, a11y polish
0.9.5-beta Email encrypted at rest with blind index (email_hash); APP_KEY must stay stable
0.9.4-demo AI cigar/lifestyle wallpapers in download gallery (keep header set)
0.9.3-demo Downloadable Purofolio wallpapers gallery (30 images) at /wallpapers
0.9.2-demo Impressum operator Creabyte / creabyte.com; legal notice link
0.9.1-demo Full data backup/restore with auto interval/retention; security/UX hardening (share-token, throttles, mobile nav)
0.8.62-demo Reseed brand logos/headers from URL; browser UA for Wayback downloads
0.8.61-demo Updater: separate app root and httpsdocs webroot; public/ mirrored to DocumentRoot
0.8.60-demo Admin impressum: optional email, editable Creabyte legal URL
0.8.59-demo Public impressum: no email; link to creabyte.com legal notice
0.8.58-demo Brand seed: +16 logos and 10 brand-specific headers for catalog tiles
0.8.57-demo Standalone web updater: form-only setup, no CLI required
0.8.56-demo Production webroot updater: sparse GitHub sync, secrets stay off live
0.8.55-demo Demo deploy guide: host packages, git clone/pull, PHP/Apache/MySQL
0.8.54-demo Admin mail SMTP settings, demo harden command, public demo deploy guide
0.8.53 CSP headers, CSRF/XSS/perf security tests, offers stock index
0.8.52 Security audit: configurable password policy, upload hardenings, media path jail
0.8.51 Ask the shop; residence-first shop directory
0.8.50 One-click list from catalog; low-stock shop desk
0.8.49 Public shop directory and storefronts
0.8.48 Identify photo hint shown as normal text, not a help toggle
0.8.47 Katalog um 93 weitere Zigarren erweitert (Fabrikfotos, i18n)
0.8.46 Weitere Marken- und Fabriklogos im Katalog (offizielle Rasterbilder)
0.8.45 Mehr Zigarrenfabriken mit i18n, Websites und Logos
0.8.44 Mehr Zigarrenmarken mit i18n, Websites und Logos
0.8.43 Abstract PF tobacco-leaf mark as logo and app icon
0.8.42 Purofolio mark as logo, favicon, and app icon
0.8.41 Load brand and manufacturer photos from a public URL; strip GitHub image sources
0.8.40 Show membership valid-until and billing renewal dates
0.8.39 More cigar brands with i18n, sites, logos
0.8.38 Listen per Link ohne Login teilen, Freunde einladen und gemeinsam bearbeiten
0.8.37 Fünf Listen-Cover mit kubanischen Tieren, optionales eigenes Listenbild je Abo und Moderation hochgeladener Nutzerbilder
0.8.36 Field-adjacent autosave spinner, own-avatar settings card, and in-app notification inbox
0.8.35 Mobile nav submenus overlay instead of pushing the bar; more inline autosave
0.8.34 Official brand and manufacturer logos with source URLs, plus extra factory photos
0.8.33 Per-form Turnstile toggles for registration, friend invite, and password reset
0.8.32 Help snippets open from a compact ? control instead of always-visible paragraphs
0.8.31 Catalog seed of 100+ cigar vitolas with localized descriptions and attributed Commons photos
0.8.30 Manufacturer catalog: factory descriptions, CC logos and header photos
0.8.29 Catalog seed of 73 cigar brands with localized descriptions and attributed header photos
0.8.28 Security audit: freeze email, Turnstile on API invites, CSRF-safe locale, CSV extension allow-list, public cigar IDs, identify hash cache
0.8.27 Unique username handle; unique email; privacy Find me by copy; labeled help snippets
0.8.26 Verify demo accounts; skip email confirmation when mailer is log
0.8.25 Findability privacy, share humidor with friends, safer email invites
0.8.24 In-app friend requests, invite-to-register, required email confirmation
0.8.23 Catalog country list cache; identify photo auto-upload
0.8.22 My Humidor catalog tiles: quantity, own ratings, short Remove
0.8.21 One country list, lookup i18n, autosave, collection view preference
0.8.20 Admin dashboard DB size, RAM, disk, CPU load
0.8.19 Admin cigar index inline editor; optional brand; shops as offers
0.8.18 Table and catalog views for My Humidor and lists; session-remembered view switcher
0.8.17 Public friend-invite accept page; single My Humidor data table with inline scores
0.8.16 Cigar origin countries; catalog hero; brand/manufacturer ratings; changelog sync
0.8.15 Catalog dropdown nav; My Humidor/list/friends; avatar profile
0.8.14 Manufacturer media; localized countries
0.8.13 Search history; admin menu cleanup; catalog placeholders
0.8.12 Richer journal; Schwitzerdütsch; role admin; user detail
0.8.11 Avatar presets
0.8.10 Comment history and purge
0.8.9 Invitation admin
0.8.8 Friendship mail status
0.8.7 Blacklist applies to all locales
0.8.6 Cigar photo gallery
0.8.5 Cigar attributes and lookup tables
0.8.4 Catalog shops, friends, account lifecycle
0.8.3 Lifetime plan, green avatars, notice tile
0.8.2 Help texts, error reports, impressum version list
0.8.1 Public IDs pf-c / pf-b / pf-m / pf-s
0.8.0 Unique cigar identity (brand + name + vitola)
0.7.9 Manufacturers and brands in the catalog