Files
boc/landvex-all/responsible-disclosure/index.html
T
Bernt 1a12fb870b dev-api: add developer portal, OpenAPI spec, and Flatenbadet case study
- 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
2026-07-14 15:27:33 +00:00

301 lines
17 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Responsible Disclosure — Landvex</title>
<meta name="description" content="Landvex responsible disclosure policy — how to report security vulnerabilities. 48-hour response SLA, safe harbour, PGP encryption available.">
<link rel="canonical" href="https://landvex.com/responsible-disclosure/">
<meta property="og:type" content="website">
<meta property="og:url" content="https://landvex.com/responsible-disclosure/">
<meta property="og:title" content="Responsible Disclosure — Landvex">
<meta property="og:description" content="Report security vulnerabilities to Landvex. We respond within 48 hours and operate safe harbour for good-faith researchers.">
<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-light: #1d1d1f;
--text-dim: #6B6B6B;
--text-muted: #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.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); }
/* PAGE HERO */
.page-hero {
padding: 24px 80px; text-align: center;
position: relative; overflow: hidden;
}
.page-hero::before {
content: ''; position: absolute; top: -100px; left: 50%; transform: translateX(-50%);
width: 900px; height: 500px;
background: radial-gradient(ellipse at center, rgba(0,102,255,0.08) 0%, transparent 70%);
pointer-events: none;
}
.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; }
.page-hero h1 { font-size: clamp(32px, 5vw, 56px); font-weight: 800; letter-spacing: -1.5px; line-height: 1.1; color: #1d1d1f; max-width: 700px; margin: 0 auto 20px; }
.page-hero-sub { font-size: clamp(15px, 2vw, 18px); color: var(--text-dim); max-width: 520px; margin: 0 auto; line-height: 1.65; }
/* CONTENT */
section { padding: 24px; }
.container { max-width: 900px; margin: 0 auto; }
.surface-bg { background: var(--surface); }
.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(22px, 3vw, 34px); font-weight: 800; letter-spacing: -0.8px; line-height: 1.1; color: #1d1d1f; margin-bottom: 20px; }
.prose p { font-size: 16px; color: var(--text-dim); line-height: 1.8; margin-bottom: 24px; }
.prose p:last-child { margin-bottom: 0; }
.prose ul { padding-left: 24px; margin-bottom: 24px; }
.prose ul li { font-size: 15px; color: var(--text-dim); line-height: 1.7; margin-bottom: 8px; }
.prose a { color: #5599ff; text-decoration: underline; text-decoration-color: rgba(85,153,255,0.35); }
.prose a:hover { text-decoration-color: #5599ff; }
/* REPORT CARD */
.report-card {
background: var(--surface); border: 1px solid var(--border);
border-radius: var(--radius-lg); padding: 40px; margin-bottom: 40px;
}
.report-card h2 { font-size: 22px; font-weight: 700; color: #1d1d1f; margin-bottom: 12px; letter-spacing: -0.3px; }
.report-card p { font-size: 15px; color: var(--text-dim); line-height: 1.7; margin-bottom: 20px; }
.report-email {
display: inline-flex; align-items: center; gap: 16px;
background: rgba(0,102,255,0.12); border: 1px solid rgba(0,102,255,0.25);
border-radius: var(--radius-md); padding: 24px;
font-size: 16px; font-weight: 700; color: #5599ff;
font-family: 'SF Mono', 'Fira Code', 'Courier New', monospace; letter-spacing: 0.01em;
transition: background 0.2s, border-color 0.2s;
}
.report-email:hover { background: rgba(0,102,255,0.2); border-color: rgba(0,102,255,0.4); }
.pgp-note { font-size: 13px; color: rgba(0,0,0,0.75); margin-top: 12px; display: block; }
/* SLA GRID */
.sla-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-bottom: 40px; }
.sla-box { background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 24px; }
.sla-num { font-size: 2rem; font-weight: 900; color: var(--blue); letter-spacing: -0.04em; line-height: 1; margin-bottom: 6px; }
.sla-label { font-size: 13px; font-weight: 700; color: #1d1d1f; margin-bottom: 6px; }
.sla-desc { font-size: 13px; color: var(--text-dim); line-height: 1.55; }
/* POLICY CARDS */
.policy-card {
background: var(--surface-2); border: 1px solid var(--border);
border-radius: var(--radius-lg); padding: 24px; margin-bottom: 24px;
display: flex; gap: 16px; align-items: flex-start;
}
.policy-icon { flex-shrink: 0; width: 44px; height: 44px; border-radius: var(--radius-md); background: var(--blue-glow); border: 1px solid rgba(0,102,255,0.2); display: flex; align-items: center; justify-content: center; }
.policy-icon svg { color: var(--blue); }
.policy-card h3 { font-size: 16px; font-weight: 700; color: #1d1d1f; margin-bottom: 6px; }
.policy-card p { font-size: 14px; color: var(--text-dim); line-height: 1.65; margin: 0; }
/* 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 16px; } .nav-links { display: none; } .sla-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 640px) { .page-hero { padding: 24px 64px; } section { padding: 24px; } .policy-card { flex-direction: column; gap: 16px; padding: 20px; } footer { padding: 24px; } .footer-inner { flex-direction: column; text-align: center; } .footer-links { justify-content: center; gap: 16px 16px; } .sla-grid { grid-template-columns: 1fr; } }
</style>
<link rel="alternate" hreflang="x-default" href="https://landvex.com/">
<link rel="alternate" hreflang="en" href="https://landvex.com/"></head>
<body>
<nav aria-label="breadcrumb" aria-label="Main navigation">
<a href="/" >Home</a> / <span>responsible-disclosure</span>
</nav>
<nav aria-label="Main navigation">
<a href="/" class="nav-logo">Landvex</a>
<ul class="nav-links">
<li><a href="/">Platform</a></li>
<li><a href="/methodology/">Methodology</a></li>
<li><a href="/for-organisations/">For organisations</a></li>
<li></li>
</ul>
<a href="mailto:contact@landvex.com" class="btn">Contact us</a>
</nav>
<section class="page-hero">
<div class="lv-hero-eyebrow">Security</div>
<h1>Responsible Disclosure</h1>
<p class="page-hero-sub">If you have identified a potential vulnerability in Landvex systems, we want to hear from you. We take all reports seriously.</p>
</section>
<section>
<div class="lv-container">
<div class="report-card">
<h2>Report a vulnerability</h2>
<p>Send details of the vulnerability to our security team. Include a clear description, reproduction steps, affected component, and potential impact. All reports are handled confidentially.</p>
<div>
<a href="mailto:security@landvex.com" class="report-email">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" 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>
security@landvex.com
</a>
<span class="pgp-note">PGP key available on request. Reference "PGP Request" in your subject line.</span>
</div>
</div>
<div class="sla-grid">
<div class="sla-box">
<div class="sla-num">48h</div>
<div class="sla-label">Initial response</div>
<div class="sla-desc">We acknowledge all reports within 48 hours of receipt.</div>
</div>
<div class="sla-box">
<div class="sla-num">7d</div>
<div class="sla-label">Triage update</div>
<div class="sla-desc">Triage assessment and severity classification within 7 days.</div>
</div>
<div class="sla-box">
<div class="sla-num">90d</div>
<div class="sla-label">Disclosure window</div>
<div class="sla-desc">We aim to remediate and disclose confirmed issues within 90 days.</div>
</div>
</div>
<div>
<div class="section-label">Scope</div>
<div class="prose">
<p>The following are in scope for responsible disclosure:</p>
<ul>
<li>landvex.com and all subdomains</li>
<li>The Landvex platform and API (api.landvex.com)</li>
<li>Intelligence product delivery infrastructure</li>
<li>Client dashboard and authentication systems</li>
</ul>
<p>Third-party services integrated by Landvex are not in scope. Please report those directly to the respective vendor.</p>
</div>
</div>
<div>
<div class="section-label">Safe harbour</div>
<div>
<div class="policy-card">
<div class="policy-icon">
<svg width="20" height="20" 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>
</div>
<div>
<h3>No legal action against good-faith researchers</h3>
<p>Landvex will not initiate legal proceedings against researchers who identify and report vulnerabilities in accordance with this policy. Good-faith research that avoids user data exposure, system disruption, or privacy violations is protected.</p>
</div>
</div>
<div class="policy-card">
<div class="policy-icon">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>
</div>
<div>
<h3>Confidential handling</h3>
<p>We will not share your identity or contact details with any third party without your explicit consent, except where required by law.</p>
</div>
</div>
<div class="policy-card">
<div class="policy-icon">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>
</div>
<div>
<h3>What is excluded from safe harbour</h3>
<p>Research that involves accessing, modifying, or exfiltrating client or user data; disrupting platform availability; or social engineering of Landvex staff is not covered and may be subject to legal consequences.</p>
</div>
</div>
</div>
</div>
<div class="prose">
<div class="section-label">Hall of fame</div>
<div>
<p>Landvex publicly acknowledges researchers who responsibly disclose verified vulnerabilities. Recognition is made with the researcher's consent and listed on our <a href="/security/">Security page</a>.</p>
<p>Landvex does not operate a formal bug bounty programme at this time. We are grateful to every researcher who contributes to the security of our platform and the integrity of the data we serve to clients.</p>
</div>
<div>
<div class="section-label">Expectations for researchers</div>
<ul>
<li>Report vulnerabilities promptly and do not exploit them beyond what is required to demonstrate the issue</li>
<li>Do not access, modify, or retain client or user data beyond what is incidentally accessed during testing</li>
<li>Do not conduct denial-of-service attacks, spam, or social engineering</li>
<li>Allow us reasonable time to respond and remediate before public disclosure</li>
<li>Act in good faith at all times</li>
</ul>
</div>
</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 AB · Org.nr 559141-7042 · Stockholm, Sweden</div>
<div class="footer-tagline">Decision intelligence for the physical world.</div>
<div>Landvex AB · Org.nr 559141-7042<br>Stockholm, Sweden · <a href="mailto:contact@landvex.com" >contact@landvex.com</a></div>
</div>
<div class="footer-links">
<a href="/privacy/">Privacy</a>
<a href="/terms/">Terms</a>
<a href="/methodology/">Methodology</a>
<a href="/data-quality/">Data Quality</a>
<a href="/security/">Security</a>
<a href="/sla/">SLA &amp; Coverage</a>
<a href="/careers/">Careers</a>
<a href="/accessibility/">Accessibility</a>
<a href="/responsible-disclosure/" >Responsible disclosure</a>
<a href="https://www.quixzoom.com/" target="_blank" rel="noopener">quiXzoom &rarr;</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"><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"><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>