2026-06-12 10:55:00 +02:00
< script lang = "ts" setup >
const tiers = [
{
num : "01" ,
name : "Plain HTTP Fetch" ,
time : "< 100ms" ,
tag : "no browser" ,
desc : "Standard fetch with realistic browser headers — Accept, Accept-Language, Accept-Encoding, and a real Chrome UA. Handles unprotected pages instantly. Zero browser cost." ,
},
{
num : "02" ,
name : "Cached Browser Session" ,
time : "~500ms" ,
tag : "redis hit" ,
2026-08-02 02:34:34 +02:00
desc : "Restores solved cookies from Redis into a warm pooled browser. No challenge re-solve while the target accepts the session. Returns the page in under a second. Cache TTL is configurable." ,
2026-06-12 10:55:00 +02:00
},
{
num : "03" ,
2026-08-02 02:34:34 +02:00
name : "Live Challenge Solve" ,
2026-06-12 10:55:00 +02:00
time : "4– 15s" ,
tag : "fresh context" ,
2026-08-02 02:34:34 +02:00
desc : "A fresh Camoufox context runs the matching Cloudflare, Akamai, or Imperva flow. Turnstile, reCAPTCHA, hCaptcha, and GeeTest are solved automatically when encountered. Cookies are cached on success." ,
2026-06-12 10:55:00 +02:00
},
{
num : "04" ,
name : "Residential Proxy" ,
time : "8– 25s" ,
tag : "optional" ,
2026-08-02 02:34:34 +02:00
desc : "Same as Tier 3 but routed through a residential proxy. Only triggered after the direct or datacenter path fails, so paid residential bandwidth is used only when necessary." ,
2026-06-12 10:55:00 +02:00
},
]
</ script >
< template >
< section id = "how-it-works" class = "section" >
< div class = "container" >
< p class = "eyebrow" > how it works </ p >
< h2 class = "section-title" > four tiers , one request .</ h2 >
< p class = "section-sub" >
TRAWL tries the cheapest path first and escalates only on failure . The majority of traffic never touches a
browser . When it does , the result is cached immediately .
</ p >
< div class = "tiers" >
< div
v-for = "(tier, i) in tiers"
:key = "tier.num"
v-motion
: initial = "{ opacity: 0, x: -20 }"
: visible -once =" { opacity : 1 , x : 0 , transition : { delay : i * 100 , duration : 400 } } "
class = "tier-item"
>
< div class = "tier-num" >{{ tier . num }}</ div >
< div class = "tier-body" >
< div class = "tier-header" >
< span class = "tier-name" >{{ tier . name }}</ span >
< span class = "tier-time" >{{ tier . time }}</ span >
< span class = "tier-tag" >{{ tier . tag }}</ span >
</ div >
< p class = "tier-desc" >{{ tier . desc }}</ p >
</ div >
< div v-if = "i < tiers.length - 1" class="tier-arrow" > ↓ escalates on failure </ div >
</ div >
</ div >
</ div >
</ section >
</ template >
< style scoped >
. section - title {
font - size : clamp ( 22 px , 3 vw , 34 px );
font - weight : 700 ;
letter - spacing : - 0.02 em ;
color : var ( -- text );
margin - bottom : 12 px ;
}
. section - sub {
font - size : 13 px ;
line - height : 1.75 ;
color : var ( -- text - muted );
max - width : 580 px ;
margin - bottom : 48 px ;
}
. tiers {
display : flex ;
flex - direction : column ;
gap : 0 ;
border : 1 px solid var ( -- border );
}
. tier - item {
position : relative ;
display : flex ;
gap : 28 px ;
padding : 28 px 32 px ;
border - bottom : 1 px solid var ( -- border );
transition : background 0.12 s ;
}
. tier - item : last - child {
border - bottom : none ;
}
. tier - item : hover {
background : var ( -- bg - subtle );
}
. tier - num {
font - size : 28 px ;
font - weight : 700 ;
color : var ( -- border - strong );
letter - spacing : - 0.03 em ;
line - height : 1 ;
flex - shrink : 0 ;
min - width : 36 px ;
}
. tier - body {
display : flex ;
flex - direction : column ;
gap : 8 px ;
flex : 1 ;
}
. tier - header {
display : flex ;
align - items : center ;
gap : 12 px ;
flex - wrap : wrap ;
}
. tier - name {
font - size : 14 px ;
font - weight : 600 ;
color : var ( -- text );
}
. tier - time {
font - size : 11 px ;
padding : 2 px 8 px ;
background : var ( -- accent - tint );
color : var ( -- accent );
border : 1 px solid var ( -- accent );
letter - spacing : 0.04 em ;
}
. tier - tag {
font - size : 10 px ;
letter - spacing : 0.06 em ;
text - transform : uppercase ;
color : var ( -- text - muted );
padding : 2 px 8 px ;
border : 1 px solid var ( -- border - strong );
}
. tier - desc {
font - size : 12 px ;
line - height : 1.75 ;
color : var ( -- text - muted );
max - width : 600 px ;
}
. tier - arrow {
position : absolute ;
bottom : - 13 px ;
left : 32 px ;
font - size : 10 px ;
letter - spacing : 0.06 em ;
color : var ( -- text - muted );
background : var ( -- bg );
padding : 0 8 px ;
z - index : 1 ;
}
@ media ( max - width : 600 px ) {
. tier - item {
flex - direction : column ;
gap : 12 px ;
padding : 20 px ;
}
}
</ style >