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.
| Product | Catalogue id | Price | Size | Weight |
|---|---|---|---|---|
| AngleTime Desk Clock | angletime | $29.99 | 90 × 90 × 100 mm | 150 g |
| ArcTick Desk Clock | arctick | $22.99 | 110 × 35 × 110 mm | 200 g |
| CubeTick Desk Clock | cubetick | $24.99 | 110 × 110 × 60 mm | 240 g |
| CurlClock Desk Clock | curlclock | $19.99 | 119 × 101 × 88 mm | 140 g |
| Keyline Desk Clock | keyline | $32.99 | 87 × 87 × 71 mm | 200 g |
| QuirkyCube Desk Clock | quirkycube | $24.99 | 80 × 80 × 80 mm | 240 g |
| RippleRound Table Clock | rippleround | $24.99 | 110 × 110 × 110 mm | 200 g |
| Ziggy Desk Clock | ziggy | $24.99 | 90 × 79 × 110 mm | 160 g |
| Geoglow Table Lamp | geoglow | from $34.99 | 125 × 125 × 220 mm | 180 g |
| Lava Table Lamp | lava | from $39.99 | 100 × 100 × 260 mm | 360 g |
| WavyGlow Table Lamp | wavyglow | $34.99 | 130 × 130 × 240 mm | 225 g |
| Aurora Shade Lamp | aurora | from $41.99 | 178 × 178 × 238 mm | 270 g |
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.
| Product | Colours | Other option |
|---|---|---|
| AngleTime | White with Black Base · Mint green with Olive green Base · Orange with Red Base · Pink with Cyan Base | — |
| ArcTick | White with Pink Base · Cyan with White Base · Red with Black Base | Face: Line Face or Flat Face |
| CubeTick | Mint green with Red Base · White with Black Base · Yellow with Orange Base · White with Cyan Base | — |
| CurlClock | Pink · Red · Black · Yellow · White · Orange | — |
| Keyline | Red · Yellow · Cyan · Orange | — |
| QuirkyCube | Red with Black Base · Black with White Base · Mint Green with Yellow Base | — |
| RippleRound | Cyan with Red Base · White with Black Base · Pink with Blue Base · Mint green with Red Base | — |
| Ziggy | Black · Blue · Red · Cyan · Mint green · Pink | — |
| Geoglow | White with Black Base | Bulb Type: Cord or Cordless |
| Lava | Red with Black Base | Bulb Type: Cord or Cordless |
| WavyGlow | Pink with White Stand · Yellow with White Stand · Orange with White Stand | Bulb Type: Cord or Cordless |
| Aurora Shade | Yellow · Pink · White · Orange · Mint green | Bulb Type: Cordless or Cord |
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#
| Spec | Value |
|---|---|
| Material | PLA |
| Layer height | 0.2 mm |
| Made in | Texas, USA |
| Quantity per line | 1 to 20 |
| Processing | 1 to 2 business days, after the order is placed |
| Shipping | Standard, 3 to 5 business days |
| Returns | 14 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 product | Custom print at /print | |
|---|---|---|
| What you supply | Nothing — pick from the catalogue | An STL, GLB, 3MF or G-code file |
| Price | Fixed catalogue price × quantity | Billable grams × the material's rate per gram, $1.00 minimum per part |
| Quote | None needed | From a real slice of your model, before you pay |
| Material | PLA only | PLA, PETG, ABS, ASA or flexible TPU |
| Layer height | 0.2 mm | 0.2 mm standard, or 0.1 mm premium at 1.75× |
| Colour | The product's list | Twelve stock colours, or a custom colour at a $0.20/g floor |
| Bulk discount | None | 5% at 5 units, 10% at 10 |
| Quantity | 1 to 20 per line | Set 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 Now | Cart | |
|---|---|---|
| Endpoint | POST /api/checkout | POST /api/cart-checkout |
| What it carries | One product | Any mix of products and custom prints |
| Postage | No postage line is added to the session | $7 flat US, free over $50 of goods; $30 international, free over $500 |
| Gift card | No field for one | Applied in the cart before checkout |
| First-order discount | Not applied | 10% of goods on a first order |
| Address countries | US, CA, GB, AU, DE, FR, IN | US only, or 22 countries when you choose International |
| Order id | STORE-… | CART-… |
Buying one product directly#
/api/checkoutSigned inCreate a Stripe Checkout session for a single catalogue product.
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.
quantityintegeroptionaldefault1- 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.
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 CheckoutAfter 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.