1a12fb870b
- New /developers/ page with API docs, SDKs, pricing, use cases - OpenAPI 3.0 spec for Orders, Missions, Photos, Analytics - Case study: Glasskiosken i Flatenbadet — complete ROI analysis - Updated /order/ with recurring missions and frequency dropdown
632 lines
30 KiB
HTML
632 lines
30 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Retail & Franchise Location Intelligence — Landvex</title>
|
||
<meta name="description" content="Location intelligence for retail and franchise operators. Where should the next location open? Continuous commercial vitality monitoring across markets.">
|
||
<link rel="canonical" href="https://landvex.com/verticals/retail/">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:url" content="https://landvex.com/verticals/retail/">
|
||
<meta property="og:title" content="Retail & Franchise Location Intelligence — Landvex">
|
||
<meta property="og:description" content="Location intelligence for retail and franchise operators. Where should the next location open? Continuous commercial vitality monitoring across markets.">
|
||
<meta property="og:image" content="https://landvex.com/og-image.jpg">
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
<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="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: var(--bg-dark);
|
||
color: var(--text-light);
|
||
line-height: 1.6;
|
||
-webkit-font-smoothing: antialiased;
|
||
}
|
||
|
||
a { color: inherit; text-decoration: none; }
|
||
|
||
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; }
|
||
|
||
.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 {
|
||
min-height: 90vh;
|
||
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
||
text-align: center;
|
||
padding: 24px 80px;
|
||
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(36px, 6vw, 68px);
|
||
font-weight: 800; letter-spacing: -2px; line-height: 1.05;
|
||
color: #1d1d1f; max-width: 820px; margin-bottom: 24px;
|
||
}
|
||
|
||
.hero-sub {
|
||
font-size: clamp(16px, 2vw, 19px);
|
||
color: var(--text-dim); max-width: 620px; line-height: 1.65;
|
||
margin-bottom: 40px;
|
||
}
|
||
|
||
.hero-ctas { display: flex; gap: 16px; flex-wrap: wrap; justify-content: center; }
|
||
|
||
section { padding: 24px; }
|
||
.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: 24px;
|
||
}
|
||
|
||
.section-title {
|
||
font-size: clamp(28px, 4vw, 44px);
|
||
font-weight: 800; letter-spacing: -1.2px; line-height: 1.1;
|
||
color: #1d1d1f; margin-bottom: 24px;
|
||
}
|
||
|
||
.section-sub {
|
||
font-size: 17px; color: var(--text-dim);
|
||
max-width: 600px; line-height: 1.7;
|
||
}
|
||
|
||
/* Light section overrides */
|
||
.light-section { background: #fff; }
|
||
.light-section .section-title { color: #0a0a0a; }
|
||
.light-section .section-sub { color: #444; }
|
||
.light-section .section-label { color: var(--blue); }
|
||
|
||
/* USE CASES */
|
||
.use-case-grid {
|
||
display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px;
|
||
margin-top: 48px;
|
||
}
|
||
|
||
.use-case-card {
|
||
background: var(--surface-2); border: 1px solid var(--border);
|
||
border-radius: var(--radius-lg); padding: 24px;
|
||
transition: border-color 0.25s, transform 0.2s;
|
||
}
|
||
.use-case-card:hover { border-color: rgba(0,102,255,0.35); transform: translateY(-3px); }
|
||
|
||
.uc-icon { font-size: 28px; margin-bottom: 24px; display: block; }
|
||
.use-case-card h3 { font-size: 17px; font-weight: 700; color: #1d1d1f; margin-bottom: 8px; }
|
||
.use-case-card p { font-size: 14px; color: var(--text-dim); line-height: 1.6; }
|
||
|
||
/* DECISIONS */
|
||
.decisions-bg { background: var(--surface); }
|
||
|
||
.decisions-grid {
|
||
display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px;
|
||
margin-top: 40px;
|
||
}
|
||
|
||
.decision-chip {
|
||
background: var(--bg-dark); border: 1px solid var(--border);
|
||
border-radius: var(--radius-md); padding: 24px;
|
||
display: flex; align-items: center; gap: 16px;
|
||
}
|
||
.decision-chip .chip-dot {
|
||
width: 8px; height: 8px; border-radius: var(--radius-full);
|
||
background: var(--blue); flex-shrink: 0;
|
||
}
|
||
.decision-chip span { font-size: 15px; font-weight: 600; color: var(--text-light); }
|
||
|
||
/* CONTRADICTION ENGINE */
|
||
.contradiction-bg { background: #e8f0fe; }
|
||
|
||
.contradiction-box {
|
||
background: rgba(0,0,0,.05);
|
||
border: 1px solid rgba(0,0,0,.1);
|
||
border-radius: var(--radius-lg); padding: 24px; margin-bottom: 32px;
|
||
}
|
||
|
||
.conflict-header {
|
||
display: flex; align-items: flex-start; gap: 16px; margin-bottom: 24px;
|
||
}
|
||
.conflict-flag { font-size: 1.5rem; }
|
||
.conflict-title { color: #f87171; font-weight: 800; font-size: .9375rem; margin-bottom: 4px; }
|
||
.conflict-desc { color: rgba(0,0,0,.6); font-size: .875rem; line-height: 1.6; }
|
||
|
||
.conflict-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
|
||
|
||
.conflict-side { border-radius: var(--radius-md); padding: 16px; }
|
||
.conflict-official { background: rgba(34,197,94,.1); border: 1px solid rgba(34,197,94,.2); }
|
||
.conflict-observed { background: rgba(239,68,68,.1); border: 1px solid rgba(239,68,68,.2); }
|
||
|
||
.conflict-side-label {
|
||
font-size: .75rem; font-weight: 700; text-transform: uppercase;
|
||
letter-spacing: .08em; margin-bottom: 10px;
|
||
}
|
||
.conflict-official .conflict-side-label { color: #86efac; }
|
||
.conflict-observed .conflict-side-label { color: #fca5a5; }
|
||
|
||
.conflict-side ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 16px; }
|
||
.conflict-side li { color: rgba(0,0,0,.7); font-size: .875rem; }
|
||
|
||
.conflict-footer {
|
||
margin-top: 20px; padding-top: 20px;
|
||
border-top: 1px solid rgba(0,0,0,.1);
|
||
display: flex; justify-content: space-between; align-items: center;
|
||
}
|
||
.conflict-footer-label { color: rgba(0,0,0,.75); font-size: .8125rem; }
|
||
.conflict-confidence { color: #f87171; font-weight: 800; font-size: 1.125rem; }
|
||
|
||
.ce-features { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
|
||
.ce-feature { text-align: center; padding: 20px; }
|
||
.ce-feature .ce-icon { font-size: 1.75rem; margin-bottom: 8px; }
|
||
.ce-feature h4 { color: #1d1d1f; font-weight: 700; margin-bottom: 6px; }
|
||
.ce-feature p { color: rgba(0,0,0,.75); font-size: .8125rem; }
|
||
|
||
/* SCORES */
|
||
.scores-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 40px; }
|
||
|
||
.score-card {
|
||
background: var(--surface-2); border: 1px solid var(--border);
|
||
border-radius: var(--radius-lg); padding: 24px; text-align: center;
|
||
}
|
||
|
||
.score-icon { font-size: 1.5rem; margin-bottom: 12px; }
|
||
.score-name { font-size: 15px; font-weight: 700; color: #1d1d1f; margin-bottom: 6px; }
|
||
.score-desc { font-size: 13px; color: var(--text-dim); line-height: 1.5; margin-bottom: 20px; }
|
||
.score-bar-wrap { background: rgba(0,0,0,.06); border-radius: var(--radius-sm); height: 8px; margin-bottom: 10px; }
|
||
.score-bar { height: 8px; border-radius: var(--radius-sm); background: linear-gradient(90deg, var(--blue), #5599ff); }
|
||
.score-value { font-size: 28px; font-weight: 800; color: var(--blue); letter-spacing: -1px; }
|
||
.score-label-sub { font-size: 11px; color: var(--text-dim); margin-top: 2px; }
|
||
|
||
/* CTA BANNER */
|
||
.cta-banner {
|
||
background: #e8f0fe; border-radius: var(--radius-lg); padding: 24px;
|
||
display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
|
||
margin-top: 48px;
|
||
}
|
||
.cta-banner h3 { color: #1d1d1f; font-size: 1.25rem; font-weight: 800; margin-bottom: 8px; }
|
||
.cta-banner p { color: rgba(0,0,0,.7); line-height: 1.65; font-size: .9375rem; }
|
||
.cta-banner-text { flex: 1; min-width: 260px; }
|
||
|
||
/* CONTACT FORM */
|
||
.contact-wrapper { max-width: 680px; margin: 0 auto; text-align: center; }
|
||
.contact-wrapper .section-title { margin-bottom: 10px; }
|
||
.contact-wrapper .section-sub { margin: 0 auto 48px; }
|
||
|
||
.contact-form {
|
||
background: var(--surface); border: 1px solid var(--border);
|
||
border-radius: var(--radius-lg); padding: 40px; text-align: left;
|
||
}
|
||
|
||
.form-group { display: flex; flex-direction: column; gap: 16px; margin-bottom: 24px; }
|
||
.form-group label { font-size: 13px; font-weight: 600; color: var(--text-dim); }
|
||
.form-group input, .form-group textarea {
|
||
background: var(--bg-dark); border: 1.5px solid var(--border);
|
||
border-radius: var(--radius-md); color: #1d1d1f;
|
||
font-size: 15px; font-family: inherit; padding: 24px;
|
||
outline: none; transition: border-color 0.2s; width: 100%;
|
||
}
|
||
.form-group input:focus, .form-group textarea: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: 24px; 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: 16px;
|
||
}
|
||
.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: 16px; 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); }
|
||
|
||
@media (max-width: 900px) {
|
||
nav { padding: 0 20px; }
|
||
.use-case-grid { grid-template-columns: 1fr; }
|
||
.decisions-grid { grid-template-columns: 1fr 1fr; }
|
||
.scores-grid { grid-template-columns: 1fr 1fr; }
|
||
.conflict-grid { grid-template-columns: 1fr; }
|
||
.ce-features { grid-template-columns: 1fr; }
|
||
}
|
||
@media (max-width: 600px) {
|
||
section { padding: 48px 0 !important; }
|
||
.container { padding: 0 16px !important; box-sizing: border-box; }
|
||
.decisions-grid { grid-template-columns: 1fr !important; }
|
||
.scores-grid { grid-template-columns: 1fr !important; }
|
||
.use-case-grid { grid-template-columns: 1fr !important; }
|
||
.conflict-grid { grid-template-columns: 1fr !important; }
|
||
.ce-features { grid-template-columns: 1fr !important; }
|
||
.cta-banner { flex-direction: column !important; gap: 16px; padding: 24px; }
|
||
.contact-form { padding: 24px; }
|
||
nav { padding: 0 16px; }
|
||
.hero h1 { letter-spacing: -1px; }
|
||
}
|
||
|
||
.lv-disclaimer{font-size:.75rem;color:rgba(0,0,0,.75);margin-top:24px;padding: 24px;background:rgba(0,0,0,.04);border-radius: var(--radius-md);line-height:1.6;max-width:800px}
|
||
.lv-disclaimer a{color:rgba(0,0,0,.65);text-decoration:underline}
|
||
.lv-disclaimer--light{color:#888;background:#f5f5f5}
|
||
.lv-disclaimer--light a{color:#555}
|
||
</style>
|
||
<meta name="robots" content="index, follow">
|
||
<link rel="alternate" hreflang="x-default" href="https://landvex.com/">
|
||
<link rel="alternate" hreflang="en" href="https://landvex.com/"> <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="Main navigation">
|
||
<a class="nav-logo" href="https://landvex.com/">← Back to Landvex</a>
|
||
<a class="lv-btn lv-btn--outline" href="#contact">Get in touch →</a>
|
||
</nav>
|
||
|
||
<!-- HERO -->
|
||
<section class="lv-hero">
|
||
<div class="lv-hero-eyebrow">Landvex — Retail & Franchise</div>
|
||
<h1>Where should the next location open?</h1>
|
||
<p class="lv-hero-subtitle">Landvex gives retail and franchise operators the ground-truth intelligence to make better site decisions, verify network compliance, and track competitive dynamics — from the street, not the spreadsheet.</p>
|
||
<div class="hero-ctas">
|
||
<a class="lv-btn lv-btn--lg" href="#contact">Request a briefing →</a>
|
||
<a class="btn btn-outline btn-lg" href="#use-cases">See use cases</a>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- USE CASES -->
|
||
<section id="use-cases">
|
||
<div class="lv-container">
|
||
<div class="section-label">Use cases</div>
|
||
<h2 class="section-title">What Landvex does for Retail & Franchise</h2>
|
||
<p class="section-sub">From single-asset verifications to portfolio-wide intelligence missions — deployed in 24–72 hours.</p>
|
||
<div class="use-case-grid">
|
||
<div class="use-case-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<span class="uc-icon"></span>
|
||
<h3>Store compliance audits</h3>
|
||
<p>Verify signage, frontage, merchandising standards, and physical condition across your entire network. Rapid, scalable, consistent.</p>
|
||
|
||
<div class="learn-more-hint">Learn more →</div></div>
|
||
<div class="use-case-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<span class="uc-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></span>
|
||
<h3>Signage verification</h3>
|
||
<p>Confirm brand standards and regulatory compliance across distributed franchise or retail networks — without sending your own team.</p>
|
||
|
||
<div class="learn-more-hint">Learn more →</div></div>
|
||
<div class="use-case-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<span class="uc-icon"></span>
|
||
<h3>Competitor mapping</h3>
|
||
<p>Document competitor presence, condition, and activity across target markets. Know what's actually on the ground before you commit.</p>
|
||
|
||
<div class="learn-more-hint">Learn more →</div></div>
|
||
<div class="use-case-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<span class="uc-icon"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M9 2L5 9H8L7 14L11 7H8L9 2Z" fill="#f59e0b"/></svg></span>
|
||
<h3>Location intelligence</h3>
|
||
<p>Pre-site surveys combining foot traffic signals, surrounding commercial activity, accessibility, and neighbourhood quality assessment.</p>
|
||
|
||
<div class="learn-more-hint">Learn more →</div></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- KEY DECISIONS -->
|
||
<section class="decisions-bg" id="key-decisions">
|
||
<div class="lv-container">
|
||
<div class="section-label">Decision support</div>
|
||
<h2 class="section-title">The decisions Landvex informs</h2>
|
||
<p class="section-sub">Every Landvex engagement is anchored to a specific decision. These are the ones our retail & franchise clients face most often.</p>
|
||
<div class="decisions-grid">
|
||
<div class="decision-chip" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<span class="chip-dot"></span>
|
||
<span>Site selection</span>
|
||
</div>
|
||
<div class="decision-chip" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<span class="chip-dot"></span>
|
||
<span>Network expansion</span>
|
||
</div>
|
||
<div class="decision-chip" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<span class="chip-dot"></span>
|
||
<span>Portfolio optimisation</span>
|
||
</div>
|
||
<div class="decision-chip" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<span class="chip-dot"></span>
|
||
<span>Franchise compliance</span>
|
||
</div>
|
||
<div class="decision-chip" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<span class="chip-dot"></span>
|
||
<span>Market exit</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- CONTRADICTION ENGINE -->
|
||
<section class="contradiction-bg" id="contradiction">
|
||
<div class="lv-container">
|
||
<div>
|
||
<div class="section-label">Contradiction Engine</div>
|
||
<h2 class="section-title">Most systems tell you what the data says.<br>Landvex tells you what doesn’t add up.</h2>
|
||
<p class="section-sub">The most valuable intelligence is not confirmation. It’s contradiction. Landvex actively searches for conflicts between official narratives and observed reality.</p>
|
||
</div>
|
||
|
||
<div class="contradiction-box">
|
||
<div class="conflict-header">
|
||
<span class="conflict-flag">🚩</span>
|
||
<div>
|
||
<div class="conflict-title">Narrative Conflict Detected — London — Westfield Stratford Catchment</div>
|
||
<div class="conflict-desc">Internal sales data shows this catchment as a priority growth zone. Field observations reveal a more complex competitive picture.</div>
|
||
</div>
|
||
</div>
|
||
<div class="conflict-grid">
|
||
<div class="conflict-side conflict-official">
|
||
<div class="conflict-side-label">Official narrative</div>
|
||
<ul>
|
||
<li>𘚣 Internal: catchment growth 12% YoY</li><li>𘚣 Competitor analysis: 2 main operators</li><li>𘚣 Foot traffic model: high potential</li> </ul>
|
||
</div>
|
||
<div class="conflict-side conflict-observed">
|
||
<div class="conflict-side-label">Observed reality</div>
|
||
<ul>
|
||
<li>𘚧 <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M4 4L12 12M12 4L4 12" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/></svg> 4 additional competitors not in internal model</li><li>𘚧 <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M4 4L12 12M12 4L4 12" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/></svg> Observed foot traffic lower than modelled peak</li><li>𘚧 <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M4 4L12 12M12 4L4 12" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/></svg> 3 recent closures in primary retail zone</li><li>𘚧 <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M4 4L12 12M12 4L4 12" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/></svg> Public transport disruption affecting access</li> </ul>
|
||
</div>
|
||
</div>
|
||
<div class="conflict-footer">
|
||
<span class="conflict-footer-label">Confidence in official narrative</span>
|
||
<span class="conflict-confidence">44%</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="ce-features">
|
||
<div class="ce-feature" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="ce-icon">🔍</div>
|
||
<h4>Show me what I’m missing</h4>
|
||
<p>Blind spots not visible in official data or internal reports</p>
|
||
</div>
|
||
<div class="ce-feature" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="ce-icon">⚔️</div>
|
||
<h4>AI Red Team</h4>
|
||
<p>Every conclusion is actively challenged by a second model before delivery</p>
|
||
</div>
|
||
<div class="ce-feature" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="ce-icon">📐</div>
|
||
<h4>Which assumptions are wrong?</h4>
|
||
<p>Identify where your thesis conflicts with observed reality</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- SCORES -->
|
||
<section id="scores">
|
||
<div class="lv-container">
|
||
<div class="section-label">Intelligence scores</div>
|
||
<h2 class="section-title">Landvex scores relevant to Retail & Franchise</h2>
|
||
<p class="section-sub">Every score is derived from field-verified observations, cross-referenced against official data, and launching August 2026.</p>
|
||
<div class="scores-grid">
|
||
<div class="score-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="score-icon"></div>
|
||
<div class="score-name">Commercial Opportunity Index</div>
|
||
<div class="score-desc">Measures commercial vacancy, foot traffic, and business activity for location intelligence.</div>
|
||
<div class="score-bar-wrap">
|
||
<div class="score-bar"></div>
|
||
</div>
|
||
<div class="score-value">74</div>
|
||
<div class="score-label-sub">placeholder · live data from Aug 2026</div>
|
||
|
||
<div class="learn-more-hint">Request access →</div></div>
|
||
<div class="score-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="score-icon"></div>
|
||
<div class="score-name">Neighbourhood Quality Index</div>
|
||
<div class="score-desc">How an area is experienced — condition, activity, upkeep, and change trajectory.</div>
|
||
<div class="score-bar-wrap">
|
||
<div class="score-bar"></div>
|
||
</div>
|
||
<div class="score-value">68</div>
|
||
<div class="score-label-sub">placeholder · live data from Aug 2026</div>
|
||
|
||
<div class="learn-more-hint">Request access →</div></div>
|
||
<div class="score-card" onclick="location.href='#contact'" role="button" tabindex="0">
|
||
<div class="score-icon"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M8 2L10 8L14 9L8 14L6 8L2 7L8 2Z" fill="#666"/></svg></div>
|
||
<div class="score-name">Growth Velocity Index</div>
|
||
<div class="score-desc">How fast is an area changing? Identifies emerging zones before they appear in official statistics.</div>
|
||
<div class="score-bar-wrap">
|
||
<div class="score-bar"></div>
|
||
</div>
|
||
<div class="score-value">81</div>
|
||
<div class="score-label-sub">placeholder · live data from Aug 2026</div>
|
||
|
||
<div class="learn-more-hint">Request access →</div></div>
|
||
</div>
|
||
|
||
<div class="cta-banner">
|
||
<div class="cta-banner-text">
|
||
<h3>Four layers. One answer.</h3>
|
||
<p>quiXzoom observes. AMOS analyses. Landvex delivers the answer. Every engagement starts with one question: <em>what decision are you trying to make?</em></p>
|
||
</div>
|
||
<a class="lv-btn lv-btn--lg" href="#contact">Request a briefing →</a>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="contact">
|
||
<div class="lv-container">
|
||
<div class="contact-wrapper">
|
||
<div class="section-label">Request a briefing</div>
|
||
<h2 class="section-title">What decision are you trying to make?</h2>
|
||
<p class="section-sub">Tell us the question you need answered. We'll show you how Landvex can support it.</p>
|
||
|
||
<form class="contact-form" id="contact-form">
|
||
<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="email">Email</label>
|
||
<input type="email" id="email" name="email" placeholder="you@organisation.com" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="message">Message</label>
|
||
<textarea id="message" name="message" placeholder="Describe the decision you need to make — what you need to know, where, and why it matters..."></textarea>
|
||
</div>
|
||
<button type="submit" class="lv-btn lv-btn--lg">
|
||
Request briefing →
|
||
</button>
|
||
<p class="form-note">We don't spam. Your information stays private.</p>
|
||
<div id="form-message"></div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<p class="lv-disclaimer">Intelligence outputs are indicative and advisory only. Based on field observations — not investment, financial or legal advice. Landvex AB accepts no liability for decisions made based on these outputs. <a href="/methodology/">Methodology →</a></p>
|
||
</section>
|
||
|
||
<footer class="lv-footer" role="contentinfo">
|
||
<div class="footer-inner">
|
||
<div>
|
||
<div class="footer-logo">LandveX</div>
|
||
<div class="footer-copy">© 2026 Landvex AB · Org.nr 559141-7042 · Stockholm, Sweden</div>
|
||
<div class="footer-tagline">Decision intelligence for the physical world.</div>
|
||
</div>
|
||
<div class="footer-links">
|
||
<a href="https://landvex.com/">Home</a>
|
||
<a href="/verticals/">Verticals</a>
|
||
<a href="/methodology/">Methodology</a>
|
||
<a href="/security/">Security</a>
|
||
<a href="https://www.quixzoom.com/" target="_blank" rel="noopener">quiXzoom →</a>
|
||
<a href="mailto:contact@landvex.com">contact@landvex.com</a>
|
||
<a href="mailto:security@landvex.com" >security@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-vertical',
|
||
name: this.name.value,
|
||
email: this.email.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 = "\u2713 Request received. We'll be in touch within one business day.";
|
||
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 directly at contact@landvex.com.';
|
||
msgEl.style.display = 'block';
|
||
}
|
||
|
||
btn.disabled = false; btn.textContent = 'Request briefing →';
|
||
});
|
||
|
||
document.querySelectorAll('a[href^="#"]').forEach(a => {
|
||
a.addEventListener('click', e => {
|
||
const target = document.querySelector(a.getAttribute('href'));
|
||
if (target) { e.preventDefault(); target.scrollIntoView({ behavior: 'smooth', block: 'start' }); }
|
||
});
|
||
});
|
||
</script>
|
||
</body>
|
||
</html> |