<!DOCTYPE html><html><head><meta charset="utf-8" /><meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' https://cdn.jsdelivr.net; style-src 'unsafe-inline'; img-src https: data:; font-src https: data:; media-src https: data:; connect-src https://cdn.jsdelivr.net; frame-src 'none'" /><script>
(function(){
var nav=navigator;
var reduced=matchMedia("(prefers-reduced-motion: reduce)").matches;
var conn=nav.connection||{};
var saveData=!!conn.saveData;
var slow=/(^|[^a-z])(2g|slow-2g)$/.test(conn.effectiveType||"");
var mem=nav.deviceMemory||8;
var cores=nav.hardwareConcurrency||8;
var webgl2=false;
try{var c=document.createElement("canvas");webgl2=!!(c.getContext("webgl2")||c.getContext("webgl"));}catch(e){}
var tier=1;
if(reduced||saveData||slow)tier=4;
else if(mem<=2||cores<=2||!webgl2)tier=3;
else if(mem<=4||cores<=4||conn.effectiveType==="3g")tier=2;
var q=new URLSearchParams(location.search||"");
var forced=parseInt(document.documentElement.getAttribute("data-te-tier")||q.get("tier")||"",10);
if(forced>=1&&forced<=4)tier=forced;
var listeners={tier:[],scroll:[],visible:[],copy:[]};
var copy=null;
document.documentElement.style.setProperty("--te-band","0.5");
var visible=true,hidden=document.hidden;
var loops=[];var loopHandle=0;var last=0;
var nativeRAF=window.requestAnimationFrame.bind(window);
var pending=[];
function active(){return visible&&!hidden&&tier<4}
function pump(now){
loopHandle=0;
if(!active())return;
var dt=last?Math.min(64,now-last):16;last=now;
for(var i=0;i<loops.length;i++){try{loops[i](dt,now)}catch(e){if(!loops[i].te_err){loops[i].te_err=1;console.error("TE.loop",e)}}}
var queued=pending;pending=[];
for(var j=0;j<queued.length;j++){try{queued[j](now)}catch(e){if(!queued[j].te_err){queued[j].te_err=1;console.error("TE.raf",e)}}}
// A callback above may already have scheduled the next frame through the
// wrapped requestAnimationFrame; never queue pump twice for one frame.
if(!loopHandle&&(loops.length||pending.length))loopHandle=nativeRAF(pump);
}
function schedule(){if(!loopHandle&&active())loopHandle=nativeRAF(pump)}
window.requestAnimationFrame=function(fn){pending.push(fn);schedule();return pending.length};
window.cancelAnimationFrame=function(){};
var videoState=new Map();
function pauseAll(){
document.querySelectorAll("video").forEach(function(v){videoState.set(v,!v.paused);if(!v.paused)v.pause()});
}
function resumeAll(){
document.querySelectorAll("video").forEach(function(v){if(videoState.get(v)){var p=v.play();if(p&&p.catch)p.catch(function(){})}});
last=0;schedule();
}
function setVisible(v){
if(v===visible)return;visible=v;
if(v)resumeAll();else pauseAll();
listeners.visible.forEach(function(f){f(v)});
}
document.addEventListener("visibilitychange",function(){hidden=document.hidden;if(hidden)pauseAll();else resumeAll()});
var frames=0,slowSince=0,checked=0;
loops.push(function(dt,now){
frames++;
if(now-checked<1000)return;
var fps=frames*1000/(now-checked);frames=0;checked=now;
if(fps<40){if(!slowSince)slowSince=now;else if(now-slowSince>2000){degrade();slowSince=0}}
else slowSince=0;
});
function degrade(){
if(tier>=3)return;tier++;
document.documentElement.setAttribute("data-te-tier",String(tier));
listeners.tier.forEach(function(f){f(tier)});
}
var pointer={x:0.5,y:0.5,vx:0,vy:0,down:false,fine:matchMedia("(pointer:fine)").matches,active:false};
var px=0,py=0,pt=0;
function onMove(e){
var w=innerWidth||1,h=innerHeight||1,now=performance.now();
var x=e.clientX/w,y=e.clientY/h;
if(pt){var s=Math.max(1,now-pt);pointer.vx=(x-px)*1000/s;pointer.vy=(y-py)*1000/s}
px=x;py=y;pt=now;pointer.x=x;pointer.y=y;pointer.active=true;
}
addEventListener("pointermove",onMove,{passive:true});
addEventListener("pointerdown",function(e){pointer.down=true;onMove(e)},{passive:true});
addEventListener("pointerup",function(){pointer.down=false},{passive:true});
addEventListener("pointerleave",function(){pointer.active=false;pointer.vx=0;pointer.vy=0});
addEventListener("message",function(e){
var d=e.data;if(!d||typeof d!=="object")return;
if(d.type==="te:scroll"&&typeof d.t==="number")listeners.scroll.forEach(function(f){f(d.t)});
if(d.type==="te:visible")setVisible(!!d.visible);
if(d.type==="te:copy"&&typeof d.y0==="number"){copy={x0:d.x0,y0:d.y0,x1:d.x1,y1:d.y1};document.documentElement.style.setProperty("--te-band",String(Math.round(d.y0*1000)/1000));listeners.copy.forEach(function(f){f(copy)})}
if(d.type==="te:tier"&&d.tier>=1&&d.tier<=4){tier=d.tier;document.documentElement.setAttribute("data-te-tier",String(tier));listeners.tier.forEach(function(f){f(tier)})}
});
document.documentElement.setAttribute("data-te-tier",String(tier));
window.TE={
get tier(){return tier},
get visible(){return visible&&!hidden},
get reduced(){return reduced},
get dpr(){return tier===1?Math.min(devicePixelRatio||1,2):tier===2?Math.min(devicePixelRatio||1,1.5):1},
caps:{memory:mem,cores:cores,webgl:webgl2,saveData:saveData,effectiveType:conn.effectiveType||"",reduced:reduced},
pointer:pointer,
loop:function(fn){loops.push(fn);schedule();return function(){var i=loops.indexOf(fn);if(i>=0)loops.splice(i,1)}},
onScroll:function(fn){listeners.scroll.push(fn)},
onTier:function(fn){listeners.tier.push(fn)},
onVisible:function(fn){listeners.visible.push(fn)},
onCopy:function(fn){listeners.copy.push(fn);if(copy)fn(copy)},
get copy(){return copy},
get band(){return copy?copy.y0:0.5},
degrade:degrade,
video:function(el,src){
if(tier>=4)return false;
var small=tier>=2||Math.min(innerWidth,innerHeight)<700;
el.src=small?src.replace(/\.mp4$/,"-sm.mp4"):src;
if(tier>=3)el.preload="metadata";
return true;
},
rendition:function(){return tier>=2||Math.min(innerWidth,innerHeight)<700?"-sm":""},
debug:function(){return {handle:loopHandle,loops:loops.length,pending:pending.length,visible:visible,hidden:hidden,tier:tier,active:active()}}
};
})();
</script><style>html,body{margin:0;padding:0;overflow:hidden;background:transparent}</style><script src="https://cdn.jsdelivr.net/npm/three@0.160.0/build/three.min.js"></script></head><body><style>
html,body{margin:0;height:100%;background:#0a0e1a;overflow:hidden;font-family:system-ui,sans-serif;touch-action:none}
#c,#g{position:absolute;inset:0;width:100%;height:100%;display:block}
#g{display:none}
#hint{position:absolute;left:0;right:0;bottom:18px;text-align:center;font-family:ui-monospace,Menlo,monospace;font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:rgba(232,181,107,.65);pointer-events:none;transition:opacity .7s}
</style>
<canvas id=c></canvas><canvas id=g></canvas>
<p id=hint>Gerakkan lampunya; ketuk untuk menggunting</p>
<script>
window.TE3=function(o){
var TE=window.TE;
if(!TE||!TE.caps||!TE.caps.webgl)return false;
if(TE.tier>(o.tier||2))return false;
if(typeof THREE==="undefined")return false;
var gc=document.getElementById(o.canvas||"g");
if(!gc)return false;
var ren;
try{ren=new THREE.WebGLRenderer({canvas:gc,antialias:o.aa!==false,alpha:!!o.alpha})}catch(e){return false}
if(THREE.SRGBColorSpace)ren.outputColorSpace=THREE.SRGBColorSpace;
if(o.tone){ren.toneMapping=THREE.ACESFilmicToneMapping;ren.toneMappingExposure=o.tone}
if(!o.alpha)ren.setClearColor(o.clear===undefined?0x000000:o.clear,1);
var scene=new THREE.Scene();
var cam=new THREE.PerspectiveCamera(o.fov||32,1,0.05,160);
cam.position.set(o.camX||0,o.camY||0,o.dist||4);
cam.lookAt(o.lookX||0,o.lookY||0,0);
var root=new THREE.Group();scene.add(root);
var k={THREE:THREE,ren:ren,scene:scene,cam:cam,root:root,band:0.5,w:0,h:0,
narrow:false,px:0,py:0,pw:0,t:0,visW:0,visH:0,tier:TE.tier,dpr:1,time:0};
// A scene that throws while it is being built must not take the stage down
// with it: the 2D canvas is still there and still correct, so we hand back
// false and let it boot. Same for the frame loop, which freezes on the last
// good frame rather than throwing sixty times a second.
try{if(o.build&&o.build(k)===false)return false}catch(e){return false}
var dead=o.replace===null?null:document.getElementById(o.replace||"c");
if(dead&&dead.parentNode)dead.parentNode.removeChild(dead);
gc.style.display="block";
function layout(){
k.w=innerWidth;k.h=innerHeight;k.narrow=k.w<(o.narrow||640);
if(o.host){var hb=o.host.getBoundingClientRect();if(hb.width>1&&hb.height>1){k.w=hb.width;k.h=hb.height}}
// A hero shares its frame with the headline, so the subject is fitted into
// the band the parent reports. An embed owns its whole box, so it passes
// band:1 and gets all of it.
k.band=o.band!==undefined?o.band:Math.max(TE.band||0.5,o.minBand||0.24);
k.dpr=Math.min(TE.dpr,o.maxDpr||1.75);
ren.setPixelRatio(k.dpr);ren.setSize(k.w,k.h,false);
cam.aspect=k.w/Math.max(1,k.h);cam.updateProjectionMatrix();
k.visH=2*Math.tan(cam.fov*Math.PI/360)*cam.position.z;
k.visW=k.visH*cam.aspect;
if(o.fit!==false){
var size=o.size||1;
var s=Math.min(k.band*k.visH*(o.fitH||0.74)/size,k.visW*(o.fitW||0.84)/size);
root.scale.setScalar(Math.max(o.minScale||0.12,s));
root.position.y=(0.5-k.band*0.5)*k.visH+(o.lift||0)*root.scale.x;
}
try{if(o.layout)o.layout(k)}catch(e){}
}
layout();addEventListener("resize",layout);
if(TE.onCopy)TE.onCopy(layout);
var frozen=false;
if(TE.onTier)TE.onTier(function(n){k.tier=n;if(n>=3)frozen=true});
addEventListener("pointermove",function(e){
k.px=(e.clientX/Math.max(1,innerWidth))*2-1;
k.py=-((e.clientY/Math.max(1,innerHeight))*2-1);
k.pw=1;
try{if(o.onPointer)o.onPointer(k)}catch(e){}
},{passive:true});
if(o.onScroll){
var os=function(v){k.t=Math.min(1,Math.max(0,v));try{o.onScroll(k)}catch(e){}};
if(TE.onScroll)TE.onScroll(os);
else addEventListener("message",function(e){if(e.data&&e.data.type==="te:scroll")os(e.data.t)});
}
TE.loop(function(dt){
if(frozen)return;
k.time+=dt;
k.pw*=Math.pow(0.988,dt/16);
try{
if(o.frame)o.frame(dt,k);
ren.render(scene,cam);
}catch(e){frozen=true}
});
return true;
};
</script>
<script>
(function(){
var TE=window.TE,cv=document.getElementById("c"),cx=cv.getContext("2d"),dpr=TE?Math.min(TE.dpr,1.5):1,hint=document.getElementById("hint");
var W=0,H=0;function fit(){W=innerWidth;H=innerHeight;cv.width=W*dpr;cv.height=H*dpr;cx.setTransform(dpr,0,0,dpr,0,0)}fit();addEventListener("resize",fit);
var lx=0.3,ly=0.12,tx=0.3,ty=0.12,snip=0,snipT=0,moved=false;
addEventListener("pointermove",function(e){tx=e.clientX/W;ty=e.clientY/H;if(!moved){moved=true;hint.style.opacity="0"}},{passive:true});
addEventListener("pointerdown",function(e){tx=e.clientX/W;ty=e.clientY/H;snipT=1;moved=true;hint.style.opacity="0"},{passive:true});
// the barber as silhouettes: chair, client, barber, scissors; the pointer is the lamp
function chair(s){cx.beginPath();cx.rect(-30*s,20*s,60*s,14*s);cx.rect(-6*s,34*s,12*s,40*s);cx.rect(-34*s,74*s,68*s,8*s);cx.rect(-40*s,-40*s,80*s,60*s);cx.rect(-46*s,-90*s,20*s,52*s);cx.fill()}
function client(s){cx.beginPath();cx.arc(0,-70*s,22*s,0,6.2832);cx.fill();cx.beginPath();cx.rect(-24*s,-50*s,48*s,60*s);cx.fill()}
function barber(s){cx.beginPath();cx.arc(0,-120*s,20*s,0,6.2832);cx.fill();cx.beginPath();cx.moveTo(-26*s,-100*s);cx.lineTo(26*s,-100*s);cx.lineTo(30*s,10*s);cx.lineTo(-30*s,10*s);cx.closePath();cx.fill();cx.beginPath();cx.moveTo(24*s,-96*s);cx.lineTo(70*s,-70*s);cx.lineTo(66*s,-58*s);cx.lineTo(20*s,-82*s);cx.closePath();cx.fill()}
function scissors(s,a){cx.save();cx.rotate(a);cx.beginPath();cx.rect(-2*s,-2*s,52*s,4*s);cx.fill();cx.restore();cx.save();cx.rotate(-a);cx.beginPath();cx.rect(-2*s,-2*s,52*s,4*s);cx.fill();cx.restore();cx.beginPath();cx.arc(-10*s,8*s,7*s,0,6.2832);cx.arc(-10*s,-8*s,7*s,0,6.2832);cx.fill()}
var parts=[{f:chair,x:0.66,y:0.4,s:0.85},{f:client,x:0.66,y:0.4,s:0.85},{f:barber,x:0.77,y:0.4,s:0.85},{f:scissors,x:0.75,y:0.2,s:0.7}];
function draw(dt){
var k=Math.min(1,dt/120);lx+=(tx-lx)*k;ly+=(ty-ly)*k;
snipT=Math.max(0,snipT-dt/260);snip=Math.sin(snipT*Math.PI)*0.35;
cx.clearRect(0,0,W,H);
// lamp glow on the wall
var g=cx.createRadialGradient(lx*W,ly*H,10,lx*W,ly*H,Math.max(W,H)*0.9);g.addColorStop(0,"rgba(232,181,107,.55)");g.addColorStop(0.35,"rgba(120,80,30,.28)");g.addColorStop(1,"rgba(10,14,26,0)");
cx.fillStyle="#0a0e1a";cx.fillRect(0,0,W,H);cx.fillStyle=g;cx.fillRect(0,0,W,H);
var unit=Math.min(W,H)/520;
for(var i=0;i<parts.length;i++){
var p=parts[i],px=p.x*W,py=p.y*H,dx=px-lx*W,dy=py-ly*H,d=Math.max(1,Math.hypot(dx,dy));
var stretch=1+Math.min(1.6,d/(H*0.55));
// shadow: projected away from the lamp, longer the farther the lamp
cx.save();cx.translate(px+dx*0.35,py+dy*0.35);cx.scale(stretch,stretch);cx.fillStyle="rgba(0,0,0,.55)";cx.filter="blur("+Math.min(10,d/60)+"px)";p.f(unit*p.s*1.1,snip);cx.restore();
cx.save();cx.translate(px,py);cx.fillStyle="#05070d";cx.filter="none";p.f(unit*p.s,snip);cx.restore();
}
}
// Three.js, tier 1 and 2: wayang for real. The chair, the customer, the
// capster and the gunting stand as solid bodies between one lamp and the
// back wall, and the wall is lit by that lamp alone. Nothing here is drawn
// as a shadow: every shadow on that wall is computed from where the lamp
// is, so it lengthens when the lamp drops and sharpens when it pulls away.
function initGL(){
var blade1=null,blade2=null,spot=null,lamp=null,focus=null;
return TE3({
tier:2,clear:0x0a0e1a,fov:30,dist:4.6,fit:false,maxDpr:1.2,
build:function(k){
var T=k.THREE,i;
k.ren.shadowMap.enabled=true;
k.ren.shadowMap.type=T.PCFShadowMap;
var dark=new T.MeshLambertMaterial({color:0x05070d});
var wallM=new T.MeshLambertMaterial({color:0x8d6f48});
var floorM=new T.MeshLambertMaterial({color:0x4a3a26});
var wall=new T.Mesh(new T.PlaneGeometry(46,28),wallM);
wall.position.set(0,11.8,-2.8);wall.receiveShadow=true;k.root.add(wall);
var flo=new T.Mesh(new T.PlaneGeometry(64,64),floorM);
flo.rotation.x=-Math.PI/2;flo.position.set(0,-2.2,0);flo.receiveShadow=true;k.root.add(flo);
function solid(geo,x,y,z){var m=new T.Mesh(geo,dark);m.position.set(x,y,z);m.castShadow=true;k.root.add(m);return m}
// the chair
solid(new T.CylinderGeometry(0.52,0.58,0.14,18),-0.5,-2.12,0);
solid(new T.CylinderGeometry(0.11,0.13,0.92,10),-0.5,-1.62,0);
solid(new T.BoxGeometry(0.98,0.18,0.9),-0.5,-1.1,0);
solid(new T.BoxGeometry(0.92,1.2,0.18),-0.5,-0.42,-0.38);
solid(new T.BoxGeometry(0.52,0.32,0.16),-0.5,0.34,-0.38);
solid(new T.BoxGeometry(0.11,0.11,0.8),-0.98,-0.86,0.02);
solid(new T.BoxGeometry(0.11,0.11,0.8),-0.02,-0.86,0.02);
solid(new T.BoxGeometry(0.62,0.1,0.34),-0.5,-1.86,0.52);
// the customer under the cape
solid(new T.CylinderGeometry(0.31,0.58,1.08,16),-0.5,-0.45,0.04);
solid(new T.SphereGeometry(0.3,18,14),-0.5,0.33,0.04);
// the capster, and the hand the gunting is in
solid(new T.CylinderGeometry(0.2,0.3,1.2,12),1.35,-1.58,0.1);
solid(new T.CylinderGeometry(0.31,0.44,1.14,14),1.35,-0.42,0.1);
solid(new T.SphereGeometry(0.28,18,14),1.35,0.38,0.1);
var arm=solid(new T.BoxGeometry(1.02,0.17,0.17),0.86,0.28,0.26);
arm.rotation.z=0.42;
// the gunting, which opens and closes on a tap
var gr=new T.Group();gr.position.set(0.3,0.58,0.3);gr.rotation.z=-0.5;k.root.add(gr);
var bl=new T.BoxGeometry(0.78,0.055,0.05);bl.translate(0.3,0,0);
blade1=new T.Mesh(bl,dark);blade1.castShadow=true;gr.add(blade1);
blade2=new T.Mesh(bl,dark);blade2.castShadow=true;gr.add(blade2);
var ring=new T.TorusGeometry(0.1,0.028,6,14);
for(i=0;i<2;i++){var rg=new T.Mesh(ring,dark);rg.position.set(-0.12,(i?1:-1)*0.11,0);
rg.castShadow=true;gr.add(rg)}
solid(new T.CylinderGeometry(0.03,0.03,0.1,8),0.3,0.58,0.3).rotation.x=Math.PI/2;
// one lamp, and it is the only light on the wall
focus=new T.Object3D();focus.position.set(0.2,-0.4,-0.2);k.root.add(focus);
spot=new T.SpotLight(0xe8b56b,2,0,0.72,0.5,1);
spot.castShadow=true;
spot.shadow.mapSize.width=768;spot.shadow.mapSize.height=768;
spot.shadow.camera.near=0.6;spot.shadow.camera.far=22;spot.shadow.bias=-0.0012;
spot.target=focus;k.root.add(spot);
var shade=new T.Mesh(new T.ConeGeometry(0.3,0.36,16,1,true),
new T.MeshBasicMaterial({color:0x2a1c0e,side:T.DoubleSide}));
var glow=new T.Mesh(new T.SphereGeometry(0.15,12,10),new T.MeshBasicMaterial({color:0xfff0cf}));
lamp=new T.Group();lamp.add(shade);glow.position.y=-0.14;lamp.add(glow);k.root.add(lamp);
k.scene.add(new T.AmbientLight(0x18202e,1.1));
return true;
},
layout:function(k){
var s=Math.min(k.band*k.visH*0.90/4.2,k.visW*(k.narrow?1.0:0.62)/4.4);
k.root.scale.setScalar(s);
k.root.position.y=(0.5-k.band*0.5)*k.visH+s*0.58;
},
frame:function(dt,k){
var f=Math.min(1,dt/130);lx+=(tx-lx)*f;ly+=(ty-ly)*f;
snipT=Math.max(0,snipT-dt/260);snip=Math.sin(snipT*Math.PI)*0.35;
blade1.rotation.z=0.1+snip;blade2.rotation.z=-0.1-snip;
spot.position.set((lx-0.5)*6.4,(0.5-ly)*2.2+0.25,2.4);
lamp.position.copy(spot.position);
lamp.lookAt(focus.position);lamp.rotateX(-Math.PI/2);
// a lamp held close throws a long soft shadow, a lamp held back a
// short sharp one, so the penumbra follows the distance it really is
var dw=spot.position.distanceTo(focus.position)*k.root.scale.x;
spot.shadow.radius=Math.max(1,Math.min(8,0.9/Math.max(0.12,dw)));
spot.intensity=3.4*dw;
}
});
}
if(!initGL()){
if(TE&&TE.loop)TE.loop(draw);else(function raf(){requestAnimationFrame(raf);draw(16)})();
}
})();
</script></body></html>
Barbershop, Jalan Merapi, Jakarta Timur, sejak 2018
Rapi itu sikap
Gerakkan lampunya dan lihat bayangan kursi kami. Yang kami jual bukan model rambut, tetapi 40 menit di tangan capster yang sama setiap kali, di jam yang kamu pilih, dengan harga yang tidak berubah di kasir.
Booking jam, bukan nomorCapster pilihanmuHarga final, tip sukarela
Layanan dan lamanya
Signature cutPaling banyak dipesan
Konsultasi bentuk wajah, potong, cuci, styling. Yang paling banyak dipesan.
Rp65.00040 menit
Cut dan shave
Signature cut ditambah cukur pisau lurus dengan handuk hangat.
Rp95.00060 menit
Beard trim
Rapikan bentuk, minyak jenggot, tanpa cukur habis.
Rp40.00020 menit
Anak di bawah 10
Kursi lebih tinggi, capster yang sabar, permen di akhir.
Rp45.00030 menit
Booking dalam tiga langkah
Pilih jam dan capster
Kirim jam yang kamu mau lewat WhatsApp, sebutkan capster kalau sudah punya langganan.
Datang tepat jam
Kursi menunggu, bukan kamu. Terlambat lebih dari 10 menit, jam bergeser ke slot kosong berikutnya.
Empat puluh menit yang tenang
Kopi atau teh, musik pelan, dan kaca yang tidak menyembunyikan apa pun.
Alat yang kami pakai, dan baris harga tempatnya
7 tahun di Jalan Merapi4 capster tetap40 menit per kursi, tidak dikejar4,9 rating dari 2.300 ulasan
Booking jam 7, jam 7 duduk. Capster yang sama sejak 2020. Reza, RawamangunHarganya di kasir sama dengan yang di halaman ini. Andi, CipinangAnak saya yang takut gunting sekarang minta ke sini sendiri. Ibu Fitri, KlenderCukur pisau lurusnya rapi, handuk hangatnya bikin ketiduran. Bayu, PulogadungTidak ada yang menawarkan produk di kursi. Itu saja sudah alasan balik. Yoga, Duren SawitBooking jam 7, jam 7 duduk. Capster yang sama sejak 2020. Reza, RawamangunHarganya di kasir sama dengan yang di halaman ini. Andi, CipinangAnak saya yang takut gunting sekarang minta ke sini sendiri. Ibu Fitri, KlenderCukur pisau lurusnya rapi, handuk hangatnya bikin ketiduran. Bayu, PulogadungTidak ada yang menawarkan produk di kursi. Itu saja sudah alasan balik. Yoga, Duren Sawit
Sebelum booking
Bisa datang tanpa booking?
Bisa kalau ada kursi kosong, tetapi yang booking selalu didahulukan di jamnya.
Bagaimana kalau hasilnya tidak sesuai?
Bilang sebelum keluar dari kursi, kami rapikan sampai sesuai tanpa biaya. Tujuh hari berikutnya juga masih gratis.
Produk apa yang dipakai?
Pomade dan clay berbahan air yang bisa dibeli di kasir. Tidak ada yang ditawarkan di kursi.
Menerima wanita?
Untuk potong pendek dan undercut, ya. Untuk perawatan panjang kami rujuk ke salon rekan.