Selected work

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.

LIVE APP · www.bashlings.com

Explore right here. Sign-in and camera features work best in the full app.

MY ROLE

Product and game engineering, original card-generation workflow, backend systems and responsive browser experience.

TECHNOLOGY

Next.js · TypeScript · Convex · Clerk · Python · Replicate · OpenAI · Capacitor · RevenueCat

STATUS

Hosted browser game

01 / CONTEXT

The problem behind the interface.

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.

02 / MY CONTRIBUTION

What I worked on.

  • 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.

03 / ENGINEERING DECISIONS

The details that matter.

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.

From generated artwork to a card you own.SIMPLIFIED IMPLEMENTATION FLOW
  1. Create the catalogue

    Python, Replicate and OpenAI produce artwork, metadata and composited cards.

  2. Create the pack

    The server stores the chosen card IDs when the pack is created.

  3. Reveal and collect

    Opening reveals those cards and records ownership idempotently in Convex.

The 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.
What it enables
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.

04 / EVIDENCE & SCOPE

A clear account of the work.

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.

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 September 2026. Screens captured from the running application. Proprietary code and internal source records are not published.