Multi-Game Codes Hub
Generate one Next.js codes page from explicit game data. The included generator renders a TSX template; it does not discover, monitor, translate, or validate codes against Roblox.
Implemented resources
- resources/generate_code_page.py: validates JSON and renders a page.
- resources/templates/codes_page.tsx: Next.js page template for active/expired codes, metadata, breadcrumbs, and optional supplied redemption/FAQ content.
- resources/components/CopyButton.tsx: client-side copy control with a fallback.
- resources/components/CodeTable.tsx: optional reusable code table.
- resources/schemas/faq_schema.ts: FAQ, breadcrumb, and item-list schema helpers.
- USAGE.md: concise CLI reference.
The generated template imports @/components/CopyButton; copy the included component into that alias or change the import for the target project.
Input contract
{
"gameName": "Your Bizarre Adventure",
"gameSlug": "yba",
"baseUrl": "https://example.com",
"activeCodes": [
{
"code": "CODE123",
"reward": "50 Spins",
"expiryDate": "2026-04-30",
"conditions": "Optional"
}
],
"expiredCodes": [
{
"code": "OLDCODE",
"reward": "25 Spins"
}
],
"redemptionSteps": [
"Open the game's menu.",
"Enter a supplied code in the code field."
],
"faq": [
{
"question": "Where is the code field?",
"answer": "The supplied source says it is in the game menu."
}
]
}
Required top-level fields:
gameName: non-empty string.gameSlug: lowercase letters/digits separated by single hyphens.baseUrl: absolute HTTP(S) site URL without credentials, query, or fragment. A trailing slash is normalized away.
Optional top-level fields:
activeCodesandexpiredCodes: arrays; each entry supports onlycode,reward,expiryDate, andconditions.codeandrewardare required non-empty strings.redemptionSteps: array of non-empty strings. The section is omitted when the array is absent or empty.faq: array of objects containing only non-emptyquestionandanswerstrings. The FAQ section and FAQ schema are omitted when absent or empty.
Unknown top-level, code-entry, or FAQ-entry fields are errors; the generator never silently ignores input.
baseUrl drives canonical and breadcrumb URLs. Never reuse an example domain for a real site.
Generate a page
From the Skill directory:
python3 resources/generate_code_page.py \
--input resources/examples/yba_codes.json \
--output /tmp/yba-codes-page.tsx
The default template is resolved relative to this Skill, so the command also works when the script is invoked from another current working directory. --input, --output, and an explicitly supplied --template retain normal CLI semantics: relative paths resolve from the caller's current directory and absolute paths remain absolute.
To use a custom template:
python3 resources/generate_code_page.py \
--input ./game.json \
--output ./page.tsx \
--template ./custom-codes-page.tsx
Generation uses the current UTC month, year, and date. It fails before writing output if the JSON is invalid, required values are missing, URLs are invalid, or any {{templateVariable}} remains unresolved.
Template variables
{{gameNameJson}}{{gameSlugJson}}{{baseUrlJson}}{{rewardsJson}}{{activeCodesData}}{{expiredCodesData}}{{redemptionStepsData}}{{faqItemsData}}{{generatedDateJson}}{{currentMonthJson}}{{currentYearJson}}{{redemptionSection}}{{faqSchemaDefinition}}{{faqSchemaScript}}{{faqSection}}
Verification
After generation:
- Confirm the output contains the target
baseUrland no unrelated domain. - Confirm no
{{...}}placeholder remains. - Copy or adapt the required component imports.
- Run the target Next.js project's typecheck, lint, and build.
- Review codes and any supplied redemption/FAQ content against a cited primary source; the generator does not verify factual accuracy.
Roadmap and boundaries
Discord/Twitter monitoring, automatic code validity checks, automatic expiry updates, multilingual generation, community submissions, and deployment automation are not implemented. Treat them as roadmap items only; do not invoke nonexistent scripts such as discord_code_monitor.py, code_validator.py, update_codes.py, or generate_multilingual.py.