A psychologist found lucky people see things unlucky people miss. We built a tool that tests which one you are.
Live: lucklab.app
Luck Lab is a research platform that maps your "luck profile" across six trainable mechanisms β based on Richard Wiseman's 10-year empirical study and 12 wisdom traditions that independently arrived at the same conclusion: luck is not random. It's a trainable disposition.
An AI oracle named Tyche (Greek goddess of fortune) reads your quiz answers, finds contradictions you didn't see, and writes you a personalised Reading that people describe as "surprisingly specific."
Try it: Take the Reading β 3 minutes, free, no account.
Three tiers, each answering a different question:
| Tier | Price | What it answers |
|---|---|---|
| The Reading | Free | Who am I? β archetype + one tradition tease |
| Archetype Primer | β¬9 | Show me more. β full six-lever scores, tradition essay with real primary source, 7-day practice |
| Tyche's Reading | β¬29 | What's my plan? β personalised 30-day Reading, addressed by name, three tradition deep-dives, daily ritual, + 90-day Return (auto-recalibrated follow-up), + lifetime Synchronicity Journal, + one Gift Reading to send a friend |
Free companion: The Luck Convergence Index β a 12,400-word research essay (36 citations) delivered by email.
Plus 7 long-form research essays (~29,000 words total) unlocking weekly at /research/*.
- Next.js 16 (App Router, React 19, Turbopack)
- TypeScript (strict, Zod validation at API boundaries)
- Tailwind CSS v4 (inline theme, custom design tokens)
- OpenAI β
gpt-4o-minifor free tier,gpt-4ofor paid Reading - Stripe Checkout (hosted β no PCI scope) + webhook for abandoned-cart recovery
- Resend β email delivery, scheduled drip funnel
- Plausible β privacy-first analytics (optional)
- Vercel β hosting, Cron, edge OG images
- No database yet β Stripe session metadata serves as persistence for MVP. Supabase schema prepared in
/supabase/schema.sqlfor when we add Journal + Return + Gift persistence.
cd /Users/mikel/kairos
npm install
cp .env.example .env.local # fill in real keys
npm run dev # http://localhost:3000Without keys the app still runs β Tyche returns deterministic fallback copy and checkout explains what's missing.
With keys configured:
- Tyche narrates Readings with specific reference to the user's inputs + personal context
- Stripe Checkout collects the payment and redirects to
/reading/full?session_id=β¦ - Full AI Reading is generated on that page load (~20β40s)
- Resend fires a 5-step welcome drip on email capture
- Stripe webhook triggers β¬5-off recovery on abandoned checkouts
- Vercel Cron posts weekly social drafts + monthly stats + seasonal campaigns
src/
βββ app/
β βββ page.tsx # landing (5 sections + pricing rail)
β βββ reading/page.tsx # the quiz β intake + 10 inputs (client)
β βββ reading/preview/page.tsx # free result + unlock CTAs (client)
β βββ reading/primer/page.tsx # β¬9 Primer page (server, Stripe-gated)
β βββ reading/full/page.tsx # β¬29 full Reading (server, Stripe-gated)
β βββ research/page.tsx # article index (publish-date gated)
β βββ research/[slug]/page.tsx # article page (SSG, JSON-LD, OG)
β βββ research/[slug]/opengraph-image.tsx # per-article OG image
β βββ convergence-index/page.tsx # the 12,400-word lead magnet (readable + print-to-PDF)
β βββ about/page.tsx # builder-mystic positioning
β βββ privacy/page.tsx # GDPR-compliant privacy policy
β βββ terms/page.tsx # ToS (EU digital-goods consent, 90-day Return)
β βββ opengraph-image.tsx # root OG image (dynamic, edge)
β βββ sitemap.ts # auto-includes published articles
β βββ robots.ts # allows AI crawlers
β βββ not-found.tsx # on-brand 404
β βββ error.tsx # error boundary
β βββ api/
β βββ tyche/read/route.ts # free preview (gpt-4o-mini) + rate-limited
β βββ checkout/route.ts # Stripe Checkout Session (tier: primer | full)
β βββ subscribe/route.ts # email capture + 5-step Resend drip
β βββ stripe/webhook/route.ts # abandoned-cart recovery with β¬5-off promo codes
β βββ cron/
β βββ weekly-social/route.ts # drafts X + LinkedIn posts (Wed 09:00)
β βββ weekly-digest/route.ts # emails subscribers the new essay (Fri 10:00)
β βββ seasonal/route.ts # solstices/equinoxes/NY campaigns
β βββ monthly-stats/route.ts # Stripe revenue report (1st of month)
βββ components/
β βββ Nav.tsx Β· Footer.tsx # layout chrome
β βββ TycheSigil.tsx # brand mark (SVG, iconographic)
β βββ EmailCapture.tsx # Convergence Index opt-in form
β βββ DownloadPdfButton.tsx # print-to-PDF via @media print
βββ lib/
βββ traditions.ts # the 12 traditions + 6 mechanisms (data)
βββ diagnostic.ts # 10 questions, scoring, archetype assignment, birth context
βββ tyche-prompt.ts # Tyche's character + 3 prompt templates (teaser/primer/full)
βββ articles.ts # markdown loader + publish-date gating
βββ answer-codec.ts # compact encode for Stripe metadata
βββ email-templates.ts # 6 styled HTML email templates
βββ rate-limit.ts # in-memory IP bucket limiter
βββ cron-auth.ts # CRON_SECRET verifier
βββ jsonld.ts # Schema.org helpers (Org/Article/Product/FAQ)
βββ analytics.ts # Plausible track() helper, 9 conversion events
βββ supabase.ts # client stubs (enable when schema is applied)
content/
βββ luck-convergence-index.md # 12,400-word lead magnet, 36 citations
βββ articles/ # 7 blog articles, ~29,000 words, YAML frontmatter
βββ how-to-be-luckier.md [pillar, 4,064w]
βββ jung-synchronicity.md [2,801w]
βββ luck-factor-wiseman.md [3,498w]
βββ wu-wei.md [2,872w]
βββ am-i-lucky.md [1,789w β quiz driver]
βββ kairos-meaning.md [2,806w]
βββ amor-fati.md [2,977w]
supabase/
βββ schema.sql # subscribers, readings, journal_entries, gift_codes (when ready)
docs/
βββ PDF-SERVER.md # server-side PDF sketch (Puppeteer on Vercel) for later
MARKETING.md # 8,000-word go-to-market plan with templates
LEARN.md # pedagogical walkthrough of every pattern in the repo
user β /reading β 10 inputs + name (required) + optional birthdate/question
β POST /api/tyche/read (gpt-4o-mini)
β free teaser JSON {archetype, tradition-tease, unlock-prompt}
β /reading/preview β renders teaser + LOCKED visual for scores
β "Unlock β¬9" or "Unlock β¬29"
β POST /api/checkout {tier}
β Stripe hosted checkout
Stripe β pays β redirect β /reading/primer?session_id=X
OR β /reading/full?session_id=X
β server verifies session.payment_status === 'paid'
β decodes answers + personal context from metadata
β calls OpenAI (gpt-4o-mini for Primer, gpt-4o for Full)
β renders the typeset Reading
β "Download as PDF" β @media print β save PDF
Diagnostic answers compact to ~60 bytes and fit comfortably in Stripe's 500-char metadata limit. Personal context fits in another ~120 bytes. We fetch the session back from Stripe on the return URL and regenerate the Reading. This trades a little OpenAI cost (~β¬0.10 per Reading) for zero infrastructure.
Graduation path: the Supabase schema in /supabase/schema.sql adds persistence, journal, 90-day Return automation, and Gift Reading redemption when we want them.
vercel --prodProduction deploy was made April 15 2026 from the main branch β see top of file for URL. Custom domain is the next step: buy kairos.lab (or similar), add to Vercel β Project β Settings β Domains.
Required env vars for a fully live production:
OPENAI_API_KEY=sk-proj-β¦
STRIPE_SECRET_KEY=sk_live_β¦
STRIPE_WEBHOOK_SECRET=whsec_β¦
RESEND_API_KEY=re_β¦
RESEND_AUDIENCE_ID=aud_β¦ # for weekly-digest cron
EMAIL_FROM="Tyche Β· Luck Lab <tyche@kairos.lab>"
NEXT_PUBLIC_APP_URL=https://kairos.lab
NEXT_PUBLIC_PLAUSIBLE_DOMAIN=kairos.lab
CRON_SECRET=<long-random-string>
ADMIN_EMAIL=you@wherever.comOptional (enables Journal/Return/Gift when ready):
NEXT_PUBLIC_SUPABASE_URL=β¦
NEXT_PUBLIC_SUPABASE_ANON_KEY=β¦
SUPABASE_SERVICE_ROLE_KEY=β¦In Stripe Dashboard β Developers β Webhooks, add endpoint https://<your-domain>/api/stripe/webhook, select event checkout.session.expired, copy the signing secret into STRIPE_WEBHOOK_SECRET.
- Platform: Luck Lab
- AI character: Tyche (Greek goddess of fortune)
- Palette: midnight
#0a0a0dΒ· antique gold#c9a961Β· scholar purple#a78bfa - Fonts: Fraunces (display serif), Geist (sans), Geist Mono (accents)
- Voice: calm-scholarly-warm, British English, no woo, no flattery
See /about for the positioning statement β honest mysticism, built carefully.
- Landing page with 4 anchor sections + pricing rail
- Reading flow β 10 inputs + optional personal context (name/birthdate/question)
- Free Tyche teaser + β¬9 Primer + β¬29 full Reading with 90-day Return + Journal + Gift
- 7 weekly-unlocking research articles (~29,000 words)
- Convergence Index lead magnet (~12,400 words, 36 citations, readable + print-to-PDF)
-
/aboutbuilder-mystic page,/privacy,/terms, on-brand 404 + error pages - Email drip funnel (5-step) + abandoned-checkout recovery
- Rate limiting, JSON-LD structured data, dynamic OG images, sitemap, robots
- 4 automation cron routes (weekly social + weekly digest + seasonal + monthly stats)
- Plausible-ready analytics with 9 conversion events
- Deployed to Vercel production
- Custom domain (lucklab.app)
- Claude Sonnet AI + two-pass pipeline
- Premium share cards (6 archetype backgrounds)
- Convergence Index PDF (typeset, 22 pages)
- Supabase β Reading persistence + Journal + 90-day Return
- Server-side PDF rendering (Puppeteer on Vercel)
- Affiliate program (Stripe promo codes)
- Video Reveal cards (Remotion)
docs/
βββ strategy/
β βββ LAUNCH.md β 14-day launch script
β βββ LAUNCH-POSTS.md β copy-paste ready posts (X, Reddit, LinkedIn, HN)
β βββ MARKETING.md β full go-to-market plan (launch β year 1)
β βββ PLAYBOOK.md β reusable blueprint for AI digital products
β βββ SPRINT-10K.md β $10K month-1 revenue plan
β βββ TODAY.md β today's action items
βββ PDF-SERVER.md β server-side PDF rendering sketch
βββ SHARE-CARDS-ROADMAP.md β 4-phase share card upgrade plan
βββ exemplar-yielder-full.md β hand-written 12/10 Reading for prompt calibration
βββ convergence-index.typ β Typst template for PDF generation
βββ convergence-template.typ β Typst cover page template
LEARN.md β pedagogical walkthrough (737 lines, 14 sections)
supabase/schema.sql β DB schema for next phase
luck synchronicity AI-oracle personality-quiz wisdom-traditions Jung Taoism Stoicism Wiseman Kabbalah Buddhism Sufism luck-factor trainable-luck kairotic-profile archetype Claude-Sonnet Next.js Stripe Vercel Tailwind Resend Plausible digital-product SaaS email-funnel conversion-optimization SEO share-cards
Β© 2026 Luck Lab. Built by Mikel Ninh, Berlin. Code: MIT license. Content: all rights reserved.