- Add NFC ePassport roadmap (ICAO 9303, eIDAS) - Add TensorFlow.js edge face detection (BlazeFace) - Add structured audit logger (GDPR-compliant) - Risk scoring support Part of KYC Apple Native UX v1.1.0
27 KiB
quiXzoom — User Journey Audit
Datum: 2026-06-16
Testad av: Automatiserad subagent — faktiska HTTP-anrop + källkodsläsning
Miljö: Production (api.quixzoom.com, www.quixzoom.com, app.quixzoom.com, S3-buckets)
Sammanfattning
quiXzoom har en fungerande teknisk stomme: landningssidan rankar synligt i sökning, registrerings-API:et fungerar och returnerar token direkt, KYC-pipelinen är byggd, och Stripe Connect-länken existerar. Men resan från Google till aktiv Zoomer är bruten på minst fyra kritiska punkter: waitlist-endpointen ger DB-fel och tar inte emot e-poster, /me-endpointen (onboarding-guiden) kraschar med ett databaskolumnfel, landningssidans enda CTA ("Register interest") leder aldrig till app-registrering utan till en väntlista, och det saknas fullständigt länk från landningssidan till app.quixzoom.com. Språkblandning (svenska i sökordssnippet, engelska i allt content) skapar dessutom förvirring. Plattformen kan inte ta emot Zoomers på ett funktionellt sätt idag.
Poäng per steg
| Steg | Område | Status | Betyg (1–5) |
|---|---|---|---|
| 1 | Google Discovery | Syns, men på position ~5 för "tjäna pengar foton Sverige". Snippet är bra. | 3/5 |
| 2 | Landing page (www) | Stark design, tydlig hero. CTA leder bara till väntlista, inte till registrering. Mobilnavbar dold. | 3/5 |
| 3 | For Organisations | Välgjord, tydlig. Saknar pris-CTA, form oklart var den skickar. | 3/5 |
| 4 | Registration/join-flödet | Brutet. CTA leder till väntlista. Ingen länk till app. /join → /auth redirect finns i appen men saknas på www. | 1/5 |
| 5 | API — registration endpoint | Fungerar. POST /api/qz/auth/register returnerar token. | 4/5 |
| 6 | API — /me onboarding-status |
Kraschar. column u.total_earned does not exist → 401 med DB-felmeddelande. |
1/5 |
| 7 | Waitlist-endpoint | DB-fel. POST /api/qz/waitlist returnerar {"error":"Database error","code":"DB_ERROR"}. |
1/5 |
| 8 | KYC-flödet | Välbyggt tekniskt (SFace MRZ+biometri+challenge). Men oklar UX — när triggas det? | 3/5 |
| 9 | Zoomer-appen (app.quixzoom.com) | PWA finns, manifest finns. Men ingen App Store/Google Play-länk. Landningssidan nämner "App Store Coming August 2026" och "Google Play Coming August 2026" men inga faktiska länkarna finns ännu. | 2/5 |
| 10 | E-postflöde — välkomstmail | Välkomstmail finns i waitlist-koden (AWS SES, nio språk). Men är inaktivt pga DB-felet. Registrerings-API saknar helt välkomstmail. | 2/5 |
Steg 1 — Google Discovery
Nuläge
Sökning "tjäna pengar foton Sverige" (DuckDuckGo/Bing-baserad): quiXzoom dyker upp som result #5 (organiskt, efter 2 betalda annonser och 2 stockfoto-guider). Titel och snippet ser ut såhär:
quiXzoom — Tjäna pengar på foton | Bli Zoomer i Sverige
www.quixzoom.com
Tjäna pengar på dina smartphonefoton. quiXzoom betalar per uppdrag — fotografera infrastruktur, natur och stadsmiljöer nära dig. Starta gratis, betalt varje måndag.
Sökning "earn money taking photos": quiXzoom dyker inte upp i de 8 första resultaten (internationella plattformar som Shutterstock, Foap, Ivueit dominerar).
Sökning "quiXzoom" direkt: Visas på position 1. Övrigt innehåll är Wavult Group / Wavult OS — ingen förvirring med videokonferensverktyget Zoom.
Sökning "crowdsourced field data collection": quiXzoom dyker inte upp alls.
Problem
- Metadata saknar
<html lang="...">i appen (app.quixzoom.com) —<html>utan lang-attribut. Kan påverka crawling och accessibility. - OG-image existerar (HTTP 200, 17 KB JPEG) — bra. Men
twitter:imageochog:imagepekar påhttps://www.quixzoom.com/og-image.jpgmedan appen pekar på samma. Ingen separat app-OG-bild. - Ingen hreflang för svenska på landningssidan —
<html lang="">och inga<link rel="alternate" hreflang="sv">. Google kan inte förstå att sidan är riktad mot Sverige. - Sökordssnippet säger "betalt varje måndag" — den texten finns inte i hero-sektionen på sidan ("Payment per approved mission, direct to your bank account"). Diskrepans kan sänka CTR-kvaliteten och trovärdigheten när besökaren landar.
- Ingen backlink-strategi synlig — quiXzoom nämns inte i de listor och guider ("11 Apps That Pay You to Take Pictures", etc.) som toppar söket. Konkurrenter Ivueit/Foap är väletablerade.
Förslag
- Lägg till
<html lang="sv">(ellerlang="en"beroende på sidas primärspråk) på www och app. - Lägg till
<link rel="alternate" hreflang="sv" href="https://www.quixzoom.com/">ochhreflang="x-default". - Synkronisera meta-description med faktisk hero-text — ta bort "betalt varje måndag" om det inte är sant eller lägg in det på sidan.
- Pitcha till sajter som publicerar "apps that pay you to take photos"-guider (moneypantry.com, financialbinder.com) — enkel backlink-möjlighet med hög relevans.
- Skapa en landningssida specifikt för sökordet "crowdsourced field data collection" under
/for-organisations/field-data-collection/.
Steg 2 — Landing page (www.quixzoom.com)
Nuläge
Hero-text (faktisk HTML-text):
"Capture the world. Earn per mission."
"quiXzoom is a platform for field data collection. Photograph infrastructure, roads, coastlines and urban environments near you. Payment per approved mission, direct to your bank account."
Trust-rad under formuläret:
"No signup fee · Payment via Stripe Connect · Identity verification required once"
Sidtitel (sökmotorvisad): quiXzoom — Tjäna pengar på foton | Bli Zoomer i Sverige
OG-titel: quiXzoom – Tjäna pengar per uppdrag
Meta-description: "Fotografera uppdrag nära dig. Betalt per godkänd bild via Stripe Connect. Ingen plattformsavgift. Lanseras 1 augusti 2026."
Stat-sektionen visar:
- ~30 min — Average mission time
- 20+ Countries at launch
- August 2026 — Launch market: Sweden
- 100% — Paid on approval
Nav-knappen: "Register interest" — scrollar till e-postformulär (väntlista)
Hero-CTA: "Register interest →" — ditto
Problem
-
Språkblandning är förvirrande. Sökordssnippet är på svenska ("Tjäna pengar på foton", "Bli Zoomer"), men hela sidan är på engelska. En svensk som googlar hamnar på engelska content. Det är inte nödvändigtvis fel (internationell plattform), men det skapar ett diskrepanshopp.
-
Mobilnavbar är dold. CSS säger explicit:
@media(max-width:768px){.nav-links{display:none}.btn-nav{display:none}}— på mobil saknas navigering helt och "Register interest"-knappen försvinner. Den primära trafikkällan (smartphones) ser en skalad-bort navbar utan CTA. -
Zoomer-räknaren visar ingenting. Waitlist-count API returnerar
{"count":0}och väntelistan är trasig. Landningssidan hämtar count dynamiskt — besökare ser "— Zoomers already signed up" utan siffra, alternativt 0. Det sänker trovärdigheten drastiskt. -
Inga sociala bevis. Inga testimonials, inga citat från Zoomers, inga logos, ingen pressomtäl. "Be among the first. Launching August 2026." är det närmaste.
-
App Store / Google Play visar "Coming August 2026" — inga faktiska klickbara länkar. Besökaren förstår inte om det är en app eller en webbapp.
-
Ingen direktlänk till app.quixzoom.com. Hela landningssidans CTA-flöde leder till väntlista, inte till registrering i appen. Användare som är redo att skapa konto hittar ingen väg dit.
-
Stats-sektionen är statisk och lite sval. "~30 min Average mission time" och "20+ Countries at launch" är estimat — ingen faktisk data ännu.
Förslag
- Fixa mobilnavbaren: ta bort
display:noneför.btn-navpå mobil, ersätt med hamburgermeny eller en fast bottom-bar med "Register interest". - Lägg till en tydlig länk/knapp i hero:
"Already registered? Open app →"→https://app.quixzoom.com. - Fixa waitlist-endpoint (se Steg 7) så räknaren visas.
- Lägg till en sektion "What Zoomers say" — även om appen är i beta kan ni visa intern feedback.
- Synkronisera sidans primärspråk: antingen gör en svenska version på
/sv/eller håll allt på engelska inkl. sökordsrubriken.
Steg 3 — For Organisations-sidan (/for-organisations/)
Nuläge
Sidan har <link rel="canonical" href="https://www.quixzoom.com/for-organisations/"> och en hreflang="x-default". Det är bra.
Hero-text:
"Field data collection. On demand. At scale."
"Commission visual documentation of infrastructure, property and urban environments — verified and delivered. No field team required."
Stats-rad:
- 20+ Countries at launch
- ~30 min Average mission time
- 100% AI-reviewed before delivery
- Aug 1 Global launch 2026
Sektioner: What we deliver, Who uses quiXzoom (Municipality, Property, Insurance, Infrastructure), How it works, Pricing, form.
CTA-knapp i nav: "Request access" → oklart vart (förmodligen till form längre ned på sidan).
Problem
-
Pris är otydligt. Sidan nämner "Transparent. Per approved submission." men visar prisbanderna för AAMOS B2B-plattform (Seed/Growth/Scale) — det är inte rätt prissättning för organisations-kunder som köper uppdrag. Förväxling med SaaS-priset.
-
"Request access"-knappen saknar
hrefi navbar-utgåva — den är en<button class="btn-nav">utan klickmål specificerat i det utdrag vi ser. Oklar destination. -
Inga case studies eller kundlogos — B2B-köpare behöver socialt bevis. Sidan har bra text men ingen social proof alls.
-
HTML lang saknas — källan visar ingen
<html lang="en">. -
Formuläret (
form-wrap-sektionen) finns i CSS men destinationen är oklar — troligen waitlist-API, men detta är en B2B-form som borde gå till ett dedikerat CRM-flöde eller en dedikerad endpoint.
Förslag
- Separera zoomer-prissättning från B2B-prissättning tydligt.
- Lägg till
<html lang="en">. - Lägg till 2–3 fiktiva (eller verkliga beta-) fallstudier med konkret data.
- Klargör "Request access"-knappens destination — visa en modal eller skrolla till form med synlig
<a href="#contact-form">.
Steg 4 — Registration/Join-flödet
Nuläge
Det finns inget direktflöde från www → app för en användare som vill registrera sig som Zoomer.
- Nav-knappen: "Register interest" → scrollar till e-postfält (väntlista)
- Hero-CTA: "Register interest →" → ditto
- Footer: "Register interest" → ditto
- Ingen länk till
https://app.quixzoom.comfinns på landningssidan - Appen hanterar
/join→ redirect till/auth(se patch-script), men det spelar ingen roll när ingen leder dit
App.quixzoom.com patch-script (inline JS i index.html):
// /join → /auth redirect
if (window.location.pathname === '/join' || window.location.pathname === '/join/') {
window.history.replaceState(null, '', '/auth');
}
Registrerings-API-anrop i appen:
POST https://api.quixzoom.com/api/qz/auth/register
Problem
- Kritisk blocker: Ingen länk från www till app. Användare som vill registrera sig idag (inte bara intresseanmäla) har ingen väg dit.
- "Register interest" vs "Create account" är fundamentalt olika handlingar. Nuläget samlar bara väntlista-e-poster, inte faktiska konton.
- Väntliste-endpoint är trasig (se Steg 7) — även väntlistan fungerar inte.
- Avsaknad av disambiguering: "Be among the first. Launching August 2026." — oklar om appen är live idag eller ej. app.quixzoom.com är live och accepterar registrering, men detta kommuniceras inte.
Förslag
- Lägg till
"Create account →"som primär CTA som leder tillhttps://app.quixzoom.com/auth. - Behåll "Register interest" som sekundär CTA för de som inte vill skapa konto än.
- Sätt tydlig text: "The app is live now. Missions go live August 1, 2026."
Steg 5 — API — Registration endpoint
Nuläge
Endpoint: POST https://api.quixzoom.com/api/qz/auth/register
Testanrop (utfört under audit):
Request: {"email":"test-journey-audit@example.com","password":"TestPass123!","name":"Test Zoomer","role":"zoomer"}
Response HTTP 200:
{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "0a6c1a83-7cad-4434-b27f-52364ef9dd48",
"email": "test-journey-audit@example.com",
"name": "Test Zoomer",
"role": "zoomer",
"created_at": "2026-06-16T12:04:00.353Z"
}
}
RS256 JWT med iss: identity.wavult.com, expires 7 dagar. Bcrypt-hash med cost 12. Wallet skapas automatiskt vid registrering.
Problem
-
Inget välkomstmail skickas. Koden i
auth.mjsskickar inga e-poster — varken välkomsthälsning eller e-postbekräftelse.email_confirmed-kolumnen finns i databasen och i/me-responsen, men det finns ingen endpoint eller logik för att bekräfta e-post. -
Inget krav på e-postbekräftelse. Vem som helst kan registrera sig med en fejk-e-post och direkt få ett JWT. Ingen verifieringsbarriär.
-
Ingen onboarding-guide efter registrering. Registreringen ger token + user. Appen måste självständigt veta att nästa steg är: bekräfta e-post → lägg till telefon → KYC → Stripe Connect. Det finns en
onboarding-status i/me, men/meär trasig (se Steg 6). -
Svag felhantering för
role: Omroleinte skickas defaultar den till"zoomer"— OK. Men felmeddelandet om fel roll är på engelska ("role must be zoomer or orderer") — konsistent med resten av API:et.
Förslag
- Skicka välkomstmail via SES vid registrering (infrastrukturen finns — se waitlist.mjs som använder SES).
- Lägg till e-postbekräftelse: generera en
confirm_token, spara i DB, skicka länk, låt/auth/confirm?token=...sättaemail_confirmed=true. - Trigga onboarding-guiden i appen efter svar från
/register.
Steg 6 — API — /me endpoint (onboarding-status)
Nuläge
Endpoint: GET https://api.quixzoom.com/api/qz/auth/me (Bearer-skyddat)
Testanrop med JWT från Steg 5:
Response HTTP 401:
{
"error": "Ogiltig token",
"detail": "column u.total_earned does not exist"
}
Felet: SQL-queryn i /me selekterar u.total_earned och u.missions_completed direkt från quixzoom.users-tabellen, men dessa kolumner finns inte på users-tabellen — de tillhör wallets/separata aggregat. Queryn kolliderar med sig själv: på rad 133 gör den COALESCE(w.total_earned, 0) AS wallet_total_earned från quixzoom.wallets, men försöker även läsa u.total_earned på rad 125 (direkt från users). Kolumnen saknas → PostgreSQL-fel → 401.
Vad /me borde returnera (onboarding-statusobjektet):
{
"registered": true,
"email_confirmed": false,
"phone_verified": false,
"identity_verified": false,
"stripe_connected": false,
"ready_for_missions": false
}
Detta är kritisk data för appen — onboarding-guiden kan inte fungera.
Problem
/meär trasig för alla användare. Alla Zoomers som försöker hämta sin profil/onboarding-status får 401. Hela onboarding-guiden i appen är ur funktion.- Felmeddelandet exponerar databasstruktur (
column u.total_earned does not exist) — informationsläckage som aldrig bör nå produktion. - Fix är enkel: ta bort
u.total_earned, u.missions_completedur SELECT (rad 125), de finns redan somwallet_total_earnedfrån wallet-joinen.
Förslag
Omedelbar fix — auth.mjs rad 121–134:
-- Ta bort dessa rader:
u.credits_balance, u.total_earned, u.missions_completed,
-- De är redan tillgängliga via:
COALESCE(w.balance, 0) AS wallet_balance,
COALESCE(w.total_earned, 0) AS wallet_total_earned
Flytta om credits_balance kolumnen existerar i users, annars ta bort den också. Exponera aldrig DB-felmeddelanden i production-svar.
Steg 7 — Waitlist-endpoint
Nuläge
Endpoint: POST https://api.quixzoom.com/api/qz/waitlist
Testanrop:
Request: {"email":"test-journey-audit-wl@example.com","lang":"sv"}
Response HTTP 500:
{
"error": "Database error",
"code": "DB_ERROR"
}
Även GET /api/qz/waitlist/count returnerar {"count":0} korrekt (enkel COUNT-query fungerar).
Koden i waitlist.mjs ser korrekt ut — INSERT-query med ON CONFLICT och alla nödvändiga fält. Felet uppstår troligen vid pool-initialiseringen: koden gör getPool().catch(...) vid import och skapar schema/tabell om det inte finns. Antagligen misslyckas DB-anslutningen eller tabellskapandet vid import utan att krascha processen, och sedan misslyckas varje INSERT.
Alternativt: SSL-konfigurationsproblemet (se backup-filen waitlist.mjs.bak-ssl-1781543138) tyder på att det har funnits SSL-problem med denna DB-anslutning tidigare.
E-postbekräftelse: Koden skickar bekräftelsemail på 9 språk via AWS SES vid lyckad registrering. Triggas aldrig pga DB-felet.
E-postsändaren: "quiXzoom <no-reply@wavult.com>" — skickas från Wavult-domänen, inte quixzoom.com. Kan se ut som spam.
Problem
- Waitlist-formuläret på landningssidan är icke-funktionellt. Användare som fyller i sin e-post får förmodligen ett generiskt felmeddelande. Landningssidans inline-felhantering (koden
Something went wrong. Please try again.) visas. - Alla intresseanmälningar försvinner. Varje person som googlar "tjäna pengar foton", landar på sidan och anmäler sig — registreras inte.
- Bekräftelsemail skickas aldrig — SES-logiken är aldrig nådd.
- Avsändaradress:
no-reply@wavult.combör varano-reply@quixzoom.comför trovärdighet.
Förslag
- Debugga pool-initialiseringen i
waitlist.mjs— körgetPool()med en test-INSERT och logga exakt PostgreSQL-felmeddelande. - Kontrollera att WAITLIST_DB_URL env-var är korrekt satt i PM2/systemd-konfig.
- Byt
Sourcei SES-anropet tillquiXzoom <no-reply@quixzoom.com>. - Lägg till
Reply-To: hello@quixzoom.com(det finns redan — bra). - Testa SSL-konfigurationen: kolla
waitlist.mjs.bak-ssl-1781543138för vad som ändrades.
Steg 8 — KYC-flödet
Nuläge
KYC-systemet är välbyggt:
POST /challenge— genererar server-sided nonce + action (BLINK_TWICE, TURN_LEFT, TURN_RIGHT, NOD, SMILE) med 45s timeoutPOST /upload/:type— laddar uppdoc_frontellerselfie(base64 JSON) till S3 (platform-kyc-evidence-eu, AES256)POST /verify— startar asynkron verifiering mot SFace-tjänst (port 8765): MRZ-extraktion + ansiktsmatchningGET /status/:session_id— poll-endpoint för verifieringsstatusGET /me— hämtarassurance_levelför inloggad användare
Assurance levels: photo_low, manual_review, rejected
Identity verification är krävt för ready_for_missions: true (via /me-endpointen):
ready_for_missions: (u.identity_verified && u.stripe_onboarding_complete) || false,
Problem
-
KYC triggas aldrig kommunicerat för användaren. Det finns inget tydligt i appen (svårt att verifiera utan full app-granskning) som säger "du måste verifiera din identitet för att ta uppdrag". Användare kan skapa konto och sedan mötas av en tyst blockering.
-
Livsliveness-aktioner (BLINK_TWICE etc.) kräver att appen kan instruera och validera video-response. Det är icke-trivialt UX — kräver en bra in-app guide.
-
KYC_HMAC_KEY och KYC_CHALLENGE_SECRET — koden har startskydd (
// REQUIRED: set KYC_HMAC_KEY env var) men ingen tydlig deploy-dokumentation synlig. -
assurance_level: 'photo_low'— vad innebär det för Zoomern? Kan de ta uppdrag? Oklart från koden.
Förslag
- Dokumentera KYC-flödet tydligt i appen: "Step 3 of 4: Verify your identity. Takes 2 minutes. Required once."
- Definiera vilka assurance-levels som räcker för
ready_for_missions(baraphoto_low+? eller krävs godkänd manuell review?). - Lägg till
identity_verifiedi register-svaret eller ta upp det direkt i onboarding-guiden.
Steg 9 — Zoomer-appen (app.quixzoom.com)
Nuläge
S3-bucket quixzoom-app-prod innehåller:
index.html(18,8 KB) — Vite-byggd PWAmanifest.webmanifest— PWA-manifestpwa-192x192.png,pwa-512x512.png,favicon.pngsw.js,workbox-8c29f6e4.js— Service Worker (offline-stöd)registerSW.js
Meta:
<title>quiXzoom – Tjäna pengar per uppdrag</title>
<meta name="description" content="Fotografera uppdrag nära dig. Betalt per godkänd bild via Stripe Connect. Ingen plattformsavgift. Lanseras 1 augusti 2026." />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
App är en PWA — installationsbar på hem-skärmen. Ingen native App Store-app finns (ännu).
Patch-script v6 (inline JS, senast uppdaterad 2026-06-13):
- AMOS_BASE →
api.quixzoom.com /join→/authredirect- Hanterar login/register via
api.quixzoom.com/api/qz/auth/*
Problem
<html>saknar lang-attribut — SEO- och accessibility-problem.- Inga App Store-/Google Play-länkarna existerar idag. Landningssidan visar "App Store Coming August 2026" och "Google Play Coming August 2026" — dessa är placeholders, inte klickbara. En besökare som söker "quiXzoom app" hittar inget.
- PWA Install-prompt — det är oklart om appen uppmanar till installation. Service worker finns, manifest finns — borde funka i Chrome/Android, men iOS kräver manuell "Add to Home Screen" utan Push API.
og:imagepå app.quixzoom.com pekar påhttps://www.quixzoom.com/og-image.jpg— okonsekvent (borde peka på app-specifik OG-bild eller rätt domän).- Inga förklarande routes i index.html — allt är SPA, vilket är normalt, men onboarding-flödet (register → verify email → KYC → Stripe) måste fungera inom appen.
Förslag
- Lägg till
<html lang="sv">(ellerlang="en"). - Publicera App Store/Google Play-sidor innan lansering — bygg åtminstone landing pages med "Coming soon" med pre-registration.
- Lägg till en "Install app"-banner på landningssidan som triggar PWA-install på mobilbesök.
- Kontrollera att onboarding-guiden i appen faktiskt hanterar
/me-felet (se Steg 6) gracefully — den får en 401 idag och vet inte varför.
Steg 10 — E-postflödet
Nuläge
Waitlist-mail: AWS SES, 9 språk (sv, en, de, fr, nl, fi, da, es, it), plain text. Avsändare: quiXzoom <no-reply@wavult.com>, Reply-To: hello@quixzoom.com. Skickas inte (DB-felet blockerar).
Registrerings-välkomstmail: Finns inte. Varken kod eller konfiguration för välkomstmail vid /register.
E-postbekräftelse: Finns inte. email_confirmed-kolumnen finns i DB och /me-responsen, men ingen route för att skicka eller bekräfta.
Mailinnehåll (waitlist-sv):
"Din e-postadress är registrerad på quiXzoom-väntelistan.
quiXzoom lanserar i Sverige den 1 augusti 2026. Du kommer att meddelas via denna adress när din region öppnar.
Vad är quiXzoom? quiXzoom är en plattform för crowdsourcad fältdatainsamling..."
Texten är bra — tydlig, kort, korrekt avsändaradress för svar.
Problem
- Ingen e-post skickas någonstans idag (waitlist trasig, register har inget mail).
- Avsändardomänen är wavult.com, inte quixzoom.com — ser otryggt ut för mottagaren.
- Inga HTML-mail — bara plain text. Svår att differentiera visuellt, ingen call-to-action-länk.
- Ingen e-postbekräftelse = ingen spam-barriär, ingen verifiering av e-postadress.
Förslag
- Fixa waitlist-DB (se Steg 7) så befintlig SES-logik kan köras.
- Lägg till välkomstmail vid
/register:"Welcome to quiXzoom — here's how to get started"med länk till app + onboarding-guide. - Implementera e-postbekräftelse: skicka länk →
/auth/confirm?token=Xsätteremail_confirmed=true. - Byt avsändardomän till
no-reply@quixzoom.com(kräver SES-verifiering av quixzoom.com-domänen). - Bygg HTML-mail-templat (även enkel — logo + knapp + text).
Kritiska blockers (måste fixas nu)
Dessa problem förhindrar att en enda användare kan gå igenom resan från Google till aktiv Zoomer:
-
/api/qz/waitlist— DB-fel (HTTP 500).
Alla väntlisteanmälningar försvinner. Landningssidans primära CTA är icke-funktionell. Fix: debugga pool-init iwaitlist.mjs, verifiera WAITLIST_DB_URL och SSL-konfiguration. -
/api/qz/auth/me—column u.total_earned does not exist(HTTP 401).
Appens onboarding-guide kan inte hämta status. Ta bortu.total_earned, u.missions_completedur SELECT-queryn på rad 125 iauth.mjs— de finns redan via wallet-joinen somwallet_total_earned. -
Ingen länk från www.quixzoom.com till app.quixzoom.com.
Användare som vill registrera sig hittar ingen väg till appen. Lägg till"Create account →"CTA som pekar påhttps://app.quixzoom.com/auth. -
Mobilnavbaren är dold (
display:nonevid < 768px).
Primär trafikkälla (smartphones) ser ingen navigering och ingen CTA. Fixa med hamburgermeny eller sticky bottom-bar.
Quick wins (kan fixas direkt)
- Lägg till
<html lang="en">på www och app — 5 min, SEO + accessibility. - Byt SES-avsändaradress från
no-reply@wavult.comtillno-reply@quixzoom.com— kräver SES-domain verification, 30 min. - Dölj DB-felmeddelanden i API-svar — ersätt
detail: e.messagemed generiska meddelanden i production, 10 min. - Lägg till
"Open app →"-länk i footern på www.quixzoom.com, 5 min. - Synkronisera meta-description med faktisk hero-text (ta bort "betalt varje måndag" om det inte kommuniceras på sidan), 5 min.
- Hreflang för svenska:
<link rel="alternate" hreflang="sv" href="https://www.quixzoom.com/">, 5 min.
Längre åtgärder
- E-postbekräftelse och välkomstflöde — ny route
/auth/confirm, ny/auth/resend-confirmation, SES-mall. Estimat: 1 dag. - Välkomstmail vid registrering — HTML-baserat, med onboarding-guide-länk. Estimat: 4 timmar.
- PWA/App Install-strategi — bestäm om native app eller enbart PWA. Om PWA: implementera install-prompt och "Add to Home Screen"-guide. Estimat: 2 dagar.
- Backlink-outreach — kontakta 5–10 "earn money from photos"-guider för att inkludera quiXzoom. Estimat: 1 vecka löpande.
- Mobilresponsiv nav — hamburgermeny eller bottom-bar med "Register" och "Log in". Estimat: 1 dag.
- Socialt bevis på landningssidan — testimonials (beta-Zoomers), reell waitlist-counter. Estimat: löpande.
- B2B-prissida separerad från Zoomer-sida — tydliga prisspår. Estimat: 2 dagar.
- Internationalisering (i18n) — bestäm primärspråk per marknad; minst en fullständig svensk version av landningssidan. Estimat: 3–5 dagar.
Appendix — Testresultat
| Endpoint | Metod | Förväntad respons | Faktisk respons |
|---|---|---|---|
/api/qz/auth/register |
POST | 200 + JWT | ✅ 200 OK |
/api/qz/auth/me |
GET (Bearer) | 200 + user+onboarding | ❌ 401 (column u.total_earned does not exist) |
/api/qz/waitlist |
POST | 200 OK | ❌ 500 (Database error) |
/api/qz/waitlist/count |
GET | 200 + count | ✅ 200 {"count":0} |
www.quixzoom.com/og-image.jpg |
GET | 200 JPEG | ✅ 200 (17 KB) |
S3 quixzoom-landing-prod/index.html |
— | HTML | ✅ 152 KB |
S3 quixzoom-app-prod/index.html |
— | HTML | ✅ 18,8 KB |