THE RITUAL
IS HERE,
NYC

NEW YORK COLLECTION

DROP ONE

The significance of this drop is simple, it marks the first official Jerome Baker cannabis release in New York. Three limited flower and preroll collections, each paired with only 250 handcrafted collectible box sets, bringing together premium cannabis, bespoke glass, and legacy in a release built for true heads and collectors.

Where to Buy

PREMIUM FLOWER COLLECTION

Limited 7g (quarter-ounce) drops of top-tier New York cultivation, hand-picked by the Jerome Baker team. Small runs, premium selection, and gone when it’s gone. Each collection lives for 90 days, then retires permanently. No restocks. No repeats.

CRAFT PREROLLS COLLECTION

1g prerolls from select New York harvests, chosen by the Jerome Baker team. Tight batches, premium smoke, built for the moment. Released alongside the 7g flower drops and retired after 90 days. Miss it once, it’s gone forever.

LIMITED BOX SET - 250 ONLY

Limited to 250. Numbered and signed. Each set includes a one-of-one, hand-made glass pipe built to match the collection, paired with 7g premium flower, rolling papers, and a matchbook in original design. No two pipes are the same.

One run. 90 days. Then it’s gone forever. No restocks. No repeats. No exceptions.

RITUAL SPOTLIGHT

A living collection of launches, collaborations, cultural signals, and stories we believe are worth your attention. From exclusive releases to media features and flagship activations, explore the moments helping shape the evolving Jerome Baker story.

GRAB 1 OF 250 ALPINE HEMP HATS

THREE STRAINS. THREE HATS. ONE RITUAL

The Jerome Baker x Alpine Hemp collection pairs three limited hat designs with the inaugural New York strain drop, each created as a collectible extension of its matching cultivar. Limited to just 250 pieces per design and available only through select flagship dispensaries.

ORIGINAL GLASS

HAND-MADE BY JEROME BAKER

View Collection

RITUAL MERCH

NY DROP ONE COLLECTION

Shop Online

Where to Buy

Jerome Baker isn’t everywhere by design. The Collection is available exclusively through a curated network of retail partners selected for their culture, standards, and commitment to the craft. Availability is limited and inventory is released in small quantities throughout the year.

Where to Buy

Jerome Baker isn’t everywhere by design. The Collection is available exclusively through a curated network of retail partners selected for their culture, standards, and commitment to the craft. Availability is limited and inventory is released in small quantities throughout the year.

Where to Buy

Jerome Baker Flagship Retailers are a hand-selected group of dispensaries chosen for their alignment with our culture, standards, and vision. These are the places to discover the collection as intended, through partners who honor the ritual.

Loading stores…

Find JB Products Near You

Twenty8Gramz

2201 Avenue U
(718) 490-3614
Open
Closes 11 PM

Grow Together Dispensary

2370 Coney Island Ave
(917) 722-3564
Open
Closes 10 PM

All Good Dispensary

3405 Avenue H
(929) 420-0021
Open
Closes 10 PM

KushMart

1413 Kings Hwy
(212) 381-8355
Open
Closes 10 PM

IN THE MEDIA

From legacy press to new cultural milestones, News and Media follows the evolving Jerome Baker story through launches, collaborations, founder features, events, and moments shaping the ritual in new generations.

Jerome Baker Designs Announces Exclusive New York Launch

NEW YORK — Jerome Baker Designs, the legendary glass

Legal Weed Left the Bong Makers Behind

The federal paraphernalia statute that helped send Jerome Baker

Texas Bill Offers Improvements To State Cannabis Law

A bill has been filed to expand access to

Twenty8Gramz

2201 Avenue U
(718) 490-3614
Open
Closes 11 PM

Twenty8Gramz

2201 Avenue U
(718) 490-3614
Open
Closes 11 PM

Twenty8Gramz

2201 Avenue U
(718) 490-3614
Open
Closes 11 PM

Twenty8Gramz

2201 Avenue U
(718) 490-3614
Open
Closes 11 PM

Twenty8Gramz

2201 Avenue U
(718) 490-3614
Open
Closes 11 PM

Twenty8Gramz

2201 Avenue U
(718) 490-3614
Open
Closes 11 PM

Twenty8Gramz

2201 Avenue U
(718) 490-3614
Open
Closes 11 PM

Twenty8Gramz

2201 Avenue U
(718) 490-3614
Open
Closes 11 PM

Cotton Candy Kush

The Chosen Cut Flower, 7g

Cotton Candy Kush in the JB 7g jar. Hybrid · 7g · Tested 32.73% THC. Spun-sugar sweet nose, smooth hybrid body, and the loudest number in the drop. Cured slow, sealed in JBD glass. NY 2026 Drop 1 — limited run, once it's gone, it's gone.

LINEAGE

Detroit Runtz × Forbidden Runtz

THC RANGE

24–28%

GROWN

Kincardine, ON — Greenhouse

PROFILE

Gas · Grape · Candy

TERPENESS

Caryophyllene
Humulene
Limonene
Linalool

Cotton Candy Kush

The Chosen Cut Flower, 7g

Cotton Candy Kush in the JB 7g jar. Hybrid · 7g · Tested 32.73% THC. Spun-sugar sweet nose, smooth hybrid body, and the loudest number in the drop. Cured slow, sealed in JBD glass. NY 2026 Drop 1 — limited run, once it's gone, it's gone.

LINEAGE

Detroit Runtz × Forbidden Runtz

THC RANGE

24–28%

GROWN

Kincardine, ON — Greenhouse

PROFILE

Gas · Grape · Candy

TERPENESS

Caryophyllene
Humulene
Limonene
Linalool

<div style="max-width:400px;margin:20px auto;font-family:sans-serif;">
    <input type="text" id="jbd-code" placeholder="Enter your JBD code"
      style="width:100%;padding:12px;font-size:16px;border:1px solid #ccc;border-radius:6px;margin-bottom:8px;">
    <button onclick="jbdCheck()"
      style="width:100%;padding:12px;background:
#DA2342;color:#fff;border:none;border-radius:6px;font-weight:bold;cursor
  :pointer;font-size:14px;">
      VERIFY CODE
    </button>
    <div id="jbd-result" style="margin-top:12px;text-align:center;font-size:14px;"></div>
  </div>
<script>
async function jbdCheck(){
  var c = document.getElementById('jbd-code').value.trim();
  if(!c) return;
  if(c !== 'CODETE$T') c = c.toUpperCase();
  document.getElementById('jbd-result').textContent = 'Checking...';
  
  try {
    var r = await fetch('https://jbcustomer.cannacrypted.com/api/code/validate/' + encodeURIComponent(c));
    var d = await r.json();
    if(d.valid) {
      localStorage.setItem('jbd_verified', '1');
      localStorage.setItem('jbd_product', d.product || 'JBD');
      console.log('Verified! Redirecting...');
      setTimeout(() => {
        window.location.href = '/jbstore/';
      }, 500);
    } else {
      document.getElementById('jbd-result').innerHTML =
        '<span style="color:red;">✗ ' + (d.reason || 'Invalid or expired code') + '</span>';
    }
  } catch(e) {
    document.getElementById('jbd-result').textContent = 'Error checking code. Try again.';
  }
}

// AUTO-VERIFY - check immediately if code in URL
(function() {
  const urlParams = new URLSearchParams(window.location.search);
  const code = urlParams.get('code');
  
  if(code) {
    console.log('Code found in URL:', code);
    // Fill the input
    document.getElementById('jbd-code').value = code;
    // Auto-submit immediately
    jbdCheck();
  }
})();
</script>
<div style="max-width:400px;margin:20px auto;font-family:sans-serif;">
    <input type="text" id="jbd-code" placeholder="Enter your JBD code"
      style="width:100%;padding:12px;font-size:16px;border:1px solid #ccc;border-radius:6px;margin-bottom:8px;">
    <button onclick="jbdCheck()"
      style="width:100%;padding:12px;background:
#DA2342;color:#fff;border:none;border-radius:6px;font-weight:bold;cursor
  :pointer;font-size:14px;">
      VERIFY CODE
    </button>
    <div id="jbd-result" style="margin-top:12px;text-align:center;font-size:14px;"></div>
  </div>
<script>
async function jbdCheck(){
  var c = document.getElementById('jbd-code').value.trim();
  if(!c) return;
  if(c !== 'CODETE$T') c = c.toUpperCase();
  document.getElementById('jbd-result').textContent = 'Checking...';
  
  try {
    var r = await fetch('https://jbcustomer.cannacrypted.com/api/code/validate/' + encodeURIComponent(c));
    var d = await r.json();
    if(d.valid) {
      localStorage.setItem('jbd_verified', '1');
      localStorage.setItem('jbd_product', d.product || 'JBD');
      console.log('Verified! Redirecting...');
      setTimeout(() => {
        window.location.href = '/jbstore/';
      }, 500);
    } else {
      document.getElementById('jbd-result').innerHTML =
        '<span style="color:red;">✗ ' + (d.reason || 'Invalid or expired code') + '</span>';
    }
  } catch(e) {
    document.getElementById('jbd-result').textContent = 'Error checking code. Try again.';
  }
}

// AUTO-VERIFY - check immediately if code in URL
(function() {
  const urlParams = new URLSearchParams(window.location.search);
  const code = urlParams.get('code');
  
  if(code) {
    console.log('Code found in URL:', code);
    // Fill the input
    document.getElementById('jbd-code').value = code;
    // Auto-submit immediately
    jbdCheck();
  }
})();
</script>
<div style="max-width:400px;margin:20px auto;font-family:sans-serif;">
    <input type="text" id="jbd-code" placeholder="Enter your JBD code"
      style="width:100%;padding:12px;font-size:16px;border:1px solid #ccc;border-radius:6px;margin-bottom:8px;">
    <button onclick="jbdCheck()"
      style="width:100%;padding:12px;background:
#DA2342;color:#fff;border:none;border-radius:6px;font-weight:bold;cursor
  :pointer;font-size:14px;">
      VERIFY CODE
    </button>
    <div id="jbd-result" style="margin-top:12px;text-align:center;font-size:14px;"></div>
  </div>
<script>
async function jbdCheck(){
  var c = document.getElementById('jbd-code').value.trim();
  if(!c) return;
  if(c !== 'CODETE$T') c = c.toUpperCase();
  document.getElementById('jbd-result').textContent = 'Checking...';
  
  try {
    var r = await fetch('https://jbcustomer.cannacrypted.com/api/code/validate/' + encodeURIComponent(c));
    var d = await r.json();
    if(d.valid) {
      localStorage.setItem('jbd_verified', '1');
      localStorage.setItem('jbd_product', d.product || 'JBD');
      console.log('Verified! Redirecting...');
      setTimeout(() => {
        window.location.href = '/jbstore/';
      }, 500);
    } else {
      document.getElementById('jbd-result').innerHTML =
        '<span style="color:red;">✗ ' + (d.reason || 'Invalid or expired code') + '</span>';
    }
  } catch(e) {
    document.getElementById('jbd-result').textContent = 'Error checking code. Try again.';
  }
}

// AUTO-VERIFY - check immediately if code in URL
(function() {
  const urlParams = new URLSearchParams(window.location.search);
  const code = urlParams.get('code');
  
  if(code) {
    console.log('Code found in URL:', code);
    // Fill the input
    document.getElementById('jbd-code').value = code;
    // Auto-submit immediately
    jbdCheck();
  }
})();
</script>
<div style="max-width:400px;margin:20px auto;font-family:sans-serif;">
    <input type="text" id="jbd-code" placeholder="Enter your JBD code"
      style="width:100%;padding:12px;font-size:16px;border:1px solid #ccc;border-radius:6px;margin-bottom:8px;">
    <button onclick="jbdCheck()"
      style="width:100%;padding:12px;background:
#DA2342;color:#fff;border:none;border-radius:6px;font-weight:bold;cursor
  :pointer;font-size:14px;">
      VERIFY CODE
    </button>
    <div id="jbd-result" style="margin-top:12px;text-align:center;font-size:14px;"></div>
  </div>
<script>
async function jbdCheck(){
  var c = document.getElementById('jbd-code').value.trim();
  if(!c) return;
  if(c !== 'CODETE$T') c = c.toUpperCase();
  document.getElementById('jbd-result').textContent = 'Checking...';
  
  try {
    var r = await fetch('https://jbcustomer.cannacrypted.com/api/code/validate/' + encodeURIComponent(c));
    var d = await r.json();
    if(d.valid) {
      localStorage.setItem('jbd_verified', '1');
      localStorage.setItem('jbd_product', d.product || 'JBD');
      console.log('Verified! Redirecting...');
      setTimeout(() => {
        window.location.href = '/jbstore/';
      }, 500);
    } else {
      document.getElementById('jbd-result').innerHTML =
        '<span style="color:red;">✗ ' + (d.reason || 'Invalid or expired code') + '</span>';
    }
  } catch(e) {
    document.getElementById('jbd-result').textContent = 'Error checking code. Try again.';
  }
}

// AUTO-VERIFY - check immediately if code in URL
(function() {
  const urlParams = new URLSearchParams(window.location.search);
  const code = urlParams.get('code');
  
  if(code) {
    console.log('Code found in URL:', code);
    // Fill the input
    document.getElementById('jbd-code').value = code;
    // Auto-submit immediately
    jbdCheck();
  }
})();
</script>

Cotton Candy Kush BOX Set

The Complete Drop Box Set

Hybrid drop in box form: 7g Cotton Candy Kush jar, pattern-matched papers + matches, custom Clearboy with blue accents. Hybrid · 7g flower · Tested 32.73% THC. Hand-numbered presentation box. LE 250 — once these are gone, they're gone.

GLASS

Yellow Custom Clearboy

FLOWER

7g Cotton Candy Kush

EDITION

LE 250 · numbered

PROFILE

Grapefruit · Diesel · Lime

Cotton Candy Kush Box Set

The Complete Drop Box Set

Hybrid drop in box form: 7g Cotton Candy Kush jar, pattern-matched papers + matches, custom Clearboy with blue accents. Hybrid · 7g flower · Tested 32.73% THC. Hand-numbered presentation box. LE 250 — once these are gone, they're gone.

GLASS

Yellow Custom Clearboy

FLOWER

7g Cotton Candy Kush

EDITION

LE 250 · numbered

PROFILE

Grapefruit · Diesel · Lime

NYC Sour Diesel Box Set

The Complete Drop Box Set

Sativa drop, full set: 7g NYC Sour D, JB-pattern papers + matches, custom Clearboy with yellow accents. Sativa · 7g flower · Tested 26.58% THC. East Coast lift in a hand-numbered box. LE 250 — collector territory once it sells through.

GLASS

Blue Custom Clearboy

FLOWER

7g Double Runtz

EDITION

LE 250 · numbered

PROFILE

Gas · Grape · Candy

NYC Sour Diesel Box Set

The Complete Drop Box Set

Sativa drop, full set: 7g NYC Sour D, JB-pattern papers + matches, custom Clearboy with yellow accents. Sativa · 7g flower · Tested 26.58% THC. East Coast lift in a hand-numbered box. LE 250 — collector territory once it sells through.

GLASS

Blue Custom Clearboy

FLOWER

7g Double Runtz

EDITION

LE 250 · numbered

PROFILE

Gas · Grape · Candy

Cherry Gushers Box Set

The Complete Drop Box Set

The full Indica drop in one box: 7g Cherry Gushers jar, JB-pattern rolling papers + matchbook, custom Clearboy with red drop accents. Indica · 7g flower · Tested 26.54% THC. Hand-numbered, sealed, packed in a presentation box you'll keep. LE 250 — once they're out, they're out.

GLASS

Red Custom Clearboy

FLOWER

7g Cherry Gushers

EDITION

LE 250 · numbered

PROFILE

Cherry · Tropical · Gas

CHERRY GUSHERS BOX SET

The Complete Drop Box Set

The full Indica drop in one box: 7g Cherry Gushers jar, JB-pattern rolling papers + matchbook, custom Clearboy with red drop accents. Indica · 7g flower · Tested 26.54% THC. Hand-numbered, sealed, packed in a presentation box you'll keep. LE 250 — once they're out, they're out.

GLASS

Red Custom Clearboy

FLOWER

7g Cherry Gushers

EDITION

LE 250 · numbered

PROFILE

Cherry · Tropical · Gas

GRAPE NANNA

Ready To Fire Preroll, 1g

Grape Nana one-gram pre-roll. Concord grape sweetness, sleepy purple finish. Roll-up-and-out energy. Paper-matched to the JB Indica drop. Tested 32.42% THC. NY 2026 Drop 1, single batch — won't be re-run.

LINEAGE

Banana OG × Grape Pie BX

THC RANGE

28-32%

AWARDS

Leafly Strain of the Year ’24

PROFILE

Grape · Banana · Cream

TERPENESS

Myrcene
Linalool
Caryophyllene

GRAPE NANNA

Ready To Fire Preroll, 1g

Grape Nana one-gram pre-roll. Concord grape sweetness, sleepy purple finish. Roll-up-and-out energy. Paper-matched to the JB Indica drop. Tested 32.42% THC. NY 2026 Drop 1, single batch — won't be re-run.

LINEAGE

Banana OG × Grape Pie BX

THC RANGE

28-32%

AWARDS

Leafly Strain of the Year ’24

PROFILE

Grape · Banana · Cream

TERPENESS

Myrcene
Linalool
Caryophyllene

SUPER BOOF ROLL

Ready To Fire Preroll, 1g

Super Boof one-gram pre-roll. Citrus on the front, OG funk on the finish. Even keel — productive without losing your head. Hand-rolled, paper-matched to the JB Hybrid drop. Tested 28.84% THC. NY 2026 Drop 1, single batch — won't be re-run.

LINEAGE

Black Cherry Punch x Tropicana Cookies

THC RANGE

28-32%

AWARDS

Leafly Strain of the Year ’24

PROFILE

Berry – Citrus – Funk

TERPENESS

Limonene
Caryophyllene
Linalool

SUPER BOOF ROLL

Ready To Fire Preroll, 1g

Super Boof one-gram pre-roll. Citrus on the front, OG funk on the finish. Even keel — productive without losing your head. Hand-rolled, paper-matched to the JB Hybrid drop. Tested 28.84% THC. NY 2026 Drop 1, single batch — won't be re-run.

LINEAGE

Black Cherry Punch x Tropicana Cookies

THC RANGE

28-32%

AWARDS

Leafly Strain of the Year ’24

PROFILE

Berry – Citrus – Funk

TERPENESS

Limonene
Caryophyllene
Linalool

NYC Sour Diesel

Ready To Fire Preroll, 1g

NYC Sour Diesel one-gram pre-roll. Fuel-forward with a citrus snap and a clean cerebral lift — the borough in a paper. Hand-rolled, paper-matched to the JB Sativa drop. Tested 23.94% THC. NY 2026 Drop 1, single batch — won't be re-run.

LINEAGE

Notorious THC × Very Cherry

THC RANGE

26-30%

AWARDS

Leafly Strain of the Year ’24

PROFILE

Jelly · Cherry · Cream

TERPENESS

Terpinolene
Caryophyllene
Myrcene

NYC Sour Diesel

Ready To Fire Preroll, 1g

NYC Sour Diesel one-gram pre-roll. Fuel-forward with a citrus snap and a clean cerebral lift — the borough in a paper. Hand-rolled, paper-matched to the JB Sativa drop. Tested 23.94% THC. NY 2026 Drop 1, single batch — won't be re-run.

LINEAGE

Notorious THC × Very Cherry

THC RANGE

26-30%

AWARDS

Leafly Strain of the Year ’24

PROFILE

Jelly · Cherry · Cream

TERPENESS

Terpinolene
Caryophyllene
Myrcene

NYC Diesel

The Chosen Cut Flower, 7g

NYC Sour D in the JB jar — the borough in a quarter ounce. Fuel forward, citrus snap on the back end, the kind of cerebral lift that gets you out the door. East Coast cure, NY 2026 Drop 1 — limited run.

LINEAGE

Mexican × Afghani heritage

THC RANGE

20–25%

Breeder Est.

Tacoma, WA — 2008

PROFILE

Grapefruit · Diesel · Lime

TERPENESS

Caryophyllene
Limonene
Myrcene

NYC Diesel

The Chosen Cut Flower, 7g

NYC Sour D in the JB jar — the borough in a quarter ounce. Fuel forward, citrus snap on the back end, the kind of cerebral lift that gets you out the door. East Coast cure, NY 2026 Drop 1 — limited run.

LINEAGE

Mexican × Afghani heritage

THC RANGE

20–25%

BREEDER EST.

Tacoma, WA — 2008

PROFILE

Grapefruit · Diesel · Lime

TERPENESS

Caryophyllene
Limonene
Myrcene

Double Runtz

The Chosen Cut Flower, 7g

Double Runtz in the JB 7g jar. Hybrid · 7g · Tested 26.21% THC. Loud gas-sweet bouquet with a candy backbone. Balanced enough for a Sunday session, sturdy enough for a Friday night. NY 2026 Drop 1 — limited run.

LINEAGE

Detroit Runtz × Forbidden Runtz

THC RANGE

24–28%

GROWN

Kincardine, ON — Greenhouse

PROFILE

Gas · Grape · Candy

TERPENESS

Caryophyllene
Humulene
Limonene
Linalool

Double Runtz

The Chosen Cut Flower, 7g

Double Runtz in the JB 7g jar. Hybrid · 7g · Tested 26.21% THC. Loud gas-sweet bouquet with a candy backbone. Balanced enough for a Sunday session, sturdy enough for a Friday night. NY 2026 Drop 1 — limited run.

LINEAGE

Detroit Runtz × Forbidden Runtz

THC RANGE

24–28%

GROWN

Kincardine, ON — Greenhouse

PROFILE

Gas · Grape · Candy

TERPENESS

Caryophyllene
Humulene
Limonene
Linalool

RL Haze

The Chosen Cut Flower, 7g

RL Haze, full classic. Spicy old-school sativa terps, lifted clear high, no wobble. The strain that built the Sativa lane — sealed the way Jerome would seal it. NY 2026 Drop 1 — limited run.

LINEAGE

Black Cherry Punch × Gushers

THC RANGE

18–22%

ORIGIN

Amsterdam, est. 1994

PROFILE

Spice · Citrus · Incense

TERPENESS

Terpinolene
Pinene
Ocimene

RL Haze

The Chosen Cut Flower, 7g

RL Haze, full classic. Spicy old-school sativa terps, lifted clear high, no wobble. The strain that built the Sativa lane — sealed the way Jerome would seal it. NY 2026 Drop 1 — limited run.

LINEAGE

Mex × Col × Thai × S. Indian

THC RANGE

18-22%

ORIGIN

Amsterdam, est. 1994

PROFILE

Spice · Citrus · Incense

TERPENESS

Terpinolene
Pinene
Ocimene

Cherry Gushers

The Chosen Cut Flower, 7g

Heavy-hitting Cherry Gushers in the JB 7g jar. Indica · 7g · Tested 26.54% THC. Sweet candy nose, deep purple floor — the kind of evening jar that makes a Tuesday feel like a holiday. Cured slow, sealed in JBD glass. NY 2026 Drop 1 — limited run, once it's gone, it's gone.

LINEAGE

Black Cherry Punch × Gushers

THC RANGE

28–32%

FLOWERING

70–75 days

PROFILE

Cherry · Tropical · Gas

TERPENESS

Caryophyllene
Limonene
Myrcene

Cherry Gushers

The Chosen Cut Flower, 7g

Heavy-hitting Cherry Gushers in the JB 7g jar. Indica · 7g · Tested 26.54% THC. Sweet candy nose, deep purple floor — the kind of evening jar that makes a Tuesday feel like a holiday. Cured slow, sealed in JBD glass. NY 2026 Drop 1 — limited run, once it's gone, it's gone.

LINEAGE

Black Cherry Punch × Gushers

THC RANGE

28-32%

FLOWERING

70–75 days

PROFILE

Cherry · Tropical · Gas

TERPENESS

Caryophyllene
Limonene
Myrcene

<div style="max-width:400px;margin:20px auto;font-family:sans-serif;">
    <input type="text" id="jbd-code" placeholder="Enter your JBD code"
      style="width:100%;padding:12px;font-size:16px;border:1px solid #ccc;border-radius:6px;margin-bottom:8px;">
    <button onclick="jbdCheck()"
      style="width:100%;padding:12px;background:
#DA2342;color:#fff;border:none;border-radius:6px;font-weight:bold;cursor
  :pointer;font-size:14px;">
      VERIFY CODE
    </button>
    <div id="jbd-result" style="margin-top:12px;text-align:center;font-size:14px;"></div>
  </div>
<script>
async function jbdCheck(){
  var c = document.getElementById('jbd-code').value.trim();
  if(!c) return;
  if(c !== 'CODETE$T') c = c.toUpperCase();
  document.getElementById('jbd-result').textContent = 'Checking...';
  
  try {
    var r = await fetch('https://jbcustomer.cannacrypted.com/api/code/validate/' + encodeURIComponent(c));
    var d = await r.json();
    if(d.valid) {
      localStorage.setItem('jbd_verified', '1');
      localStorage.setItem('jbd_product', d.product || 'JBD');
      console.log('Verified! Redirecting...');
      setTimeout(() => {
        window.location.href = '/jbstore/';
      }, 500);
    } else {
      document.getElementById('jbd-result').innerHTML =
        '<span style="color:red;">✗ ' + (d.reason || 'Invalid or expired code') + '</span>';
    }
  } catch(e) {
    document.getElementById('jbd-result').textContent = 'Error checking code. Try again.';
  }
}

// AUTO-VERIFY - check immediately if code in URL
(function() {
  const urlParams = new URLSearchParams(window.location.search);
  const code = urlParams.get('code');
  
  if(code) {
    console.log('Code found in URL:', code);
    // Fill the input
    document.getElementById('jbd-code').value = code;
    // Auto-submit immediately
    jbdCheck();
  }
})();
</script>