Marques & Co.

Project brief

Overview

Custom pet-artwork storefront with passkey sign-in, background image processing, customer proof approval, and print fulfillment.

My contribution
Designed and built the storefront, passkey authentication, artwork workers, payments, proof approval, and fulfillment integration.
100% Solo DevelopmentMarques & Co. custom pet portraits on posters, puzzles, pillows, tote bags, and mugs.
Custom pet portraits applied to the Marques & Co. product lineup, from posters to mugs.

The project

A custom pet-portrait storefront connecting photo uploads and AI artwork generation with product mockups, customer approval, and print fulfillment. Customers choose a style, review proofs, and approve production. The Next.js storefront offers passkey sign-in, while separate Express services handle public requests and queued artwork jobs on Cloud Run.

How it works

  1. Choose a portrait

    The customer picks a product and artwork style, uploads a pet photo, and checks out.

  2. Generate the artwork

    A queued worker prepares the portrait and product mockup while the storefront remains available.

  3. Review the proof

    The customer reviews the mockup and can request a revision before approving it.

  4. Release production

    Approval releases the print order to fulfillment, with the production artwork kept separate from the preview.

Engineering decisions

Image processing in the background

The challenge

Generating artwork takes longer than a normal web request and can leave customers waiting.

The approach

Cloud Tasks dispatches authenticated jobs to a private worker. Per-item leases and fencing tokens prevent an older artwork job from overwriting a newer revision.

Customer approval before printing

The challenge

Payment, artwork revisions, and manufacturing need to stay aligned for each order.

The approach

Held Printify orders provide product mockups for review. Customer approval then releases production, with separate preview and high-resolution artwork files.

Safe retries at checkout

The challenge

Payment webhooks can be delivered more than once, risking duplicate orders or fulfillment work.

The approach

Firestore transactions record webhook events and claim each payment. Order creation and claim completion commit together so retries can recognize work already performed.

Architecture

System architecture — Marques & Co.

From a customer photo to a finished product

Fast customer requests and slower artwork production run independently, connected by a durable job queue.

User interfaceServer processingData & stateExternal services
01

The storefront stays responsive

Customer requests → public API

Customer
Upload & checkout

Choose a product, upload a photo and pay.

  • Next.js
Public service
Order orchestration

Validates uploads, handles checkout and queues work.

  • Express
API + webhooks
Payment confirmed

Payment events establish the paid order.

  • Stripe
The API dispatches slow work to a private worker
02

A separate path for production

Authenticated jobs → artwork → approval

Job delivery
Durable task queue

Dispatches authenticated jobs for background processing.

  • Cloud Tasks
Private worker
Render the artwork

An Express worker runs image pipelines to create proofs and print files.

  • Python
  • OpenAI
Approval gate
Release production

Held Printify orders supply mockups. Customer approval releases the order to production.

Shared order state & artwork

API and worker use Firestore for progress and Cloud Storage for uploads, proofs and production files. The storefront reads progress through the API.

DeploymentGoogle Cloud Run

Three services: Next.js storefront, public Express API and private Express worker.

Outcome

One photo-to-print workflow supports five product types: posters, puzzles, pillows, tote bags, and mugs. Artwork is generated outside storefront requests, and customers approve a proof before production. Payment claims recognize webhook retries, while job ownership checks stop an older artwork task from overwriting a newer revision.