// Page Code for /checkout-link import { cart } from 'wix-stores'; import wixLocation from 'wix-location'; /** * Accepts `products` query parameter in Meta format: * - Encoded: products=112233%3A1%2C445566%3A2 * - Unencoded: products=112233:1,445566:2 (still works) * * Each entry is ID:QTY. Colons/commas may be RFC 3986-escaped. * Example final URL for Meta: * https://mysticalcrow.com/checkout-link?products=112233%3A1%2C445566%3A2 */ function parseProductsParam(rawParam) { if (!rawParam || typeof rawParam !== 'string') return []; // Try to decode once; if it throws or changes nothing, we still continue safely let decoded = rawParam; try { // decodeURIComponent will convert %3A -> ":", %2C -> "," decoded = decodeURIComponent(rawParam); } catch (_e) { // If decoding fails, we’ll proceed with the original string } // Split by commas (now that we normalized to ":" and ",") // Trim spaces just in case. return decoded .split(',') .map(s => s.trim()) .filter(Boolean) .map(pair => { const [id, qty] = pair.split(':').map(x => (x || '').trim()); const quantity = Number(qty); return (id && !Number.isNaN(quantity) && quantity > 0) ? { productId: id, quantity } : null; }) .filter(Boolean); } async function addAllToCart(items) { // Wix Stores cart.addProducts accepts an array of product objects. // We’ll add one by one to ensure each promise resolves, but you can batch if desired. for (const item of items) { // If a product has variants/options, you’ll need to pass the relevant // selection data here (e.g., options: [{ optionName, selection }]). // For simple products, productId + quantity is sufficient. await cart.addProducts([{ productId: item.productId, quantity: item.quantity }]); } } $w.onReady(async function () { const { products } = wixLocation.query; if (!products) { // No parameter present; go to cart so the user isn't stuck. wixLocation.to('/cart'); return; } const items = parseProductsParam(products); if (!items.length) { // Parameter present but invalid/empty after parsing wixLocation.to('/cart'); return; } try { await addAllToCart(items); // Success: go straight to checkout wixLocation.to('/checkout'); } catch (_err) { // If anything fails (bad ID, etc.), fall back to cart wixLocation.to('/cart'); } });
top of page

Haunted Victorian Manor – Dark Academia Candle

Behind shuttered windows and under the weight of time, the Haunted Victorian Manor waits—its halls heavy with whispers, its walls steeped in memory. This candle captures the atmosphere of forgotten parlors and candlelit corridors, where velvet drapes hold onto secrets and every creak of the floorboards feels like a voice from the past. It is the lingering essence of history and haunting, a fragrance that makes the air itself feel alive with stories untold.

Fog and Fern fragrance oil sets the scene with a breath of ozone and bright bergamot, softening into lavender and mint before settling into moss, rain-damp earth, and juniper. Infused with cedarwood, patchouli, lemon, orange, and lime essential oils, it is fresh, grounding, and ghostly all at once—like stepping into a manor where the past refuses to rest.

Hand-poured with 100% soy wax and a clean cotton wick, this candle provides a pure, toxin-free burn. Each fragrance oil is clean and phthalate-free, ensuring a safe yet immersive experience.

Available in three sizes to suit your rituals:
– 16 oz glass jar for long nights spent in shadowed rooms
– 12 oz glass jar for daily brushes with mystery
– 6 oz travel tin to carry the haunt wherever you wander

Light the flame, and let the Haunted Victorian Manor awaken—where every flicker calls forth echoes of lives once lived, and the ghosts of the past linger close.

 

HAUNTED VICTORIAN MANOR Dark Academia Candle Collection

$13.00Price
Quantity
    bottom of page