/AffordBuy/  Pay Smart. Pay Less.

Technology
Made Affordable
For Everyone

Brand new, refurbished & certified used phones, computers and accessories. Retail and wholesale. Minneapolis's most trusted tech store.

3K+
Products
50+
Brands
10K+
Customers
iPhone
New

iPhone 16 Pro

256GB · Titanium

$999
MacBook
Refurb

MacBook Pro M3

14" · 16GB · Grade A

$1,149
iPad
Used

iPad Air 5th Gen

256GB · Grade A

$449
Samsung
Refurb

Galaxy S24 Ultra

256GB · Grade A

$599
🔒
Certified Data Wipe
↩️
14-Day Free Returns
🛡️
90-Day Warranty
🚚
Free Shipping $99+
📍
Minneapolis, MN
Shop by Condition

New · Refurbished · Used

Every product tested, graded and guaranteed. Choose the condition that fits your budget.

iPhone 16
Brand New
Apple iPhone 16
128GB · Starlight · Unlocked · Face ID
$799
MacBook Air
Brand New
MacBook Air M3
8GB RAM · 256GB SSD · 13.6" Liquid Retina
$1,099
iPad Pro
Brand New
iPad Pro M4 11"
256GB · Wi-Fi · Ultra Retina XDR Display
$999
Browse

Everything Tech. One Place.

Why Shop With Us

Built on Trust & Value

Store
In-Store Experience

Visit Our Minneapolis Store

Expert staff, live demos, same-day pickup

Team
Wholesale & B2B

We Supply Schools & Businesses

Volume pricing, Net-30 invoicing, dedicated reps

Eco
Sustainability

Certified Refurbished. Planet Friendly.

10,000+ devices diverted from landfill in Year 1

Why AffordBuy

Quality You Can Trust & Afford

Every device goes through a rigorous process so you never have to worry — whether it's brand new, refurbished, or certified used.

🔍

30-Point Quality Inspection

Screen, battery, ports, camera — checked by certified technicians before it reaches you.

🔒

Certified Data Wipe

All pre-owned devices wiped to DoD 5220.22-M military standard. Your privacy, fully protected.

🛡️

Warranty on Everything

New devices carry full manufacturer warranty. Refurbished and used come with 30–90 day warranty.

↩️

14-Day Free Returns

Not happy? Return within 14 days. No questions, no fees, full refund guaranteed.

10K+
Customers
98%
Satisfaction
50+
Brands
3K+
In Stock
📍 Visit Our Minneapolis Store

Minneapolis, Minnesota
Mon–Sat 9am–7pm · Sun 11am–5pm
+1 (800) 233-6732

For Businesses

Wholesale & Bulk Supply

Supply your team, school, or organisation with quality tech at wholesale prices. Volume discounts, dedicated account management, and flexible invoicing.

Volume Pricing

Up to 40% off on 10+ units

Net-30 Invoicing

Flexible terms for verified businesses

Dedicated Rep

Your own account manager always on call

Custom Config

Devices pre-configured to your specs

Request a Wholesale Quote

Reviews

What Our Customers Are Saying

★★★★★

"Bought a refurbished iPhone 15 — looks and works like brand new. Saved $400. Honest grading, real warranty, real peace of mind."

👩
Sarah M.
Minneapolis, MN — Retail Customer
★★★★★

"Ordered 45 laptops for our school. Competitive pricing, fast delivery, every device was perfect. Outstanding B2B service from start to finish."

👨
James K.
IT Director — Minneapolis School District
★★★★★

"Certified used Grade A MacBook is flawless. They transferred all my data in-store. AffordBuy is the only place I shop for tech now."

👩‍💼
Priya L.
Freelancer — Minneapolis, MN
Find Us

Visit Our Minneapolis Store

Come in and see our full range in person. Our expert team is ready to help you find the perfect device.

📍

Store Address

1234 Nicollet Mall, Minneapolis
Minnesota 55403, USA

🕐

Opening Hours

Monday – Saturday: 9:00am – 7:00pm
Sunday: 11:00am – 5:00pm

📞

Contact

+1 (800) 233-6732
hello@affordbuy.com

🚗

Getting Here

Free parking on Nicollet Mall.
5 min walk from Downtown transit hub.

Stay Updated

Get the Best Deals First

New arrivals, flash sales, and wholesale offers straight to your inbox.

🛒Item added to cart

🛒 Your Cart

🛒

Your cart is empty

Add products to get started

Checkout

1
Shipping
2
Payment
3
Review
t.classList.remove('show'), 2800); } // ── ADD TO CART ─────────────────────────────────── function addToCart(name, price, img, spec, btn){ const numPrice = parseFloat(price.replace(/[^0-9.]/g,'')); const existing = cart.find(i => i.name === name); if(existing){ existing.qty++; } else { cart.push({ name, price: numPrice, img, spec, qty:1 }); } saveCart(); renderCartBadge(); renderCartDrawer(); showToast(name + ' added to cart'); if(btn){ btn.textContent = '✓ Added'; btn.classList.add('added'); setTimeout(()=>{ btn.textContent = 'Add to Cart'; btn.classList.remove('added'); }, 1800); } } // ── BUY NOW (add + open checkout) ──────────────── function buyNow(name, price, img, spec){ const numPrice = parseFloat(price.replace(/[^0-9.]/g,'')); if(!cart.find(i=>i.name===name)){ cart.push({ name, price: numPrice, img, spec, qty:1 }); saveCart(); } renderCartBadge(); renderCartDrawer(); openCheckout(); } // ── BADGE ───────────────────────────────────────── function renderCartBadge(){ const total = cart.reduce((a,i)=>a+i.qty,0); document.querySelectorAll('.cart-count').forEach(el=>{ el.textContent = total; el.classList.toggle('visible', total > 0); }); const hc = document.getElementById('cartHeadCount'); if(hc) hc.textContent = total > 0 ? `(${total})` : ''; } // ── RENDER CART ─────────────────────────────────── function renderCartDrawer(){ const el = document.getElementById('cartItems'); const foot = document.getElementById('cartFoot'); const empty = document.getElementById('cartEmpty'); if(!el) return; if(cart.length === 0){ el.innerHTML = '
🛒

Your cart is empty

Add products to get started
'; if(foot) foot.style.display = 'none'; return; } if(foot) foot.style.display = 'block'; el.innerHTML = cart.map((item,i)=>`
${item.name}
${item.name}
${item.spec||''}
${item.qty}
$${(item.price * item.qty).toFixed(2)}
`).join(''); // totals const sub = cart.reduce((a,i)=>a+(i.price*i.qty),0); const tax = sub * 0.08; const total = sub + tax; document.getElementById('cartSubtotal').textContent = '$'+sub.toFixed(2); document.getElementById('cartTax').textContent = '$'+tax.toFixed(2); document.getElementById('cartTotal').textContent = '$'+total.toFixed(2); } // ── QTY / REMOVE ────────────────────────────────── function changeQty(i, delta){ cart[i].qty += delta; if(cart[i].qty <= 0) cart.splice(i,1); saveCart(); renderCartBadge(); renderCartDrawer(); } function removeItem(i){ const name = cart[i].name; cart.splice(i,1); saveCart(); renderCartBadge(); renderCartDrawer(); showToast(name + ' removed', '🗑'); } // ── OPEN/CLOSE CART ─────────────────────────────── function openCart(){ renderCartDrawer(); document.getElementById('cartDrawer').classList.add('open'); document.getElementById('overlayBg').classList.add('open'); document.body.style.overflow='hidden'; } function closeCart(){ document.getElementById('cartDrawer').classList.remove('open'); if(!document.getElementById('checkoutModal').classList.contains('open')){ document.getElementById('overlayBg').classList.remove('open'); document.body.style.overflow=''; } } function closeAll(){ document.getElementById('cartDrawer').classList.remove('open'); document.getElementById('checkoutModal').classList.remove('open'); document.getElementById('overlayBg').classList.remove('open'); document.body.style.overflow=''; } // ── CHECKOUT ───────────────────────────────────── function openCheckout(){ closeCart(); ckStep = 1; renderCkStep(); document.getElementById('checkoutModal').classList.add('open'); document.getElementById('overlayBg').classList.add('open'); document.body.style.overflow='hidden'; } function closeCheckout(){ document.getElementById('checkoutModal').classList.remove('open'); document.getElementById('overlayBg').classList.remove('open'); document.body.style.overflow=''; } function setStepIndicators(step){ [1,2,3].forEach(n=>{ const el = document.getElementById('step'+n+'Indicator'); const line = document.getElementById('line'+(n)); el.classList.remove('active','done'); if(n < step) el.classList.add('done'); else if(n === step) el.classList.add('active'); if(line){ line.classList.toggle('done', n < step); } }); const titles = ['','Shipping Address','Payment Details','Review & Confirm']; document.getElementById('ckTitle').textContent = step === 4 ? 'Order Placed!' : titles[step]; } function renderCkStep(){ setStepIndicators(ckStep); const body = document.getElementById('ckBody'); if(ckStep === 1) body.innerHTML = renderShippingStep(); else if(ckStep === 2) body.innerHTML = renderPaymentStep(); else if(ckStep === 3) body.innerHTML = renderReviewStep(); else if(ckStep === 4) body.innerHTML = renderSuccessStep(); if(ckStep < 4) attachFormEvents(); } // ORDER SUMMARY HTML (reused in steps 2 & 3) function orderSummaryHTML(){ const sub = cart.reduce((a,i)=>a+(i.price*i.qty),0); const tax = sub*0.08; const total = sub+tax; const items = cart.map(i=>`
${i.name} × ${i.qty} $${(i.price*i.qty).toFixed(2)}
`).join(''); return `
Order Summary
${items}
Tax (8%)$${tax.toFixed(2)}
ShippingFREE
Total$${total.toFixed(2)}
`; } // ─── STEP 1: SHIPPING ──────────────────────────── function renderShippingStep(){ const s = ckData.shipping; return `
📦 Delivery Information
🔒Your info is encrypted & never stored
`; } function submitShipping(){ const fields=[['fn','First name'],['ln','Last name'],['em','Email'],['ph','Phone'],['ad','Address'],['ci','City'],['zip','ZIP']]; let ok=true; fields.forEach(([id,label])=>{ const el=document.getElementById(id); const err=document.getElementById(id+'_err'); if(!el||!err) return; if(!el.value.trim()){ el.classList.add('error'); err.textContent=label+' is required'; ok=false; } else { el.classList.remove('error'); err.textContent=''; } }); const em=document.getElementById('em'); if(em && em.value && !em.value.includes('@')){ em.classList.add('error'); document.getElementById('em_err').textContent='Enter a valid email'; ok=false; } if(!ok) return; ckData.shipping={ fn:document.getElementById('fn').value, ln:document.getElementById('ln').value, em:document.getElementById('em').value, ph:document.getElementById('ph').value, ad:document.getElementById('ad').value, ci:document.getElementById('ci').value, st:document.getElementById('st').value, zip:document.getElementById('zip').value }; ckStep=2; renderCkStep(); } // ─── STEP 2: PAYMENT ──────────────────────────── function renderPaymentStep(){ const p = ckData.payment; const pm = ckData.payMethod; return ` ${orderSummaryHTML()}
💳 Payment Method
${pm==='card' ? renderCardForm(p) : pm==='paypal' ? renderPayPal() : renderApplePay()}
🔒256-bit SSL — PCI DSS Compliant
`; } function setPayMethod(m){ ckData.payMethod=m; document.getElementById('ckBody').innerHTML = renderPaymentStep(); attachFormEvents(); } function renderCardForm(p){ return `
VISA Mastercard Amex Discover
💳
`; } function renderPayPal(){ return `
🅿

PayPal Checkout

You will be redirected to PayPal to complete your payment securely.

`; } function renderApplePay(){ return `
🍎

Apple Pay

Use Touch ID or Face ID to complete your purchase instantly.

`; } function formatCard(el){ let v = el.value.replace(/\D/g,'').substring(0,16); el.value = v.replace(/(.{4})/g,'$1 ').trim(); // detect type const icon = document.getElementById('cardTypeIcon'); const first = v[0]; if(icon){ if(first==='4') icon.textContent='💙'; else if(first==='5') icon.textContent='🟧'; else if(first==='3') icon.textContent='🟩'; else if(first==='6') icon.textContent='🟪'; else icon.textContent='💳'; } // badge ['visa','mc','amex','disc'].forEach(b=>document.getElementById('badge-'+b)?.classList.remove('active')); if(first==='4') document.getElementById('badge-visa')?.classList.add('active'); else if(first==='5') document.getElementById('badge-mc')?.classList.add('active'); else if(first==='3') document.getElementById('badge-amex')?.classList.add('active'); else if(first==='6') document.getElementById('badge-disc')?.classList.add('active'); } function formatExp(el){ let v = el.value.replace(/\D/g,''); if(v.length >= 2) v = v.substring(0,2)+' / '+v.substring(2,4); el.value = v; } function submitPayment(){ const pm = ckData.payMethod; if(pm !== 'card'){ ckData.payment = {method: pm}; ckStep=3; renderCkStep(); return; } const fields=[['cname','Cardholder name'],['cnum','Card number'],['cexp','Expiry'],['ccvv','CVV']]; let ok=true; fields.forEach(([id,label])=>{ const el=document.getElementById(id); const err=document.getElementById(id+'_err'); if(!el||!err) return; if(!el.value.trim()){ el.classList.add('error'); err.textContent=label+' is required'; ok=false; } else { el.classList.remove('error'); err.textContent=''; } }); const cnum = document.getElementById('cnum'); if(cnum && cnum.value.replace(/\s/g,'').length < 16){ cnum.classList.add('error'); document.getElementById('cnum_err').textContent='Enter a 16-digit card number'; ok=false; } if(!ok) return; ckData.payment = { method:'card', cname:document.getElementById('cname').value, cnum:'•••• •••• •••• '+document.getElementById('cnum').value.slice(-4), cexp:document.getElementById('cexp').value, ccvv:'•••' }; ckStep=3; renderCkStep(); } // ─── STEP 3: REVIEW ────────────────────────────── function renderReviewStep(){ const s = ckData.shipping; const p = ckData.payment; return ` ${orderSummaryHTML()}
📦 Ship To
${s.fn} ${s.ln}
${s.ad}, ${s.ci}, ${s.st} ${s.zip}
${s.em} · ${s.ph}
💳 Payment
${p.method==='card'?'💳':p.method==='paypal'?'🅿':''}
${p.method==='card'?p.cname+' — '+p.cnum:p.method==='paypal'?'PayPal':'Apple Pay'} ${p.method==='card'?'Expires: '+p.cexp+'':''}
🔒By placing your order you agree to our Terms & Privacy Policy
`; } // ─── STEP 4: SUCCESS ───────────────────────────── function renderSuccessStep(){ const total = cart.reduce((a,i)=>a+(i.price*i.qty),0)*1.08; const orderNum = 'AB-'+Math.floor(100000+Math.random()*900000); return `

Order Placed!

Thank you for shopping with AffordBuy! Your order has been confirmed and will be shipped to you soon.

Order #${orderNum}
A confirmation email has been sent to ${ckData.shipping.em||'your email'}. Estimated delivery: 3–5 business days.
Total Charged: $${total.toFixed(2)}
`; } function placeOrder(){ const btn = document.getElementById('placeBtn'); if(btn){ btn.textContent='Processing…'; btn.disabled=true; } setTimeout(()=>{ ckStep=4; document.getElementById('ckTitle').textContent='Order Placed!'; document.querySelector('.ck-steps').style.display='none'; setStepIndicators(4); renderCkStep(); }, 1800); } function orderComplete(){ cart=[]; saveCart(); renderCartBadge(); renderCartDrawer(); closeCheckout(); showToast('Order confirmed! Check your email.', '✅'); document.querySelector('.ck-steps') && (document.querySelector('.ck-steps').style.display=''); } function attachFormEvents(){ // real-time validation feedback document.querySelectorAll('.ck-field input, .ck-field select').forEach(el=>{ el.addEventListener('input', ()=>{ if(el.value.trim()){ el.classList.remove('error'); } }); }); } // ── PATCH ALL PRODUCT CARDS ─────────────────────── function patchProductCards(){ document.querySelectorAll('.pcard, .hcard').forEach(card=>{ const btn = card.querySelector('.btn-cart, .btn-add'); if(!btn || btn.dataset.patched) return; btn.dataset.patched='1'; const name = (card.querySelector('.pcard-nm,.pcard-name,.hcard h4')?.textContent||'').trim(); const priceEl = card.querySelector('.pcard-pr,.hcard-price,.pcard-price'); const price = priceEl ? priceEl.textContent.trim() : '$0'; const img = card.querySelector('img')?.src||''; const spec = (card.querySelector('.pcard-sp,.pcard-spec,.hcard p')?.textContent||'').trim(); btn.onclick = (e)=>{ e.stopPropagation(); addToCart(name, price, img, spec, btn); }; // Add "Buy Now" button const ft = card.querySelector('.pcard-ft'); if(ft && !ft.querySelector('.btn-buy-now')){ const bbn = document.createElement('button'); bbn.className='btn-buy-now'; bbn.textContent='Buy Now'; bbn.onclick=(e)=>{ e.stopPropagation(); buyNow(name, price, img, spec); }; ft.insertBefore(bbn, btn); } }); } // ── INIT ───────────────────────────────────────── document.addEventListener('DOMContentLoaded', ()=>{ // Inject Cart button into nav const navActions = document.querySelector('.nav-actions,.nav-btns,.nav-r'); if(navActions){ const cartBtnHTML = ``; navActions.insertAdjacentHTML('afterbegin', cartBtnHTML); } renderCartBadge(); patchProductCards(); // Re-patch when tab switches const origSetTab = window.setTab; if(origSetTab){ window.setTab = function(el, type){ origSetTab(el, type); setTimeout(patchProductCards, 100); }; } // Patch hero cards document.querySelectorAll('.hcard').forEach(card=>{ const h4 = card.querySelector('h4'); const prEl = card.querySelector('.hcard-price,.hcard-pr'); const img = card.querySelector('img')?.src||''; const spec = card.querySelector('p')?.textContent||''; if(!h4||!prEl) return; const name = h4.textContent.trim(); const price = prEl.textContent.trim(); // Add buy buttons to hero cards const body = card.querySelector('.hcard-body'); if(body && !body.querySelector('.hcard-btns')){ const div=document.createElement('div'); div.className='hcard-btns'; div.style.cssText='display:flex;gap:.4rem;margin-top:.5rem'; div.innerHTML=` `; body.appendChild(div); } }); // keyboard Escape document.addEventListener('keydown', e=>{ if(e.key==='Escape') closeAll(); }); }); /* ═══════════════════════════════════════════════════ AFFORDBUY — SPA PAGE ENGINE ═══════════════════════════════════════════════════ */ // ── PRODUCT DATABASE ────────────────────────────── const PRODUCTS = { iphones:[ {id:'iph16p', name:'Apple iPhone 16 Pro', spec:'256GB · Titanium Black · Unlocked', price:999, old:1199, img:'https://images.unsplash.com/photo-1510557880182-3d4d3cba35a5?w=700&q=85', badge:'bn', badgeLabel:'Brand New', condition:'New', features:{Storage:'256GB',Color:'Titanium Black',Network:'5G Unlocked',Display:'6.3" Super Retina XDR',Chip:'A18 Pro',Camera:'48MP Triple',Battery:'Up to 27hrs'}}, {id:'iph15pm', name:'iPhone 15 Pro Max', spec:'256GB · Natural Titanium · Grade A', price:799, old:999, img:'https://images.unsplash.com/photo-1592899677977-9c10ca588bbd?w=700&q=85', badge:'br', badgeLabel:'Refurbished', condition:'Refurb',features:{Storage:'256GB',Color:'Natural Titanium',Network:'5G Unlocked',Display:'6.7" Super Retina XDR',Chip:'A17 Pro',Camera:'48MP Triple',Battery:'Up to 29hrs'}}, {id:'iph14p', name:'iPhone 14 Pro', spec:'128GB · Deep Purple · Grade A', price:389, old:599, img:'https://images.unsplash.com/photo-1574755393849-623942496936?w=700&q=85', badge:'bu', badgeLabel:'Certified Used',condition:'Used', features:{Storage:'128GB',Color:'Deep Purple',Network:'5G Unlocked',Display:'6.1" Super Retina XDR',Chip:'A16 Bionic',Camera:'48MP Dual',Battery:'Up to 23hrs'}}, {id:'iph13', name:'iPhone 13', spec:'128GB · Midnight · Grade B', price:279, old:449, img:'https://images.unsplash.com/photo-1510557880182-3d4d3cba35a5?w=700&q=85', badge:'bu', badgeLabel:'Certified Used',condition:'Used', features:{Storage:'128GB',Color:'Midnight',Network:'5G Unlocked',Display:'6.1" Super Retina XDR',Chip:'A15 Bionic',Camera:'12MP Dual',Battery:'Up to 19hrs'}}, ], android:[ {id:'s24u', name:'Samsung Galaxy S24 Ultra', spec:'256GB · Titanium Black · Grade A', price:599, old:799, img:'https://images.unsplash.com/photo-1610945265064-0e34e5519bbf?w=700&q=85', badge:'br', badgeLabel:'Refurbished', condition:'Refurb',features:{Storage:'256GB',Color:'Titanium Black',Network:'5G Unlocked',Display:'6.8" Dynamic AMOLED',Chip:'Snapdragon 8 Gen 3',Camera:'200MP Quad',Battery:'5000mAh'}}, {id:'s23', name:'Samsung Galaxy S23', spec:'128GB · Phantom Black · Grade A', price:329, old:499, img:'https://images.unsplash.com/photo-1610945265064-0e34e5519bbf?w=700&q=85', badge:'bu', badgeLabel:'Certified Used',condition:'Used', features:{Storage:'128GB',Color:'Phantom Black',Network:'5G Unlocked',Display:'6.1" Dynamic AMOLED',Chip:'Snapdragon 8 Gen 2',Camera:'50MP Triple',Battery:'3900mAh'}}, {id:'pixel9', name:'Google Pixel 9 Pro', spec:'256GB · Obsidian · Brand New', price:849, old:999, img:'https://images.unsplash.com/photo-1610945265064-0e34e5519bbf?w=700&q=85', badge:'bn', badgeLabel:'Brand New', condition:'New', features:{Storage:'256GB',Color:'Obsidian',Network:'5G Unlocked',Display:'6.3" LTPO OLED',Chip:'Google Tensor G4',Camera:'50MP Triple',Battery:'4700mAh'}}, ], laptops:[ {id:'mba_m3', name:'MacBook Air M3 13"', spec:'8GB RAM · 256GB SSD · Midnight', price:1099, old:1299, img:'https://images.unsplash.com/photo-1541807084-5c52b6b3adef?w=700&q=85', badge:'bn', badgeLabel:'Brand New', condition:'New', features:{RAM:'8GB Unified',Storage:'256GB SSD',Chip:'Apple M3',Display:'13.6" Liquid Retina',Battery:'Up to 18hrs',Weight:'1.24kg',OS:'macOS Sonoma'}}, {id:'mbp_m3', name:'MacBook Pro M3 14"', spec:'16GB · 512GB · Grade A', price:1149, old:1399, img:'https://images.unsplash.com/photo-1517336714731-489689fd1ca4?w=700&q=85', badge:'br', badgeLabel:'Refurbished', condition:'Refurb',features:{RAM:'16GB Unified',Storage:'512GB SSD',Chip:'Apple M3 Pro',Display:'14.2" Liquid Retina XDR',Battery:'Up to 18hrs',Weight:'1.61kg',OS:'macOS Sonoma'}}, {id:'x1c', name:'Lenovo ThinkPad X1 Carbon', spec:'Intel i7 · 16GB · 512GB SSD', price:1299, old:1599, img:'https://images.unsplash.com/photo-1496181133206-80ce9b88a853?w=700&q=85', badge:'bn', badgeLabel:'Brand New', condition:'New', features:{CPU:'Intel Core i7-1355U',RAM:'16GB LPDDR5',Storage:'512GB NVMe',Display:'14" 2.8K IPS',Battery:'Up to 15hrs',Weight:'1.12kg',OS:'Windows 11 Pro'}}, {id:'xps15', name:'Dell XPS 15', spec:'Intel i7 · 16GB · Grade A', price:649, old:899, img:'https://images.unsplash.com/photo-1496181133206-80ce9b88a853?w=700&q=85', badge:'bu', badgeLabel:'Certified Used',condition:'Used', features:{CPU:'Intel Core i7-12700H',RAM:'16GB DDR5',Storage:'512GB SSD',Display:'15.6" OLED',Battery:'Up to 13hrs',Weight:'1.86kg',OS:'Windows 11'}}, ], computers:[ {id:'imac24', name:'iMac 24" M1', spec:'8GB · 256GB · Silver · Grade B', price:899, old:1099, img:'https://images.unsplash.com/photo-1527443224154-c4a3942d3acf?w=700&q=85', badge:'br', badgeLabel:'Refurbished', condition:'Refurb',features:{RAM:'8GB Unified',Storage:'256GB SSD',Chip:'Apple M1',Display:'24" 4.5K Retina',Ports:'4x USB-C / 2x USB-3',Networking:'Wi-Fi 6',OS:'macOS Sonoma'}}, {id:'mac_mini',name:'Mac Mini M2', spec:'8GB · 256GB · Brand New', price:599, old:699, img:'https://images.unsplash.com/photo-1527443224154-c4a3942d3acf?w=700&q=85', badge:'bn', badgeLabel:'Brand New', condition:'New', features:{RAM:'8GB Unified',Storage:'256GB SSD',Chip:'Apple M2',Display:'Up to 2 displays',Ports:'2x Thunderbolt 4 · 3x USB-A',Networking:'Wi-Fi 6E',OS:'macOS Sonoma'}}, ], tablets:[ {id:'ipad_pro',name:'iPad Pro M4 11"', spec:'256GB · Wi-Fi · Space Black', price:999, old:1099, img:'https://images.unsplash.com/photo-1544244015-0df4b3ffc6b0?w=700&q=85', badge:'bn', badgeLabel:'Brand New', condition:'New', features:{Storage:'256GB',Chip:'Apple M4',Display:'11" Ultra Retina XDR',Camera:'12MP Wide + Ultra Wide',Battery:'Up to 10hrs',Connectivity:'Wi-Fi 6E',OS:'iPadOS 17'}}, {id:'ipad_air',name:'iPad Air 5th Gen', spec:'64GB · Wi-Fi · Grade A', price:319, old:449, img:'https://images.unsplash.com/photo-1544244015-0df4b3ffc6b0?w=700&q=85', badge:'bu', badgeLabel:'Certified Used',condition:'Used', features:{Storage:'64GB',Chip:'Apple M1',Display:'10.9" Liquid Retina',Camera:'12MP Wide',Battery:'Up to 10hrs',Connectivity:'Wi-Fi 6',OS:'iPadOS 17'}}, {id:'tab_s9', name:'Samsung Galaxy Tab S9', spec:'256GB · Wi-Fi · Graphite · Grade A', price:499, old:699, img:'https://images.unsplash.com/photo-1544244015-0df4b3ffc6b0?w=700&q=85', badge:'br', badgeLabel:'Refurbished', condition:'Refurb',features:{Storage:'256GB',Chip:'Snapdragon 8 Gen 2',Display:'11" Dynamic AMOLED 2X',Camera:'13MP',Battery:'8400mAh',Connectivity:'Wi-Fi 6E',OS:'Android 14'}}, ], accessories:[ {id:'airpods_pro',name:'AirPods Pro 2nd Gen', spec:'USB-C · Active Noise Cancellation', price:249, old:279, img:'https://images.unsplash.com/photo-1572536147248-ac59a8abfa4b?w=700&q=85', badge:'bn', badgeLabel:'Brand New', condition:'New', features:{ANC:'Yes',Battery:'6hrs + 30hrs case',Chip:'H2',Connectivity:'Bluetooth 5.3',Features:'Adaptive Audio',Sweat:'IP54',Case:'USB-C / MagSafe'}}, {id:'apw_charger',name:'Apple 96W USB-C Charger',spec:'Compatible with all USB-C devices', price:49, old:79, img:'https://images.unsplash.com/photo-1572536147248-ac59a8abfa4b?w=700&q=85', badge:'bn', badgeLabel:'Brand New', condition:'New', features:{Power:'96W',Ports:'USB-C',Compatible:'MacBook, iPad, iPhone',Length:'1.8m cable incl.',Safety:'UL Listed',Warranty:'1 Year',Color:'White'}}, {id:'case_iph16',name:'AffordBuy iPhone 16 Case',spec:'MagSafe Compatible · Clear', price:29, old:49, img:'https://images.unsplash.com/photo-1572536147248-ac59a8abfa4b?w=700&q=85', badge:'bn', badgeLabel:'Brand New', condition:'New', features:{Material:'Polycarbonate',MagSafe:'Yes',Protection:'MIL-STD-810G Drop',Finish:'Crystal Clear',Ports:'Full access',Weight:'28g',Color:'Clear'}}, ], windows:[ {id:'xps15', name:'Dell XPS 15', spec:'Intel i7 · 16GB · Grade A', price:649, old:899, img:'https://images.unsplash.com/photo-1496181133206-80ce9b88a853?w=700&q=85', badge:'bu', badgeLabel:'Certified Used',condition:'Used', features:{CPU:'Intel Core i7-12700H',RAM:'16GB DDR5',Storage:'512GB SSD',Display:'15.6" OLED',Battery:'Up to 13hrs',Weight:'1.86kg',OS:'Windows 11'}}, {id:'x1c', name:'Lenovo ThinkPad X1 Carbon', spec:'Intel i7 · 16GB · 512GB SSD', price:1299, old:1599, img:'https://images.unsplash.com/photo-1496181133206-80ce9b88a853?w=700&q=85', badge:'bn', badgeLabel:'Brand New', condition:'New', features:{CPU:'Intel Core i7-1355U',RAM:'16GB LPDDR5',Storage:'512GB NVMe',Display:'14" 2.8K IPS',Battery:'Up to 15hrs',Weight:'1.12kg',OS:'Windows 11 Pro'}}, ], refurb:[], // computed below deals:[], // computed below new:[], // computed below }; // Computed categories PRODUCTS.refurb = Object.values(PRODUCTS).flat().filter(p=>p.badge==='br'); PRODUCTS.deals = Object.values(PRODUCTS).flat().filter(p=>p.old && p.old - p.price >= 100).sort((a,b)=>(b.old-b.price)-(a.old-a.price)); PRODUCTS.new = Object.values(PRODUCTS).flat().filter(p=>p.badge==='bn'); PRODUCTS.smartphones = [...(PRODUCTS.iphones||[]),...(PRODUCTS.android||[])]; // ── BADGE CONFIG ────────────────────────────────── const BADGE_STYLES = { bn:'background:rgba(5,150,105,.1);color:#059669;border:1px solid rgba(5,150,105,.22)', br:'background:rgba(123,108,246,.1);color:var(--v);border:1px solid var(--vborder)', bu:'background:rgba(180,83,9,.08);color:#b45309;border:1px solid rgba(180,83,9,.22)', }; // ── PAGE ROUTER ─────────────────────────────────── let currentPageModal = null; function openPage(type, sub){ const overlay = document.getElementById('pageOverlay'); const content = document.getElementById('pageContent'); const bcCurr = document.getElementById('bcCurr'); const scroll = overlay.querySelector('.page-scroll'); let title = ''; let html = ''; if(type === 'shop'){ const list = PRODUCTS[sub] || []; const titles = { iphones:'iPhones',android:'Android Phones',laptops:'Laptops', computers:'Computers',tablets:'Tablets',accessories:'Accessories', windows:'Windows Laptops',refurb:'Certified Refurbished', deals:'Hot Deals',new:'New Arrivals',smartphones:'Smartphones', }; title = titles[sub] || 'Products'; html = renderShopPage(title, sub, list); } else if(type === 'tradein'){ title = 'Trade-In Your Device'; html = renderTradeInPage(); } else if(type === 'about'){ title = 'About Us'; html = renderAboutPage(); } else if(type === 'wholesale'){ title = 'Wholesale & B2B'; html = renderWholesalePage(); } else if(type === 'careers'){ title = 'Careers'; html = renderCareersPage(); } else if(type === 'store'){ title = 'Our Store'; html = renderStorePage(); } else if(type === 'blog'){ title = 'Blog'; html = renderBlogPage(); } else if(type === 'contact'){ title = 'Contact Us'; html = renderContactPage(); } else if(type === 'track'){ title = 'Track Your Order'; html = renderTrackPage(); } else if(type === 'returns'){ title = 'Returns Policy'; html = renderReturnsPage(); } else if(type === 'warranty'){ title = 'Warranty Information'; html = renderWarrantyPage(); } else if(type === 'repair'){ title = 'Repair Service'; html = renderRepairPage(); } else if(type === 'privacy'){ title = 'Privacy Policy'; html = renderPrivacyPage(); } else if(type === 'terms'){ title = 'Terms of Use'; html = renderTermsPage(); } bcCurr.textContent = title; content.innerHTML = html; overlay.classList.add('open'); scroll.scrollTop = 0; document.body.style.overflow = 'hidden'; // close mega menu document.querySelectorAll('.mega-panel').forEach(p=>p.style.opacity=''); } function closePage(){ document.getElementById('pageOverlay').classList.remove('open'); document.body.style.overflow = ''; } // ── SHOP PAGE ───────────────────────────────────── function renderShopPage(title, sub, list){ const filters = ['All','New','Refurbished','Certified Used']; const filterBtns = filters.map((f,i)=>``).join(''); let cards = list.length > 0 ? list.map(p=>shopCard(p)).join('') : '

No products found in this category.

'; return `
AffordBuy Store
${title}
Every product inspected, graded & guaranteed. Pay Smart. Pay Less.
Filter: ${filterBtns}
${cards}
`; } function shopCard(p){ const save = p.old ? p.old - p.price : 0; return `
${p.name}
${p.badgeLabel} ${save>=50?`Save $${save}`:''}
${p.name}
${p.spec}
$${p.price} ${p.old?`$${p.old}`:''}
`; } function shopFilter(btn, cond, gridId){ document.querySelectorAll(`#${gridId}`).forEach(()=>{}); btn.closest('.filter-bar').querySelectorAll('.filter-btn').forEach(b=>b.classList.remove('active')); btn.classList.add('active'); document.querySelectorAll(`#${gridId} .sp-card`).forEach(card=>{ if(cond==='All') card.style.display=''; else card.style.display = card.dataset.condition===cond ? '' : 'none'; }); } function shopSearch(input, gridId){ const q = input.value.toLowerCase(); document.querySelectorAll(`#${gridId} .sp-card`).forEach(card=>{ card.style.display = card.dataset.name.includes(q) ? '' : 'none'; }); } function spAddCart(id, btn){ const p = findProduct(id); if(!p) return; addToCart(p.name, '$'+p.price, p.img, p.spec, null); btn.textContent='✓ Added'; btn.classList.add('added'); setTimeout(()=>{ btn.textContent='Add 🛒'; btn.classList.remove('added'); }, 1800); } function findProduct(id){ for(const key of Object.keys(PRODUCTS)){ const found = PRODUCTS[key].find(p=>p.id===id); if(found) return found; } return null; } // ── PRODUCT MODAL ───────────────────────────────── let pmQty = 1; function openProdModal(id){ const p = findProduct(id); if(!p) return; pmQty = 1; const modal = document.getElementById('prodModal'); const box = document.getElementById('prodModalBox'); const save = p.old ? p.old - p.price : 0; const featureRows = Object.entries(p.features||{}).map(([k,v])=>`
${k}${v}
`).join(''); box.innerHTML = `
${p.badgeLabel}
${p.name}
${p.spec}
$${p.price} ${p.old?`$${p.old}`:''} ${save>=30?`Save $${save}`:''}
${featureRows}
Qty:
1
✅ Inspected 🔒 Data Wiped ↩️ 14-Day Returns 🛡️ Warranty
`; modal.classList.add('open'); document.body.style.overflow='hidden'; } function closeProdModal(){ document.getElementById('prodModal').classList.remove('open'); if(!document.getElementById('pageOverlay').classList.contains('open')){ document.body.style.overflow=''; } } function pmChangeQty(delta, id){ pmQty = Math.max(1, Math.min(10, pmQty + delta)); const el = document.getElementById('pmQtyNum'); if(el) el.textContent = pmQty; } function pmAddCart(id){ const p = findProduct(id); if(!p) return; for(let i=0; i{ btn.textContent='🛒 Add to Cart'; btn.classList.remove('added'); }, 2000); } } function pmBuyNow(id){ const p = findProduct(id); if(!p) return; for(let i=0; ic.name===p.name); if(ex) ex.qty++; else cart.push({name:p.name,price:p.price,img:p.img,spec:p.spec,qty:1}); } saveCart(); renderCartBadge(); renderCartDrawer(); closeProdModal(); openCheckout(); } // ── INFO PAGES ──────────────────────────────────── function renderTradeInPage(){ return `
Trade-In Program
Upgrade & Save
Get an instant quote for your old device. Trade it in and save on your next purchase.

Get Your Instant Quote

* Estimate is indicative. Final value confirmed in-store after inspection.

`; } function tiEstimate(){ const type=document.getElementById('ti-type')?.value; const cond=document.getElementById('ti-cond')?.value; const storage=parseInt(document.getElementById('ti-storage')?.value||0); if(!type||!cond||!storage){document.getElementById('tiResult').style.display='none';return;} const base={iphone:280,android:150,laptop:220,tablet:120,desktop:100}[type]||100; const condMult={excellent:1,good:.75,fair:.5,poor:.25}[cond]||1; const storMult={64:.8,128:1,256:1.15,512:1.3,1000:1.5}[storage]||1; const val = Math.round(base * condMult * storMult / 10)*10; document.getElementById('tiVal').textContent='$'+val; document.getElementById('tiResult').style.display='block'; } function renderAboutPage(){ return `
Our Story
About AffordBuy
Making quality technology accessible to everyone in Minneapolis and beyond.

Founded in 2024, AffordBuy Technologies LLC is Minneapolis's most trusted retail and wholesale technology store. We believe everyone deserves access to quality technology — not just those who can afford brand-new prices.

Our Mission

To make premium technology affordable through a rigorous quality assurance process on new, manufacturer-refurbished, and certified pre-owned devices — backed by real warranties and honest grading.

What We Do

  • Sell brand new devices from all major manufacturers
  • Rigorously test and certify pre-owned devices through our 30-point inspection
  • Supply schools, businesses, and organisations with wholesale tech
  • Provide repair services and device trade-ins

Our Values

${[['🔍','Honesty','Transparent grading and pricing — no surprises'],['🛡️','Quality','Every device inspected before it reaches you'],['🤝','Community','Proudly serving Minneapolis since 2024'],['🌱','Sustainability','Keeping devices out of landfill']].map(([ico,t,d])=>`
${ico}
${t}
${d}
`).join('')}

Contact Us

📍 1234 Nicollet Mall, Minneapolis, MN 55403
📞 +1 (800) 233-6732
✉️ hello@affordbuy.com

`; } function renderContactPage(){ return `
Get In Touch
Contact Us
We'd love to hear from you. Our team responds within 24 hours.

Send a Message

Other Ways to Reach Us

${[['📍','Visit Us','1234 Nicollet Mall
Minneapolis, MN 55403'],['📞','Call Us','+1 (800) 233-6732
Mon–Sat 9am–7pm · Sun 11am–5pm'],['✉️','Email Us','hello@affordbuy.com
We reply within 24 hours'],['💬','Live Chat','Available Mon–Sat
9am–6pm CST']].map(([ico,t,d])=>`
${ico}
${t}
${d}
`).join('')}
`; } function renderTrackPage(){ return `
Order Tracking
Track Your Order
Enter your order number or email to see your delivery status.
`; } function doTrack(){ const num = document.getElementById('trackNum')?.value?.trim(); if(!num){ showToast('Please enter your order number','⚠️'); return; } const statuses = ['Order Placed','Processing','Shipped','Out for Delivery']; const active = Math.floor(Math.random()*4); const steps = statuses.map((s,i)=>`
${i
${s}
${i<3?`
`:''}`).join(''); document.getElementById('trackResult').style.display='block'; document.getElementById('trackResult').innerHTML=`
Order ${num}
Est. delivery: ${['Mon','Tue','Wed','Thu','Fri'][active+1]} in 3–5 business days
${steps}
📦 ${statuses[active]} — Your order is on its way!
`; } function renderReturnsPage(){ return `
Returns
14-Day Free Returns
Not completely satisfied? Return any product within 14 days, no questions asked.
${[['↩️','14-Day Return Window','Return any product within 14 days of receipt for a full refund. No restocking fees.'],['📦','Free Return Shipping','We provide a pre-paid return label. Drop it at any UPS location.'],['💳','Full Refund','Refunds are processed within 3–5 business days to your original payment method.'],['🔄','Exchange Option','Prefer an exchange? We\'ll ship the replacement the same day we receive your return.']].map(([ico,t,d])=>`
${ico}
${t}
${d}
`).join('')}

How to Start a Return

`; } function renderWarrantyPage(){ return `
Warranty
Warranty Information
Every device we sell comes with a warranty — because confidence comes included.
${[['Brand New Devices','Full manufacturer warranty applies. Apple: 1 year. Samsung: 1 year. Lenovo: 1–3 years depending on model.',1],['Certified Refurbished','90-day AffordBuy warranty covers all hardware defects. Extended plans available up to 12 months.',2],['Certified Used (Grade A)','60-day AffordBuy warranty covers core hardware. Battery health guaranteed above 85%.',3],['Certified Used (Grade B)','30-day AffordBuy warranty covers core hardware. Battery health guaranteed above 78%.',4]].map(([t,d,n])=>`
${['🆕','♻️','⭐','🅱️'][n-1]}
${t}
${d}
`).join('')}

Make a Warranty Claim

`; } function renderRepairPage(){ return `
Repair Service
Device Repair
Cracked screen? Dead battery? We fix it fast, in-store, same day.
${[['📱','Screen Replacement','From $49'],['🔋','Battery Replacement','From $39'],['🔌','Charging Port','From $35'],['📸','Camera Repair','From $55'],['💧','Water Damage','Assessment $25'],['🔊','Speaker/Mic Fix','From $29']].map(([ico,t,p])=>`
${ico}
${t}
${p}
`).join('')}

Book a Repair

`; } function renderCareersPage(){ return `
Join Our Team
Careers at AffordBuy
We're growing fast. Join a team that's making technology accessible to everyone.

At AffordBuy, we believe great people make great companies. We offer competitive salaries, flexible hours, and the chance to make a real impact in your community.

${[ {title:'Store Associate',dept:'Retail',type:'Full-Time',loc:'Minneapolis, MN',desc:'Help customers find the right device, process sales, and maintain product displays. Tech passion required, experience preferred.'}, {title:'Device Technician',dept:'Technical',type:'Full-Time',loc:'Minneapolis, MN',desc:'Perform 30-point inspections, data wipes, and repairs on smartphones, laptops, and tablets. Apple/CompTIA certification a plus.'}, {title:'Wholesale Account Manager',dept:'B2B Sales',type:'Full-Time',loc:'Minneapolis, MN / Remote',desc:'Manage relationships with schools, businesses, and government clients. Drive B2B growth and negotiate volume contracts.'}, {title:'E-Commerce Manager',dept:'Digital',type:'Full-Time',loc:'Remote',desc:'Manage product listings, digital marketing, and online sales performance. Shopify/WooCommerce experience required.'}, {title:'Customer Support Specialist',dept:'Support',type:'Part-Time',loc:'Minneapolis, MN / Remote',desc:'Handle customer inquiries via phone, email, and chat. Resolve issues with orders, returns, and warranties.'}, ].map(j=>`
${j.title}
${j.dept} ${j.type} 📍 ${j.loc}
${j.desc}
`).join('')}
`; } function renderStorePage(){ return `
Find Us
Visit Our Minneapolis Store
Come in, see the full range in person, and get expert advice from our team.
${[['📍','Address','1234 Nicollet Mall
Minneapolis, Minnesota 55403'],['🕐','Hours','Mon–Sat: 9am–7pm
Sunday: 11am–5pm'],['📞','Phone','+1 (800) 233-6732'],['✉️','Email','hello@affordbuy.com'],['🚗','Parking','Free parking on Nicollet Mall
Validated parking in adjacent ramp'],['🚌','Transit','5 min walk from Downtown station
Bus routes 10, 18, 21 stop nearby']].map(([ico,t,d])=>`
${ico}
${t}
${d}
`).join('')}
`; } function renderBlogPage(){ const posts = [ {tag:'Buying Guide',title:'iPhone 16 Pro vs 15 Pro Max: Is the Upgrade Worth It?',date:'May 28, 2025',img:'https://images.unsplash.com/photo-1510557880182-3d4d3cba35a5?w=500&q=80'}, {tag:'Sustainability',title:'How Buying Refurbished Saves the Planet (And Your Wallet)',date:'May 22, 2025',img:'https://images.unsplash.com/photo-1580983559367-0dc2f8934365?w=500&q=80'}, {tag:'MacBook Guide',title:'MacBook Air M3 Review: The Best Laptop for Most People',date:'May 15, 2025',img:'https://images.unsplash.com/photo-1517336714731-489689fd1ca4?w=500&q=80'}, {tag:'B2B Tips',title:'Equipping Your School With Tech on a Budget in 2025',date:'May 8, 2025',img:'https://images.unsplash.com/photo-1521791136064-7986c2920216?w=500&q=80'}, {tag:'Trade-In',title:'When Should You Trade In Your iPhone? A Complete Guide',date:'Apr 30, 2025',img:'https://images.unsplash.com/photo-1592899677977-9c10ca588bbd?w=500&q=80'}, {tag:'Tech News',title:'Top 5 Laptops Under $700 for Students in 2025',date:'Apr 22, 2025',img:'https://images.unsplash.com/photo-1496181133206-80ce9b88a853?w=500&q=80'}, ]; return `
AffordBuy Blog
Tech Tips & Buying Guides
Expert advice on getting the most from your technology budget.
${posts.map(p=>`
${p.title}
${p.tag}
${p.title}
${p.date}
`).join('')}
`; } function renderWholesalePage(){ // Scroll to wholesale section on main page closePage(); setTimeout(()=>{ document.querySelector('#wholesale')?.scrollIntoView({behavior:'smooth'}); }, 400); return ''; } function renderPrivacyPage(){ return `

Privacy Policy

Last updated: May 2025

Information We Collect

We collect information you provide when making purchases, creating accounts, or contacting us — including name, email, shipping address, and payment details. Payment data is processed by PCI-DSS compliant providers; we never store card numbers.

How We Use Your Information

  • Process and fulfil orders
  • Send order confirmations and shipping updates
  • Provide customer support
  • Send marketing emails (with your consent — you can unsubscribe anytime)

Data Security

All data is encrypted in transit (TLS 1.3) and at rest. We follow industry best practices and comply with CCPA and applicable data protection laws.

Your Rights

You have the right to access, correct, or delete your personal data. Contact us at privacy@affordbuy.com.

Contact

AffordBuy Technologies LLC · 1234 Nicollet Mall · Minneapolis, MN 55403 · privacy@affordbuy.com

`; } function renderTermsPage(){ return `

Terms of Use

Last updated: May 2025

Acceptance

By using the AffordBuy website or purchasing from our store, you agree to these terms.

Products & Pricing

All prices are in USD. We reserve the right to correct pricing errors. Product availability is subject to change without notice.

Returns & Refunds

We offer a 14-day free return policy on all products. See our Returns page for details.

Warranty

Warranty terms vary by product condition. See our Warranty page for full details.

Limitation of Liability

AffordBuy's liability is limited to the purchase price of the product in question. We are not liable for indirect or consequential damages.

Governing Law

These terms are governed by the laws of the State of Minnesota, USA.

Contact

legal@affordbuy.com · +1 (800) 233-6732

`; } // ── STORE MAP (init when store page opens) ──────── const _origOpenPage = openPage; // Override to init map after store page renders const _realOpenPage = openPage; window.openPage = function(type, sub){ _realOpenPage(type, sub); if(type==='store'){ setTimeout(()=>{ if(typeof L !== 'undefined' && document.getElementById('storeMap')){ const m = L.map('storeMap').setView([44.9778,-93.2650],14); L.tileLayer('https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png',{attribution:'© OpenStreetMap © CARTO',subdomains:'abcd',maxZoom:19}).addTo(m); const icon = L.divIcon({html:'
📍
',iconSize:[34,34],iconAnchor:[17,34],className:''}); L.marker([44.9778,-93.2650],{icon}).addTo(m).bindPopup('AffordBuy
1234 Nicollet Mall, Minneapolis').openPopup(); } }, 200); } }; // ── KEYBOARD NAV ────────────────────────────────── document.addEventListener('keydown', e=>{ if(e.key==='Escape'){ closeProdModal(); // don't auto-close page overlay on Escape — user uses Back button } });