docs: add quixzoom-auth-core product to AAMOS
- Product documentation in docs/products/ - Updated MEMORY.md with product info - quiXzoom Auth Core as AAMOS Identity product
This commit is contained in:
@@ -390,6 +390,7 @@ main {
|
||||
.btn { padding: 0.75rem 1.5rem !important; font-size: 1rem !important; }
|
||||
}
|
||||
</style>
|
||||
<script type="module" src="https://auth.quixzoom.com/site-auth-snippet.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -554,7 +555,7 @@ main {
|
||||
<p class="term-long">When AI review determines that a submission satisfies all specification, quality, and location requirements for a mission, the submission is marked as Approved. This event is the trigger for payout to the Zoomer and for delivery of the submission package to the orderer. Approval also counts positively toward the Zoomer's approval rate and rating.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A Zoomer submits a marina documentation mission. AI review approves the submission within 2 minutes; the Zoomer sees a confirmation in-app and their €12 earnings are queued for the next payout cycle. The orderer receives the submission package via webhook.</p>
|
||||
<p>A Zoomer submits a marina documentation mission. AI review approves the submission within 2 minutes; the Zoomer sees a confirmation in-app and their $12 earnings are queued for the next payout cycle. The orderer receives the submission package via webhook.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -574,7 +575,7 @@ main {
|
||||
<p class="term-long">Approval rate is the primary quality signal on the quiXzoom platform. It is calculated as approved submissions divided by total submissions over the preceding 30 days. A Zoomer's approval rate directly determines their tier eligibility and access to premium and surge missions. Professional tier requires maintaining above 92% approval; Active tier requires above 85%. Zoomers below 70% receive coaching and may be temporarily restricted from claiming new missions.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A Zoomer with 38 approvals and 2 rejections out of 40 submissions in the last 30 days has a 95% approval rate. This qualifies them for Professional tier and unlocks access to premium infrastructure missions paying up to €30 per submission.</p>
|
||||
<p>A Zoomer with 38 approvals and 2 rejections out of 40 submissions in the last 30 days has a 95% approval rate. This qualifies them for Professional tier and unlocks access to premium infrastructure missions paying up to $30 per submission.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -699,7 +700,7 @@ main {
|
||||
<p class="term-long">A Contradiction is flagged when an observation deviates significantly from the expected state: a building that was intact now shows damage, a road that was clear now has a sinkhole, or an asset that was present is now missing. Contradictions are not errors — they are valuable signals. They trigger alerts, escalate priority, and often indicate the most urgent decisions a customer must make. The Contradiction engine cross-references observations against historical data, design specifications, and regulatory baselines.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A quarterly observation of a commercial roof shows new water staining not present in the previous observation. AMOS flags this as a Contradiction, alerting the property manager to schedule repairs before the rainy season — preventing a €50,000 claim.</p>
|
||||
<p>A quarterly observation of a commercial roof shows new water staining not present in the previous observation. AMOS flags this as a Contradiction, alerting the property manager to schedule repairs before the rainy season — preventing a $50,000 claim.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1131,7 +1132,7 @@ main {
|
||||
<p class="term-long">An Index is the primary output of the AMOS analysis engine — a single number that summarises complex, multi-dimensional observation data into an intuitive, comparable metric. Different indices serve different purposes: the City Health Index measures overall infrastructure condition; the Infrastructure Risk Index quantifies probability of failure; the Commercial Opportunity Index identifies high-potential investment areas. Indices are computed from aggregated observations, weighted by confidence scores, and updated continuously as new observations flow in.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In Landvex</span>
|
||||
<p>A city's Road Condition Index drops from 72 to 58 over six months. AMOS traces the decline to increased pothole observations in the northern district. The municipality uses this Index to justify a €2M resurfacing budget — with the Index projected to return to 75 post-works.</p>
|
||||
<p>A city's Road Condition Index drops from 72 to 58 over six months. AMOS traces the decline to increased pothole observations in the northern district. The municipality uses this Index to justify a $2M resurfacing budget — with the Index projected to return to 75 post-works.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1234,7 +1235,7 @@ main {
|
||||
<p class="term-long">A mission is the fundamental unit of work on the quiXzoom platform. Each mission has a geographic pin or geofence, a compensation amount, a mission brief (describing what to photograph and how), a time window within which the work must be completed, and a submission specification defining how many photos are required and from which vantage points. Missions may be standard, premium, or surge, and may be single-submission or multi-submission.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>An insurance company creates a mission to document storm damage at a specific address. The mission has a 200-metre geofence, requires 8 photos from specified angles, pays €14, and has a 6-hour time window from claim. A nearby Zoomer sees it in the app, claims it, and completes the documentation.</p>
|
||||
<p>An insurance company creates a mission to document storm damage at a specific address. The mission has a 200-metre geofence, requires 8 photos from specified angles, pays $14, and has a 6-hour time window from claim. A nearby Zoomer sees it in the app, claims it, and completes the documentation.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1293,7 +1294,7 @@ main {
|
||||
<p class="term-long">Multi-submission missions are used by orderers who want several independent documentation sets of the same location — typically for comparison, validation, or higher confidence. The first Zoomer to submit receives the highest compensation; subsequent approved submissions receive progressively lower amounts. The orderer sets the maximum number of submissions they will accept and the compensation schedule. Multi-submission missions remain claimable by additional Zoomers until the orderer's submission limit is reached.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>An orderer creates a multi-submission mission for a flood-affected road segment, accepting 3 submissions at €18 / €12 / €8. Three different Zoomers claim and submit independently — the orderer receives three distinct photographic records of the same location, useful for triangulating damage assessment.</p>
|
||||
<p>An orderer creates a multi-submission mission for a flood-affected road segment, accepting 3 submissions at $18 / $12 / $8. Three different Zoomers claim and submit independently — the orderer receives three distinct photographic records of the same location, useful for triangulating damage assessment.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1424,7 +1425,7 @@ main {
|
||||
<p class="term-long">Payouts are processed via Stripe Connect and deposited to the Zoomer's linked IBAN. Earnings from approved submissions accumulate in the Zoomer's Stripe Connect balance and are disbursed on a rolling schedule. Payout frequency and minimum threshold are configurable within the app. Payouts require completed identity verification (KYC) and a linked bank account. Zoomers receive an in-app notification and email confirmation for each payout.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A Zoomer completes 5 missions in a week, earning €72 total. After each approval, earnings add to their Stripe Connect balance. On Friday, their accumulated balance is disbursed to their Dutch IBAN via SEPA — arriving as a single bank transfer with a quiXzoom reference.</p>
|
||||
<p>A Zoomer completes 5 missions in a week, earning $72 total. After each approval, earnings add to their Stripe Connect balance. On Friday, their accumulated balance is disbursed to their Dutch IBAN via SEPA — arriving as a single bank transfer with a quiXzoom reference.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1464,7 +1465,7 @@ main {
|
||||
<p class="term-long">The platform fee is charged to the orderer and covers quiXzoom's infrastructure, AI review system, Zoomer management, customer support, and margin. Zoomers receive their full stated mission compensation — the platform fee is paid by the orderer separately and does not come from Zoomer earnings. Platform fees are calculated as a percentage of mission compensation, with enterprise volume pricing available for high-volume orderers.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>An orderer creates a mission paying the Zoomer €12. quiXzoom's platform fee adds an additional amount on top — the orderer pays the total; the Zoomer receives exactly €12 upon approval. The platform fee structure is transparent and set out in the orderer's service agreement.</p>
|
||||
<p>An orderer creates a mission paying the Zoomer $12. quiXzoom's platform fee adds an additional amount on top — the orderer pays the total; the Zoomer receives exactly $12 upon approval. The platform fee structure is transparent and set out in the orderer's service agreement.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1481,10 +1482,10 @@ main {
|
||||
<span class="term-category cat-platform">Platform</span>
|
||||
</div>
|
||||
<p class="term-short">A high-threshold mission type requiring specific Zoomer qualifications and a high approval rate, offering significantly elevated compensation.</p>
|
||||
<p class="term-long">Premium missions are reserved for experienced, high-performing Zoomers. Qualification requires Professional tier (or Active tier with relevant specialisation) and an approval rate above 92%. These missions typically involve technical infrastructure documentation — bridges, power facilities, maritime assets — with precise specification requirements. Compensation for premium missions reflects both the technical difficulty and the high-value use cases they serve, typically ranging from €20 to €40+ per submission.</p>
|
||||
<p class="term-long">Premium missions are reserved for experienced, high-performing Zoomers. Qualification requires Professional tier (or Active tier with relevant specialisation) and an approval rate above 92%. These missions typically involve technical infrastructure documentation — bridges, power facilities, maritime assets — with precise specification requirements. Compensation for premium missions reflects both the technical difficulty and the high-value use cases they serve, typically ranging from $20 to $40+ per submission.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A bridge inspection premium mission paying €28 appears for a Zoomer with a Maritime specialisation and 96% approval rate. Zoomers without Professional tier or the relevant specialisation do not see this mission in their feed — it is filtered to qualified Zoomers only.</p>
|
||||
<p>A bridge inspection premium mission paying $28 appears for a Zoomer with a Maritime specialisation and 96% approval rate. Zoomers without Professional tier or the relevant specialisation do not see this mission in their feed — it is filtered to qualified Zoomers only.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1504,7 +1505,7 @@ main {
|
||||
<p class="term-long">Professional tier represents quiXzoom's most engaged and highest-quality Zoomers. Qualification requires sustaining 15+ completed missions per week over the qualifying window, maintaining an approval rate above 92%, and having completed identity verification. Professional tier Zoomers receive priority access to new mission types, higher compensation caps, dedicated support, and early access to specialisation programmes. They form the backbone of supply for high-value, time-critical orderer requests.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A full-time quiXzoom contributor averaging 20 missions/week with a 97% approval rate holds Professional tier. They access premium infrastructure missions paying €25–40, receive surge alerts first, and have the option to take on specialisation certifications for maritime and bridge inspection mission types.</p>
|
||||
<p>A full-time quiXzoom contributor averaging 20 missions/week with a 97% approval rate holds Professional tier. They access premium infrastructure missions paying $25–40, receive surge alerts first, and have the option to take on specialisation certifications for maritime and bridge inspection mission types.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1674,11 +1675,11 @@ main {
|
||||
<h3 class="term-name">SEPA</h3>
|
||||
<span class="term-category cat-payment">Payment</span>
|
||||
</div>
|
||||
<p class="term-short">Single Euro Payments Area — the European bank transfer network used for EUR payout disbursements to Zoomers.</p>
|
||||
<p class="term-long">SEPA covers 36 European countries and enables fast, low-cost euro bank transfers using IBAN identifiers. SEPA Credit Transfers (SCT) typically settle within 1 business day; SEPA Instant Credit Transfers (SCT Inst) settle in under 10 seconds where supported. quiXzoom uses Stripe Connect's SEPA infrastructure for EUR disbursements to Zoomers in SEPA-member countries. For Zoomers in countries outside SEPA, SWIFT transfers apply, which may have longer settlement windows and additional fees.</p>
|
||||
<p class="term-short">Single Euro Payments Area — the European bank transfer network used for USD payout disbursements to Zoomers.</p>
|
||||
<p class="term-long">SEPA covers 36 European countries and enables fast, low-cost euro bank transfers using IBAN identifiers. SEPA Credit Transfers (SCT) typically settle within 1 business day; SEPA Instant Credit Transfers (SCT Inst) settle in under 10 seconds where supported. quiXzoom uses Stripe Connect's SEPA infrastructure for USD disbursements to Zoomers in SEPA-member countries. For Zoomers in countries outside SEPA, SWIFT transfers apply, which may have longer settlement windows and additional fees.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A Zoomer in Finland has earned €85 across 7 missions. Stripe Connect initiates a SEPA Credit Transfer to their Finnish IBAN — the funds arrive in their bank account within 1 business day at no charge to the Zoomer.</p>
|
||||
<p>A Zoomer in Finland has earned $85 across 7 missions. Stripe Connect initiates a SEPA Credit Transfer to their Finnish IBAN — the funds arrive in their bank account within 1 business day at no charge to the Zoomer.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1718,7 +1719,7 @@ main {
|
||||
<p class="term-long">Specialisations are earned through a training and assessment programme administered within the quiXzoom app. Each specialisation covers the technical requirements, safety considerations, and documentation standards for a specific mission domain. Available specialisations include Maritime (marina and harbour documentation), Bridge & Civil (infrastructure inspection), Energy Infrastructure (substations, wind turbines), and Retail Audit. Completing a specialisation assessment unlocks the corresponding premium mission category in the Zoomer's feed.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A Zoomer living near a large marina completes the Maritime specialisation — a 45-minute in-app training covering mooring documentation, vessel identification standards, and marina facility photography requirements. They now see maritime premium missions paying €20–35 in their area, which are invisible to non-specialised Zoomers.</p>
|
||||
<p>A Zoomer living near a large marina completes the Maritime specialisation — a 45-minute in-app training covering mooring documentation, vessel identification standards, and marina facility photography requirements. They now see maritime premium missions paying $20–35 in their area, which are invisible to non-specialised Zoomers.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1778,7 +1779,7 @@ main {
|
||||
<p class="term-long">A submission is the output of a claimed and completed mission. It consists of the required number of geo-tagged images, their EXIF metadata, a GPS trace (if required), and any optional notes from the Zoomer. Submissions are uploaded through the quiXzoom app and enter the AI review pipeline immediately. The submission event locks the mission as completed — a Zoomer cannot resubmit after an initial submission without contacting support. Submission quality directly impacts approval rate and rating.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A Zoomer completes a 6-photo road condition survey and taps Submit. The submission package (images, EXIF, GPS trace) is uploaded to S3 and enters AI review. Within 90 seconds, the Zoomer receives an in-app approval notification and their €10 earnings are queued for payout.</p>
|
||||
<p>A Zoomer completes a 6-photo road condition survey and taps Submit. The submission package (images, EXIF, GPS trace) is uploaded to S3 and enters AI review. Within 90 seconds, the Zoomer receives an in-app approval notification and their $10 earnings are queued for payout.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1798,7 +1799,7 @@ main {
|
||||
<p class="term-long">Supplementary tier is the starting tier for all new Zoomers. It provides access to standard missions in the Zoomer's zone, with no minimum weekly commitment. Supplementary Zoomers earn the standard mission rates and can access surge missions in their area. To progress to Active tier, a Zoomer must demonstrate sustained volume (8+ missions/week) and maintain an approval rate above 85% over a qualifying period.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A gig worker uses quiXzoom alongside their other activities — completing 3 missions per week in their neighbourhood while walking their dog or commuting. At Supplementary tier, they access standard missions with no pressure to increase volume; their €30–40/week in earnings is a useful addition to their income mix.</p>
|
||||
<p>A gig worker uses quiXzoom alongside their other activities — completing 3 missions per week in their neighbourhood while walking their dog or commuting. At Supplementary tier, they access standard missions with no pressure to increase volume; their $30–40/week in earnings is a useful addition to their income mix.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1817,7 +1818,7 @@ main {
|
||||
<p class="term-long">Surge missions are created by orderers (typically insurers or infrastructure managers) in response to time-critical events requiring rapid field documentation. They carry elevated compensation to incentivise Zoomers to prioritise them and accept shorter time windows. Surge alerts are pushed as priority notifications to all Zoomers in the affected zone, with Professional tier Zoomers notified first. Surge missions typically have tighter specification requirements and stricter AI review thresholds given their legal and claims significance.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A severe storm hits coastal Sweden. An insurer activates 40 surge missions across 12 postcodes within 20 minutes of the event. Zoomers in those zones receive priority push notifications — the missions pay €35 each (vs. €12 standard) with a 3-hour time window. 38 of 40 missions are claimed within 45 minutes.</p>
|
||||
<p>A severe storm hits coastal Sweden. An insurer activates 40 surge missions across 12 postcodes within 20 minutes of the event. Zoomers in those zones receive priority push notifications — the missions pay $35 each (vs. $12 standard) with a 3-hour time window. 38 of 40 missions are claimed within 45 minutes.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1929,7 +1930,7 @@ main {
|
||||
<p class="term-long">A verified contributor is a Zoomer who has passed the platform's trust threshold: their identity has been confirmed through government-issued ID and liveness check, their bank account is linked via Stripe Connect, and their account is in good standing (not suspended or restricted). Verification is a one-time process, but good standing is maintained through consistent quality (approval rate above threshold) and compliance with platform policies. Only verified contributors can receive payouts and access Professional-tier missions. Verification status is displayed in the Zoomer's profile.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A new Zoomer completes 5 missions and earns €45. Before they can receive their first payout, they must become a verified contributor by completing KYC. Once verified, their status shows a green checkmark in-app, and they can withdraw earnings and claim premium missions.</p>
|
||||
<p>A new Zoomer completes 5 missions and earns $45. Before they can receive their first payout, they must become a verified contributor by completing KYC. Once verified, their status shows a green checkmark in-app, and they can withdraw earnings and claim premium missions.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -1949,7 +1950,7 @@ main {
|
||||
<p class="term-long">VAT treatment of gig platform income varies by jurisdiction and depends on the Zoomer's status (individual, self-employed, VAT-registered business) and the total income thresholds in their country. In most EU countries, Zoomers earning below the VAT registration threshold are not required to charge or remit VAT. quiXzoom provides transaction records suitable for tax reporting but does not provide tax advice — Zoomers should consult their local tax authority or advisor for their specific obligations. For orderers, quiXzoom's service fees are subject to standard B2B VAT rules.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A Swedish Zoomer earning €8,000/year from quiXzoom (below Sweden's VAT threshold of ~€32,000 for small businesses) is not required to register for or charge VAT. A Zoomer earning above threshold must register, charge VAT on their services, and remit to Skatteverket — quiXzoom's annual earnings summary facilitates this reporting.</p>
|
||||
<p>A Swedish Zoomer earning $8,000/year from quiXzoom (below Sweden's VAT threshold of ~$32,000 for small businesses) is not required to register for or charge VAT. A Zoomer earning above threshold must register, charge VAT on their services, and remit to Skatteverket — quiXzoom's annual earnings summary facilitates this reporting.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -2059,7 +2060,7 @@ main {
|
||||
<p class="term-long">Zoomers are the supply side of the quiXzoom marketplace. Anyone with a compatible smartphone, a willingness to be verified (KYC), and a linked bank account can become a Zoomer. Zoomers work independently, on their own schedule, within their chosen zone. They earn per approved submission — there is no hourly pay, no minimum hours, and no obligation to work any particular number of missions. Zoomers progress through tiers (Supplementary → Active → Professional) as they build volume and quality.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A freelance photographer becomes a quiXzoom Zoomer, completing identity verification and bank account setup in 10 minutes. They begin claiming road survey and building inspection missions near their home, earning €8–15 per approved submission. Within 6 weeks, their consistent quality and volume qualify them for Active tier.</p>
|
||||
<p>A freelance photographer becomes a quiXzoom Zoomer, completing identity verification and bank account setup in 10 minutes. They begin claiming road survey and building inspection missions near their home, earning $8–15 per approved submission. Within 6 weeks, their consistent quality and volume qualify them for Active tier.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -2156,7 +2157,7 @@ sections.forEach(s => observer.observe(s));
|
||||
<p class="term-long">Active tier represents Zoomers who use quiXzoom as a regular supplemental income source. To qualify, a Zoomer must sustain 8+ completed missions per week and maintain an approval rate above 85% over the qualifying window. Active Zoomers access a broader mission pool than Supplementary tier, including most premium mission types and higher-paying specialisation missions. Active tier is the threshold for most specialisation programme eligibility.</p>
|
||||
<div class="term-context">
|
||||
<span class="term-context-label">In quiXzoom</span>
|
||||
<p>A part-time Zoomer completes 10 missions/week around their regular job, maintaining a 91% approval rate. At Active tier, they access infrastructure survey missions (€15–20) that are invisible to Supplementary Zoomers, and have applied for the Bridge & Civil specialisation programme.</p>
|
||||
<p>A part-time Zoomer completes 10 missions/week around their regular job, maintaining a 91% approval rate. At Active tier, they access infrastructure survey missions ($15–20) that are invisible to Supplementary Zoomers, and have applied for the Bridge & Civil specialisation programme.</p>
|
||||
</div>
|
||||
<div class="term-related">
|
||||
<span>Related:</span>
|
||||
@@ -2235,5 +2236,234 @@ sections.forEach(s => observer.observe(s));
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- quiXzoom Mina Sidor - Universal Header Component -->
|
||||
<!-- Injicera detta i <head> på alla quiXzoom-sajter -->
|
||||
|
||||
<style>
|
||||
.qz-auth-bar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 48px;
|
||||
background: #0A0A0A;
|
||||
border-bottom: 1px solid rgba(255,255,255,0.1);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 0 20px;
|
||||
z-index: 9999;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Roboto, sans-serif;
|
||||
}
|
||||
.qz-auth-bar .qz-logo {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
letter-spacing: -0.5px;
|
||||
}
|
||||
.qz-auth-bar .qz-logo span {
|
||||
color: #007AFF;
|
||||
}
|
||||
.qz-auth-bar .qz-nav {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
align-items: center;
|
||||
}
|
||||
.qz-auth-bar .qz-btn {
|
||||
padding: 8px 16px;
|
||||
border-radius: 8px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s;
|
||||
border: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
.qz-auth-bar .qz-btn-primary {
|
||||
background: #007AFF;
|
||||
color: white;
|
||||
}
|
||||
.qz-auth-bar .qz-btn-primary:hover {
|
||||
background: #0056CC;
|
||||
}
|
||||
.qz-auth-bar .qz-btn-ghost {
|
||||
background: transparent;
|
||||
color: rgba(255,255,255,0.8);
|
||||
}
|
||||
.qz-auth-bar .qz-btn-ghost:hover {
|
||||
background: rgba(255,255,255,0.1);
|
||||
color: white;
|
||||
}
|
||||
.qz-auth-bar .qz-user {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
color: white;
|
||||
font-size: 14px;
|
||||
}
|
||||
.qz-auth-bar .qz-avatar {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border-radius: 50%;
|
||||
background: #007AFF;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
}
|
||||
.qz-auth-bar .qz-dropdown {
|
||||
position: relative;
|
||||
}
|
||||
.qz-auth-bar .qz-dropdown-menu {
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
right: 0;
|
||||
background: #1C1C1E;
|
||||
border: 1px solid rgba(255,255,255,0.1);
|
||||
border-radius: 12px;
|
||||
padding: 8px;
|
||||
min-width: 200px;
|
||||
display: none;
|
||||
box-shadow: 0 8px 32px rgba(0,0,0,0.4);
|
||||
}
|
||||
.qz-auth-bar .qz-dropdown-menu.active {
|
||||
display: block;
|
||||
}
|
||||
.qz-auth-bar .qz-dropdown-item {
|
||||
padding: 10px 12px;
|
||||
border-radius: 8px;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
font-size: 14px;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
.qz-auth-bar .qz-dropdown-item:hover {
|
||||
background: rgba(255,255,255,0.1);
|
||||
}
|
||||
.qz-auth-bar .qz-dropdown-divider {
|
||||
height: 1px;
|
||||
background: rgba(255,255,255,0.1);
|
||||
margin: 8px 0;
|
||||
}
|
||||
.qz-auth-bar .qz-balance {
|
||||
background: rgba(0,122,255,0.15);
|
||||
color: #007AFF;
|
||||
padding: 4px 10px;
|
||||
border-radius: 6px;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
}
|
||||
@media (max-width: 640px) {
|
||||
.qz-auth-bar .qz-nav .qz-btn-ghost:not(.qz-user) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="qz-auth-bar" class="qz-auth-bar">
|
||||
<a href="https://quixzoom.com" class="qz-logo">qui<span>X</span>zoom</a>
|
||||
<div class="qz-nav">
|
||||
<div id="qz-auth-guest">
|
||||
<a href="https://app.quixzoom.com/login" class="qz-btn qz-btn-ghost">Logga in</a>
|
||||
<a href="https://app.quixzoom.com/register" class="qz-btn qz-btn-primary">Bli Zoomer</a>
|
||||
</div>
|
||||
<div id="qz-auth-user" style="display:none;">
|
||||
<span class="qz-balance" id="qz-balance">$0.00</span>
|
||||
<div class="qz-dropdown">
|
||||
<button class="qz-btn qz-btn-ghost qz-user" onclick="qzToggleDropdown()">
|
||||
<div class="qz-avatar" id="qz-avatar">E</div>
|
||||
<span id="qz-user-name">Erik</span>
|
||||
<svg width="12" height="12" viewBox="0 0 12 12" fill="none"><path d="M2.5 4.5L6 8L9.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
</button>
|
||||
<div class="qz-dropdown-menu" id="qz-dropdown-menu">
|
||||
<a href="https://app.quixzoom.com/dashboard" class="qz-dropdown-item">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/></svg>
|
||||
Dashboard
|
||||
</a>
|
||||
<a href="https://app.quixzoom.com/wallet" class="qz-dropdown-item">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 12V7H5a2 2 0 0 1 0-4h14v4"/><path d="M3 5v14a2 2 0 0 0 2 2h16v-5"/><path d="M18 12a2 2 0 0 0 0 4h4v-4h-4z"/></svg>
|
||||
Plånbok
|
||||
</a>
|
||||
<a href="https://app.quixzoom.com/missions" class="qz-dropdown-item">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2L2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg>
|
||||
Mina uppdrag
|
||||
</a>
|
||||
<div class="qz-dropdown-divider"></div>
|
||||
<a href="https://app.quixzoom.com/settings" class="qz-dropdown-item">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.67 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.67 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.67a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
|
||||
Inställningar
|
||||
</a>
|
||||
<a href="#" onclick="qzLogout(); return false;" class="qz-dropdown-item">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" y1="12" x2="9" y2="12"/></svg>
|
||||
Logga ut
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function() {
|
||||
const SSO_BASE = 'https://auth.quixzoom.com';
|
||||
const APP_BASE = 'https://app.quixzoom.com';
|
||||
|
||||
// Check auth status
|
||||
async function qzCheckAuth() {
|
||||
try {
|
||||
const res = await fetch(SSO_BASE + '/auth/check', {
|
||||
credentials: 'include',
|
||||
});
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
if (data.authenticated) {
|
||||
document.getElementById('qz-auth-guest').style.display = 'none';
|
||||
document.getElementById('qz-auth-user').style.display = 'flex';
|
||||
document.getElementById('qz-user-name').textContent = data.user.name || data.user.email;
|
||||
document.getElementById('qz-avatar').textContent = (data.user.name || data.user.email)[0].toUpperCase();
|
||||
if (data.user.balance !== undefined) {
|
||||
document.getElementById('qz-balance').textContent = '$' + data.user.balance.toFixed(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
// Silent fail - show guest state
|
||||
}
|
||||
}
|
||||
|
||||
// Toggle dropdown
|
||||
window.qzToggleDropdown = function() {
|
||||
document.getElementById('qz-dropdown-menu').classList.toggle('active');
|
||||
};
|
||||
|
||||
// Close dropdown on outside click
|
||||
document.addEventListener('click', function(e) {
|
||||
if (!e.target.closest('.qz-dropdown')) {
|
||||
document.getElementById('qz-dropdown-menu').classList.remove('active');
|
||||
}
|
||||
});
|
||||
|
||||
// Logout
|
||||
window.qzLogout = async function() {
|
||||
try {
|
||||
await fetch(SSO_BASE + '/auth/logout', {
|
||||
method: 'POST',
|
||||
credentials: 'include',
|
||||
});
|
||||
} catch (e) {}
|
||||
document.cookie = 'qz_access_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=.quixzoom.com; path=/;';
|
||||
document.cookie = 'qz_refresh_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=.quixzoom.com; path=/;';
|
||||
window.location.reload();
|
||||
};
|
||||
|
||||
// Init
|
||||
qzCheckAuth();
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user