Search our site
FREE SHIPPING ON ALL ORDERS OVER $50
BUNDLE & SAVE 30%
THANK YOU FOR HELPING US LAUNCH THE SICKEST & ONLY DIY MEN'S SKINCARE

ONE life x one face

  • ONE BOTTLE. ONE METAL TUBE. NO ROUTINE.

    Moisturizer, broad-spectrum SPF 15, and retinol in one old-school aluminum tube.No tiny bottles. No order of operations. No 11-minute bathroom ceremony.Built like a tool, not a beauty product.
  • RETINOL Built In

    Retinol is one of the only ingredients scientifically shown to help reduce visible signs of aging.Some brands sell it for $200 a pop. BROTEGE has retinol built in, so you can save your money for more important things — like pizza and fantasy football.
  • 20,000+ BROS CAN’T BE WRONG!

    In just over a year, more than 20,000 dudes have tried BROTEGE. If you’re one of them — THANK YOU.Slapping cream on your face is officially less weird than pretending you’re still 23.
  • NO GREASE. NO WHITE CAST.

    Lightweight, fast-absorbing, and built to disappear.Won’t leave your face shiny, chalky, or smelling like you got trapped in a Sephora.
  • + SPF BUILT IN

    Broad-spectrum SPF 15 built right in — because you were never going to buy a separate sunscreen, and we both know it.Formulated for daily use. So light, you’ll forget you’re being responsible.
  • 60-DAY FACE FIX

    Try BROTEGE for 60 days. If your face doesn’t look visibly better, we’ll give you a full refund.Subscribe and save. Cancel anytime — zero guilt trip. We also have commitment issues.
. * Does not change variant prices or recurring Recharge contract pricing. * Requires two SAVED, ACTIVE, correctly configured Shopify discount codes. */ (()=>{ 'use strict'; if(window.__brotegePromoV8Installed)return; window.__brotegePromoV8Installed=true; const CFG={ productId:9446693634333, subscriptionCode:'KC5XPRRJZGWY', // $8.75 off, subscription, first payment only oneTimeCode:'ST847FZ0SRPE' // $15 off, one-time purchase }; const root=((window.Shopify&&window.Shopify.routes&&window.Shopify.routes.root)||'/').replace(/\/?$/,'/'); const normalize=x=>String(x||'').trim().toUpperCase(); const ownCodes=[CFG.subscriptionCode,CFG.oneTimeCode].map(normalize); const isOwn=x=>ownCodes.includes(normalize(x)); const getCodes=cart=>(cart.discount_codes||[]).map(x=>typeof x==='string'?x:x.code).filter(Boolean); const rawFetch=window.fetch.bind(window); const mutatingCartPath=/\/cart\/(add|change|update|clear)(?:\.js)?\/?$/i; const pathFor=part=>root+'cart/'+part; const sleep=ms=>new Promise(resolve=>setTimeout(resolve,ms)); let busy=false,queued=false,timeout=0; let rejectedKey='',lastCartItems='',lastAttemptKey=''; async function readCart(){ const response=await rawFetch(pathFor('cart.js'),{credentials:'same-origin',cache:'no-store'}); if(!response.ok)throw new Error('cart.js HTTP '+response.status); return response.json(); } async function writeDiscount(codes){ const response=await rawFetch(pathFor('update.js'),{ method:'POST',credentials:'same-origin', headers:{'Content-Type':'application/json','Accept':'application/json'}, body:JSON.stringify({discount:codes.join(',')}) }); if(!response.ok)throw new Error('Discount update HTTP '+response.status); return response.json(); } function state(cart){ const items=(cart.items||[]).filter(x=>Number(x.product_id)===CFG.productId&&Number(x.quantity)>0); if(!items.length)return ''; const kinds=new Set(items.map(x=>x.selling_plan_allocation?'sub':'one')); if(kinds.size!==1)return 'mixed'; return kinds.has('sub')?CFG.subscriptionCode:CFG.oneTimeCode; } function signature(cart){ return JSON.stringify((cart.items||[]).map(x=>[ x.variant_id,x.quantity,Boolean(x.selling_plan_allocation),x.selling_plan_allocation?.selling_plan?.id||'' ])); } function status(status,code,cart){ document.dispatchEvent(new CustomEvent('brotege:discount-status',{ detail:{status,requestedCode:code||'',cartTotalCents:cart?.total_price??null} })); } async function synchronize(){ if(busy){queued=true;return;} busy=true; try{ const cart=await readCart(); const desired=state(cart),existing=getCodes(cart),fingerprint=signature(cart); if(lastCartItems!==fingerprint){rejectedKey='';lastAttemptKey='';lastCartItems=fingerprint;} if(!desired||desired==='mixed'){ if(existing.some(isOwn)){ const updated=await writeDiscount(existing.filter(c=>!isOwn(c))); status(desired==='mixed'?'mixed':'removed','',updated); }else status(desired==='mixed'?'mixed':'not-in-cart','',cart); return; } const matching=existing.find(x=>normalize(x)===normalize(desired)); if(matching && !existing.some(c=>isOwn(c)&&normalize(c)!==normalize(desired))){ // Code presence does not guarantee discount eligibility. const record=(cart.discount_codes||[]).find(x=>normalize(typeof x==='string'?x:x.code)===normalize(desired)); status(record&&record.applicable===false?'ineligible':'code-present',desired,cart); return; } const unrelated=existing.filter(x=>!isOwn(x)); if(unrelated.length){ // Never overwrite a customer's manually supplied unrelated promo code. status('other-discount-present',desired,cart); return; } const key=fingerprint+'|'+normalize(desired); if(rejectedKey===key||lastAttemptKey===key)return; lastAttemptKey=key; const result=await writeDiscount([desired]); const applied=(result.discount_codes||[]).find(x=>normalize(typeof x==='string'?x:x.code)===normalize(desired)); if(!applied || applied.applicable===false){ rejectedKey=key; console.info('[Brotege promo] Code not confirmed. Check eligibility, saved/active codes and Shopify checkout.',desired); status('not-confirmed',desired,result); }else{ status('code-present',desired,result); } }catch(error){ console.warn('[Brotege promo] Unable to synchronize discount',error); status('error','',null); }finally{ busy=false; if(queued){queued=false;schedule(350);} } } function schedule(ms=300){clearTimeout(timeout);timeout=setTimeout(synchronize,ms);} function isCartMutation(input,init){ let url='',method='GET'; try{ url=typeof input==='string'?input:input?.url||''; method=(init?.method||input?.method||'GET').toUpperCase(); return method!=='GET'&&mutatingCartPath.test(new URL(url,location.href).pathname); }catch(e){return false;} } // Observe theme AJAX fetches. Internal reads/writes use rawFetch, preventing recursion. window.fetch=function(input,init){ const watched=isCartMutation(input,init); const response=rawFetch(input,init); if(watched)response.then(r=>{if(r.ok)schedule(380)}).catch(()=>{}); return response; }; // Some themes use XMLHttpRequest instead of fetch. const xhrOpen=XMLHttpRequest.prototype.open; const xhrSend=XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.open=function(method,url,...rest){ try{this.__brWatch=String(method).toUpperCase()!=='GET'&&mutatingCartPath.test(new URL(url,location.href).pathname);} catch(e){this.__brWatch=false;} return xhrOpen.call(this,method,url,...rest); }; XMLHttpRequest.prototype.send=function(...args){ if(this.__brWatch)this.addEventListener('load',()=>{if(this.status>=200&&this.status<300)schedule(380)},{once:true}); return xhrSend.apply(this,args); }; window.brotegeSyncPromo=()=>schedule(120); document.addEventListener('cart:updated',()=>schedule(160)); document.addEventListener('DOMContentLoaded',()=>schedule(180),{once:true}); if(document.readyState!=='loading')schedule(180); window.addEventListener('pageshow',()=>schedule(180)); document.addEventListener('visibilitychange',()=>{if(!document.hidden)schedule(180);}); // Catch themes with nonstandard cart events. Checks do not repeatedly POST. setInterval(()=>{if(!document.hidden&&!busy)schedule(0);},6500); })();