Skip to content

Instantly share code, notes, and snippets.

@lourinaldi
Created July 31, 2025 00:27
Show Gist options
  • Select an option

  • Save lourinaldi/ecffcce367ee555770772c818f599a33 to your computer and use it in GitHub Desktop.

Select an option

Save lourinaldi/ecffcce367ee555770772c818f599a33 to your computer and use it in GitHub Desktop.
potency inflation and laboratory malfeasance in Connecticut's cannabis market
<!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