Skip to content
cccskills
FreePublished on GitHub

affiliate-coupon

Create a 30%-off coupon for an affiliate or creator on iOS and Android, and draft the reply that tells them how to use it. Use when asked to create, set up or send a coupon or promo code for an affiliate, influencer or creator.

The English summary is being prepared. Showing the original description.

astashov/liftosaur761 stars(GitHub 761 + cccskills 0)

Run score Not tested

See how to install

Files included (1)

  • SKILL.md2.9 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Affiliate coupon

Create the coupon: $ARGUMENTS

How redemption works

  • iOS: "Redeem coupon" opens Apple's own code sheet (Thunk_redeemCouponIOS). The code must be an App Store Connect offer code. Our server is never called.
  • Android: "Redeem coupon" opens our couponModal, which calls /api/coupon/claim/:code and reads the lftCoupons row. The claim response carries affiliate, and the app records it with Storage_setAffiliate(affiliate, "coupon").
  • An Apple custom code belongs to one offer, and an offer covers one plan. So iOS gets two codes: <CODE> for yearly and <CODE>MONTHLY for monthly. An optional third argument replaces the monthly code, e.g. MLTRY military MLTRYMONTH. Android uses <CODE> for both plans.
  • Apple offer names must be unique across both subscriptions. The script names them <AFFILIATE_ID> (yearly) and <AFFILIATE_ID>-monthly.
  • iOS redemptions never write an lftAffiliates row, so the affiliate dashboard does not count them. Apple reports the offer on the payment as offerIdentifier.
  • Program imports are counted when the link carries ?s=<AFFILIATE_ID>.

Steps

  1. Pick the values. CODE is 3 to 20 letters or digits, usually the creator's name in capitals. AFFILIATE_ID is a short lowercase id. Use the same id for the coupon and for the program link.
  2. Dry run. --dry-run does not work, because npm run takes that flag for itself. Use the env var: DRY_RUN=1 npm run r lambda/scripts/create_affiliate_coupon.ts <CODE> <AFFILIATE_ID>
  3. Show the dry run output to the user and wait for approval. The real run writes to App Store Connect and to the prod lftCoupons table, and Apple offer codes cannot be deleted through the API.
  4. Run it: npm run r lambda/scripts/create_affiliate_coupon.ts <CODE> <AFFILIATE_ID>. A rerun skips everything that exists, so a run that failed halfway can be repeated.
  5. Draft the reply to the affiliate:
    • iPhone: the "Redeem coupon" link at the bottom of the subscription screen, then enter <CODE> for 30% off yearly, or <CODE>MONTHLY for 30% off monthly.
    • Android: the same button, enter <CODE>, then pick a plan.
    • The user must sign in before redeeming on Android.
    • Program link: share the program, then add ?s=<AFFILIATE_ID> to the link.

Files

  • lambda/scripts/create_affiliate_coupon.ts runs the whole flow.
  • lambda/scripts/appleOfferCodes.ts calls the App Store Connect API with lambda/scripts/AuthKey_F286YBUYZ7.p8. Price points are cached in pricepointscache/. Target prices come from lambda/scripts/apple_prices.csv.
  • The Android offers (monthly-discount-30, yearly-discount-30) already exist in Google Play. Nothing is created there.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Add a new built-in exercise to Liftosaur end-to-end — image (gymvisual.com → S3), catalog registration, description page, and the LLM/MCP exercise list. Use when adding one or more built-in exercises to the app catalog.

The English summary is being prepared. Showing the original description.

astashov/liftosaur761Updated Oct 26, 2026

Add a new server-rendered page to the Liftosaur website. Use when creating new public-facing pages with routing, SSR, and client hydration.

The English summary is being prepared. Showing the original description.

astashov/liftosaur761Updated Oct 26, 2026

Interactively investigate a production Rollbar error. Accepts an occurrence id, item id, item counter, or Rollbar URL. Fetches the error data, assesses how widespread it is, drills into affected users (events, logs, storage, captured state), and works with the developer toward a fix or ignore decision. Use for collaborative debugging; use /fix-rollbar for a straight fetch-and-fix of a single occurrence.

The English summary is being prepared. Showing the original description.

astashov/liftosaur761Updated Oct 26, 2026

Investigate a user-reported issue using server logs, user events, storage snapshots, and Rollbar. Use when given a user id or email plus an issue description (e.g. from a support email).

The English summary is being prepared. Showing the original description.

astashov/liftosaur761Updated Oct 26, 2026

Build a feature end to end — decide worktree vs here, design the architecture and debate it with codex, get the user's approval on a one-pass-readable plan, state the API/state contract, implement with visible diffs, then run two codex reviews (bugs + architecture) and document the result. Use when asked to build/implement/add a feature or do a refactor that involves design decisions.

The English summary is being prepared. Showing the original description.

astashov/liftosaur761Updated Oct 26, 2026

Fix a production exception from Rollbar in an interactive Claude Code session. Fetches the occurrence data, analyzes the error, and either implements a fix or adds the error to the ignore list. Use when given a Rollbar occurrence ID.

The English summary is being prepared. Showing the original description.

astashov/liftosaur761Updated Oct 26, 2026

See all skills by astashov

Report a problem with this skill