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 |