// 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
62D30F10-B28E-4888-8D2A-7F5D19233007_edi
Freya, owner of mystical crow

WHY, HELLO THERE!

Freya, owner of mystical crow

I’m Freya, the soul and hands behind The Mystical Crow, a dark, enchanting space where Victorian elegance meets occult mystery. My shop is a sanctuary for the witchy and curious, designed to reveal the beauty in darkness.

 

As an artist, I work across many mediums—painting, pottery, photography, and videography. Before The Mystical Crow, I was a special effects makeup artist, creating illusions and breathing life into the macabre. Now, through my shop, I embrace that same spirit by crafting pieces that feel like echoes from another realm. Each creation is an extension of my true self, a glimpse into my dark vision of art.

 

My work has been featured in magazines, and I’m grateful for the support of my amazing Instagram witchy community. The Mystical Crow is not just a shop; it’s my spellbound corner of the world, shared with all who feel the pull of the arcane.

Freya, owner of mystical crow
Freya, owner of mystical crow
bottom of page