Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
__pycache__/
*.py[cod]
.venv/
venv/
output/
*.egg-info/
.pytest_cache/
.DS_Store
51 changes: 50 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,51 @@
# ALT-Label-System
Code-driven packaging and label generation system for ALTERNATIVE products.

**ALTERNATIVE™ Final Prepress + Retail Master Lock v2.0**

Code-driven label generation for 12oz sleek cans. Refinement and production preparation — **not a redesign**.

## Shelf Priority (1-second test)

1. **ALTERNATIVE™** — dominant wordmark
2. **THC strength** — single-line SKU callout
3. **Flavor** — LYCHEE SWEET TEA / PASSION FRUIT

## Production Export (8 PDFs)

```bash
pip install -r requirements.txt
python3 scripts/export_production.py
python3 scripts/validate_spec.py
```

Output: `output/production_v2/` + `MANIFEST.json`

### Deliverables

| Flavor | SKUs |
|--------|------|
| Lychee Sweet Tea | Session 5mg · Social 10mg · Reserve 50mg · Reserve 100mg |
| Passion Fruit | Session 5mg · Social 10mg · Reserve 50mg · Reserve 100mg |

## Audits (v2.0)

- **Compliance audit** — nutrition, ingredients, THC, warnings, QR, barcode/lot flags
- **Prepress audit** — bleed, CMYK, fonts, artboard dimensions
- **Hierarchy QC** — readability at 100% / 50% / 25% / 10%

## Manufacturer Data (exact)

| Flavor | Calories | Ingredients |
|--------|----------|-------------|
| Passion Fruit | 0 | 3 lines — manufacturer format |
| Lychee Sweet Tea | 20 | 9 lines — manufacturer format |

## Print Spec

- Trim: 182.22mm × 148mm + 3.175mm bleed
- CMYK · 300 DPI · PDF/X-1a (`--pdfx` or via export script)
- No decorative elements · No AI artifacts · No 20MG

## Pre-Press Warnings (expected)

UPC barcodes, lot/batch/best-by values, and state-specific warnings are flagged but do not block export — zones are preserved for production run assignment.
74 changes: 74 additions & 0 deletions config/brand.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# ALTERNATIVE™ Final Prepress + Retail Master Lock v2.0
# Refinement pass — NOT a redesign

version: "2.0"

brand:
name: "ALTERNATIVE™"
tagline: "A NEW STATE OF MIND"
positioning: "HEMP-DERIVED THC BEVERAGE"
website: "AlternativeBev.com"

canvas:
width_mm: 182.22
height_mm: 148.0
dpi: 300
bleed_mm: 3.175
safe_zone_mm: 4.0

colors:
matte_black:
cmyk: [0, 0, 0, 100]
warm_off_white:
cmyk: [0, 3, 8, 4]
champagne_gold:
cmyk: [0, 15, 35, 15]
deep_amber:
cmyk: [0, 45, 75, 25]

typography:
tagline: 7.5
a_symbol_scale: 0.90
brand_name_scale: 1.225
brand_name_spacing: 1.6
positioning: 6.5
sku: 9.0
thc_content: 11.0
flavor_scale: 1.35
flavor_base: 8.5
net_contents: 7.0
compliance_body: 5.5
compliance_heading: 6.5

manufacturing:
manufactured_by_label: "Manufactured By:"
manufactured_by: "Proleve"
manufactured_for_label: "Manufactured For:"
manufactured_for: "Invictus Wellness LLC"
address_lines:
- "11624 Red Bridge Rd"
- "Locust, NC 28097 USA"

qr_section:
heading_lines:
- "SCAN FOR"
- "LAB RESULTS"
- "INGREDIENTS"
- "PRODUCT INFO"
quiet_zone_ratio: 0.12

warning_panel:
heading: "WARNING:"
lines:
- "For adults 21 years of age or older."
- "Keep out of reach of children."
- "Do not drive or operate machinery after use."
- "Do not use while pregnant or breastfeeding."
- "Intoxicating effects may be delayed."
- "Consume responsibly."

active_ingredient:
label: "Active Ingredient"
substance: "Hemp-Derived Delta-9 THC"

net_contents: "12 FL OZ (355 mL)"
10 changes: 10 additions & 0 deletions config/flavors.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Flavor system — no fruit graphics, no illustrations

flavors:
- id: lychee_sweet_tea
name: "LYCHEE SWEET TEA"
accent_color: champagne_gold

- id: passion_fruit
name: "PASSION FRUIT"
accent_color: deep_amber
26 changes: 26 additions & 0 deletions config/skus.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Locked SKU system — no 20MG, no additional strengths

skus:
- id: session_5mg
name: "SESSION™"
thc_mg: 5
thc_line: "5MG HEMP-DERIVED THC PER CAN"
active_ingredient_amount: "5mg"

- id: social_10mg
name: "SOCIAL™"
thc_mg: 10
thc_line: "10MG HEMP-DERIVED THC PER CAN"
active_ingredient_amount: "10mg"

- id: reserve_50mg
name: "RESERVE™"
thc_mg: 50
thc_line: "50MG HEMP-DERIVED THC PER CAN"
active_ingredient_amount: "50mg"

- id: reserve_100mg
name: "RESERVE™"
thc_mg: 100
thc_line: "100MG HEMP-DERIVED THC PER CAN"
active_ingredient_amount: "100mg"
26 changes: 26 additions & 0 deletions data/compliance/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Compliance Data — Manufacturer Provided

Retail Master Lock v1.0 requires **exact manufacturer-provided** nutrition and ingredient data. No estimates.

## Flavor-Level Data (locked)

| Flavor | Calories | Ingredients |
|--------|----------|-------------|
| PASSION FRUIT | 0 | Carbonated Water, Natural Passion Fruit Flavor, Hemp-Derived THC |
| LYCHEE SWEET TEA | 20 | Water, Organic Cane Sugar, Natural Lychee Flavoring, Citric Acid, Malic Acid, Tartaric Acid, Tea Flavoring, Potassium Sorbate, Hemp-Derived Delta-9 THC |

Stored in `flavors/{flavor_id}.json`. Product files inherit this data automatically.

## Product Overrides

Optional per-SKU files in `products/{sku_id}_{flavor_id}.json` for:
- Assigned UPC barcode
- Lot / batch / best-by per production run
- State-specific warnings

## Generate Labels

```bash
python3 scripts/generate_labels.py --mode production
python3 scripts/validate_spec.py
```
15 changes: 15 additions & 0 deletions data/compliance/TEMPLATE.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"_comment": "Manufacturer-provided data only. Flavor-level data lives in data/compliance/flavors/",
"verified": true,
"product_id": "alternative_session_5mg_lychee_sweet_tea",
"source": "manufacturer_provided",
"nutrition_facts": {
"serving_size": "1 can (355 mL)",
"servings_per_container": "1",
"calories": "FROM_MANUFACTURER",
"nutrients": []
},
"ingredients": "FROM_MANUFACTURER",
"qr_url": "https://AlternativeBev.com/lab-results",
"state_warnings": []
}
22 changes: 22 additions & 0 deletions data/compliance/flavors/lychee_sweet_tea.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"verified": true,
"source": "manufacturer_provided",
"nutrition_facts": {
"serving_size": "1 can (355 mL)",
"servings_per_container": "1",
"calories": "20",
"nutrients": []
},
"ingredients": "Water, Organic Cane Sugar, Natural Lychee Flavoring, Citric Acid, Malic Acid, Tartaric Acid, Tea Flavoring, Potassium Sorbate, Hemp-Derived Delta-9 THC",
"ingredients_lines": [
"Water",
"Organic Cane Sugar",
"Natural Lychee Flavoring",
"Citric Acid",
"Malic Acid",
"Tartaric Acid",
"Tea Flavoring",
"Potassium Sorbate",
"Hemp-Derived Delta-9 THC"
]
}
16 changes: 16 additions & 0 deletions data/compliance/flavors/passion_fruit.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"verified": true,
"source": "manufacturer_provided",
"nutrition_facts": {
"serving_size": "1 can (355 mL)",
"servings_per_container": "1",
"calories": "0",
"nutrients": []
},
"ingredients": "Carbonated Water, Natural Passion Fruit Flavor, Hemp-Derived THC",
"ingredients_lines": [
"Carbonated Water",
"Natural Passion Fruit Flavor",
"Hemp-Derived THC"
]
}
Empty file.
60 changes: 60 additions & 0 deletions data/compliance/schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ALTERNATIVE Compliance Data v2.0",
"type": "object",
"required": [
"verified",
"product_id",
"nutrition_facts",
"ingredients",
"state_warnings"
],
"properties": {
"verified": { "type": "boolean" },
"product_id": { "type": "string" },
"source": { "type": "string" },
"nutrition_facts": {
"type": "object",
"required": ["serving_size", "servings_per_container", "calories", "nutrients"],
"properties": {
"serving_size": { "type": "string" },
"servings_per_container": { "type": "string" },
"calories": { "type": "string" },
"nutrients": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "amount"],
"properties": {
"name": { "type": "string" },
"amount": { "type": "string" },
"daily_value": { "type": ["string", "null"] }
}
}
}
}
},
"ingredients": { "type": "string" },
"ingredients_lines": {
"type": "array",
"items": { "type": "string" },
"description": "Manufacturer line-by-line ingredient formatting"
},
"barcode": {
"type": "object",
"properties": {
"upc": { "type": "string", "pattern": "^[0-9]{12}$" },
"type": { "type": "string", "enum": ["upc_a", "ean_13"] }
}
},
"qr_url": { "type": "string" },
"lot_number": { "type": "string" },
"batch_number": { "type": "string" },
"best_by": { "type": "string" },
"state_warnings": {
"type": "array",
"items": { "type": "string" }
}
},
"additionalProperties": false
}
5 changes: 5 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
reportlab>=4.0.0
PyYAML>=6.0
jsonschema>=4.20.0
qrcode[pil]>=7.4
Pillow>=10.0.0
Loading