Files
boc/aamos-ai-site/reality-alerts/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

214 lines
12 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>Reality Alerts API — AI-Verified Field Intelligence | AAMOS</title>
<meta name="description" content="Real-world observations from the field, AI-verified and automatically routed. REST API for municipalities, insurers, and utilities.">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--navy: #0A2540; --blue: #635BFF; --blue-light: #7B74FF;
--gray-50: #F8FAFC; --gray-100: #F1F5F9; --gray-200: #E2E8F0;
--gray-400: #94A3B8; --gray-600: #475569; --gray-800: #1E293B; --white: #FFFFFF;
--font: 'Inter', system-ui, -apple-system, sans-serif;
}
body { font-family: var(--font); background: var(--white); color: var(--gray-800); line-height: 1.6; }
a { color: inherit; text-decoration: none; }
nav {
position: sticky; top: 0; z-index: 100;
background: rgba(255,255,255,0.95); backdrop-filter: blur(8px);
border-bottom: 1px solid var(--gray-200);
padding: 0 24px; height: 60px;
display: flex; align-items: center; justify-content: space-between;
}
.nav-logo { font-size: 18px; font-weight: 700; color: var(--navy); }
.nav-logo span { color: var(--blue); }
.nav-back { font-size: 14px; color: var(--gray-600); }
.btn-nav { background: var(--navy); color: var(--white); padding: 8px 16px; border-radius: 8px; font-weight: 600; font-size: 14px; }
.hero {
background: linear-gradient(135deg, #0d1f3c 0%, #1a3a60 100%);
color: var(--white); padding: 72px 24px 64px; text-align: center;
}
.hero-badge {
display: inline-block; background: rgba(99,91,255,0.25); color: #a5b4fc;
border: 1px solid rgba(99,91,255,0.4); border-radius: 100px;
padding: 4px 14px; font-size: 12px; font-weight: 600;
letter-spacing: 0.05em; text-transform: uppercase; margin-bottom: 20px;
}
.hero h1 { font-size: clamp(28px, 5vw, 46px); font-weight: 700; letter-spacing: -1px; line-height: 1.1; margin-bottom: 16px; }
.hero p { font-size: 17px; color: rgba(255,255,255,0.75); max-width: 500px; margin: 0 auto 32px; }
.btn-primary { background: var(--blue); color: var(--white); padding: 14px 28px; border-radius: 10px; font-size: 15px; font-weight: 600; display: inline-block; transition: background 0.15s; }
.btn-primary:hover { background: var(--blue-light); }
.content { max-width: 860px; margin: 0 auto; padding: 64px 24px; }
.block { margin-bottom: 60px; }
.block-label { font-size: 12px; font-weight: 700; color: var(--blue); letter-spacing: 0.1em; text-transform: uppercase; margin-bottom: 12px; }
.block h2 { font-size: clamp(22px, 3.5vw, 30px); font-weight: 700; letter-spacing: -0.5px; color: var(--navy); margin-bottom: 24px; }
.feature-list { display: grid; gap: 16px; }
.feature-item { display: flex; gap: 16px; align-items: flex-start; padding: 20px; background: var(--gray-50); border-radius: 12px; border: 1px solid var(--gray-200); }
.feature-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--blue); margin-top: 7px; flex-shrink: 0; }
.feature-item h4 { font-size: 15px; font-weight: 600; color: var(--navy); margin-bottom: 4px; }
.feature-item p { font-size: 14px; color: var(--gray-600); }
.code-block {
background: var(--navy); border-radius: 14px; padding: 24px;
font-family: 'SF Mono', 'Fira Code', monospace; font-size: 13px;
line-height: 1.75; color: rgba(255,255,255,0.85); overflow-x: auto;
}
.code-block .kw { color: #a5b4fc; }
.code-block .str { color: #86efac; }
.code-block .cm { color: rgba(255,255,255,0.4); }
.code-block .num { color: #fcd34d; }
.pricing-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px; }
.price-card { border: 1px solid var(--gray-200); border-radius: 16px; padding: 28px 24px; display: flex; flex-direction: column; }
.price-card.featured { border-color: var(--blue); box-shadow: 0 0 0 3px rgba(99,91,255,0.1); }
.price-tier { font-size: 13px; font-weight: 700; color: var(--blue); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 8px; }
.price-amount { font-size: 32px; font-weight: 700; color: var(--navy); letter-spacing: -1px; }
.price-amount span { font-size: 15px; font-weight: 500; color: var(--gray-400); }
.price-desc { font-size: 13px; color: var(--gray-400); margin-top: 4px; margin-bottom: 20px; }
.price-features { list-style: none; display: flex; flex-direction: column; gap: 10px; flex: 1; margin-bottom: 24px; }
.price-features li { font-size: 14px; color: var(--gray-600); display: flex; align-items: center; gap: 8px; }
.price-features li::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--blue); flex-shrink: 0; }
.btn-outline { border: 1px solid var(--gray-200); border-radius: 8px; padding: 10px 16px; font-size: 14px; font-weight: 600; color: var(--navy); text-align: center; display: block; transition: border-color 0.15s; }
.btn-outline:hover { border-color: var(--blue); }
.btn-filled { background: var(--blue); border-radius: 8px; padding: 10px 16px; font-size: 14px; font-weight: 600; color: white; text-align: center; display: block; }
.cta-bottom { background: var(--navy); color: var(--white); padding: 64px 24px; text-align: center; }
.cta-bottom h2 { font-size: clamp(22px, 4vw, 32px); font-weight: 700; letter-spacing: -0.5px; margin-bottom: 14px; }
.cta-bottom p { color: rgba(255,255,255,0.7); font-size: 16px; margin-bottom: 28px; max-width: 400px; margin-left: auto; margin-right: auto; }
footer { border-top: 1px solid var(--gray-200); padding: 24px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; font-size: 13px; color: var(--gray-400); }
footer a { color: var(--gray-400); }
.footer-links { display: flex; gap: 20px; }
</style>
</head>
<body>
<nav>
<a href="/" class="nav-logo">A<span>AMOS</span></a>
<a href="/" class="nav-back">← All products</a>
<a href="#" class="btn-nav">Get API key</a>
</nav>
<section class="hero">
<div class="hero-badge">Real-world data</div>
<h1>Reality Alerts API</h1>
<p>Real-world alerts, verified by AI, routed automatically. Field intelligence delivered to your systems in real time.</p>
<a href="#" class="btn-primary">Get API key — free tier included</a>
</section>
<div class="content">
<div class="block">
<div class="block-label">What it does</div>
<h2>Ground truth from the field. AI-verified before it reaches you.</h2>
<div class="feature-list">
<div class="feature-item">
<div class="feature-dot"></div>
<div>
<h4>AI-verified observations</h4>
<p>Every alert submitted by a field observer is validated by our AI — image quality, metadata consistency, liveness — before it reaches your endpoint.</p>
</div>
</div>
<div class="feature-item">
<div class="feature-dot"></div>
<div>
<h4>Automatic routing</h4>
<p>Alerts are matched to the responsible owner based on geolocation, category, and asset registry. No manual dispatch required.</p>
</div>
</div>
<div class="feature-item">
<div class="feature-dot"></div>
<div>
<h4>Severity scoring</h4>
<p>Each alert carries a severity score (01), category tags, and estimated urgency — ready to plug into your incident or ticketing system.</p>
</div>
</div>
<div class="feature-item">
<div class="feature-dot"></div>
<div>
<h4>Webhook delivery</h4>
<p>Configure your endpoint once. Alerts arrive as structured JSON payloads the moment they pass verification — no polling required.</p>
</div>
</div>
</div>
</div>
<div class="block">
<div class="block-label">API example</div>
<h2>Subscribe to alerts. Receive verified reality.</h2>
<div class="code-block">
<span class="cm"># Register your webhook endpoint</span><br>
<span class="kw">curl</span> -X POST https://api.aamos.ai/v1/reality-alerts/subscriptions \<br>
&nbsp;&nbsp;-H <span class="str">"Authorization: Bearer ***"</span> \<br>
&nbsp;&nbsp;-H <span class="str">"Content-Type: application/json"</span> \<br>
&nbsp;&nbsp;-d '{<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="str">"webhook_url"</span>: <span class="str">"https://yourapp.com/webhooks/alerts"</span>,<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="str">"categories"</span>: [<span class="str">"infrastructure"</span>, <span class="str">"flooding"</span>, <span class="str">"damage"</span>],<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="str">"bbox"</span>: [<span class="num">17.8</span>, <span class="num">59.2</span>, <span class="num">18.3</span>, <span class="num">59.5</span>]<br>
&nbsp;&nbsp;}'<br><br>
<span class="cm"># Incoming webhook payload (verified alert)</span><br>
{<br>
&nbsp;&nbsp;<span class="str">"alert_id"</span>: <span class="str">"alt_9x8y7z"</span>,<br>
&nbsp;&nbsp;<span class="str">"category"</span>: <span class="str">"infrastructure"</span>,<br>
&nbsp;&nbsp;<span class="str">"subcategory"</span>: <span class="str">"road_damage"</span>,<br>
&nbsp;&nbsp;<span class="str">"severity"</span>: <span class="num">0.87</span>,<br>
&nbsp;&nbsp;<span class="str">"verified"</span>: <span class="kw">true</span>,<br>
&nbsp;&nbsp;<span class="str">"lat"</span>: <span class="num">59.3341</span>, <span class="str">"lng"</span>: <span class="num">18.0632</span>,<br>
&nbsp;&nbsp;<span class="str">"image_url"</span>: <span class="str">"https://cdn.aamos.ai/..."</span>,<br>
&nbsp;&nbsp;<span class="str">"responsible_entity"</span>: <span class="str">"Stockholm municipality"</span>,<br>
&nbsp;&nbsp;<span class="str">"observed_at"</span>: <span class="str">"2026-07-11T09:14:02Z"</span><br>
}
</div>
</div>
<div class="block">
<div class="block-label">Pricing</div>
<h2>Pay for verified alerts. Not noise.</h2>
<div class="pricing-grid">
<div class="price-card">
<div class="price-tier">Free</div>
<div class="price-amount">$0 <span>/mo</span></div>
<div class="price-desc">50 verified alerts / month</div>
<ul class="price-features">
<li>50 alerts / month</li>
<li>Webhook delivery</li>
<li>All categories</li>
<li>Community support</li>
</ul>
<a href="#" class="btn-outline">Get started</a>
</div>
<div class="price-card featured">
<div class="price-tier">Starter</div>
<div class="price-amount">$149 <span>/mo</span></div>
<div class="price-desc">2,000 verified alerts / month</div>
<ul class="price-features">
<li>2,000 alerts / month</li>
<li>Geographic bounding box filter</li>
<li>Category + severity filters</li>
<li>Asset registry integration</li>
<li>Email support</li>
</ul>
<a href="#" class="btn-filled">Get started</a>
</div>
<div class="price-card">
<div class="price-tier">Pro</div>
<div class="price-amount">$699 <span>/mo</span></div>
<div class="price-desc">Unlimited alerts + SLA</div>
<ul class="price-features">
<li>Unlimited alerts</li>
<li>Custom routing rules</li>
<li>Priority queue</li>
<li>99.9% SLA</li>
<li>Dedicated support</li>
</ul>
<a href="#" class="btn-outline">Get started</a>
</div>
</div>
</div>
</div>
<section class="cta-bottom">
<h2>Ready to receive verified field intelligence?</h2>
<p>Set up your webhook. Start receiving alerts in minutes.</p>
<a href="#" class="btn-primary">Get API key</a>
</section>
<footer>
<span>© 2026 AAMOS / Landvex AB</span>
<div class="footer-links"><a href="#">Privacy</a><a href="#">Terms</a><a href="/">Home</a></div>
</footer>
</body>
</html>