The Getting Ahead Guidebook β Publishing Playbook
Last verified: June 2026 (based on actual screenshots from Randy's submissions)
Quick Jump
- π― The Big Picture (do this in order every release)
- π PART 1: APPLE / iOS RELEASE
- π€ PART 2: ANDROID / GOOGLE PLAY RELEASE
- π PART 3: VERSION NUMBERING RULES (don't break these)
- π PART 4: WHEN THINGS GO WRONG β Who to Contact
- π PART 5: WEBHOOKS & PRODUCTION URLs (critical β read once, save forever)
- π PART 6: CRITICAL FACTS ABOUT THIS APP (memorize/print)
- π PART 7: CHECKLIST BEFORE EVERY RELEASE
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)
- Bump version & versionCode in
app.json(Emergent code) - Click Publish in Emergent β pick platform β wait for build
- Download the build file (
.ipafor iOS /.aabfor Android) - Upload to the appropriate store console
- Fill in release notes + submit for review
π PART 1: APPLE / iOS RELEASE
Step 1: Trigger the iOS build in Emergent
- Click "Publish" (top-right of Emergent)
- Choose "iOS"
- The "Confirm details" dialog opens
- 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)
- Click Continue β wait ~15β20 min for build
- Emergent uploads the
.ipadirectly 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)
- Click the Distribution tab (top blue bar)
- 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
- 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
- Scroll to the top of the version page
- Click the blue "Add for Review" or "Submit to App Review" button (top right)
- Answer the export compliance questions (No encryption changes = answer "No")
- 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:
- App Store Connect β Apps β The Getting Ahead Guidebook
- Left sidebar under MONETIZATION β Subscriptions
- Click on your subscription group (e.g., GAG Premium)
- Click on the product name (e.g., GAG Annual)
B. Set the price (THIS IS THE TRICKY PART):
- On the product page, find "Set Up Availability" link (LEFT side, near top β NOT the "+" next to "Subscription Prices")
- Click it β "Confirm Upfront Billing" dialog opens
- Select United States + your price (e.g., $89.99 for Annual, $9.99 for Monthly)
- 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):
- Scroll down to "Localization" section β click "Add Localization"
- Select English (U.S.)
- Display Name:
GAG Annual(or whatever) - Description:
Full annual access to The Getting Ahead Guidebook β budgeting, ledger, AI receipt scanning, and printable resources. - Click Save
D. Upload Review Screenshot:
- Scroll to "Review Information" β Screenshot box
- β οΈ 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).
- 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):
- Go to Distribution β click your version (e.g., 1.1.6)
- Scroll down to "In-App Purchases" section
- Click "+" or "Edit" β check βοΈ the products you want included
- Save β submit for review
π€ PART 2: ANDROID / GOOGLE PLAY RELEASE
Step 1: Trigger the Android build in Emergent
- Click "Publish" (top-right of Emergent)
- Choose "Android"
- The "Confirm details for your Android build" dialog opens
- β οΈ 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.
- Other fields:
- App name: The Getting Ahead Guidebook
- Version name: auto-increments (e.g., 1.1.6, 1.1.7)
- Click Continue β wait ~15β20 min for build
- Download the
.aabfile when complete
Step 2: Open Google Play Console
- Go to play.google.com/console
- Click your app: The Getting Ahead Guidebook (package
com.personalsolutionsnw.gettingaheadguidebook) - Click "View app β" on the right of the row
Step 3: Create a new Production release
- Left sidebar β click "Test and release" (π rocket icon)
- The menu expands β click "Production"
- Top right β click the blue "Create new release" button
Step 4: Upload the .aab
- In the "App bundles" section, click the blue "Upload" link
- Select your downloaded
.aabfile - Wait ~30 seconds for validation
- β οΈ 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
- Click the blue "Next" at the bottom
- Step 2 shows "Preview and confirm"
- Click the blue "Save and publish" or "Start rollout to Production"
- 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)
| Field | Rule | Example |
|---|---|---|
version (in app.json) | Bump for every release. Must INCREASE. Use semver: MAJOR.MINOR.PATCH | 1.1.5 β 1.1.6 β 1.2.0 |
android.versionCode | Must INCREASE by at least 1 every release. Integer only. | 15 β 16 β 17 |
ios.buildNumber | Emergent 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
| Issue | Where to Get Help |
|---|---|
| Emergent publish dialog won't let you change Package Name | Email support@emergent.sh with screenshot |
| Apple "Missing Metadata" rejection | Add 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 failures | See Part 5 below β use production URL, never preview |
| Resend (email) issue | Check API key in backend .env |
| Replaced a WP media file but still see old version | WordPress 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/webhookTo verify/update in Stripe:
- Go to https://dashboard.stripe.com/webhooks
- Check both Test mode and Live mode (toggle at top of dashboard)
- Your webhook endpoint URL MUST be the production URL above (NOT a preview URL)
- 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 2Backend .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.comSigns of a webhook problem
Watch for these β they're your warning signs:
- π§ Email from
support@stripe.comtitled "We're having trouble…" about webhook failures - π΄ Stripe Dashboard β Webhooks β endpoint shows red "Failing" badge
- π Backend logs show no incoming
POST /api/subscriptions/webhookafter 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)
| Fact | Value |
|---|---|
| iOS Bundle ID | com.thegettingaheadguidebook.app |
| Android Package Name | com.personalsolutionsnw.gettingaheadguidebook |
| iOS Pricing | Apple IAP β Monthly $9.99 / Annual $89.99 |
| Android Pricing | Stripe β Monthly $8.95 (Annual TBD) |
| Web Pricing | Stripe β Monthly $8.95 |
| IAP Product IDs (iOS only) | gag_monthly_v1, gag_annual_v1 |
| Stripe Lookup Keys | gag_monthly_v1, gag_annual_v1 |
| Admin Email | randywinsall@gmail.com |
| Demo User | demo@thegettingaheadguidebook.com / DemoPass2026! |
π PART 7: CHECKLIST BEFORE EVERY RELEASE
Before clicking Publish, verify:
- [ ]
app.jsonβversionis bumped (e.g., 1.1.5 β 1.1.6) - [ ]
app.jsonβandroid.versionCodeis 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.
