From 872e5a1a6a8b67188e69f231d7a01cbc9e21b3b5 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 21 Dec 2025 07:51:51 +0100 Subject: [PATCH] before race --- Requirements.md | 146 +++++++++++++++++++++++++++++++++++ app/components/Drop.tsx | 4 +- app/components/Nav.tsx | 10 ++- app/components/PastDrops.tsx | 119 ++++++++++++++++++---------- app/globals.css | 26 +++++-- app/page.tsx | 2 +- app/past-drops/page.tsx | 39 ++++++++++ cbd420.sql | 49 +++++++++++- public/header.jpg | Bin 0 -> 28033 bytes 9 files changed, 340 insertions(+), 55 deletions(-) create mode 100644 Requirements.md create mode 100644 app/past-drops/page.tsx create mode 100644 public/header.jpg diff --git a/Requirements.md b/Requirements.md new file mode 100644 index 0000000..2c24c0a --- /dev/null +++ b/Requirements.md @@ -0,0 +1,146 @@ +420Deals.ch – Project Brief (for Dev) + +Core idea: +420Deals.ch is NOT a normal shop. +It’s a collective drop system. + +There is always only ONE active product drop. +Each drop has a fixed total batch (e.g. 1kg). +Users buy parts of the batch (50g / 100g / 250g). +Everyone pays the same wholesale price per gram. +When the batch is fully sold → the drop ends automatically. +Only after that, the next drop goes live. + +Value proposition: +Wholesale prices for private buyers through collective purchasing. +No retail packaging. No marketing markup. + +Page structure: +Everything happens on ONE page. + +Navigation (sticky): + +Drop + +Past Drops + +Community + +Header: +Text only. +Explains why prices are low. +No big images, no CTA. +User attention goes directly to the active drop. + +Current Drop section: + +Product image + +Product name + batch info (e.g. 1kg, indoor, Switzerland) + +Price per gram (incl. 2.5% VAT) + +Live progress bar (how much of the batch is sold) + +Quantity selection (50g / 100g / 250g) + +CTA: “Join the Drop” + +Important: +Same price for everyone. +No discounts, no codes. +The advantage comes only from collective volume. + +Progress bar logic: +Example: +Total batch: 1000g +Sold: 620g +Progress: 62% + +Purpose: +Transparency, trust, FOMO. + +Auto-Switch Drop (important): +When soldGrams >= totalBatch: + +Replace the entire drop section with: +“Drop sold out” +“Next collective drop coming soon” + +Countdown timer + +Users cannot buy anymore, only wait or subscribe. + +Countdown: +Countdown shows days / hours / minutes to next drop. +When countdown ends → next drop can go live. + +Why it’s cheap section: +Short explanation: +Retail ~10 CHF/g +Collective ~2.5 CHF/g +No retail packaging +No tobacco tax +No intermediaries + +Tone: factual, clean, Swiss-style. + +Community / Notifications: +Purpose: users don’t need to check the site daily. + +Fields: + +Email + +WhatsApp number + +Optional later: +Telegram broadcast (one-way only, no public chat). + +No community chat on site → keeps it premium and controlled. + +Past Drops: +Show previous drops: + +Product name + +“Sold out in XX hours” + +Purpose: +Trust, credibility, FOMO. + +Position: +After current drop, before footer. + +Footer: + +THC < 1% + +18+ only + +Switzerland + +Minimal text + +Technical notes: +Frontend: +Dark theme, no emojis, no flashy colors. +Focus on typography and spacing. + +Backend: +Drop object: + +Name + +Total batch size + +Sold amount + +Start / end date +Progress bar updates dynamically. +Auto-switch when sold out. +Countdown configurable. + +Summary: +420Deals.ch is not a shop, not a forum, not a headshop. +It’s a premium collective buying platform for CBD in Switzerland. \ No newline at end of file diff --git a/app/components/Drop.tsx b/app/components/Drop.tsx index 936c423..3fc6742 100644 --- a/app/components/Drop.tsx +++ b/app/components/Drop.tsx @@ -419,8 +419,8 @@ export default function Drop() { disabled={processing} style={{ padding: '12px 24px', - background: 'var(--accent)', - color: '#000', + background: '#0a7931', + color: '#fff', border: 'none', borderRadius: '14px', cursor: processing ? 'not-allowed' : 'pointer', diff --git a/app/components/Nav.tsx b/app/components/Nav.tsx index f44f13e..021c802 100644 --- a/app/components/Nav.tsx +++ b/app/components/Nav.tsx @@ -54,7 +54,11 @@ export default function Nav() { return ( <>