Release Notes
2026.06.24
June 24, 2026
added
Dealer CRAMP (https://cramp.fr/) (#2)
added
Dealer EMK (https://www.emk.com/) (#2)
added
Fineness units (#21)
fixed
Filters and currencies propagation (#389)
fixed
Invalid enum value in field (#393)
fixed
Latest known exchange rate is used instead of the one from the data point (#390)
fixed
Not found (404) (#396)
fixed
Pages not indexed (#395)
fixed
Sidecar not starting (#391)
improved
Clean only 'local' files (#392)
improved
Cloudflare handling (#386)
improved
Server config (#388)
removed
Dealer template (#387)
2026.06.18
June 18, 2026
fixed
Enrichment has stalled (#380)
fixed
Soft 404 (#377)
improved
Anomalies / special cases (#382)
improved
Automatically link processed dealers and Discovery (#381)
improved
Availability filter (#176)
improved
Avoid computing shipping costs every time (#378)
improved
Live progress of aggregators (#383)
improved
Logging (#385)
improved
Politeness towards servers (#376)
improved
Teardown of aggregators and their dependencies (#384)
2026.06.12
June 12, 2026
fixed
Deployment and remote setup (#374)
fixed
Exchange rates, historical data and price data sources (#375)
2026.06.10
June 10, 2026
added
DOM Helper (#259)
added
Shipping costs and premium all-inclusive (#19)
added
Sidecar for access (#373)
fixed
Sitemap not generated (#366)
improved
Buy and Sell per product Uri (#342)
improved
Client handling (#337)
improved
Enrichment properties (#344)
improved
Google Search Console (#365)
improved
JSON Linked Data (#338)
improved
Rotation (#182)
improved
Stocks (#19)
removed
Google Search Shopping tab (#340)
removed
Per-product ratings and reviews (#339)
2026.05.25
May 25, 2026
added
Customer reviews (#18)
added
Dealer Bullion By Post (https://www.bullionbypost.co.uk/) (#2)
fixed
Muenze Österreich duplicated (#361)
fixed
Prices discrepancy (#364)
fixed
Sitemap not generated (#360)
fixed
Snooze button (#359)
fixed
Transfer stats 'select' blocked by CSP (#362)
improved
Dealer links (#363)
2026.05.18
May 18, 2026
fixed
Argument must be of type DateTimeInterface, null given (#352)
fixed
Changelog exhaustion calculation (#353)
fixed
Currency history blocked (#350)
fixed
Infinite loop (#358)
fixed
Requests blocked (#351)
improved
Allow to snooze enrichment (#354)
improved
SEO (#20, #348)
2026.05.15
May 15, 2026
added
Dealer APMEX (https://www.apmex.com/) (#2)
added
Dealer ATS Bullion (https://www.atsbullion.com/) (#2)
added
Dealer Cookson-CLAL (https://www.cookson-clal.com/) (#1)
fixed
Dealer LPM (https://www.lpm.hk/) (#1)
fixed
Indexation issues (#341)
fixed
Similar to an infinite loop (#336)
improved
Standardize Sell prices (#346)
2026.05.11
May 11, 2026
added
Automatic Pareto-layered analysis of anomalies (#333)
added
Mass units (#15)
fixed
Currency not propagated (#286)
fixed
Dealer inventory miscalculation (#280)
fixed
Display only the stored values, do not recalculate in real time (#287)
fixed
Missing images (#290)
fixed
Missing products (#314)
fixed
Not always the most recent values were used (#287)
fixed
Pagination is off (#335)
fixed
Premium difference between historical and live recalculation (#287)
fixed
Rate limiter too agressive (#284)
fixed
Unreadable dual axis chart (#287)
improved
Merge system logs and allow them to be deleted (#331)
improved
W3C Nu HTML Check (#72)
2026.05.09
May 09, 2026
fixed
Captcha blocked (#329)
2026.05.07
May 07, 2026
fixed
Subject/message logic missing (#319)
removed
Browser extension (#309, #321)
2026.05.06
May 06, 2026
fixed
Arbitrary number used to hide stock levels (#305)
fixed
Error 500 (#303)
fixed
Missing DKIM (#285, #313)
fixed
Pages prevented from being indexed (#315)
fixed
Stock quantity checked twice (#304)
fixed
Unwanted data indexed (#316)
improved
Bots mitigation (#306)
improved
Discontinued products (#308)
improved
Push URL updates to the Web Search Indexing API (#318)
improved
Stock quantity checks (#307)
improved
Use JSON-LD structured data for GoogleBot and Open Graph/Twitter tags for social networks (#317)
removed
Legacy Nobili.cc (#301)
2026.05.03
May 03, 2026
added
Analysis of Apache, Laravel, Nginx and PHP logs (#47, #149)
added
Dynamically generated nonce to avoid using unsafe-inline (#295)
fixed
Cloudflare 520 (#296)
fixed
Missing log access (#299)
fixed
Missing nonce (#298)
fixed
Unsigned emails (#297)
2026.05.02
May 02, 2026
added
Cloudflare (#45)
fixed
Wrong config keys used (#294)
improved
Bypass Cloudflare in case of outage (#9)
improved
Google Analytics, Google ReCaptcha, Google Search Console, JSON-LD, Robots.txt, Sitemap.xml (#35, #157, #283)
improved
Mozilla Observatory score (#71)
2026.05.01
May 01, 2026
added
Code metrics, data statistics and insights for dealers (#16, #58, #159)
added
Laravel Pulse (#28, #199)
added
Management scripts (#108)
added
Notification bubbles (#97)
added
Real-time scraper status and monitoring manager (#195)
fixed
Config may crash on empty table (#279)
fixed
Error 403 on API (#269)
fixed
Error 500 on Enrichment (#209)
fixed
Non-hamburger-style menu on mobile (#272)
fixed
Register button's focus style (#275)
fixed
Unsigned emails (#134)
fixed
Zero online (#268)
improved
Better contact form for feedback and feature requests (#26)
improved
Changelog exhaustion (#260)
improved
Changelog table can be empty (#274)
improved
Configuration keys case (#277)
improved
Default page length (#267)
improved
Logo for emails (#276)
removed
CI/CD (#33)
2026.04.28
April 28, 2026
added
Dealer Change Vivienne (https://www.changevivienne.com/) (#2)
added
Dealer Coins and More (https://coinsandmore.fr/) (#2)
added
Template Method to deduplicate core logic (#262)
added
User management and stats (#12, #13)
fixed
Affiliate URL corruption (#242)
fixed
Config view not responsive (#235)
fixed
Database lock release may be interrupted during task teardown (#261)
fixed
Hard limits middleware bypass (#245)
fixed
Missing index of materialized view (#255)
fixed
Missing subscription logic (#252, #258)
fixed
Model/Schema mismatch (#253)
fixed
Playwright can reset the session (#263)
fixed
Playwright may try to read a failed downloaded file (#264)
fixed
Playwright reinitializing session (#240)
fixed
Privilege escalation (#240)
fixed
Search logs race condition (#243)
improved
Activity frequency (#250)
improved
Asynchronous emailing (#244)
improved
Autocomplete speed (#254)
improved
Better bot detection (#246)
improved
Display only the known history range on the product's price chart (#236)
improved
Global NumberFormatter (#251)
improved
Multiple form tabs (#248)
improved
Online count performance (#241)
improved
Products require one URI for Buy or one URI for Sell, inclusive (#233)
improved
Propagate fineness and mass (#237)
improved
Pruning too agressive (#247)
improved
ReCaptcha threshold (#249)
improved
Replaced the O(N*M) LATERAL JOIN with an O(1) cached table (#238)
improved
ServerCertificateCustomValidationCallback (#265)
improved
Sidebar caching (#256)
removed
TDD (#239)
2026.04.24
April 24, 2026
added
Dealer Change de la Bourse (https://www.changedelabourse.com/) (#2)
improved
Added short disclaimers regarding price and availability (#232)
improved
Ensure that the Discovery/Prospecting index is not incremented when the API limit is reached (#231)
improved
Increased height of the dealers box (#229)
improved
Premium is a calculated value, check only its operands (#228)
2026.04.23
April 23, 2026
added
Dealer Comptoir des Tuileries (https://www.cdt.fr/infos/) (#2)
fixed
Data is not displayed when the minimum quantity is not 1 (#227)
improved
Standardized and multi-selectable payment methods (#175)
2026.04.22
April 22, 2026
added
BTC as a currency (#14, #224)
added
Dealer Comptoir Change Opéra (https://www.ccopera.com/) (#2)
fixed
net::ERR_ABORTED is expected during file download (#226)
improved
Display current position of discovery/prospection (#225)
2026.04.20
April 20, 2026
added
Binary download via Playwright (#220)
added
Dealer Bullion Exchanges (https://bullionexchanges.com/) (#2)
fixed
Discovery cursor not incremented (#217)
fixed
ERR_PROXY_CONNECTION_FAILED (#223)
fixed
Mixed table headers (#214)
fixed
OpenStreetMap blocked by SCP (#215)
improved
Beta and security adjustments (#222)
improved
Moved some configuration to database (#142, #216)
improved
Replaced custom rules and honeypots (#218)
improved
Sort config alphabetically (#221)
improved
Tor consensus and micro-descriptors (#219)
2026.04.16
April 16, 2026
added
Dealer discovery management (#160, #179)
fixed
Avoid falling into The Britannia Coin Company's infinite pagination loop bug (#211)
fixed
Bytes stripped from favicons (#207)
fixed
Enrichment images blocked by CSP (#213)
fixed
Error 500 on the enrichment view (#209)
fixed
Missing images (#208)
fixed
Not logged in users do not see all the data (#200)
fixed
npm warn deprecated (#202)
improved
Automatic environment detection (#201)
improved
Better names for objects (#86, #106)
improved
Check the .env file at startup (#210)
improved
Clean up backup remnants (#212)
improved
Data enrichment adds missing data while preserving the original dealer data (#147)
improved
High-resolution images and full descriptions by default (#206)
improved
Information about user agents (#78)
improved
Product layout (#138)
improved
Serve some assets locally in the event of global outages (#83)
improved
Store the exchange rate history to ensure continuity of service (#55, #145)
improved
Switch to CalVer (#141, #190)
removed
AWS, Redis, Merchant of Record (#98)
2026.04.09
April 09, 2026
fixed
Column does not exist (#193)
fixed
Content Security Policy directive violation (#196)
fixed
Missing API keys (#203)
fixed
Missing history data (#192)
fixed
Only the Discovery tier is used (#204)
fixed
Permission denied while trying to start process (#194)
fixed
Playwright: Missing Directory (#205)
fixed
Scheduler not listing internal links (#198)
improved
Instantiated Systemd Units (#197)
2026.04.08
April 08, 2026
added
Basic Auth credentials (#188)
added
Check for missing images (#81)
added
Discontinued/stale products handling (#29)
added
File download with Playwright (#170)
added
Interface for standardizing indexing implementations (#123)
added
Last seen and last updated dates and times, with time intervals (#50)
added
Scheduler and Dispatcher (#87, #123)
added
Time elapsed since last product update (#66)
added
Time zones taken into account for all dates and times read and displayed (#73)
fixed
403 on exchange rate history (#144)
fixed
Automatic renewal of TLS certificate (#137)
fixed
Chart's tooltip not using time zone (#183)
fixed
Current item not active in the sidebar (#75)
fixed
Enums start at 0, primary keys at 1 (#56)
fixed
Expected pattern unmatched (#155)
fixed
Foreign key constraint violation (#140, #150)
fixed
Incorrect input string format (#154)
fixed
Malformed and unknown JSON keys (#156)
fixed
Missing BGASC product images (#148)
fixed
Missing cancellation token in pricing authority (#168)
fixed
Missing LPM data (#165)
fixed
Misuse of cancellation tokens to properly stop Playwright on SIGINT (#171)
fixed
Not-null constraint violation (#153)
fixed
Numeric field overflow (#152)
fixed
Parsing empty JSON responses (#185)
fixed
Selector missing quotes (#167)
fixed
URL concatenation (#151)
improved
'Select All' selects everything, not only visible items (#69)
improved
All internal data stored in UTC (#73)
improved
Centralized sidebar logic (#67, #69)
improved
Cleaner Playwright cancellation (#187)
improved
CLI switches (#122)
improved
Client-side logging (#77)
improved
Display selected and total "Select All" (#67)
improved
Do not display the carousel if the product has no image (#158)
improved
editorconfig rules (#164)
improved
Effective date and time of products and prices instead of reading time (#50)
improved
Enrichment replaced by direct use of the API (#130)
improved
Ensure that only one instance is running at a time (#93)
improved
Fixed budgets for enrichment and discovery (#127)
improved
Less VARCHAR, more TEXT (#189)
improved
Log escaped line breaks (#136)
improved
Log the number of results from the discovery (#131)
improved
Log the PID (#126)
improved
Logic of discovery's API calls (#166)
improved
Logs and statistics by instance (#172)
improved
Move the backup logic (#133)
improved
No more need for Tor manual handling (#169)
improved
Performance of the index (#70)
improved
Process all code inspections (#161)
improved
Property names in log statistics (#184)
improved
Replaced manual and slow gapless and concurrent `SELECT MAX(id) + 1` queries using per-table SemaphoreSlims with simple BIGINT GENERATED IDENTITY (#123)
improved
Reset logic moved to the README file (#125)
improved
Stats controller performance (#163)
improved
Support for Merchant of Record (#98)
removed
Automatic DotSettings and editorconfig rules generation (#146)
removed
Coalescing dealer data with enrichment data, as dealer data must remain the reference (#162)
removed
Continuous adaptive pool of workers (#24)
removed
Merge of systemd services and timers (#124)
removed
Store category (#128)
removed
Windows support (#143)
2026.02.05
February 05, 2026
added
--force option to run indexing on demand (#113)
fixed
Database: 42P07: index already exists (#120)
fixed
Empty online history (#74)
fixed
Enrichment items are empty (#104)
fixed
Enrichment returns 403 (#119)
fixed
HTTP/2 PROTOCOL_ERROR (#116)
fixed
Index not displaying products with unknown premium (#118)
fixed
Name or service not known (#117)
fixed
Paginator crashes on an empty product list (#121)
fixed
PlaywrightException: Executable doesn't exist (#107)
fixed
System.IndexOutOfRangeException (#115)
fixed
System.InvalidCastException (#111)
fixed
The SSL connection could not be established (#110)
improved
Don't purge log files anymore (#105)
improved
Log all HttpStatusCodes (#112)
2026.02.01
February 01, 2026
added
30-day bot mitigation (#197)
added
All filters as user preferences (#195)
added
Announce data refreshes (sorting, pagination) for screen readers (#68)
added
API, API documentation, API key management, and API rate limiter (#22)
added
Beta mode (Everyone gets a free Pro subscription until the end of the beta) (#22)
added
Clicks Stats (#22)
added
Complete price history from dealers when available (#23, #173, #194)
added
Database health checks (#177)
added
Dealer LPM (https://www.lpm.hk/) (#1)
added
Filter items by page (#196)
added
Historical spot price chart on the historical product price chart (#59)
added
In Stock filter (#56)
added
Keyboard and screen‑reader support for image carousel (#67)
added
Last updated time (#46, #198)
added
Locales for number display (#201)
added
Number of items in the sidebar lists (#47)
added
PhpMetrics (#187)
added
Plans upgrade, downgrade, subscription cancellation and account deletion (#85)
added
Plans/Tiers and subscriptions (#22)
added
Respect the user's preference for reduced movement (#66)
added
Rounds Category (#179)
added
Semi-automatic data enrichment for a complete aggregation and reconciliation system, replacing manual processing of special cases (#62)
added
Terms, Privacy and Refunds (#40)
added
Top Ticker Bar (#25)
added
World map of dealers and stores (#5)
fixed
Dealer Achat Or Bordeaux (https://achat-or-bordeaux.fr/) (#53)
fixed
Dealer Atkinsons Bullion (https://atkinsonsbullion.com/) (#91)
fixed
Dealer Drake Sterling (https://drakesterling.com/) (#83)
fixed
Google Search (#24)
fixed
Hard reset and database recreation orders (#79)
fixed
Instrumenter block line index (#42)
fixed
Mobile layout order, pagination size, and filter button placement (#68, #82)
fixed
Product chart displaying "indexed" data points instead of "nearest" ones. (#60)
fixed
Stored XSS vulnerability (#63)
improved
Avoid duplication between unit prices and bulk prices (#75)
improved
Clear "future" prices when past prices are stored (#63)
improved
Clear all logs on startup (#54)
improved
Consistent labels for dynamic selects (#69)
improved
Cumulative Layout Shift (#65)
improved
Do not return empty or null values in the API (#190)
improved
Fetchpriority and Loading (#64)
improved
Google prospector of dealers and mines (#84)
improved
Handling of SIGHUP, SIGINT and SIGTERM (#52)
improved
Images self-heal (#81)
improved
Lazy load product history chart (#71)
improved
Legal: Competition Law: Nobilis is an index, search engine and specialized lead generator, in no way a dealer or a competitor of dealers. (#92)
improved
Legal: Copyright (Fair Use): Respect copyright by using altered images and descriptions by default, unless expressly authorized by the dealers to display the originals. (#92)
improved
Legal: Data Rights: Product features and prices are facts and can be indexed. (#92)
improved
Modern CSS (#55)
improved
More generic pagination (#64)
improved
More robust parsing (#30)
improved
Optimized Sass with style for emails and errors (#191)
improved
Overly aggressive product image processing (#193)
improved
Preconnect Google Analytics (#72)
improved
Prevent Database blockages and delays (#156)
improved
Prevent I/O blockages and delays (#157)
improved
Reduce image hash collision probability (#79, #81)
improved
Reduce image size (#81)
improved
Reduce images bandwidth consumption (#17)
improved
Reduce reflow (#70)
improved
Replace SERIAL/IDENTITY with gapless and concurrent `SELECT MAX(id) + 1` queries using per-table SemaphoreSlims (#56)
improved
Simplify special cases handling (#33)
improved
Use the tag names as node names and refactor Linq queries (#21)
removed
Automatic updates of dependencies after each version (#79)
removed
Deletion of extra_property and guard fields (#7)
removed
DOM content hash checks for lazy updating (#168)
removed
LLM Code Review (#49)
removed
Manual images processing (#54)
removed
Native .Net data source for countries (#61)
removed
Replacing click triggers with mousedown triggers (#188)
removed
Storing the special cases in the database (#61)
2026.01.01
January 01, 2026
added
Automatic anonymization of inactive accounts with warnings (#136)
added
Centralized Health & Heartbeat Logging (#159)
added
Changelog sidebar (#94)
added
Google ReCaptcha (#251)
added
Integrity checks between referenced product images and the file system (#87)
added
Number of occurrences in autocomplete (#90)
added
Online user statistics (#137)
added
Pareto analysis of log entries (#138)
added
Premium and price sparklines (#148)
added
Rate Limiter (#147)
added
Route to obtain the external IP address and replace ICanHazIp (#238)
added
Search keyword statistics (#11, #104)
fixed
AppDomain Unhandled: System.TypeInitializationException (#252)
fixed
enumeration tables using SERIAL instead of INTEGER (#144)
fixed
Images not cropped (#79)
fixed
Inconsistent currencies (#200)
fixed
Mail leak (#253)
fixed
System.ComponentModel.Win32Exception: Permission denied (#10)
improved
Clear HTTP transfer statistics at startup (#6)
improved
Clicking on the product image shows the product (#135)
improved
Database checks (#28)
improved
Full async + CancellationToken fix (#151, #154)
improved
Graceful shutdown handling (#160)
improved
Hard reset now also deletes all product images (#87, #116)
improved
Image size using WebP (#89)
improved
More database logging (#240)
improved
Reduce the size of the JSON payload (#139)
improved
Show the last ten entries in the changelog (#84)
improved
Store the correct HTTP content types (#126)
improved
Use Bootstrap Carousel (#110)
improved
VAT renamed to Taxation (#143)
removed
Classification of critical, precious and strategic metals (#20)
removed
Code churn statistics (#127)
removed
Historical exchange rate data (#123)
removed
Images re-upload (#41)
removed
Merging of Engravers and Designs (#145)
removed
Test user data (#8)
removed
Tor automatic update (#220)
removed
Tor support for a dealer (#149)
removed
Warning logging level (#113)
2025.12.01
December 01, 2025
added
Blocks dedicated to error logging can be ignored by the Instrumenter (#49)
added
Dealer Brisbane Gold Company (https://www.brisbanegoldcompany.com.au/) (#1)
added
Dealer The Britannia Coin Company (https://britanniacoincompany.com/) (#1)
added
Email @nobilis.gold (#45)
added
Email address change and validation (#86, #88)
added
Global Exception Handlers (#152)
added
HTTP transfer statistics (#103)
added
Reminder regarding additional quality checks (#67)
added
Subdomain for Gitea (#53)
fixed
app.ini: Cannot open: Permission denied (#62)
fixed
FileNotFoundException: Blocks.log (#112)
fixed
Fineness filter not working with a single limit (#78)
fixed
Google Maps mistaken for a shop (#174)
fixed
Images may end in incorrect locations (#165)
fixed
IndexOutOfRangeException: Index was outside the bounds of the array (#82)
fixed
Inline style violates the Content Security Policy (#60)
fixed
Newtonsoft.Json.JsonReaderException: Unexpected end of content while loading JArray (#76)
fixed
Product 22003: numeric field overflow (#84)
fixed
Scraper misses tabs (#80)
fixed
SendAsync() may block if the header is received but not the message body (#77)
fixed
tar: Cannot open: Permission denied (#89)
improved
Amortizing strategies (#13)
improved
Better Error Handling (#158)
improved
Blocks and Tor deployment process (#141)
improved
Ensure backups deletion after sending them (#163)
improved
Google Lighthouse checks (#52)
improved
Migration and publication schedules (#150)
improved
Migration to a proper server with domains and email addresses (#4)
improved
Replaced Block Tracker with better Instrumenter (#16)
improved
sqlmap checks (#14)
improved
Tor instances handling in case of exceptions (#155)
removed
Currency selector at the top of the page (#95)
removed
Default dashboard and welcome views (#87, #184)
removed
Drop-down menu for the fineness filter (#124)
removed
Public issue tracker (#38)
removed
Report problems on dealers' websites (#32)
removed
Tor Bootstrap retries with exponential backoff (#153)
2025.11.01
November 01, 2025
added
Buyback support (sell side), implemented for achat-or-et-argent.fr, ainsliebullion.com.au, ajpm.com, andorrano-joyeria.com, argentorshop.be and atkinsonsbullion.com (#8)
added
Google Analytics (#11)
fixed
Chart lines and legend missing background color (#41)
fixed
Cross-Domain Misconfiguration (#58)
fixed
CSP: Wildcard Directive (#57)
fixed
Dealers may create duplicates with malformed URIs (#48)
fixed
Incorrect backup file names (#34)
fixed
Npgsql.NpgsqlException (0x80004005): The connection pool has been exhausted (#50)
fixed
Refused to execute inline script because it violates Content Security Policy directive (#42)
fixed
System.ArgumentException: At least one object must implement IComparable (#43)
fixed
Timeout exceeded at Microsoft.Playwright.Core.Frame.GotoAsync() when Internet connection is lost (#51)
fixed
URI redirects can generate duplicate products (#44)
improved
Automatic correction of past and possible duplicate products and prices (#45)
improved
Processed error log entries
improved
Updated frameworks and dependencies
improved
ZAP check (#14)
2025.10.11
October 11, 2025
fixed
Win32Exception: Permission denied (#39)
improved
Updated all frameworks and dependencies
removed
Changelog entries regarding framework and dependency versions, as they are just noise
removed
Environment.ProcessorCount limit (#40)
2025.10.10
October 10, 2025
fixed
Playwright hanging and no Playwright logs (#37)
fixed
PlaywrightException: Executable doesn't exist (#38)
fixed
Win32Exception: Permission denied (#36)