🔮 Bold Little Oracle ▸ docs/overnight/blo-relaunch/STATUS.md
updated 2026-07-15

STATUS — blo-relaunch (round 4, overnight 2026-07-15)

Stream: Bold Little Oracle v1.1.0 relaunch (€6.99 lifetime unlock). Four rounds: build → council R1 → rework → council R2 (avg 6.5/10) → final fix pass → round 4 improvement pass (this). Nothing was deployed, posted, submitted, or purchased. All assets live in overnight/blo-relaunch/; app code on branch iap-restore (outer repo head a41c5c8, embedded bold-little-oracle/src head aaeac1c).

Round 4 (overnight 2026-07-15) — 5 gap-closing improvements, all agent-verified

Target gap: staged 33-132 unlocks vs ~175-180 needed for $1000/month-one.

  1. Paywall conversion pass (src aaeac1c, tsc clean — ships inside today’s §B build): “{price} once” anchor with “once” as the largest visual claim (gold, price-size) + “Less than one physical deck.”; the sassy_mode modal now shows the ACTUAL locked value — gentle reading of the on-screen card with the sassy reading of the same card blurred underneath + “flip it to sassy →” pill (fed from base-deck.json); benefit-ordered bullets incl. a third “Forever” row; Restore visible-but-quiet inside the modal; trust line = “No subscription. No games. No tracking. One price, forever.”; CTA “Unlock Forever”. Multiplies every channel; unmeasurable directly (no analytics) — read it off day-10 ASC conversion.
  2. de-DE App Store localization (APP_STORE_LISTING.md §12, both copies + repo committed): German name/subtitle (“Tageskarte mit Biss”)/promo/keywords (100 chars, compound-aware)/full description/What’s New/IAP strings, plus en-GB + en-AU keyword fields as free extra index slots. Paste path = MORNING ACTIONS §C.2b. DE storefront previously matched ~nothing in German despite €4.99 proceeds being the best in any market.
  3. Creator list web-verified (CREATOR-OUTREACH.md): all 20 slots now named, sized, and sourced (Feedspot list dated 2026-07-02 + per-handle checks). Cut for cause: @avalonkisbey 83k, @cuttingcardtarot 148k, @faesighttarot 141k, @8thhouseempath (96k + “no DMs” bio), @hoodheru 104k. Recovered: “char?” = @chartarot 15.4k; fixed @wayhometarot → @bakaraw (the real Bakara Wintner handle). 6-creator bench listed. Human residue: ~12 min (DMs-open check + line-1 personalization), was ~35.
  4. Reddit two-tier plan (new REDDIT-PLAN.md): r/SideProject CONFIRMED link-friendly (2 independent 2026 sources) with the launch-day post fully drafted; r/AppHookup KILLED (its rules exclude always-free/freemium apps — the no-discount decision makes BLO permanently ineligible); karma target corrected 50 → 200 for r/tarot per 2026 enforcement bands; the 4 community posts got per-sub go/no-go checks; r/indieapps + r/iosapps staged as conditionals behind a 10-min logged-in rule check (reddit.com blocks anonymous fetches — honestly deferred, not guessed).
  5. TikTok distribution ×4 (LAUNCH-KIT §1): TT-01 hashtags rebuilt per 2026 volume-pyramid guidance (#witchtok broad + #tarottok/#oraclecards niche + #dailycard/#sassyoracle micro, 5-tag cap) with a 60-sec day-of in-app volume check (exact tag counts aren’t verifiable from outside TikTok — stated, not faked). TT-02 (“pick a card” interactive), TT-03 (duet bait), TT-04 (no-streaks trust) scripted as cuts of the SAME §F recording, Mon/Wed/Fri of approval week, ~10 min CapCut each.

Month-one math after round 4 (details in README): channels 40-151 before conversion uplift (ASO 13-38, TikTok/IG 8-32, Reddit 4-14, others unchanged); with the paywall pass, honest planning range ~45-175, mid-case ~90 unlocks (~€470 net). The $1000 target now sits at the top of the honest range instead of above it. Still requires: videos actually posted, ≥3 creators active, paywall pass actually moving conversion.

Council scores (R1 → R2)

R1 per-persona scores were not persisted in this stream’s files (R1 feedback arrived as prose; only R2 came scored). R2 scores, with what the final pass did about each:

Persona R2 score Must-fixes in R2 Resolved tonight
BRANSON (growth) 7 TT-01/preview unscheduled; creator list half-placeholder; €300-750 gap undecided 3/3 (creator research portion → structured AM workflow)
MACKENZIE (finance/DE-EU) 6 Google Fonts GDPR; no Art. 13 notice / double opt-in step; hardcoded Apple VAT ID; UG-only Impressum; daily-email overpromise 5/5
VEGA (marketing/conversion) 6.5 daily-email overpromise; frame-2 contradiction; creator list unverified + ?ref= promise; no account inventory 4/4
SHADE (UX/design) 6.5 tofu Apple glyph; 7.6MB images; status bars in site shots; frame-2 contradiction 4/4

What was built/fixed in the final pass

Site (site/): - Fonts self-hosted: site/fonts/ — Outfit + Cormorant Garamond variable woff2, latin subset, 116KB total, fonts.css with local @font-face; all fonts.googleapis.com / fonts.gstatic.com references removed from all four pages (GDPR — no third-party request on load). - Images: status bars cropped, resized to 2x display width, converted to WebP — page image weight 7.6MB → ~100KB (hero 46KB, cards 27KB each); og-hero.png (721KB, 640w) kept for OG/Twitter cards; unused intention/settings PNGs deleted. - App Store badge: Apple private-use glyph  replaced with inline Apple-logo SVG in both store-row instances (renders on Android/Windows). - Email capture: promise softened to “a card a day for your first week, then launch news” (matches the 7-day welcome sequence that actually exists); Art. 13 microcopy under the form (“We only send the cards. Unsubscribe anytime. Privacy” → /privacy); success message now says “check your inbox to confirm” (double opt-in). - Voices section heading “Same card.” → “Every card.” (same truthfulness fix as frame 2 — the two site screenshots show different cards). - impressum.html: now ships BOTH entity variants — UG (active) and Einzelunternehmer (commented out). Morning = keep one, fill placeholders.

Media: - frame2-two-voices.html caption “Same card.” → “Every card. Two voices.”; badge de-duplicated to “Written twice, by hand”; frame 2 re-rendered (1284×2778). The current render is now truthful as-is; same-card re-capture is optional polish.

Plans/copy: - LAUNCH-KIT.md: TT-01 scheduled Fri 2026-07-17 12:00 (TikTok + IG Reel) with full copy + slip rule (within 48h of recording, hard stop Mon 07-20); 30s App Store preview attaches to the 1.1.0 submission (or first metadata update — never delays the submission); account-inventory block (IG @boldlittleoracle EXISTS from prior Meta API setup; TikTok + Bluesky created Wed 07-15); weekday label fixes (morning actions are Wed 07-15, POST-06 Thu 07-16); PH maker comment + POST-15 email promise softened; gallery caption updated. - README.md: Decision 5 — numeric Play Store trigger (day 10 post-approval: ≥200 installs AND ≥2% install→unlock → ship Play that week, est. +10-30 unlocks; else hold to week 4 + kill-switch logic; Open Question 3 closed). Decision 6 — email promise = welcome week (daily-forever queue is an optional ~1hr Beehiiv batch build, not a launch blocker). §E: account inventory + “confirm Beehiiv double opt-in” step 0. §F: hard dates, “fast-follow” language removed. §G: Apple VAT ID hardcode (IE6554739H) removed — take it from the actual Apple financial report; added BZSt USt-IdNr application step for the personal-entity case (required for ZM/§18b regardless of §19). Week 1 gained a named “Post TT-01” line. - CREATOR-OUTREACH.md: ?ref= link cut from the offer (KV logger isn’t built; promo-code-per-creator + honor-system 30% is the mechanism); four guessed handles (“mysticmolly?”, “kate.van.horn?”, “abigaileir?”, “char?”) deleted → 16 named creators + 4 hashtag-pick slots; profile-URL column added (constructed, verified by the AM workflow); “recent post to reference” column added (= DM line 1); 2-min-per-creator verification workflow written out (~35 min honest estimate, was “20 min” fiction). - EMAILS.md: step 0 “confirm double opt-in ENABLED”; promise-alignment note.

Month-one revenue math (unchanged from R2 — it was already honest)

Unresolved / needs human or >20 min (logged, not fixed)

  1. Creator verification — ~~35 min~~ done headlessly in round 4 (sizes + existence + niche from dated web sources); residue is ~12 min: DMs-open check + line-1 personalization for the rows marked “[AM]” in CREATOR-OUTREACH.md.
  2. Same-card frame-2 re-capture — optional polish now that the caption is truthful; needs simulator.
  3. Daily-card Beehiiv queue — optional ~1hr batch build (Decision 6); capture copy no longer depends on it.
  4. R1 per-persona scores — not recoverable from stream files; table above notes it.
  5. og-hero.png is 721KB — fine for OG scrapers (not page weight); could be squeezed to ~200KB if anyone cares.
  6. Entity decision (Decision 4) — Joshua-only; both Impressum variants staged.
  7. Everything in MORNING ACTIONS — deploys, ASC, EAS build, sandbox tests, account creation, Beehiiv, BZSt: human-only by design.

MORNING ACTIONS (final order — full click-paths in README.md)

  1. Deploy site/ to the BLO Cloudflare Pages project (pick Impressum variant first; verify /, /privacy, /support, /impressum + the subscribe form; Beehiiv-embed contingency if /api/subscribe 404s). Do this before anything else.
  2. §A — Create the IAP (Non-Consumable, com.unicornland.boldlittleoracle.unlock, €6.99).
  3. §B — eas build + eas submit (branch iap-restore, build 10 — src head aaeac1c, includes the round-4 paywall conversion pass).
  4. §F — Record the two videos TODAY (20s TT-01 source + 30s preview) — hard-dated now. The same 20s source also feeds TT-02/03/04 (scripted, Mon/Wed/Fri approval week).
  5. §C — 1.1.0 in ASC: listing paste, + German localization §12 and en-GB/en-AU keyword slots (§C.2b, ~5 min), 5 frames, preview video (never delay submission for it), select build, submit.
  6. §D — Sandbox: buy / cancel-is-silent / restore / grandfather tests + new paywall UI: “{price} once” renders unclipped, sassy-tease block appears (flipped card + Sassy tap), modal Restore link works.
  7. §E — Account inventory (IG exists; create TikTok + Bluesky @boldlittleoracle); Reddit karma warm-up (target 200, not 50) + 10-min REDDIT-PLAN.md rule check; Beehiiv double opt-in → welcome sequence → Email 1 scheduled; PH listing drafted for Tue 07-28.
  8. §G — DSA trader status, USt-IdNr on file (BZSt application if personal entity), filing-tracker line (VAT ID from Apple’s own invoice).
  9. Fri 07-17 12:00 — post TT-01. Week 1: creator DMs-open check (~12 min, list pre-verified) → 20 DMs; TT-02/03/04 Mon/Wed/Fri.

Improvement Loop (round 5 — distribution + conversion)

New scores: VEGA 8, MACKENZIE 8 — avg 8.0 (up from R2’s 6.5 / 6).

What changed this round: - Ad-disclosure line added to creator outreach (fixed now): the DM template and the follow-up in CREATOR-OUTREACH.md both tell creators to mark any post as ad/Werbung — the free code + 30% commission make it a paid partnership even with “no post required”. Closes the disclosure exposure before the 20 DMs go out. - README §G.4 added (fixed now): outbound 30% creator payouts need an invoice or written payout confirmation (name, country, amount, period); non-DE creator payouts go into § 13b reverse-charge accounting alongside the Apple line in the MIA/CHUG tracker. §G previously covered only the inbound Apple side.

Remaining items (logged, need morning session / device): 1. No channel attribution anywhere — the app has no analytics (by design), creator payouts are honor-system, and every channel URL (site, Reddit, TikTok bio, PH, emails) points at the same bare App Store link. Day-10 you will know total unlocks but not which of the 8 channels produced them, so the Decision-5 Play trigger and week-2 budget allocation run blind. → Zero-code fix: generate Apple App Analytics campaign links (App Store Connect → custom campaign token per channel, ?ppid=/ct= parameters) and use a distinct link per channel in LAUNCH-KIT, CREATOR-OUTREACH, EMAILS, and the site. ~15 min in the morning ASC session, no SDK, no privacy change. 2. DE storefront shows English screenshots — German name/subtitle/description with English caption text on all 5 frames (§12 explicitly notes “EN screenshots OK”). → The frames are HTML templates in media/appstore-frames — translate the 5 caption strings (§12 copy already contains German equivalents: “Ein Deck. Zwei Stimmen.”, “sanft + frech”), re-render, and upload under the de-DE localization in the same §C.2b paste session. ~30 min, no new design work. 3. Paywall UI untested on device — the sassy-tease block in PurchaseModal depends on new cardGentle/cardSassy props fed from index.tsx; the modal is also reachable from entry points that may not pass a card (paywall screen, settings, cold open), and none of this has rendered on a device yet — tsc clean proves types, not layout (“{price} once” clipping at DE string lengths, blur rendering, empty-tease fallback). → Treat §D’s new paywall checks as a submission gate, not a post-submit test: run the simulator pass on de-DE locale + the no-card entry path BEFORE eas submit in §B, and confirm the modal has a designed fallback when cardGentle/cardSassy are absent.