Skip to content

fix(pro): sync /pro pricing copy to the #4563 catalog change (regen tiers + locales + rebuild bundle)#4574

Merged
koala73 merged 3 commits into
mainfrom
fix/regen-pro-test-tiers-after-4563
Jul 1, 2026
Merged

fix(pro): sync /pro pricing copy to the #4563 catalog change (regen tiers + locales + rebuild bundle)#4574
koala73 merged 3 commits into
mainfrom
fix/regen-pro-test-tiers-after-4563

Conversation

@koala73

@koala73 koala73 commented Jun 30, 2026

Copy link
Copy Markdown
Owner

Follow-up to #4563. #4563 changed the Starter/Business marketingFeatures in the product catalog but left the /pro marketing page showing the old pricing copy.

Two layers were stale (the second one is the user-visible one)

  1. Generated filescripts/generate-product-config.mjs writes pro-test/src/generated/tiers.json from the catalog, but feat(api): per-tier API rate limits — Phase 1 (per-account burst + usage meter + safety ceiling) #4563 never re-ran it, so the generated view-model still said "1,000 requests/day". The path-filtered pro-test freshness gate didn't catch it because feat(api): per-tier API rate limits — Phase 1 (per-account burst + usage meter + safety ceiling) #4563 only touched convex/, not pro-test//public/pro/.
  2. i18n locales (the live source)PricingSection.tsx renders features from tArray('pricing.tiers.api.features') with tiers.json only as a ?? fallback. So the page actually reads from the locale overrides, and en.json / fa.json still said "1,000 requests/day" with no "60 requests/minute". Regenerating tiers.json alone would not have changed the page.

Fix

  • Regenerated pro-test/src/generated/tiers.json (keeps the generated file in sync; satisfies the freshness gate).
  • Synced the two locale overrides (en.json, fa.json — the only locales carrying this array; others inherit) to the catalog copy: add "60 requests/minute", change "1,000 requests/day" → "1,000 requests/day included".
  • Rebuilt the committed public/pro/ bundle (Vercel serves it as-is and never rebuilds pro-test).

Verified: the bare "1,000 requests/day" string is gone from every tracked public/pro/ chunk; a fresh pro-test rebuild leaves public/pro/ clean (freshness gate passes deterministically).

Known follow-up (separate issue worth filing)

The /pro pricing copy is duplicated across the catalog, tiers.json, and the i18n locales, and they drift independently — and the freshness gate's path filter (pro-test/public/pro/) misses catalog-only changes that feed pro-test. A catalog change shouldn't require manually remembering to regen + rebuild + re-translate. Candidate fixes: make the gate also trigger on convex/config/productCatalog.ts, and/or make /pro source pricing features from one place.

https://claude.ai/code/session_01SjVX3GyMBmC2XyFWCHogN1

koala73 added 2 commits June 30, 2026 23:48
…nge (#4563 follow-up)

#4563 changed Starter/Business marketingFeatures in the product catalog but
didn't re-run scripts/generate-product-config.mjs, leaving the generated
/pro view model stale ('1,000 requests/day' instead of '...included' +
'60 requests/minute'). The path-filtered pro-test freshness gate didn't fire
because #4563 touched only convex/, not pro-test/. Rebuild of public/pro/
follows in this PR.

Claude-Session: https://claude.ai/code/session_01SjVX3GyMBmC2XyFWCHogN1
…follow-up)

The /pro PricingSection renders features from the i18n locales (tArray, with
generated/tiers.json only as ?? fallback), so the catalog copy change in #4563
didn't reach the page — en.json/fa.json still said '1,000 requests/day'.
Sync both locale overrides to the catalog ('60 requests/minute' +
'1,000 requests/day included') and rebuild the committed public/pro bundle
(Vercel serves it as-is, never rebuilds it). Only en/fa carry this override;
other locales inherit. Old copy is fully gone from public/pro.

Claude-Session: https://claude.ai/code/session_01SjVX3GyMBmC2XyFWCHogN1
@vercel

vercel Bot commented Jun 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
worldmonitor Ready Ready Preview, Comment Jul 1, 2026 9:17am

Request Review

@greptile-apps

greptile-apps Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR fixes stale pricing copy on the /pro marketing page by updating two sources that feed it: the generated tiers.json view-model and the i18n locale overrides (en.json, fa.json). It then rebuilds the committed public/pro/ bundle that Vercel serves statically.

  • Updated pricing.tiers.api.features in tiers.json, en.json, and fa.json to add "60 requests/minute" and change "1,000 requests/day" → "1,000 requests/day included".
  • Rebuilt and replaced all affected public/pro/assets/ JS chunks; old files (index-BwX1gcvf.js, fa-ia1YfuFk.js, welcome-sRAiXOqN.js) are deleted and index.html/welcome.html updated to reference new filenames.
  • All new bundles were verified to contain "1,000 requests/day included" and not the bare old string.

Confidence Score: 5/5

Safe to merge — the change is limited to pricing copy strings in locale files, a generated view-model, and a committed static bundle rebuild; no logic, API, or data-flow code is touched.

All three layers that serve the live page (locale JSON, the generated tiers fallback, and the committed Vite bundle) are consistently updated to the same new strings. The old bare '1,000 requests/day' string is absent from every rebuilt chunk. Old bundle files are properly deleted and HTML entry points reference the new filenames. The only observation is a pre-existing condition in fa.json that this PR neither introduces nor worsens.

No files require special attention. fa.json has a pre-existing full-file duplication with en.json that is worth a follow-up clean-up ticket, but it does not affect the correctness of this change.

Important Files Changed

Filename Overview
pro-test/src/locales/en.json Added '60 requests/minute' and updated '1,000 requests/day' → '1,000 requests/day included' in the API tier features array; this is the live source that PricingSection.tsx reads at runtime.
pro-test/src/locales/fa.json Same pricing string fix applied; file is pre-existing and byte-for-byte identical to en.json across all 656 lines — no Persian translations anywhere in it, which is a pre-existing condition unrelated to this PR.
pro-test/src/generated/tiers.json Regenerated from product catalog; now mirrors the catalog change. Only acts as a ?? fallback in PricingSection.tsx so doesn't directly affect the live page, but keeps the freshness gate passing.
public/pro/index.html Updated script/modulepreload references from old bundle filenames to new rebuilt ones; both index.html and welcome.html are consistent.
public/pro/assets/index-DZ9Zqa_g.js New main entry bundle replacing index-BwX1gcvf.js; confirmed to contain '1,000 requests/day included' and '60 requests/minute' — old bare string is absent.
public/pro/assets/fa-D9HbqzBD.js New Farsi locale bundle replacing fa-ia1YfuFk.js; contains updated pricing strings. Content is entirely English (mirrors fa.json), consistent with the pre-existing locale file state.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["convex/config/productCatalog.ts\n(source of truth)"] -->|"generate-product-config.mjs\n(manual step)"| B["pro-test/src/generated/tiers.json\n(view-model fallback)"]
    A -.->|"#4563 changed catalog\nbut didn't regen"| B
    C["pro-test/src/locales/en.json\n(live i18n source)"] -->|"tArray('pricing.tiers.api.features')"| E
    D["pro-test/src/locales/fa.json\n(live i18n source)"] -->|"tArray(...)"| E
    B -->|"?? fallback only"| E["PricingSection.tsx\n(renders features)"]
    E -->|"Vite build"| F["public/pro/assets/*.js\n(served as-is by Vercel)"]
    F -->|"referenced by"| G["public/pro/index.html\npublic/pro/welcome.html"]
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A["convex/config/productCatalog.ts\n(source of truth)"] -->|"generate-product-config.mjs\n(manual step)"| B["pro-test/src/generated/tiers.json\n(view-model fallback)"]
    A -.->|"#4563 changed catalog\nbut didn't regen"| B
    C["pro-test/src/locales/en.json\n(live i18n source)"] -->|"tArray('pricing.tiers.api.features')"| E
    D["pro-test/src/locales/fa.json\n(live i18n source)"] -->|"tArray(...)"| E
    B -->|"?? fallback only"| E["PricingSection.tsx\n(renders features)"]
    E -->|"Vite build"| F["public/pro/assets/*.js\n(served as-is by Vercel)"]
    F -->|"referenced by"| G["public/pro/index.html\npublic/pro/welcome.html"]
Loading

Comments Outside Diff (1)

  1. pro-test/src/locales/fa.json, line 43-53 (link)

    P2 fa.json is byte-for-byte identical to en.json across all 656 lines — not just the pricing section, but the entire file. Since other locales (e.g. ar.json, de.json) omit the pricing.tiers.api.features array entirely and inherit from English, removing this section from fa.json would be cleaner and eliminate one more place that needs to be manually kept in sync on future catalog changes. The pre-existing full-file duplication is also worth a dedicated clean-up — fa.json currently provides no Persian translations at all, so Persian-speaking visitors see the English copy regardless.

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Reviews (1): Last reviewed commit: "fix(pro): sync /pro pricing copy + rebui..." | Re-trigger Greptile

@koala73
koala73 merged commit 6c6284b into main Jul 1, 2026
25 checks passed
@koala73
koala73 deleted the fix/regen-pro-test-tiers-after-4563 branch July 1, 2026 09:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: API Backend API, sidecar, keys P2 Medium priority, schedule when capacity allows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant