Files
boc/landvex-site/pilot/index.html
T
Bernt 58ca4e68db feat(boc): Complete Business Operations Center v1.0
- Go backend API with full CRUD for all modules (CRM, Sales, Finance, HR, Legal, Marketing, Support, Purchase, Inventory, Projects, Automation, Analytics)
- Rust analytics service with parallel report generation
- C runtime with POSIX shared memory IPC
- PostgreSQL schema with 30+ tables, full migrations
- Redis cache, sessions, pub/sub
- Kafka event streaming with Zookeeper
- WebSocket hub for real-time updates
- Automation engine with cron jobs, workflows, event triggers
- JWT authentication, multi-tenant from start
- Docker Compose with all services
- Nginx reverse proxy with rate limiting
- Integration tests passing
- Feature gap analysis against Fortnox/Odoo/Visma

Refs: BOC-001
2026-07-12 12:41:35 +00:00

737 lines
34 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pilot Programme — Landvex</title>
<meta name="description" content="A Landvex pilot answers one specific question, in one defined geography, in 68 weeks. Fixed scope. Fixed cost. Starting from EUR 15,000.">
<link rel="canonical" href="https://www.landvex.com/pilot/">
<meta name="robots" content="index, follow">
<meta property="og:type" content="website">
<meta property="og:url" content="https://www.landvex.com/pilot/">
<meta property="og:title" content="Pilot Programme — Landvex">
<meta property="og:description" content="A Landvex pilot answers one specific question, in one defined geography, in 68 weeks. Fixed scope. Fixed cost. Starting from EUR 15,000.">
<meta property="og:image" content="https://www.landvex.com/og-image.jpg">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Pilot Programme — Landvex">
<meta name="twitter:description" content="A Landvex pilot answers one specific question, in one defined geography, in 68 weeks. Fixed scope. Fixed cost. Starting from EUR 15,000.">
<meta name="twitter:image" content="https://www.landvex.com/og-image.jpg">
<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">
<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-light: #1d1d1f;
--text-muted: #6B6B6B;
--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: var(--bg-dark);
color: var(--text-light);
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.88);
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: 32px; list-style: none; }
.nav-links a { font-size: 14px; color: var(--text-dim); transition: color 0.2s; }
.nav-links a:hover, .nav-links a.active { color: #1d1d1f; }
.nav-dropdown { position: relative; }
.nav-dropdown > a { display: flex; align-items: center; gap: 4px; cursor: pointer; }
.nav-dropdown > a::after {
content: ''; display: inline-block; width: 0; height: 0;
border-left: 4px solid transparent; border-right: 4px solid transparent;
border-top: 4px solid currentColor;
opacity: 0.55; margin-top: 1px; transition: transform 0.2s;
}
.nav-dropdown:hover > a::after, .nav-dropdown:focus-within > a::after { transform: rotate(180deg); }
.nav-dropdown-menu {
display: none; position: absolute; top: calc(100% + 12px); left: 50%;
transform: translateX(-50%);
background: rgba(255,255,255,0.98); border: 1px solid var(--border);
border-radius: var(--radius-md); padding: 8px 0; min-width: 200px;
box-shadow: 0 16px 40px rgba(0,0,0,0.5); z-index: 200;
backdrop-filter: blur(12px);
}
.nav-dropdown:hover .nav-dropdown-menu,
.nav-dropdown:focus-within .nav-dropdown-menu { display: block; }
.nav-dropdown-menu a { color: #333333;
display: flex; align-items: center; gap: 10px;
padding: 10px 18px; font-size: 14px; color: var(--text-dim);
transition: color 0.15s, background 0.15s; white-space: nowrap;
}
.nav-dropdown-menu a:hover { color: #000000; background: rgba(0,0,0,0.03); }
.nav-dropdown-menu .dd-label {
font-size: 10px; font-weight: 700; letter-spacing: 0.1em;
text-transform: uppercase; color: rgba(0,0,0,0.6);
padding: 8px 18px 4px; cursor: default;
}
.nav-dropdown-menu hr { border: none; border-top: 1px solid var(--border); margin: 6px 0; }
.btn {
display: inline-flex; align-items: center; gap: 6px;
padding: 10px 22px; 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: 14px 30px; font-size: 16px; }
/* HERO */
.hero {
min-height: 70vh; display: flex; flex-direction: column;
align-items: center; justify-content: center;
text-align: center; padding: 140px 24px 80px;
position: relative; overflow: hidden;
}
.hero::before {
content: ''; position: absolute; top: -200px; left: 50%; transform: translateX(-50%);
width: 900px; height: 600px;
background: radial-gradient(ellipse at center, rgba(0,102,255,0.10) 0%, transparent 70%);
pointer-events: none;
}
.hero-eyebrow {
display: inline-flex; align-items: center; gap: 8px;
background: rgba(0,102,255,0.1); border: 1px solid rgba(0,102,255,0.25);
color: #5599ff; font-size: 12px; font-weight: 600;
letter-spacing: 0.08em; text-transform: uppercase;
padding: 6px 16px; border-radius: 100px; margin-bottom: 28px;
}
.hero h1 {
font-size: clamp(40px, 6vw, 72px); font-weight: 800;
letter-spacing: -2px; line-height: 1.05; color: #1d1d1f;
max-width: 760px; margin-bottom: 20px;
}
.hero-sub {
font-size: clamp(16px, 2vw, 20px); color: var(--text-dim);
max-width: 600px; line-height: 1.65; margin-bottom: 12px;
}
.hero-constraints {
font-size: 14px; color: rgba(0,0,0,0.6);
letter-spacing: 0.03em; margin-bottom: 40px;
}
.hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; }
@media (max-width: 900px) {
nav { padding: 0 20px; }
.nav-links { display: none; }
.process-steps { grid-template-columns: repeat(2, 1fr); gap: 32px; }
.process-steps::before { display: none; }
.deliverables-grid { grid-template-columns: 1fr; }
.questions-grid { grid-template-columns: 1fr; }
}
@media (max-width: 600px) {
.container { padding: 0 16px !important; box-sizing: border-box; }
section { padding: 48px 0 !important; }
.hero { padding: 100px 20px 60px !important; }
.hero h1 { letter-spacing: -1px; }
.hero-ctas { flex-direction: column !important; gap: 12px !important; }
.hero-ctas a { width: 100% !important; text-align: center !important; }
.process-steps { grid-template-columns: 1fr !important; gap: 24px !important; }
.process-steps::before { display: none; }
.deliverables-grid { grid-template-columns: 1fr !important; }
.questions-grid { grid-template-columns: 1fr !important; }
.pricing-card { padding: 28px 20px !important; }
.cta-banner { padding: 32px 20px !important; }
.contact-form { padding: 24px 16px !important; }
.form-row { grid-template-columns: 1fr !important; }
.footer-inner { flex-direction: column; text-align: center; }
}
/* SECTIONS */
section { padding: 96px 24px; }
.section-alt { background: var(--surface); }
.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: 16px;
}
.section-title {
font-size: clamp(26px, 3.5vw, 42px); font-weight: 800;
letter-spacing: -1.2px; line-height: 1.1; color: #1d1d1f; margin-bottom: 16px;
}
.section-sub { font-size: 17px; color: var(--text-dim); max-width: 560px; line-height: 1.7; }
.section-header { margin-bottom: 56px; }
.section-header-center { text-align: center; }
.section-header-center .section-sub { margin: 0 auto; }
/* PROCESS STEPS */
.process-steps {
display: grid; grid-template-columns: repeat(4, 1fr);
gap: 0; position: relative;
}
.process-steps::before {
content: ''; position: absolute;
top: 27px; left: 12.5%; right: 12.5%; height: 1px;
background: linear-gradient(90deg, transparent, var(--blue) 20%, var(--blue) 80%, transparent);
opacity: 0.25;
}
.process-step { text-align: center; padding: 0 20px; position: relative; }
.step-num {
width: 54px; height: 54px; border-radius: var(--radius-full);
background: var(--blue-glow); border: 2px solid var(--blue);
display: flex; align-items: center; justify-content: center;
font-size: 17px; font-weight: 800; color: var(--blue);
margin: 0 auto 24px; position: relative; z-index: 1;
}
.process-step h3 { font-size: 15px; font-weight: 700; color: #1d1d1f; margin-bottom: 8px; }
.process-step p { font-size: 14px; color: var(--text-dim); line-height: 1.6; }
.process-step .step-detail {
display: inline-block; margin-top: 10px;
font-size: 12px; font-weight: 600; color: rgba(0,0,0,0.6);
font-style: italic;
}
/* DELIVERABLES */
.deliverables-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }
.deliverable-item {
display: flex; align-items: flex-start; gap: 16px;
background: var(--surface-2); border: 1px solid var(--border);
border-radius: var(--radius-md); padding: 24px;
transition: border-color 0.2s;
}
.deliverable-item:hover { border-color: rgba(0,102,255,0.3); }
.deliverable-icon {
width: 40px; height: 40px; flex-shrink: 0;
background: var(--blue-glow); border: 1px solid rgba(0,102,255,0.2);
border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center;
}
.deliverable-item h4 { font-size: 15px; font-weight: 700; color: #1d1d1f; margin-bottom: 4px; }
.deliverable-item p { font-size: 13px; color: var(--text-dim); line-height: 1.5; }
/* TYPICAL QUESTIONS */
.questions-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
.question-card {
background: var(--surface-2); border: 1px solid var(--border);
border-radius: var(--radius-md); padding: 20px 24px;
display: flex; align-items: flex-start; gap: 12px;
transition: border-color 0.2s;
}
.question-card:hover { border-color: rgba(0,102,255,0.3); }
.question-mark {
font-size: 20px; font-weight: 800; color: var(--blue);
flex-shrink: 0; line-height: 1.3;
}
.question-card p { font-size: 15px; color: var(--text-light); font-weight: 500; line-height: 1.4; }
/* PRICING */
.pricing-card {
max-width: 560px; margin: 0 auto;
background: var(--surface-2); border: 1px solid rgba(0,102,255,0.3);
border-radius: var(--radius-lg); padding: 48px;
text-align: center;
}
.pricing-card .pricing-from {
font-size: 13px; font-weight: 700; letter-spacing: 0.08em;
text-transform: uppercase; color: #5599ff; margin-bottom: 8px;
}
.pricing-card .pricing-amount {
font-size: clamp(44px, 7vw, 72px); font-weight: 800;
letter-spacing: -2px; color: #1d1d1f; line-height: 1;
margin-bottom: 8px;
}
.pricing-card .pricing-note {
font-size: 15px; color: var(--text-dim); margin-bottom: 24px;
}
.pricing-includes {
display: flex; flex-direction: column; gap: 10px;
text-align: left; margin-bottom: 32px;
}
.pricing-includes-item {
display: flex; align-items: center; gap: 10px;
font-size: 14px; color: rgba(0,0,0,0.7);
}
.pricing-includes-item svg { flex-shrink: 0; color: var(--blue); }
/* DARK CTA BANNER */
.cta-banner {
background: #0a0f1a; border: 1px solid rgba(0,102,255,0.2);
border-radius: var(--radius-lg); padding: 64px 56px;
text-align: center; position: relative; overflow: hidden;
}
.cta-banner::before {
content: ''; position: absolute; top: -100px; left: 50%; transform: translateX(-50%);
width: 600px; height: 300px;
background: radial-gradient(ellipse, rgba(0,102,255,0.12) 0%, transparent 70%);
pointer-events: none;
}
.cta-banner .cta-label {
font-size: 12px; font-weight: 700; letter-spacing: 0.1em;
text-transform: uppercase; color: #5599ff; margin-bottom: 16px;
}
.cta-banner h2 {
font-size: clamp(28px, 4vw, 44px); font-weight: 800;
letter-spacing: -1px; color: #1d1d1f; margin-bottom: 16px;
}
.cta-banner p {
font-size: 16px; color: var(--text-dim);
max-width: 480px; margin: 0 auto 32px; line-height: 1.65;
}
/* CONTACT */
.contact-wrapper { max-width: 680px; margin: 0 auto; text-align: center; }
.contact-form {
background: var(--surface); border: 1px solid var(--border);
border-radius: var(--radius-lg); padding: 40px; text-align: left;
}
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
.form-group { display: flex; flex-direction: column; gap: 8px; margin-bottom: 16px; }
.form-group label { font-size: 13px; font-weight: 600; color: var(--text-dim); }
.form-group input, .form-group textarea, .form-group select {
background: var(--bg-dark); border: 1.5px solid var(--border);
border-radius: var(--radius-md); color: #1d1d1f;
font-size: 15px; font-family: inherit;
padding: 12px 16px; outline: none; transition: border-color 0.2s; width: 100%;
}
.form-group select option { background: #f5f5f7; }
.form-group input:focus, .form-group textarea:focus, .form-group select:focus { border-color: var(--blue); }
.form-group input::placeholder, .form-group textarea::placeholder { color: var(--text-muted); }
.form-group textarea { min-height: 120px; resize: vertical; }
.form-note { font-size: 12px; color: var(--text-muted); margin-top: 12px; text-align: center; }
#form-message {
display: none; padding: 14px 20px; border-radius: var(--radius-md);
font-size: 14px; font-weight: 600; text-align: center; margin-top: 16px;
}
#form-message.success { background: rgba(0,200,80,0.1); border: 1px solid rgba(0,200,80,0.25); color: #4ade80; }
#form-message.error { background: rgba(255,60,60,0.1); border: 1px solid rgba(255,60,60,0.25); color: #f87171; }
/* FOOTER */
footer { border-top: 1px solid var(--border); padding: 40px; }
.footer-inner {
max-width: 1140px; margin: 0 auto;
display: flex; align-items: center; justify-content: space-between;
flex-wrap: wrap; gap: 20px;
}
.footer-logo { font-size: 17px; font-weight: 700; color: #1d1d1f; }
.footer-copy { font-size: 13px; color: var(--text-muted); }
.footer-tagline { font-size: 12px; color: var(--text-muted); margin-top: 4px; }
.footer-links { display: flex; gap: 24px; align-items: center; flex-wrap: wrap; }
.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: var(--radius-md);
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); }
svg { max-width: 100%; overflow: visible; }
.deliverable-icon svg, .pricing-includes-item svg { overflow: hidden; flex-shrink: 0; }
@media (max-width: 900px) {
nav { padding: 0 20px; }
.nav-links { display: none; }
.process-steps { grid-template-columns: 1fr 1fr; gap: 32px; }
.process-steps::before { display: none; }
.questions-grid { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
section { padding: 56px 0; }
.hero { padding: 100px 20px 60px; }
.hero-ctas { flex-direction: column; }
.deliverables-grid { grid-template-columns: 1fr; }
.form-row { grid-template-columns: 1fr; }
.contact-form { padding: 24px 20px; }
.cta-banner { padding: 40px 24px; }
.pricing-card { padding: 32px 24px; }
.footer-inner { flex-direction: column; text-align: center; }
}
</style>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Landvex",
"item": "https://www.landvex.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Pilot",
"item": "https://www.landvex.com/pilot/"
}
]
}
</script>
<link rel="alternate" hreflang="x-default" href="https://www.landvex.com/">
<link rel="alternate" hreflang="en" href="https://www.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/">
</head>
<body>
<nav aria-label="breadcrumb" style="padding: 10px 20px; color: rgba(235,235,245,0.6); font-size: 14px;">
<a href="/" style="color: #007AFF; text-decoration: none;">Home</a> / <span>pilot</span>
</nav>
<!-- NAV -->
<nav>
<a class="nav-logo" href="/">LandveX</a>
<ul class="nav-links">
<li><a href="/#how-it-works">How it works</a></li>
<li><a href="/#verticals">Verticals</a></li>
<li class="nav-dropdown">
<a href="/methodology/">Intelligence</a>
<div class="nav-dropdown-menu">
<div class="dd-label">Learn</div>
<a href="/methodology/">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"/><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"/></svg>
Methodology
</a>
<hr/>
<div class="dd-label">Products</div>
<a href="/enterprise/">Enterprise</a>
<a href="/reports/">Intelligence Reports</a>
<a href="/pilot/" style="color: #1d1d1f">Pilot Programme</a>
<hr/>
<a href="/security/">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" 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>
Security
</a>
</div>
</li>
<li><a href="/enterprise/">Enterprise</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
<a class="btn btn-outline" href="#contact">Book a pilot call</a>
</nav>
<!-- HERO -->
<section class="hero">
<div class="hero-eyebrow">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
Pilot Programme
</div>
<h1>Start with a pilot.</h1>
<p class="hero-sub">A Landvex pilot answers one specific question, in one defined geography, in 6 to 8 weeks.</p>
<p class="hero-constraints">Fixed scope. Fixed cost.</p>
<div class="hero-ctas">
<a class="btn btn-lg" href="#contact">Book a pilot call</a>
<a class="btn btn-outline btn-lg" href="/enterprise/">Enterprise overview</a>
</div>
</section>
<!-- HOW IT WORKS -->
<section class="section-alt">
<div class="container">
<div class="section-header section-header-center">
<div class="section-label">How it works</div>
<h2 class="section-title">Four steps from brief to answer.</h2>
<p class="section-sub">Every pilot follows the same structure. No open-ended engagements. No scope creep.</p>
</div>
<div class="process-steps">
<div class="process-step">
<div class="step-num">1</div>
<h3>Define the question</h3>
<p>A 30-minute call to establish the specific decision you are trying to make.</p>
<span class="step-detail">What decision are you trying to make?</span>
</div>
<div class="process-step">
<div class="step-num">2</div>
<h3>Define the geography</h3>
<p>We agree on the precise scope: a district, a city, a region, or a specific asset list.</p>
<span class="step-detail">District, city, region, or asset list</span>
</div>
<div class="process-step">
<div class="step-num">3</div>
<h3>We collect and analyse</h3>
<p>quiXzoom field data collection combined with the Landvex intelligence layer. No input required from your team during this phase.</p>
<span class="step-detail">quiXzoom field data + intelligence layer</span>
</div>
<div class="process-step">
<div class="step-num">4</div>
<h3>You receive the answer</h3>
<p>A structured report with confidence scores and raw data. Delivered within the agreed timeline.</p>
<span class="step-detail">Structured report + raw data + confidence scores</span>
</div>
</div>
</div>
</section>
<!-- WHAT YOU GET -->
<section>
<div class="container">
<div style="display:grid;grid-template-columns:1fr 1fr;gap:80px;align-items:start">
<div>
<div class="section-label">Deliverables</div>
<h2 class="section-title">What you receive at the end of a pilot.</h2>
<p class="section-sub" style="margin-bottom:32px">Every pilot delivers the same structured set of outputs — designed for immediate use by analysts, investment committees, and operations teams.</p>
<a class="btn btn-outline" href="#contact">Book a pilot call</a>
</div>
<div class="deliverables-grid">
<div class="deliverable-item">
<div class="deliverable-icon">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#0066ff" 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"/></svg>
</div>
<div>
<h4>Intelligence report</h4>
<p>Structured PDF and structured data export. Designed for internal distribution and investment committee presentation.</p>
</div>
</div>
<div class="deliverable-item">
<div class="deliverable-icon">
<svg width="18" height="18" 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>
<div>
<h4>Confidence scores per data point</h4>
<p>Every finding includes a quantified confidence score based on source quality, field verification, and cross-reference analysis.</p>
</div>
</div>
<div class="deliverable-item">
<div class="deliverable-icon">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><polyline points="1 20 1 14 7 14"/><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"/></svg>
</div>
<div>
<h4>Contradiction analysis</h4>
<p>Where official data and observed reality diverge. Documented with source references and confidence ratings.</p>
</div>
</div>
<div class="deliverable-item">
<div class="deliverable-icon">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
</div>
<div>
<h4>3-month follow-up observation</h4>
<p>A follow-up observation of the same geography 3 months after delivery, included in every pilot engagement.</p>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- TYPICAL QUESTIONS -->
<section class="section-alt">
<div class="container">
<div class="section-header section-header-center">
<div class="section-label">Typical pilot questions</div>
<h2 class="section-title">The question defines the pilot.</h2>
<p class="section-sub">A pilot starts with a specific question. These are examples of questions previous pilots have been scoped around.</p>
</div>
<div class="questions-grid">
<div class="question-card">
<div class="question-mark">"</div>
<p>Should we invest in this district?</p>
</div>
<div class="question-card">
<div class="question-mark">"</div>
<p>Where is our infrastructure most at risk?</p>
</div>
<div class="question-card">
<div class="question-mark">"</div>
<p>Which locations have the highest retail opportunity?</p>
</div>
<div class="question-card">
<div class="question-mark">"</div>
<p>What is actually changing in this area?</p>
</div>
</div>
<div style="text-align:center;margin-top:32px">
<p style="font-size:14px;color:var(--text-dim)">Your question may differ. If you can articulate a decision, we can scope a pilot around it.</p>
</div>
</div>
</section>
<!-- PRICING -->
<section>
<div class="container">
<div class="section-header section-header-center">
<div class="section-label">Pricing</div>
<h2 class="section-title">Fixed scope. Fixed cost.</h2>
<p class="section-sub">Pilot pricing is scope-dependent. Every pilot is quoted as a fixed fee before work begins.</p>
</div>
<div class="pricing-card">
<div class="pricing-from">Pilot pricing from</div>
<div class="pricing-amount">EUR 15,000</div>
<div class="pricing-note">Scope-dependent. Contact us for a fixed quote.</div>
<div class="pricing-includes">
<div class="pricing-includes-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
Intelligence report (PDF + structured data)
</div>
<div class="pricing-includes-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
Confidence scores per data point
</div>
<div class="pricing-includes-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
Contradiction analysis (official vs observed)
</div>
<div class="pricing-includes-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
3-month follow-up observation
</div>
<div class="pricing-includes-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
Fixed scope, fixed cost — no overruns
</div>
</div>
<a class="btn btn-lg" href="#contact" style="width:100%;justify-content:center">Request a fixed quote</a>
</div>
</div>
</section>
<!-- CTA BANNER -->
<section style="padding:80px 24px">
<div class="container">
<div class="cta-banner">
<div class="cta-label">Book a call</div>
<h2>Book a pilot call.</h2>
<p>A 30-minute call to define your question and scope the pilot. No obligation. We tell you what we can answer and at what cost before anything begins.</p>
<a class="btn btn-lg" href="#contact">Book a pilot call</a>
</div>
</div>
</section>
<!-- CONTACT -->
<section id="contact">
<div class="container">
<div class="contact-wrapper">
<div class="section-label">Book</div>
<h2 class="section-title">Start the pilot conversation.</h2>
<p class="section-sub" style="margin:0 auto 40px">Tell us your question and geography. We will come back with a scoped proposal and fixed price within two business days.</p>
<form class="contact-form" id="contact-form">
<div class="form-row">
<div class="form-group">
<label for="name">Name</label>
<input type="text" id="name" name="name" placeholder="Your name" required>
</div>
<div class="form-group">
<label for="org">Organisation</label>
<input type="text" id="org" name="organisation" placeholder="Your organisation" required>
</div>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" id="email" name="email" placeholder="you@organisation.com" required>
</div>
<div class="form-group">
<label for="geography">Geography</label>
<input type="text" id="geography" name="geography" placeholder="City, district, region, or asset list">
</div>
<div class="form-group">
<label for="message">Your question</label>
<textarea id="message" name="message" placeholder="What decision are you trying to make? Describe it in one or two sentences."></textarea>
</div>
<button type="submit" class="btn btn-lg" style="width:100%;justify-content:center">Book a pilot call</button>
<p class="form-note">We respond within two business days with a scoped proposal and fixed price. Your information stays private.</p>
<div id="form-message"></div>
</form>
</div>
</div>
</section>
<!-- FOOTER -->
<footer>
<div class="footer-inner">
<div>
<div class="footer-logo">Landvex</div>
<div class="footer-copy">© 2026 LandveX AB &middot; 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="/methodology/">Methodology</a>
<a href="/security/">Security</a>
<a href="/enterprise/">Enterprise</a>
<a href="/reports/">Reports</a>
<a href="/pilot/">Pilot</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>
<script>
document.getElementById('contact-form').addEventListener('submit', async function(e) {
e.preventDefault();
const btn = this.querySelector('button[type="submit"]');
const msgEl = document.getElementById('form-message');
btn.disabled = true; btn.textContent = 'Sending...';
const data = {
source: 'landvex-pilot',
name: this.name.value,
organisation: this.organisation.value,
email: this.email.value,
geography: this.geography ? this.geography.value : '',
message: this.message.value
};
try {
const res = await fetch('https://api.quixzoom.com/api/qz/waitlist', {
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
if (res.ok || res.status === 201) {
msgEl.className = 'success';
msgEl.textContent = "Request received. We will respond within two business days with a scoped proposal.";
msgEl.style.display = 'block'; this.reset();
} else { throw new Error('Server error ' + res.status); }
} catch (err) {
msgEl.className = 'error';
msgEl.textContent = 'Something went wrong. Please email us at contact@landvex.com.';
msgEl.style.display = 'block';
}
btn.disabled = false; btn.textContent = 'Book a pilot call';
});
</script>
</body>
</html>