X3DStudios

Store

The twelve ready-made desk clocks and lamps sold at /store: prices, colours, options, how a finished product differs from a custom print, and lead time.

The store at /store sells twelve finished products — eight desk clocks and four lamps — that we designed and print ourselves. There is no file to upload and no quote to wait for: you pick a colour, pick a quantity, and pay the catalogue price. Everything is printed to order in PLA on the same farm that runs custom jobs, so an order takes a day or two to make before it ships.

What is in the catalogue#

Twelve products in two collections, from $19.99 to $41.99. Browse everything at /store, or a single collection at /store/desk-clocks and /store/lamps.

ProductCatalogue idPriceSizeWeight
AngleTime Desk Clockangletime$29.9990 × 90 × 100 mm150 g
ArcTick Desk Clockarctick$22.99110 × 35 × 110 mm200 g
CubeTick Desk Clockcubetick$24.99110 × 110 × 60 mm240 g
CurlClock Desk Clockcurlclock$19.99119 × 101 × 88 mm140 g
Keyline Desk Clockkeyline$32.9987 × 87 × 71 mm200 g
QuirkyCube Desk Clockquirkycube$24.9980 × 80 × 80 mm240 g
RippleRound Table Clockrippleround$24.99110 × 110 × 110 mm200 g
Ziggy Desk Clockziggy$24.9990 × 79 × 110 mm160 g
Geoglow Table Lampgeoglowfrom $34.99125 × 125 × 220 mm180 g
Lava Table Lamplavafrom $39.99100 × 100 × 260 mm360 g
WavyGlow Table Lampwavyglow$34.99130 × 130 × 240 mm225 g
Aurora Shade Lampaurorafrom $41.99178 × 178 × 238 mm270 g
Desk clocks first, then lamps. The catalogue id is what the checkout endpoint takes.

Three lamps are listed with a From price on the collection pages. That is a listing label, not a configurator: checkout charges the price above whichever options you choose, because no option in the catalogue carries a price of its own.

What you can choose#

Two things: a colour, and — on some products — one named option. Both come from a fixed list held on the server. Every lamp has a Bulb Type option; ArcTick has a Face option; nothing else has an option beyond colour.

ProductColoursOther option
AngleTimeWhite with Black Base · Mint green with Olive green Base · Orange with Red Base · Pink with Cyan Base
ArcTickWhite with Pink Base · Cyan with White Base · Red with Black BaseFace: Line Face or Flat Face
CubeTickMint green with Red Base · White with Black Base · Yellow with Orange Base · White with Cyan Base
CurlClockPink · Red · Black · Yellow · White · Orange
KeylineRed · Yellow · Cyan · Orange
QuirkyCubeRed with Black Base · Black with White Base · Mint Green with Yellow Base
RippleRoundCyan with Red Base · White with Black Base · Pink with Blue Base · Mint green with Red Base
ZiggyBlack · Blue · Red · Cyan · Mint green · Pink
GeoglowWhite with Black BaseBulb Type: Cord or Cordless
LavaRed with Black BaseBulb Type: Cord or Cordless
WavyGlowPink with White Stand · Yellow with White Stand · Orange with White StandBulb Type: Cord or Cordless
Aurora ShadeYellow · Pink · White · Orange · Mint greenBulb Type: Cordless or Cord
The list is the whole list
Colour and option values are resolved against the catalogue on the server. A value that is not on the product's list is not an error — it silently falls back to the first entry, so a request for a colour we do not make ships the default colour rather than failing. There is no free-text colour field, no scaling, no material choice and no engraving on a store product. If you need any of those, order it as a custom print.

Geoglow's description names six interchangeable shades — Crystal Dome, Facet Barrel, Prism Glow, Glaciar Drum, Ripple Spiral and Geo Gem. They are not a selectable option in the catalogue, so ask at /contact if you want a specific one.

How it is made#

SpecValue
MaterialPLA
Layer height0.2 mm
Made inTexas, USA
Quantity per line1 to 20
Processing1 to 2 business days, after the order is placed
ShippingStandard, 3 to 5 business days
Returns14 days from delivery, in original condition

Nothing is held in stock. Each unit is printed after the order lands and inspected before it is packed, which is why processing is a day or two rather than same-day. PLA also sets the limits on where the finished thing can live: keep it out of prolonged direct sunlight, do not let it get above 60 °C (140 °F), wipe it with a dry or slightly damp cloth, and keep it out of the dishwasher.

Store product versus custom print#

Both come off the same printers. What differs is where the price comes from, and how much of the job you have to specify.

Store productCustom print at /print
What you supplyNothing — pick from the catalogueAn STL, GLB, 3MF or G-code file
PriceFixed catalogue price × quantityBillable grams × the material's rate per gram, $1.00 minimum per part
QuoteNone neededFrom a real slice of your model, before you pay
MaterialPLA onlyPLA, PETG, ABS, ASA or flexible TPU
Layer height0.2 mm0.2 mm standard, or 0.1 mm premium at 1.75×
ColourThe product's listTwelve stock colours, or a custom colour at a $0.20/g floor
Bulk discountNone5% at 5 units, 10% at 10
Quantity1 to 20 per lineSet on the quote

The full print calculation is on /docs/pricing, and what each plastic is good for is on /docs/materials.

The two ways to buy#

A product page has a Buy Now button and an Add to Cart button, and they are not the same checkout. Buy Now sends that one product straight to Stripe. Add to Cart puts it in /cart, where it can travel with custom prints and where discounts apply.

Buy NowCart
EndpointPOST /api/checkoutPOST /api/cart-checkout
What it carriesOne productAny mix of products and custom prints
PostageNo postage line is added to the session$7 flat US, free over $50 of goods; $30 international, free over $500
Gift cardNo field for oneApplied in the cart before checkout
First-order discountNot applied10% of goods on a first order
Address countriesUS, CA, GB, AU, DE, FR, INUS only, or 22 countries when you choose International
Order idSTORE-…CART-…
Sign in first
Both routes require a signed-in session and answer 401 otherwise. Pressing Buy Now while signed out sends you to /auth/signup rather than to Stripe.

Buying one product directly#

POST/api/checkoutSigned in

Create a Stripe Checkout session for a single catalogue product.

Body
typestringrequired
The same endpoint also handles subscription and credits; product is the store path.product
productIdstringrequired
A catalogue id from the table above. An unknown id answers 400.
quantityintegeroptionaldefault 1
Rounded and clamped to 1–20.
colorstringoptional
Must match one of the product's colours exactly. Anything else falls back to the first colour.
optionsobjectoptional
Keyed by the product's option names, such as Bulb Type. A value not on that option's list falls back to the option's first value.
From the browser, signed in at x3dstudios.com
const res = await fetch("https://x3dstudios.com/api/checkout", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    type: "product",
    productId: "wavyglow",
    quantity: 2,
    color: "Pink with White Stand",
    options: { "Bulb Type": "Cordless" },
  }),
});

const { url } = await res.json();
window.location.href = url; // Stripe Checkout
Price comes from the server, never from the request
Title, price and image sent in the body are ignored. The product is looked up by id and charged at its catalogue price, so a request edited in the console cannot buy a $41.99 lamp for $4.

After you pay#

The order is created by Stripe's webhook once the payment succeeds, not when you press the button, and it appears at /orders. It moves through five stages — placed, printed, packed, shipped, delivered — each set by hand by the operator as the work actually happens. Printed, shipped and delivered email you by default; placed already had its confirmation at checkout and packed is an internal milestone. The shipped email is the one that carries a tracking number.