Dodeka owns the ISN/Webflow pages, Outseta configuration, supported Stripe billing settings, emails, and ISN-side integration scripts. XS owns the Premium sales page, Premium application, server access checks, and receiving endpoints. XS inputs are called out only where Dodeka needs them to finish a step.
Target experience: a reader discovers Premium, signs in or creates a free ISN account, purchases on the ISN account flow, and returns to the requested Premium content. An existing subscriber signs in and goes straight to their content.
Phase A / establish the configuration
Confirm the account and commercial settings.
01
Confirm the Outseta version and isolate staging.
WHERE · Outseta account / staging Webflow configuration
Record the ISN Outseta tenant and whether it uses v2 or v3. Use the supported forms, billing screens, and API behavior for that version.
Identify which scripts and settings are shared with the production ISN website.
Use a dedicated test configuration or supported isolated test tenant for staging. Verify that test payments cannot create live charges or live Premium access.
Confirm the two staging hostnames above are the canonical test hosts; remove obsolete callback targets from the staging setup.
Done when: Dodeka provides the version, tenant/environment inventory, test-payment setup, and list of shared production settings. A staging change cannot silently change the live purchase flow.
Version selection affects the checkout: v2 supports on-site purchase/profile flows; v3 uses Stripe-hosted checkout. Do not migrate the ISN account as an incidental part of this work. Outseta version reference.
02
Configure the Free and Premium offerings.
WHERE · Outseta plan/product catalogue and supported Stripe configuration
Preserve or establish the ISN Free offering. Free registration must not require a payment method.
Create the approved ISN Premium offering and its allowed billing options. Preserve Free benefits when a reader upgrades.
Configure the path from an existing Free account to Premium. Keep the same person/account rather than creating a second account.
Record each stable plan/product/price identifier, its environment, the features it represents, and the allowed upgrade, downgrade, and renewal paths. Supply this mapping to XS.
Keep sponsor verification separate: a Free subscriber is not automatically a verified sponsor, and buying Premium does not approve a directory listing.
Input needed from ISN/XS: approved benefits, purchase eligibility, prices, billing schedule, and whether any team seats, discounts, or trials are in scope.
Done when: a Free test account can be upgraded to the intended Premium offering on the same account, and XS has the exact identifiers to map to content access.
03
Set the charge, renewal, and cancellation terms.
WHERE · Billing settings / purchase copy / receipts
Confirm the connected Stripe account and approved selling entity. Use the approved legal name, receipt descriptor, support contact, currency, and tax configuration.
Set the amount charged today, recurring amount, billing frequency, minimum commitment, renewal term, and cancellation effective date.
Configure the approved payment methods and test any supported wallet or bank-authentication flow.
Place the agreed terms and final total visibly before purchase confirmation. Ensure the advertised offer and provider checkout agree.
Resolve before configuring: the existing design references $79.99/month for a six-month term and $69.99/month for a twelve-month term. These are reference values, not confirmed Outseta offers. Confirm whether charges are monthly or prepaid, and how any remaining commitment is handled. Do not silently convert them to cancel-anytime monthly subscriptions.
Done when: a test checkout shows the approved amount due today, future charges, renewal, and cancellation terms; the test invoice agrees.
Phase B / build the subscriber pages
Give login, joining, and purchase a clear path.
04
Create or update the ISN account pages.
WHERE · staging.independentsponsor.news / Webflow
Use the following proposed routes, or return equivalent existing routes to XS before integration. These are page requirements, not claims that the URLs already exist.
ISN page
What Dodeka puts on it
/login
Outseta login, password recovery, free-account link, and saved destination.
/subscribe
Free account registration, activation guidance, and separate newsletter preference.
/subscribe/premium
Selected offer, current account, account-switch option, and supported purchase experience.
/account
Profile, billing management, payment method, invoices, cancel/renew, and support.
/access-denied
Existing Premium login bridge: read the explicit return destination; offer login or free sign-up.
/auth/continue
Integration continuation: preserve ISN identity and return through the agreed Premium callback.
/logout
Coordinate both sites’ logout and show a public signed-out result.
Use the appropriate Outseta-generated embeds or supported portal/checkout entry points for the confirmed version.
Keep account, login, registration, purchase, and recovery pages reachable without a Premium subscription.
Apply ISN styling, mobile layouts, field labels, keyboard focus, and accessible error/progress messages.
Done when: all agreed pages work on the canonical ISN staging hostname, including for an anonymous or expired subscriber.
05
Configure Free registration and account activation.
Show “Join ISN free” and explain the included free benefits. Collect only the required identity fields.
Configure email confirmation, password setup, or a supported passwordless flow. Show “Check your email,” resend, and recovery options where applicable.
For an existing account email, route to login/recovery. For a newsletter-only contact, provide account activation without duplicating the contact or losing consent preferences.
Preserve the reader’s intended destination and selected Premium offer through activation. After joining, a reader who chose Premium continues to purchase.
Keep newsletter preferences separate from account and subscription status. Marketing opt-out must not cancel a paid plan.
Done when: a new reader, existing account holder, and newsletter-only contact each reach the right next step without a duplicate account, charge, or implied Premium entitlement.
06
Make login return the reader to the right site.
WHERE · Outseta login settings / ISN login and access-denied scripts
Keep normal ISN logins on ISN, returning to the requested ISN page or the approved ISN default.
For a Premium-origin request, read the explicitly supplied return context and preserve it through login and password recovery. Do not reconstruct it from document.referrer.
Allow only the approved Premium staging origin and safe content destinations. Reject foreign hosts and malformed destinations; use a safe fallback.
If Outseta already has a valid ISN identity, continue through the agreed handoff without requiring another password prompt.
Remove any global callback that sends every ISN login to Premium. Use Premium continuation only for a Premium journey.
Input needed from XS: the authentication-start URL, allowed return destinations, default destination, and transaction/state contract. Premium must initialize the transaction before Dodeka sends its token.
Done when: an ordinary ISN login stays on ISN, a Premium login returns to the requested Premium path, and an already-authenticated ISN reader does not get stuck in a login loop.
07
Wire the Premium purchase flow to the existing account.
WHERE · ISN /subscribe/premium / Outseta purchase configuration
For a signed-out reader, offer login or Free account creation first; retain their selected offer. A brand-new reader follows Account → Subscription → Premium.
For a signed-in Free reader, show the current email and “Use a different account”, then open the correct authenticated upgrade flow.
For an already-entitled reader, show “Open Premium” and “Manage subscription” instead of starting another purchase. Recheck account status before launching payment.
Route lapsed, cancelling, or payment-failed accounts to the relevant renew, resume, or payment-recovery flow.
Handle decline, bank authentication, cancellation, Back, and abandoned checkout. Disable repeat submission and use provider-supported duplicate-purchase protection; coordinate any remaining account-level protection with XS.
On completion, continue to step 9. Do not declare Premium access ready from a browser purchase event alone.
Done when: new and existing Free readers can buy using one account, an active subscriber is not charged again, and failed or abandoned payments do not appear as successful upgrades.
Phase C / connect the two sites
Preserve identity, refresh access, and coordinate logout.
08
Implement the agreed Premium sign-in handoff.
WHERE · ISN continuation / redirect handler
Before leaving ISN, preserve its authenticated state using the supported Outseta token setter/persistence mechanism.
Echo the Premium-issued one-use state value and the validated return context. Do not invent or reuse a state value on the ISN page.
Send the token to Premium’s /auth/isn callback in the URL fragment, never an ?access_token= query parameter.
Match the exact approved hostname/path; remove obsolete placeholder endpoints and host-specific logic that only works on a Webflow preview domain.
Keep tokens out of logs, analytics, screenshots, and copied support URLs. Keep the continuation page free of scripts that could capture the token-bearing URL.
If the transaction expired, restart through Premium’s authentication initializer. If identity differs from the current browser account, require the agreed explicit account-switch flow.
XS readiness required: the existing Premium identity endpoint must be extended to accept and validate state. Coordinate deployment before enabling the revised callback. XS handles immediate fragment removal and server verification on the receiving page.
Done when: ISN → Premium → ISN preserves sign-in; the requested page is restored; stale state, foreign returns, and query-string tokens are refused in joint testing.
09
Obtain the current token after a subscription change.
WHERE · Outseta purchase-completion integration / ISN continuation
Identify the actual purchase/plan-change events and supported token-renewal method for the ISN tenant’s version.
After a successful upgrade, obtain or await the current supported Outseta access token. Verify the person/account association and documented subscription claims are correct.
Pass through the authenticated continuation to XS’s confirmation flow, retaining the original content destination.
If confirmation or token renewal is delayed, show a pending/retry path. Tell the reader not to pay again; provide account management and support.
Test the inverse change too: downgrade, cancellation, or expiry must not leave Dodeka’s UI indefinitely presenting outdated paid status.
Send XS the JWKS URL, expected issuer/audience, lifetime, redacted claim schema, and observed event sequence. Share no raw tokens.
Input needed from XS: the confirmed continuation/confirmation URL and pending/error behavior. XS verifies subscription state on the server; a refreshed token alone does not currently activate a Premium membership in the application.
Done when: Free → Premium → content works without another purchase or manual logout/login; stale claims lead to recovery, not a false success.
10
Update ISN navigation and subscriber buttons.
WHERE · ISN header, account menu, Premium links, and email CTAs
Point the public ISN Premium navigation link at the Premium staging landing page.
Use “Log in” and “Join ISN free” for signed-out readers. Where account state is available, offer “Subscribe to Premium” to Free readers.
Offer “Open Premium”, “Manage subscription”, and “Log out” to eligible signed-in readers.
Route authenticated Premium access through the agreed transaction-start/handoff flow. Never paste a bearer token into a normal navigation or email link.
Ensure every staging link stays in staging and preserves the intended content destination where appropriate.
Done when: the header and purchase/account CTAs make sense for signed-out, Free, active Premium, and lapsed readers; no staging CTA sends a reader to production billing.
11
Make logout work from both sites.
WHERE · ISN logout handler / Outseta logout integration
On ISN logout, call Premium’s POST /auth/logout before clearing the token needed to coordinate the call. Follow XS’s exact request/origin contract; the existing endpoint supports credentials and a token in the JSON body.
Clear the ISN Outseta session on the ISN host, then show a public signed-out page.
Provide the ISN-side logout destination/handler that XS can use when logout starts on Premium. Coordinate the order so it does not create a logout or login loop.
If one host cannot be reached, complete local sign-out and show the incomplete cross-site logout with a retry. Do not claim both sessions ended without confirmation.
Leave the paid subscription unchanged. “Log out” must never mean “Cancel subscription.”
Input needed from XS: logout request format, allowed ISN origin, and Premium-origin coordination. Premium currently revokes that person’s Premium sessions across devices; do not promise equivalent global Outseta logout without testing it.
Done when: logging out from either site ends access on both sites in the current browser. Returning to protected content requires authentication; an old token does not silently sign the reader back in.
Phase D / complete lifecycle settings
Keep account management and access changes synchronized.
12
Configure billing management and signed notifications.
WHERE · Outseta / supported Stripe portal / notification settings
Configure account management to expose the approved plan/status, payment method, invoices, cancellation, renewal, and reactivation options. Restrict billing actions to the appropriate account owner.
Apply approved cancellation, grace, refund/dispute, and plan-change rules. Verify effective dates and any proration copy.
Register lifecycle notifications with the receiving URL supplied by XS: subscription start/change/end, payment success/failure, and available identity/account membership changes.
Enable webhook signing and share the key through the approved secret channel. Provide event names, redacted payload examples, account/subscription identifiers, and expected retry behavior.
Identify any event the tenant cannot supply, including refunds/disputes or identity changes, so XS can agree an alternate authoritative synchronization source before launch.
Input needed: owner-approved policies; XS’s deployed callback URL, secret-transfer method, and required event/schema contract. Dodeka configures the sender; XS builds the receiver and access reconciliation.
Done when: a test lifecycle change reaches XS with valid authentication and updates Premium access without requiring the reader to revisit the purchase page.
13
Configure the subscriber emails.
WHERE · Outseta and version-appropriate billing email settings
Configure activation, password reset, and Free welcome messages.
Configure one billing receipt source and a Premium welcome with a secure route to the content and account management.
Configure payment-action/failure, cancellation confirmation, and effective-expiry messages where supported by the approved flow.
Include the correct support contact and effective dates. Verify that marketing opt-out does not remove required account/billing communications.
Test with staging recipients; use staging account/content links. Coordinate with XS so its old simulated receipt does not send a duplicate receipt for the provider purchase.
Done when: each trigger produces the intended message once, links work on the correct host, and no email contains a raw access token or test message sent to a live subscriber.
14
Audit protection rules, scripts, and cookie scope.
WHERE · Outseta protected-content rules / ISN site-wide scripts
Keep public marketing, login, Free sign-up, purchase entry, activation, recovery, and signed-out pages reachable as required. Billing management needs authentication but not active Premium access.
Review path-based protection rules across the configured domains. A rule intended for paid content must not capture a sales or account page.
Inspect the actual Outseta cookie Domain, Path, Secure, and SameSite behavior. Confirm staging cannot overwrite or reuse production identity.
Test supported browser/storage settings and give a useful recovery message if required scripts or cookies are blocked. Avoid repeated automatic redirects.
Remove stale callback placeholders and any script that sends or records tokens in query strings. Use exact environment-specific origins.
Done when: all account and recovery paths work for the appropriate subscriber state, no cross-environment session collision occurs, and blocked storage produces a recoverable result.
Phase E / verification and delivery
Show the configured experience working end to end.
15
Walk through the staging journeys with XS.
WHERE · Both canonical staging websites / test accounts only
Use new, newsletter-only, Free, active Premium, cancelling, expired, payment-failed, and wrong-account test identities. Record the browser, account role, result, and safe reference for each test.
Free sign-up: create and activate an account; confirm no charge and no paid access.
Login: ordinary ISN login returns to ISN; a Premium request returns to its original destination.
Signed-out content access: a paying subscriber logs in and gets content without another purchase; a Free subscriber sees the upgrade offer.
Upgrade: buy Premium as an existing Free reader and as a new reader; confirm one account, one intended purchase, current token, and access.
Payment recovery: decline, bank challenge, checkout abandonment, duplicate clicks, and delayed completion give correct retry/help behavior.
Account management: update payment method, schedule cancellation, expire, and reactivate; verify the effective access dates jointly with XS.
Logout: begin from each site; check the other site, another tab, Back, and a failed cross-site logout call.
Security and usability: wrong account, bad return URL, expired state, private browsing, mobile Safari, desktop Chromium, and keyboard-only forms.
Done when: Dodeka provides evidence for each journey, and unresolved failures have an owner and a clear remediation. A checkout success screen alone is not proof that Premium access works.
16
Deliver the configuration and production change list.
WHERE · Dodeka handoff to ISN / XS
Deliver the final page URL list, Outseta version, catalogue IDs, approved terms, and environment mapping.
Include redacted token/event schemas, observed token-update sequence, callback/logout configuration, and completed staging test results.
List all outstanding decisions or unsupported behaviors. Separate Dodeka defects from XS endpoint dependencies.
Prepare production equivalents for hostnames, product identifiers, redirects, notifications, email links, and billing settings. Do not merely reuse staging values.
After production release authorization, apply the agreed changes and verify the same essential journeys. Keep a rollback that disables new purchase entry while preserving account recovery and existing-subscriber navigation.
Done when: ISN/XS can review the exact configuration, reproduce the staging evidence, and identify every production change before live billing is enabled.
Final handoff / send these six items
Dodeka’s deliverables
Page inventory: final ISN staging URLs and navigation destinations.
Commercial configuration: version, plan/product/price IDs, terms, payment methods, and environment.
Lifecycle configuration: signed event mapping, billing management, emails, and effective-date behavior.
Acceptance evidence: test-account roles, dated journey results, recordings/screenshots without secrets, and remaining defects.
Production checklist: exact configuration changes, release dependencies, and rollback steps.
Send credentials and signing keys through the agreed managed secret channel. Keep the review packet limited to configuration names, schemas, and safe references.