4 per figure
Views Generated
3
Figure Styles
10
Order Stages
STL Viewer
3D Support
Figmaker is an AI-powered collectible figure commerce platform. Users walk through a guided wizard — selecting figure type, style (voxel, kawaii, minimalist), outfit, pose, and props — upload a reference photo, and the AI generates custom collectible figure designs. They can further customize packaging with a live preview editor before purchasing via Stripe.
The admin dashboard manages the full production lifecycle: generating orthographic views using OpenAI's gpt-image-1, creating box art illustrations, uploading STL files for 3D printing, and tracking orders through 10 stages from ORDER_PLACED to SHIPPED.
Each figure undergoes multi-view generation where front, back, left, and right views are generated independently — each tracked separately for partial failure recovery. If the back view fails, only that view is retried rather than regenerating all four.
The wizard flow uses a React Context (FormContext) that serializes all form state — figure type, style, outfit, pose, prop, base, uploaded photo, and order details — to localStorage on every update. This lets users navigate away and return without losing progress. The toNativeFormData helper converts this state into a multipart FormData for the generation API.
Person figure generation loads prompts from a FigurePrompt database table keyed by (figureType, style), with template substitution for [POSE], [OUTFIT], [PROP], and [BASE]. This makes prompts editable without code deploys. The generation request goes to an Azure-hosted Comfy-style service with the uploaded reference photo.
Animal figure generation uses fal.ai Seedream v4.5/edit, rate-limited with Upstash Redis at 50 generations per day per IP address.
The admin multi-view generation pipeline runs through Inngest: each of the 4 views (fixedFront, left, right, back) is generated as a separate Inngest step using OpenAI gpt-image-1 images.edit with transparent backgrounds at 1024x1024. The isGenerated and errorMessages fields on the Order are JSON maps keyed by view name — allowing partial completion and independent retry per view.
Box art illustration generation is a separate Inngest function that takes the fixed-front figure render and a reference layout image, making two OpenAI images.edit calls to produce front and back illustration variants. Different box themes (Starlight, Abyss, Ember) use different reference assets.
The admin dashboard includes an STL 3D viewer built with Three.js (react-stl-viewer + OrbitControls) for inspecting uploaded 3D printing files. File uploads use presigned PUT URLs to S3 with XHR progress tracking.