2026-07-05 06:41:32 +00:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< link rel = "canonical" href = "https://www.quixzoom.com/join.html" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0, viewport-fit=cover" >
< title > Become a Zoomer — Join quiXzoom & Start Earning Today< / title >
< meta name = "description" content = "Join quiXzoom as a Zoomer and earn money by taking photos for missions near you. Flexible work, instant payouts, no experience needed." >
< meta property = "og:title" content = "Become a Zoomer — Join quiXzoom & Start Earning Today" >
< meta property = "og:description" content = "Take photo missions near you. Get paid every Monday. No platform fees. Join 10,000+ Zoomers today." >
< meta property = "og:image" content = "https://www.quixzoom.com/images/hero-zoomer-city.jpg" >
< meta property = "og:url" content = "https://www.quixzoom.com/join.html" >
< meta property = "og:type" content = "website" >
< script type = "application/ld+json" >
{
"@context" : "https://schema.org" ,
"@type" : "JobPosting" ,
"title" : "Zoomer - Field Photographer" ,
"description" : "Join quiXzoom as a Zoomer and earn money by taking photos for missions near you. Flexible work, instant payouts, no experience needed." ,
"hiringOrganization" : {
"@type" : "Organization" ,
"name" : "quiXzoom" ,
"sameAs" : "https://www.quixzoom.com"
} ,
"jobLocation" : {
"@type" : "Place" ,
"address" : {
"@type" : "PostalAddress" ,
"addressCountry" : "SE"
}
} ,
"employmentType" : "CONTRACTOR"
}
< / script >
< style >
: root {
--ios-blue : #007AFF ;
--ios-green : #34C759 ;
--ios-red : #FF3B30 ;
--ios-gray : #8E8E93 ;
--ios-bg : #000000 ;
--ios-card : #1C1C1E ;
--ios-text : #FFFFFF ;
--ios-text2 : rgba ( 235 , 235 , 245 , 0.6 ) ;
--font : - apple-system , BlinkMacSystemFont , "SF Pro Text" , "Helvetica Neue" , sans-serif ;
}
* { box-sizing : border-box ; margin : 0 ; padding : 0 ; }
body {
background : var ( - - ios - bg ) ;
color : var ( - - ios - text ) ;
font-family : var ( - - font ) ;
-webkit- font-smoothing : antialiased ;
padding : 20 px ;
max-width : 600 px ;
margin : 0 auto ;
}
h1 {
font-size : 32 px ;
font-weight : 700 ;
margin-bottom : 12 px ;
text-align : center ;
}
. subtitle {
color : var ( - - ios - text2 ) ;
text-align : center ;
margin-bottom : 30 px ;
}
. card {
background : var ( - - ios - card ) ;
2026-07-07 07:11:50 +00:00
border-radius : var ( - - radius - lg ) ;
2026-07-05 06:41:32 +00:00
padding : 20 px ;
margin-bottom : 16 px ;
}
. field {
margin-bottom : 16 px ;
}
. field-label {
display : block ;
font-size : 14 px ;
color : var ( - - ios - text2 ) ;
margin-bottom : 8 px ;
}
. field-input {
width : 100 % ;
padding : 14 px ;
2026-07-07 07:11:50 +00:00
border-radius : var ( - - radius - md ) ;
2026-07-05 06:41:32 +00:00
border : 1 px solid var ( - - ios - gray ) ;
background : var ( - - ios - bg ) ;
color : var ( - - ios - text ) ;
font-size : 16 px ;
}
. btn {
width : 100 % ;
padding : 16 px ;
2026-07-07 07:11:50 +00:00
border-radius : var ( - - radius - md ) ;
2026-07-05 06:41:32 +00:00
border : none ;
background : var ( - - ios - blue ) ;
color : white ;
font-size : 17 px ;
font-weight : 600 ;
cursor : pointer ;
}
2026-07-12 12:41:35 +00:00
. btn : disabled {
opacity : 0.6 ;
}
2026-07-05 06:41:32 +00:00
. features {
margin : 30 px 0 ;
}
. feature {
display : flex ;
align-items : center ;
margin-bottom : 16 px ;
}
. feature-icon {
width : 40 px ;
height : 40 px ;
2026-07-07 07:11:50 +00:00
border-radius : var ( - - radius - md ) ;
2026-07-05 06:41:32 +00:00
background : var ( - - ios - green ) ;
display : flex ;
align-items : center ;
justify-content : center ;
margin-right : 12 px ;
font-size : 20 px ;
}
. feature-text h3 {
font-size : 16 px ;
margin-bottom : 4 px ;
}
. feature-text p {
font-size : 14 px ;
color : var ( - - ios - text2 ) ;
}
2026-07-12 12:41:35 +00:00
. success-msg {
background : rgba ( 52 , 199 , 89 , 0.15 ) ;
border : 1 px solid rgba ( 52 , 199 , 89 , 0.3 ) ;
border-radius : 12 px ;
padding : 16 px ;
text-align : center ;
margin-top : 16 px ;
display : none ;
}
. success-msg . show {
display : block ;
}
2026-07-05 06:41:32 +00:00
< / style >
< / head >
< body >
< h1 > Become a Zoomer< / h1 >
< p class = "subtitle" > Join 10,000+ people earning money by taking photos< / p >
< div class = "features" >
< div class = "feature" >
2026-07-12 12:41:35 +00:00
< div class = "feature-icon" > 📸< / div >
2026-07-05 06:41:32 +00:00
< div class = "feature-text" >
< h3 > Take Photos< / h3 >
< p > Complete missions near you with your phone< / p >
< / div >
< / div >
< div class = "feature" >
2026-07-12 12:41:35 +00:00
< div class = "feature-icon" > 💰< / div >
2026-07-05 06:41:32 +00:00
< div class = "feature-text" >
< h3 > Get Paid< / h3 >
2026-07-12 12:41:35 +00:00
< p > Earn €5-50 per mission, paid every Monday< / p >
2026-07-05 06:41:32 +00:00
< / div >
< / div >
< div class = "feature" >
2026-07-12 12:41:35 +00:00
< div class = "feature-icon" > ⏰< / div >
2026-07-05 06:41:32 +00:00
< div class = "feature-text" >
< h3 > Flexible Hours< / h3 >
< p > Work when you want, where you want< / p >
< / div >
< / div >
< / div >
< div class = "card" >
< div class = "field" >
< label class = "field-label" > First Name< / label >
< input class = "field-input" id = "firstName" type = "text" placeholder = "John" autocomplete = "given-name" >
< / div >
< div class = "field" >
< label class = "field-label" > Last Name< / label >
< input class = "field-input" id = "lastName" type = "text" placeholder = "Smith" autocomplete = "family-name" >
< / div >
< div class = "field" >
< label class = "field-label" > Phone Number< / label >
< input class = "field-input" id = "phone" type = "tel" placeholder = "+46 70 123 45 67" autocomplete = "tel" inputmode = "tel" >
< / div >
2026-07-12 12:41:35 +00:00
< button class = "btn" id = "submitBtn" onclick = "submitForm()" > Join Now< / button >
< / div >
< div class = "success-msg" id = "successMsg" >
< strong > ✓ You're on the list!< / strong > < br >
We'll contact you before launch with next steps.
2026-07-05 06:41:32 +00:00
< / div >
< script >
2026-07-12 12:41:35 +00:00
// Load saved phone number
document . addEventListener ( 'DOMContentLoaded' , function ( ) {
const savedPhone = localStorage . getItem ( 'qx_phone' ) ;
if ( savedPhone ) {
document . getElementById ( 'phone' ) . value = savedPhone ;
}
} ) ;
async function submitForm ( ) {
2026-07-05 06:41:32 +00:00
const first = document . getElementById ( 'firstName' ) . value . trim ( ) ;
const last = document . getElementById ( 'lastName' ) . value . trim ( ) ;
const phone = document . getElementById ( 'phone' ) . value . trim ( ) ;
2026-07-12 12:41:35 +00:00
const btn = document . getElementById ( 'submitBtn' ) ;
2026-07-05 06:41:32 +00:00
if ( ! first || ! last || ! phone ) {
alert ( 'Please fill in all fields' ) ;
return ;
}
2026-07-12 12:41:35 +00:00
// Save phone number for next time
localStorage . setItem ( 'qx_phone' , phone ) ;
localStorage . setItem ( 'qx_firstName' , first ) ;
localStorage . setItem ( 'qx_lastName' , last ) ;
btn . disabled = true ;
btn . textContent = 'Sending...' ;
try {
// Send to backend API
const response = await fetch ( 'https://api.quixzoom.com/api/qz/waitlist' , {
method : 'POST' ,
headers : {
'Content-Type' : 'application/json' ,
} ,
body : JSON . stringify ( {
first _name : first ,
last _name : last ,
phone : phone ,
source : 'join-page' ,
timestamp : new Date ( ) . toISOString ( )
} )
} ) ;
if ( response . ok ) {
document . getElementById ( 'successMsg' ) . classList . add ( 'show' ) ;
btn . textContent = 'Joined!' ;
} else {
throw new Error ( 'Server error' ) ;
}
} catch ( e ) {
// Fallback: send email via mailto
const subject = ` New Zoomer Registration: ${ first } ${ last } ` ;
const body = ` New Zoomer registration from join page: \n \n Name: ${ first } ${ last } \n Phone: ${ phone } \n Source: join.html \n Time: ${ new Date ( ) . toLocaleString ( ) } ` ;
window . location . href = ` mailto:hello@quixzoom.com?subject= ${ encodeURIComponent ( subject ) } &body= ${ encodeURIComponent ( body ) } ` ;
document . getElementById ( 'successMsg' ) . classList . add ( 'show' ) ;
btn . textContent = 'Joined!' ;
}
2026-07-05 06:41:32 +00:00
}
< / script >
< / body >
2026-07-12 12:41:35 +00:00
< / html >