6989a98d75
- Arkitektur: docs/auth/passwordless-architecture.md - Backend: iom/quixzoom-auth-service/ (FastAPI + Redis) - Webb: quixzoom-market-pages/se/login/ (QR-kod + polling) - App: iom/quixzoom-app/src/features/auth/ (push + deep links) Flöde: QR-kod → app-godkännande → webb-inloggad
1295 lines
57 KiB
HTML
1295 lines
57 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Methodology — How Landvex Works | LandveX</title>
|
||
<meta name="description" content="How Landvex produces physical business intelligence — from global field observation through AI normalization, intelligence scoring, contradiction.">
|
||
<link rel="canonical" href="https://landvex.com/methodology/">
|
||
<meta name="robots" content="index, follow">
|
||
|
||
<!-- Open Graph -->
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:url" content="https://landvex.com/methodology/">
|
||
<meta property="og:title" content="Methodology — How Landvex Works">
|
||
<meta property="og:description" content="From field observation to decision intelligence. How the Landvex pipeline turns physical reality into actionable scores and contradiction reports.">
|
||
<meta property="og:image:width" content="1200">
|
||
<meta property="og:image:height" content="630">
|
||
<meta property="og:image" content="https://landvex.com/og-image.jpg">
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
<meta name="twitter:title" content="How Landvex Works — Methodology">
|
||
<meta name="twitter:description" content="From field observation to decision intelligence. The Landvex pipeline explained.">
|
||
|
||
<!-- Favicons -->
|
||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
||
<link rel="manifest" href="/site.webmanifest">
|
||
|
||
<link rel="stylesheet" href="/assets/css/landvex-complete.css">
|
||
<style>
|
||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||
|
||
:root {
|
||
--bg-dark: #f5f5f7;
|
||
--blue: #0066FF;
|
||
--blue-dark: #0052CC;
|
||
--blue-glow: rgba(0, 102, 255, 0.15);
|
||
--text-dark: #0a0a0a;
|
||
--text-body: #3a3a3a;
|
||
--text-muted: #6B6B6B;
|
||
--text-light: #1d1d1f;
|
||
--text-dim: #6B6B6B;
|
||
--surface: #ffffff;
|
||
--surface-2: #f5f5f7;
|
||
--border: rgba(0,0,0,0.08);
|
||
--radius-sm: 8px;
|
||
--radius-md: 14px;
|
||
--radius-lg: 24px;
|
||
}
|
||
|
||
html { scroll-behavior: smooth; }
|
||
|
||
body {
|
||
font-family: -apple-system, BlinkMacSystemFont, 'Inter', 'Helvetica Neue', sans-serif;
|
||
background: #fff;
|
||
color: var(--text-body);
|
||
line-height: 1.6;
|
||
-webkit-font-smoothing: antialiased;
|
||
}
|
||
|
||
a { color: inherit; text-decoration: none; }
|
||
|
||
/* ── NAV ── */
|
||
nav {
|
||
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
|
||
display: flex; align-items: center; justify-content: space-between;
|
||
padding: 0 40px;
|
||
height: 64px;
|
||
background: rgba(255,255,255,0.92);
|
||
backdrop-filter: blur(16px);
|
||
-webkit-backdrop-filter: blur(16px);
|
||
border-bottom: 1px solid var(--border);
|
||
}
|
||
|
||
.nav-logo {
|
||
font-size: 18px;
|
||
font-weight: 700;
|
||
letter-spacing: -0.3px;
|
||
color: #1d1d1f;
|
||
}
|
||
|
||
.nav-links {
|
||
display: flex; gap: 16px; list-style: none;
|
||
}
|
||
|
||
.nav-links a {
|
||
font-size: 14px;
|
||
color: var(--text-dim);
|
||
transition: color 0.2s;
|
||
}
|
||
.nav-links a:hover { color: #1d1d1f; }
|
||
|
||
.btn {
|
||
display: inline-flex; align-items: center; gap: 16px;
|
||
padding: 24px;
|
||
background: var(--blue);
|
||
color: #1d1d1f;
|
||
font-size: 14px;
|
||
font-weight: 600;
|
||
border-radius: var(--radius-md);
|
||
border: none;
|
||
cursor: pointer;
|
||
transition: background 0.2s, transform 0.15s;
|
||
}
|
||
.btn:hover { background: var(--blue-dark); transform: translateY(-1px); }
|
||
.btn-outline {
|
||
background: transparent;
|
||
border: 1.5px solid rgba(0,0,0,0.18);
|
||
color: var(--text-light);
|
||
}
|
||
.btn-outline:hover { background: rgba(0,0,0,0.04); transform: translateY(-1px); }
|
||
.btn-lg { padding: 24px; font-size: 16px; border-radius: var(--radius-md); }
|
||
|
||
/* ── HERO ── */
|
||
.hero {
|
||
background: var(--bg-dark);
|
||
padding: 24px 96px;
|
||
text-align: center;
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
|
||
/* Dekorativ bakgrund borttagen */
|
||
|
||
.hero-eyebrow { display: inline-flex; align-items: center; gap: 16px; color: #0066ff; font-size: 12px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; padding: 8px 0; }
|
||
|
||
.hero h1 {
|
||
font-size: clamp(38px, 6vw, 68px);
|
||
font-weight: 800;
|
||
letter-spacing: -2px;
|
||
line-height: 1.07;
|
||
color: #1d1d1f;
|
||
max-width: 820px;
|
||
margin: 0 auto 24px;
|
||
}
|
||
|
||
.hero-sub {
|
||
font-size: clamp(16px, 2vw, 19px);
|
||
color: var(--text-dim);
|
||
max-width: 620px;
|
||
line-height: 1.7;
|
||
margin: 0 auto 48px;
|
||
}
|
||
|
||
/* ── PIPELINE OVERVIEW ── */
|
||
.pipeline {
|
||
background: var(--bg-dark);
|
||
padding: 0 24px 80px;
|
||
}
|
||
|
||
.pipeline-inner {
|
||
max-width: 1140px;
|
||
margin: 0 auto;
|
||
display: flex;
|
||
align-items: stretch;
|
||
gap: 0;
|
||
overflow-x: auto;
|
||
}
|
||
|
||
.pipeline-step {
|
||
flex: 1;
|
||
min-width: 160px;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
text-align: center;
|
||
position: relative;
|
||
}
|
||
|
||
.pipeline-step:not(:last-child)::after {
|
||
content: '→';
|
||
position: absolute;
|
||
right: -14px;
|
||
top: 28px;
|
||
font-size: 20px;
|
||
color: rgba(0,102,255,0.5);
|
||
z-index: 1;
|
||
}
|
||
|
||
.pipeline-num {
|
||
width: 56px; height: 56px;
|
||
border-radius: 50%;
|
||
background: rgba(0,102,255,0.1);
|
||
border: 2px solid var(--blue);
|
||
display: flex; align-items: center; justify-content: center;
|
||
font-size: 13px; font-weight: 800;
|
||
color: var(--blue);
|
||
margin-bottom: 24px;
|
||
letter-spacing: 0;
|
||
}
|
||
|
||
.pipeline-step h3 {
|
||
font-size: 13px;
|
||
font-weight: 700;
|
||
color: #1d1d1f;
|
||
letter-spacing: -0.2px;
|
||
line-height: 1.3;
|
||
}
|
||
|
||
/* ── SECTION COMMON ── */
|
||
.container { max-width: 1140px; margin: 0 auto; }
|
||
|
||
.section-label {
|
||
font-size: 12px; font-weight: 700; letter-spacing: 0.1em;
|
||
text-transform: uppercase; color: var(--blue);
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
.section-title {
|
||
font-size: clamp(26px, 3.5vw, 40px);
|
||
font-weight: 800;
|
||
letter-spacing: -1.2px;
|
||
line-height: 1.1;
|
||
color: var(--text-dark);
|
||
margin-bottom: 14px;
|
||
}
|
||
|
||
.section-sub {
|
||
font-size: 17px;
|
||
color: var(--text-muted);
|
||
max-width: 560px;
|
||
line-height: 1.7;
|
||
}
|
||
|
||
/* ── LAYER SECTIONS ── */
|
||
.layer {
|
||
padding: 24px;
|
||
border-bottom: 1px solid #1a1a1a;
|
||
}
|
||
|
||
.layer:nth-child(even) {
|
||
background: #f8f9fc;
|
||
}
|
||
|
||
.layer-inner {
|
||
max-width: 1140px;
|
||
margin: 0 auto;
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 16px;
|
||
align-items: start;
|
||
}
|
||
|
||
.layer-inner.reverse {
|
||
direction: rtl;
|
||
}
|
||
.layer-inner.reverse > * {
|
||
direction: ltr;
|
||
}
|
||
|
||
.layer-header {}
|
||
.layer-header .layer-num {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 16px;
|
||
margin-bottom: 20px;
|
||
}
|
||
|
||
.layer-num-badge {
|
||
width: 36px; height: 36px;
|
||
border-radius: 50%;
|
||
background: var(--blue);
|
||
color: #1d1d1f;
|
||
font-size: 14px;
|
||
font-weight: 800;
|
||
display: flex; align-items: center; justify-content: center;
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
.layer-num-label {
|
||
font-size: 12px;
|
||
font-weight: 700;
|
||
letter-spacing: 0.1em;
|
||
text-transform: uppercase;
|
||
color: var(--blue);
|
||
}
|
||
|
||
.layer-header h2 {
|
||
font-size: clamp(24px, 3vw, 36px);
|
||
font-weight: 800;
|
||
letter-spacing: -1px;
|
||
line-height: 1.1;
|
||
color: var(--text-dark);
|
||
margin-bottom: 14px;
|
||
}
|
||
|
||
.layer-header p {
|
||
font-size: 16px;
|
||
color: var(--text-muted);
|
||
line-height: 1.7;
|
||
}
|
||
|
||
/* ── FEATURE LIST ── */
|
||
.feature-list {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 16px;
|
||
}
|
||
|
||
.feature-item {
|
||
background: #fff;
|
||
border: 1px solid #e8eaf0;
|
||
border-radius: var(--radius-md);
|
||
padding: 24px;
|
||
display: flex;
|
||
gap: 16px;
|
||
align-items: flex-start;
|
||
transition: border-color 0.2s, box-shadow 0.2s;
|
||
}
|
||
|
||
.layer:nth-child(even) .feature-item {
|
||
background: #fff;
|
||
}
|
||
|
||
.feature-item:hover {
|
||
border-color: rgba(0,102,255,0.25);
|
||
box-shadow: 0 4px 20px rgba(0,102,255,0.06);
|
||
}
|
||
|
||
.feature-icon {
|
||
width: 36px; height: 36px;
|
||
background: rgba(0,102,255,0.08);
|
||
border-radius: var(--radius-sm);
|
||
display: flex; align-items: center; justify-content: center;
|
||
font-size: 18px;
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
.feature-item h4 {
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
color: var(--text-dark);
|
||
margin-bottom: 4px;
|
||
letter-spacing: -0.2px;
|
||
}
|
||
|
||
.feature-item p {
|
||
font-size: 14px;
|
||
color: var(--text-muted);
|
||
line-height: 1.55;
|
||
}
|
||
|
||
/* ── OUTPUT SECTION ── */
|
||
.output-section {
|
||
background: var(--bg-dark);
|
||
padding: 24px;
|
||
}
|
||
|
||
.output-header {
|
||
text-align: center;
|
||
margin-bottom: 60px;
|
||
}
|
||
|
||
.output-header .section-title { color: #1d1d1f; }
|
||
.output-header .section-sub { color: var(--text-dim); margin: 0 auto; }
|
||
|
||
.output-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(3, 1fr);
|
||
gap: 16px;
|
||
max-width: 1140px;
|
||
margin: 0 auto;
|
||
}
|
||
|
||
.output-card {
|
||
background: var(--surface);
|
||
border: 1px solid var(--border);
|
||
border-radius: var(--radius-lg);
|
||
padding: 24px;
|
||
transition: border-color 0.25s, transform 0.2s;
|
||
}
|
||
|
||
.output-card:hover {
|
||
border-color: rgba(0,102,255,0.35);
|
||
transform: translateY(-3px);
|
||
}
|
||
|
||
.output-icon {
|
||
width: 44px; height: 44px;
|
||
background: var(--blue-glow);
|
||
border: 1px solid rgba(0,102,255,0.25);
|
||
border-radius: var(--radius-md);
|
||
display: flex; align-items: center; justify-content: center;
|
||
font-size: 20px;
|
||
margin-bottom: 18px;
|
||
}
|
||
|
||
.output-card h3 {
|
||
font-size: 17px;
|
||
font-weight: 700;
|
||
color: #1d1d1f;
|
||
margin-bottom: 8px;
|
||
letter-spacing: -0.3px;
|
||
}
|
||
|
||
.output-card p {
|
||
font-size: 14px;
|
||
color: var(--text-dim);
|
||
line-height: 1.6;
|
||
}
|
||
|
||
.output-card .cite-note {
|
||
margin-top: 14px;
|
||
padding-top: 14px;
|
||
border-top: 1px solid var(--border);
|
||
font-size: 12px;
|
||
color: rgba(255,255,255,0.75);
|
||
font-style: italic;
|
||
}
|
||
|
||
/* ── DIMENSIONS BAND ── */
|
||
.dimensions-band {
|
||
background: #e8f0fe;
|
||
padding: 24px;
|
||
}
|
||
|
||
.dimensions-inner {
|
||
max-width: 1140px;
|
||
margin: 0 auto;
|
||
}
|
||
|
||
.dimensions-header {
|
||
text-align: center;
|
||
margin-bottom: 48px;
|
||
}
|
||
|
||
.dimensions-header .section-title { color: #1d1d1f; }
|
||
.dimensions-header .section-sub { color: rgba(255,255,255,0.75); margin: 0 auto; }
|
||
|
||
.dimensions-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(6, 1fr);
|
||
gap: 16px;
|
||
}
|
||
|
||
.dim-card {
|
||
background: rgba(0,0,0,0.03);
|
||
border: 1px solid rgba(0,0,0,0.09);
|
||
border-radius: var(--radius-md);
|
||
padding: 24px;
|
||
text-align: center;
|
||
transition: background 0.2s, border-color 0.2s;
|
||
}
|
||
|
||
.dim-card:hover {
|
||
background: rgba(0,102,255,0.1);
|
||
border-color: rgba(0,102,255,0.3);
|
||
}
|
||
|
||
.dim-icon { font-size: 24px; margin-bottom: 10px; }
|
||
.dim-name { font-size: 13px; font-weight: 700; color: #1d1d1f; line-height: 1.3; }
|
||
.dim-scale { font-size: 11px; color: rgba(255,255,255,0.75); margin-top: 4px; }
|
||
|
||
/* ── CTA BAND ── */
|
||
.cta-band {
|
||
background: var(--blue);
|
||
padding: 24px;
|
||
text-align: center;
|
||
}
|
||
|
||
.cta-band h2 {
|
||
font-size: clamp(26px, 4vw, 42px);
|
||
font-weight: 800;
|
||
letter-spacing: -1.2px;
|
||
color: #1d1d1f;
|
||
margin-bottom: 14px;
|
||
}
|
||
|
||
.cta-band p {
|
||
font-size: 18px;
|
||
color: rgba(0,0,0,0.8);
|
||
margin-bottom: 36px;
|
||
max-width: 560px;
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
}
|
||
|
||
.btn-white {
|
||
background: #fff;
|
||
color: var(--blue);
|
||
font-weight: 700;
|
||
}
|
||
.btn-white:hover {
|
||
background: rgba(0,0,0,0.92);
|
||
transform: translateY(-1px);
|
||
}
|
||
|
||
/* ── FOOTER ── */
|
||
footer {
|
||
background: var(--bg-dark);
|
||
border-top: 1px solid var(--border);
|
||
padding: 24px;
|
||
}
|
||
|
||
.footer-inner {
|
||
max-width: 1140px; margin: 0 auto;
|
||
display: flex; align-items: center; justify-content: space-between;
|
||
flex-wrap: wrap; gap: 16px;
|
||
}
|
||
|
||
.footer-logo { font-size: 17px; font-weight: 700; color: #1d1d1f; }
|
||
.footer-copy { font-size: 13px; color: var(--text-muted); }
|
||
|
||
.footer-links { display: flex; gap: 16px; align-items: center; }
|
||
.footer-links a { font-size: 14px; color: var(--text-muted); transition: color 0.2s; }
|
||
.footer-links a:hover { color: #1d1d1f; }
|
||
|
||
.footer-social {
|
||
width: 32px; height: 32px;
|
||
border: 1px solid var(--border);
|
||
border-radius: 8px;
|
||
display: flex; align-items: center; justify-content: center;
|
||
transition: border-color 0.2s, background 0.2s;
|
||
}
|
||
.footer-social:hover { border-color: rgba(0,0,0,0.25); background: rgba(0,0,0,0.04); }
|
||
.footer-tagline { font-size: 12px; color: var(--text-muted); margin-top: 4px; }
|
||
|
||
/* ── PDF DOWNLOAD BUTTON ── */
|
||
.pdf-download-btn {
|
||
display: inline-flex; align-items: center; gap: 16px;
|
||
background: rgba(0,0,0,0.08);
|
||
border: 1.5px solid rgba(0,0,0,0.2);
|
||
color: #1d1d1f;
|
||
font-size: 14px; font-weight: 600;
|
||
padding: 24px;
|
||
border-radius: var(--radius-md);
|
||
margin-top: 20px;
|
||
transition: background 0.2s, border-color 0.2s, transform 0.15s;
|
||
cursor: pointer;
|
||
}
|
||
.pdf-download-btn:hover {
|
||
background: rgba(0,0,0,0.14);
|
||
border-color: rgba(0,0,0,0.35);
|
||
transform: translateY(-1px);
|
||
}
|
||
.pdf-download-btn svg { flex-shrink: 0; }
|
||
|
||
/* ── DATA QUALITY ── */
|
||
.dq-section { background: #f8f9fc; padding: 24px; }
|
||
.dq-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 48px; }
|
||
.dq-card {
|
||
background: #fff;
|
||
border: 1px solid #e0e6f0;
|
||
border-radius: var(--radius-lg);
|
||
padding: 24px;
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
.dq-card::before {
|
||
content: '';
|
||
position: absolute; top: 0; left: 0; right: 0;
|
||
height: 3px; background: var(--blue);
|
||
}
|
||
.dq-card-icon { margin-bottom: 18px; }
|
||
.dq-card h3 { font-size: 18px; font-weight: 800; color: #0a0a0a; margin-bottom: 10px; letter-spacing: -0.3px; }
|
||
.dq-card p { font-size: 14px; color: #555; line-height: 1.65; margin-bottom: 24px; }
|
||
.dq-standards { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 16px; }
|
||
.dq-standards li {
|
||
display: flex; align-items: flex-start; gap: 16px;
|
||
font-size: 13px; color: #444; line-height: 1.5;
|
||
}
|
||
.dq-standards li::before {
|
||
content: '';
|
||
width: 6px; height: 6px; border-radius: 50%;
|
||
background: var(--blue); flex-shrink: 0; margin-top: 6px;
|
||
}
|
||
|
||
/* ── CONTRADICTION FLOW DIAGRAM ── */
|
||
.flow-section { background: #f5f5f7; padding: 24px; }
|
||
.flow-diagram {
|
||
max-width: 820px; margin: 56px auto 0;
|
||
display: flex; flex-direction: column; align-items: center; gap: 0;
|
||
}
|
||
.flow-node {
|
||
width: 100%; max-width: 540px;
|
||
background: var(--surface); border: 1px solid var(--border);
|
||
border-radius: var(--radius-md); padding: 24px;
|
||
display: flex; align-items: center; gap: 16px;
|
||
}
|
||
.flow-node.flow-trigger { border-color: rgba(0,102,255,0.4); background: rgba(0,102,255,0.07); }
|
||
.flow-node.flow-detect { border-color: rgba(245,158,11,0.4); background: rgba(245,158,11,0.06); }
|
||
.flow-node.flow-rank { border-color: rgba(239,68,68,0.35); background: rgba(239,68,68,0.06); }
|
||
.flow-node.flow-redteam { border-color: rgba(139,92,246,0.4); background: rgba(139,92,246,0.07); }
|
||
.flow-node.flow-output { border-color: rgba(34,197,94,0.4); background: rgba(34,197,94,0.07); }
|
||
.flow-node-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
|
||
.flow-node-text h4 { font-size: 14px; font-weight: 700; color: #1d1d1f; margin-bottom: 3px; }
|
||
.flow-node-text p { font-size: 12px; color: rgba(255,255,255,0.75); line-height: 1.5; }
|
||
.flow-arrow { display: flex; align-items: center; justify-content: center; height: 32px; }
|
||
.flow-arrow svg { opacity: 0.4; }
|
||
.flow-split {
|
||
display: grid; grid-template-columns: 1fr 1fr; gap: 16px;
|
||
width: 100%; max-width: 540px; margin: 0;
|
||
}
|
||
.flow-split .flow-node { max-width: 100%; }
|
||
.flow-split-arrow { display: flex; align-items: center; justify-content: center; height: 32px; position: relative; width: 100%; max-width: 540px; }
|
||
.flow-split-arrow::before, .flow-split-arrow::after {
|
||
content: '';
|
||
position: absolute; top: 50%; width: 25%;
|
||
height: 1px; background: rgba(0,0,0,0.15);
|
||
}
|
||
.flow-split-arrow::before { right: calc(50% + 8px); }
|
||
.flow-split-arrow::after { left: calc(50% + 8px); }
|
||
|
||
/* ── RESPONSIVE ── */
|
||
@media (max-width: 900px) {
|
||
nav { padding: 0 20px; }
|
||
.nav-links { display: none; }
|
||
.layer-inner { grid-template-columns: 1fr; gap: 16px; }
|
||
.layer-inner.reverse { direction: ltr; }
|
||
.output-grid { grid-template-columns: 1fr 1fr; }
|
||
.dimensions-grid { grid-template-columns: repeat(3, 1fr); }
|
||
.pipeline-inner { gap: 16px; }
|
||
}
|
||
|
||
@media (max-width: 600px) {
|
||
.hero { padding: 24px 72px; }
|
||
.layer { padding: 24px; }
|
||
.output-grid { grid-template-columns: 1fr; }
|
||
.dimensions-grid { grid-template-columns: repeat(2, 1fr); }
|
||
.footer-inner { flex-direction: column; text-align: center; }
|
||
.pipeline-step:not(:last-child)::after { display: none; }
|
||
.container { padding: 0 16px !important; box-sizing: border-box; }
|
||
.pipeline-inner { padding: 0 4px; }
|
||
}
|
||
</style>
|
||
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "BreadcrumbList",
|
||
"itemListElement": [
|
||
{
|
||
"@type": "ListItem",
|
||
"position": 1,
|
||
"name": "Landvex",
|
||
"item": "https://landvex.com/"
|
||
},
|
||
{
|
||
"@type": "ListItem",
|
||
"position": 2,
|
||
"name": "Methodology",
|
||
"item": "https://landvex.com/methodology/"
|
||
}
|
||
]
|
||
}
|
||
</script>
|
||
<link rel="alternate" hreflang="x-default" href="https://landvex.com/">
|
||
<link rel="alternate" hreflang="en" href="https://landvex.com/">
|
||
<link rel="alternate" hreflang="sv" href="https://landvex.se/">
|
||
<link rel="alternate" hreflang="de" href="https://landvex.de/">
|
||
<link rel="alternate" hreflang="fr" href="https://landvex.fr/">
|
||
<link rel="alternate" hreflang="en-GB" href="https://landvex.co.uk/">
|
||
<link rel="alternate" hreflang="it" href="https://landvex.it/">
|
||
<style>
|
||
@media (max-width: 640px) {
|
||
.hero h1 { font-size: 2rem !important; }
|
||
.hero p { font-size: 1rem !important; }
|
||
.card { padding: 1.5rem !important; }
|
||
.grid { grid-template-columns: 1fr !important; }
|
||
.btn { padding: 0.75rem 1.5rem !important; font-size: 1rem !important; }
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<nav aria-label="breadcrumb" aria-label="Main navigation">
|
||
<a href="/" >Home</a> / <span>methodology</span>
|
||
</nav>
|
||
|
||
<!-- NAV -->
|
||
<nav aria-label="Main navigation">
|
||
<a class="nav-logo" href="/">LandveX</a>
|
||
<ul class="nav-links">
|
||
<li><a href="/">Home</a></li>
|
||
<li><a href="/#how-it-works">How it works</a></li>
|
||
<li><a href="https://landvex.com/#contact">Contact</a></li>
|
||
</ul>
|
||
<a class="lv-btn lv-btn--outline" href="https://landvex.com/#contact">Get in touch →</a>
|
||
</nav>
|
||
|
||
<!-- HERO -->
|
||
<section class="lv-hero">
|
||
<div class="lv-hero-eyebrow">Methodology</div>
|
||
<h1>How Landvex works.</h1>
|
||
<div><strong>Pre-launch:</strong> All methodology documentation describes the system as designed for August 2026 launch. No live intelligence is being generated or sold at this time.</div>
|
||
<p class="lv-hero-subtitle">Five interlocked layers — from global field observation to verified intelligence. Every output is sourced, explained, and challenged before delivery.</p>
|
||
<div>
|
||
<a class="lv-btn lv-btn--lg" href="https://landvex.com/#contact">Request a briefing →</a>
|
||
<a class="pdf-download-btn" href="/methodology/landvex-methodology-2026.pdf">
|
||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
|
||
Download methodology PDF →
|
||
</a>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- PIPELINE OVERVIEW -->
|
||
<section class="pipeline">
|
||
<div class="pipeline-inner">
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-num">01</div>
|
||
<h3>Observation<br>Layer</h3>
|
||
</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-num">02</div>
|
||
<h3>Normalization<br>Layer</h3>
|
||
</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-num">03</div>
|
||
<h3>Intelligence<br>Layer</h3>
|
||
</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-num">04</div>
|
||
<h3>Contradiction<br>Engine</h3>
|
||
</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-num">05</div>
|
||
<h3>Red Team<br>Analysis</h3>
|
||
</div>
|
||
<div class="pipeline-step">
|
||
<div class="pipeline-num">✓</div>
|
||
<h3>Verified<br>Output</h3>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
|
||
<!-- PDF DOWNLOAD BLOCK -->
|
||
<section>
|
||
<div>
|
||
<div>
|
||
<div>
|
||
<h3>Landvex Intelligence Methodology</h3>
|
||
<p>8-page technical overview. How field observations become decision intelligence.</p>
|
||
</div>
|
||
<a href="/methodology/landvex-methodology-2026.pdf" >
|
||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
|
||
Download PDF
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- LAYER 1: OBSERVATION -->
|
||
<section class="layer" id="observation">
|
||
<div class="layer-inner">
|
||
<div class="layer-header">
|
||
<div class="layer-num">
|
||
<div class="layer-num-badge">1</div>
|
||
<span class="layer-num-label">Observation Layer</span>
|
||
</div>
|
||
<h2>Eyes on the ground.<br>At global scale.</h2>
|
||
<p>Every Landvex intelligence product begins with physical observation. The quiXzoom contributor network gives us human eyes across more than 20 countries — not cameras, not satellites, but verified people on the ground documenting what is actually there.</p>
|
||
</div>
|
||
<div class="feature-list">
|
||
<div class="feature-item">
|
||
<div class="feature-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></div>
|
||
<div>
|
||
<h4>quiXzoom global contributor network</h4>
|
||
<p>Thousands of active field contributors across 20+ countries, deployable within hours to any target area. Local knowledge combined with structured data collection.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M9 9h6v6H9z"/><path d="M9 1v2M15 1v2M9 21v2M15 21v2M20 9h2M20 15h2M2 9h2M2 15h2"/></svg></div>
|
||
<div>
|
||
<h4>AI-reviewed submissions</h4>
|
||
<p>Every submission is automatically reviewed for geographic accuracy, image quality, and specification compliance before it enters the pipeline. No human bias in the review gate.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="9" cy="10" r="2"/><path d="M15 8h2M15 12h2"/><path d="M7 16h10"/></svg></div>
|
||
<div>
|
||
<h4>Verified field agents, identity-verified once</h4>
|
||
<p>Every contributor completes a one-time identity verification. Verified status persists across all missions. Verification creates accountability and trace integrity for every observation.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><polygon points="1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6"/><line x1="8" y1="2" x2="8" y2="18"/><line x1="16" y1="6" x2="16" y2="22"/></svg></div>
|
||
<div>
|
||
<h4>Coverage: 20+ countries at launch</h4>
|
||
<p>Europe, Southeast Asia, and growing. Coverage expands continuously as the quiXzoom network scales. New markets are opened on request.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- LAYER 2: NORMALIZATION -->
|
||
<section class="layer" id="normalization">
|
||
<div class="layer-inner reverse">
|
||
<div class="layer-header">
|
||
<div class="layer-num">
|
||
<div class="layer-num-badge">2</div>
|
||
<span class="layer-num-label">Normalization Layer</span>
|
||
</div>
|
||
<h2>Raw observation becomes<br>structured data.</h2>
|
||
<p>Field observations arrive in different formats, from different contributors, across different contexts. The normalization layer converts everything into a consistent, comparable structured data point — stripping noise while preserving source integrity.</p>
|
||
</div>
|
||
<div class="feature-list">
|
||
<div class="feature-item">
|
||
<div class="feature-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M21.21 15.89A10 10 0 1 1 8 2.83"/><path d="M22 12A10 10 0 0 0 12 2v10z"/></svg></div>
|
||
<div>
|
||
<h4>Every observation converted to a structured data point</h4>
|
||
<p>Unstructured field submissions are parsed into typed, schema-validated records. Location, object, condition, and change signal are extracted and stored independently.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.35-4.35"/></svg></div>
|
||
<div>
|
||
<h4>Entity extraction: location, object type, condition, change signal</h4>
|
||
<p>Each data point is tagged with what was observed, where, in what condition, and whether it represents a change from the prior state — the four axes of physical intelligence.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg></div>
|
||
<div>
|
||
<h4>Temporal indexing: every observation timestamped and versioned</h4>
|
||
<p>Every data point is stored with a precise timestamp and version history. This enables change detection, trend analysis, and before/after comparisons at any granularity.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></div>
|
||
<div>
|
||
<h4>Source attribution maintained throughout</h4>
|
||
<p>Every data point retains a full audit trail back to the field submission, the contributor, the timestamp, and the mission brief. Nothing is anonymized into oblivion.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- DIMENSIONS BAND -->
|
||
<div class="dimensions-band">
|
||
<div class="dimensions-inner">
|
||
<div class="dimensions-header">
|
||
<div class="section-label">Six scoring dimensions</div>
|
||
<h2 class="section-title">Every place scored on six axes.</h2>
|
||
<p class="section-sub">Observations aggregate into district, city, and regional scores across six dimensions — all on a 0–100 scale, all updated continuously from August 2026.</p>
|
||
</div>
|
||
<div class="dimensions-grid">
|
||
<div class="dim-card" onclick="location.href='#intelligence'" role="button" tabindex="0">
|
||
<div class="dim-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M9 18h6"/><path d="M10 22h4"/><path d="M12 2v1"/><path d="M12 7a5 5 0 0 1 5 5c0 2.5-2 4-2 6H9c0-2-2-3.5-2-6a5 5 0 0 1 5-5z"/></svg></div>
|
||
<div class="dim-name">Opportunity</div>
|
||
<div class="dim-scale">0–100</div>
|
||
</div>
|
||
<div class="dim-card" onclick="location.href='#intelligence'" role="button" tabindex="0">
|
||
<div class="dim-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="m22 7-8.5 8.5-5-5L2 17"/><path d="M16 7h6v6"/></svg></div>
|
||
<div class="dim-name">Growth</div>
|
||
<div class="dim-scale">0–100</div>
|
||
</div>
|
||
<div class="dim-card" onclick="location.href='#intelligence'" role="button" tabindex="0">
|
||
<div class="dim-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg></div>
|
||
<div class="dim-name">Commercial Vitality</div>
|
||
<div class="dim-scale">0–100</div>
|
||
</div>
|
||
<div class="dim-card" onclick="location.href='#intelligence'" role="button" tabindex="0">
|
||
<div class="dim-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg></div>
|
||
<div class="dim-name">Infrastructure Stability</div>
|
||
<div class="dim-scale">0–100</div>
|
||
</div>
|
||
<div class="dim-card" onclick="location.href='#intelligence'" role="button" tabindex="0">
|
||
<div class="dim-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M2 12h20"/><path d="M13 2v20"/><path d="M21 12a9 9 0 0 1-9 9"/><path d="M3 12a9 9 0 0 0 9-9"/></svg></div>
|
||
<div class="dim-name">Tourism Potential</div>
|
||
<div class="dim-scale">0–100</div>
|
||
</div>
|
||
<div class="dim-card" onclick="location.href='#intelligence'" role="button" tabindex="0">
|
||
<div class="dim-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M6 3h12l4 6-10 13L2 9z"/><path d="M11 3 8 9l4 13 4-13-3-6"/><path d="M2 9h20"/></svg></div>
|
||
<div class="dim-name">Investment Confidence</div>
|
||
<div class="dim-scale">0–100</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- LAYER 3: INTELLIGENCE -->
|
||
<section class="layer" id="intelligence">
|
||
<div class="layer-inner">
|
||
<div class="layer-header">
|
||
<div class="layer-num">
|
||
<div class="layer-num-badge">3</div>
|
||
<span class="layer-num-label">Intelligence Layer</span>
|
||
</div>
|
||
<h2>Observations aggregate<br>into scores.</h2>
|
||
<p>Individual data points are aggregated into district, city, and regional intelligence scores. Scores are updated continuously as new observations arrive — not quarterly, not annually. The physical world changes in real time; the intelligence layer follows it.</p>
|
||
</div>
|
||
<div class="feature-list">
|
||
<div class="feature-item">
|
||
<div class="feature-icon">🏙️</div>
|
||
<div>
|
||
<h4>Observations aggregated into district / city / region scores</h4>
|
||
<p>Multiple observations from multiple contributors covering the same area are weighted, de-duplicated, and aggregated into a single composite score per dimension per area.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon">🔄</div>
|
||
<div>
|
||
<h4>Scores updated continuously as new observations arrive</h4>
|
||
<p>There is no batch cadence. Every validated observation triggers a score recalculation for the relevant area. Intelligence is always as fresh as the most recent field data.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M18 20V10"/><path d="M12 20V4"/><path d="M6 20v-6"/></svg></div>
|
||
<div>
|
||
<h4>Six dimensions, one comparable scale</h4>
|
||
<p>Opportunity · Growth · Commercial Vitality · Infrastructure Stability · Tourism Potential · Investment Confidence. Bangkok vs Kuala Lumpur vs Milan — on the same axes, the same scale.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- LAYER 4: CONTRADICTION ENGINE -->
|
||
<section class="layer" id="contradiction">
|
||
<div class="layer-inner">
|
||
<div class="layer-header">
|
||
<div class="layer-num">
|
||
<div class="layer-num-badge">4</div>
|
||
<span class="layer-num-label">Contradiction Engine</span>
|
||
</div>
|
||
<h2>Official data vs.<br>observed reality.</h2>
|
||
<p>The most valuable intelligence is not confirmation — it is contradiction. The Contradiction Engine ingests official data sources and actively searches for conflicts with what our contributors actually observed. When the data says one thing and the ground says another, that is where the intelligence lives.</p>
|
||
</div>
|
||
<div class="feature-list">
|
||
<div class="feature-item">
|
||
<div class="feature-icon">🏛️</div>
|
||
<div>
|
||
<h4>Official data ingested continuously</h4>
|
||
<p>National statistics, municipal open data, land registries, and transport authorities are continuously ingested and indexed against covered geographies.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon">⚖️</div>
|
||
<div>
|
||
<h4>Every official claim compared against observed reality</h4>
|
||
<p>For every official data point covering an area with observation coverage, the Contradiction Engine runs an automated comparison. Supporting evidence and contradicting evidence are catalogued separately.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon">🚩</div>
|
||
<div>
|
||
<h4>Contradictions flagged, ranked by severity and economic impact</h4>
|
||
<p>Not all contradictions are equal. The engine ranks flagged conflicts by how severe the discrepancy is, and by the estimated economic significance of the affected area or asset class.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M21.21 15.89A10 10 0 1 1 8 2.83"/><path d="M22 12A10 10 0 0 0 12 2v10z"/></svg></div>
|
||
<div>
|
||
<h4>Confidence scores from evidence weight</h4>
|
||
<p>Every contradiction report includes a confidence score calculated from the volume, recency, and source diversity of the supporting and contradicting evidence.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- LAYER 5: RED TEAM -->
|
||
<section class="layer" id="redteam">
|
||
<div class="layer-inner reverse">
|
||
<div class="layer-header">
|
||
<div class="layer-num">
|
||
<div class="layer-num-badge">5</div>
|
||
<span class="layer-num-label">Red Team Analysis</span>
|
||
</div>
|
||
<h2>Every conclusion<br>challenged before delivery.</h2>
|
||
<p>Before any major conclusion reaches a client, a second AI model actively attempts to disprove it. This is not a review — it is an adversarial process. If the conclusion survives, it is delivered. If it doesn't, it is revised or flagged.</p>
|
||
</div>
|
||
<div class="feature-list">
|
||
<div class="feature-item">
|
||
<div class="feature-icon">⚔️</div>
|
||
<div>
|
||
<h4>Every major conclusion challenged by a second model</h4>
|
||
<p>The primary analysis model produces a conclusion. A separate red team model, given the same evidence, is tasked with finding holes, alternative explanations, and disconfirming observations. The conclusion is only finalized after this adversarial review.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#00C853" stroke-width="3"><path d="M20 6L9 17l-5-5"/></svg></div>
|
||
<div>
|
||
<h4>Supporting evidence listed</h4>
|
||
<p>Every delivered conclusion includes a full list of the observations, data points, and sources that support it — with source attribution and timestamps. Clients see what the conclusion is based on.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon">⛔</div>
|
||
<div>
|
||
<h4>Contradicting evidence listed</h4>
|
||
<p>Contradicting evidence is not suppressed. Every conclusion is delivered alongside the evidence that pushed against it. Where the red team found weaknesses, those are explicitly documented.</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature-item">
|
||
<div class="feature-icon">📏</div>
|
||
<div>
|
||
<h4>Uncertainty quantified</h4>
|
||
<p>Confidence levels are expressed numerically, not as qualitative hedges. Clients know not just what Landvex concludes, but how certain that conclusion is and why.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- OUTPUT SECTION -->
|
||
<section class="output-section" id="output">
|
||
<div class="output-header">
|
||
<div class="section-label">Output</div>
|
||
<h2 class="section-title">What Landvex delivers.</h2>
|
||
<p class="section-sub">Six output types. All sourced. All explained. All ready for decisions that cost money.</p>
|
||
</div>
|
||
<div class="output-grid">
|
||
<div class="output-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="output-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M18 20V10"/><path d="M12 20V4"/><path d="M6 20v-6"/></svg></div>
|
||
<h3>Scores (0–100 per dimension)</h3>
|
||
<p>Composite intelligence scores per location, across six dimensions. Updated continuously from August 2026. Comparable across geographies and over time.</p>
|
||
<div class="cite-note">Every score cites contributing observations and source data.</div>
|
||
</div>
|
||
<div class="output-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="output-icon">🚩</div>
|
||
<h3>Contradiction Reports</h3>
|
||
<p>Where observed reality conflicts with official data or investment thesis. Ranked by severity and economic significance. Evidence on both sides included.</p>
|
||
<div class="cite-note">Includes confidence score and source breakdown.</div>
|
||
</div>
|
||
<div class="output-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="output-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M9 18h6"/><path d="M10 22h4"/><path d="M12 2v1"/><path d="M12 7a5 5 0 0 1 5 5c0 2.5-2 4-2 6H9c0-2-2-3.5-2-6a5 5 0 0 1 5-5z"/></svg></div>
|
||
<h3>Opportunity Reports</h3>
|
||
<p>Where physical conditions signal under-exploited potential. Targeted by geography, asset class, or decision type. Ranked by opportunity magnitude.</p>
|
||
<div class="cite-note">Field observations and trend data cited throughout.</div>
|
||
</div>
|
||
<div class="output-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="output-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg></div>
|
||
<h3>Risk Forecasts</h3>
|
||
<p>Where physical conditions signal emerging risk — before it appears in official statistics or financial reporting. Predictive scoring based on observed change velocity.</p>
|
||
<div class="cite-note">Uncertainty ranges included with every forecast.</div>
|
||
</div>
|
||
<div class="output-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="output-icon">📝</div>
|
||
<h3>Executive Summaries</h3>
|
||
<p>Decision-ready narratives structured around the client's specific question — not generic reports. Concise, direct, and directly linked to the decision being made.</p>
|
||
<div class="cite-note">Supporting data attached; key sources highlighted.</div>
|
||
</div>
|
||
<div class="output-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="output-icon">📌</div>
|
||
<h3>All outputs cite sources<br>and explain reasoning</h3>
|
||
<p>There is no black box. Every Landvex output tells you what it concluded, what it was based on, what pushed against it, and how confident the conclusion is.</p>
|
||
<div class="cite-note">Because intelligence you can't verify is just opinion.</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- DATA QUALITY SECTION -->
|
||
<section class="dq-section" id="data-quality">
|
||
<div class="lv-container">
|
||
<div class="section-label">Data quality</div>
|
||
<h2 class="section-title">The standards behind every score.</h2>
|
||
<p class="section-sub">Intelligence is only as good as the data it is built from. Every observation in the Landvex pipeline is subject to explicit accuracy standards, a documented verification chain, and a confidence scoring system.</p>
|
||
<div class="dq-grid">
|
||
<div class="dq-card" onclick="location.href='#data-quality'" role="button" tabindex="0">
|
||
<div class="dq-card-icon" onclick="location.href='#data-quality'" role="button" tabindex="0">
|
||
<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
|
||
</div>
|
||
<h3>Accuracy standards</h3>
|
||
<p>Every field observation is held to explicit accuracy requirements before it is admitted into the pipeline. Rejection rates are tracked and published internally as quality metrics.</p>
|
||
<ul class="dq-standards">
|
||
<li>Geo-location verified against reported coordinates</li>
|
||
<li>Photograph metadata validated (device, timestamp, GPS)</li>
|
||
<li>Submission reviewed by AI against mission brief</li>
|
||
<li>Duplicate detection across concurrent contributors</li>
|
||
<li>Outlier flagging when observation deviates significantly from area baseline</li>
|
||
</ul>
|
||
</div>
|
||
<div class="dq-card" onclick="location.href='#data-quality'" role="button" tabindex="0">
|
||
<div class="dq-card-icon" onclick="location.href='#data-quality'" role="button" tabindex="0">
|
||
<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg>
|
||
</div>
|
||
<h3>Verification chain</h3>
|
||
<p>Every observation has a complete audit trail. From contributor identity through submission review to final score contribution, every step is logged and immutable.</p>
|
||
<ul class="dq-standards">
|
||
<li>Contributor identity verified once, applied to all submissions</li>
|
||
<li>Submission hash logged at ingestion (tamper detection)</li>
|
||
<li>Review decision and reviewer logged with timestamp</li>
|
||
<li>Score contribution traceable back to source observations</li>
|
||
<li>Contradiction reports include full evidence chain on both sides</li>
|
||
</ul>
|
||
</div>
|
||
<div class="dq-card" onclick="location.href='#data-quality'" role="button" tabindex="0">
|
||
<div class="dq-card-icon" onclick="location.href='#data-quality'" role="button" tabindex="0">
|
||
<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="20" x2="18" y2="10"/><line x1="12" y1="20" x2="12" y2="4"/><line x1="6" y1="20" x2="6" y2="14"/></svg>
|
||
</div>
|
||
<h3>Confidence scoring</h3>
|
||
<p>Every score, conclusion, and contradiction report carries a numerical confidence value. Confidence is calculated from evidence volume, recency, and source diversity — not subjective assessment.</p>
|
||
<ul class="dq-standards">
|
||
<li>Volume factor: more observations → higher confidence</li>
|
||
<li>Recency factor: older data decays on configurable half-life</li>
|
||
<li>Diversity factor: independent sources weighted above correlated ones</li>
|
||
<li>Contradiction penalty: conflicting evidence reduces confidence proportionally</li>
|
||
<li>All confidence values expressed numerically (0–100)</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- CONTRADICTION FLOW DIAGRAM -->
|
||
<section class="flow-section" id="contradiction-flow">
|
||
<div class="lv-container">
|
||
<div class="lv-text-center">
|
||
<div class="section-label">Contradiction Engine</div>
|
||
<h2 class="section-title">How we detect contradictions.</h2>
|
||
<p class="section-sub">A six-step pipeline that runs continuously against every area with active observation coverage. When official data and observed reality disagree, this is what happens.</p>
|
||
</div>
|
||
|
||
<div class="flow-diagram">
|
||
<!-- Step 1 -->
|
||
<div class="flow-node flow-trigger">
|
||
<div class="flow-node-icon">
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#5599ff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" y1="3" x2="12" y2="15"/></svg>
|
||
</div>
|
||
<div class="flow-node-text">
|
||
<h4>1. New field observations ingested</h4>
|
||
<p>Validated submissions enter the pipeline, tagged with location, object type, condition, and change signal</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="flow-arrow">
|
||
<svg width="16" height="24" viewBox="0 0 16 24" fill="none"><path d="M8 0v20M2 14l6 8 6-8" stroke="rgba(0,0,0,0.3)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||
</div>
|
||
|
||
<!-- Step 2 -->
|
||
<div class="flow-node">
|
||
<div class="flow-node-icon">
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#888" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
|
||
</div>
|
||
<div class="flow-node-text">
|
||
<h4>2. Official data sources queried for same geography</h4>
|
||
<p>National statistics, municipal open data, land registries, and permit databases are checked for the affected area</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="flow-arrow">
|
||
<svg width="16" height="24" viewBox="0 0 16 24" fill="none"><path d="M8 0v20M2 14l6 8 6-8" stroke="rgba(0,0,0,0.3)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||
</div>
|
||
|
||
<!-- Step 3 -->
|
||
<div class="flow-node flow-detect">
|
||
<div class="flow-node-icon">
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#fbbf24" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
|
||
</div>
|
||
<div class="flow-node-text">
|
||
<h4>3. Contradiction detection: observed vs. official</h4>
|
||
<p>AI model compares observed conditions against official claims on matching dimensions (vacancy, activity, condition, growth)</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="flow-arrow">
|
||
<svg width="16" height="24" viewBox="0 0 16 24" fill="none"><path d="M8 0v20M2 14l6 8 6-8" stroke="rgba(0,0,0,0.3)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||
</div>
|
||
|
||
<!-- Step 4: split -->
|
||
<div class="flow-split-arrow">
|
||
<svg width="16" height="24" viewBox="0 0 16 24" fill="none"><path d="M8 0v12M2 6l6 8 6-8" stroke="rgba(0,0,0,0.3)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||
</div>
|
||
<div class="flow-split">
|
||
<div class="flow-node">
|
||
<div class="flow-node-icon">
|
||
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#4ade80" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
|
||
</div>
|
||
<div class="flow-node-text">
|
||
<h4>No contradiction</h4>
|
||
<p>Evidence supports official data → confidence score updated upward</p>
|
||
</div>
|
||
</div>
|
||
<div class="flow-node flow-rank">
|
||
<div class="flow-node-icon">
|
||
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#f87171" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
|
||
</div>
|
||
<div class="flow-node-text">
|
||
<h4>Contradiction detected</h4>
|
||
<p>Divergence ranked by severity and economic significance</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="flow-arrow">
|
||
<svg width="16" height="24" viewBox="0 0 16 24" fill="none"><path d="M8 0v20M2 14l6 8 6-8" stroke="rgba(0,0,0,0.3)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||
</div>
|
||
|
||
<!-- Step 5 -->
|
||
<div class="flow-node flow-redteam">
|
||
<div class="flow-node-icon">
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#a78bfa" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
|
||
</div>
|
||
<div class="flow-node-text">
|
||
<h4>5. Red Team challenge</h4>
|
||
<p>Second AI model attempts to disprove the contradiction with alternative explanations. Conclusion revised or confirmed.</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="flow-arrow">
|
||
<svg width="16" height="24" viewBox="0 0 16 24" fill="none"><path d="M8 0v20M2 14l6 8 6-8" stroke="rgba(0,0,0,0.3)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||
</div>
|
||
|
||
<!-- Step 6 -->
|
||
<div class="flow-node flow-output">
|
||
<div class="flow-node-icon">
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#4ade80" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/><polyline points="10 9 9 9 8 9"/></svg>
|
||
</div>
|
||
<div class="flow-node-text">
|
||
<h4>6. Contradiction Report delivered</h4>
|
||
<p>Client receives: finding, supporting evidence, contradicting evidence, severity rank, confidence score (0–100)</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- CTA BAND -->
|
||
<section class="cta-band">
|
||
<h2>Ready to see it applied<br>to your decision?</h2>
|
||
<p>Tell us the question you need answered. We'll show you how Landvex can support it.</p>
|
||
<a class="btn btn-white btn-lg" href="https://landvex.com/#contact">Request a briefing →</a>
|
||
</section>
|
||
|
||
<!-- FOOTER -->
|
||
|
||
<!-- AMOS & AI Validation -->
|
||
<section>
|
||
<div>
|
||
<div>Analysis Engine</div>
|
||
<h2>AMOS — Automated Multi-source Observation System</h2>
|
||
<p>
|
||
AMOS is the Landvex AI analysis engine. It receives validated field observations from the quiXzoom network,
|
||
cross-references them against official datasets and historical baselines, and produces the index scores,
|
||
contradiction flags and trend signals delivered to clients. AMOS does not generate or fabricate data —
|
||
it analyses, scores and flags discrepancies in what has been observed.
|
||
</p>
|
||
<div>
|
||
<div>
|
||
<div>What AMOS does</div>
|
||
<ul>
|
||
<li>Cross-references field observations with official statistics</li>
|
||
<li>Scores geographic areas on standardised 0–100 index dimensions</li>
|
||
<li>Flags contradictions between reported and observed reality</li>
|
||
<li>Generates trend signals from change patterns in field data</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div>What AMOS does not do</div>
|
||
<ul>
|
||
<li>Generate or invent observations not in field data</li>
|
||
<li>Make financial investment decisions</li>
|
||
<li>Replace engineering or safety inspections</li>
|
||
<li>Produce legally binding assessments</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div>AI Red Team</div>
|
||
<p>
|
||
Every AMOS contradiction flag is independently challenged by a second model before delivery.
|
||
The Red Team model is tasked with disproving the primary finding — a flag is only delivered
|
||
when it survives this adversarial check. This reduces false positives in contradiction detection.
|
||
Model performance metrics and Red Team rejection rates are available to enterprise clients under NDA:
|
||
<a href="mailto:enterprise@landvex.com" >enterprise@landvex.com</a>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<footer class="lv-footer" role="contentinfo">
|
||
<div class="footer-inner">
|
||
<div>
|
||
<div class="footer-logo">LandveX</div>
|
||
<div class="footer-copy">© 2026 Landvex Inc · Landvex AB (org.nr 559141-7042)</div>
|
||
<div class="footer-tagline">Decision intelligence for the physical world.</div>
|
||
</div>
|
||
<div class="footer-links">
|
||
<a href="/privacy">Privacy</a>
|
||
<a href="/terms">Terms</a>
|
||
<a href="https://www.quixzoom.com/" target="_blank" rel="noopener">quiXzoom →</a>
|
||
<a href="https://www.quixzoom.com/for-organisations/">For organisations</a>
|
||
<a href="mailto:contact@landvex.com">contact@landvex.com</a>
|
||
<a href="https://www.linkedin.com/company/landvex" target="_blank" rel="noopener" class="footer-social" title="LandveX on LinkedIn">
|
||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z" stroke="#888" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||
<rect x="2" y="9" width="4" height="12" stroke="#888" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||
<circle cx="4" cy="4" r="2" stroke="#888" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||
</svg>
|
||
</a>
|
||
<a href="https://x.com/landvex" target="_blank" rel="noopener" class="footer-social" title="LandveX on X">
|
||
<svg width="15" height="15" viewBox="0 0 24 24" fill="#888" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.746l7.73-8.835L1.254 2.25H8.08l4.253 5.622 5.912-5.622Zm-1.161 17.52h1.833L7.084 4.126H5.117z"/>
|
||
</svg>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
</body>
|
||
</html>
|