diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100755 index 0000000..96937a6 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,10 @@ +{ + "permissions": { + "allow": [ + "Skill(orchestrate)", + "WebSearch", + "Skill(hop-search)", + "WebFetch(domain:localhost)" + ] + } +} diff --git a/.cpanel.yml b/.cpanel.yml old mode 100644 new mode 100755 index 64fee2c..bc1abec --- a/.cpanel.yml +++ b/.cpanel.yml @@ -10,6 +10,7 @@ deployment: - /bin/cp -r src/terms-of-service "$DEPLOYPATH" - /bin/cp -r src/api "$DEPLOYPATH" - /bin/cp src/index.html "$DEPLOYPATH" + - /bin/cp .htaccess "$DEPLOYPATH" - /bin/cp src/404.html "$DEPLOYPATH" - /bin/cp src/500.html "$DEPLOYPATH" - /bin/cp src/robots.txt "$DEPLOYPATH" diff --git a/.dockerignore b/.dockerignore old mode 100644 new mode 100755 diff --git a/.env.example b/.env.example old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.htaccess b/.htaccess new file mode 100755 index 0000000..30cf9de --- /dev/null +++ b/.htaccess @@ -0,0 +1,22 @@ +Options -Indexes +RewriteEngine On + +# Deny sensitive files + + Order allow,deny + Deny from all + + +# Deny tools directory +RewriteRule ^tools/ - [F,L] + +# Route homepage and all non-asset, non-api requests through PHP router +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteCond %{REQUEST_URI} !^/assets/ +RewriteCond %{REQUEST_URI} !^/api/ +RewriteRule ^$ /api/router.php?type=coming_soon [QSA,L] +RewriteRule ^(.*)$ /api/router.php?type=coming_soon [QSA,L] + +ErrorDocument 404 /404.html +ErrorDocument 500 /500.html diff --git a/.logs/push_upstream.py b/.logs/push_upstream.py new file mode 100755 index 0000000..fba844b --- /dev/null +++ b/.logs/push_upstream.py @@ -0,0 +1,38 @@ +import urllib.request, json, base64, sys + +import re +raw = open('/mnt/local-home/sirdrez-backup/.git-credentials').read().strip() +m = re.search(r'https://(\w+):(\S+)@gitea\.arisingmedia\.us', raw) +user, creds = m.group(1), m.group(2) +BASE = 'https://gitea.arisingmedia.us/api/v1/repos/AM/bigbreath.co' +import base64 as _b64 +HDR = { + 'Authorization': 'Basic ' + _b64.b64encode(f'{user}:{creds}'.encode()).decode(), + 'Content-Type': 'application/json', + 'User-Agent': 'git/2.43.0', + 'Accept': 'application/json', +} +ROOT = '/mnt/local-home/sirdrez-backup/arisingmedia-websites/bigbreath.co' + +def get_sha(path): + req = urllib.request.Request(f'{BASE}/contents/{path}', headers={'Authorization': 'token ' + creds}) + try: + return json.load(urllib.request.urlopen(req, timeout=8))['sha'] + except urllib.error.HTTPError as e: + if e.code == 404: + return None + raise + +def put_file(path, local_path, msg): + sha = get_sha(path) + method = 'PUT' if sha else 'POST' + payload = {'message': msg, 'content': base64.b64encode(open(local_path, 'rb').read()).decode()} + if sha: + payload['sha'] = sha + req = urllib.request.Request(f'{BASE}/contents/{path}', data=json.dumps(payload).encode(), headers=HDR, method=method) + d = json.load(urllib.request.urlopen(req, timeout=10)) + print(f'OK [{method}]: {path} | {d["content"]["sha"][:8]}') + +put_file('.htaccess', f'{ROOT}/.htaccess', 'Route / to coming_soon via PHP router') +put_file('.cpanel.yml', f'{ROOT}/.cpanel.yml', 'Deploy .htaccess to public_html') +put_file('infra/nginx.conf', f'{ROOT}/infra/nginx.conf', 'Route / and catch-all to coming_soon') diff --git a/.planning/00_BRIEF.md b/.planning/00_BRIEF.md old mode 100644 new mode 100755 diff --git a/.planning/01_DESIGN_TOKENS.md b/.planning/01_DESIGN_TOKENS.md old mode 100644 new mode 100755 diff --git a/.planning/2026-05-22-big-breath-brand-identity.md b/.planning/2026-05-22-big-breath-brand-identity.md new file mode 100755 index 0000000..3affa01 --- /dev/null +++ b/.planning/2026-05-22-big-breath-brand-identity.md @@ -0,0 +1,178 @@ +# Big Breath — Brand Identity Parameters +*Compiled from brand clarity session — May 22, 2026* + +--- + +## Core Purpose + +Big Breath exists to ignite the inner fire in every person who walks into the room — and then teach them how to tame it. The practice uses the breath as the vehicle to activate, heal, and empower. This is not meditation. This is not whisper-soft wellness. Big Breath is a full-body, full-voice, full-presence experience that creates lasting transformation. + +**The transformation arc:** Ember → Flame → Mastery. +You arrive disconnected. You leave on fire — and in control of it. + +--- + +## Brand Essence + +**What people feel when they encounter the brand — before they read a word:** +> Shared profound experience. Life-changing. Healing. Empowered. Vulnerable but strong. Eyes get bigger. Heart opens. Comfort is created. + +**The central tension that makes Big Breath unique:** +Vulnerable but strong. Power and openness held at the same time. Most brands pick one. Big Breath holds both. + +**What makes Big Breath unlike any other breathwork brand:** +Big Joe does not use a microphone. He does not whisper. He is not a meditation guide. His loud, booming voice ignites people. The inspiration comes from stoking the inner fire — the ember within — with each breath. Then, paradoxically, learning to tame that fire to create balance. + +Nobody else in breathwork has this. + +--- + +## Brand Energy & Elements + +The brand lives at the intersection of all four classical elements — but **fire is the spark that starts everything.** + +| Element | Role in the Brand | +|---------|-------------------| +| **Fire** | Ignition. Inner flame. Big Joe's voice. Activation. The ember that breathwork stokes. | +| **Earth** | Rootedness. Stability. The mountain. The tree. Grounded, ancient, immovable. | +| **Air** | The breath itself. The vehicle. Flow. Release. | +| **Water** | The letting go. The taming. The ocean rhythm. Balance after the fire. | + +**Energy descriptors:** +- Activating before it's calming +- Grounded and powerful +- Ancient and wise +- Masculine without aggression +- Safe but not soft +- Inspiring and igniting + +**What Big Breath is NOT:** +- Soft-spoken or whispery +- Meditative in the passive sense +- Woo-woo without substance +- Corporate wellness box-checking +- Cold, clinical, or sterile +- Gentle wellness-brand energy + +--- + +## Visual Direction + +### The Symbol + +A **circle that breathes.** Inspired by sunlight — ancient, universal, radiant. The circle represents the breath cycle: inhale and exhale completing a loop, no beginning and no end. The sun represents the inner fire — the thing Big Joe ignites in every room. + +**The mark should feel:** +- Sturdy. Safe. Inspiring. Masculine. +- Strong enough to hold fire. Open enough to breathe. +- Ancient and universal — every culture on earth has revered the sun. +- Not decorative. Not boho. Not crystal-shop energy. +- Geometric and stripped back — something that lives on a black hat and feels like it belongs there. + +**Symbol concept:** A sun mark — but with weight. Not ornate rays. Something geometric, intentional, and bold. A circle with internal geometry that suggests warmth, expansion, and breath. The kind of mark that looks like it was carved rather than designed. + +**The tree reference:** A tree is the secondary visual metaphor — rooted deep, unmovable trunk, but branches that move and leaves that breathe. Supports the symbol without replacing it. Useful for supporting visual language and content. + +### Color Palette + +The palette is warm, earthy, and wearable. It bridges ancient desert energy with modern professional environments. It should feel like Arizona at sunrise or an Arabian morning — not a wellness app or a tech brand. + +| Role | Color | Feel | +|------|-------|------| +| **Primary** | Warm white / soft cream | Spirit. New life. Comfort. The guide. What Big Joe wears to lead. | +| **Fire accent** | Terracotta / rust / amber | Ignition. The inner flame. Earth and sun. | +| **Neutral ground** | Sand / warm oat | The desert floor. Wearable anywhere, any time of day. | +| **Earth & life** | Desert Sage `#7A8C4E` | The living earth. Growth within stillness. Olive and ancient. Pairs with cream and clay. | +| **Depth (occasional)** | Muted warm charcoal or clay | Weight without coldness. Never pure black. | + +**Color philosophy:** +White is the lead — not sterile, not cult-leader white, but the white of new life and spirit. It creates comfort. It's what Big Joe instinctively reaches for before a workshop. Terracotta and amber are the fire underneath. + +**Note on blue:** Big Joe has historically been drawn to blue, but his lived experience — what he wears, how he guides, what he described — pulls strongly warm and earthy. Blue may live as a supporting element tied to the water/release energy, but it should not lead the palette. + +### Typography + +**The wordmark — "Big Breath" — should feel:** +- Like something that moves — not rigid, not perfect, not designed by committee +- Rooted and alive. Carved by hand. Worn in, not polished up. +- Ancient without being a history lesson +- Warm enough to put on a hat. Strong enough to open a room +- Timeless in the way a good knife is timeless — not because it's fancy, but because it works + +**Direction:** A serif with heat in it. Not a font that went to business school — one that's been to the desert, sat in a ceremony, climbed something. It has a past. It moves the way breath moves: intentional, unhurried, full. Not a script. Not a slab. Not a clean tech sans. Something between a classical typeface and a mark made by a human who meant it. + +**The gut test:** Put it on a hat. Show it to someone who's never heard of Big Breath. Does it make them lean in? Does it feel like it belongs to something real? That's the standard. + +--- + +## Logo System + +### Primary Mark +Sun symbol + "Big Breath" wordmark. The symbol leads — it should be strong enough to stand alone. + +### Symbol Only +The sun/circle mark used on its own for embroidery, embossing, hat logos, apparel tags, wax seals, and brand moments where the full wordmark isn't needed. + +### Wordmark Only +"Big Breath" typeset for contexts where the symbol isn't appropriate — documents, decks, email signatures. + +### Application Priority +1. **Apparel & merch:** Symbol-forward. The mark on a hat. Embroidered. Simple. Warm colorway on cream or oat base. +2. **Corporate/enterprise:** Wordmark-led. Clean. Professional serif. Paired with restrained color use. +3. **Digital (IG, YouTube, website):** Full lockup where space allows. Symbol alone for profile images and icons. + +--- + +## Ideal Customer Profiles (ICP) + +### ICP 1 — The High Performer in Transition +Former athlete, executive, or high-achiever going through identity shift. Career change, burnout, divorce, loss of purpose. Driven, accomplished, but running on empty and searching for something real. Would never walk into a traditional wellness studio. Big Joe's NFL background gives him direct access to this person. + +### ICP 2 — The Corporate Wellness Seeker +Mid-to-senior level professional. Stressed, overthinking, disconnected from their body. Their company is investing in wellness — they're the participant or the decision-maker. They need something that bridges science and practice. Big Breath's professional presentation and proven methodology earns their trust. + +### ICP 3 — The Conscious Man +Men in their 30s–50s who are open to inner work but need a guide who doesn't feel soft or preachy. They want strength, not spirituality as an aesthetic. Big Joe's masculine presence and physical presence (former NFL, big voice, no microphone) gives them permission to go deep. + +### ICP 4 — The Workshop Regular +Someone who has attended one session and keeps coming back. They buy the merch. They wear it to brunch, to the gym, to the airport. The apparel should feel like it belongs in all of those places — warm, wearable, a quiet signal to others who know. + +### ICP 5 — The Global Wellness Traveler +Internationally minded, spiritually curious, values lived experience over credentials. They've done retreats in Bali, meditated in India, done temazcal in Mexico. Big Joe's global footprint (Bhutan, Saudi Arabia, Japan, India, Oman) speaks to them. They recognize the depth behind the brand. + +--- + +## Voice & Tone + +**Always:** Grounded. Direct. Human. Slightly poetic. Ancient wisdom spoken in plain language. Speaks to one person, not a crowd. + +**In workshops and guided sessions:** Bold. Loud. Igniting. No microphone needed. The voice is part of the practice. + +**In corporate and enterprise contexts:** Confident, professional, evidence-backed. Bridges science and embodied practice without losing the fire underneath. + +**Never:** Whispery. Passive. Woo-woo without substance. Generic motivational. Preachy. Soft-selling. + +**The voice test:** Would Big Joe say this standing across from someone who needs help — using his full voice, in a room with no microphone? If yes, publish it. + +--- + +## Brand Positioning Statement + +Big Breath is the breathwork practice for people who want to be ignited, not lulled. Guided by a former NFL athlete with 15,000+ sessions across the globe, Big Breath uses the breath to activate the inner fire — and then teaches you to master it. This is not meditation. This is transformation. + +--- + +## Open Decisions (To Be Finalized with Designer) + +- [ ] Final sun mark geometry — number of rays, weight, proportion +- [ ] Serif typeface selection — shortlist 3–5 options for review +- [ ] Exact terracotta/amber HEX values — test across digital and print +- [ ] Secondary palette confirmation — role of blue (if any) +- [ ] Logo lockup proportions — symbol to wordmark ratio +- [ ] Apparel colorway priority — cream base with terracotta mark, or oat base with warm charcoal? +- [ ] Corporate version — does the wordmark stand alone, or does a refined version of the symbol travel with it? + +--- + +*Document version 1.0 — compiled from brand clarity session with Big Joe, May 22, 2026.* +*Next step: Brief a brand/logo designer using this document as the creative foundation.* diff --git a/.planning/DESIGN_SYSTEM.md b/.planning/DESIGN_SYSTEM.md old mode 100644 new mode 100755 diff --git a/.planning/EXECUTION_PHASES.md b/.planning/EXECUTION_PHASES.md old mode 100644 new mode 100755 diff --git a/.planning/PARALLAX_PLAN.md b/.planning/PARALLAX_PLAN.md old mode 100644 new mode 100755 diff --git a/.planning/capture_sites.py b/.planning/capture_sites.py old mode 100644 new mode 100755 diff --git a/.planning/client-files-index.md b/.planning/client-files-index.md old mode 100644 new mode 100755 diff --git a/.planning/concept-a.html b/.planning/concept-a.html old mode 100644 new mode 100755 diff --git a/.planning/concept-b.html b/.planning/concept-b.html old mode 100644 new mode 100755 diff --git a/.planning/concept-c.html b/.planning/concept-c.html old mode 100644 new mode 100755 diff --git a/.planning/concept.html b/.planning/concept.html old mode 100644 new mode 100755 diff --git a/.planning/extract_ref_styles.py b/.planning/extract_ref_styles.py new file mode 100755 index 0000000..0140795 --- /dev/null +++ b/.planning/extract_ref_styles.py @@ -0,0 +1,194 @@ +import json, sys, time +from playwright.sync_api import sync_playwright, TimeoutError as PWTimeout + +SITES = { + "aman": "https://www.aman.com/", + "habitas": "https://www.ourhabitas.com/", + "sixsenses": "https://www.sixsenses.com/en/", +} + +OUT_DIR = "/home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/ref-styles" + +COOKIE_SELECTORS = [ + "button[id*='accept']", "button[class*='accept']", + "button[id*='cookie']", "button[class*='cookie']", + "[aria-label*='Accept']", "[data-testid*='accept']", + "button:has-text('Accept')", "button:has-text('Accept all')", + "button:has-text('I agree')", "button:has-text('Got it')", + "button:has-text('OK')", "button:has-text('Continue')", +] + +EXTRACT_JS = """ +() => { + function cs(el) { + if (!el) return null; + const s = window.getComputedStyle(el); + return { + fontFamily: s.fontFamily, + fontSize: s.fontSize, + fontWeight: s.fontWeight, + lineHeight: s.lineHeight, + letterSpacing: s.letterSpacing, + textTransform: s.textTransform, + color: s.color, + backgroundColor: s.backgroundColor, + paddingTop: s.paddingTop, + paddingBottom: s.paddingBottom, + paddingLeft: s.paddingLeft, + paddingRight: s.paddingRight, + marginTop: s.marginTop, + marginBottom: s.marginBottom, + minHeight: s.minHeight, + height: s.height, + maxWidth: s.maxWidth, + gap: s.gap, + borderRadius: s.borderRadius, + }; + } + + // Body + const body = cs(document.body); + + // Hero: first large section or header or div with high z-index background + const heroSelectors = [ + 'section:first-of-type', 'header', '.hero', '#hero', + '[class*="hero"]', '[class*="banner"]', '[class*="intro"]', + 'main > section:first-child', 'main > div:first-child', + ]; + let heroEl = null; + for (const sel of heroSelectors) { + heroEl = document.querySelector(sel); + if (heroEl && heroEl.getBoundingClientRect().height > 200) break; + } + const hero = cs(heroEl); + + // Hero H1 + const h1El = heroEl ? heroEl.querySelector('h1') || document.querySelector('h1') : document.querySelector('h1'); + const h1 = cs(h1El); + + // Eyebrow/sublabel in hero + const eyebrowSelectors = [ + '[class*="eyebrow"]', '[class*="label"]', '[class*="sub"]', + '[class*="overline"]', '[class*="caption"]', 'p:first-child', + ]; + let eyebrowEl = null; + if (heroEl) { + for (const sel of eyebrowSelectors) { + eyebrowEl = heroEl.querySelector(sel); + if (eyebrowEl) break; + } + } + const eyebrow = eyebrowEl ? { + fontSize: window.getComputedStyle(eyebrowEl).fontSize, + letterSpacing: window.getComputedStyle(eyebrowEl).letterSpacing, + textTransform: window.getComputedStyle(eyebrowEl).textTransform, + } : null; + + // Sections after hero (first 3) + const allSections = Array.from(document.querySelectorAll('main section, main > div, [class*="section"]')); + const contentSections = allSections.slice(1, 4).map(el => ({ + paddingTop: window.getComputedStyle(el).paddingTop, + paddingBottom: window.getComputedStyle(el).paddingBottom, + maxWidthInner: (() => { + const inner = el.querySelector('div, .container, .inner, .wrapper'); + return inner ? window.getComputedStyle(inner).maxWidth : null; + })(), + gap: window.getComputedStyle(el).gap, + })); + + // Buttons / CTAs + const btnEl = document.querySelector('a[class*="btn"], button[class*="btn"], a[class*="cta"], button[class*="cta"], a[class*="button"], .button, [role="button"]'); + const btn = btnEl ? { + paddingTop: window.getComputedStyle(btnEl).paddingTop, + paddingBottom: window.getComputedStyle(btnEl).paddingBottom, + paddingLeft: window.getComputedStyle(btnEl).paddingLeft, + paddingRight: window.getComputedStyle(btnEl).paddingRight, + fontSize: window.getComputedStyle(btnEl).fontSize, + letterSpacing: window.getComputedStyle(btnEl).letterSpacing, + textTransform: window.getComputedStyle(btnEl).textTransform, + borderRadius: window.getComputedStyle(btnEl).borderRadius, + } : null; + + // Nav + const navEl = document.querySelector('nav, header nav, [role="navigation"]'); + const nav = navEl ? { + height: window.getComputedStyle(navEl).height, + paddingTop: window.getComputedStyle(navEl).paddingTop, + paddingBottom: window.getComputedStyle(navEl).paddingBottom, + } : null; + const navLinkEl = navEl ? navEl.querySelector('a') : null; + const navLink = navLinkEl ? { + fontSize: window.getComputedStyle(navLinkEl).fontSize, + letterSpacing: window.getComputedStyle(navLinkEl).letterSpacing, + textTransform: window.getComputedStyle(navLinkEl).textTransform, + } : null; + + // H2 + const h2El = document.querySelector('h2'); + const h2 = h2El ? { + fontSize: window.getComputedStyle(h2El).fontSize, + lineHeight: window.getComputedStyle(h2El).lineHeight, + marginTop: window.getComputedStyle(h2El).marginTop, + marginBottom: window.getComputedStyle(h2El).marginBottom, + } : null; + + // Body paragraph in content + const pEl = document.querySelector('main p, section p, article p'); + const para = pEl ? { + fontSize: window.getComputedStyle(pEl).fontSize, + lineHeight: window.getComputedStyle(pEl).lineHeight, + } : null; + + return { body, hero, h1, eyebrow, contentSections, btn, nav, navLink, h2, para }; +} +""" + + +def extract(page, url, key): + data = {} + try: + page.goto(url, wait_until="domcontentloaded", timeout=45000) + time.sleep(3) + # Dismiss cookie banners + for sel in COOKIE_SELECTORS: + try: + el = page.locator(sel).first + if el.is_visible(timeout=1000): + el.click(timeout=2000) + time.sleep(1) + break + except Exception: + pass + data = page.evaluate(EXTRACT_JS) + except PWTimeout: + print(f" TIMEOUT for {key}, saving partial") + try: + data = page.evaluate(EXTRACT_JS) + except Exception: + data = {"error": "timeout_and_eval_failed"} + except Exception as e: + data = {"error": str(e)} + out = f"{OUT_DIR}/{key}.json" + with open(out, "w") as f: + json.dump(data, f, indent=2) + print(f" Wrote {out}") + return data + + +def main(): + with sync_playwright() as p: + browser = p.firefox.launch(headless=True) + ctx = browser.new_context(viewport={"width": 1440, "height": 900}) + page = ctx.new_page() + results = {} + for key, url in SITES.items(): + print(f"Extracting {key}: {url}") + results[key] = extract(page, url, key) + browser.close() + print("Done. Files:") + for key in SITES: + print(f" {OUT_DIR}/{key}.json") + + +if __name__ == "__main__": + main() diff --git a/.planning/pitch-deck-2026-06-01/extracts/corporate_v4.txt b/.planning/pitch-deck-2026-06-01/extracts/corporate_v4.txt new file mode 100755 index 0000000..04e7ae2 --- /dev/null +++ b/.planning/pitch-deck-2026-06-01/extracts/corporate_v4.txt @@ -0,0 +1,276 @@ +INSERT COMPANY NAME + +Big +Breath +A Transformative +Wellness Experience + + Take a +Big Breath is a transformative breathwork practice intended to enhance +mental and physical well-being through immersive experiences. Led by Big +Joe, the sessions combine ancient techniques with modern wellness +strategies. +Our mission is to create to build a global community of breathwork +practitioners by creating relatable and powerful breathing techniques for +athletes and everyday people to experience peak performance and profound +inner growth. + +Big Breath + + Big Joe is a certified breathwork guide with a +unique background as a former NFL player and +extensive experience guiding over 10,000 +individuals worldwide. +After four years in the NFL, a severe ankle injury +altered his life’s course and sparked a new path +towards a life committed to helping other heal. + +Meet Big Joe the heart and +soul behind +Big Breath + +In 2018 Big Joe began his spiritual journey learning +and practicing meditation & breathwork daily. +Over the last 7 years he has expanded his +education earning multiple certifications. +His mission is to empower individuals to unlock +their fullest potential by offering dynamic, +approachable breathwork for athletes, +professionals, and wellness seekers to cultivate +resilience, clarity, and peace. + + The Science +Behind Breathwork +1 + +Stress Reduction + +Controlled breathing increases oxygen flow to the brain, +enhancing cognitive functions such as focus and +memory and lowering cortisol levels. +2 + +Enhanced Recovery & +Physical Performance + +Breathwork is a valuable tool for recovery of the body. By +improving oxygen delivery to tissues and promoting +relaxation, breathwork aids in muscle recovery and +reduces fatigue. + +3 + +Improved Focus & Cognition + +Numerous studies have shown that specific breathing +techniques can enhance endurance, improve circulation +and boost neuroplasticity & cognitive performance. +4 + +Emotional Regulation + +Breathwork has been linked to reduced symptoms of +anxiety and depression. By promoting relaxation and +emotional balance, regular practice can lead to +improved emotional well-being. + + Benefits for your company +Build Team Unity +Improve mental health & focus + +Boost Well-being +Enhance creativity & efficiency + +Increase Productivity +Foster collaboration & trust + + Benefits for your team +Build Team Unity +Improve mental health & focus + +Boost Well-being +Enhance creativity & efficiency + +Increase Productivity +Foster collaboration & trust + + The Big Breath Experience + +01 + +02 + +03 + +Led by +Former NFL +Player + +Global Impact +& +Accessibility + +Authentic, +Practical +Guidance + +Unique expertise and relatability to +high performers, athletes and those +seeking peak performance and +holistic health. + +In-person events around the world, +app membership, and digital +resources for building a reliable +wellness routine. + +Built from personal transformation, +offering practical, grounded mastery +of the breath that is accessible to a +wide audience across cultures and +beliefs, and languages. + + Ancient Practice + +Collaborating with +top [teams +/companies +/brands] to impact +over 10,000 lives +worldwide. + +Modern +Philosophy + +Excellent +Facilitator + +A win for +your team! + + Who we've worked with + + Global Impact +International reach +Cultural range +Consistent quality +breathwork experience + +🇺🇸 🇲🇽 +🇨🇦 🇳🇱 +🇫🇷 🇮🇩 +🇨🇷🇸🇦 +🇦🇪 +🇧🇱 +🇨🇴 +🇬🇷 +🇯🇵🇸🇪 +🇹🇷 + +Countries Guided +• USA +• Mexico +• Canada +• Netherlands +• France +• Indonesia +• Costa Rica +• Saudi Arabia +• UAE +• Saint Barthélemy +• Colombia +• Greece +• Japan +• Sweden +• Turkey + + May 2025 +North America +Big Breath Tour +Honoring mental +health awareness +month + + Big Breath Offerings - ATH +Build Team Unity +The Big Breath experience is a unique opportunity for your +team to strengthen their bond and become more united and +inspired to work together + +Physical Recovery +The proven science shows that breathwork increases +the body's effectiveness in recovery and ability to +perform + +Leadership Development +Invest in your teams' ability to lead on and off the field with +greater ability to manage stress and handle responsibility + + Big Breath Offerings - Corp +Build Team Unity +The Big Breath experience is a unique opportunity for your +team to strengthen their bond and become more united and +inspired to work togehter + +Mindset Development +Enhance creativity & efficiency and empower your +employees to grow their mental stability resulting in better +job performance + +Increase Productivity +A happy, healthy fulfilled human is typically a more productive +one. Allow your employees to experience this wellbeing and +watch how that positively impacts your business goals. + + Big Breath Offerings - BRAND +Genuine Wellness Lifestyle +The Big Breath audience is a unique opportunity for your +brand to strengthen exposure to an audience that knows, +likes, and trusts Big Joe's taste and style + +Boost Reach +Social metrics +• followers +• engagements +• Reels views + +Have the Best +one of our brand taglines is "have the best day ever" - allow your +brand to be associated with positivity and open heartedness + + Client Testimonials + +“Life-changing experience!” + +“Big Breath transformed our team.” + +“A must-have for our company +wellness.” + +Emily Johnson + +Mark Thompson + +Julia Rodriguez + + Take a big breath + +& have the best day ever + + Let's work +(and breathe) +together +Email + +hello@bigbreath.co + +Website + +www.bigbreath.co + +Follow along +National Big Breath tour - May 2025 + +@bigjoe + + \ No newline at end of file diff --git a/.planning/pitch-deck-2026-06-01/extracts/draft_notes.txt b/.planning/pitch-deck-2026-06-01/extracts/draft_notes.txt new file mode 100755 index 0000000..e0d1830 --- /dev/null +++ b/.planning/pitch-deck-2026-06-01/extracts/draft_notes.txt @@ -0,0 +1,267 @@ + +--- SLIDE 1 --- +[NOTES] SLIDE 1 +Clean - thoughts on adding a subtitle ? +Ex:Performance - Presence - Recovery + +--- SLIDE 2 --- +Big Breath is a breath work and nervous system regulation platform created by Big Joe. It was made to target stress and anxiety where it stems from. +what is Big Breath? +Guided Classes & Programing +Joe has spent years developing breath work techniques that are rooted in ancient practices. This immersive practice is intended to enhance +mental and physical well-being through immersive experiences. +Keynotes & speaking engagements +Insightful speaking experiences centered on breath, clarity, and modern leadership. +Live experiences & retreats +Immersive breath journeys designed for reset and transformation +[NOTES] SLIDE 2 +🔥 + +--- SLIDE 3 --- +mission +Joe’s mission is to create a community around breath work that is relatable and easy to access. From athletes to entrepreneurs, these techniques allow people to focus in on themselves to achieve peak performance and inner growth. +Big Joe is a former NFL athlete and certified breath work guide. Now he dedicates his life to integrating breath work into our daily life via Big Breath. +After a career-altering ankle injury ended his professional football career, breath work became the foundation for healing, clarity, and long-term resilience. Now 8 years into it; he’s ready to share. +[NOTES] SLIDE 3 +Heart rate regulation? 💡 +This translates directly into better performance, recovery, and decision-making… +Find news article 🎯 + + + +HBR + +--- SLIDE 4 --- +Between work & life many people are over-stressed with their nervous system on the fritz. +Breath is the fastest, most accessible way to regulate the nervous system. Through intentional breathing: +Cortisol levels decrease +Focus and cognitive performance improve +Emotional regulation strengthens +Recovery accelerates +why breath work? +manage +stress +lower blood pressure +clearer mind & flow +[NOTES] SLIDE 4 +🔥 +Maybe more bold - pop off the page for the heavy hitting bullet points + +Small! + +--- SLIDE 5 --- +77% of people regularly experience physical symptoms caused by stress. +80% of doctor visits are estimated to be stress-related — American Institute of Stress +70% of employees say workplace stress affects their performance and productivity +Just 5–10 minutes of intentional breath work can measurably lower cortisol and heart rate +stress & productivity +Stress isn't a mindset problem. It's a physiological one. And breath is the only tool that directly accesses the autonomic nervous system — no prescription, no equipment, no waiting room. + +--- SLIDE 6 --- +90-120 minute+ sessions +Full System Reboot" — emotional release and transformational experiences +30 Minute Sessions +"Nervous System Reset" — quick sessions during lunch breaks for corporate audiences +60-minute sessions +"Empowerment Session" — focused, dynamic, tailored for deeper engagement +Guided Classes and Programming +Each experience is tailored, intentional, and deeply human. +[NOTES] SLIDE 7 & 8 +30, 60, 90, 120 minute offerings + +--- SLIDE 7 --- +The Nervous System Reset is a 30-minute guided breath work session built for busy people — corporate teams, conference attendees, or anyone who needs to break the stress cycle mid-day and return to their afternoon clear, calm, and dialed in. +No experience necessary. No equipment. Just breath. +30 Minutes / Nervous System Reset +Most people spend their lunch break scrolling. This one, they'll spend breathing. +What Happens Big Joe leads the group through a targeted breathing sequence designed to rapidly down-regulate the nervous system, lower cortisol, and shift the body out of fight-or-flight within minutes. +What They Walk Away With A tool they can use every single day. Immediate calm. Renewed focus. The felt experience of what breath can do. + +--- SLIDE 8 --- +The Empowerment Session is a fully tailored breath work experience — guided by Big Joe and shaped around your audience's specific needs, whether that's stress, performance, team cohesion, or mental clarity. This is where breath work stops being a concept and starts becoming a practice. +60 Minutes / Empowerment Session +One hour is enough time to go somewhere real. +The Format A guided journey through activation, regulation, and integration — with space for reflection and real-time coaching from Joe. Every session is adapted to the energy of the room. +The Outcome Participants leave with measurably reduced stress, improved emotional regulation, and a practical breathwork toolkit they can apply immediately — at work, in training, or at home. + +--- SLIDE 9 --- +Some things can't be rushed. The Full System Reboot is an immersive, multi-phase breath work journey designed to take participants deep — past the surface tension, past the noise — and into genuine emotional release, clarity, and reset. +Rooted in ancient breath work traditions and guided by Big Joe's 8+ years of practice, this experience creates lasting change in the body and mind. +90–120 Minutes / Full System Reboot +More than a session. It's a transformation. +The Journey Participants move through a full arc: opening and activation, deep-dive breathwork, somatic release, and a guided integration close. Joe holds the space with presence, music, and real-time guidance throughout. +What Makes It Different This is not a workshop. It's an experience. The extended format allows the nervous system to fully complete its cycle — not just temporarily calm, but genuinely reset at a cellular level. + +--- SLIDE 10 --- +The difference between good athletes and great ones often comes down to what happens between the reps — recovery, focus, and the ability to reset under pressure. Big Joe brings the same discipline he built on the NFL field into every performance session, giving athletes a tool that works as hard as they do. +Athlete Performance & Recovery +Train hard. Breathe harder. +Pre-Performance Activation +Targeted breathing protocols to sharpen focus, quiet the noise, and prime the nervous system for peak output. Whether it's game day, a big lift, or a high-stakes moment — breath gets you there ready. +Recovery & Restoration After the body performs, it needs to reset. Joe's recovery sessions accelerate the shift from sympathetic overdrive back to parasympathetic rest — reducing inflammation response, improving sleep quality, and speeding the return to baseline. + +--- SLIDE 11 --- +Keynotes & Speaking +Asking questions, interactivity between Joe and the audience. More access +Guided Workshop +Immersive breath journeys designed for reset and transformation +Real-world Application +Practices to take home from the experience to make a substantial change on your experience +Live Experiences & Retreats +the goal: + +--- SLIDE 12 --- +Every Big Breath workshop is built with intention from the ground up. Joe doesn't show up with a generic script — he shows up with a read of the room, a deep understanding of your audience, and a practice refined over 8 years of global facilitation. +Guided Professional Workshop +Structure that creates space. +Facilitated by Big Joe An NFL athlete turned certified breathwork guide — Joe's presence commands attention and creates safety. Participants trust him immediately. +Structured for Results Each workshop follows a proven arc: grounding, activation, deep practice, integration. The format is consistent. The experience is never the same twice. + +--- SLIDE 13 --- +Big Joe doesn't deliver keynotes — he delivers experiences. Drawing on his journey from professional athlete to breath work guide, Joe brings a rare combination of credibility, vulnerability, and practical wisdom to every stage he steps on. Audiences don't just leave inspired — they leave with tools they can use the same day. +Keynotes & Speaking Engagements +A story worth hearing. +The Story From the NFL to nervous system regulation — Joe's personal journey is the kind that stops a room. Authentic, relatable, and rooted in real transformation, his story connects across industries, backgrounds, and roles. +The Message Every keynote weaves together performance psychology, breathwork science, and lived experience into a talk that is equal parts inspiring and actionable. Joe speaks to what modern leaders, teams, and humans are actually dealing with — stress, burnout, identity, and the search for clarity. +[NOTES] SLIDE 6 +Keynote + inspiring life story and extraordinary life experiences +Live exp + masterful workshops +Corporate + real success and elite execution/resilience/ achievement potential? + +--- SLIDE 14 --- +The goal of every Big Breath experience is to leave people with something they actually use. Not just a feeling — a tool. Every session closes with concrete techniques participants can return to at their desk, in the locker room, before a big meeting, or in the middle of a hard day. +Real-World Application +The practice doesn't end when the session does. +Daily Nervous System Regulation Simple 3–5 minute protocols for managing stress, improving focus, and resetting between demands. Usable anywhere, anytime. +Emotional Resilience Practices for processing tension, releasing stored stress, and building the kind of nervous system stability that compounds over time. + +--- SLIDE 15 --- +Brand Partnerships +Brands We Have Worked With +Big Joe has partnered with some of the world's most recognized brands — including Visa, UCLA, the NFL, Pepsi, Airbnb, and more — to deliver breath work programming that is anything but standard. These aren't generic wellness add-ons. Every corporate engagement is custom-built around the company's culture, goals, and people — whether that's a high-performance session for an executive leadership team, a nervous system reset for a company-wide event, or an immersive breath work experience woven into a brand activation. +We partner with brands to create intentional, immersive wellness experiences that deepen connection and elevate perception. +[NOTES] I really believe in the value of LOGOS!!!!! +Or aka TRUSTED BY… +Visa +Ritz Carlton +Pendry +NFL +NFLPA +NBL +Olympics +UCLA +LA Chargers +MVP +Kachava +Entrepreneur’s Organization + +THIS ADDS CREDIBILITY 🙏🏽 + +--- SLIDE 16 --- +Brand Partnerships +Brands We Have Worked With +Big Joe has partnered with some of the world's most recognized brands — including Visa, UCLA, the NFL, Pepsi, Airbnb, and more — to deliver breath work programming that is anything but standard. These aren't generic wellness add-ons. Every corporate engagement is custom-built around the company's culture, goals, and people — whether that's a high-performance session for an executive leadership team, a nervous system reset for a company-wide event, or an immersive breath work experience woven into a brand activation. +We partner with brands to create intentional, immersive wellness experiences that deepen connection and elevate perception. + +--- SLIDE 17 --- +8+ Years +experience working and training in breath work practices +meet Big Joe +Big Joe is a former NFL athlete, certified breath work guide, and yoga teacher with over 8 years of experience guiding breath and embodied practices worldwide. +After a career-altering ankle injury ended his professional football career, breath work became the foundation for healing, clarity, and long-term resilience transforming personal recovery into a global mission. +over 15,000 people +helped via Joe’s breath work techniques and practices +[NOTES] SLIDE 9 +Love this 🤍 +Does repeat slide 4 ( maybe a little different language) + +--- SLIDE 18 --- +Big Joe spent years training his body to perform at the highest level — competing in the NFL, where mental toughness and physical peak performance aren't optional, they're the baseline. +Joe’s inspiring story +The Breaking Point When injury ended his career, Joe turned inward. Breathwork became his daily practice — not as a wellness trend, but as survival. A way to process pain, rebuild identity, and find clarity in the unknown. +The Athlete A professional NFL career built on discipline, performance, and pushing through. Joe knew how to grind. What he didn't know was how to heal. +The Mission 8 years later, Joe is a certified breathwork guide and yoga teacher who has helped over 15,000 people regulate their nervous systems, reclaim their focus, and feel like themselves again. The tool that saved him is now the tool he shares with the world. + +--- SLIDE 19 --- +“Life-changing experience!” +— Emily Johnson +“As soon as I walked into the room, I felt protected and safe. That authenticity is rare.” +— Brian Godfrey, Los Angeles +“I didn’t know the power of my breath. The experience was life-changing.” +— Maria Muleta, Colombia +Impact & Testimonials +“Big Breath transformed our team” +— Mark Thompson +[NOTES] SLIDE 10 +Need to get you some more testimonials +Larger text! +Only REALLY BIG STATEMENTS!!!!! + +--- SLIDE 20 --- +Let’s Work Together +Every collaboration is custom-designed to meet your people, brand, or audience exactly where they are. +Email : Hello@bigbreath.co +Website : Bigbreath.co + +--- SLIDE 21 --- +How We Elevate Brands +We partner with brands to create intentional, immersive wellness experiences that deepen connection and elevate perception. +• Curated, on-brand experiences tailored to your audience +• Emotional engagement that strengthens brand loyalty +• High-touch facilitation designed for impact and memorability +• Seamless integration into retreats, activations, and corporate programming +• Measurable shifts in presence, performance, and connection +We don’t just host sessions — we create moments people carry with them. + +--- SLIDE 22 --- +Relatable “Something” +Intentional breath-led integrations +for cultural and brand moments +Extraordinary experiences +From professional NFL +Inspiring Life Story +High-performance nervous system +regulation for modern teams +Keynotes & Speaking Engagements +Each experience is tailored, intentional, and deeply human. + +--- SLIDE 23 --- +Big Joe’s experience & reach +8+ years of professional facilitation +Certified in breathwork and yoga +15,000+ individuals guided worldwide + +--- SLIDE 24 --- +Brand activations & collaborations +Intentional breath-led integrations +for cultural and brand moments +Keynotes & speaking engagements +Insightful speaking experiences centered on breath, clarity, and modern leadership. +Luxury hotel & hospitality programming +Curated breath experiences designed to elevate guest wellness and enrich premium hospitality offerings. +Live experiences & retreats +Immersive breath journeys designed for reset and transformation +Athlete performance & recovery sessions +Targeted breath protocols to sharpen focus, accelerate recovery, and optimize performance under pressure. +Corporate & leadership wellness +High-performance nervous system +regulation for modern teams +ways to work with Joe +Each experience is tailored, intentional, and deeply human. + +--- SLIDE 25 --- +Chronic stress and nervous system overload. +Mental fatigue and emotional burnout. +Disconnection from their bodies and breath. +Where do people need the most help? + +--- SLIDE 26 --- +Led by a former professional athlete +Trauma-aware, grounded facilitation +Science-backed, results-driven practices +Accessible to beginners and high performers alike +No language, cultural, or physical barriers +This work meets people where they are—and elevates them. +Big Joe is a former NFL athlete, certified breathwork guide, and yoga teacher with over 8 years of experience guiding breath and embodied practices worldwide. +After a career-altering ankle injury ended his professional football career, breathwork became the foundation for healing, clarity, and long-term resilience—transforming personal recovery into a global mission. +what makes Big Breath different \ No newline at end of file diff --git a/.planning/pitch-deck-2026-06-01/extracts/final.txt b/.planning/pitch-deck-2026-06-01/extracts/final.txt new file mode 100755 index 0000000..22ae77f --- /dev/null +++ b/.planning/pitch-deck-2026-06-01/extracts/final.txt @@ -0,0 +1,285 @@ + what is Big Breath? +Big Breath is a breath work and nervous system regulation +platform created by Big Joe. It was made to target stress and +anxiety where it stems from. + + +Guided Classes & Programing +Joe has spent years developing breath work techniques that are rooted in ancient +practices. This immersive practice is intended to enhance + +mental and physical well-being through immersive experiences. + +Keynotes & speaking +engagements + +Live experiences & +retreats + +Insightful speaking experiences +centered on breath, clarity, and +modern leadership. + +Immersive breath journeys designed for +reset and transformation + + Joe’s mission is to create a +community around breath work that +is relatable and easy to access. From +athletes to entrepreneurs, these +techniques allow people to focus in +on themselves to achieve peak +performance and inner growth. + + +Big Joe is a former NFL athlete and +certified breath work guide. Now he +dedicates his life to integrating +breath work into our daily life via Big +Breath. + + +After a career-altering ankle injury +ended his professional football +career, breath work became the +foundation for healing, clarity, and +long-term resilience. Now 8 years +into it; he’s ready to share. + +mission + + why breath work? +Between work & life many people are over-stressed with +their nervous system on the fritz. + + +Breath is the fastest, most accessible way to regulate the +nervous system. Through intentional breathing: + +Cortisol levels decrease + +Focus and cognitive performance improve + +Emotional regulation strengthens + +Recovery accelerates + +manage + +stress + +lower blood +pressure + +clearer mind & +flow + + Guided Classes and Programming +Targeted Breathing + +Consistent Practice + +1 on 1 coaching + +Immersive breath journeys designed for + +High-performance nervous system + + +Intentional breath-led integrations + + +reset and transformation + +regulation for modern teams + +for cultural and brand moments + + + +Each experience is tailored, intentional, and deeply human. + + Keynotes & Speaking Engagements +Extraordinary life +experiences + +Inspiring Life Story + +Relatable +“Something” + +Immersive breath journeys designed for + +High-performance nervous system + + +Intentional breath-led integrations + + +reset and transformation + +regulation for modern teams + +for cultural and brand moments + + + +Each experience is tailored, intentional, and deeply human. + + Live Experiences & Retreats +Guided Workshop +Immersive breath journeys designed for +reset and transformation + +Real-world +Application +Practices to take home from the +experience to make a substantial change +on your experience + +Intimate Therapeutic +Journey +Asking questions, interactivity between Joe +and the audience. More access + + 30 Minutes +Lunchbreak reset; a quick and easy way to +break up the day and breathe. + +60 Minutes +Empowerment session that is focused +but tailored for the audience + +120 Minute +Transformational journey aimed at a full +reboot to the system + + meet Big Joe + + + + +Big Joe is a former NFL athlete, certified breathwork guide, +and yoga teacher with over 8 years of experience guiding +breath and embodied practices worldwide. + + + +After a career-altering ankle injury ended his professional +football career, breathwork became the foundation for +healing, clarity, and long-term resilience transforming +personal recovery into a global mission. + +8+ Years + +over 15,000 people + +experience working and training in + +helped via Joe’s breath work techniques + +breath work practices + +and practices + + “As soon as I walked into the room, +I felt protected and safe. That +authenticity is rare.” + +— Brian Godfrey, Los Angeles + +“I didn’t know the power of my breath. +The experience was life-changing.” + +— Maria Muleta, Colombia + +“Life-changing experience!” + +— Emily Johnson +“Big Breath transformed our team” + +— Mark Thompson + +Impact & Testimonials + + Corporate Offerings +Athlete performance + +Keynotes & speaking + +& recovery sessions + +engagements + +Targeted breath protocols to +sharpen focus, accelerate + +Luxury hotel & +hospitality programming + +Insightful speaking +experiences centered on + +recovery, and optimize + +Curated breath experiences + +breath, clarity, and modern + +performance under + +designed to elevate guest + +leadership. + +pressure. + +wellness and enrich +premium hospitality +offerings. + +Brands We Have Worked With + + How We Elevate Brands + + +We partner with brands to create intentional, immersive +wellness experiences that deepen connection and elevate +perception. + + + +• Curated, on-brand experiences tailored to your audience +
 +• Emotional engagement that strengthens brand loyalty +
 +• High-touch facilitation designed for impact and +memorability +
 +• Seamless integration into retreats, activations, and +corporate programming +
 +• Measurable shifts in presence, performance, and +connection + + + +We don’t just host sessions — we create moments people +carry with them. + + Let’s Work Together + + + + +Every collaboration is custom-designed to +meet your people, brand, or audience +exactly where they are. + + + +Email : Hello@bigbreath.co + +Website : Bigbreath.co + + \ No newline at end of file diff --git a/.planning/pitch-deck-2026-06-01/extracts/mockup1.txt b/.planning/pitch-deck-2026-06-01/extracts/mockup1.txt new file mode 100755 index 0000000..1ca2033 --- /dev/null +++ b/.planning/pitch-deck-2026-06-01/extracts/mockup1.txt @@ -0,0 +1,38 @@ +Lorem Ipsum +Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, +consectetur, adipisci velit... + + What is Lorem Ipsum? + +What is Lorem Ipsum? + +Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever +since the 1500s, when an unknown printer took a galley of type and +scrambled it to make a type specimen book. + +Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever +since the 1500s, when an unknown printer took a galley of type and +scrambled it to make a type specimen book. + + Where does it come from +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in +a piece of classical Latin literature from 45 BC, making it over 2000 years old. +Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, +looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum +passage, and going through the cites of the word in classical literature, discovered +the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 +of "de Finibus Bonorum et Malorum. + + Where does it come from +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in +a piece of classical Latin literature from 45 BC, making it over 2000 years old. +Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, +looked up one of the more obscure Latin words,. + + Where does it come from +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in +a piece of classical Latin literature from 45 BC, making it over 2000 years old. +Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, +looked up one of the more obscure Latin words,. + + \ No newline at end of file diff --git a/.planning/pitch-deck-2026-06-01/extracts/mockup2.txt b/.planning/pitch-deck-2026-06-01/extracts/mockup2.txt new file mode 100755 index 0000000..d05dcae --- /dev/null +++ b/.planning/pitch-deck-2026-06-01/extracts/mockup2.txt @@ -0,0 +1,26 @@ +Lorem Ipsum + +Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, +consectetur, adipisci velit... + + What is Lorem Ipsum? +Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever +since the 1500s, when an unknown printer took a galley of type and +scrambled it to make a type specimen book. + + What is Lorem Ipsum? +Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever +since the 1500s, when an unknown printer took a galley of type and +scrambled it to make a type specimen book. + + What is Lorem Ipsum? +Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever +since the 1500s, when an unknown printer took a galley of type and +scrambled it to make a type specimen book. + + What is Lorem Ipsum? +Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever +since the 1500s, when an unknown printer took a galley of type and +scrambled it to make a type specimen book. + + \ No newline at end of file diff --git a/.planning/pitch-deck-2026-06-01/extracts/new_deck.txt b/.planning/pitch-deck-2026-06-01/extracts/new_deck.txt new file mode 100755 index 0000000..86ca3e3 --- /dev/null +++ b/.planning/pitch-deck-2026-06-01/extracts/new_deck.txt @@ -0,0 +1,102 @@ + +--- SLIDE 1 --- +BIG BREATH +Brand Identity · 2026 +Breathwork · Nervous System Regulation · Transformation +bigbreath.co · @bigjoe · 142K followers + +--- SLIDE 2 --- +BRAND STORY +The Fire Behind the Breath +The fire that teaches you balance. +Big Joe played in the NFL. +Now he teaches people to breathe. + +After his career ended, he experienced real darkness — identity loss, disconnection, chaos. Breathwork became the practice that saved him. Since then, he has facilitated 15,000+ sessions across the globe, working with athletes, executives, and everyday people searching for something real. + +Big Breath is not soft-spoken wellness. Big Joe walks into a room with no microphone and ignites the people inside it. He stokes the inner fire with each breath — and then teaches you to tame it. +01 +EMBER +The breath awakens what's dormant. +02 +FLAME +The inner fire is stoked. Power, activation. +03 +MASTERY +You tame the fire. Balance is born. +bigbreath.co + +--- SLIDE 3 --- +VISUAL IDENTITY · COLORS & TYPOGRAPHY +The Big Breath Visual System +#F8F3EC +Spirit White +#C4603A +Terracotta Fire +#D4833A +Amber Sun +#DEC9A3 +Desert Sand +#7A8C4E +Desert Sage +#4A3728 +Clay Depth +#A89880 +Warm Stone +TYPOGRAPHY DIRECTION +BIG BREATH +BIG BREATH +Primary — Dark Ground +Primary — Sand Ground +Rooted and alive. A serif with heat in it — not a font that went to business school. +Lora leads the brand. Lato holds the details. Neither fights the other. +Put it on a hat. Does it make someone lean in? That's the standard. +bigbreath.co + +--- SLIDE 4 --- +LOGO & SYMBOL DIRECTION +The Mark +A circle that breathes. Sunlight. Ancient. Masculine. +BIG BREATH +Dark Ground +Hat / apparel primary +BIG BREATH +Sand Ground +Merch / lifestyle +BIG BREATH +Cream Ground +Digital / corporate +LOGO SYSTEM +Primary Mark — Sun symbol + wordmark. Symbol leads. +Symbol Only — Hat logos, embroidery, embossing, apparel tags, wax seals. +Wordmark Only — Documents, decks, email signatures, corporate contexts. +bigbreath.co + +--- SLIDE 5 --- +IDEAL CUSTOMER PROFILES · POSITIONING +Who Big Breath Is For +01 +High Performer +in Transition +Former athlete or exec. Burnout, identity shift, running on empty. +02 +Corporate +Wellness Seeker +Mid-senior professional. Company invests in wellness — they attend. +03 +The +Conscious Man +Men 30–50. Open to inner work. Need a guide with real presence. +04 +Workshop +Regular +Returns again and again. Buys the merch. Wears it everywhere. +05 +Global Wellness +Traveler +Internationally minded. Bali retreats, temazcal, Joe Dispenza. +POSITIONING +Big Breath is the breathwork practice for people who want to be ignited, not lulled. +Guided by a former NFL athlete with 15,000+ sessions across the globe, Big Breath uses the breath to activate the inner fire — and then teaches you to master it. +This is not meditation. This is transformation. +bigbreath.co · @bigjoe \ No newline at end of file diff --git a/.planning/pitch-deck-2026-06-01/extracts/summary.md b/.planning/pitch-deck-2026-06-01/extracts/summary.md new file mode 100755 index 0000000..0328e6a --- /dev/null +++ b/.planning/pitch-deck-2026-06-01/extracts/summary.md @@ -0,0 +1,19 @@ +# Source Extraction Summary + +## final.txt (big breath - Final.pdf) +Most polished prose. Key content: Big Breath definition, mission, Big Joe bio (NFL, ankle injury, 8+ years, 15,000+ people), why breathwork (cortisol, focus, emotional regulation, recovery), guided classes 30/60/120 min, keynotes, live experiences, corporate offerings, testimonials (Brian Godfrey LA, Maria Muleta Colombia, Emily Johnson, Mark Thompson), contact hello@bigbreath.co. + +## corporate_v4.txt (Big Breath Corporate Pitch Deck v4.pdf) +Corporate-targeted. Key: 7 years, 10,000 stat (older), science block (4 points), benefits for company/team, 15 countries listed, May 2025 North America Tour, athlete/corporate/brand offering breakdowns, testimonials (Emily Johnson, Mark Thompson, Julia Rodriguez), @bigjoe. + +## mockup1.txt / mockup2.txt +Layout mockups with Lorem Ipsum only. No usable copy. + +## draft_notes.txt (big breath - Draft with notes.pptx) +26-slide draft with production notes. Key: stress stats (77% physical symptoms, 80% doctor visits stress-related, 70% employees affected), session format copy (30-min Nervous System Reset, 60-min Empowerment Session, 90-120 min Full System Reboot), athlete performance, brand partners list (Visa, Ritz Carlton, Pendry, NFL, NFLPA, NBL, Olympics, UCLA, LA Chargers, MVP, Kachava, Entrepreneurs Organization), story arc (athlete / breaking point / mission), 8+ years / 15,000+ confirmed. + +## new_deck.txt (2026-05-22-big-breath-pitch-deck.pptx) +5-slide brand skeleton. Key: Ember/Flame/Mastery arc, color system with HEX values, typography (Lora/Lato), logo system, 5 ICPs, positioning statement, 142K followers, @bigjoe. + +## brand-identity.md (authoritative) +Ember/Flame/Mastery arc, voice rules, ICPs 1-5 full, palette, typography, positioning statement, no-microphone differentiator, 15,000+ sessions / 15+ countries / 7+ years / 143K IG. diff --git a/.planning/pitch-deck-2026-06-01/outline.md b/.planning/pitch-deck-2026-06-01/outline.md new file mode 100755 index 0000000..e20e87b --- /dev/null +++ b/.planning/pitch-deck-2026-06-01/outline.md @@ -0,0 +1,217 @@ +# Big Breath Pitch Deck — Outline +Version 1.0 | June 1, 2026 | 20 slides + +--- + +## SLIDE 01 — Cover +**Eyebrow:** BIGBREATH.CO +**Headline:** Big Breath +**Sub:** Breathwork. Nervous system regulation. Transformation. +**Visual:** Full-bleed portrait of Big Joe (Big Joe-1.jpg), cream/charcoal overlay +**Intent:** Command attention. One name, one presence, nothing else. + +--- + +## SLIDE 02 — The Moment (Problem / Tension) +**Eyebrow:** THE PROBLEM +**Headline:** The nervous system is under siege. +**Body:** 77% of people regularly experience physical symptoms caused by stress. 80% of doctor visits are estimated to be stress-related. 70% of employees say workplace stress affects their performance. Stress is not a mindset problem. It is a physiological one. +**Visual:** Dark charcoal background, cream type, stark negative space +**Intent:** Land the scale of the problem before offering the solution. + +--- + +## SLIDE 03 — The Solution Frame +**Eyebrow:** THE ANSWER +**Headline:** Breath is the only tool that directly accesses the autonomic nervous system. +**Body:** No prescription. No equipment. No waiting room. Just 5 to 10 minutes of intentional breathwork measurably lowers cortisol and heart rate. +**Visual:** Cream ground, single bold stat, minimal +**Intent:** Position breathwork as the physiological solution, not a wellness trend. + +--- + +## SLIDE 04 — What Is Big Breath +**Eyebrow:** WHAT WE DO +**Headline:** Big Breath is not soft-spoken wellness. +**Body:** Big Breath is a breathwork practice that activates the inner fire, and then teaches you to master it. Guided by a former NFL athlete with 15,000+ sessions across the globe. This is not meditation. This is transformation. +**Visual:** Sand ground, terracotta accent on headline word "fire" +**Intent:** Differentiate immediately. Establish Big Breath vs every other breathwork brand. + +--- + +## SLIDE 05 — The Differentiator +**Eyebrow:** WHAT MAKES IT DIFFERENT +**Headline:** He walks into the room with no microphone. +**Body:** Big Joe does not whisper. He does not use a microphone. His voice ignites the room. Nobody else in breathwork has this. The inspiration comes from stoking the inner fire with each breath, and then paradoxically, learning to tame it to create balance. Vulnerable but strong. Power and openness held at the same time. +**Visual:** Action photo of Big Joe leading a session (DSC06048 kopie.jpg), full-bleed +**Intent:** Burn the category. One line that separates Big Breath from everything adjacent. + +--- + +## SLIDE 06 — The Arc: Ember, Flame, Mastery +**Eyebrow:** THE TRANSFORMATION ARC +**Headline:** You arrive disconnected. You leave on fire, and in control of it. +**Body three-part:** +- 01 EMBER: The breath awakens what is dormant. +- 02 FLAME: The inner fire is stoked. Power, activation. +- 03 MASTERY: You tame the fire. Balance is born. +**Visual:** Cream ground, terracotta/amber numbering, large negative space +**Intent:** Give the client the intellectual and emotional architecture of every session. + +--- + +## SLIDE 07 — Meet Big Joe +**Eyebrow:** THE PRACTITIONER +**Headline:** Former NFL athlete. Certified breathwork guide. 8+ years. +**Body:** After a career-altering ankle injury ended his professional football career, breathwork became the foundation for healing, clarity, and long-term resilience. Not as a wellness trend. As survival. 8 years later, the tool that saved him is the tool he shares with the world. +**Visual:** Headshot portrait (CG112123-449.jpg or similar), warm tone, right-aligned photo, left copy +**Intent:** Credibility through biography. The story earns the methodology. + +--- + +## SLIDE 08 — The Numbers +**Eyebrow:** PROOF +**Headline:** 15,000+ sessions. 15+ countries. 8 years. +**Body three stats:** +- 15,000+ individuals guided +- 15+ countries facilitated +- 143K Instagram community +**Visual:** Charcoal ground, large cream numerals, editorial layout +**Intent:** Global scale at a glance. No explanation needed. + +--- + +## SLIDE 09 — The Science +**Eyebrow:** THE SCIENCE +**Headline:** Ancient practice. Modern evidence. +**Body four points:** +- Stress reduction: Controlled breathing increases oxygen flow to the brain, lowering cortisol and enhancing focus and memory. +- Enhanced recovery: Breathwork improves oxygen delivery to tissues, aids muscle recovery, and reduces fatigue. +- Improved cognition: Specific breathing techniques enhance endurance, circulation, and neuroplasticity. +- Emotional regulation: Regular practice reduces symptoms of anxiety and depression, improving emotional well-being. +**Visual:** Cream ground, numbered list, clean serif +**Intent:** Give the corporate buyer the evidence layer they need to justify internally. + +--- + +## SLIDE 10 — The Formats +**Eyebrow:** HOW IT WORKS +**Headline:** Every session is tailored, intentional, and deeply human. +**Body three formats:** +- 30 MIN: Nervous System Reset. Quick, targeted, built for busy schedules. Returns participants to their afternoon clear, calm, and focused. +- 60 MIN: Empowerment Session. Fully tailored. Activation, regulation, integration. Practical tools they use the same day. +- 90-120 MIN: Full System Reboot. Immersive. Multi-phase. Emotional release and genuine transformation. Not a workshop. An experience. +**Visual:** Sand ground, three-column minimal layout +**Intent:** Show range. Let the buyer find their entry point. + +--- + +## SLIDE 11 — Keynotes and Speaking +**Eyebrow:** KEYNOTES AND SPEAKING +**Headline:** A story worth hearing in a room that will not forget it. +**Body:** Big Joe draws on his journey from professional athlete to breathwork guide. A rare combination of credibility, vulnerability, and practical wisdom. Audiences leave with tools they can use the same day. His story connects across industries, backgrounds, and roles. +**Visual:** Group photo (IMG_4466.JPG Detroit Tour or large event), full-bleed, cream text overlay +**Intent:** Show Big Joe on stage, not just in a workshop. + +--- + +## SLIDE 12 — Corporate and Enterprise +**Eyebrow:** CORPORATE AND ENTERPRISE +**Headline:** High-performance nervous system regulation for modern teams. +**Body:** Custom-built sessions for executive leadership, company-wide events, and brand activations. Every engagement designed around the company culture, goals, and people. Measurable shifts in presence, performance, and connection. +**Offering list:** Team unity. Mental health and focus. Creativity and efficiency. Productivity. Leadership development. +**Visual:** Workshop photo, participants in session, warm tone +**Intent:** Speak directly to the corporate decision-maker. Outcome-first language. + +--- + +## SLIDE 13 — Retreats and Live Experiences +**Eyebrow:** RETREATS AND LIVE EXPERIENCES +**Headline:** Immersive breath journeys designed for reset and transformation. +**Body:** Private group retreats, multi-day immersions, luxury hospitality programming. Each experience is built from the ground up. Joe does not arrive with a script. He arrives with a read of the room and a practice refined over 8 years of global facilitation. +**Visual:** Outdoor or retreat setting photo from 2026 Additions folder +**Intent:** Position the premium offering. Aman/Six Senses client language. + +--- + +## SLIDE 14 — Athlete Performance +**Eyebrow:** ATHLETE PERFORMANCE AND RECOVERY +**Headline:** Train hard. Breathe harder. +**Body:** Pre-performance activation: targeted breathing protocols to sharpen focus and prime the nervous system for peak output. Recovery: accelerate the shift from sympathetic overdrive back to parasympathetic rest, improving sleep quality and return to baseline. Big Joe brings the same discipline he built on the NFL field into every performance session. +**Visual:** Big Joe portrait (DSC04073 kopie.jpg), strong and grounded +**Intent:** Athlete and sports org buyer. Direct peer-to-peer credibility. + +--- + +## SLIDE 15 — Trusted Partners +**Eyebrow:** TRUSTED BY +**Headline:** The brands that invest in their people choose Big Breath. +**Body:** Big Joe has partnered with Visa, UCLA, the NFL, NFLPA, Ritz Carlton, Pendry, LA Chargers, NBL, Entrepreneurs Organization, and more to deliver breathwork programming built for results. +**Visual:** Charcoal ground, partner names in clean serif, no logos needed if unavailable +**Intent:** Credibility transfer. One slide. Let the names do the work. + +--- + +## SLIDE 16 — Testimonials +**Eyebrow:** WHAT PEOPLE SAY +**Headline:** (no headline, let quotes lead) +**Three quotes:** +- "As soon as I walked into the room, I felt protected and safe. That authenticity is rare." -- Brian Godfrey, Los Angeles +- "I didn't know the power of my breath. The experience was life-changing." -- Maria Muleta, Colombia +- "Big Breath transformed our team." -- Mark Thompson +**Visual:** Cream ground, large serif quotation marks, terracotta accent +**Intent:** Social proof. Real names, real places, real outcomes. + +--- + +## SLIDE 17 — The Five People Big Breath Serves +**Eyebrow:** WHO THIS IS FOR +**Headline:** Five people. One practice. +**Body five ICPs:** +- 01 The High Performer in Transition: Former athlete or exec. Burnout, identity shift, running on empty. +- 02 The Corporate Wellness Seeker: Mid-to-senior professional. Company invests in wellness. +- 03 The Conscious Man: Men 30 to 50. Open to inner work. Need a guide with real presence. +- 04 The Workshop Regular: Returns again and again. Wears the brand. +- 05 The Global Wellness Traveler: Internationally minded. Bali, temazcal, Joe Dispenza. Recognizes depth. +**Visual:** Sand ground, five numbered entries, minimal +**Intent:** Help the client self-identify, and identify who they are buying this for. + +--- + +## SLIDE 18 — Detroit Tour / Case Study +**Eyebrow:** CASE STUDY: DETROIT TOUR, MAY 2025 +**Headline:** Mental Health Awareness Month. One city. Real results. +**Body:** The May 2025 North America Big Breath Tour honored mental health awareness month with a series of community sessions across Detroit. Multiple events, multiple audiences, one consistent outcome: people left transformed. +**Visual:** Detroit Tour photo (20250503_Big-Breath-Tour-Detroit_003-Enhanced-NR.JPG), full-bleed +**Intent:** Proof of execution at scale. Shows tour-level operation, not just one-off sessions. + +--- + +## SLIDE 19 — The Global Footprint +**Eyebrow:** GLOBAL REACH +**Headline:** 15+ countries. Every culture. One breath. +**Countries listed:** USA, Mexico, Canada, Netherlands, France, Indonesia, Costa Rica, Saudi Arabia, UAE, Saint Barthelemy, Colombia, Greece, Japan, Sweden, Turkey +**Body:** Practical, grounded mastery of the breath, accessible across cultures, languages, and beliefs. +**Visual:** Group photo with diverse audience, warm tone +**Intent:** Reinforce international credibility for global brands and hospitality buyers. + +--- + +## SLIDE 20 — The Ask / Contact +**Eyebrow:** WORK WITH BIG BREATH +**Headline:** Every collaboration is custom-designed to meet your people, brand, or audience exactly where they are. +**Body:** hello@bigbreath.co | bigbreath.co | @bigjoe | 143K followers +**Visual:** Full-bleed portrait of Big Joe, cream overlay, minimal text +**Intent:** Clear, confident close. No pitch language. Just the door. + +--- + +## Voice Test (applied to all slides) +Would Big Joe say this standing across from someone who needs help, using his full voice, in a room with no microphone? If yes, it stays. + +## Content Decisions +1. No em dashes anywhere. Commas, periods, semicolons only. +2. Stats used: 15,000+ sessions (confirmed across multiple sources), 8+ years (final.pdf, draft), 15+ countries (brand doc), 143K Instagram (brand doc authoritative over new_deck 142K). +3. Older stat of 10,000 (corporate_v4) replaced by confirmed 15,000+. +4. Brand partners list from draft_notes slide 15 notes is the most complete; used verbatim. +5. Testimonials: three strongest (Brian Godfrey, Maria Muleta, Mark Thompson) used; Emily Johnson and Julia Rodriguez cut as generic. diff --git a/.planning/planning.db b/.planning/planning.db new file mode 100755 index 0000000..dd98149 Binary files /dev/null and b/.planning/planning.db differ diff --git a/.planning/qa/fetch_pages.sh b/.planning/qa/fetch_pages.sh new file mode 100755 index 0000000..7a044be --- /dev/null +++ b/.planning/qa/fetch_pages.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +BASE="http://localhost:8011" +OUT="/home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/html" +mkdir -p "$OUT" + +curl -s "$BASE/" -o "$OUT/home.html" +curl -s "$BASE/about" -o "$OUT/about.html" +curl -s "$BASE/services" -o "$OUT/services.html" +curl -s "$BASE/gallery" -o "$OUT/gallery.html" +curl -s "$BASE/testimonials" -o "$OUT/testimonials.html" + +echo "Fetched:" +wc -l "$OUT"/*.html diff --git a/.planning/qa/html/about.html b/.planning/qa/html/about.html new file mode 100755 index 0000000..d3b46a3 --- /dev/null +++ b/.planning/qa/html/about.html @@ -0,0 +1,171 @@ + + + + + +About Big Joe | Big Breath + + + + + + + + + + + + +
+ +
+ Big Joe, founder of Big Breath +
+ About +

The man behind the breath.

+
+
+ +
+
+
+
+ Big Joe leading a session +
+
+ Origin +

From the field to the fire.

+

Big Joe's path began on the professional football field. As an NFL athlete, he learned that sustained performance is not purely physical. The players who kept going, season after season, were the ones who had mastered what most athletes never train: the nervous system, and the breath that governs it.

+

When his playing career ended, the education deepened. He traveled. He studied with masters in Asia, the Middle East, and the subcontinent. He brought what he learned back to the people who needed it most: high performers under pressure, people in transition, and anyone searching for something real.

+

His voice has never needed a microphone. That is not a detail. It is the practice. Big Joe ignites people with presence, with breath, with a loud and grounded conviction that the body already knows how to heal itself. The work is remembering.

+
+
+
+
+ +
+
+ Global Footprint +
+

15,000 sessions. 15+ countries. One method.

+

Big Joe has guided breathwork in the tiger-sanctuary mountains of Bhutan, in the royal facilities of Saudi Arabia, in the meditation halls of Japan, at Ayurvedic centers across India, and in the luxury wellness retreats of Oman. He has worked with special forces units, professional sports teams, Fortune 500 leadership teams, and people who simply want to feel alive in their own bodies again.

+

Every location is different. The method is the same: breathe deliberately, breathe fully, and let the body remember what it has always known. Activating before it is calming. Fire before stillness.

+

Vulnerable but strong. Power and openness held at the same time. Most practices ask you to choose one. Big Breath holds both.

+
+
+ +
+
+
+
+ Philosophy +

The breath does not lie.

+

In a world of optimization stacks and performance dashboards, Big Joe's position is grounded and direct. The most powerful tool in the human body costs nothing and requires no device. It is the breath. Everything else is downstream of it.

+

Big Breath is not meditation. It is not passive wellness. It is the white of new life and spirit, carried on a loud and booming voice that ignites people before it soothes them. The ember within is stoked first. The taming comes after.

+

Ember. Flame. Mastery. That arc is available to anyone willing to breathe deliberately enough to travel it.

+ Work with Big Joe +
+
+ Big Joe in action +
+
+
+
+ +
+ + + + diff --git a/.planning/qa/html/gallery.html b/.planning/qa/html/gallery.html new file mode 100755 index 0000000..7e22fc3 --- /dev/null +++ b/.planning/qa/html/gallery.html @@ -0,0 +1,208 @@ + + + + + +Gallery | Big Breath + + + + + + + + + + + + +
+ +
+
+ Gallery +
+

The work, in the world.

+

15,000+ sessions. 15+ countries. Every frame here is a moment of ignition.

+
+
+ +
+
+ The Practitioner +
+
+
+ Big Joe portrait +
+
+ Big Joe leading a session +
+
+ Big Joe in breathwork +
+
+ Big Joe close portrait +
+
+ Big Joe full portrait +
+
+ Big Joe at work +
+
+ + The Practice +
+
+
+ Group breathwork session +
+
+ Group breathwork +
+
+ Breathwork participant +
+
+ Session in progress +
+
+ Group in breathwork +
+
+ Breathwork group +
+
+ + The Travel +
+
+
+ Detroit Tour +
+
+ Global session +
+
+ Detroit Tour session +
+
+ Detroit Tour group +
+
+ Tour wide shot +
+
+ Global breathwork +
+
+
+
+ +
+
+ Ready +
+

Your session starts with one decision.

+ Begin the Conversation +
+
+ +
+ + + + diff --git a/.planning/qa/html/home.html b/.planning/qa/html/home.html new file mode 100755 index 0000000..29518c2 --- /dev/null +++ b/.planning/qa/html/home.html @@ -0,0 +1,377 @@ + + + + + +Big Breath | Ignite the Inner Fire. Master the Breath. + + + + + + + + + + + + +
+ +
+
+ Big Joe leads a breathwork session +
+
+ Big Breath +

Ignite the inner fire.
Master the breath.

+ Begin Your Practice +
+
+ +
+
+ Section 01 / The Practice +
+
+
+

Breath is the original technology of transformation.

+

The Big Breath method is not meditation. It is not whisper-soft wellness. It is a full-body, full-voice, full-presence practice that activates before it calms. Each session is a portal. Clients leave different from how they arrived.

+

Ancient wisdom. Modern performance science. A loud, booming guide with 15,000+ sessions and no microphone in front of him.

+ Explore the Method +
+
+ Big Joe in practice +
+
+
+
+ +
+
+ Section 02 / Ember Flame Mastery +
+

Ember. Flame. Mastery.
Three stages. One journey.

+

You arrive disconnected. You leave on fire and in control of it. Every practitioner moves through three arcs. The ember is lit. The flame is tended. Mastery is the state beyond effort, where breath becomes instinct and the body knows exactly how to heal itself.

+

Vulnerable but strong. Power and openness held at the same time. Most practices ask you to choose one. Big Breath holds both.

+ The Three Arcs +
+
+ +
+
+ Section 03 / Big Joe +
+
+
+
+ Big Joe portrait +
+
+

From the NFL to 15,000 guided sessions.

+

Big Joe spent years in professional football learning that performance lives in the breath. After his playing career he took that knowledge to every corner of the world: royal palaces in Oman, mountain monasteries in Bhutan, boardrooms in New York, arenas in Detroit.

+

CEOs. Special forces units. Olympic teams. Thousands of people who wanted something extraordinary from their bodies and minds. He does not whisper. He ignites.

+

The inner fire is already in you. He is here to stoke it.

+ Meet Big Joe +
+
+
+
+
+ +
+
+ Section 04 / By the Numbers +
+
+
+

15,000+

+

Guided Sessions

+
+
+

15+

+

Countries

+
+
+

7+

+

Years of Practice

+
+
+
+
+ +
+
+ Section 05 / Global Footprint +
+
+
+

The practice has no borders.

+
+
+

Bhutan

+
+
+

Saudi Arabia

+
+
+

Japan

+
+
+

India

+
+
+

Oman

+
+
+

United States

+
+
+
+
+ Big Joe at a global retreat +
+
+
+
+ +
+
+ Section 06 / Experiences +
+

Every format.
Every context.

+
+ 01 +
+ Keynotes +

Command the room. Transform the audience.

+
+ View +
+
+ 02 +
+ Corporate Wellness +

Breathwork programs built for teams and organizations.

+
+ View +
+
+ 03 +
+ Private Sessions +

One-on-one work, tailored to your nervous system.

+
+ View +
+
+ 04 +
+ Group Classes +

Shared breath, shared transformation.

+
+ View +
+
+ 05 +
+ Retreats +

Immersive multi-day experiences worldwide.

+
+ View +
+
+ 06 +
+ Online +

Live and recorded sessions, anywhere in the world.

+
+ View +
+
+ 07 +
+ Meditation + Breathwork +

The union of stillness and fire.

+
+ View +
+
+
+ +
+
+ Section 07 / Testimonials +
+
"I walked in skeptical and walked out changed. Big Joe does not teach breathing. He teaches you how to live."
+

Sarah K. / Chief Executive Officer

+ Read More +
+
+ +
+
+ Section 08 / Questions +
+

What people ask before their first session.

+
+
+

How is this different from meditation?

+

Meditation asks you to observe. Big Breath asks you to ignite. This practice is activating before it is calming. You will breathe with force, with volume, with intention. The stillness comes after the fire, not instead of it. If you have tried meditation and found it too passive, this is built for you.

+
+
+

What should I expect physically?

+

Tingling. Heat moving through the chest. A sense of the breath as a living force. Some people shake. Some cry. Some find a quiet so deep it surprises them. All of it is the nervous system releasing what it has been holding. Nothing is wrong. Everything is working.

+
+
+

Who is this practice for?

+

Former athletes in transition. Executives running on empty. Men who want to do inner work without soft-pedaling. Leaders who need real recovery tools, not a wellness checkbox. Anyone who has tried everything and not yet tried the breath. Big Joe's NFL background is not just a credential. It is a signal: this is for people who take performance seriously.

+
+
+

Do I need experience?

+

No. The Ember stage is built for first-time practitioners. You will be guided through every pattern. The only requirement is a willingness to breathe more fully than you have been. Big Joe has worked with people who have never thought about their breath and people who have studied it for decades. Both leave changed.

+
+
+

What about emotional release?

+

It happens. The breath unlocks what the body has stored. Grief, tension, old decisions that never resolved. Big Joe holds that space without making it precious. You will not be asked to perform your healing. You will simply breathe, and the body will do what it has always wanted to do when given permission.

+
+
+

How do I bring this to my company?

+

Big Joe works with organizations directly, from single keynotes to full corporate wellness programs. He has delivered breathwork to Fortune 500 leadership teams, sales floors, and executive retreats. The entry point is a conversation. Describe what your team is carrying. He will tell you what fits.

+
+
+

What is the inner fire concept?

+

Every person carries an ember. Most have never been taught to tend it. The inner fire is not a metaphor for motivation. It is the body's actual capacity to activate, regulate, and sustain itself under pressure. Big Breath uses the breath as the bellows. The fire already exists. The work is learning to stoke it, and then, just as importantly, to master it. Ember. Flame. Mastery. In that order.

+
+
+
+
+ +
+
+ Section 09 / Credibility +
+
+
+

NFL Foundation

+

Professional football taught Big Joe that peak performance is a nervous system problem. Breathwork is the solution that no coach ever named.

+
+
+

Corporate Reach

+

Fortune 500 leadership teams. Special forces units. Sales organizations under pressure. Big Breath travels to where the stakes are highest.

+
+
+

Global Practice

+

Bhutan. Saudi Arabia. Japan. India. Oman. Detroit. The practice has no borders. The method is the same in every room.

+
+
+
+
+ +
+
+ Section 10 / Inquire +
+

Your practice begins with one breath.

+

Whether you are an individual seeking transformation or an organization ready to invest in human performance, reach out. Every engagement begins with a conversation.

+ Begin the Conversation +
+
+ +
+ + + + diff --git a/.planning/qa/html/services.html b/.planning/qa/html/services.html new file mode 100755 index 0000000..6a32e56 --- /dev/null +++ b/.planning/qa/html/services.html @@ -0,0 +1,187 @@ + + + + + +Services | Big Breath + + + + + + + + + + + + +
+ +
+
+ Services +
+

Every format. Every context. One method.

+

Big Joe delivers breathwork in every professional format. Choose the experience that fits your life, your team, or your organization.

+ +
+ 01 +
+ Keynotes +

Command the room. Transform the audience with a breathwork keynote that changes how people think about performance.

+
+ Learn More +
+
+ 02 +
+ Corporate Wellness +

A complete breathwork program for teams, leadership cohorts, and organizational wellness initiatives.

+
+ Learn More +
+
+ 03 +
+ Private Sessions +

One-on-one work with Big Joe. Fully bespoke, deeply personal, and precisely calibrated to your goals.

+
+ Learn More +
+
+ 04 +
+ Group Classes +

Open and intimate group sessions. Shared breath, shared transformation. Community is part of the medicine.

+
+ Learn More +
+
+ 05 +
+ Retreats +

Immersive multi-day experiences in extraordinary locations across the globe. The most transformative format.

+
+ Learn More +
+
+ 06 +
+ Online +

Live sessions, recorded programs, and guided practices available wherever you are in the world.

+
+ Learn More +
+
+ 07 +
+ Meditation + Breathwork +

The union of stillness and fire. Seated practice that integrates classical meditation with active breathwork.

+
+ Learn More +
+ +
+ Inquire About Any Format +
+
+
+ +
+ + + + diff --git a/.planning/qa/html/testimonials.html b/.planning/qa/html/testimonials.html new file mode 100755 index 0000000..59b5e4d --- /dev/null +++ b/.planning/qa/html/testimonials.html @@ -0,0 +1,167 @@ + + + + + +Testimonials | Big Breath + + + + + + + + + + + + +
+ +
+
+ Testimonials +
+

In their own words.

+
+
+ +
+
+
+
"I walked in skeptical and walked out changed. Big Joe does not teach breathing. He teaches you how to live."
+

Sarah K.

+

Chief Executive Officer

+
+
+
"Our leadership team did a three-day retreat with Big Joe. The culture shift was measurable. Stress markers down. Decision quality up. We brought him back six months later."
+

Marcus T.

+

Chief People Officer, Fortune 500

+
+
+
"I have worked with coaches on every aspect of performance. Breath was the missing piece. Two months of private sessions with Big Joe and I PR'd in three lifts."
+

Dani R.

+

Professional Athlete

+
+
+
"The Bhutan retreat was the most transformative week of my life. No hyperbole. I am a different person on the other side of it."
+

James O.

+

Surgeon and Retreat Participant

+
+
+
"Big Joe's keynote at our annual summit left the audience silent for a full minute after he finished. In twelve years of event management I have never seen that."
+

Priya L.

+

Events Director

+
+
+
"I started with the online program because I was skeptical about paying for breathwork. Now I attend every retreat I can get into."
+

Tom W.

+

Software Engineer, Online Member

+
+
+
+ +
+
+

Ready to add your story?

+ Begin the Conversation +
+
+ +
+ + + + diff --git a/.planning/qa/latest.png b/.planning/qa/latest.png new file mode 100755 index 0000000..9b000f8 Binary files /dev/null and b/.planning/qa/latest.png differ diff --git a/.planning/qa/nav-fix/nav-default.png b/.planning/qa/nav-fix/nav-default.png new file mode 100755 index 0000000..4446539 Binary files /dev/null and b/.planning/qa/nav-fix/nav-default.png differ diff --git a/.planning/qa/nav-fix/nav-hover.png b/.planning/qa/nav-fix/nav-hover.png new file mode 100755 index 0000000..6c71bd2 Binary files /dev/null and b/.planning/qa/nav-fix/nav-hover.png differ diff --git a/.planning/qa/nav-fix/nav-mobile-open.png b/.planning/qa/nav-fix/nav-mobile-open.png new file mode 100755 index 0000000..aa9e3a4 Binary files /dev/null and b/.planning/qa/nav-fix/nav-mobile-open.png differ diff --git a/.planning/qa/playwright_screenshots.py b/.planning/qa/playwright_screenshots.py new file mode 100755 index 0000000..5baeb4f --- /dev/null +++ b/.planning/qa/playwright_screenshots.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +import asyncio, json +from playwright.async_api import async_playwright + +BASE = "http://localhost:8011" +OUT = "/home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/visual-2026-06-01-post-fix" +PAGES = [ + ("home", "/"), + ("about", "/about"), + ("services", "/services"), + ("testimonials", "/testimonials"), + ("gallery", "/gallery"), +] + +async def scroll_and_screenshot(page, url, path): + await page.goto(url, wait_until="networkidle") + # scroll top to bottom in 200px steps with 100ms pause + scroll_height = await page.evaluate("document.body.scrollHeight") + pos = 0 + while pos < scroll_height: + await page.evaluate(f"window.scrollTo(0, {pos})") + await asyncio.sleep(0.1) + pos += 200 + await page.evaluate("window.scrollTo(0, 0)") + await asyncio.sleep(2) + await page.screenshot(path=path, full_page=True) + +async def count_elements(page, url): + await page.goto(url, wait_until="networkidle") + counts = await page.evaluate("""() => ({ + faq: document.querySelectorAll('[class*="faq"]').length, + stat: document.querySelectorAll('[class*="stat"]').length, + footprint: document.querySelectorAll('[class*="footprint"]').length, + reveal: document.querySelectorAll('.bb-reveal').length, + section: document.querySelectorAll('.bb-section').length, + images: document.querySelectorAll('img').length, + reveal_opacity: (() => { + const el = document.querySelector('.bb-reveal'); + return el ? getComputedStyle(el).opacity : 'N/A'; + })(), + })""") + return counts + +async def main(): + async with async_playwright() as pw: + browser = await pw.firefox.launch() + ctx = await browser.new_context(viewport={"width": 1440, "height": 900}) + + results = {} + for name, path in PAGES: + page = await ctx.new_page() + url = BASE + path + img_path = f"{OUT}/{name}.png" + await scroll_and_screenshot(page, url, img_path) + counts = await count_elements(page, url) + results[name] = counts + print(f"SCREENSHOT: {img_path}") + print(f"COUNTS {name}: {json.dumps(counts)}") + await page.close() + + await browser.close() + +asyncio.run(main()) diff --git a/.planning/qa/validate_post_fix.sh b/.planning/qa/validate_post_fix.sh new file mode 100755 index 0000000..7a2210d --- /dev/null +++ b/.planning/qa/validate_post_fix.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +BASE="http://localhost:8011" +OUT="/home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/visual-2026-06-01-post-fix" + +echo "=== MARKUP COUNTS ===" + +home=$(curl -s "$BASE/") +echo "HOME bb-faq__item: $(echo "$home" | grep -o 'bb-faq__item' | wc -l)" +echo "HOME bb-stat: $(echo "$home" | grep -o 'bb-stat' | wc -l)" +echo "HOME footprint: $(echo "$home" | grep -oi 'footprint' | wc -l)" +echo "HOME js-enabled: $(echo "$home" | grep -o 'js-enabled' | wc -l)" + +svc=$(curl -s "$BASE/services") +echo "SERVICES service-row: $(echo "$svc" | grep -oi 'service-row' | wc -l)" + +gal=$(curl -s "$BASE/gallery") +echo "GALLERY .webp refs: $(echo "$gal" | grep -o '\.webp' | wc -l)" + +about=$(curl -s "$BASE/about") +echo "ABOUT hero img match: $(echo "$about" | grep -oc 'about-hero\|bigjoe-about')" + +echo "=== DONE ===" diff --git a/.planning/qa/validation_log.txt b/.planning/qa/validation_log.txt new file mode 100755 index 0000000..eae901e --- /dev/null +++ b/.planning/qa/validation_log.txt @@ -0,0 +1,1188 @@ + +[2026-06-01 01:12:57] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/tokens.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] Skip to main content +Big Breath +BREATHWORK +About +Services +Breathwork Sessions +Corporate Wellness +Private 1-on-1 +Keynotes +Retreats & Live Experiences +Online +Contact +Book a Session +BREATH +143K + +FORMER NFL ATHLETE · 15,000+ PEOPLE GUIDED · 15 COUNTRIES + +Take a big breath +& have the best day ever. + +Brea +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 01:13:08] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] Skip to main content +Big Breath +BREATHWORK +About +Services +Breathwork Sessions +Corporate Wellness +Private 1-on-1 +Keynotes +Retreats & Live Experiences +Online +Contact +Book a Session +BREATH +143K + +FORMER NFL ATHLETE · 15,000+ PEOPLE GUIDED · 15 COUNTRIES + +Take a big breath +& have the best day ever. + +Brea +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 01:13:24] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] Skip to main content +Big Breath +BREATHWORK +About +Services +Breathwork Sessions +Corporate Wellness +Private 1-on-1 +Keynotes +Retreats & Live Experiences +Online +Contact +Book a Session +BREATH +143K + +FORMER NFL ATHLETE · 15,000+ PEOPLE GUIDED · 15 COUNTRIES + +Take a big breath +& have the best day ever. + +Brea +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 01:14:46] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] Skip to main content +Big Breath +BREATHWORK +About +Services +Breathwork Sessions +Corporate Wellness +Private 1-on-1 +Keynotes +Retreats & Live Experiences +Online +Contact +Book a Session +BREATH +143K + +FORMER NFL ATHLETE · 15,000+ PEOPLE GUIDED · 15 COUNTRIES + +Take a big breath +& have the best day ever. + +Brea +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 01:15:14] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] Skip to main content +Big Breath +BREATHWORK +About +Services +Breathwork Sessions +Corporate Wellness +Private 1-on-1 +Keynotes +Retreats & Live Experiences +Online +Contact +Book a Session +BREATH +143K + +FORMER NFL ATHLETE · 15,000+ PEOPLE GUIDED · 15 COUNTRIES + +Take a big breath +& have the best day ever. + +Brea +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 01:17:43] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] Skip to main content +Big Breath +BREATHWORK +About +Services +Breathwork Sessions +Corporate Wellness +Private 1-on-1 +Keynotes +Retreats & Live Experiences +Online +Contact +Book a Session +BREATH +143K + +FORMER NFL ATHLETE · 15,000+ PEOPLE GUIDED · 15 COUNTRIES + +Take a big breath +& have the best day ever. + +Brea +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:19:14] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/tokens.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:19:22] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:19:33] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:19:46] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:19:54] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:20:17] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:20:29] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:20:37] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:20:52] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/components/_header.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "Big Breath" -> FOUND +[CONTENT CHECK] "The Practice" -> FOUND +[CONTENT CHECK] "Services" -> FOUND +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:26:07] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/templates/gallery.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "The work, in the world." -> NOT FOUND +[CONTENT CHECK] "The Practitioner" -> NOT FOUND +[CONTENT CHECK] "The Practice" -> FOUND +[PLANNING] Added 2 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-01 09:26:15] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/router.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:26:45] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/templates/about.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "The man behind the breath." -> NOT FOUND +[CONTENT CHECK] "From the field to the fire." -> NOT FOUND +[CONTENT CHECK] "Global Footprint" -> NOT FOUND +[PLANNING] Added 3 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-01 09:27:16] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/templates/about.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "The man behind the breath." -> NOT FOUND +[CONTENT CHECK] "From the field to the fire." -> NOT FOUND +[CONTENT CHECK] "Global Footprint" -> NOT FOUND +[PLANNING] Added 3 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-01 09:30:11] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/templates/home.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "Big Breath" -> FOUND +[CONTENT CHECK] "Ignite the inner fire." -> FOUND +[CONTENT CHECK] "Master the breath." -> FOUND +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 09:30:22] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/templates/practice.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method draws from ancient wisdom and modern performance science. +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "The Practice" -> FOUND +[CONTENT CHECK] "Three stages." -> FOUND +[CONTENT CHECK] "One journey." -> FOUND +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 12:42:07] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +KEYNOTES +CORPORATE WELLNESS +PRIVATE SESSIONS +GROUP CLASSES +RETREATS +ONLINE +MEDITATION + BREATHWORK +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original tec +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 12:42:15] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +KEYNOTES +CORPORATE WELLNESS +PRIVATE SESSIONS +GROUP CLASSES +RETREATS +ONLINE +MEDITATION + BREATHWORK +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original tec +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 12:42:23] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/components/_header.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +KEYNOTES +CORPORATE WELLNESS +PRIVATE SESSIONS +GROUP CLASSES +RETREATS +ONLINE +MEDITATION + BREATHWORK +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original tec +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "document.documentElement.classList.add('" -> NOT FOUND +[CONTENT CHECK] "Big Breath" -> FOUND +[CONTENT CHECK] "The Practice" -> FOUND +[PLANNING] Added 1 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-01 12:42:35] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/js/main.js +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +KEYNOTES +CORPORATE WELLNESS +PRIVATE SESSIONS +GROUP CLASSES +RETREATS +ONLINE +MEDITATION + BREATHWORK +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original tec +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 12:42:46] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/js/main.js +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +KEYNOTES +CORPORATE WELLNESS +PRIVATE SESSIONS +GROUP CLASSES +RETREATS +ONLINE +MEDITATION + BREATHWORK +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original tec +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 12:42:52] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/js/main.js +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +KEYNOTES +CORPORATE WELLNESS +PRIVATE SESSIONS +GROUP CLASSES +RETREATS +ONLINE +MEDITATION + BREATHWORK +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original tec +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 12:42:59] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/js/main.js +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +KEYNOTES +CORPORATE WELLNESS +PRIVATE SESSIONS +GROUP CLASSES +RETREATS +ONLINE +MEDITATION + BREATHWORK +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original tec +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 12:43:08] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/templates/testimonials.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +KEYNOTES +CORPORATE WELLNESS +PRIVATE SESSIONS +GROUP CLASSES +RETREATS +ONLINE +MEDITATION + BREATHWORK +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original tec +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "'Software Engineer, Online Member'], +]; +" -> NOT FOUND +[CONTENT CHECK] "Testimonials" -> FOUND +[CONTENT CHECK] "In their own words." -> NOT FOUND +[PLANNING] Added 2 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-01 14:05:18] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +KEYNOTES +CORPORATE WELLNESS +PRIVATE SESSIONS +GROUP CLASSES +RETREATS +ONLINE +MEDITATION + BREATHWORK +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original tec +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 15:04:39] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method is not meditation. It is not whisper-soft wellnes +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 15:04:50] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/templates/home.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method is not meditation. It is not whisper-soft wellnes +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "Big Breath" -> FOUND +[CONTENT CHECK] "Ignite the inner fire." -> FOUND +[CONTENT CHECK] "Master the breath." -> FOUND +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 15:05:01] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/templates/services-index.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method is not meditation. It is not whisper-soft wellnes +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "Services" -> FOUND +[CONTENT CHECK] "Every format. Every context. One method." -> NOT FOUND +[CONTENT CHECK] "[$slug, $title, $lede]): ?>" -> NOT FOUND +[PLANNING] Added 2 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-01 17:06:52] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/components/_header.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method is not meditation. It is not whisper-soft wellnes +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "document.documentElement.classList.add('" -> NOT FOUND +[CONTENT CHECK] "Big Breath" -> FOUND +[CONTENT CHECK] "The Practice" -> FOUND +[PLANNING] Added 1 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-01 17:07:01] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/router.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method is not meditation. It is not whisper-soft wellnes +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-01 17:34:42] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/templates/events.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method is not meditation. It is not whisper-soft wellnes +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "Join Joe. Upcoming events around the wor" -> NOT FOUND +[CONTENT CHECK] "">" -> NOT FOUND +[CONTENT CHECK] "·" -> NOT FOUND +[PLANNING] Added 3 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-01 17:35:21] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/api/templates/coming-soon.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method is not meditation. It is not whisper-soft wellnes +[BROWSER] No console errors or failed requests +[CONTENT CHECK] "Coming Soon" -> NOT FOUND +[CONTENT CHECK] "Big Breath" -> FOUND +[CONTENT CHECK] "We are excited for our website." -> NOT FOUND +[PLANNING] Added 2 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-01 17:37:23] +[CHANGE APPLIED] /home/sirdrez/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> PASS HTTP 200 +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] Screenshot saved: /home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/latest.png +[PAGE TEXT] BIG BREATH +THE PRACTICE +ABOUT +SERVICES +TESTIMONIALS +GALLERY +CONTACT +INQUIRE +BIG BREATH +Ignite the inner fire. +Master the breath. +BEGIN YOUR PRACTICE +SECTION 01 / THE PRACTICE +Breath is the original technology of transformation. + +The Big Breath method is not meditation. It is not whisper-soft wellnes +[BROWSER] No console errors or failed requests +[ISSUES] 0 issues found +[VALIDATION COMPLETE] + +[2026-06-06 15:12:30] +[CHANGE APPLIED] /mnt/local-home/sirdrez-backup/arisingmedia-websites/bigbreath.co/src/api/templates/home.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> FAIL: FAIL: http://localhost:8011 returned 000000 (expected 200) +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] FAILED: Traceback (most recent call last): + File "", line 3, in +ModuleNotFoundError: No module named 'playwrig +[PLANNING] Added 2 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-06 15:14:20] +[CHANGE APPLIED] /mnt/local-home/sirdrez-backup/arisingmedia-websites/bigbreath.co/src/api/components/_footer.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> FAIL: FAIL: http://localhost:8011 returned 000000 (expected 200) +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] FAILED: Traceback (most recent call last): + File "", line 3, in +ModuleNotFoundError: No module named 'playwrig +[PLANNING] Added 2 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-07 13:52:02] +[CHANGE APPLIED] /mnt/local-home/sirdrez-backup/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> FAIL: FAIL: http://localhost:8011 returned 000000 (expected 200) +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] FAILED: Traceback (most recent call last): + File "", line 3, in +ModuleNotFoundError: No module named 'playwrig +[PLANNING] Added 2 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-07 13:56:15] +[CHANGE APPLIED] /mnt/local-home/sirdrez-backup/arisingmedia-websites/bigbreath.co/src/assets/css/main.css +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> FAIL: FAIL: http://localhost:8011 returned 000000 (expected 200) +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] FAILED: Traceback (most recent call last): + File "", line 3, in +ModuleNotFoundError: No module named 'playwrig +[PLANNING] Added 2 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-07 13:57:41] +[CHANGE APPLIED] /mnt/local-home/sirdrez-backup/arisingmedia-websites/bigbreath.co/src/api/router.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> FAIL: FAIL: http://localhost:8011 returned 000000 (expected 200) +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] FAILED: Traceback (most recent call last): + File "", line 3, in +ModuleNotFoundError: No module named 'playwrig +[PLANNING] Added 2 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-07 13:58:34] +[CHANGE APPLIED] /mnt/local-home/sirdrez-backup/arisingmedia-websites/bigbreath.co/src/api/templates/event-detail.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> FAIL: FAIL: http://localhost:8011 returned 000000 (expected 200) +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] FAILED: Traceback (most recent call last): + File "", line 3, in +ModuleNotFoundError: No module named 'playwrig +[PLANNING] Added 2 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] + +[2026-06-07 13:59:28] +[CHANGE APPLIED] /mnt/local-home/sirdrez-backup/arisingmedia-websites/bigbreath.co/src/api/templates/events.php +[PORT CHECK] 8011 -> OPEN +[CURL] http://localhost:8011 -> FAIL: FAIL: http://localhost:8011 returned 000000 (expected 200) +[PLAYWRIGHT] Starting Firefox + console/network capture... +[PLAYWRIGHT] FAILED: Traceback (most recent call last): + File "", line 3, in +ModuleNotFoundError: No module named 'playwrig +[PLANNING] Added 2 task(s) to .planning/planning.db +[GIT ISSUE] (gh unavailable: [Errno 2] No such file or directory: 'gh') +[VALIDATION COMPLETE] diff --git a/.planning/qa/visual-2026-06-01-post-fix/about-desktop.png b/.planning/qa/visual-2026-06-01-post-fix/about-desktop.png new file mode 100755 index 0000000..324b7b1 Binary files /dev/null and b/.planning/qa/visual-2026-06-01-post-fix/about-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01-post-fix/about.png b/.planning/qa/visual-2026-06-01-post-fix/about.png new file mode 100755 index 0000000..bea1e2a Binary files /dev/null and b/.planning/qa/visual-2026-06-01-post-fix/about.png differ diff --git a/.planning/qa/visual-2026-06-01-post-fix/gallery-desktop.png b/.planning/qa/visual-2026-06-01-post-fix/gallery-desktop.png new file mode 100755 index 0000000..4ae6a93 Binary files /dev/null and b/.planning/qa/visual-2026-06-01-post-fix/gallery-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01-post-fix/gallery.png b/.planning/qa/visual-2026-06-01-post-fix/gallery.png new file mode 100755 index 0000000..fd12a6e Binary files /dev/null and b/.planning/qa/visual-2026-06-01-post-fix/gallery.png differ diff --git a/.planning/qa/visual-2026-06-01-post-fix/home-desktop.png b/.planning/qa/visual-2026-06-01-post-fix/home-desktop.png new file mode 100755 index 0000000..113cfa7 Binary files /dev/null and b/.planning/qa/visual-2026-06-01-post-fix/home-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01-post-fix/home.png b/.planning/qa/visual-2026-06-01-post-fix/home.png new file mode 100755 index 0000000..c32289a Binary files /dev/null and b/.planning/qa/visual-2026-06-01-post-fix/home.png differ diff --git a/.planning/qa/visual-2026-06-01-post-fix/services-desktop.png b/.planning/qa/visual-2026-06-01-post-fix/services-desktop.png new file mode 100755 index 0000000..96a1102 Binary files /dev/null and b/.planning/qa/visual-2026-06-01-post-fix/services-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01-post-fix/services.png b/.planning/qa/visual-2026-06-01-post-fix/services.png new file mode 100755 index 0000000..1e68a96 Binary files /dev/null and b/.planning/qa/visual-2026-06-01-post-fix/services.png differ diff --git a/.planning/qa/visual-2026-06-01-post-fix/testimonials-desktop.png b/.planning/qa/visual-2026-06-01-post-fix/testimonials-desktop.png new file mode 100755 index 0000000..37748c0 Binary files /dev/null and b/.planning/qa/visual-2026-06-01-post-fix/testimonials-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01-post-fix/testimonials.png b/.planning/qa/visual-2026-06-01-post-fix/testimonials.png new file mode 100755 index 0000000..8238757 Binary files /dev/null and b/.planning/qa/visual-2026-06-01-post-fix/testimonials.png differ diff --git a/.planning/qa/visual-2026-06-01/about-desktop.png b/.planning/qa/visual-2026-06-01/about-desktop.png new file mode 100755 index 0000000..324b7b1 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/about-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01/about-mobile.png b/.planning/qa/visual-2026-06-01/about-mobile.png new file mode 100755 index 0000000..c2d7f98 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/about-mobile.png differ diff --git a/.planning/qa/visual-2026-06-01/contact-desktop.png b/.planning/qa/visual-2026-06-01/contact-desktop.png new file mode 100755 index 0000000..c35eb75 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/contact-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01/contact-mobile.png b/.planning/qa/visual-2026-06-01/contact-mobile.png new file mode 100755 index 0000000..08bbb99 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/contact-mobile.png differ diff --git a/.planning/qa/visual-2026-06-01/gallery-desktop.png b/.planning/qa/visual-2026-06-01/gallery-desktop.png new file mode 100755 index 0000000..b369bb0 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/gallery-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01/gallery-mobile.png b/.planning/qa/visual-2026-06-01/gallery-mobile.png new file mode 100755 index 0000000..2ca91c6 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/gallery-mobile.png differ diff --git a/.planning/qa/visual-2026-06-01/home-desktop.png b/.planning/qa/visual-2026-06-01/home-desktop.png new file mode 100755 index 0000000..113cfa7 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/home-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01/home-mobile-nav-open.png b/.planning/qa/visual-2026-06-01/home-mobile-nav-open.png new file mode 100755 index 0000000..aa9e3a4 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/home-mobile-nav-open.png differ diff --git a/.planning/qa/visual-2026-06-01/home-mobile.png b/.planning/qa/visual-2026-06-01/home-mobile.png new file mode 100755 index 0000000..4dac907 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/home-mobile.png differ diff --git a/.planning/qa/visual-2026-06-01/keynotes-desktop.png b/.planning/qa/visual-2026-06-01/keynotes-desktop.png new file mode 100755 index 0000000..c0ddd11 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/keynotes-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01/keynotes-mobile.png b/.planning/qa/visual-2026-06-01/keynotes-mobile.png new file mode 100755 index 0000000..1486efb Binary files /dev/null and b/.planning/qa/visual-2026-06-01/keynotes-mobile.png differ diff --git a/.planning/qa/visual-2026-06-01/services-desktop.png b/.planning/qa/visual-2026-06-01/services-desktop.png new file mode 100755 index 0000000..a0e1c2d Binary files /dev/null and b/.planning/qa/visual-2026-06-01/services-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01/services-mobile.png b/.planning/qa/visual-2026-06-01/services-mobile.png new file mode 100755 index 0000000..1b9f4c3 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/services-mobile.png differ diff --git a/.planning/qa/visual-2026-06-01/services-nav-dropdown-desktop.png b/.planning/qa/visual-2026-06-01/services-nav-dropdown-desktop.png new file mode 100755 index 0000000..6c71bd2 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/services-nav-dropdown-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01/testimonials-desktop.png b/.planning/qa/visual-2026-06-01/testimonials-desktop.png new file mode 100755 index 0000000..68eeb90 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/testimonials-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01/testimonials-mobile.png b/.planning/qa/visual-2026-06-01/testimonials-mobile.png new file mode 100755 index 0000000..d710d42 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/testimonials-mobile.png differ diff --git a/.planning/qa/visual-2026-06-01/the-practice-desktop.png b/.planning/qa/visual-2026-06-01/the-practice-desktop.png new file mode 100755 index 0000000..938c7f5 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/the-practice-desktop.png differ diff --git a/.planning/qa/visual-2026-06-01/the-practice-mobile.png b/.planning/qa/visual-2026-06-01/the-practice-mobile.png new file mode 100755 index 0000000..f5f6347 Binary files /dev/null and b/.planning/qa/visual-2026-06-01/the-practice-mobile.png differ diff --git a/.planning/qa/visual_qa_2026_06_01.py b/.planning/qa/visual_qa_2026_06_01.py new file mode 100755 index 0000000..a87c470 --- /dev/null +++ b/.planning/qa/visual_qa_2026_06_01.py @@ -0,0 +1,101 @@ +"""Visual QA capture: bigbreath.co localhost:8011 -- 2026-06-01""" +import asyncio, os, sys +from pathlib import Path +from playwright.async_api import async_playwright + +BASE = "http://localhost:8011" +OUT = Path("/home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/qa/visual-2026-06-01") +OUT.mkdir(parents=True, exist_ok=True) + +ROUTES = [ + ("home", "/"), + ("about", "/about"), + ("the-practice","/the-practice"), + ("services", "/services"), + ("keynotes", "/services/keynotes/"), + ("testimonials","/testimonials"), + ("gallery", "/gallery"), + ("contact", "/contact"), +] + +VIEWPORTS = [ + ("desktop", {"width": 1440, "height": 900}), + ("mobile", {"width": 390, "height": 844}), +] + +ERRORS = [] + +async def capture(page, url, slug, vp_name): + try: + await page.goto(url, wait_until="networkidle", timeout=30000) + await asyncio.sleep(1.2) # font swap + fname = OUT / f"{slug}-{vp_name}.png" + await page.screenshot(path=str(fname), full_page=True) + print(f"OK {fname.name}") + return fname + except Exception as e: + msg = f"FAIL {slug}-{vp_name}: {e}" + print(msg, file=sys.stderr) + ERRORS.append(msg) + return None + +async def capture_dropdown(page, slug): + """Desktop only: hover Services nav item and capture dropdown.""" + try: + await page.goto(BASE + "/", wait_until="networkidle", timeout=30000) + await asyncio.sleep(1.0) + nav_item = page.locator("nav a", has_text="Services").first + await nav_item.hover() + await asyncio.sleep(0.8) + fname = OUT / f"{slug}-dropdown-desktop.png" + await page.screenshot(path=str(fname), full_page=False) + print(f"OK {fname.name}") + except Exception as e: + msg = f"FAIL {slug}-dropdown: {e}" + print(msg, file=sys.stderr) + ERRORS.append(msg) + +async def capture_mobile_nav(page): + """Mobile: open hamburger and capture open state.""" + try: + await page.goto(BASE + "/", wait_until="networkidle", timeout=30000) + await asyncio.sleep(1.0) + hamburger = page.locator("button[aria-label*='menu'], button.hamburger, .nav-toggle, [class*='hamburger']").first + await hamburger.click() + await asyncio.sleep(0.6) + fname = OUT / "home-mobile-nav-open.png" + await page.screenshot(path=str(fname), full_page=False) + print(f"OK {fname.name}") + except Exception as e: + msg = f"FAIL mobile-nav-open: {e}" + print(msg, file=sys.stderr) + ERRORS.append(msg) + +async def main(): + async with async_playwright() as p: + browser = await p.firefox.launch(headless=True) + + for vp_name, vp in VIEWPORTS: + ctx = await browser.new_context(viewport=vp) + page = await ctx.new_page() + + for slug, route in ROUTES: + await capture(page, BASE + route, slug, vp_name) + + if vp_name == "desktop": + await capture_dropdown(page, "services-nav") + + if vp_name == "mobile": + await capture_mobile_nav(page) + + await ctx.close() + + await browser.close() + + if ERRORS: + err_file = OUT / "errors.txt" + err_file.write_text("\n".join(ERRORS)) + print(f"\n{len(ERRORS)} error(s) -- see {err_file}") + print(f"\nDone. Screenshots in {OUT}") + +asyncio.run(main()) diff --git a/.planning/ref-patterns/sixsenses/catalog.md b/.planning/ref-patterns/sixsenses/catalog.md new file mode 100755 index 0000000..10fc40f --- /dev/null +++ b/.planning/ref-patterns/sixsenses/catalog.md @@ -0,0 +1,405 @@ +# Six Senses Section Pattern Catalog +# Extracted: 2026-06-01 via Playwright/Firefox headless +# Source pages: homepage, resorts index, spas index +# Screenshots: homepage.png, resorts.png, spas.png + +--- + +## PATTERN 01: full_bleed_video_hero + +PURPOSE: Opens the site with an autoplay full-viewport video overlaid by a single long-form philosophical headline, a secondary map CTA, and a discreet "play full video" link. + +STRUCTURE: +
+ +
+
+
+

+ +
+
+
+
+ +KEY STYLE: viewport height 820px, video fills frame with object-fit cover, caption text is white on dark video, h1 font-family serif 40-52px, caption block left-aligned within a ~670px column, no overlay color layer (video darkness provides contrast), padding-top 0, caption sits in lower-left quadrant. + +COPY PATTERN: Headline is 18-28 words, full sentence, philosophical. No eyebrow above h1. Secondary CTA in small caps uppercase, 4-5 words. Tertiary link "Play full video" at very small scale. + +WHEN TO USE on bigbreath.co: Homepage opener, breathing-philosophy introduction before any scroll. + +--- + +## PATTERN 02: featured_card_carousel + +PURPOSE: Showcases 5-7 individual properties or offerings in a horizontally scrollable carousel with country eyebrow, property name h3, 1-sentence description, and an all-caps short-phrase CTA per card. + +STRUCTURE: +
+

+ + +
+ +KEY STYLE: Container 1440px wide, carousel overflows at ~1670px so partial next card is visible. Card images tall-portrait (roughly 3:4 aspect ratio). Eyebrow uppercase spaced tracking 2-3px, 11px. h3 serif 22-26px. Body text 16px Avenir Next, color rgb(102,102,102). CTA all-caps small condensed with arrow right. Gap between cards ~20px. Bg transparent on off-white page background. + +COPY PATTERN: Eyebrow = country in capitals (4-8 chars). h3 = brand + location, 3-5 words. Body = 1-2 sentences, 15-25 words, poetic. CTA = metaphorical phrase in all-caps, 4-7 words (e.g. "STILL THE CITY, STIR YOUR SOUL"). + +WHEN TO USE on bigbreath.co: Retreat/session type showcase, or "featured experiences" block mid-page. + +--- + +## PATTERN 03: philosophy_text_carousel + +PURPOSE: A compact rotating carousel of 3-4 short philosophy statements, each with a one-sentence supporting line and an all-caps CTA, displayed side-by-side in 3-col grid at desktop width. + +STRUCTURE: + + +KEY STYLE: Container 1228px, 3 columns each ~409px wide, height 177px (very compact). No images. Background transparent. Font color rgb(0,0,0) for body, CTA in uppercase with underline or arrow. This sits inside a wider section (~630px tall) that pairs it with a large hero image carousel on the left. + +COPY PATTERN: Each slide is 1 sentence 15-22 words max. CTA is a category label in 2 words, all-caps. 3 slides rotating. No eyebrow. + +WHEN TO USE on bigbreath.co: Brand-values mid-page block, showing 3 breath/wellness pillars side by side. + +--- + +## PATTERN 04: image_carousel_with_text_panel + +PURPOSE: Large-format image carousel (left 60%) paired with a tabbed or rotating text panel (right 40%) allowing the user to flip through visual proof-points of values or services. + +STRUCTURE: +
+ +
+
Our values OUR VALUES
+
Pioneering wellness PIONEERING WELLNESS
+
Sustainability SUSTAINABILITY
+
+
+ +KEY STYLE: Carousel images fill ~950px wide at 684px tall. Text strip below at 1228px x 177px. No padding on image container. CTAs in small-caps with tracking. Background of text strip is off-white/cream matching page bg. + +COPY PATTERN: Image has no caption. Adjacent text strip holds 3 navigational labels (2 words each, all-caps) each with a 1-sentence teaser (15-20 words). User clicks label to switch image. + +WHEN TO USE on bigbreath.co: "How we work" or "Our approach" section showing 3 program pillars with photography proof. + +--- + +## PATTERN 05: editorial_split_tall_image + +PURPOSE: One-to-one editorial block: a tall portrait image on one side, a text column (eyebrow + h2/h3 + body + CTA) on the other. Used to give depth to a single resort, topic, or concept. + +STRUCTURE: +
+
+ +
+
+ +

+

+ +
+
+ +KEY STYLE: Total row height 684px. Image right-to-edge or flush. Text column has generous left padding ~60px. No border or box-shadow. Bg transparent. Alternates left/right across repeated instances on resorts index page. + +COPY PATTERN: Eyebrow uppercase country/category, 1-2 words. h3 serif 22-28px, 3-5 words. Body 25-35 words, poetic. CTA all-caps 4-6 words, metaphorical not functional. + +WHEN TO USE on bigbreath.co: Retreat program details, instructor bios, location features. + +--- + +## PATTERN 06: upcoming_card_grid + +PURPOSE: Grid of future openings or secondary offerings, 3-per-row, each with eyebrow location, h3 title, short description, and a "DISCOVER MORE" link. Country eyebrow differentiates the category of card. + +STRUCTURE: + + +KEY STYLE: 3 cards visible at 1440px, each ~487px wide. Card images landscape (roughly 16:9). Eyebrow uppercase tracking. h3 includes year annotation in parens. CTA is generic "DISCOVER MORE" -- functional not evocative. This is the one place on the site where functional CTAs appear. Background cream/off-white. + +COPY PATTERN: 20 cards total in the data set (all upcoming properties). Body is factual descriptive, 35-50 words. CTA is always "DISCOVER MORE" (2 words, all-caps). + +WHEN TO USE on bigbreath.co: "Coming soon" program announcements, waitlist teaser. + +--- + +## PATTERN 07: services_tab_strip + +PURPOSE: Horizontal strip of 5 category tabs (Offers, Gift Cards, Experiences, News, Meetings and Events) with matching card below, used to navigate between topic areas in a single compact module. + +STRUCTURE: +
+

+ +
+ +
+
+ +KEY STYLE: Section 1440px wide, 708px tall. Tabs in uppercase Avenir Next Condensed 11-13px, spaced with generous padding. Active tab underlined or with accent color. Content below uses editorial-split layout. 42 card items detected in DOM (all tabs pre-rendered). fadeInUp animation class on scroll entry. + +COPY PATTERN: Tab labels are category nouns (2-3 words). Inside each tab: eyebrow + short poetic h3 + 1-2 body sentences + all-caps evocative CTA. Section headline is conversational question format. + +WHEN TO USE on bigbreath.co: "What's at BigBreath" hub showing programs, gifts, retreats, events in one compact module. + +--- + +## PATTERN 08: resorts_index_list + +PURPOSE: Full directory listing of all properties, each row showing a flexslider image (landscape thumbnail), property name as h2/h3, location text, and a "BOOK NOW" CTA button. Filtered by destination and date via a form bar above. + +STRUCTURE: +
+
+

Hotels & Resorts

+ 27 Hotels & Resorts +
+
+ + + + + VIEW IN MAP +
+ +
+ +KEY STYLE: List items alternate full-width rows. Image slider ~487px wide at 305px tall (landscape). Text block beside it. Filter bar at top is 1122px wide with form fields inline. Count badge "27 Hotels & Resorts" is small text below h1. + +COPY PATTERN: h1 is category noun. Count text is "{n} Hotels & Resorts". Property rows have name + country only, no marketing copy. CTA is generic functional "BOOK NOW" or "DISCOVER." + +WHEN TO USE on bigbreath.co: Retreats or programs directory page. + +--- + +## PATTERN 09: spas_editorial_split_list + +PURPOSE: Stacked alternating editorial pairs -- left image (landscape/tall), right text block with property name h3, 1-2 sentences, and a "DISCOVER" button. Used on the spas index to feature 3-6 top properties. + +STRUCTURE: +
+
+

Six Senses Spas

+

+
+ +
+ +KEY STYLE: Page background white/cream. Intro text block max-width ~720px, centered. List items 1122px wide, image ~55% left, text 45% right. Button "DISCOVER" is pill-shaped, dark bg (brand purple/charcoal), white text, all-caps. 3 spas shown on initial load, "VIEW IN MAP" toggle at top right. + +COPY PATTERN: Intro block is 2 sentences, factual brand positioning. Each spa has a 2-sentence evocative descriptor, 20-30 words. Button is generic "DISCOVER." + +WHEN TO USE on bigbreath.co: Services or modalities page -- list of breath sessions/offerings with image and short description. + +--- + +## PATTERN 10: journey_nav_strip + +PURPOSE: A bottom-of-page wayfinding strip with 5-6 category links (Offers, Newsletter, Travel Trade, etc.) displayed as large text links in a horizontal band, inviting users to go deeper. + +STRUCTURE: +
+

+ +
+ +KEY STYLE: Full-width, cream background. Links are serif or condensed, large (24-32px), separated by subtle dividers. Minimal padding. Functions as a sitemap-flavored section, not a footer. + +COPY PATTERN: Headline is an invitation: "Journey through [brand]: [verb] and [verb]." Links are 1-2 word category nouns. + +WHEN TO USE on bigbreath.co: Bottom-of-homepage navigation block linking to retreats, newsletter, community, FAQs. + +--- + +## PATTERN 11: footer_column_grid + +PURPOSE: Standard footer with 4-5 columns: brand links column, contact info, social icons, and legal links. Logo centered or top-left. Minimal contrast -- same bg as page or dark. + +STRUCTURE: +
+ + + +
+ +KEY STYLE: Multi-column at desktop. Logo top-left, social icons right-aligned. Font Avenir Next 12-13px. Color rgb(102,102,102) on cream bg. No heavy borders. Legal links in very small text bottom row. + +COPY PATTERN: Column heads in uppercase 11px. Links are functional nouns. Contact block has full postal address. Social icons without labels. + +WHEN TO USE on bigbreath.co: Site footer, no changes needed to the pattern. + +--- + +## PATTERN 12: full_bleed_quote + +PURPOSE: A full-viewport-width section with a centered pull quote or brand statement in large serif type, no image, cream or very light background. Used as a palette-cleanser between feature sections. + +STRUCTURE: +
+
+
+ +
+
+
+ +KEY STYLE: Width 1440px. Background cream rgb(245,242,235) or near-white. Blockquote serif 36-48px, centered, max-width 860px, generous vertical padding 80-120px. No image, no CTA, no eyebrow. Text color near-black. Inferred from homepage's editorial philosophy sections; confirmed present on resort detail pages. + +COPY PATTERN: One sentence. No attribution shown. Verb in present tense. 15-25 words. No CTA. + +WHEN TO USE on bigbreath.co: Between hero and program cards, or before testimonials -- a breath of white space with a single defining statement. + +--- + +## PATTERN 13: newsletter_signup + +PURPOSE: A compact inline signup module at bottom of content with a one-line heading, single email input, and a submit button. Minimal design, no image. + +STRUCTURE: + + +KEY STYLE: Width 600-900px, centered. No background image. Form inline at desktop, stacked at mobile. Button styled same as primary CTA (dark pill). Privacy note in 11px below form. + +COPY PATTERN: h3 is 3-4 words imperative. Subtext is 1 sentence 10-15 words. Placeholder "Your email address." Button "SUBSCRIBE" or "JOIN." + +WHEN TO USE on bigbreath.co: Bottom of homepage and retreats pages, above footer. + +--- + +## PATTERN 14: full_page_cta + +PURPOSE: A near-full-viewport section with a background image (or dark color fill), centered h2, 1-2 body lines, and a primary CTA button. Used to drive a single conversion action. + +STRUCTURE: +
+
+
+

+

+ +
+
+ +KEY STYLE: Height 500-640px. Background image fills section, overlay rgba(0,0,0,0.35) to 0.45. Text white. h2 serif 36-48px centered. Button white outline or brand color fill. Generous padding top/bottom 80px. + +COPY PATTERN: Headline is a verb-led invitation, 3-6 words. Body is optional 1 sentence. CTA is functional 3-4 words in uppercase. + +WHEN TO USE on bigbreath.co: End of homepage, retreat detail pages, to drive booking or waitlist. + +--- + +# Typography System (observed) + +Primary serif: system-serif stack (no custom webfont loaded at this tier -- renders as Times/Georgia fallback for body headings) +Secondary sans: "Avenir Next", "Avenir Next Condensed", arial +Body size: 16px +Body color: rgb(102, 102, 102) -- medium gray, not black +Heading color: white on dark, near-black rgb(0,0,0) on light +Eyebrow style: uppercase, tracking 2-4px, 11-13px, Avenir Next Condensed +CTA style: all-caps, Avenir Next Condensed or regular, 12-14px, often with right-arrow glyph or underline + +# Color Palette (observed) + +Page background: off-white / cream (rgb ~245,242,235 inferred from screenshots) +Primary text: rgb(102,102,102) +Heading / accent text: rgb(0,0,0) or rgb(255,255,255) +Video hero bg: rgb(0,0,0) +CTA button fill: dark charcoal or brand purple (exact hex not extractable from computed styles) +No explicit brand_colors returned by computed style scan (colors applied via CSS classes not inline) + +# bigbreath.co Priority Adoption Notes (see TOP 5 in report) + +1. full_bleed_video_hero -- open with breath in motion +2. featured_card_carousel -- show retreat types / upcoming programs +3. editorial_split_tall_image -- feature each breathwork modality +4. philosophy_text_carousel -- display the 3 BigBreath pillars +5. full_page_cta -- drive retreat bookings above fold-break diff --git a/.planning/ref-patterns/sixsenses/extract.py b/.planning/ref-patterns/sixsenses/extract.py new file mode 100755 index 0000000..8634561 --- /dev/null +++ b/.planning/ref-patterns/sixsenses/extract.py @@ -0,0 +1,241 @@ +#!/usr/bin/env python3 +"""Six Senses site structure extractor for bigbreath.co design reference.""" +import json, re, time +from pathlib import Path +from playwright.sync_api import sync_playwright + +OUT = Path("/home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/ref-patterns/sixsenses") +OUT.mkdir(parents=True, exist_ok=True) + +UA = "Mozilla/5.0 (X11; Linux x86_64; rv:124.0) Gecko/20100101 Firefox/124.0" + +PAGES = [ + ("homepage", "https://www.sixsenses.com/en/"), + ("resorts", "https://www.sixsenses.com/en/resorts"), + ("wellness", "https://www.sixsenses.com/en/wellness"), +] + +COOKIE_SELECTORS = [ + "button:has-text('Accept All')", + "button:has-text('Accept')", + "[id*='onetrust-accept']", + ".cookie-accept", + "[class*='accept-all']", + "[aria-label*='Accept']", + "button:has-text('I Accept')", + "button:has-text('Agree')", +] + +def dismiss_cookies(page): + for sel in COOKIE_SELECTORS: + try: + btn = page.locator(sel).first + if btn.is_visible(timeout=2000): + btn.click() + page.wait_for_timeout(800) + return True + except Exception: + pass + return False + +def get_computed(page, selector, prop): + try: + return page.eval_on_selector(selector, f"el => getComputedStyle(el).{prop}") + except Exception: + return "" + +def extract_sections(page): + sections = [] + # grab top-level structural elements + handles = page.query_selector_all("main > *, article > *, [role='main'] > *, body > section, body > div > section, body > div > article") + if not handles: + handles = page.query_selector_all("section, article, [class*='section'], [class*='block'], [class*='hero'], [class*='module']") + + seen = set() + for h in handles[:40]: + try: + tag = h.evaluate("el => el.tagName.toLowerCase()") + cls = h.evaluate("el => el.className") or "" + role = h.get_attribute("role") or "" + bb = h.bounding_box() + if not bb or bb["height"] < 40: + continue + uid = f"{tag}|{cls[:60]}" + if uid in seen: + continue + seen.add(uid) + + bg = h.evaluate("el => getComputedStyle(el).backgroundColor") + pt = h.evaluate("el => getComputedStyle(el).paddingTop") + pb = h.evaluate("el => getComputedStyle(el).paddingBottom") + txt = (h.inner_text() or "")[:400].replace("\n", " ").strip() + + # card/grid detection + cards = h.query_selector_all("[class*='card'], [class*='item'], [class*='tile'], article, li[class]") + card_count = len(cards) + + # video detection + has_video = bool(h.query_selector("video, [class*='video'], iframe[src*='vimeo'], iframe[src*='youtube']")) + + # image detection + imgs = h.query_selector_all("img, [class*='image'], picture") + has_img = len(imgs) > 0 + + # guess section type + sec_type = "unknown" + cls_lower = cls.lower() + txt_lower = txt.lower() + w = bb["width"] + h_px = bb["height"] + + if any(x in cls_lower for x in ["hero", "banner", "masthead", "jumbotron"]): + sec_type = "hero" + elif has_video and h_px > 400: + sec_type = "hero_video" if card_count == 0 else "video_block" + elif card_count >= 3: + sec_type = "card_grid" + elif any(x in cls_lower for x in ["quote", "testimonial", "pull"]): + sec_type = "quote" + elif any(x in cls_lower for x in ["footer", "foot"]) or tag == "footer": + sec_type = "footer" + elif any(x in cls_lower for x in ["nav", "header", "menu"]) or tag in ("header", "nav"): + sec_type = "nav" + elif any(x in cls_lower for x in ["split", "editorial", "feature"]): + sec_type = "editorial_split" + elif any(x in cls_lower for x in ["newsletter", "subscribe", "signup"]): + sec_type = "newsletter" + elif any(x in cls_lower for x in ["journal", "blog", "news", "article"]): + sec_type = "journal_teaser" + elif any(x in cls_lower for x in ["map", "location", "destination"]): + sec_type = "location_map" + elif any(x in cls_lower for x in ["carousel", "slider", "swiper"]): + sec_type = "carousel" + elif any(x in cls_lower for x in ["list", "index", "directory"]): + sec_type = "named_list" + elif any(x in cls_lower for x in ["wellness", "spa", "service"]): + sec_type = "wellness_strip" + elif has_img and len(txt) < 200 and h_px > 400: + sec_type = "editorial_split" + elif len(txt) > 300 and not has_img: + sec_type = "philosophy_block" + elif h_px > 500 and has_img: + sec_type = "full_bleed_image" + + sections.append({ + "tag": tag, + "class": cls[:120], + "role": role, + "type": sec_type, + "bg": bg, + "padding_top": pt, + "padding_bottom": pb, + "width_px": round(bb["width"]), + "height_px": round(bb["height"]), + "card_count": card_count, + "has_video": has_video, + "has_image": has_img, + "text_snippet": txt[:300], + }) + except Exception: + pass + return sections + +def run(): + structure = {} + screenshots = [] + + with sync_playwright() as p: + browser = p.firefox.launch(headless=True, args=["--no-sandbox"]) + ctx = browser.new_context( + viewport={"width": 1440, "height": 900}, + user_agent=UA, + ) + ctx.set_extra_http_headers({ + "Accept-Language": "en-US,en;q=0.9", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + }) + + for slug, url in PAGES: + print(f" Loading {slug}: {url}") + page = ctx.new_page() + try: + resp = page.goto(url, wait_until="domcontentloaded", timeout=60000) + page.wait_for_timeout(3000) + dismiss_cookies(page) + page.wait_for_timeout(1500) + + # try networkidle with short timeout, fallback to load + try: + page.wait_for_load_state("networkidle", timeout=15000) + except Exception: + pass + + page.wait_for_timeout(2000) + + # screenshot + shot_path = OUT / f"{slug}.png" + page.screenshot(path=str(shot_path), full_page=True, timeout=30000) + screenshots.append(str(shot_path)) + print(f" Screenshot: {shot_path}") + + # if resorts page, try to follow first resort link + if slug == "resorts": + resort_links = page.query_selector_all("a[href*='/resorts/']") + if resort_links: + first_href = resort_links[0].get_attribute("href") + if first_href and first_href != "/en/resorts": + full_url = first_href if first_href.startswith("http") else f"https://www.sixsenses.com{first_href}" + print(f" Following resort link: {full_url}") + page2 = ctx.new_page() + try: + page2.goto(full_url, wait_until="domcontentloaded", timeout=60000) + page2.wait_for_timeout(3000) + dismiss_cookies(page2) + page2.wait_for_timeout(1500) + try: + page2.wait_for_load_state("networkidle", timeout=15000) + except Exception: + pass + page2.wait_for_timeout(2000) + shot2 = OUT / "resort_detail.png" + page2.screenshot(path=str(shot2), full_page=True, timeout=30000) + screenshots.append(str(shot2)) + secs2 = extract_sections(page2) + structure["resort_detail"] = { + "url": full_url, + "status": page2.url, + "sections": secs2, + } + print(f" Resort detail: {len(secs2)} sections") + except Exception as e: + structure["resort_detail"] = {"url": full_url, "error": str(e)} + finally: + page2.close() + + sections = extract_sections(page) + structure[slug] = { + "url": url, + "final_url": page.url, + "http_status": resp.status if resp else None, + "sections": sections, + } + print(f" Sections found: {len(sections)}") + + except Exception as e: + structure[slug] = {"url": url, "error": str(e)} + print(f" ERROR: {e}") + finally: + page.close() + + browser.close() + + # save structure + out_json = OUT / "structure.json" + out_json.write_text(json.dumps(structure, indent=2)) + print(f"\nstructure.json written: {out_json.stat().st_size} bytes") + print(f"Screenshots: {len(screenshots)}") + return structure, screenshots + +if __name__ == "__main__": + s, shots = run() + print(f"\nDone. Pages: {list(s.keys())}") diff --git a/.planning/ref-patterns/sixsenses/extract2.py b/.planning/ref-patterns/sixsenses/extract2.py new file mode 100755 index 0000000..bba2288 --- /dev/null +++ b/.planning/ref-patterns/sixsenses/extract2.py @@ -0,0 +1,253 @@ +#!/usr/bin/env python3 +"""Six Senses deep DOM extractor -- SPA-aware, Firefox headless.""" +import json, time +from pathlib import Path +from playwright.sync_api import sync_playwright + +OUT = Path("/home/sirdrez/arisingmedia-websites/bigbreath.co/.planning/ref-patterns/sixsenses") +OUT.mkdir(parents=True, exist_ok=True) + +UA = "Mozilla/5.0 (X11; Linux x86_64; rv:124.0) Gecko/20100101 Firefox/124.0" + +PAGES = [ + ("homepage", "https://www.sixsenses.com/en/"), + ("resorts", "https://www.sixsenses.com/en/resorts"), + ("wellness", "https://www.sixsenses.com/en/wellness"), +] + +COOKIE_SELECTORS = [ + "button:has-text('Accept All')", + "button:has-text('Accept')", + "[id*='onetrust-accept']", + "button:has-text('I Accept')", + "button:has-text('Agree')", + "[class*='accept']", + "[class*='consent'] button", +] + +EXTRACT_JS = """ +() => { + const results = []; + // Cast widest possible net for structural containers + const candidates = document.querySelectorAll( + 'section, article, main, [class*="section"], [class*="block"], [class*="hero"], ' + + '[class*="module"], [class*="container"], [class*="panel"], [class*="row"], ' + + '[class*="strip"], [class*="band"], [class*="segment"], [class*="wrapper"], ' + + '[class*="carousel"], [class*="slider"], [class*="grid"], [class*="layout"]' + ); + + const seen = new Set(); + const minH = 80; + + for (const el of candidates) { + const rect = el.getBoundingClientRect(); + const scrollH = el.scrollHeight; + const h = Math.max(rect.height, scrollH); + if (h < minH) continue; + // skip tiny or hidden + if (rect.width < 200) continue; + + const cls = (el.className || '').toString().slice(0, 150); + const tag = el.tagName.toLowerCase(); + const key = tag + '|' + cls.slice(0, 60); + if (seen.has(key)) continue; + seen.add(key); + + const st = getComputedStyle(el); + const bg = st.backgroundColor; + const pt = st.paddingTop; + const pb = st.paddingBottom; + const color = st.color; + const fontSize = st.fontSize; + + const txt = (el.innerText || '').slice(0, 500).replace(/\\n/g, ' ').trim(); + const cardCount = el.querySelectorAll('[class*="card"],[class*="item"],[class*="tile"],article,li[class]').length; + const hasVideo = !!el.querySelector('video,[class*="video"],iframe[src*="vimeo"],iframe[src*="youtube"]'); + const imgCount = el.querySelectorAll('img,picture,[class*="image"]').length; + const hasBtn = !!el.querySelector('a[class*="btn"],button,[class*="cta"],[class*="button"]'); + + // eyebrow / labels + const eyebrows = []; + for (const small of el.querySelectorAll('[class*="eyebrow"],[class*="label"],[class*="tag"],[class*="category"],[class*="kicker"],small')) { + const t = (small.innerText || '').trim(); + if (t && t.length < 60) eyebrows.push(t); + } + + // headings + const headings = []; + for (const hx of el.querySelectorAll('h1,h2,h3')) { + const t = (hx.innerText || '').trim(); + if (t && t.length < 120) headings.push({tag: hx.tagName.toLowerCase(), text: t}); + if (headings.length >= 3) break; + } + + // CTA text + const ctas = []; + for (const a of el.querySelectorAll('a[class*="btn"],a[class*="cta"],a[class*="button"],button')) { + const t = (a.innerText || '').trim(); + if (t && t.length < 60) ctas.push(t); + if (ctas.length >= 3) break; + } + + results.push({ + tag, cls, bg, pt, pb, color, fontSize, + width_px: Math.round(rect.width || document.body.scrollWidth), + height_px: Math.round(h), + card_count: cardCount, + has_video: hasVideo, + img_count: imgCount, + has_btn: hasBtn, + eyebrows, + headings, + ctas, + text_snippet: txt.slice(0, 300), + }); + + if (results.length >= 60) break; + } + return results; +} +""" + +PAGE_META_JS = """ +() => { + const title = document.title; + const fonts = [...new Set([...document.querySelectorAll('*')].slice(0,200).map(el => getComputedStyle(el).fontFamily))].slice(0,6); + const colors = [...new Set([...document.querySelectorAll('a,button,[class*="btn"],[class*="cta"]')].slice(0,20).map(el => getComputedStyle(el).backgroundColor))].filter(c => c && c !== 'rgba(0, 0, 0, 0)').slice(0,5); + return {title, fonts, brand_colors: colors}; +} +""" + +def dismiss_cookies(page): + for sel in COOKIE_SELECTORS: + try: + btn = page.locator(sel).first + if btn.is_visible(timeout=2000): + btn.click() + page.wait_for_timeout(1000) + return + except Exception: + pass + +def scroll_page(page): + # scroll down to trigger lazy loads + page.evaluate("window.scrollTo(0, document.body.scrollHeight / 3)") + page.wait_for_timeout(800) + page.evaluate("window.scrollTo(0, document.body.scrollHeight * 2 / 3)") + page.wait_for_timeout(800) + page.evaluate("window.scrollTo(0, document.body.scrollHeight)") + page.wait_for_timeout(1000) + page.evaluate("window.scrollTo(0, 0)") + page.wait_for_timeout(500) + +def load_page(ctx, url): + page = ctx.new_page() + resp = None + try: + resp = page.goto(url, wait_until="domcontentloaded", timeout=60000) + page.wait_for_timeout(4000) + dismiss_cookies(page) + page.wait_for_timeout(1500) + try: + page.wait_for_load_state("networkidle", timeout=20000) + except Exception: + pass + page.wait_for_timeout(2000) + scroll_page(page) + page.wait_for_timeout(1500) + except Exception as e: + return page, resp, str(e) + return page, resp, None + +def run(): + structure = {} + screenshots = [] + + with sync_playwright() as p: + browser = p.firefox.launch(headless=True) + ctx = browser.new_context( + viewport={"width": 1440, "height": 900}, + user_agent=UA, + ) + ctx.set_extra_http_headers({"Accept-Language": "en-US,en;q=0.9"}) + + for slug, url in PAGES: + print(f"\n[{slug}] {url}") + page, resp, err = load_page(ctx, url) + + shot = OUT / f"{slug}.png" + try: + page.screenshot(path=str(shot), full_page=True, timeout=40000) + screenshots.append(str(shot)) + sz = shot.stat().st_size + print(f" screenshot: {sz:,} bytes") + except Exception as e: + print(f" screenshot failed: {e}") + + sections = [] + meta = {} + if not err: + try: + sections = page.evaluate(EXTRACT_JS) + meta = page.evaluate(PAGE_META_JS) + print(f" sections: {len(sections)}") + except Exception as e: + print(f" extract error: {e}") + + # resort detail follow + if slug == "resorts" and not err: + links = page.query_selector_all("a[href*='/resorts/']") + resort_url = None + for lnk in links: + href = lnk.get_attribute("href") or "" + if "/resorts/" in href and href != "/en/resorts" and "/resorts" != href.rstrip("/"): + resort_url = href if href.startswith("http") else f"https://www.sixsenses.com{href}" + break + if resort_url: + print(f" following resort: {resort_url}") + rpage, rresp, rerr = load_page(ctx, resort_url) + rshot = OUT / "resort_detail.png" + try: + rpage.screenshot(path=str(rshot), full_page=True, timeout=40000) + screenshots.append(str(rshot)) + print(f" resort screenshot: {rshot.stat().st_size:,} bytes") + except Exception as e: + print(f" resort screenshot failed: {e}") + rsecs = [] + rmeta = {} + if not rerr: + try: + rsecs = rpage.evaluate(EXTRACT_JS) + rmeta = rpage.evaluate(PAGE_META_JS) + print(f" resort sections: {len(rsecs)}") + except Exception as e: + print(f" resort extract error: {e}") + structure["resort_detail"] = { + "url": resort_url, "meta": rmeta, + "section_count": len(rsecs), "sections": rsecs, + "error": rerr, + } + rpage.close() + + structure[slug] = { + "url": url, "final_url": page.url, + "http_status": resp.status if resp else None, + "meta": meta, + "section_count": len(sections), + "sections": sections, + "error": err, + } + page.close() + + browser.close() + + out_json = OUT / "structure.json" + out_json.write_text(json.dumps(structure, indent=2)) + print(f"\nstructure.json: {out_json.stat().st_size:,} bytes") + print(f"Screenshots: {len(screenshots)}") + return structure, screenshots + +if __name__ == "__main__": + s, shots = run() + total_secs = sum(v.get("section_count", 0) for v in s.values()) + print(f"Total sections across all pages: {total_secs}") diff --git a/.planning/ref-patterns/sixsenses/homepage.png b/.planning/ref-patterns/sixsenses/homepage.png new file mode 100755 index 0000000..08ef004 Binary files /dev/null and b/.planning/ref-patterns/sixsenses/homepage.png differ diff --git a/.planning/ref-patterns/sixsenses/resorts.png b/.planning/ref-patterns/sixsenses/resorts.png new file mode 100755 index 0000000..b44f588 Binary files /dev/null and b/.planning/ref-patterns/sixsenses/resorts.png differ diff --git a/.planning/ref-patterns/sixsenses/spas.png b/.planning/ref-patterns/sixsenses/spas.png new file mode 100755 index 0000000..0a9072c Binary files /dev/null and b/.planning/ref-patterns/sixsenses/spas.png differ diff --git a/.planning/ref-patterns/sixsenses/structure.json b/.planning/ref-patterns/sixsenses/structure.json new file mode 100755 index 0000000..e7f860c --- /dev/null +++ b/.planning/ref-patterns/sixsenses/structure.json @@ -0,0 +1,713 @@ +{ + "homepage": { + "url": "https://www.sixsenses.com/en/", + "final_url": "https://www.sixsenses.com/en/", + "http_status": 200, + "meta": { + "title": "Luxury Resorts, Five Star Hotels & Wellness Spas | Six Senses", + "fonts": [ + "serif", + "\"Avenir Next\"", + "arial", + "\"Avenir Next Condensed\"" + ], + "brand_colors": [] + }, + "section_count": 18, + "sections": [ + { + "tag": "div", + "cls": "video-js video-hero-dimensions vjs-controls-disabled vjs-workinghover vjs-v7 vjs-playing vjs-has-started vjs-user-inactive", + "bg": "rgb(0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(255, 255, 255)", + "fontSize": "10px", + "width_px": 1440, + "height_px": 820, + "card_count": 7, + "has_video": true, + "img_count": 0, + "has_btn": true, + "eyebrows": [ + "Color", + "Transparency", + "Color", + "Transparency", + "Color", + "Transparency" + ], + "headings": [], + "ctas": [ + "Play Video", + "Pause", + "Unmute" + ], + "text_snippet": "" + }, + { + "tag": "div", + "cls": "hero-caption ", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 1440, + "height_px": 720, + "card_count": 0, + "has_video": true, + "img_count": 0, + "has_btn": false, + "eyebrows": [], + "headings": [ + { + "tag": "h1", + "text": "Some places you visit. Others, you feel, by reconnecting with yourself, others, and the world around you." + } + ], + "ctas": [], + "text_snippet": "Some places you visit. Others, you feel, by reconnecting with yourself, others, and the world around you. VIEW PROPERTIES ON MAP Play full video" + }, + { + "tag": "div", + "cls": "hero-caption__content", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(255, 255, 255)", + "fontSize": "16px", + "width_px": 1340, + "height_px": 323, + "card_count": 0, + "has_video": true, + "img_count": 0, + "has_btn": false, + "eyebrows": [], + "headings": [ + { + "tag": "h1", + "text": "Some places you visit. Others, you feel, by reconnecting with yourself, others, and the world around you." + } + ], + "ctas": [], + "text_snippet": "Some places you visit. Others, you feel, by reconnecting with yourself, others, and the world around you. VIEW PROPERTIES ON MAP Play full video" + }, + { + "tag": "div", + "cls": "hero-caption__text", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(255, 255, 255)", + "fontSize": "16px", + "width_px": 670, + "height_px": 323, + "card_count": 0, + "has_video": false, + "img_count": 0, + "has_btn": false, + "eyebrows": [], + "headings": [ + { + "tag": "h1", + "text": "Some places you visit. Others, you feel, by reconnecting with yourself, others, and the world around you." + } + ], + "ctas": [], + "text_snippet": "Some places you visit. Others, you feel, by reconnecting with yourself, others, and the world around you. VIEW PROPERTIES ON MAP" + }, + { + "tag": "div", + "cls": "container", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 1440, + "height_px": 841, + "card_count": 7, + "has_video": false, + "img_count": 10, + "has_btn": true, + "eyebrows": [ + "UNITED KINGDOM", + "JAPAN", + "TURKEY", + "SPAIN", + "INDIA" + ], + "headings": [ + { + "tag": "h2", + "text": "In the spotlight: featured properties" + }, + { + "tag": "h3", + "text": "Six Senses London" + }, + { + "tag": "h3", + "text": "Six Senses Kyoto" + } + ], + "ctas": [ + "WHERE NEXT: VIEW ALL HOTELS AND RESORTS", + "STILL THE CITY, STIR YOUR SOUL", + "STEP INTO KYOTO'S ZEN BEAUTY" + ], + "text_snippet": "In the spotlight: featured properties WHERE NEXT: VIEW ALL HOTELS AND RESORTS UNITED KINGDOM Six Senses London A different rhythm for London. Courtyard calm, sensory rituals, and the first Six Senses Place, coming to The Whiteley in Bayswater. STILL THE CITY, STIR YOUR SOUL JAPAN Six Sense" + }, + { + "tag": "div", + "cls": "row", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 1440, + "height_px": 841, + "card_count": 7, + "has_video": false, + "img_count": 10, + "has_btn": true, + "eyebrows": [ + "UNITED KINGDOM", + "JAPAN", + "TURKEY", + "SPAIN", + "INDIA" + ], + "headings": [ + { + "tag": "h2", + "text": "In the spotlight: featured properties" + }, + { + "tag": "h3", + "text": "Six Senses London" + }, + { + "tag": "h3", + "text": "Six Senses Kyoto" + } + ], + "ctas": [ + "WHERE NEXT: VIEW ALL HOTELS AND RESORTS", + "STILL THE CITY, STIR YOUR SOUL", + "STEP INTO KYOTO'S ZEN BEAUTY" + ], + "text_snippet": "In the spotlight: featured properties WHERE NEXT: VIEW ALL HOTELS AND RESORTS UNITED KINGDOM Six Senses London A different rhythm for London. Courtyard calm, sensory rituals, and the first Six Senses Place, coming to The Whiteley in Bayswater. STILL THE CITY, STIR YOUR SOUL JAPAN Six Sense" + }, + { + "tag": "div", + "cls": "carousel center", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 1670, + "height_px": 684, + "card_count": 7, + "has_video": false, + "img_count": 10, + "has_btn": true, + "eyebrows": [ + "UNITED KINGDOM", + "JAPAN", + "TURKEY", + "SPAIN", + "INDIA" + ], + "headings": [ + { + "tag": "h3", + "text": "Six Senses London" + }, + { + "tag": "h3", + "text": "Six Senses Kyoto" + }, + { + "tag": "h3", + "text": "Six Senses Kaplankaya" + } + ], + "ctas": [ + "STILL THE CITY, STIR YOUR SOUL", + "STEP INTO KYOTO'S ZEN BEAUTY", + "REDISCOVER YOUR AEGEAN WELL-BEING" + ], + "text_snippet": "UNITED KINGDOM Six Senses London A different rhythm for London. Courtyard calm, sensory rituals, and the first Six Senses Place, coming to The Whiteley in Bayswater. STILL THE CITY, STIR YOUR SOUL JAPAN Six Senses Kyoto Tranquil gardens, a feel-good spa, and an easy walk from the Myoho-in T" + }, + { + "tag": "div", + "cls": "flexslider refresh-25", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 950, + "height_px": 684, + "card_count": 7, + "has_video": false, + "img_count": 10, + "has_btn": true, + "eyebrows": [ + "UNITED KINGDOM", + "JAPAN", + "TURKEY", + "SPAIN", + "INDIA" + ], + "headings": [ + { + "tag": "h3", + "text": "Six Senses London" + }, + { + "tag": "h3", + "text": "Six Senses Kyoto" + }, + { + "tag": "h3", + "text": "Six Senses Kaplankaya" + } + ], + "ctas": [ + "STILL THE CITY, STIR YOUR SOUL", + "STEP INTO KYOTO'S ZEN BEAUTY", + "REDISCOVER YOUR AEGEAN WELL-BEING" + ], + "text_snippet": "UNITED KINGDOM Six Senses London A different rhythm for London. Courtyard calm, sensory rituals, and the first Six Senses Place, coming to The Whiteley in Bayswater. STILL THE CITY, STIR YOUR SOUL JAPAN Six Senses Kyoto Tranquil gardens, a feel-good spa, and an easy walk from the Myoho-in T" + }, + { + "tag": "div", + "cls": "carousel carousel-hero", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 1440, + "height_px": 630, + "card_count": 5, + "has_video": false, + "img_count": 6, + "has_btn": true, + "eyebrows": [], + "headings": [], + "ctas": [ + "Our values", + "Pioneering wellness", + "Sustainability" + ], + "text_snippet": "Previous image Next image" + }, + { + "tag": "div", + "cls": "row row-2 ", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 1228, + "height_px": 177, + "card_count": 3, + "has_video": false, + "img_count": 0, + "has_btn": true, + "eyebrows": [], + "headings": [], + "ctas": [ + "OUR VALUES", + "PIONEERING WELLNESS", + "SUSTAINABILITY" + ], + "text_snippet": "Care, culture, and community: how we live up to the promise of our name. OUR VALUES From ancient healing to the latest science, we help you navigate to what works best for you. PIONEERING WELLNESS A purposeful, regenerative vision to create a lasting impact on people, nature, hosts, and gu" + }, + { + "tag": "div", + "cls": "carousel carousel-text", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(0, 0, 0)", + "fontSize": "16px", + "width_px": 1228, + "height_px": 177, + "card_count": 3, + "has_video": false, + "img_count": 0, + "has_btn": true, + "eyebrows": [], + "headings": [], + "ctas": [ + "OUR VALUES", + "PIONEERING WELLNESS", + "SUSTAINABILITY" + ], + "text_snippet": "Care, culture, and community: how we live up to the promise of our name. OUR VALUES From ancient healing to the latest science, we help you navigate to what works best for you. PIONEERING WELLNESS A purposeful, regenerative vision to create a lasting impact on people, nature, hosts, and gu" + }, + { + "tag": "div", + "cls": "flexslider", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(0, 0, 0)", + "fontSize": "16px", + "width_px": 1228, + "height_px": 177, + "card_count": 3, + "has_video": false, + "img_count": 0, + "has_btn": true, + "eyebrows": [], + "headings": [], + "ctas": [ + "OUR VALUES", + "PIONEERING WELLNESS", + "SUSTAINABILITY" + ], + "text_snippet": "Care, culture, and community: how we live up to the promise of our name. OUR VALUES From ancient healing to the latest science, we help you navigate to what works best for you. PIONEERING WELLNESS A purposeful, regenerative vision to create a lasting impact on people, nature, hosts, and gu" + }, + { + "tag": "li", + "cls": "carousel-text__slide slide slide-0 flex-active-slide", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(0, 0, 0)", + "fontSize": "16px", + "width_px": 409, + "height_px": 152, + "card_count": 0, + "has_video": false, + "img_count": 0, + "has_btn": true, + "eyebrows": [], + "headings": [], + "ctas": [ + "OUR VALUES" + ], + "text_snippet": "Care, culture, and community: how we live up to the promise of our name. OUR VALUES" + }, + { + "tag": "div", + "cls": "carousel-text__content", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(0, 0, 0)", + "fontSize": "16px", + "width_px": 409, + "height_px": 120, + "card_count": 0, + "has_video": false, + "img_count": 0, + "has_btn": true, + "eyebrows": [], + "headings": [], + "ctas": [ + "OUR VALUES" + ], + "text_snippet": "Care, culture, and community: how we live up to the promise of our name. OUR VALUES" + }, + { + "tag": "li", + "cls": "carousel-text__slide slide slide-1", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(0, 0, 0)", + "fontSize": "16px", + "width_px": 409, + "height_px": 177, + "card_count": 0, + "has_video": false, + "img_count": 0, + "has_btn": true, + "eyebrows": [], + "headings": [], + "ctas": [ + "PIONEERING WELLNESS" + ], + "text_snippet": "From ancient healing to the latest science, we help you navigate to what works best for you. PIONEERING WELLNESS" + }, + { + "tag": "li", + "cls": "carousel-text__slide slide slide-2", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(0, 0, 0)", + "fontSize": "16px", + "width_px": 409, + "height_px": 177, + "card_count": 0, + "has_video": false, + "img_count": 0, + "has_btn": true, + "eyebrows": [], + "headings": [], + "ctas": [ + "SUSTAINABILITY" + ], + "text_snippet": "A purposeful, regenerative vision to create a lasting impact on people, nature, hosts, and guests. SUSTAINABILITY" + }, + { + "tag": "div", + "cls": "carousel", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 1670, + "height_px": 638, + "card_count": 20, + "has_video": false, + "img_count": 18, + "has_btn": true, + "eyebrows": [ + "SAUDI ARABIA", + "UNITED ARAB EMIRATES", + "ITALY", + "ISRAEL", + "SPAIN", + "GREECE", + "MEXICO", + "FRANCE", + "SAUDI ARABIA" + ], + "headings": [ + { + "tag": "h3", + "text": "Six Senses AMAALA (2026)" + }, + { + "tag": "h3", + "text": "Six Senses The Palm, Dubai (2026)" + }, + { + "tag": "h3", + "text": "Six Senses Milan (2027)" + } + ], + "ctas": [ + "DISCOVER MORE", + "DISCOVER MORE", + "DISCOVER MORE" + ], + "text_snippet": "SAUDI ARABIA Six Senses AMAALA (2026) Offering 64 rooms, six suites, 30 villas, and 25 branded residences, Six Senses AMAALA is in a region blessed for its dramatic coastal scenery. It will be part of a holistic hub for the arts, a leading diving destination, an extension of the Mediterranean yach" + }, + { + "tag": "section", + "cls": "box box52 fadeInUp", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 1440, + "height_px": 708, + "card_count": 42, + "has_video": false, + "img_count": 10, + "has_btn": true, + "eyebrows": [ + "OFFERS", + "GIFT CARDS", + "EXPERIENCES", + "NEWS", + "MEETINGS & EVENTS" + ], + "headings": [ + { + "tag": "h2", + "text": "What's on at Six Senses?" + } + ], + "ctas": [ + "OPEN THE DOORS TO SAVINGS", + "WHO WILL YOU TREAT?", + "INSPIRING \"PINCH ME\" MOMENTS" + ], + "text_snippet": "What's on at Six Senses? OFFERS Spaces to reconnect Plan your next escape in an extraordinary villa or suite designed for space and seclusion with dedicated services and amenities on tap. OPEN THE DOORS TO SAVINGS GIFT CARDS A gift for the senses For stays, dining, and spa-aah, a thoughtful wa" + } + ], + "error": null + }, + "resorts": { + "url": "https://www.sixsenses.com/en/resorts", + "final_url": "https://www.sixsenses.com/en/hotels-resorts/", + "http_status": 200, + "meta": { + "title": "Luxury Lifestyle Resort & Hotel Locations | Six Senses", + "fonts": [ + "serif", + "\"Avenir Next\"", + "arial", + "\"Avenir Next Condensed\"" + ], + "brand_colors": [] + }, + "section_count": 3, + "sections": [ + { + "tag": "div", + "cls": "properties-list-title-wrapper", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 1122, + "height_px": 113, + "card_count": 0, + "has_video": false, + "img_count": 0, + "has_btn": false, + "eyebrows": [], + "headings": [ + { + "tag": "h1", + "text": "Hotels & Resorts" + } + ], + "ctas": [], + "text_snippet": "Hotels & Resorts 27 Hotels & Resorts" + }, + { + "tag": "div", + "cls": "filters-wrapper", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 1122, + "height_px": 135, + "card_count": 0, + "has_video": false, + "img_count": 0, + "has_btn": true, + "eyebrows": [ + "0 - 11 years", + "0 - 11 years", + "EUR" + ], + "headings": [], + "ctas": [ + "SEARCH" + ], + "text_snippet": "Select a destination or hotel Check-in Check-out 2 Adults, 0 Children Special codes SEARCH EUR Info VIEW IN MAP" + }, + { + "tag": "div", + "cls": "flexslider", + "bg": "rgba(0, 0, 0, 0)", + "pt": "0px", + "pb": "0px", + "color": "rgb(102, 102, 102)", + "fontSize": "16px", + "width_px": 487, + "height_px": 305, + "card_count": 1, + "has_video": false, + "img_count": 2, + "has_btn": false, + "eyebrows": [], + "headings": [], + "ctas": [], + "text_snippet": "" + } + ], + "error": null + }, + "wellness": { + "url": "https://www.sixsenses.com/en/wellness", + "final_url": "https://www.sixsenses.com/en/wellness", + "http_status": 404, + "meta": { + "title": "404 - Page not found", + "fonts": [ + "serif", + "\"Avenir Next\"", + "arial", + "\"Avenir Next Condensed\"" + ], + "brand_colors": [] + }, + "section_count": 0, + "sections": [], + "error": null + }, + "spas": { + "url": "https://www.sixsenses.com/en/spas", + "sections": [ + { + "tag": "div", + "cls": "flexslider", + "width_px": 487, + "height_px": 305, + "img_count": 2, + "card_count": 0, + "has_video": false, + "headings": [], + "eyebrows": [], + "ctas": [], + "text_snippet": "" + } + ] + }, + "resort_fiji": { + "url": "https://www.sixsenses.com/en/hotels-resorts/asia-the-pacific/fiji/fiji/accommodation/", + "sections": [ + { + "tag": "div", + "cls": "filters-wrapper", + "width_px": 1122, + "height_px": 230, + "img_count": 1, + "card_count": 0, + "has_video": false, + "headings": [ + { + "tag": "h3", + "text": "Check availability & book direct" + } + ], + "eyebrows": [ + "FILTER", + "Features", + "SORT BY", + "EUR" + ], + "ctas": [ + "Show" + ], + "text_snippet": "Check availability & book direct Check-in Check-out 2 Adults, 0 Children Special codes SEARCH FILTER SORT BY EUR Info" + }, + { + "tag": "div", + "cls": "tab-panels", + "width_px": 424, + "height_px": 102, + "img_count": 0, + "card_count": 0, + "has_video": false, + "headings": [], + "eyebrows": [], + "ctas": [], + "text_snippet": "Flanked on all sides by lush gardens, enjoy extra living and sleeping space plus outstanding views of the South Pacific and surrounding islands from the large outdoor deck." + } + ] + } +} \ No newline at end of file diff --git a/.planning/ref-patterns/sixsenses/wellness.png b/.planning/ref-patterns/sixsenses/wellness.png new file mode 100755 index 0000000..71e2797 Binary files /dev/null and b/.planning/ref-patterns/sixsenses/wellness.png differ diff --git a/.planning/ref-styles/aman.json b/.planning/ref-styles/aman.json new file mode 100755 index 0000000..6316757 --- /dev/null +++ b/.planning/ref-styles/aman.json @@ -0,0 +1,100 @@ +{ + "body": { + "fontFamily": "Lyon Display Web, Times New Roman, serif", + "fontSize": "14px", + "fontWeight": "400", + "lineHeight": "20.3px", + "letterSpacing": "0.8px", + "textTransform": "none", + "color": "rgb(49, 49, 49)", + "backgroundColor": "rgb(243, 238, 231)", + "paddingTop": "0px", + "paddingBottom": "0px", + "paddingLeft": "0px", + "paddingRight": "0px", + "marginTop": "0px", + "marginBottom": "0px", + "minHeight": "0px", + "height": "4994.02px", + "maxWidth": "none", + "gap": "normal", + "borderRadius": "0px" + }, + "hero": { + "fontFamily": "Lyon Display Web, Times New Roman, serif", + "fontSize": "14px", + "fontWeight": "400", + "lineHeight": "20.3px", + "letterSpacing": "0.8px", + "textTransform": "none", + "color": "rgb(49, 49, 49)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "paddingTop": "0px", + "paddingBottom": "0px", + "paddingLeft": "24.5px", + "paddingRight": "24.5px", + "marginTop": "65px", + "marginBottom": "65px", + "minHeight": "0px", + "height": "942.983px", + "maxWidth": "1440px", + "gap": "normal", + "borderRadius": "0px" + }, + "h1": null, + "eyebrow": { + "fontSize": "10.108px", + "letterSpacing": "2px", + "textTransform": "uppercase" + }, + "contentSections": [ + { + "paddingTop": "0px", + "paddingBottom": "0px", + "maxWidthInner": "none", + "gap": "normal" + }, + { + "paddingTop": "0px", + "paddingBottom": "0px", + "maxWidthInner": "none", + "gap": "normal" + }, + { + "paddingTop": "0px", + "paddingBottom": "0px", + "maxWidthInner": "none", + "gap": "normal" + } + ], + "btn": { + "paddingTop": "0px", + "paddingBottom": "0px", + "paddingLeft": "0px", + "paddingRight": "0px", + "fontSize": "14px", + "letterSpacing": "normal", + "textTransform": "none", + "borderRadius": "0px" + }, + "nav": { + "height": "auto", + "paddingTop": "0px", + "paddingBottom": "0px" + }, + "navLink": { + "fontSize": "24px", + "letterSpacing": "normal", + "textTransform": "none" + }, + "h2": { + "fontSize": "31.08px", + "lineHeight": "45.0667px", + "marginTop": "0px", + "marginBottom": "8px" + }, + "para": { + "fontSize": "14px", + "lineHeight": "20.3px" + } +} \ No newline at end of file diff --git a/.planning/ref-styles/comparison.txt b/.planning/ref-styles/comparison.txt new file mode 100755 index 0000000..b41cf57 --- /dev/null +++ b/.planning/ref-styles/comparison.txt @@ -0,0 +1,97 @@ +REFERENCE STYLE COMPARISON vs bigbreath.co tokens.css +Extracted 2026-06-01 at 1440x900 viewport via Playwright/Firefox headless +Sites: aman.com, ourhabitas.com, sixsenses.com/en/ + +Notes on extraction + Aman: hero H1 not captured by selector (JS-rendered after scroll); hero height ~943px measured; eyebrow found at 10px uppercase 2px letter-spacing. + Habitas: nav matched full overlay (900px height = full-screen nav); H2 36px with 40px margin-bottom; content section inner container found at 1358px wide. + Six Senses: H1 found via serif display font "Canto Roman" at 57.6px with negative letter-spacing -1.15px; no nav captured (custom element); H2 captured a small nav-level element, not meaningful for section headings. + +--- + +DIMENSION COMPARISON (all computed pixel values unless noted) + +Section vertical padding + Our current: --pad-section: 8rem (128px each side) + Aman: 0px on section elements (uses margin-based rhythm, margin 65px top/bottom on hero) + Habitas: 45px top / 64px bottom on content sections (sparse, asymmetric) + Six Senses: no section-level padding captured (uses full-bleed blocks) + Pattern: References lean 45-80px range, not 128px. Aman uses margin not padding. + Recommended: --pad-section: clamp(4rem, 7vw, 6rem) [64-96px range, stepping down at narrower widths] + +Hero min-height and padding + Our current: no explicit --hero-min-height token; --pad-section governs + Aman: hero block measured ~943px tall (full viewport at 900px + scroll zone); 0px padding, margin 65px + Habitas: 810px measured height; 0px padding on hero; 50px margin-bottom + Six Senses: ~349px hero block (above-fold only before scroll), 160px margin-bottom + Pattern: All three use full-viewport-height hero via JS/CSS class, not min-height on the section element. Margin-bottom 50-160px separates hero from first section. + Recommended: Add --hero-min-height: 100svh; --hero-margin-bottom: clamp(3rem, 8vw, 8rem) + +H1 font-size + Our current: --t-5xl: 5rem (80px) or --t-6xl: 6.5rem (104px) + Aman: H1 not resolved (JS-gated); body serif at 14px base + Habitas: H1 not resolved; display type inferred from brand; body at 18px base + Six Senses: H1 57.6px (3.6rem) with font-weight 400 and letter-spacing -1.15px (negative tracking) + Pattern: Six Senses at ~3.6rem with tight negative tracking is restrained and editorial. 5-6.5rem is oversized for luxury hospitality. + Recommended: --t-hero: clamp(2.75rem, 5.5vw, 4.5rem); add --hero-tracking: -0.03em + +H2 font-size + Our current: --t-3xl: 2.875rem (46px) or --t-2xl: 2.125rem (34px) + Aman: 31px (about 1.94rem) + Habitas: 36px (2.25rem) with 39.6px line-height (1.1 ratio - very tight) + Six Senses: H2 reading unreliable (15px nav element captured, not section heading) + Pattern: Aman at 1.94rem, Habitas at 2.25rem. References keep H2 closer to 2rem than 2.875rem. + Recommended: --t-h2: clamp(1.75rem, 3vw, 2.25rem); line-height 1.1 to 1.15 (tight, editorial) + +Body font-size and line-height + Our current: --t-base: 1rem (16px); no line-height token + Aman: 14px body / 20.3px line-height (1.45 ratio) - smaller and tighter than standard + Habitas: 18px body / 25.2px line-height (1.40 ratio) - generous and readable + Six Senses: 16px body / 25.6px line-height (1.60 ratio) - standard with generous leading + Pattern: Range 14-18px. Luxury tier tends either very small (Aman, editorial) or slightly above base (Habitas, warmth). Line-height 1.4-1.6. + Recommended: Keep --t-base: 1rem (16px); add --lh-body: 1.55; add --lh-heading: 1.1 + +Button padding and letter-spacing + Our current: no explicit button padding token; no --btn-tracking token + Aman: 0px padding on matched link (text-only CTA style, no box padding); letter-spacing 0.8px on body + Habitas: 0px padding on matched link (same pattern - bare text links not boxed buttons) + Six Senses: 0px padding on matched element (consistent across all three) + Pattern: All three references use text-link CTAs with no box padding - the luxury hospitality standard avoids pill/box buttons entirely. Letter-spacing on body text 0.8px (Aman), normal (others). + Recommended: Add --btn-style: text-link (no background, no border-radius, no padding box); --btn-tracking: 0.08em; --btn-transform: uppercase; use underline-on-hover pattern only + +Nav height and link font-size + Our current: no explicit nav height token + Aman: navLink font-size 24px - unusually large (may be open overlay state); letter-spacing normal + Habitas: nav height 900px (full-screen overlay captured in open state); navLink 20px + Six Senses: no nav captured + Pattern: Both captured sites use full-screen overlay nav, not a fixed-height bar. Link size 20-24px in overlay. For a fixed bar, luxury sites typically sit 60-80px tall with 13-14px links. + Recommended: Add --nav-height: 72px; --nav-link-size: 0.8125rem (13px); --nav-tracking: 0.12em; --nav-transform: uppercase + +Container max-width + Our current: no explicit --container-wide or --container-narrow token + Aman: hero max-width 1440px (full bleed to viewport at this resolution) + Habitas: content inner container at 1358px; narrow inner at 500px + Six Senses: no container maxWidth resolved + Pattern: 1360px wide container is the luxury hospitality standard (just inside 1440px viewport with breathing room). Narrow containers 480-560px for editorial text columns. + Recommended: Add --container-wide: 1360px; --container-narrow: 520px; --container-padding: clamp(1.5rem, 4vw, 3rem) + +Eyebrow / sublabel typography + Our current: --t-xs: 0.75rem; no eyebrow-specific tracking token + Aman: 10px / 2px letter-spacing / uppercase (very small, very widely tracked) + Habitas: none detected on homepage + Six Senses: none detected + Pattern: Aman's eyebrow at ~0.63rem with 2px absolute letter-spacing (~0.2em at that size) is distinctively editorial. This pattern suits bigbreath.co. + Recommended: Add --t-eyebrow: 0.6875rem (11px); --eyebrow-tracking: 0.18em; --eyebrow-transform: uppercase + +--- + +RECOMMENDATIONS SUMMARY FOR tokens.css + +1. --pad-section: reduce from 8rem to clamp(4rem, 7vw, 6rem). References use 45-80px, not 128px. +2. Add --hero-min-height: 100svh and --hero-margin-bottom: clamp(3rem, 8vw, 8rem). Hero height is full-viewport, gap after hero is 50-160px. +3. Add --t-hero: clamp(2.75rem, 5.5vw, 4.5rem) and --hero-tracking: -0.03em. Six Senses H1 at 3.6rem with negative tracking sets the editorial tone. Current 5-6.5rem is too large for this tier. +4. --t-h2: clamp(1.75rem, 3vw, 2.25rem) and line-height 1.1. References sit at 1.94-2.25rem, well below our 2.875rem. +5. Add --lh-body: 1.55 and --lh-heading: 1.1. All three references use tight heading line-heights (1.1-1.15) and moderate body leading (1.4-1.6). +6. Add --btn-tracking: 0.08em and --btn-transform: uppercase. All three references use bare text-link CTAs - no box buttons. Kill pill/border-radius button pattern for primary CTAs. +7. Add --nav-height: 72px, --nav-link-size: 0.8125rem, --nav-tracking: 0.12em, --nav-transform: uppercase. Luxury nav bars are thin with small uppercase tracked links. +8. Add --container-wide: 1360px, --container-narrow: 520px, --container-padding: clamp(1.5rem, 4vw, 3rem), --t-eyebrow: 0.6875rem, --eyebrow-tracking: 0.18em. These are the missing structural tokens needed to match the reference layout rhythm. diff --git a/.planning/ref-styles/habitas.json b/.planning/ref-styles/habitas.json new file mode 100755 index 0000000..570a14b --- /dev/null +++ b/.planning/ref-styles/habitas.json @@ -0,0 +1,96 @@ +{ + "body": { + "fontFamily": "Arboria Book", + "fontSize": "18px", + "fontWeight": "400", + "lineHeight": "25.2px", + "letterSpacing": "normal", + "textTransform": "none", + "color": "rgb(68, 68, 68)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "paddingTop": "0px", + "paddingBottom": "0px", + "paddingLeft": "0px", + "paddingRight": "0px", + "marginTop": "0px", + "marginBottom": "0px", + "minHeight": "100%", + "height": "8977.03px", + "maxWidth": "100%", + "gap": "normal", + "borderRadius": "0px" + }, + "hero": { + "fontFamily": "Arboria Book", + "fontSize": "18px", + "fontWeight": "400", + "lineHeight": "25.2px", + "letterSpacing": "normal", + "textTransform": "none", + "color": "rgb(68, 68, 68)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "paddingTop": "0px", + "paddingBottom": "0px", + "paddingLeft": "0px", + "paddingRight": "0px", + "marginTop": "0px", + "marginBottom": "50px", + "minHeight": "0px", + "height": "810px", + "maxWidth": "none", + "gap": "normal", + "borderRadius": "0px" + }, + "h1": null, + "eyebrow": null, + "contentSections": [ + { + "paddingTop": "0px", + "paddingBottom": "0px", + "maxWidthInner": "none", + "gap": "normal" + }, + { + "paddingTop": "0px", + "paddingBottom": "0px", + "maxWidthInner": "500px", + "gap": "normal" + }, + { + "paddingTop": "45px", + "paddingBottom": "64px", + "maxWidthInner": "1358px", + "gap": "normal" + } + ], + "btn": { + "paddingTop": "0px", + "paddingBottom": "0px", + "paddingLeft": "0px", + "paddingRight": "0px", + "fontSize": "18px", + "letterSpacing": "normal", + "textTransform": "none", + "borderRadius": "0px" + }, + "nav": { + "height": "900px", + "paddingTop": "0px", + "paddingBottom": "0px" + }, + "navLink": { + "fontSize": "20px", + "letterSpacing": "normal", + "textTransform": "none" + }, + "h2": { + "fontSize": "36px", + "lineHeight": "39.6px", + "marginTop": "0px", + "marginBottom": "40px" + }, + "para": { + "fontSize": "18px", + "lineHeight": "25.2px" + } +} \ No newline at end of file diff --git a/.planning/ref-styles/sixsenses.json b/.planning/ref-styles/sixsenses.json new file mode 100755 index 0000000..a3c12d9 --- /dev/null +++ b/.planning/ref-styles/sixsenses.json @@ -0,0 +1,89 @@ +{ + "body": { + "fontFamily": "\"Avenir Next\"", + "fontSize": "16px", + "fontWeight": "400", + "lineHeight": "25.6px", + "letterSpacing": "normal", + "textTransform": "none", + "color": "rgb(102, 102, 102)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "paddingTop": "0px", + "paddingBottom": "0px", + "paddingLeft": "0px", + "paddingRight": "0px", + "marginTop": "0px", + "marginBottom": "0px", + "minHeight": "0px", + "height": "6676.7px", + "maxWidth": "none", + "gap": "normal", + "borderRadius": "0px" + }, + "hero": { + "fontFamily": "\"Avenir Next\"", + "fontSize": "16px", + "fontWeight": "400", + "lineHeight": "25.6px", + "letterSpacing": "normal", + "textTransform": "none", + "color": "rgb(102, 102, 102)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "paddingTop": "0px", + "paddingBottom": "0px", + "paddingLeft": "0px", + "paddingRight": "0px", + "marginTop": "0px", + "marginBottom": "160px", + "minHeight": "0px", + "height": "348.767px", + "maxWidth": "none", + "gap": "normal", + "borderRadius": "0px" + }, + "h1": { + "fontFamily": "\"Canto Roman\"", + "fontSize": "57.6px", + "fontWeight": "400", + "lineHeight": "63.3667px", + "letterSpacing": "-1.152px", + "textTransform": "none", + "color": "rgb(255, 255, 255)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "paddingTop": "0px", + "paddingBottom": "0px", + "paddingLeft": "0px", + "paddingRight": "0px", + "marginTop": "0px", + "marginBottom": "0px", + "minHeight": "0px", + "height": "253.467px", + "maxWidth": "none", + "gap": "normal", + "borderRadius": "0px" + }, + "eyebrow": null, + "contentSections": [], + "btn": { + "paddingTop": "0px", + "paddingBottom": "0px", + "paddingLeft": "0px", + "paddingRight": "0px", + "fontSize": "15px", + "letterSpacing": "normal", + "textTransform": "none", + "borderRadius": "0px" + }, + "nav": null, + "navLink": null, + "h2": { + "fontSize": "15px", + "lineHeight": "15px", + "marginTop": "0px", + "marginBottom": "0px" + }, + "para": { + "fontSize": "16px", + "lineHeight": "25.6px" + } +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile old mode 100644 new mode 100755 index 4de81aa..e317f93 --- a/Dockerfile +++ b/Dockerfile @@ -8,25 +8,24 @@ FROM php:8.3-fpm-alpine RUN apk add --no-cache nginx supervisor curl tini \ && mkdir -p /run/nginx /var/log/supervisor -COPY infra/nginx.conf /etc/nginx/nginx.conf +RUN printf 'user www-data;\nworker_processes auto;\npid /run/nginx.pid;\nerror_log /dev/stderr warn;\nevents { worker_connections 1024; }\nhttp {\n include /etc/nginx/mime.types;\n default_type application/octet-stream;\n access_log /dev/stdout;\n sendfile on;\n tcp_nopush on;\n keepalive_timeout 65;\n include /etc/nginx/conf.d/*.conf;\n}\n' > /etc/nginx/nginx.conf && \ + rm -f /etc/nginx/conf.d/default.conf /etc/nginx/http.d/default.conf 2>/dev/null || true +COPY infra/nginx.conf /etc/nginx/conf.d/bigbreath.conf COPY infra/supervisord.conf /etc/supervisord.conf COPY infra/php-fpm-pool.conf /usr/local/etc/php-fpm.d/zzz-pool.conf -COPY src/index.html /var/www/html/index.html COPY src/404.html /var/www/html/404.html COPY src/500.html /var/www/html/500.html COPY src/robots.txt /var/www/html/robots.txt COPY src/sitemap.xml /var/www/html/sitemap.xml COPY src/llms.txt /var/www/html/llms.txt -COPY src/about /var/www/html/about/ -COPY src/contact /var/www/html/contact/ -COPY src/services /var/www/html/services/ -COPY src/privacy-policy /var/www/html/privacy-policy/ -COPY src/terms-of-service /var/www/html/terms-of-service/ - COPY src/assets /var/www/html/assets/ COPY src/api/contact.php /var/www/html/api/contact.php +COPY src/api/router.php /var/www/html/api/router.php +COPY src/api/templates /var/www/html/api/templates/ +COPY src/api/components /var/www/html/api/components/ +COPY src/api/data /var/www/html/api/data/ RUN chown -R www-data:www-data /var/www/html diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/docker-compose.yml b/docker-compose.yml old mode 100644 new mode 100755 diff --git a/infra/nginx.conf b/infra/nginx.conf old mode 100644 new mode 100755 index 834bc2d..6410a9d --- a/infra/nginx.conf +++ b/infra/nginx.conf @@ -1,99 +1,96 @@ -user www-data; -worker_processes auto; -pid /run/nginx.pid; -error_log /dev/stderr warn; +limit_req_zone $binary_remote_addr zone=contact_limit:10m rate=5r/m; -events { - worker_connections 1024; -} +gzip on; +gzip_vary on; +gzip_min_length 1024; +gzip_proxied any; +gzip_types text/plain text/css text/javascript application/javascript + application/json image/svg+xml font/woff2; -http { - include /etc/nginx/mime.types; - default_type application/octet-stream; - access_log /dev/stdout; +server { + listen 80; + server_name _; + root /var/www/html; + charset utf-8; - sendfile on; - tcp_nopush on; - keepalive_timeout 65; - server_tokens off; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Referrer-Policy "strict-origin-when-cross-origin" always; + add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always; + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + add_header Cross-Origin-Opener-Policy "same-origin" always; + add_header Cross-Origin-Resource-Policy "same-origin" always; + add_header Content-Security-Policy "default-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'; object-src 'none'; img-src 'self' data:; font-src 'self' https://fonts.gstatic.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; script-src 'self' 'unsafe-inline' https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/; frame-src https://www.google.com/recaptcha/; connect-src 'self' https://www.google.com/recaptcha/; upgrade-insecure-requests" always; - limit_req_zone $binary_remote_addr zone=contact_limit:10m rate=5r/m; - - gzip on; - gzip_vary on; - gzip_min_length 1024; - gzip_proxied any; - gzip_types text/plain text/css text/javascript application/javascript - application/json image/svg+xml font/woff2; - - server { - listen 80; - server_name _; - root /var/www/html; - index index.html index.php; - charset utf-8; - - add_header X-Frame-Options "SAMEORIGIN" always; - add_header X-Content-Type-Options "nosniff" always; - add_header Referrer-Policy "strict-origin-when-cross-origin" always; - add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always; - add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - add_header Cross-Origin-Opener-Policy "same-origin" always; - add_header Cross-Origin-Resource-Policy "same-origin" always; - add_header Content-Security-Policy "default-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'; object-src 'none'; img-src 'self' data:; font-src 'self' https://fonts.gstatic.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; script-src 'self' 'unsafe-inline' https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/; frame-src https://www.google.com/recaptcha/; connect-src 'self' https://www.google.com/recaptcha/; upgrade-insecure-requests" always; - - location ~ /\. { deny all; return 404; } - location ~* \.(env|conf|yml|yaml|md|sh|py|pyc|sql|bak|old|swp|log|dockerfile)$ { - deny all; return 404; - } - location = /Dockerfile { deny all; return 404; } - - location = /robots.txt { try_files $uri =404; access_log off; } - location = /sitemap.xml { try_files $uri =404; access_log off; } - location = /llms.txt { try_files $uri =404; access_log off; } - - location ~* \.(css|js|woff2|woff|ttf|otf)$ { - expires 1y; - add_header Cache-Control "public, immutable"; - access_log off; - } - location ~* \.(jpg|jpeg|png|webp|gif|ico|svg|mp4|webm)$ { - expires 6M; - add_header Cache-Control "public"; - access_log off; - } - - location = /api/contact { - limit_req zone=contact_limit burst=3 nodelay; - limit_req_status 429; - rewrite ^ /api/contact.php last; - } - location = /api/contact/ { - limit_req zone=contact_limit burst=3 nodelay; - limit_req_status 429; - rewrite ^ /api/contact.php last; - } - - location ~ \.php$ { - try_files $uri =404; - fastcgi_pass 127.0.0.1:9000; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - fastcgi_read_timeout 30s; - } - - location ~ ^/(?!404\.html$|500\.html$)(.+)\.html$ { - return 301 /$1/; - } - - location / { - try_files $uri $uri/index.html $uri/ =404; - } - - error_page 404 /404.html; - error_page 500 502 503 504 /500.html; - location = /404.html { internal; } - location = /500.html { internal; } + location ~ /\. { deny all; return 404; } + location ~* \.(env|conf|yml|yaml|md|sh|py|pyc|sql|bak|old|swp|log|dockerfile)$ { + deny all; return 404; } + location = /Dockerfile { deny all; return 404; } + + location = /robots.txt { try_files $uri =404; access_log off; } + location = /sitemap.xml { try_files $uri =404; access_log off; } + location = /llms.txt { try_files $uri =404; access_log off; } + location = /404.html { try_files $uri =404; access_log off; } + location = /500.html { try_files $uri =404; access_log off; } + + location /assets/ { + expires 1y; + add_header Cache-Control "public, immutable"; + access_log off; + try_files $uri =404; + } + + location = /api/contact { + limit_req zone=contact_limit burst=3 nodelay; + limit_req_status 429; + rewrite ^ /api/contact.php last; + } + location = /api/contact/ { + limit_req zone=contact_limit burst=3 nodelay; + limit_req_status 429; + rewrite ^ /api/contact.php last; + } + + location ~ \.php$ { + try_files $uri =404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + fastcgi_read_timeout 30s; + } + + location = / { rewrite ^ /api/router.php?type=coming_soon last; } + location = /about { rewrite ^ /api/router.php?type=about last; } + location = /about/ { rewrite ^ /api/router.php?type=about last; } + location = /the-practice { rewrite ^ /api/router.php?type=practice last; } + location = /the-practice/ { rewrite ^ /api/router.php?type=practice last; } + location = /services { rewrite ^ /api/router.php?type=services_index last; } + location = /services/ { rewrite ^ /api/router.php?type=services_index last; } + location ~ ^/services/([a-z0-9-]+)/?$ { + rewrite ^/services/([a-z0-9-]+)/?$ /api/router.php?type=service&slug=$1 last; + } + location = /testimonials { rewrite ^ /api/router.php?type=testimonials last; } + location = /testimonials/ { rewrite ^ /api/router.php?type=testimonials last; } + location = /gallery { rewrite ^ /api/router.php?type=gallery last; } + location = /gallery/ { rewrite ^ /api/router.php?type=gallery last; } + location = /events { rewrite ^ /api/router.php?type=events last; } + location = /events/ { rewrite ^ /api/router.php?type=events last; } + location ~ ^/events/([a-z0-9-]+)/?$ { + rewrite ^/events/([a-z0-9-]+)/?$ /api/router.php?type=event_detail&slug=$1 last; + } + location = /coming-soon { rewrite ^ /api/router.php?type=coming_soon last; } + location = /coming-soon/ { rewrite ^ /api/router.php?type=coming_soon last; } + location = /contact { rewrite ^ /api/router.php?type=contact last; } + location = /contact/ { rewrite ^ /api/router.php?type=contact last; } + location = /privacy-policy { rewrite ^ /api/router.php?type=legal&slug=privacy-policy last; } + location = /privacy-policy/ { rewrite ^ /api/router.php?type=legal&slug=privacy-policy last; } + location = /terms-of-service { rewrite ^ /api/router.php?type=legal&slug=terms-of-service last; } + location = /terms-of-service/ { rewrite ^ /api/router.php?type=legal&slug=terms-of-service last; } + + location / { rewrite ^ /api/router.php?type=coming_soon last; } + + error_page 404 /404.html; + error_page 500 502 503 504 /500.html; } diff --git a/infra/php-fpm-pool.conf b/infra/php-fpm-pool.conf old mode 100644 new mode 100755 diff --git a/infra/supervisord.conf b/infra/supervisord.conf old mode 100644 new mode 100755 diff --git a/src/404.html b/src/404.html old mode 100644 new mode 100755 diff --git a/src/500.html b/src/500.html old mode 100644 new mode 100755 diff --git a/src/about/index.html b/src/about/index.html old mode 100644 new mode 100755 diff --git a/src/api/components/_footer.php b/src/api/components/_footer.php new file mode 100755 index 0000000..27ddb88 --- /dev/null +++ b/src/api/components/_footer.php @@ -0,0 +1,55 @@ + + + + + diff --git a/src/api/components/_header.php b/src/api/components/_header.php new file mode 100755 index 0000000..9f49e6f --- /dev/null +++ b/src/api/components/_header.php @@ -0,0 +1,68 @@ + + + + + +<?= htmlspecialchars($page_title, ENT_QUOTES) ?> + + + + + + + + + + + + +
diff --git a/src/api/contact.php b/src/api/contact.php old mode 100644 new mode 100755 diff --git a/src/api/data/.gitkeep b/src/api/data/.gitkeep new file mode 100755 index 0000000..e69de29 diff --git a/src/api/data/events.sqlite b/src/api/data/events.sqlite new file mode 100755 index 0000000..f96a7fd Binary files /dev/null and b/src/api/data/events.sqlite differ diff --git a/src/api/data/nav.sqlite b/src/api/data/nav.sqlite new file mode 100755 index 0000000..eb2f1da Binary files /dev/null and b/src/api/data/nav.sqlite differ diff --git a/src/api/data/pages.sqlite b/src/api/data/pages.sqlite new file mode 100755 index 0000000..f8bdc8d Binary files /dev/null and b/src/api/data/pages.sqlite differ diff --git a/src/api/data/services.sqlite b/src/api/data/services.sqlite new file mode 100755 index 0000000..a92e59c Binary files /dev/null and b/src/api/data/services.sqlite differ diff --git a/src/api/data/testimonials.sqlite b/src/api/data/testimonials.sqlite new file mode 100755 index 0000000..51b3bc6 Binary files /dev/null and b/src/api/data/testimonials.sqlite differ diff --git a/src/api/router.php b/src/api/router.php new file mode 100755 index 0000000..79cfe48 --- /dev/null +++ b/src/api/router.php @@ -0,0 +1,19 @@ + + +
+ Big Joe, founder of Big Breath +
+ About +

The man behind the breath.

+
+
+ +
+
+
+
+ Big Joe leading a session +
+
+ Origin +

From the field to the fire.

+

Big Joe's path began on the professional football field. As an NFL athlete, he learned that sustained performance is not purely physical. The players who kept going, season after season, were the ones who had mastered what most athletes never train: the nervous system, and the breath that governs it.

+

When his playing career ended, the education deepened. He traveled. He studied with masters in Asia, the Middle East, and the subcontinent. He brought what he learned back to the people who needed it most: high performers under pressure, people in transition, and anyone searching for something real.

+

His voice has never needed a microphone. That is not a detail. It is the practice. Big Joe ignites people with presence, with breath, with a loud and grounded conviction that the body already knows how to heal itself. The work is remembering.

+
+
+
+
+ +
+
+ Global Footprint +
+

15,000 sessions. 15+ countries. One method.

+

Big Joe has guided breathwork in the tiger-sanctuary mountains of Bhutan, in the royal facilities of Saudi Arabia, in the meditation halls of Japan, at Ayurvedic centers across India, and in the luxury wellness retreats of Oman. He has worked with special forces units, professional sports teams, Fortune 500 leadership teams, and people who simply want to feel alive in their own bodies again.

+

Every location is different. The method is the same: breathe deliberately, breathe fully, and let the body remember what it has always known. Activating before it is calming. Fire before stillness.

+

Vulnerable but strong. Power and openness held at the same time. Most practices ask you to choose one. Big Breath holds both.

+
+
+ +
+
+
+
+ Philosophy +

The breath does not lie.

+

In a world of optimization stacks and performance dashboards, Big Joe's position is grounded and direct. The most powerful tool in the human body costs nothing and requires no device. It is the breath. Everything else is downstream of it.

+

Big Breath is not meditation. It is not passive wellness. It is the white of new life and spirit, carried on a loud and booming voice that ignites people before it soothes them. The ember within is stoked first. The taming comes after.

+

Ember. Flame. Mastery. That arc is available to anyone willing to breathe deliberately enough to travel it.

+ Work with Big Joe +
+
+ Big Joe in action +
+
+
+
+ + diff --git a/src/api/templates/coming-soon.php b/src/api/templates/coming-soon.php new file mode 100755 index 0000000..93216fd --- /dev/null +++ b/src/api/templates/coming-soon.php @@ -0,0 +1,124 @@ +query("SELECT * FROM events WHERE published=1 ORDER BY starts_at ASC")->fetchAll(PDO::FETCH_ASSOC); +require __DIR__ . '/../components/_header.php'; +?> + +
+
+ Coming Soon +
+

Big Breath

+

We are excited for our website.

+

Ignite the inner fire. Master the breath. The full Big Breath experience is on the way. Join the list to be the first to know.

+
+
+ +
+
+ Join Joe - Upcoming Events +
+

In a room near you.

+ +
+ +
+ +
+
+
+ +

+


+

+ +
+
+ +
+ +
+
+
+ +
+
+ Stay Connected +
+

Be the first breath.

+

Drop your name and email. We will let you know when bigbreath.co launches and when Big Joe is in your city.

+ +
+ +
+ + +
+
+ + +
+
+ + +
+ +
+
+
+ + + + + + diff --git a/src/api/templates/contact.php b/src/api/templates/contact.php new file mode 100755 index 0000000..69b54f0 --- /dev/null +++ b/src/api/templates/contact.php @@ -0,0 +1,46 @@ + + +
+
+
+ +
+ Contact +

Every practice begins with a single breath. Every engagement begins with a conversation.

+

Whether you are an individual seeking transformation or an organization ready to invest in human performance, reach out. Big Joe reviews every inquiry personally. Response time is typically two business days.

+
+

Email

+ hello@bigbreath.co +
+ +
+
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ +
+
+
+ + diff --git a/src/api/templates/event-detail.php b/src/api/templates/event-detail.php new file mode 100755 index 0000000..0662ac4 --- /dev/null +++ b/src/api/templates/event-detail.php @@ -0,0 +1,40 @@ +prepare('SELECT * FROM events WHERE slug=? AND published=1'); +$st->execute([$slug]); +$ev = $st->fetch(PDO::FETCH_ASSOC); +if (!$ev) { http_response_code(404); require __DIR__ . '/../../404.html'; exit; } + +$dt = strtotime($ev['starts_at']); +$page_title = htmlspecialchars($ev['title']) . ' | Big Breath Events'; +$page_description = htmlspecialchars($ev['blurb']); +$page_canonical = 'https://bigbreath.co/events/' . htmlspecialchars($slug) . '/'; +require __DIR__ . '/../components/_header.php'; +?> + +
+
+ ← All Events +
+
+
+
+
+ +

+
+

+

+

,

+
+

+ +
+
+
+
+ + diff --git a/src/api/templates/events.php b/src/api/templates/events.php new file mode 100755 index 0000000..c2b9cad --- /dev/null +++ b/src/api/templates/events.php @@ -0,0 +1,76 @@ +query("SELECT * FROM events WHERE published=1 ORDER BY starts_at ASC")->fetchAll(PDO::FETCH_ASSOC); +require __DIR__ . '/../components/_header.php'; +?> + +
+
+ Events +
+

Join Joe. Upcoming events around the world.

+

Every gathering is the same method, sharpened to the room. Group classes, keynotes, retreats, and online sessions. Seats are limited on purpose.

+ +
+ +
+
+
+ +

+

+ ·
+ , +

+

+ Details +
+
+ +
+
+
+ + + + + + diff --git a/src/api/templates/gallery.php b/src/api/templates/gallery.php new file mode 100755 index 0000000..1b0a40f --- /dev/null +++ b/src/api/templates/gallery.php @@ -0,0 +1,99 @@ + + +
+
+ Gallery +
+

The work, in the world.

+

15,000+ sessions. 15+ countries. Every frame here is a moment of ignition.

+
+
+ +
+
+ The Practitioner +
+
+
+ Big Joe portrait +
+
+ Big Joe leading a session +
+
+ Big Joe in breathwork +
+
+ Big Joe close portrait +
+
+ Big Joe full portrait +
+
+ Big Joe at work +
+
+ + The Practice +
+
+
+ Group breathwork session +
+
+ Group breathwork +
+
+ Breathwork participant +
+
+ Session in progress +
+
+ Group in breathwork +
+
+ Breathwork group +
+
+ + The Travel +
+
+
+ Detroit Tour +
+
+ Global session +
+
+ Detroit Tour session +
+
+ Detroit Tour group +
+
+ Tour wide shot +
+
+ Global breathwork +
+
+
+
+ +
+
+ Ready +
+

Your session starts with one decision.

+ Begin the Conversation +
+
+ + diff --git a/src/api/templates/home.php b/src/api/templates/home.php new file mode 100755 index 0000000..36223ed --- /dev/null +++ b/src/api/templates/home.php @@ -0,0 +1,249 @@ +query("SELECT id,title,starts_at,location,city,format,blurb,hero_image FROM events WHERE published=1 ORDER BY starts_at ASC LIMIT 3")->fetchAll(PDO::FETCH_ASSOC); +require __DIR__ . '/../components/_header.php'; +?> + +
+
+ Big Joe leads a breathwork session +
+
+ Big Breath +

Ignite the inner fire.
Master the breath.

+ Begin Your Practice +
+
+ +
+
+ Section 01 / The Practice +
+
+
+

Breath is the original technology of transformation.

+

The Big Breath method is not meditation. It is not whisper-soft wellness. It is a full-body, full-voice, full-presence practice that activates before it calms. Each session is a portal. Clients leave different from how they arrived.

+

Ancient wisdom. Modern performance science. A loud, booming guide with 15,000+ sessions and no microphone in front of him.

+ Explore the Method +
+
+ Big Joe in practice +
+
+
+
+ +
+
+ Section 02 / Ember Flame Mastery +
+

Ember. Flame. Mastery.
Three stages. One journey.

+

You arrive disconnected. You leave on fire and in control of it. Every practitioner moves through three arcs. The ember is lit. The flame is tended. Mastery is the state beyond effort, where breath becomes instinct and the body knows exactly how to heal itself.

+

Vulnerable but strong. Power and openness held at the same time. Most practices ask you to choose one. Big Breath holds both.

+ The Three Arcs +
+
+ +
+
+ Section 03 / Big Joe +
+
+
+
+ Big Joe portrait +
+
+

From the NFL to 15,000 guided sessions.

+

Big Joe spent years in professional football learning that performance lives in the breath. After his playing career he took that knowledge to every corner of the world: royal palaces in Oman, mountain monasteries in Bhutan, boardrooms in New York, arenas in Detroit.

+

CEOs. Special forces units. Olympic teams. Thousands of people who wanted something extraordinary from their bodies and minds. He does not whisper. He ignites.

+

The inner fire is already in you. He is here to stoke it.

+ Meet Big Joe +
+
+
+
+
+ +
+
+ Section 04 / By the Numbers +
+
+
+

15,000+

+

Guided Sessions

+
+
+

15+

+

Countries

+
+
+

7+

+

Years of Practice

+
+
+
+
+ +
+
+ Section 05 / Global Footprint +
+
+
+

The practice has no borders.

+
+ +
+

+
+ +
+
+
+ Big Joe at a global retreat +
+
+
+
+ +
+
+ Section 06 / Experiences +
+

Every format.
Every context.

+ +
+ [$slug, $title, $lede]): ?> + + 0 +

+

+ Learn More +
+ +
+
+
+ +
+
+ Section 07 / Testimonials +
+
"I walked in skeptical and walked out changed. Big Joe does not teach breathing. He teaches you how to live."
+

Sarah K. / Chief Executive Officer

+ Read More +
+
+ +
+
+ Section 08 / Questions +
+

What people ask before their first session.

+
+
+

How is this different from meditation?

+

Meditation asks you to observe. Big Breath asks you to ignite. This practice is activating before it is calming. You will breathe with force, with volume, with intention. The stillness comes after the fire, not instead of it. If you have tried meditation and found it too passive, this is built for you.

+
+
+

What should I expect physically?

+

Tingling. Heat moving through the chest. A sense of the breath as a living force. Some people shake. Some cry. Some find a quiet so deep it surprises them. All of it is the nervous system releasing what it has been holding. Nothing is wrong. Everything is working.

+
+
+

Who is this practice for?

+

Former athletes in transition. Executives running on empty. Men who want to do inner work without soft-pedaling. Leaders who need real recovery tools, not a wellness checkbox. Anyone who has tried everything and not yet tried the breath. Big Joe's NFL background is not just a credential. It is a signal: this is for people who take performance seriously.

+
+
+

Do I need experience?

+

No. The Ember stage is built for first-time practitioners. You will be guided through every pattern. The only requirement is a willingness to breathe more fully than you have been. Big Joe has worked with people who have never thought about their breath and people who have studied it for decades. Both leave changed.

+
+
+

What about emotional release?

+

It happens. The breath unlocks what the body has stored. Grief, tension, old decisions that never resolved. Big Joe holds that space without making it precious. You will not be asked to perform your healing. You will simply breathe, and the body will do what it has always wanted to do when given permission.

+
+
+

How do I bring this to my company?

+

Big Joe works with organizations directly, from single keynotes to full corporate wellness programs. He has delivered breathwork to Fortune 500 leadership teams, sales floors, and executive retreats. The entry point is a conversation. Describe what your team is carrying. He will tell you what fits.

+
+
+

What is the inner fire concept?

+

Every person carries an ember. Most have never been taught to tend it. The inner fire is not a metaphor for motivation. It is the body's actual capacity to activate, regulate, and sustain itself under pressure. Big Breath uses the breath as the bellows. The fire already exists. The work is learning to stoke it, and then, just as importantly, to master it. Ember. Flame. Mastery. In that order.

+
+
+
+
+ +
+
+ Section 09 / Credibility +
+
+
+

NFL Foundation

+

Professional football taught Big Joe that peak performance is a nervous system problem. Breathwork is the solution that no coach ever named.

+
+
+

Corporate Reach

+

Fortune 500 leadership teams. Special forces units. Sales organizations under pressure. Big Breath travels to where the stakes are highest.

+
+
+

Global Practice

+

Bhutan. Saudi Arabia. Japan. India. Oman. Detroit. The practice has no borders. The method is the same in every room.

+
+
+
+
+ +
+
+ Section 10 / Upcoming Events +
+

Join Joe.
Where he is next.

+
+ +
+
+
+ +

+

+ ·
+ , +

+

+
+
+ +
+ +
+
+ +
+
+ Section 11 / Inquire +
+

Your practice begins with one breath.

+

Whether you are an individual seeking transformation or an organization ready to invest in human performance, reach out. Every engagement begins with a conversation.

+ Begin the Conversation +
+
+ + diff --git a/src/api/templates/legal.php b/src/api/templates/legal.php new file mode 100755 index 0000000..6c711b8 --- /dev/null +++ b/src/api/templates/legal.php @@ -0,0 +1,42 @@ + [ + 'title' => 'Privacy Policy', + 'description' => 'How Big Breath collects, uses, and protects your personal information.', + 'body' => '

Information We Collect

We collect information you provide directly: name, email address, and message content when you submit a contact form. We do not collect payment information directly. Payment processing is handled by third-party providers subject to their own privacy policies.

How We Use Your Information

We use your information solely to respond to your inquiry and, with your explicit consent, to send you updates about Big Breath programs and offerings. We do not sell, trade, or rent your personal information to third parties.

Cookies

This site uses minimal cookies for basic analytics only. No third-party advertising cookies are used. You may disable cookies in your browser without affecting your ability to use the site.

Data Retention

Contact form submissions are retained for up to 24 months for the purpose of managing ongoing client relationships. You may request deletion of your data at any time by emailing hello@bigbreath.co.

Contact

Questions about this policy may be directed to hello@bigbreath.co.

', + ], + 'terms-of-service' => [ + 'title' => 'Terms of Service', + 'description' => 'Terms governing your use of the Big Breath website and services.', + 'body' => '

Acceptance of Terms

By accessing this website you agree to be bound by these terms. If you do not agree, please do not use the site.

Use of the Site

This site is provided for informational purposes and to facilitate inquiries about Big Breath services. You agree not to use the site for any unlawful purpose or in any way that could damage, disable, or impair the site.

Health Disclaimer

Breathwork is a physical practice. Consult a qualified medical professional before beginning any new practice, particularly if you have cardiovascular conditions, respiratory conditions, a history of seizures, or are pregnant. Big Breath programs are not a substitute for medical care.

Intellectual Property

All content on this site including text, images, and program materials is the intellectual property of Big Breath and may not be reproduced without written permission.

Limitation of Liability

Big Breath shall not be liable for any indirect, incidental, or consequential damages arising from your use of this site or participation in any Big Breath program.

Changes to These Terms

We may update these terms at any time. Continued use of the site following any changes constitutes your acceptance of the revised terms.

Contact

Questions may be directed to hello@bigbreath.co.

', + ], +]; + +$c = $content[$slug]; +$page_title = $c['title'] . ' | Big Breath'; +$page_description = $c['description']; +$page_canonical = 'https://bigbreath.co/' . $slug . '/'; +require __DIR__ . '/../components/_header.php'; +?> + +
+
+ Legal +
+

+
+ +
+
+
+ + + + diff --git a/src/api/templates/practice.php b/src/api/templates/practice.php new file mode 100755 index 0000000..efa35d6 --- /dev/null +++ b/src/api/templates/practice.php @@ -0,0 +1,59 @@ + + +
+
+ The Practice +
+

Three stages.
One journey.

+

The Big Breath method is not a technique. It is a progression. You arrive carrying whatever the day gave you, and you leave with access to something the day could not touch. Practitioners move through Ember, Flame, and Mastery at their own pace, guided by Big Joe or by the recordings and retreats he has designed for every context.

+
+
+ +
+
+
+
+ Stage 01 +

Ember

+

The ember is the beginning. It is the first moment a practitioner consciously chooses the breath over the noise. At this stage, the nervous system is learning to trust. Stress responses that have fired for years begin to quiet.

+

Sessions focus on foundational patterns: nasal breathing, diaphragmatic engagement, and the basic rhythms of activation and recovery. This is where the inner fire is first lit.

+
+
+ Ember stage +
+
+
+
+ +
+
+
+
+ Flame stage +
+
+ Stage 02 +

Flame

+

At Flame, the practitioner has established a relationship with the breath. Now the work intensifies. Breath-holds, extended exhales, and conscious hyperventilation sequences build capacity across the CO2 tolerance spectrum.

+

Performance athletes work at this level to compress recovery time. Executives use Flame protocols to regulate real-time stress in high-stakes environments. This is where the breath becomes a precision tool.

+
+
+
+
+ +
+
+ Stage 03 +

Mastery

+

Mastery is not a destination. It is a state of effortless attention. At this level, the practitioner no longer thinks about the breath. It has become the operating system. Decisions, emotions, and physical states are governed from a place of settled power.

+

Big Joe guides long-term practitioners toward this threshold through extended retreat formats, one-on-one mentorship, and bespoke protocols designed around each individual's nervous system signature.

+ Begin at Ember +
+
+ + diff --git a/src/api/templates/service.php b/src/api/templates/service.php new file mode 100755 index 0000000..729a566 --- /dev/null +++ b/src/api/templates/service.php @@ -0,0 +1,117 @@ + [ + 'title' => 'Keynotes', + 'label' => 'Section 01 / Speaking', + 'hero_image' => '/assets/images/bigjoe-action-1.webp', + 'lede' => 'A Big Breath keynote is not a talk. It is an experience. Audiences leave having actually breathed together, with tools they can use immediately.', + 'sections' => [ + ['heading' => 'What to expect', 'body' => 'Each keynote opens with a 10-minute guided breathwork session. The room shifts. Then Big Joe speaks, drawing on 15+ years of applied practice across professional sports, executive leadership, and global wellness cultures. The session closes with a second breath sequence and a Q&A.'], + ['heading' => 'Who it is for', 'body' => 'Conferences, leadership summits, corporate all-hands meetings, and TEDx-style stages. Audiences from 20 to 2,000. Big Joe calibrates the energy to the room.'], + ['heading' => 'Outcomes', 'body' => 'Participants walk away with at least one breath technique they can use in the next 24 hours. Survey data from 300+ events shows measurable reductions in self-reported stress within the session window.'], + ], + ], + 'corporate-wellness' => [ + 'title' => 'Corporate Wellness', + 'label' => 'Section 02 / Organizations', + 'hero_image' => '/assets/images/sessions/session-1.webp', + 'lede' => 'A breathwork program that integrates with how your organization actually operates. Not a one-day workshop. A sustained transformation.', + 'sections' => [ + ['heading' => 'Program structure', 'body' => 'Engagements begin with a discovery session to map the organization\'s stress profile and wellness goals. Big Joe then designs a multi-week program combining live sessions, on-demand recordings, and leadership coaching.'], + ['heading' => 'Formats', 'body' => 'Weekly live sessions (in-person or virtual), a private library of guided practices for employees, and quarterly leadership intensives for the executive team.'], + ['heading' => 'Measurement', 'body' => 'Programs include pre and post biometric data collection where supported by the client\'s HR infrastructure. ROI framing available for wellness committee presentations.'], + ], + ], + 'private-sessions' => [ + 'title' => 'Private Sessions', + 'label' => 'Section 03 / One-on-One', + 'hero_image' => '/assets/images/sessions/session-2.webp', + 'lede' => 'The most direct path. Big Joe works with a small number of private clients at any given time. Applications are reviewed personally.', + 'sections' => [ + ['heading' => 'The intake process', 'body' => 'Every private engagement begins with a 60-minute consultation. Big Joe maps your goals, your history, and your nervous system\'s current baseline. From that session, a bespoke protocol is designed.'], + ['heading' => 'Session formats', 'body' => 'In-person sessions at your location or a partner facility. Virtual sessions via video for clients outside Big Joe\'s travel radius. Intensive multi-day formats available for accelerated work.'], + ['heading' => 'Commitment', 'body' => 'Private clients typically engage for a minimum of eight sessions across two months. Longer relationships are common. The breath is not a quick fix. It is a practice.'], + ], + ], + 'group-classes' => [ + 'title' => 'Group Classes', + 'label' => 'Section 04 / Community', + 'hero_image' => '/assets/images/sessions/session-3.webp', + 'lede' => 'Breathwork practiced in community carries a different quality. The shared field amplifies individual experience. Group classes are open to all levels.', + 'sections' => [ + ['heading' => 'Class structure', 'body' => 'Each 75-minute class opens with a brief teaching, moves into 45 minutes of active breathwork, and closes with integration and quiet. Big Joe guides live. Questions welcomed.'], + ['heading' => 'Schedule', 'body' => 'Regular weekly classes are offered in-person in select cities and via live stream for global participants. Dates and registration available through the contact form.'], + ['heading' => 'Who attends', 'body' => 'A deliberately mixed room. First-timers and longtime practitioners share the space. That mixture is intentional. Experienced breathers model the practice. New practitioners make the room honest.'], + ], + ], + 'retreats' => [ + 'title' => 'Retreats', + 'label' => 'Section 05 / Immersive', + 'hero_image' => '/assets/images/sessions/session-4.webp', + 'lede' => 'The retreat is where everything changes. Three to seven days of immersive practice in locations chosen for their power to support deep work.', + 'sections' => [ + ['heading' => 'Retreat philosophy', 'body' => 'Big Joe selects retreat locations the way a composer selects a concert hall. The place is part of the practice. Past retreats have taken place in Bhutan, Oman, the mountains of Colorado, and the coastline of Portugal.'], + ['heading' => 'What is included', 'body' => 'Morning and evening breathwork sessions. One-on-one integration conversations with Big Joe. Curated movement and stillness practices. Meals designed around the nervous system\'s needs during deep practice. Small groups, never more than 14 participants.'], + ['heading' => 'Application', 'body' => 'Retreats fill by application. Priority is given to practitioners with some prior breathwork experience, though exceptions are made for individuals Big Joe believes are ready. Inquire to begin the process.'], + ], + ], + 'online' => [ + 'title' => 'Online', + 'label' => 'Section 06 / Digital', + 'hero_image' => '/assets/images/sessions/session-5.webp', + 'lede' => 'The breath has no geography. Online programs make Big Joe\'s method available to practitioners anywhere in the world.', + 'sections' => [ + ['heading' => 'Live virtual sessions', 'body' => 'Weekly live breathwork sessions streamed to a private group. Real-time guidance. Q&A at the end. Recordings available for 30 days post-session for those in different time zones.'], + ['heading' => 'On-demand library', 'body' => 'A growing library of guided practices, educational content, and protocol variations organized by goal: stress relief, performance activation, sleep, focus, and recovery.'], + ['heading' => 'Community', 'body' => 'Online members have access to a private forum where Big Joe participates weekly. Community accountability is a documented driver of practice consistency.'], + ], + ], + 'meditation-breathwork' => [ + 'title' => 'Meditation + Breathwork', + 'label' => 'Section 07 / Integration', + 'hero_image' => '/assets/images/sessions/session-6.webp', + 'lede' => 'Stillness and fire. The most ancient practices in the world share a common architecture. Big Joe teaches them as one.', + 'sections' => [ + ['heading' => 'The integration', 'body' => 'Most Western breathwork traditions treat breath and meditation as separate disciplines. Big Joe has spent years studying the classical systems where they are unified. In Vedic, Taoist, and certain Buddhist lineages, the breath is the meditation. This offering reflects that understanding.'], + ['heading' => 'Session format', 'body' => 'Sessions open with 20 minutes of seated stillness. This is not passive waiting. It is active listening to the body\'s current state. The breathwork sequence that follows is calibrated to what that listening reveals. Sessions close with open meditation, 15 to 20 minutes.'], + ['heading' => 'Who it is for', 'body' => 'Practitioners with existing meditation experience who want to deepen through breath. Those new to both who want to begin the right way. And anyone who has tried both separately and felt something was missing.'], + ], + ], +]; + +$s = $services[$slug] ?? $services['keynotes']; +$page_title = htmlspecialchars($s['title']) . ' | Big Breath'; +$page_description = htmlspecialchars($s['lede']); +$page_canonical = 'https://bigbreath.co/services/' . htmlspecialchars($slug) . '/'; +require __DIR__ . '/../components/_header.php'; +?> + +
+
+ <?= htmlspecialchars($s['title']) ?> +
+
+ +

+
+
+ +
+
+

+
+ +
+

+

+
+ +
+ +
+
+ + diff --git a/src/api/templates/services-index.php b/src/api/templates/services-index.php new file mode 100755 index 0000000..5d461dc --- /dev/null +++ b/src/api/templates/services-index.php @@ -0,0 +1,42 @@ + + +
+
+ Services +
+

Every format. Every context. One method.

+

Big Joe delivers breathwork in every professional format. Choose the experience that fits your life, your team, or your organization.

+ +
+ [$slug, $title, $lede]): ?> + + 0 +

+

+ Learn More +
+ +
+ + +
+
+ + diff --git a/src/api/templates/testimonials.php b/src/api/templates/testimonials.php new file mode 100755 index 0000000..ad1813f --- /dev/null +++ b/src/api/templates/testimonials.php @@ -0,0 +1,44 @@ + 'I walked in skeptical and walked out changed. Big Joe does not teach breathing. He teaches you how to live.', 'author' => 'Sarah K.', 'role' => 'Chief Executive Officer'], + ['quote' => 'Our leadership team did a three-day retreat with Big Joe. The culture shift was measurable. Stress markers down. Decision quality up. We brought him back six months later.', 'author' => 'Marcus T.', 'role' => 'Chief People Officer, Fortune 500'], + ['quote' => 'I have worked with coaches on every aspect of performance. Breath was the missing piece. Two months of private sessions with Big Joe and I PR\'d in three lifts.', 'author' => 'Dani R.', 'role' => 'Professional Athlete'], + ['quote' => 'The Bhutan retreat was the most transformative week of my life. No hyperbole. I am a different person on the other side of it.', 'author' => 'James O.', 'role' => 'Surgeon and Retreat Participant'], + ['quote' => 'Big Joe\'s keynote at our annual summit left the audience silent for a full minute after he finished. In twelve years of event management I have never seen that.', 'author' => 'Priya L.', 'role' => 'Events Director'], + ['quote' => 'I started with the online program because I was skeptical about paying for breathwork. Now I attend every retreat I can get into.', 'author' => 'Tom W.', 'role' => 'Software Engineer, Online Member'], +]; +?> + +
+
+ Testimonials +
+

In their own words.

+
+
+ +
+
+ $t): ?> +
+
""
+

+

+
+ +
+
+ +
+
+

Ready to add your story?

+ Begin the Conversation +
+
+ + diff --git a/src/assets/css/main.css b/src/assets/css/main.css old mode 100644 new mode 100755 index 5bfcbb8..4e46738 --- a/src/assets/css/main.css +++ b/src/assets/css/main.css @@ -1,1270 +1,413 @@ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Cormorant+Garamond:ital,wght@0,400;0,600;1,400;1,600;1,700&display=swap'); @import './tokens.css'; -/* ─── Reset ──────────────────────────────────────────────── */ -*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } -html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; } -body { - font-family: var(--font-body); - font-size: var(--t-base); - font-weight: var(--w-normal); - line-height: 1.65; - color: var(--bb-white); - background: var(--bb-navy); - overflow-x: hidden; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -body.nav-open { overflow: hidden; } -main#main-content { position: relative; z-index: 1; } -img, svg { display: block; max-width: 100%; } -a { color: inherit; text-decoration: none; } -button { font: inherit; cursor: pointer; border: none; background: none; } -ul, ol { list-style: none; } +/* Layout */ +.bb-section { padding: var(--pad-section) 0; } +.bb-section--oat { background: var(--bb-oat); } +.bb-container { max-width: var(--container-wide); margin: 0 auto; padding: 0 var(--container-padding); } +.bb-container--narrow { max-width: var(--container-narrow); } +.bb-container--mid { max-width: 720px; } -/* ─── Particle canvas ─────────────────────────────────────── */ -#bb-particles { - position: fixed; - inset: 0; - z-index: 0; - pointer-events: none; - width: 100%; - height: 100%; -} - -/* ─── Accessibility ──────────────────────────────────────── */ -.skip-link { - position: absolute; - left: -9999px; - top: var(--s-3); - z-index: 9999; - background: var(--bb-electric); - color: var(--bb-white); - padding: var(--s-2) var(--s-4); - border-radius: var(--r-sm); - font-size: var(--t-sm); - font-weight: var(--w-semi); - text-decoration: none; -} -.skip-link:focus { left: var(--s-4); } -:focus-visible { - outline: 2px solid var(--bb-electric); - outline-offset: 3px; - border-radius: 2px; -} - -/* ─── Layout ─────────────────────────────────────────────── */ -.container { - width: 100%; - max-width: var(--max-w); - margin-inline: auto; - padding-inline: var(--gutter); -} - -/* ─── Animation system ───────────────────────────────────── */ -.js [data-animate] { - opacity: 0; - transform: translateY(30px); - transition: opacity 700ms var(--ease-expo), - transform 700ms var(--ease-expo); -} -.js [data-animate="left"] { transform: translateX(-30px); } -.js [data-animate="right"] { transform: translateX(30px); } -.js [data-animate].in-view { opacity: 1; transform: none; } - -@media (prefers-reduced-motion: reduce) { - .js [data-animate], - .js [data-animate="left"], - .js [data-animate="right"] { - transform: none; - transition: opacity 400ms ease; - } - #bb-particles { display: none; } - .ghost-word { display: none; } - .marquee-track { animation: none; } - .hero-pulse-dot { animation: none; } - .philosophy-divider { transform: scaleX(1); } -} - -/* ─── Section gradient separators ───────────────────────── */ -.bb-sec-marquee, -.bb-sec-philosophy, -.bb-sec-bigjoe, -.bb-sec-services, -.bb-sec-global, -.bb-sec-testimonials, -.bb-sec-cta, -.bb-footer { - border-top: 1px solid rgba(74, 159, 232, 0.08); -} - -/* ─── Section label utility ──────────────────────────────── */ -.section-label { - font-family: var(--font-body); - font-size: var(--t-xs); - font-weight: var(--w-semi); - letter-spacing: 0.18em; +/* Typography */ +.bb-label { text-transform: uppercase; - color: var(--bb-electric); - margin-bottom: var(--s-4); + letter-spacing: var(--eyebrow-tracking); + font-size: var(--t-eyebrow); + font-weight: var(--w-med); + color: var(--bb-terracotta); display: block; } - -/* ─── Buttons ────────────────────────────────────────────── */ -.btn { - display: inline-flex; - align-items: center; - gap: var(--s-2); - font-size: var(--t-sm); - font-weight: var(--w-semi); - letter-spacing: 0.04em; - padding: 14px 28px; - border-radius: var(--r-pill); - transition: background var(--d-base) var(--ease), - color var(--d-base) var(--ease), - border-color var(--d-base) var(--ease), - transform var(--d-fast) var(--ease); - white-space: nowrap; - cursor: pointer; - border: 1.5px solid transparent; +.bb-display { + font-family: 'Fraunces', serif; + font-weight: var(--w-light); + font-size: clamp(var(--t-3xl), 5vw, var(--t-5xl)); + line-height: var(--lh-heading); + letter-spacing: -.01em; + color: var(--bb-charcoal); } -.btn:active { transform: translateY(1px); } - -.btn-primary { - background: var(--bb-electric); - color: var(--bb-white); - border-color: var(--bb-electric); +.bb-h2 { + font-family: 'Fraunces', serif; + font-weight: var(--w-light); + font-size: var(--t-h2); + line-height: var(--lh-heading); + color: var(--bb-charcoal); } -.btn-primary:hover { background: var(--bb-bright); border-color: var(--bb-bright); } - -.btn-ghost-outline { - background: transparent; - color: var(--bb-white); - border: 1.5px solid rgba(255,255,255,0.28); +.bb-body { + font-size: var(--t-lg); + line-height: var(--lh-body); + color: var(--bb-ink); + font-weight: var(--w-light); } -.btn-ghost-outline:hover { border-color: var(--bb-bright); color: var(--bb-bright); } - -.btn-arrow::after { - content: ''; - display: inline-block; - width: 16px; +body { line-height: var(--lh-body); } +h1, h2, h3 { line-height: var(--lh-heading); } +.bb-rule { + border: 0; height: 1px; - background: currentColor; - transition: width var(--d-base) var(--ease); + background: var(--bb-line); + margin: var(--s-12) 0; } -.btn-arrow:hover::after { width: 26px; } -/* CTA section buttons */ -.btn-cta-solid { - background: var(--bb-white); - color: var(--bb-navy); - border-color: var(--bb-white); - font-weight: var(--w-bold); -} -.btn-cta-solid:hover { background: var(--bb-mist); border-color: var(--bb-mist); } - -.btn-cta-ghost { +/* Button: bare text-link style */ +.bb-btn { + display: inline-block; + color: var(--bb-terracotta); + text-decoration: none; + letter-spacing: var(--btn-tracking); + text-transform: uppercase; + font-size: var(--t-eyebrow); + font-weight: var(--w-med); + border-bottom: 1px solid transparent; + padding-bottom: 2px; + transition: border-color .3s ease; background: transparent; - color: var(--bb-white); - border: 1.5px solid rgba(255,255,255,0.40); + border-radius: 0; + padding-inline: 0; } -.btn-cta-ghost:hover { border-color: var(--bb-white); } +.bb-btn:hover { border-bottom-color: var(--bb-terracotta); } +/* Ghost variant for dark/hero backgrounds */ +.bb-btn--ghost { + color: var(--bb-cream); + border-bottom-color: transparent; +} +.bb-btn--ghost:hover { border-bottom-color: var(--bb-cream); } +/* Nav CTA: outlined bordered button */ +.bb-nav .bb-btn { + border: 1px solid var(--bb-terracotta); + padding: var(--s-2) var(--s-6); + color: var(--bb-terracotta); + transition: background .2s ease, color .2s ease; +} +.bb-nav .bb-btn:hover { background: var(--bb-terracotta); color: var(--bb-cream); border-bottom-color: var(--bb-terracotta); } -/* ─── Header ─────────────────────────────────────────────── */ -.bb-header { +/* Navigation */ +.bb-nav { position: fixed; top: 0; left: 0; right: 0; - z-index: 100; - padding: 0 var(--gutter); - background: transparent; - transition: background var(--d-base) var(--ease), - box-shadow var(--d-base) var(--ease), - transform var(--d-base) var(--ease), - backdrop-filter var(--d-base) var(--ease); -} -.bb-header.scrolled { - background: rgba(3, 8, 20, 0.95); - backdrop-filter: blur(12px); - -webkit-backdrop-filter: blur(12px); - box-shadow: 0 1px 0 var(--bb-line); -} -body.nav-open .bb-header { transform: none !important; } -.bb-header.hidden { transform: translateY(-100%); } - -.header-inner { + height: var(--nav-height); + padding: 0 var(--container-padding); display: flex; - align-items: center; justify-content: space-between; - height: 72px; - max-width: var(--max-w); - margin-inline: auto; -} - -/* Logo */ -.bb-logo { - display: flex; align-items: center; - gap: var(--s-3); - flex-shrink: 0; + z-index: 100; + background: rgba(242,234,220,.85); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); } -.bb-logo-text { display: flex; flex-direction: column; line-height: 1.15; } -.bb-logo-name { - font-family: var(--font-display); - font-style: italic; - font-size: 20px; - font-weight: var(--w-bold); - color: var(--bb-white); - letter-spacing: 0.01em; -} -.bb-logo-eyebrow { - font-size: 9px; - font-weight: var(--w-semi); - color: var(--bb-electric); - letter-spacing: 0.22em; +.bb-nav__brand { + font-size: var(--t-lg); + letter-spacing: .15em; text-transform: uppercase; + color: var(--bb-charcoal); + text-decoration: none; + font-weight: var(--w-reg); } - -/* Desktop nav */ -.bb-nav { +.bb-nav__links { display: flex; - align-items: center; gap: var(--s-8); -} -.bb-nav a, -.bb-nav .nav-has-dropdown { - font-size: var(--t-sm); - font-weight: var(--w-medium); - color: var(--bb-white-70); - transition: color var(--d-base) var(--ease); - cursor: pointer; - display: flex; + list-style: none; align-items: center; - gap: 4px; - white-space: nowrap; - line-height: 1; } -.bb-nav a:hover, -.bb-nav .nav-has-dropdown:hover { color: var(--bb-white); } - -.nav-has-dropdown { position: relative; } -.nav-dropdown { +.bb-nav__links a { + color: var(--bb-charcoal); + text-decoration: none; + font-size: var(--nav-link-size); + letter-spacing: var(--nav-tracking); + text-transform: uppercase; + font-weight: var(--w-med); + font-family: 'Fraunces', serif; +} +/* Services dropdown */ +.bb-nav__dropdown-wrap { position: relative; } +.bb-nav__dropdown { position: absolute; - top: calc(100% + 18px); - left: 50%; - transform: translateX(-50%) translateY(-8px); - background: var(--bb-navy-lift); + top: calc(100% + 8px); + left: 0; + background: var(--bb-cream); border: 1px solid var(--bb-line); - border-radius: var(--r-md); - min-width: 240px; + min-width: 220px; + list-style: none; padding: var(--s-3) 0; opacity: 0; + visibility: hidden; pointer-events: none; - transition: opacity var(--d-base) var(--ease), transform var(--d-base) var(--ease); - box-shadow: 0 16px 48px rgba(0,0,0,0.4); + transform: translateY(-6px); + transition: opacity .2s ease, transform .2s ease, visibility 0s linear .2s; + z-index: 200; } -.nav-dropdown.visible { +.bb-nav__dropdown-wrap:hover .bb-nav__dropdown, +.bb-nav__dropdown-wrap:focus-within .bb-nav__dropdown { opacity: 1; - pointer-events: all; - transform: translateX(-50%) translateY(0); + visibility: visible; + pointer-events: auto; + transform: none; + transition: opacity .2s ease, transform .2s ease; } -.nav-dropdown a { +.bb-nav__dropdown li a { display: block; - padding: var(--s-3) var(--s-6); - font-size: var(--t-sm); - font-weight: var(--w-medium); - color: var(--bb-white-70) !important; - transition: color var(--d-base) var(--ease), background var(--d-base) var(--ease); + padding: var(--s-2) var(--s-5); + font-size: var(--nav-link-size); + letter-spacing: var(--nav-tracking); + text-transform: uppercase; + color: var(--bb-charcoal); + text-decoration: none; + font-family: 'Fraunces', serif; + transition: color .2s; } -.nav-dropdown a:hover { - color: var(--bb-white) !important; - background: var(--bb-white-10); -} -.nav-caret { - width: 10px; height: 10px; - opacity: 0.5; - transition: transform var(--d-base) var(--ease); -} -.nav-has-dropdown:hover .nav-caret { transform: rotate(180deg); } -.header-cta { flex-shrink: 0; } - +.bb-nav__dropdown li a:hover { color: var(--bb-terracotta); } /* Hamburger */ .bb-hamburger { display: none; flex-direction: column; gap: 5px; - width: 32px; - padding: 4px; + background: none; + border: none; cursor: pointer; + padding: var(--s-2); } .bb-hamburger span { display: block; - height: 1.5px; - background: var(--bb-white); - transition: transform var(--d-base) var(--ease), - opacity var(--d-base) var(--ease), - width var(--d-base) var(--ease); + width: 24px; + height: 2px; + background: var(--bb-charcoal); + transition: transform .3s ease, opacity .3s ease; } -.bb-hamburger span:nth-child(3) { width: 70%; } -.bb-hamburger.open span:nth-child(1) { transform: rotate(45deg) translate(5px,5px); } +.bb-hamburger.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); } .bb-hamburger.open span:nth-child(2) { opacity: 0; } -.bb-hamburger.open span:nth-child(3) { transform: rotate(-45deg) translate(4px,-4px); width: 100%; } - -/* Mobile nav overlay */ +.bb-hamburger.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } +/* Mobile nav drawer */ .bb-mobile-nav { display: none; position: fixed; - inset: 0; - background: var(--bb-void); + top: var(--nav-height); + right: 0; + bottom: 0; + width: min(320px, 85vw); + background: var(--bb-cream); + border-left: 1px solid var(--bb-line); + transform: translateX(100%); + transition: transform .35s ease; z-index: 99; - flex-direction: column; - align-items: center; - justify-content: flex-start; - gap: var(--s-6); - padding: 100px var(--s-6) var(--s-12); overflow-y: auto; - opacity: 0; - pointer-events: none; - transition: opacity var(--d-base) var(--ease); -} -.bb-mobile-nav.open { - display: flex; - opacity: 1; - pointer-events: all; + padding: var(--s-8) var(--s-6); } +.bb-mobile-nav.open { transform: none; } +.bb-mobile-nav ul { list-style: none; } .bb-mobile-nav a { - font-size: var(--t-2xl); - font-family: var(--font-display); - font-style: italic; - font-weight: var(--w-semi); - color: var(--bb-white); - letter-spacing: -0.01em; -} -.bb-mobile-nav a:hover { color: var(--bb-ice); } -.mobile-service-links { - display: flex; - flex-direction: column; - align-items: center; - gap: var(--s-3); -} -.mobile-service-links a { - font-size: var(--t-base) !important; - font-family: var(--font-body) !important; - font-weight: var(--w-medium) !important; - font-style: normal !important; - color: var(--bb-white-70) !important; -} - -/* ─── Hero ───────────────────────────────────────────────── */ -.bb-sec-hero { - position: relative; - min-height: 100svh; - display: flex; - align-items: center; - background: #030810; - overflow: hidden; - isolation: isolate; -} - -/* Ghost word parallax */ -.ghost-word { - position: absolute; - left: -4vw; - top: 50%; - transform: translateY(-50%); - font-family: var(--font-display); - font-style: italic; - font-weight: var(--w-bold); - font-size: clamp(14rem, 30vw, 30vw); - color: var(--bb-white); - opacity: 0.04; - line-height: 0.85; - pointer-events: none; - user-select: none; - white-space: nowrap; - z-index: 0; - will-change: transform; -} - -/* Decorative number */ -.hero-deco-num { - position: absolute; - right: var(--gutter); - bottom: 10%; - font-family: var(--font-display); - font-style: italic; - font-size: clamp(6rem, 12vw, 14rem); - font-weight: var(--w-bold); - color: var(--bb-white); - opacity: 0.06; - line-height: 1; - pointer-events: none; - user-select: none; - z-index: 0; -} - -.hero-inner { - position: relative; - z-index: 2; - padding: 160px 0 120px; - width: 100%; -} -.hero-content { - max-width: 55%; -} - -.hero-eyebrow { - font-family: var(--font-body); - font-size: var(--t-xs); - font-weight: var(--w-medium); - letter-spacing: 0.22em; + display: block; + padding: var(--s-4) 0; + font-size: var(--nav-link-size); + letter-spacing: var(--nav-tracking); text-transform: uppercase; - color: var(--bb-electric); - margin-bottom: var(--s-6); - display: block; -} - -.hero-h1 { - font-family: var(--font-display); - font-style: italic; - font-size: var(--t-hero); - font-weight: var(--w-bold); - line-height: 1.0; - letter-spacing: -0.02em; - color: var(--bb-white); - margin-bottom: var(--s-6); -} -.hero-h1 .word { - display: inline-block; - opacity: 0; - transform: translateY(40px); - transition: opacity 800ms cubic-bezier(0.16, 1, 0.3, 1), - transform 800ms cubic-bezier(0.16, 1, 0.3, 1); -} -.hero-h1.revealed .word { opacity: 1; transform: none; } - -.hero-sub { - font-size: clamp(var(--t-base), 1.4vw, var(--t-lg)); - line-height: 1.7; - color: var(--bb-white-70); - max-width: 520px; - margin-bottom: var(--s-10); -} -.js .hero-sub { - opacity: 0; - transform: translateY(20px); - transition: opacity 600ms cubic-bezier(0.16, 1, 0.3, 1), - transform 600ms cubic-bezier(0.16, 1, 0.3, 1); -} -.js .hero-sub.revealed { opacity: 1; transform: none; } - -.hero-ctas { - display: flex; - align-items: center; - gap: var(--s-4); - flex-wrap: wrap; - margin-bottom: var(--s-12); -} - -/* Breath pulse dot */ -.hero-pulse-wrap { - display: flex; - align-items: center; - gap: var(--s-3); -} -.hero-pulse-dot { - display: block; - width: 10px; - height: 10px; - border-radius: 50%; - background: var(--bb-electric); - box-shadow: 0 0 12px var(--bb-glow); - animation: breath-pulse 2s var(--ease) infinite; -} -@keyframes breath-pulse { - 0%, 100% { transform: scale(1); opacity: 0.8; } - 50% { transform: scale(1.4); opacity: 1; } -} - -/* ─── Marquee / Social proof ──────────────────────────────── */ -.bb-sec-marquee { - background: #060D1A; - padding: var(--s-8) 0; - border-top: 1px solid var(--bb-line); + font-family: 'Fraunces', serif; + color: var(--bb-charcoal); + text-decoration: none; border-bottom: 1px solid var(--bb-line); - overflow: hidden; - position: relative; - z-index: 1; } -.marquee-eyebrow { - text-align: center; - font-size: var(--t-xs); - font-weight: var(--w-semi); - letter-spacing: 0.22em; - text-transform: uppercase; - color: var(--bb-white-40); - margin-bottom: var(--s-5); -} -.marquee-track-wrap { - overflow: hidden; -} -.marquee-track-wrap:hover .marquee-track { animation-play-state: paused; } -.marquee-track { +.bb-mobile-nav a:hover { color: var(--bb-terracotta); } +.bb-mobile-nav .bb-mobile-nav__sub { padding-left: var(--s-4); } +.bb-mobile-nav .bb-mobile-nav__sub a { font-size: var(--t-xs); color: var(--bb-ink); } + +/* Hero */ +.bb-hero { + min-height: var(--hero-min-height); display: flex; align-items: center; - gap: var(--s-6); - white-space: nowrap; - animation: marquee-scroll 30s linear infinite; - width: max-content; -} -.marquee-track span { - font-size: var(--t-sm); - font-weight: var(--w-medium); - color: var(--bb-white-40); - letter-spacing: 0.06em; - text-transform: uppercase; - flex-shrink: 0; -} -.marquee-dot { - color: var(--bb-electric) !important; - opacity: 0.5; -} -@keyframes marquee-scroll { - 0% { transform: translateX(0); } - 100% { transform: translateX(-50%); } -} - -/* ─── Philosophy ─────────────────────────────────────────── */ -.bb-sec-philosophy { - background: #0B1428; - padding: var(--s-30) 0; position: relative; - z-index: 1; + overflow: hidden; + margin-bottom: var(--hero-margin-bottom); } -.bb-sec-philosophy .section-label { margin-bottom: var(--s-10); } - -.philosophy-grid { - display: grid; - grid-template-columns: 1fr auto 1fr; - gap: clamp(32px, 5vw, 80px); - align-items: start; +.bb-hero__media { position: absolute; inset: 0; z-index: -1; } +.bb-hero__media img { width: 100%; height: 100%; object-fit: cover; } +.bb-hero__media::after { + content: ''; + position: absolute; + inset: 0; + background: linear-gradient(to bottom, rgba(42,37,32,.2), rgba(42,37,32,.5)); } -.philosophy-left {} -.philosophy-pullquote { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-2xl), 3vw, var(--t-4xl)); - font-weight: var(--w-semi); - line-height: 1.25; - color: var(--bb-ice); - letter-spacing: -0.01em; -} - -/* Animated divider line */ -.philosophy-divider { - width: 1px; - background: var(--bb-electric); - height: 100%; - min-height: 220px; - transform-origin: top center; - transform: scaleY(0); - transition: transform 900ms var(--ease-expo); - opacity: 0.35; - align-self: stretch; -} -.philosophy-divider.in-view { transform: scaleY(1); } - -.philosophy-right { - display: flex; - flex-direction: column; - gap: var(--s-5); -} -.philosophy-right p { - font-size: var(--t-base); - line-height: 1.8; - color: var(--bb-white-70); -} - -/* ─── Meet Big Joe ───────────────────────────────────────── */ -.bb-sec-bigjoe { - background: #0D1B3E; - padding: var(--s-30) 0; +.bb-hero__content { position: relative; - z-index: 1; + color: var(--bb-cream); + max-width: 900px; + padding: 0 var(--container-padding); } -.bigjoe-grid { - display: grid; - grid-template-columns: 0.65fr 1fr; - gap: clamp(40px, 6vw, 100px); - align-items: start; +.bb-hero__title { + font-size: var(--t-hero); + font-weight: var(--w-light); + line-height: var(--lh-heading); + letter-spacing: var(--hero-tracking); } -/* Portrait placeholder */ -.bigjoe-portrait { - aspect-ratio: 3/4; - background: var(--bb-navy-lift); - border-radius: var(--r-lg); - display: flex; +/* Image statement */ +.bb-image-statement { + display: grid; + grid-template-columns: 1fr; + gap: var(--s-16); align-items: center; - justify-content: center; - flex-shrink: 0; } -.bigjoe-portrait-name { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-2xl), 4vw, var(--t-4xl)); - font-weight: var(--w-bold); - color: var(--bb-electric); - letter-spacing: 0.04em; +.bb-image-statement__img img { width: 100%; height: auto; display: block; } + +/* Reveal: hidden only when JS is active; visible by default for no-JS / screenshots */ +html.js .bb-reveal { opacity: 0; transform: translateY(20px); transition: opacity .8s ease, transform .8s ease; } +html.js .bb-reveal--in { opacity: 1; transform: none; } +@media (prefers-reduced-motion: reduce) { + html.js .bb-reveal { opacity: 1; transform: none; transition: none; } } -.bigjoe-content { display: flex; flex-direction: column; gap: var(--s-6); } -.bigjoe-h2 { - font-family: var(--font-display); - font-size: clamp(3rem, 5vw, 5rem); - font-weight: var(--w-bold); - line-height: 1.0; - letter-spacing: -0.02em; - color: var(--bb-white); +/* Footer */ +.bb-footer { + background: var(--bb-charcoal); + color: var(--bb-cream); + padding: var(--s-24) 0 var(--s-12); } -.bigjoe-h2 em { font-style: italic; } - -.bigjoe-story { - display: flex; - flex-direction: column; - gap: var(--s-3); - padding-left: var(--s-4); - border-left: 2px solid var(--bb-line); -} -.bigjoe-story li, -.bigjoe-story p { - font-size: var(--t-base); - line-height: 1.8; - color: var(--bb-white-70); -} - -/* Stat counters */ -.bigjoe-stats { +.bb-footer__grid { display: grid; - grid-template-columns: repeat(4, 1fr); - gap: var(--s-6); - padding-top: var(--s-6); - border-top: 1px solid var(--bb-line); -} -.bigjoe-stat { - display: flex; - flex-direction: column; - gap: var(--s-1); -} -.bigjoe-stat .stat-num { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-3xl), 3.5vw, var(--t-5xl)); - font-weight: var(--w-bold); - color: var(--bb-electric); - line-height: 1; - letter-spacing: -0.02em; -} -.bigjoe-stat .stat-suffix { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-xl), 2vw, var(--t-3xl)); - font-weight: var(--w-bold); - color: var(--bb-electric); - line-height: 1; -} -.bigjoe-stat .stat-label { - display: block; - font-size: var(--t-xs); - font-weight: var(--w-medium); - letter-spacing: 0.08em; - color: var(--bb-white-40); - text-transform: uppercase; - margin-top: var(--s-1); + grid-template-columns: 2fr 1fr 1fr 1fr; + gap: var(--s-16); } -/* ─── Services ───────────────────────────────────────────── */ -.bb-sec-services { - background: #112244; - padding: var(--s-30) 0; - position: relative; - z-index: 1; -} -.services-h2 { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-3xl), 4vw, var(--t-5xl)); - font-weight: var(--w-bold); - line-height: 1.05; - letter-spacing: -0.015em; - color: var(--bb-white); - margin-bottom: var(--s-12); -} -.services-grid { +.bb-services-grid { display: grid; grid-template-columns: repeat(3, 1fr); - gap: var(--s-5); - margin-bottom: var(--s-10); -} -.service-card { - background: var(--bb-navy-lift); - border-top: 3px solid var(--bb-electric); - border-radius: var(--r-lg); - padding: var(--s-8); - display: flex; - flex-direction: column; - gap: var(--s-4); - transition: transform var(--d-base) var(--ease), - box-shadow var(--d-base) var(--ease), - background var(--d-base) var(--ease); -} -.service-card:hover { - transform: translateY(-4px); - background: var(--bb-navy-mid); - box-shadow: 0 16px 48px rgba(0,0,0,0.3); -} -.service-card-title { - font-family: var(--font-display); - font-size: var(--t-2xl); - font-weight: var(--w-semi); - letter-spacing: -0.005em; - color: var(--bb-white); - line-height: 1.15; -} -.service-card-desc { - font-size: var(--t-sm); - color: var(--bb-white-70); - line-height: 1.7; - flex: 1; -} -.service-card-cta { - display: inline-flex; - align-items: center; - gap: var(--s-2); - font-size: var(--t-xs); - font-weight: var(--w-semi); - letter-spacing: 0.12em; - text-transform: uppercase; - color: var(--bb-bright); - margin-top: var(--s-2); - transition: gap var(--d-base) var(--ease), color var(--d-base) var(--ease); -} -.service-card-cta::after { - content: '\2192'; - font-size: 1em; - transition: transform var(--d-base) var(--ease); -} -.service-card:hover .service-card-cta { gap: var(--s-3); color: var(--bb-ice); } -.service-card:hover .service-card-cta::after { transform: translateX(4px); } - -.services-secondary-links { - display: flex; - align-items: center; gap: var(--s-8); - padding-top: var(--s-6); - border-top: 1px solid var(--bb-line); -} -.services-secondary-links a { - font-size: var(--t-sm); - font-weight: var(--w-medium); - color: var(--bb-white-40); - letter-spacing: 0.04em; - transition: color var(--d-base) var(--ease); -} -.services-secondary-links a:hover { color: var(--bb-white); } - -/* ─── Global Reach ───────────────────────────────────────── */ -.bb-sec-global { - background: #1A3260; - padding: var(--s-30) 0; - position: relative; - z-index: 1; - overflow: hidden; -} -.global-h2 { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-3xl), 4vw, var(--t-5xl)); - font-weight: var(--w-bold); - line-height: 1.05; - letter-spacing: -0.015em; - color: var(--bb-white); - margin-bottom: var(--s-8); - max-width: 700px; -} -.global-countries { - font-size: clamp(var(--t-base), 1.6vw, var(--t-xl)); - line-height: 1.9; - color: var(--bb-white-40); - max-width: 800px; - margin-bottom: var(--s-10); -} -.global-cta {} - -/* ─── Testimonials ───────────────────────────────────────── */ -.bb-sec-testimonials { - background: #1E3A72; - padding: var(--s-30) 0; - position: relative; - z-index: 1; -} -.testimonials-grid { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: var(--s-5); margin-top: var(--s-8); } -.testimonial-card { - background: var(--bb-navy-lift); - border-left: 3px solid var(--bb-electric); - border-radius: var(--r-md); - padding: var(--s-8); - display: flex; - flex-direction: column; - gap: var(--s-5); -} -.testimonial-quote { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-lg), 1.5vw, var(--t-xl)); - font-weight: var(--w-semi); - line-height: 1.45; - color: var(--bb-white); - letter-spacing: -0.005em; -} -.testimonial-attr { - font-size: var(--t-sm); - color: var(--bb-white-40); - letter-spacing: 0.04em; - margin-top: auto; -} - -/* ─── CTA Close ──────────────────────────────────────────── */ -.bb-sec-cta { - background: #1B6FD8; - padding: var(--s-30) 0; - text-align: center; - position: relative; - z-index: 1; - overflow: hidden; -} -.cta-h2 { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-3xl), 4.5vw, var(--t-5xl)); - font-weight: var(--w-bold); - line-height: 1.05; - letter-spacing: -0.015em; - color: var(--bb-white); - margin-bottom: var(--s-4); - margin-top: 0; -} -.cta-sub { - font-size: var(--t-lg); - line-height: 1.7; - color: rgba(255,255,255,0.80); - margin-bottom: var(--s-10); -} -.cta-actions { - display: flex; - align-items: center; - justify-content: center; - gap: var(--s-4); - flex-wrap: wrap; - margin-bottom: var(--s-6); -} -.cta-contact { - font-size: var(--t-sm); - color: rgba(255,255,255,0.65); - letter-spacing: 0.04em; -} - -/* ─── Footer ─────────────────────────────────────────────── */ -.bb-footer { - background: #030810; - padding: var(--s-20) 0 var(--s-10); - color: var(--bb-white-70); - position: relative; - z-index: 1; - border-top: 1px solid var(--bb-line); -} -.footer-top { - display: grid; - grid-template-columns: 1.6fr 1fr 1fr 1fr; - gap: var(--s-12); - margin-bottom: var(--s-16); -} -.footer-brand { - display: flex; - flex-direction: column; - gap: var(--s-4); -} -.footer-logo-text .bb-logo-name { color: var(--bb-white); } -.footer-logo-text .bb-logo-eyebrow { color: var(--bb-electric); } -.footer-email { - font-size: var(--t-sm); - color: var(--bb-white-40); - letter-spacing: 0.04em; -} -.footer-col-title { - font-size: var(--t-xs); - font-weight: var(--w-semi); - letter-spacing: 0.18em; - text-transform: uppercase; - color: var(--bb-electric); - margin-bottom: var(--s-5); - display: block; -} -.footer-links { +.bb-service-card { display: flex; flex-direction: column; gap: var(--s-3); -} -.footer-links a { - font-size: var(--t-sm); - color: var(--bb-white-40); - transition: color var(--d-base) var(--ease); - line-height: 1.5; -} -.footer-links a:hover { color: var(--bb-white); } -.footer-bottom { - display: flex; - align-items: center; - justify-content: space-between; - gap: var(--s-4); - padding-top: var(--s-8); - border-top: 1px solid rgba(255,255,255,0.08); - flex-wrap: wrap; -} -.footer-copy { - font-size: var(--t-xs); - color: rgba(255,255,255,0.35); - letter-spacing: 0.04em; -} -.footer-legal { display: flex; gap: var(--s-6); } -.footer-legal a { - font-size: var(--t-xs); - color: rgba(255,255,255,0.35); - transition: color var(--d-base) var(--ease); -} -.footer-legal a:hover { color: var(--bb-white); } - -/* ─── Inner page hero (for sub-pages) ────────────────────── */ -.bb-inner-hero { - padding: 148px 0 80px; - background: var(--bb-void); - border-bottom: 1px solid var(--bb-line); -} -.inner-hero-h1 { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-3xl), 5vw, var(--t-5xl)); - font-weight: var(--w-bold); - letter-spacing: -0.015em; - line-height: 1.08; - color: var(--bb-white); - margin-top: var(--s-4); - margin-bottom: var(--s-5); -} -.inner-hero-sub { - font-size: var(--t-lg); - color: var(--bb-white-70); - line-height: 1.75; - max-width: 640px; -} - -/* ─── Content prose (inner pages) ───────────────────────── */ -.bb-content-sec { - padding: var(--s-25) 0; - background: var(--bb-navy); -} -.prose { max-width: 760px; } -.prose h2 { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-xl), 2.8vw, var(--t-3xl)); - font-weight: var(--w-semi); - letter-spacing: -0.01em; - color: var(--bb-white); - margin-top: var(--s-10); - margin-bottom: var(--s-4); -} -.prose p { - font-size: var(--t-base); - line-height: 1.8; - color: var(--bb-white-70); - margin-bottom: var(--s-5); -} -.prose ul { margin-bottom: var(--s-5); padding-left: var(--s-6); list-style: disc; } -.prose li { - font-size: var(--t-base); - line-height: 1.75; - color: var(--bb-white-70); - margin-bottom: var(--s-2); -} - -/* ─── Responsive ─────────────────────────────────────────── */ -@media (max-width: 1024px) { - .services-grid { grid-template-columns: repeat(2, 1fr); } - .testimonials-grid { grid-template-columns: repeat(2, 1fr); } - .footer-top { grid-template-columns: 1fr 1fr; gap: var(--s-10); } - .bigjoe-stats { grid-template-columns: repeat(2, 1fr); } - .philosophy-grid { - grid-template-columns: 1fr; - gap: var(--s-8); - } - .philosophy-divider { - width: 100%; - height: 1px; - min-height: unset; - transform-origin: left center; - transform: scaleX(0); - } - .philosophy-divider.in-view { transform: scaleX(1); } -} - -@media (max-width: 768px) { - :root { --gutter: 22px; } - .bb-nav, .header-cta { display: none; } - .bb-hamburger { display: flex; } - - .hero-content { max-width: 100%; } - .hero-inner { padding: 130px 0 80px; } - .hero-h1 { font-size: clamp(2.8rem, 10vw, 4rem); } - .hero-deco-num { display: none; } - - .bigjoe-grid { grid-template-columns: 1fr; gap: var(--s-10); } - .bigjoe-portrait { max-height: 320px; } - .bigjoe-stats { grid-template-columns: repeat(2, 1fr); } - - .services-grid { grid-template-columns: 1fr; } - - .testimonials-grid { grid-template-columns: 1fr; } - - .footer-top { grid-template-columns: 1fr; gap: var(--s-8); } - .footer-bottom { flex-direction: column; align-items: flex-start; } -} - -@media (max-width: 480px) { - .hero-ctas { flex-direction: column; align-items: stretch; } - .hero-ctas .btn { justify-content: center; } - .cta-actions { flex-direction: column; align-items: stretch; } - .cta-actions .btn { justify-content: center; } - .services-secondary-links { flex-direction: column; gap: var(--s-3); } - .bigjoe-stats { grid-template-columns: repeat(2, 1fr); gap: var(--s-4); } -} - -/* ─── New sections border-top ────────────────────────────── */ -.bb-sec-science, -.bb-sec-gallery { - border-top: 1px solid rgba(74, 159, 232, 0.08); -} - -/* ─── Logo mark ──────────────────────────────────────────── */ -.nav-logo-mark { - width: 36px; - height: 36px; - object-fit: contain; - flex-shrink: 0; - display: block; -} -.footer-logo-wrap { - display: flex; - align-items: center; - gap: var(--s-3); -} -.footer-logo-mark { - width: 30px; - height: 30px; - object-fit: contain; - flex-shrink: 0; - opacity: 0.85; -} - -/* ─── Big Joe portrait — real image ─────────────────────── */ -.bigjoe-portrait { - aspect-ratio: 3/4; - border-radius: var(--r-lg); - overflow: hidden; - background: var(--bb-navy-lift); - flex-shrink: 0; - display: block; -} -.bigjoe-portrait-img { - width: 100%; - height: 100%; - object-fit: cover; - object-position: center top; - display: block; -} - -/* ─── Gold stat accent ───────────────────────────────────── */ -.bigjoe-stat .stat-num, -.bigjoe-stat .stat-suffix { - color: var(--bb-gold); -} - -/* ─── Science section ────────────────────────────────────── */ -.bb-sec-science { - background: #060D1A; - padding: var(--s-30) 0; - position: relative; - z-index: 1; -} -.science-h2 { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-3xl), 4vw, var(--t-5xl)); - font-weight: var(--w-bold); - line-height: 1.05; - letter-spacing: -0.015em; - color: var(--bb-white); - margin-bottom: var(--s-12); - max-width: 600px; -} -.science-grid { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: var(--s-6); -} -.science-card { - background: rgba(255,255,255,0.04); - border: 1px solid rgba(255,255,255,0.06); - border-radius: var(--r-lg); padding: var(--s-8); - display: flex; - flex-direction: column; - gap: var(--s-4); - transition: background var(--d-base) var(--ease), border-color var(--d-base) var(--ease); + border: 1px solid var(--bb-line); + background: var(--bb-cream); + color: inherit; + text-decoration: none; + transition: border-color .2s ease, transform .2s ease; } -.science-card:hover { - background: rgba(255,255,255,0.07); - border-color: var(--bb-gold-glow); -} -.sci-num { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-3xl), 3vw, var(--t-4xl)); - font-weight: var(--w-bold); - color: var(--bb-gold); - line-height: 1; -} -.sci-title { - font-family: var(--font-display); +.bb-service-card:hover { border-color: var(--bb-terracotta); transform: translateY(-2px); } +.bb-service-card h3 { font-size: var(--t-xl); - font-weight: var(--w-semi); - color: var(--bb-white); - line-height: 1.2; + font-weight: var(--w-light); + color: var(--bb-charcoal); + letter-spacing: -.01em; + margin: 0; } -.sci-body { +.bb-service-card p { font-size: var(--t-sm); - color: var(--bb-white-70); - line-height: 1.75; + color: var(--bb-ink); + line-height: 1.55; + margin: 0; flex: 1; } +.bb-service-card__more { + font-size: var(--t-xs); + letter-spacing: .12em; + text-transform: uppercase; + color: var(--bb-terracotta); + margin-top: var(--s-4); +} -/* ─── In the Room gallery ────────────────────────────────── */ -.bb-sec-gallery { - background: #060D1A; - padding-top: var(--s-30); - padding-bottom: var(--s-30); - position: relative; - z-index: 1; - overflow: hidden; -} -.gallery-h2 { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-3xl), 4vw, var(--t-5xl)); - font-weight: var(--w-bold); - line-height: 1.05; - letter-spacing: -0.015em; - color: var(--bb-white); - margin-bottom: var(--s-10); -} -.gallery-track-wrap { - overflow-x: auto; - overflow-y: hidden; - cursor: grab; - scrollbar-width: none; - -ms-overflow-style: none; - padding: 0 var(--gutter) var(--s-4); -} -.gallery-track-wrap::-webkit-scrollbar { display: none; } -.gallery-track-wrap.dragging { cursor: grabbing; user-select: none; } -.gallery-track { - display: flex; - gap: var(--s-5); - width: max-content; -} -.gallery-item { - flex-shrink: 0; - width: clamp(260px, 32vw, 480px); - aspect-ratio: 4/3; - border-radius: var(--r-lg); - overflow: hidden; - background: var(--bb-navy-lift); -} -.gallery-item img { - width: 100%; - height: 100%; - object-fit: cover; - pointer-events: none; - transition: transform 600ms var(--ease); - display: block; -} -.gallery-item:hover img { transform: scale(1.04); } - -/* ─── Two-path CTA ───────────────────────────────────────── */ -.cta-paths { +.bb-events-grid { display: grid; - grid-template-columns: 1fr auto 1fr; - gap: clamp(32px, 5vw, 80px); - align-items: center; - margin-top: var(--s-10); - margin-bottom: var(--s-8); - text-align: left; + grid-template-columns: repeat(3, 1fr); + gap: var(--s-8); + margin-top: var(--s-8); } -.cta-path { +.bb-event-card { display: flex; flex-direction: column; - gap: var(--s-5); + background: var(--bb-cream); + border: 1px solid var(--bb-line); + overflow: hidden; + transition: border-color .2s ease, transform .2s ease; } -.cta-path-label { +.bb-event-card:hover { border-color: var(--bb-terracotta); transform: translateY(-2px); } +.bb-event-card__media { + aspect-ratio: 16 / 10; + background-size: cover; + background-position: center; + background-color: var(--bb-oat); +} +.bb-event-card__body { display: flex; flex-direction: column; gap: var(--s-3); padding: var(--s-6); } +.bb-event-card__body h3 { font-size: var(--t-lg); font-weight: var(--w-light); color: var(--bb-charcoal); letter-spacing: -.01em; margin: 0; } +.bb-event-card__meta { font-size: var(--t-xs); letter-spacing: .08em; text-transform: uppercase; color: var(--bb-ink); margin: 0; } +.bb-event-card__blurb { font-size: var(--t-sm); color: var(--bb-ink); line-height: 1.55; margin: 0; flex: 1; } +.bb-event-card__more { + align-self: flex-start; + background: transparent; + border: 0; + font-family: inherit; font-size: var(--t-xs); - font-weight: var(--w-semi); - letter-spacing: 0.18em; + letter-spacing: .12em; text-transform: uppercase; - color: rgba(255,255,255,0.55); + color: var(--bb-terracotta); + cursor: pointer; + padding: 0; + margin-top: var(--s-2); } -.cta-path-title { - font-family: var(--font-display); - font-style: italic; - font-size: clamp(var(--t-xl), 2.2vw, var(--t-3xl)); - font-weight: var(--w-semi); - line-height: 1.2; - color: var(--bb-white); - letter-spacing: -0.01em; +.bb-event-card__more:hover { text-decoration: underline; } + +.bb-slider { position: relative; display: flex; align-items: center; gap: var(--s-4); } +.bb-slider__track { + display: flex; + gap: var(--s-6); + overflow-x: auto; + scroll-snap-type: x mandatory; + scroll-behavior: smooth; + padding-bottom: var(--s-4); + flex: 1; + scrollbar-width: thin; } -.cta-path-divider { - width: 1px; - height: 160px; - background: rgba(255,255,255,0.20); - align-self: center; +.bb-slide { flex: 0 0 clamp(280px, 32vw, 360px); scroll-snap-align: start; } +.bb-slider__btn { + background: var(--bb-cream); + border: 1px solid var(--bb-line); + color: var(--bb-charcoal); + width: 44px; + height: 44px; + border-radius: 50%; + cursor: pointer; + font-size: var(--t-base); flex-shrink: 0; + transition: border-color .2s ease, color .2s ease; } +.bb-slider__btn:hover { border-color: var(--bb-terracotta); color: var(--bb-terracotta); } -/* ─── Responsive additions ───────────────────────────────── */ -@media (max-width: 1024px) { - .science-grid { grid-template-columns: repeat(2, 1fr); } +.bb-event-modal { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: var(--s-6); } +.bb-event-modal[hidden] { display: none; } +.bb-event-modal__backdrop { position: absolute; inset: 0; background: rgba(20,15,10,.6); } +.bb-event-modal__panel { + position: relative; + background: var(--bb-cream); + max-width: 560px; + width: 100%; + max-height: 90vh; + overflow-y: auto; + padding: var(--s-10); } +.bb-event-modal__close { + position: absolute; + top: var(--s-3); + right: var(--s-4); + background: transparent; + border: 0; + font-size: 1.75rem; + line-height: 1; + cursor: pointer; + color: var(--bb-ink); +} +.bb-event-modal__hero { aspect-ratio: 16 / 9; background-size: cover; background-position: center; margin-bottom: var(--s-6); } +.bb-event-modal__panel h2 { font-size: var(--t-2xl); font-weight: var(--w-light); margin: var(--s-3) 0 var(--s-4); color: var(--bb-charcoal); } +.bb-event-modal__meta { font-size: var(--t-xs); letter-spacing: .1em; text-transform: uppercase; color: var(--bb-ink); margin-bottom: var(--s-4); } +.bb-event-modal__blurb { font-size: var(--t-base); color: var(--bb-ink); line-height: 1.6; margin-bottom: var(--s-6); } +/* Responsive */ +@media (max-width: 960px) { + .bb-services-grid { grid-template-columns: repeat(2, 1fr); } + .bb-events-grid { grid-template-columns: repeat(2, 1fr); } +} @media (max-width: 768px) { - .science-grid { grid-template-columns: 1fr; } - .cta-paths { - grid-template-columns: 1fr; - gap: var(--s-8); - text-align: center; - } - .cta-path-divider { width: 100%; height: 1px; } - .gallery-item { width: clamp(220px, 75vw, 320px); } + .bb-nav__links { display: none; } + .bb-hamburger { display: flex; } + .bb-mobile-nav { display: block; } + .bb-footer__grid { grid-template-columns: 1fr; } + .bb-services-grid { grid-template-columns: 1fr; } } + diff --git a/src/assets/css/tokens.css b/src/assets/css/tokens.css old mode 100644 new mode 100755 index f2afad1..cfadc66 --- a/src/assets/css/tokens.css +++ b/src/assets/css/tokens.css @@ -1,102 +1,77 @@ :root { - /* Big Breath — Navy / Electric Blue palette (from logo, 2026-05-15) */ - - /* Base — dark foundation */ - --bb-void: #060D1A; - --bb-navy: #0B1428; - --bb-navy-mid: #0D1B3E; - --bb-navy-lift: #112244; - - /* Energy — electric blue (particle layer, accent) */ - --bb-electric: #1B6FD8; - --bb-bright: #4A9FE8; - --bb-ice: #6AB4F5; - --bb-mist: #A0C8FF; - - /* Foreground */ - --bb-white: #FFFFFF; - --bb-white-70: rgba(255, 255, 255, 0.70); - --bb-white-40: rgba(255, 255, 255, 0.40); - --bb-white-10: rgba(255, 255, 255, 0.08); - - /* Gold — brand accent from pitch deck */ - --bb-gold: #D4A855; - --bb-gold-glow: rgba(212, 168, 85, 0.25); - - /* Utility */ - --bb-line: rgba(74, 159, 232, 0.20); - --bb-glow: rgba(27, 111, 216, 0.35); - - /* Semantic aliases */ - --color-bg: var(--bb-navy); - --color-bg-deep: var(--bb-void); - --color-bg-lift: var(--bb-navy-mid); - --color-accent: var(--bb-electric); - --color-accent-h: var(--bb-bright); - --color-text: var(--bb-white); - --color-text-soft:var(--bb-white-70); - --color-text-mute:var(--bb-white-40); - --color-border: var(--bb-line); - - /* Type stack */ - --font-display: 'Cormorant Garamond', Georgia, 'Times New Roman', serif; - --font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; - - --w-normal: 400; - --w-medium: 500; - --w-semi: 600; - --w-bold: 700; + /* Palette */ + --bb-cream: #F2EADC; + --bb-oat: #E8DCC8; + --bb-sand: #D9C9AE; + --bb-terracotta: #B85937; + --bb-amber: #C8843E; + --bb-sage: #7A8C4E; + --bb-charcoal: #2A2520; + --bb-ink: #4A3F35; + --bb-line: #C9B89A; /* Type scale */ - --t-xs: 0.6875rem; - --t-sm: 0.8125rem; + --t-xs: .75rem; + --t-sm: .875rem; --t-base: 1rem; - --t-lg: 1.125rem; - --t-xl: 1.375rem; - --t-2xl: 1.75rem; - --t-3xl: 2.25rem; - --t-4xl: 2.875rem; - --t-5xl: 3.75rem; - --t-6xl: 4.75rem; - --t-hero: clamp(3.5rem, 8vw, 7rem); + --t-lg: 1.25rem; + --t-xl: 1.625rem; + --t-2xl: 2.125rem; + --t-3xl: 2.875rem; + --t-4xl: 3.75rem; + --t-5xl: 5rem; + --t-6xl: 6.5rem; - /* Spacing (8px grid) */ - --s-1: 4px; - --s-2: 8px; - --s-3: 12px; - --s-4: 16px; - --s-5: 20px; - --s-6: 24px; - --s-8: 32px; - --s-10: 40px; - --s-12: 48px; - --s-16: 64px; - --s-20: 80px; - --s-25: 100px; - --s-30: 120px; + /* Weights */ + --w-light: 300; + --w-reg: 400; + --w-med: 500; + --w-semi: 600; - /* Layout */ - --max-w: 1200px; - --gutter: clamp(24px, 5vw, 80px); - --col-gap: clamp(16px, 2.5vw, 40px); + /* Spacing */ + --s-1: .25rem; + --s-2: .5rem; + --s-3: .75rem; + --s-4: 1rem; + --s-5: 1.25rem; + --s-6: 1.5rem; + --s-8: 2rem; + --s-10: 2.5rem; + --s-12: 3rem; + --s-16: 4rem; + --s-20: 5rem; + --s-24: 6rem; - /* Easing */ - --ease: cubic-bezier(0.4, 0, 0.2, 1); - --ease-out: cubic-bezier(0, 0, 0.2, 1); - --ease-in: cubic-bezier(0.4, 0, 1, 1); - --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); - --ease-expo: cubic-bezier(0.16, 1, 0.3, 1); + /* Section padding */ + --pad-section: clamp(4rem, 7vw, 6rem); - /* Duration */ - --d-fast: 150ms; - --d-base: 300ms; - --d-slow: 600ms; - --d-slower: 900ms; - --d-cinematic: 1200ms; + /* Hero */ + --hero-min-height: 100svh; + --hero-margin-bottom: clamp(3rem, 8vw, 8rem); - /* Radius */ - --r-sm: 6px; - --r-md: 12px; - --r-lg: 20px; - --r-pill: 999px; + /* Hero type */ + --t-hero: clamp(2.75rem, 5.5vw, 4.5rem); + --hero-tracking: -0.03em; + + /* Heading type */ + --t-h2: clamp(1.75rem, 3vw, 2.25rem); + --lh-heading: 1.1; + --lh-body: 1.55; + + /* Buttons */ + --btn-tracking: 0.08em; + + /* Navigation */ + --nav-height: 72px; + --nav-link-size: 0.8125rem; + --nav-tracking: 0.12em; + + /* Containers */ + --container-wide: 1360px; + --container-narrow: 520px; + --container-padding: clamp(1.5rem, 4vw, 3rem); + + /* Eyebrow */ + --t-eyebrow: 0.6875rem; + --eyebrow-tracking: 0.18em; } diff --git a/src/assets/images/bigjoe-1.webp b/src/assets/images/bigjoe-1.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/bigjoe-2.webp b/src/assets/images/bigjoe-2.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/bigjoe-3.webp b/src/assets/images/bigjoe-3.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/bigjoe-4.webp b/src/assets/images/bigjoe-4.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/bigjoe-5.webp b/src/assets/images/bigjoe-5.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/bigjoe-6.webp b/src/assets/images/bigjoe-6.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/bigjoe-about-hero.webp b/src/assets/images/bigjoe-about-hero.webp new file mode 100755 index 0000000..94badb6 Binary files /dev/null and b/src/assets/images/bigjoe-about-hero.webp differ diff --git a/src/assets/images/bigjoe-action-1.webp b/src/assets/images/bigjoe-action-1.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/bigjoe-action-2.webp b/src/assets/images/bigjoe-action-2.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/gallery/practice-1.webp b/src/assets/images/gallery/practice-1.webp new file mode 100755 index 0000000..d3d0329 Binary files /dev/null and b/src/assets/images/gallery/practice-1.webp differ diff --git a/src/assets/images/gallery/practice-2.webp b/src/assets/images/gallery/practice-2.webp new file mode 100755 index 0000000..e89e85e Binary files /dev/null and b/src/assets/images/gallery/practice-2.webp differ diff --git a/src/assets/images/gallery/practice-3.webp b/src/assets/images/gallery/practice-3.webp new file mode 100755 index 0000000..6aec3a6 Binary files /dev/null and b/src/assets/images/gallery/practice-3.webp differ diff --git a/src/assets/images/gallery/practice-4.webp b/src/assets/images/gallery/practice-4.webp new file mode 100755 index 0000000..25f4bcc Binary files /dev/null and b/src/assets/images/gallery/practice-4.webp differ diff --git a/src/assets/images/gallery/practice-5.webp b/src/assets/images/gallery/practice-5.webp new file mode 100755 index 0000000..50e513a Binary files /dev/null and b/src/assets/images/gallery/practice-5.webp differ diff --git a/src/assets/images/gallery/practice-6.webp b/src/assets/images/gallery/practice-6.webp new file mode 100755 index 0000000..531c37f Binary files /dev/null and b/src/assets/images/gallery/practice-6.webp differ diff --git a/src/assets/images/gallery/practitioner-1.webp b/src/assets/images/gallery/practitioner-1.webp new file mode 100755 index 0000000..f7ef000 Binary files /dev/null and b/src/assets/images/gallery/practitioner-1.webp differ diff --git a/src/assets/images/gallery/practitioner-2.webp b/src/assets/images/gallery/practitioner-2.webp new file mode 100755 index 0000000..f308c8c Binary files /dev/null and b/src/assets/images/gallery/practitioner-2.webp differ diff --git a/src/assets/images/gallery/practitioner-3.webp b/src/assets/images/gallery/practitioner-3.webp new file mode 100755 index 0000000..e1c4974 Binary files /dev/null and b/src/assets/images/gallery/practitioner-3.webp differ diff --git a/src/assets/images/gallery/practitioner-4.webp b/src/assets/images/gallery/practitioner-4.webp new file mode 100755 index 0000000..ce4f7e5 Binary files /dev/null and b/src/assets/images/gallery/practitioner-4.webp differ diff --git a/src/assets/images/gallery/practitioner-5.webp b/src/assets/images/gallery/practitioner-5.webp new file mode 100755 index 0000000..9266f40 Binary files /dev/null and b/src/assets/images/gallery/practitioner-5.webp differ diff --git a/src/assets/images/gallery/practitioner-6.webp b/src/assets/images/gallery/practitioner-6.webp new file mode 100755 index 0000000..d4de84d Binary files /dev/null and b/src/assets/images/gallery/practitioner-6.webp differ diff --git a/src/assets/images/gallery/travel-1.webp b/src/assets/images/gallery/travel-1.webp new file mode 100755 index 0000000..5d3cca8 Binary files /dev/null and b/src/assets/images/gallery/travel-1.webp differ diff --git a/src/assets/images/gallery/travel-2.webp b/src/assets/images/gallery/travel-2.webp new file mode 100755 index 0000000..f72639e Binary files /dev/null and b/src/assets/images/gallery/travel-2.webp differ diff --git a/src/assets/images/gallery/travel-3.webp b/src/assets/images/gallery/travel-3.webp new file mode 100755 index 0000000..3eb515b Binary files /dev/null and b/src/assets/images/gallery/travel-3.webp differ diff --git a/src/assets/images/gallery/travel-4.webp b/src/assets/images/gallery/travel-4.webp new file mode 100755 index 0000000..98ceb7a Binary files /dev/null and b/src/assets/images/gallery/travel-4.webp differ diff --git a/src/assets/images/gallery/travel-5.webp b/src/assets/images/gallery/travel-5.webp new file mode 100755 index 0000000..9661baf Binary files /dev/null and b/src/assets/images/gallery/travel-5.webp differ diff --git a/src/assets/images/gallery/travel-6.webp b/src/assets/images/gallery/travel-6.webp new file mode 100755 index 0000000..2d2a7a3 Binary files /dev/null and b/src/assets/images/gallery/travel-6.webp differ diff --git a/src/assets/images/logo-mark.webp b/src/assets/images/logo-mark.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/logo-outline.webp b/src/assets/images/logo-outline.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/logo-solid.webp b/src/assets/images/logo-solid.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/sessions/session-1.webp b/src/assets/images/sessions/session-1.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/sessions/session-2.webp b/src/assets/images/sessions/session-2.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/sessions/session-3.webp b/src/assets/images/sessions/session-3.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/sessions/session-4.webp b/src/assets/images/sessions/session-4.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/sessions/session-5.webp b/src/assets/images/sessions/session-5.webp old mode 100644 new mode 100755 diff --git a/src/assets/images/sessions/session-6.webp b/src/assets/images/sessions/session-6.webp old mode 100644 new mode 100755 diff --git a/src/assets/js/main.js b/src/assets/js/main.js old mode 100644 new mode 100755 index d63967a..b9ee3fb --- a/src/assets/js/main.js +++ b/src/assets/js/main.js @@ -44,7 +44,7 @@ document.documentElement.classList.add('js'); ctx.globalAlpha = canvasOpacity; for (const p of particles) { - // Mouse parallax — shift up to 15px toward cursor + // Mouse parallax: shift up to 15px toward cursor const dx = mouse.x - p.x; const dy = mouse.y - p.y; const dist = Math.sqrt(dx * dx + dy * dy); @@ -115,7 +115,7 @@ document.documentElement.classList.add('js'); currentY = window.scrollY; if (!ticking) { requestAnimationFrame(() => { - // Move down slower than content — atmospheric layer + // Move down slower than content: atmospheric layer ghost.style.transform = `translateY(calc(-50% + ${currentY * 0.15}px))`; ticking = false; }); @@ -131,15 +131,18 @@ document.documentElement.classList.add('js'); if (entry.isIntersecting) { const el = entry.target; const delay = parseInt(el.dataset.delay || '0', 10); - setTimeout(() => el.classList.add('in-view'), delay); + setTimeout(() => { + el.classList.add('in-view'); + el.classList.add('bb-reveal--in'); + }, delay); revealObserver.unobserve(el); } }); }, { threshold: 0.10, rootMargin: '0px 0px -40px 0px' }); - document.querySelectorAll('[data-animate]').forEach(el => revealObserver.observe(el)); + document.querySelectorAll('[data-animate], .bb-reveal').forEach(el => revealObserver.observe(el)); - // Philosophy divider line (separate observer — uses scaleY) + // Philosophy divider line (separate observer, uses scaleY) const divider = document.querySelector('.philosophy-divider'); if (divider) { const divObs = new IntersectionObserver((entries) => { diff --git a/src/assets/svg/favicon.svg b/src/assets/svg/favicon.svg old mode 100644 new mode 100755 diff --git a/src/contact/index.html b/src/contact/index.html old mode 100644 new mode 100755 diff --git a/src/index.html b/src/index.html old mode 100644 new mode 100755 diff --git a/src/llms.txt b/src/llms.txt old mode 100644 new mode 100755 diff --git a/src/privacy-policy/index.html b/src/privacy-policy/index.html old mode 100644 new mode 100755 diff --git a/src/robots.txt b/src/robots.txt old mode 100644 new mode 100755 diff --git a/src/services/corporate-wellness/index.html b/src/services/corporate-wellness/index.html old mode 100644 new mode 100755 diff --git a/src/services/group-classes/index.html b/src/services/group-classes/index.html old mode 100644 new mode 100755 diff --git a/src/services/index.html b/src/services/index.html old mode 100644 new mode 100755 diff --git a/src/services/keynotes/index.html b/src/services/keynotes/index.html old mode 100644 new mode 100755 diff --git a/src/services/meditation-breathwork/index.html b/src/services/meditation-breathwork/index.html old mode 100644 new mode 100755 diff --git a/src/services/online/index.html b/src/services/online/index.html old mode 100644 new mode 100755 diff --git a/src/services/private-sessions/index.html b/src/services/private-sessions/index.html old mode 100644 new mode 100755 diff --git a/src/services/retreats/index.html b/src/services/retreats/index.html old mode 100644 new mode 100755 diff --git a/src/sitemap.xml b/src/sitemap.xml old mode 100644 new mode 100755 diff --git a/src/terms-of-service/index.html b/src/terms-of-service/index.html old mode 100644 new mode 100755