Created
July 31, 2025 00:27
-
-
Save lourinaldi/ecffcce367ee555770772c818f599a33 to your computer and use it in GitHub Desktop.
potency inflation and laboratory malfeasance in Connecticut's cannabis market
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Infographic: Anatomy of a Fraud - CT Cannabis Market</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> | |
| <link rel="preconnect" href="https://fonts.googleapis.com"> | |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
| <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;900&display=swap" rel="stylesheet"> | |
| <style> | |
| body { | |
| font-family: 'Inter', sans-serif; | |
| } | |
| .chart-container { | |
| position: relative; | |
| width: 100%; | |
| max-width: 600px; | |
| margin-left: auto; | |
| margin-right: auto; | |
| height: 350px; | |
| max-height: 400px; | |
| } | |
| @media (max-width: 768px) { | |
| .chart-container { | |
| height: 300px; | |
| } | |
| } | |
| .kpi-card { | |
| background-color: #19376D; | |
| color: white; | |
| padding: 1.5rem; | |
| border-radius: 0.5rem; | |
| text-align: center; | |
| box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); | |
| } | |
| .kpi-value { | |
| font-size: 3rem; | |
| font-weight: 900; | |
| line-height: 1; | |
| color: #A5D7E8; | |
| } | |
| .kpi-label { | |
| margin-top: 0.5rem; | |
| font-size: 1rem; | |
| font-weight: 600; | |
| color: #E0E0E0; | |
| } | |
| .flow-arrow { | |
| font-size: 2rem; | |
| color: #576CBC; | |
| margin: 1rem 0; | |
| } | |
| .alert-card { | |
| border-left: 5px solid #FF6B6B; | |
| background-color: #FFF5F5; | |
| } | |
| </style> | |
| </head> | |
| <body class="bg-gray-100 text-gray-800"> | |
| <div class="container mx-auto p-4 md:p-8"> | |
| <header class="text-center mb-12"> | |
| <h1 class="text-4xl md:text-6xl font-black text-[#0B2447] mb-2">Anatomy of a Fraud</h1> | |
| <p class="text-lg md:text-xl text-[#19376D] max-w-3xl mx-auto">A data-driven investigation into potency inflation and laboratory malfeasance in Connecticut's cannabis market.</p> | |
| </header> | |
| <section class="mb-12"> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-6"> | |
| <div class="kpi-card"> | |
| <div class="kpi-value">74.1%</div> | |
| <div class="kpi-label">Adult-Use Market Share</div> | |
| </div> | |
| <div class="kpi-card"> | |
| <div class="kpi-value">30%</div> | |
| <div class="kpi-label">Recreational THC Potency Cap</div> | |
| </div> | |
| <div class="kpi-card"> | |
| <div class="kpi-value">-20%</div> | |
| <div class="kpi-label">Price Drop Per Gram (1 Year)</div> | |
| </div> | |
| </div> | |
| </section> | |
| <section id="setup" class="mb-16"> | |
| <h2 class="text-3xl font-bold text-center text-[#0B2447] mb-8">The Setup: A Market Primed for Manipulation</h2> | |
| <div class="grid grid-cols-1 lg:grid-cols-2 gap-8 items-center"> | |
| <div class="bg-white rounded-lg shadow-md p-6"> | |
| <h3 class="text-xl font-bold text-[#19376D] mb-4 text-center">Adult-Use Dominates the Market</h3> | |
| <div class="chart-container h-64 md:h-80"> | |
| <canvas id="marketShareChart"></canvas> | |
| </div> | |
| <p class="text-sm text-gray-600 mt-4 text-center">The rapid growth of the adult-use market, which now accounts for nearly three-quarters of all sales, has shifted the industry's focus. The regulatory and economic pressures of this segment now drive producer and lab behavior.</p> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6"> | |
| <h3 class="text-xl font-bold text-[#19376D] mb-4 text-center">Price Pressure Mounts</h3> | |
| <div class="chart-container h-64 md:h-80"> | |
| <canvas id="priceTrendChart"></canvas> | |
| </div> | |
| <p class="text-sm text-gray-600 mt-4 text-center">A sharp decline in the price per gram forces producers to compete fiercely. In this environment, a higher THC percentage becomes the primary selling point, creating a powerful financial incentive to achieve the highest possible test result.</p> | |
| </div> | |
| </div> | |
| </section> | |
| <section id="evidence" class="mb-16"> | |
| <h2 class="text-3xl font-bold text-center text-[#0B2447] mb-8">The Evidence: Unmasking the Players</h2> | |
| <div class="grid grid-cols-1 lg:grid-cols-2 gap-8"> | |
| <div class="bg-white rounded-lg shadow-md p-6 lg:col-span-2 alert-card"> | |
| <h3 class="text-xl font-bold text-[#FF6B6B] mb-4 text-center">Red Flag: Recreational Potency (≤30% THC)</h3> | |
| <div class="chart-container h-80 md:h-96"> | |
| <canvas id="recreationalPotencyChart"></canvas> | |
| </div> | |
| <p class="text-sm text-gray-600 mt-4">This chart reveals the most damning evidence. For products in the competitive recreational market, Analytics Labs reports a mean THC potency of 29.3%, extraordinarily close to the legal cap. This result is a statistical anomaly compared to the more natural distributions of its competitors, strongly suggesting a pattern of "potency inflation" to deliver a desirable number for clients.</p> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6"> | |
| <h3 class="text-xl font-bold text-[#19376D] mb-4 text-center">Unnatural Consistency: Potency Variance</h3> | |
| <div class="chart-container h-80 md:h-96"> | |
| <canvas id="potencyVarianceChart"></canvas> | |
| </div> | |
| <p class="text-sm text-gray-600 mt-4">A low standard deviation indicates low variability. Analytics Labs' results are not only high, they are unnaturally consistent, with a standard deviation of just 0.9. This tight clustering of results is not typical for an agricultural product and is a hallmark of results being manipulated to hit a specific target.</p> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6"> | |
| <h3 class="text-xl font-bold text-[#19376D] mb-4 text-center">A Different Story: Medical Potency (>30% THC)</h3> | |
| <div class="chart-container h-80 md:h-96"> | |
| <canvas id="medicalPotencyChart"></canvas> | |
| </div> | |
| <p class="text-sm text-gray-600 mt-4">In the uncapped medical market, the picture is inverted. AltaSci Labs was the clear leader for high-potency products. Analytics Labs has a minimal footprint, reinforcing the conclusion that its business model is focused on exploiting the regulatory boundary of the recreational market, not on testing high-potency medical products.</p> | |
| </div> | |
| </div> | |
| </section> | |
| <section id="anatomy" class="mb-16"> | |
| <h2 class="text-3xl font-bold text-center text-[#0B2447] mb-8">The Anatomy of Fraud: A Statistical Impossibility</h2> | |
| <div class="bg-white rounded-lg shadow-md p-6"> | |
| <div class="grid grid-cols-1 md:grid-cols-2 gap-8 items-center"> | |
| <div> | |
| <h3 class="text-xl font-bold text-[#19376D] mb-2 text-center">Natural Distribution</h3> | |
| <div class="chart-container h-72"> | |
| <canvas id="naturalDistributionChart"></canvas> | |
| </div> | |
| </div> | |
| <div> | |
| <h3 class="text-xl font-bold text-[#FF6B6B] mb-2 text-center">Fraudulent Fingerprint</h3> | |
| <div class="chart-container h-72"> | |
| <canvas id="fraudulentDistributionChart"></canvas> | |
| </div> | |
| </div> | |
| </div> | |
| <p class="text-gray-600 mt-6">The data from Analytics Labs does not show a natural distribution. Instead, it reveals the statistical fingerprint of a market adapting with fraudulent precision to a regulatory boundary. The histogram on the right shows an unnatural spike in the number of samples reported just below the 30% cap. This is a clear signature of "lab shopping," where producers seek out labs that will provide the most profitable result, not the most accurate one.</p> | |
| </div> | |
| </section> | |
| <section id="fallout" class="mb-16"> | |
| <h2 class="text-3xl font-bold text-center text-[#0B2447] mb-8">The Fallout: A Race to the Bottom</h2> | |
| <div class="bg-white rounded-lg shadow-md p-6 text-center"> | |
| <div class="flex flex-col md:flex-row justify-around items-center"> | |
| <div class="p-4"> | |
| <div class="text-5xl mb-2">👨🌾</div> | |
| <h4 class="font-bold text-[#19376D]">Producer Seeks Highest THC%</h4> | |
| <p class="text-sm text-gray-600">Pressure to maximize value</p> | |
| </div> | |
| <div class="flow-arrow">⬇️</div> | |
| <div class="p-4 alert-card rounded-lg"> | |
| <div class="text-5xl mb-2">🔬</div> | |
| <h4 class="font-bold text-[#FF6B6B]">"Friendly" Lab Inflates Potency</h4> | |
| <p class="text-sm text-gray-600">Delivers profitable results</p> | |
| </div> | |
| <div class="flow-arrow">⬇️</div> | |
| <div class="p-4"> | |
| <div class="text-5xl mb-2">📉</div> | |
| <h4 class="font-bold text-[#19376D]">Honest Labs Lose Business</h4> | |
| <p class="text-sm text-gray-600">Punished for accurate reporting</p> | |
| </div> | |
| </div> | |
| <p class="text-gray-600 mt-6 max-w-4xl mx-auto">This system creates a vicious cycle where honest labs are punished for reporting accurate data, while unscrupulous competitors profit from manipulating results. This "race to the bottom" undermines market integrity, deceives consumers, and poses a potential threat to public health.</p> | |
| </div> | |
| </section> | |
| <section id="fix"> | |
| <h2 class="text-3xl font-bold text-center text-[#0B2447] mb-8">The Path to Integrity: Recommendations for Action</h2> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-8"> | |
| <div class="bg-white rounded-lg shadow-md p-6 text-center border-t-4 border-[#576CBC]"> | |
| <div class="text-4xl mb-4">🎯</div> | |
| <h3 class="text-xl font-bold text-[#19376D] mb-2">Mandate Blind Testing</h3> | |
| <p class="text-gray-600">Require all labs to participate in a state-run blind proficiency testing program. Sending identical samples to all labs will immediately expose outliers and provide clear grounds for investigation.</p> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6 text-center border-t-4 border-[#576CBC]"> | |
| <div class="text-4xl mb-4">🔍</div> | |
| <h3 class="text-xl font-bold text-[#19376D] mb-2">Conduct Forensic Audits</h3> | |
| <p class="text-gray-600">Regulators must perform unannounced, on-site audits to examine raw instrument data and records. This is the only way to uncover manipulation that is hidden from final reports.</p> | |
| </div> | |
| <div class="bg-white rounded-lg shadow-md p-6 text-center border-t-4 border-[#576CBC]"> | |
| <div class="text-4xl mb-4">📊</div> | |
| <h3 class="text-xl font-bold text-[#19376D] mb-2">Enhance Data Transparency</h3> | |
| <p class="text-gray-600">Mandate the public release of anonymized, batch-level testing data. This empowers researchers and watchdogs to identify anomalies and hold the industry accountable.</p> | |
| </div> | |
| </div> | |
| </section> | |
| </div> | |
| <script> | |
| const chartTooltipCallback = { | |
| plugins: { | |
| tooltip: { | |
| callbacks: { | |
| title: function(tooltipItems) { | |
| const item = tooltipItems[0]; | |
| let label = item.chart.data.labels[item.dataIndex]; | |
| if (Array.isArray(label)) { | |
| return label.join(' '); | |
| } | |
| return label; | |
| } | |
| } | |
| } | |
| } | |
| }; | |
| const wrapLabel = (label, maxWidth = 16) => { | |
| if (label.length <= maxWidth) return label; | |
| const words = label.split(' '); | |
| let lines = []; | |
| let currentLine = ''; | |
| for (const word of words) { | |
| if ((currentLine + ' ' + word).trim().length > maxWidth) { | |
| lines.push(currentLine.trim()); | |
| currentLine = word; | |
| } else { | |
| currentLine = (currentLine + ' ' + word).trim(); | |
| } | |
| } | |
| if (currentLine) lines.push(currentLine.trim()); | |
| return lines; | |
| }; | |
| const palette = { | |
| blueDark: '#0B2447', | |
| blueMid: '#19376D', | |
| blueLight: '#576CBC', | |
| bluePastel: '#A5D7E8', | |
| alertRed: '#FF6B6B', | |
| white: '#FFFFFF' | |
| }; | |
| new Chart(document.getElementById('marketShareChart'), { | |
| type: 'doughnut', | |
| data: { | |
| labels: ['Adult-Use', 'Medical'], | |
| datasets: [{ | |
| label: 'Market Share', | |
| data: [74.1, 25.9], | |
| backgroundColor: [palette.blueLight, palette.bluePastel], | |
| borderColor: palette.white, | |
| borderWidth: 4 | |
| }] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| plugins: { | |
| legend: { | |
| position: 'bottom', | |
| }, | |
| ...chartTooltipCallback.plugins | |
| } | |
| } | |
| }); | |
| new Chart(document.getElementById('priceTrendChart'), { | |
| type: 'line', | |
| data: { | |
| labels: ['Mar 2024', 'Apr 2025', 'May 2025'], | |
| datasets: [{ | |
| label: 'Average Price Per Gram ($)', | |
| data: [12.51, 10.03, 9.98], | |
| fill: true, | |
| backgroundColor: 'rgba(87, 108, 188, 0.2)', | |
| borderColor: palette.blueLight, | |
| tension: 0.1, | |
| pointBackgroundColor: palette.blueLight, | |
| pointRadius: 5 | |
| }] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| scales: { | |
| y: { | |
| beginAtZero: false, | |
| ticks: { | |
| callback: function(value) { | |
| return '$' + value.toFixed(2); | |
| } | |
| } | |
| } | |
| }, | |
| plugins: { | |
| legend: { | |
| display: false | |
| }, | |
| ...chartTooltipCallback.plugins | |
| } | |
| } | |
| }); | |
| new Chart(document.getElementById('recreationalPotencyChart'), { | |
| type: 'bar', | |
| data: { | |
| labels: ['Northeast Labs', 'AltaSci Labs', 'Analytics Labs'], | |
| datasets: [{ | |
| label: 'Mean THC % (Recreational-Range)', | |
| data: [25.9, 26.8, 29.3], | |
| backgroundColor: [palette.blueLight, palette.blueLight, palette.alertRed], | |
| borderColor: [palette.blueMid, palette.blueMid, '#c53030'], | |
| borderWidth: 2 | |
| }] | |
| }, | |
| options: { | |
| indexAxis: 'y', | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| scales: { | |
| x: { | |
| beginAtZero: false, | |
| min: 24, | |
| ticks: { | |
| callback: function(value) { | |
| return value + '%'; | |
| } | |
| } | |
| } | |
| }, | |
| plugins: { | |
| legend: { | |
| display: false | |
| }, | |
| ...chartTooltipCallback.plugins | |
| } | |
| } | |
| }); | |
| new Chart(document.getElementById('potencyVarianceChart'), { | |
| type: 'bar', | |
| data: { | |
| labels: ['AltaSci Labs', 'Northeast Labs', 'Analytics Labs'], | |
| datasets: [{ | |
| label: 'Standard Deviation of THC %', | |
| data: [3.1, 3.5, 0.9], | |
| backgroundColor: [palette.blueLight, palette.blueLight, palette.alertRed], | |
| borderColor: [palette.blueMid, palette.blueMid, '#c53030'], | |
| borderWidth: 2 | |
| }] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| scales: { | |
| y: { | |
| beginAtZero: true | |
| } | |
| }, | |
| plugins: { | |
| legend: { | |
| display: false | |
| }, | |
| ...chartTooltipCallback.plugins | |
| } | |
| } | |
| }); | |
| new Chart(document.getElementById('medicalPotencyChart'), { | |
| type: 'bar', | |
| data: { | |
| labels: ['Analytics Labs', 'Northeast Labs', 'AltaSci Labs'], | |
| datasets: [{ | |
| label: 'Mean THC % (Medical-Range)', | |
| data: [32.1, 32.9, 34.2], | |
| backgroundColor: palette.blueLight, | |
| borderColor: palette.blueMid, | |
| borderWidth: 2 | |
| }] | |
| }, | |
| options: { | |
| indexAxis: 'y', | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| scales: { | |
| x: { | |
| beginAtZero: false, | |
| min: 31, | |
| ticks: { | |
| callback: function(value) { | |
| return value + '%'; | |
| } | |
| } | |
| } | |
| }, | |
| plugins: { | |
| legend: { | |
| display: false | |
| }, | |
| ...chartTooltipCallback.plugins | |
| } | |
| } | |
| }); | |
| const distributionLabels = ['<26%', '26-27%', '27-28%', '28-29%', '29-30%', '>30%']; | |
| const distributionOptions = { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| scales: { | |
| y: { | |
| beginAtZero: true, | |
| ticks: { display: false } | |
| }, | |
| x: { | |
| grid: { display: false } | |
| } | |
| }, | |
| plugins: { | |
| legend: { display: false }, | |
| tooltip: { | |
| callbacks: { | |
| title: (tooltipItems) => `Potency: ${tooltipItems[0].label}`, | |
| label: (tooltipItem) => `Relative Sample Count: ${tooltipItem.raw}` | |
| } | |
| } | |
| } | |
| }; | |
| new Chart(document.getElementById('naturalDistributionChart'), { | |
| type: 'bar', | |
| data: { | |
| labels: distributionLabels, | |
| datasets: [{ | |
| label: 'Number of Samples', | |
| data: [30, 65, 100, 85, 55, 25], | |
| backgroundColor: palette.blueLight, | |
| borderColor: palette.blueMid, | |
| borderWidth: 1 | |
| }] | |
| }, | |
| options: distributionOptions | |
| }); | |
| new Chart(document.getElementById('fraudulentDistributionChart'), { | |
| type: 'bar', | |
| data: { | |
| labels: distributionLabels, | |
| datasets: [{ | |
| label: 'Number of Samples', | |
| data: [5, 10, 15, 20, 150, 5], | |
| backgroundColor: [ | |
| palette.blueLight, | |
| palette.blueLight, | |
| palette.blueLight, | |
| palette.blueLight, | |
| palette.alertRed, | |
| palette.blueLight | |
| ], | |
| borderColor: palette.blueMid, | |
| borderWidth: 1 | |
| }] | |
| }, | |
| options: distributionOptions | |
| }); | |
| </script> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment