Independent game & original IP, 2026
A whole card universe, from the ground up.
Original creatures, collectible packs, a digital binder and a battle system, backed by a persistent game economy.
- Role
- Product and game engineering, original card-generation workflow, backend systems and responsive browser experience.
- Stack
- Next.js, TypeScript, Convex, Clerk, Python, Replicate, OpenAI, Capacitor, RevenueCat
- Status
- Hosted browser game
Sign-in and camera features work best in the full app.
Context
Bashlings brings original creature cards into a connected collecting and battling game. The work spans the content pipeline, the moment a pack opens, a growing collection and the rules that make progression consistent.
What I did
- Wrote a custom Python NFT/card-generation script and used Replicate and OpenAI to create the entire Bashlings card collection, including artwork, metadata and visual card treatments.
- Built the collection binder, packs, progression, evolution and multiple battle experiences around the original card catalogue.
- Implemented server-side economy records, locked pack contents and idempotent opening so retries do not create duplicate rewards or reroll cards.
Engineering decisions
The card artwork, the pack reveal and the player’s collection need to agree. I built both the Python generation workflow and the server-side pack economy that connects the catalogue to gameplay.
- Create the cataloguePython, Replicate and OpenAI produce artwork, metadata and composited cards.
- Create the packThe server stores the chosen card IDs when the pack is created.
- Reveal and collectOpening reveals those cards and records ownership idempotently in Convex.
- Tradeoff
- The reveal is a presentation of an existing result. Keeping card selection on the server means a refresh cannot reroll the contents, and a repeated opening cannot grant duplicate cards.
- Result
- An original card collection connected to packs, a binder, progression and shared battle rules. The live pack flow has been explored from individual reveals through the final collection summary.
Decide the pack before it is opened.
Card IDs are stored when a pack is created. Opening reveals that existing result and records ownership idempotently, so refreshing does not change what is inside.
Share the combat rules.
A common battle core serves multiple modes. Ground and space lanes, card statistics and matchup rules stay consistent as the surrounding progression changes.
Build the tools that build the cards.
I wrote the Python NFT/card generator behind the collection, combining Replicate and OpenAI with card compositing and metadata generation. Its output becomes a versioned catalogue, so the game uses a consistent set of cards and rules.
Scope
Browser gameplay is hosted. Native wrappers and purchase integrations are implementation work, not a claim of verified App Store or Google Play publication. Screens were captured in a creator account.
Reviewed the authoritative project documentation, pack implementation and mobile purchase architecture. Explored the live signed-in binder and battle setup, and opened a fresh Cosmic Clash pack through its individual reveals and final collection summary.