Skip to content

πŸš€ Publishing Playbook

← Back to Randy’s Library

The Getting Ahead Guidebook β€” Publishing Playbook

Last verified: June 2026 (based on actual screenshots from Randy's submissions)

PRINT-READY PDF
9-page binder-friendly PDF with page numbers, table of contents, and brand styling.
⬇ Download PDF

Last verified: June 2026 (based on actual screenshots from Randy's submissions)

This guide reflects the EXACT click paths in App Store Connect, Google Play Console, and Emergent β€” based on what we've actually seen on your screen. No guessing.


🎯 The Big Picture (do this in order every release)

  1. Bump version & versionCode in app.json (Emergent code)
  2. Click Publish in Emergent β†’ pick platform β†’ wait for build
  3. Download the build file (.ipa for iOS / .aab for Android)
  4. Upload to the appropriate store console
  5. Fill in release notes + submit for review

🍎 PART 1: APPLE / iOS RELEASE

Step 1: Trigger the iOS build in Emergent

  1. Click "Publish" (top-right of Emergent)
  2. Choose "iOS"
  3. The "Confirm details" dialog opens
  4. Verify:
  • App name: The Getting Ahead Guidebook
  • Version name: auto-increments (e.g., 1.1.6 β†’ 1.1.7)
  • Bundle ID: com.thegettingaheadguidebook.app (should be auto-filled)
  1. Click Continue β†’ wait ~15–20 min for build
  2. Emergent uploads the .ipa directly to App Store Connect β†’ Build appears in TestFlight

Step 2: Wait for the build to process in App Store Connect

  • Go to appstoreconnect.apple.com β†’ Apps β†’ The Getting Ahead Guidebook
  • Click TestFlight tab β†’ wait for the new build to finish "Processing" (~10–20 min)
  • Email arrives when ready

Step 3: Create a new version (if you're going from 1.1.5 β†’ 1.1.6)

  1. Click the Distribution tab (top blue bar)
  2. Left sidebar β†’ click "+ iOS App" OR if "1.1.5" already exists in left sidebar, click "Add Platform" OR the "+" at the top of the version list
  3. Enter the version number (e.g., 1.1.6) β†’ click Create

Step 4: Fill in the new version page

On the iOS App Version page, scroll down and fill:

  • "What's New in This Version" β€” type your release notes (e.g., "Bug fixes and performance improvements")
  • Build section β€” click "+" or "Add Build" β†’ select the build you just uploaded
  • In-App Purchases section (if subscriptions changed) β€” click "+" β†’ check both β˜‘οΈ GAG Monthly and β˜‘οΈ GAG Annual
  • All other fields (screenshots, description, keywords) β€” leave as-is unless you're changing them

Step 5: Submit for review

  1. Scroll to the top of the version page
  2. Click the blue "Add for Review" or "Submit to App Review" button (top right)
  3. Answer the export compliance questions (No encryption changes = answer "No")
  4. Confirm β†’ Status changes to 🟑 "Waiting for Review"

Step 6: Wait for Apple

  • 24–48 hours typical (sometimes a few hours)
  • You'll get an email when status changes
  • If 🟒 Approved β†’ app auto-releases (or "Pending Developer Release" if you set manual release)
  • If πŸ”΄ Rejected β†’ check Resolution Center in App Store Connect for the reason

🚨 IAP (Subscription) Setup β€” Only do this ONCE per new subscription product

This is needed only when CREATING new IAP products (gag_monthly_v1, gag_annual_v1, etc.), not on every release. Skip this section if you're not adding/changing IAPs.

A. Go to your IAP product page:

  1. App Store Connect β†’ Apps β†’ The Getting Ahead Guidebook
  2. Left sidebar under MONETIZATION β†’ Subscriptions
  3. Click on your subscription group (e.g., GAG Premium)
  4. Click on the product name (e.g., GAG Annual)

B. Set the price (THIS IS THE TRICKY PART):

  1. On the product page, find "Set Up Availability" link (LEFT side, near top β€” NOT the "+" next to "Subscription Prices")
  2. Click it β†’ "Confirm Upfront Billing" dialog opens
  3. Select United States + your price (e.g., $89.99 for Annual, $9.99 for Monthly)
  4. Click Confirm β†’ price is locked in worldwide

⚠️ The "+" next to "Subscription Prices" only shows Introductory/Promotional Offer options β€” DO NOT use that for the base price.

C. Add Localization (display name + description):

  1. Scroll down to "Localization" section β†’ click "Add Localization"
  2. Select English (U.S.)
  3. Display Name: GAG Annual (or whatever)
  4. Description: Full annual access to The Getting Ahead Guidebook β€” budgeting, ledger, AI receipt scanning, and printable resources.
  5. Click Save

D. Upload Review Screenshot:

  1. Scroll to "Review Information" β†’ Screenshot box
  2. ⚠️ MUST be a tall rectangle (e.g., 1170Γ—2532 β€” a normal iPhone screenshot). NOT 1024Γ—1024 (Apple rejects squares β€” they're reserved for App Icons).
  3. Easy way: Take a screenshot on your iPhone of the in-app paywall β†’ AirDrop it to your Mac β†’ upload here.

E. Verify status is "Ready to Submit":

  • Status circle in the product list should now show 🟑 Ready to Submit

F. Attach to your app version (every release that includes new IAPs):

  1. Go to Distribution β†’ click your version (e.g., 1.1.6)
  2. Scroll down to "In-App Purchases" section
  3. Click "+" or "Edit" β†’ check β˜‘οΈ the products you want included
  4. Save β†’ submit for review

πŸ€– PART 2: ANDROID / GOOGLE PLAY RELEASE

Step 1: Trigger the Android build in Emergent

  1. Click "Publish" (top-right of Emergent)
  2. Choose "Android"
  3. The "Confirm details for your Android build" dialog opens
  4. ⚠️ CRITICAL β€” Verify Android Package Name field:
  • It should say: com.personalsolutionsnw.gettingaheadguidebook
  • If it shows app.emergent.budgetplanner352d3f530e5 (Emergent's default placeholder) β†’ STOP and email support@emergent.sh to unlock the field. Do NOT proceed β€” the build will be rejected by Google Play.
  1. Other fields:
  • App name: The Getting Ahead Guidebook
  • Version name: auto-increments (e.g., 1.1.6, 1.1.7)
  1. Click Continue β†’ wait ~15–20 min for build
  2. Download the .aab file when complete

Step 2: Open Google Play Console

  1. Go to play.google.com/console
  2. Click your app: The Getting Ahead Guidebook (package com.personalsolutionsnw.gettingaheadguidebook)
  3. Click "View app β†’" on the right of the row

Step 3: Create a new Production release

  1. Left sidebar β†’ click "Test and release" (πŸš€ rocket icon)
  2. The menu expands β†’ click "Production"
  3. Top right β†’ click the blue "Create new release" button

Step 4: Upload the .aab

  1. In the "App bundles" section, click the blue "Upload" link
  2. Select your downloaded .aab file
  3. Wait ~30 seconds for validation
  4. ⚠️ If you see red error: "Your APK or Android App Bundle needs to have the package name com.personalsolutionsnw.gettingaheadguidebook" β€” the build came out with the wrong package name. Click the X to remove it, contact support@emergent.sh, and rebuild.

Step 5: Fill in release notes

Scroll down to "Release details" β†’ in the "Release notes" box, paste (KEEP the XML language tags):

<en-US>
Subscription upgrades and improved checkout flow. Better support for tablets and foldable devices. Android compatibility improvements. Performance and stability fixes.
</en-US>

Step 6: Submit

  1. Click the blue "Next" at the bottom
  2. Step 2 shows "Preview and confirm"
  3. Click the blue "Save and publish" or "Start rollout to Production"
  4. Confirm the popup β†’ Status changes to 🟑 "In review"

Step 7: Wait for Google

  • A few hours to 7 days typical (usually <24 hrs after the first manual review)
  • You'll get an email when reviewed
  • If 🟒 Approved β†’ rolls out automatically
  • If πŸ”΄ Rejected β†’ check the email for the reason

πŸ“‹ PART 3: VERSION NUMBERING RULES (don't break these)

FieldRuleExample
version (in app.json)Bump for every release. Must INCREASE. Use semver: MAJOR.MINOR.PATCH1.1.5 β†’ 1.1.6 β†’ 1.2.0
android.versionCodeMust INCREASE by at least 1 every release. Integer only.15 β†’ 16 β†’ 17
ios.buildNumberEmergent auto-manages this. Don't worry about it manually.(auto)

⚠️ Google Play rejects uploads if versionCode is the same or lower than a previous release. ⚠️ Apple rejects uploads if buildNumber is the same as a previous build for the same version.


πŸ›Ÿ PART 4: WHEN THINGS GO WRONG β€” Who to Contact

IssueWhere to Get Help
Emergent publish dialog won't let you change Package NameEmail support@emergent.sh with screenshot
Apple "Missing Metadata" rejectionAdd IAPs to the version page (Part 1 β†’ Step 4)
Apple "1024Γ—1024 image rejected"Upload a TALL screenshot, not a square (Part 1 β†’ IAP Setup β†’ D)
Google Play "package name mismatch"Rebuild via Emergent with correct package name (Part 2 β†’ Step 1)
Google Play "versionCode already exists"Bump versionCode in app.json and rebuild
Stripe webhook failuresSee Part 5 below β€” use production URL, never preview
Resend (email) issueCheck API key in backend .env
Replaced a WP media file but still see old versionWordPress POST /media/{id} only updates metadata, NOT the file. Always DELETE the old media first, then upload fresh. Browser caches PDFs aggressively β€” hard refresh with Ctrl+Shift+R (Win) or Cmd+Shift+R (Mac) after re-upload.

πŸ”— PART 5: WEBHOOKS & PRODUCTION URLs (critical β€” read once, save forever)

⚠️ THE GOLDEN RULE

ALWAYS use app.thegettingaheadguidebook.com for any URL configured in a third-party dashboard (Stripe, Resend, Apple, etc.).

NEVER use the Emergent preview URL (budget-planner-352.preview.emergentagent.com) β€” it goes down whenever the dev container restarts and will cause silent failures + angry emails from Stripe.

Stripe Webhook URL (production)

https://app.thegettingaheadguidebook.com/api/subscriptions/webhook

To verify/update in Stripe:

  1. Go to https://dashboard.stripe.com/webhooks
  2. Check both Test mode and Live mode (toggle at top of dashboard)
  3. Your webhook endpoint URL MUST be the production URL above (NOT a preview URL)
  4. If it's wrong, click the webhook β†’ "…" menu β†’ Update details β†’ fix URL β†’ Save

Apple Server-to-Server Notifications V2

In App Store Connect β†’ Apps β†’ The Getting Ahead Guidebook β†’ App Information β†’ App Store Server Notifications:

Production Server URL:   https://app.thegettingaheadguidebook.com/api/iap/webhook
Sandbox Server URL:      https://app.thegettingaheadguidebook.com/api/iap/webhook
Notifications Version:   Version 2

Backend .env APP_URL (used for email links)

The backend has defensive code that auto-rewrites any preview/legacy URL to app.thegettingaheadguidebook.com at runtime β€” so even if your .env file is wrong, password reset emails and verification emails will still build correct links. But for cleanliness, the APP_URL should be:

APP_URL=https://app.thegettingaheadguidebook.com

Signs of a webhook problem

Watch for these β€” they're your warning signs:

  • πŸ“§ Email from support@stripe.com titled "We're having trouble…" about webhook failures
  • πŸ”΄ Stripe Dashboard β†’ Webhooks β†’ endpoint shows red "Failing" badge
  • πŸ“‰ Backend logs show no incoming POST /api/subscriptions/webhook after a subscription event
  • ⚠️ Users complete checkout but their subscription doesn't activate in your app
  • πŸ†˜ IAP receipts not auto-renewing in your DB after Apple sandbox tests

Quick check (paste in Terminal/browser):

To verify the webhook is reachable, run this from anywhere:

curl -s -o /dev/null -w "%{http_code}\n" \
  -X POST https://app.thegettingaheadguidebook.com/api/subscriptions/webhook \
  -H "Content-Type: application/json" -d '{}'

You want to see 200 (or 400 if missing signature β€” both mean the endpoint is alive). A 404 means something is misconfigured.


πŸ” PART 6: CRITICAL FACTS ABOUT THIS APP (memorize/print)

FactValue
iOS Bundle IDcom.thegettingaheadguidebook.app
Android Package Namecom.personalsolutionsnw.gettingaheadguidebook
iOS PricingApple IAP β€” Monthly $9.99 / Annual $89.99
Android PricingStripe β€” Monthly $8.95 (Annual TBD)
Web PricingStripe β€” Monthly $8.95
IAP Product IDs (iOS only)gag_monthly_v1, gag_annual_v1
Stripe Lookup Keysgag_monthly_v1, gag_annual_v1
Admin Emailrandywinsall@gmail.com
Demo Userdemo@thegettingaheadguidebook.com / DemoPass2026!

πŸ“… PART 7: CHECKLIST BEFORE EVERY RELEASE

Before clicking Publish, verify:

  • [ ] app.json β†’ version is bumped (e.g., 1.1.5 β†’ 1.1.6)
  • [ ] app.json β†’ android.versionCode is bumped (e.g., 16 β†’ 17)
  • [ ] No console errors when running the app in dev mode
  • [ ] Tested the main user flow (sign in β†’ view ledger β†’ subscribe)
  • [ ] Release notes drafted (paste-ready text)

After release:

  • [ ] iOS submitted to App Review
  • [ ] Android submitted to Play Production
  • [ ] Both versions show 🟑 "In Review" or 🟑 "Waiting for Review"
  • [ ] Email Randy at randywinsall@gmail.com when both are approved

End of Playbook. Keep this file open in a tab during releases. Print it if needed.