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

261 lines
14 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>AAMOS Modules — Enterprise APIs | AAMOS</title>
<meta name="description" content="Production-grade enterprise modules from AAMOS — Incident Management and AI Image Deviation Engine. Battle-tested at scale. Available as REST APIs.">
<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: 540px; margin: 0 auto 32px; }
.origin-strip {
display: inline-flex; align-items: center; gap: 10px;
background: rgba(255,255,255,0.07); border: 1px solid rgba(255,255,255,0.12);
border-radius: 10px; padding: 12px 20px; margin-top: 28px;
font-size: 13px; color: rgba(255,255,255,0.65); max-width: 480px;
}
.origin-dot { width: 8px; height: 8px; border-radius: 50%; background: #4ade80; flex-shrink: 0; }
.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; }
.module-cards { display: grid; gap: 20px; }
.module-card {
border: 1px solid var(--gray-200); border-radius: 16px; padding: 28px 24px;
background: var(--white);
}
.module-header { display: flex; align-items: center; gap: 16px; margin-bottom: 16px; }
.module-icon {
width: 44px; height: 44px; border-radius: 12px; flex-shrink: 0;
background: linear-gradient(135deg, var(--blue) 0%, #4f46e5 100%);
display: flex; align-items: center; justify-content: center;
}
.module-icon svg { width: 22px; height: 22px; fill: none; stroke: white; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.module-name { font-size: 18px; font-weight: 700; color: var(--navy); }
.module-tag { font-size: 11px; font-weight: 600; color: var(--blue); background: rgba(99,91,255,0.08); border-radius: 4px; padding: 2px 8px; }
.module-desc { font-size: 15px; color: var(--gray-600); margin-bottom: 20px; }
.module-features { list-style: none; display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 10px; }
.module-features li { font-size: 14px; color: var(--gray-600); display: flex; align-items: center; gap: 8px; }
.module-features li::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--blue); flex-shrink: 0; }
.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;
margin-top: 20px;
}
.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: 440px; 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">Enterprise</div>
<h1>AAMOS Modules</h1>
<p>Enterprise-grade modules from our own production stack. Battle-tested across 300+ microservices. Available as clean REST APIs.</p>
<a href="#" class="btn-primary">Get API key — free tier included</a>
<div>
<div class="origin-strip">
<div class="origin-dot"></div>
These modules run Landvex's own operations. You're buying the same infrastructure we run on.
</div>
</div>
</section>
<div class="content">
<div class="block">
<div class="block-label">Available modules</div>
<h2>Two modules. Production-ready today.</h2>
<div class="module-cards">
<div class="module-card">
<div class="module-header">
<div class="module-icon">
<svg viewBox="0 0 24 24"><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>
<div class="module-tag">Incident Management</div>
<div class="module-name">Incident API</div>
</div>
</div>
<p class="module-desc">Structured incident lifecycle management — from detection to resolution. Full API with webhook events, priority queuing, assignment, and audit trail.</p>
<ul class="module-features">
<li>Create and track incidents</li>
<li>Priority levels + SLA timers</li>
<li>Assignment and ownership</li>
<li>Status transitions + webhooks</li>
<li>Comment threads</li>
<li>Full audit log</li>
<li>Integrates with any ticketing system</li>
<li>REST + webhook delivery</li>
</ul>
<div class="code-block">
<span class="cm"># Create an incident</span><br>
<span class="kw">curl</span> -X POST https://api.aamos.ai/v1/incident/incidents \<br>
&nbsp;&nbsp;-H <span class="str">"Authorization: Bearer ***"</span> \<br>
&nbsp;&nbsp;-d '{<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="str">"title"</span>: <span class="str">"Water leak detected — Block 4B"</span>,<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="str">"priority"</span>: <span class="str">"high"</span>,<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="str">"source"</span>: <span class="str">"vims-api"</span>,<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="str">"assignee_group"</span>: <span class="str">"maintenance-east"</span><br>
&nbsp;&nbsp;}'<br><br>
{ <span class="str">"incident_id"</span>: <span class="str">"inc_7f3a9b"</span>, <span class="str">"status"</span>: <span class="str">"open"</span>, <span class="str">"sla_deadline"</span>: <span class="str">"..."</span> }
</div>
</div>
<div class="module-card">
<div class="module-header">
<div class="module-icon">
<svg viewBox="0 0 24 24"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18M9 21V9"/></svg>
</div>
<div>
<div class="module-tag">Vision AI</div>
<div class="module-name">AI Image Deviation Engine</div>
</div>
</div>
<p class="module-desc">Submit any image against a stored baseline — get back a structured deviation report. Pixel-level and semantic analysis. Designed for quality control, inspection workflows, and asset monitoring.</p>
<ul class="module-features">
<li>Baseline storage per asset ID</li>
<li>Deviation score (01)</li>
<li>Semantic change classification</li>
<li>Region-of-interest masks</li>
<li>Batch processing</li>
<li>Confidence thresholds</li>
<li>Works on any image type</li>
<li>Integrates with VIMS API</li>
</ul>
<div class="code-block">
<span class="cm"># Compare image to stored baseline</span><br>
<span class="kw">curl</span> -X POST https://api.aamos.ai/v1/deviation/compare \<br>
&nbsp;&nbsp;-H <span class="str">"Authorization: Bearer ***"</span> \<br>
&nbsp;&nbsp;-F <span class="str">"image=@current.jpg"</span> \<br>
&nbsp;&nbsp;-F <span class="str">"asset_id=warehouse-roof-7"</span><br><br>
{<br>
&nbsp;&nbsp;<span class="str">"asset_id"</span>: <span class="str">"warehouse-roof-7"</span>,<br>
&nbsp;&nbsp;<span class="str">"deviation_score"</span>: <span class="num">0.63</span>,<br>
&nbsp;&nbsp;<span class="str">"change_type"</span>: <span class="str">"structural"</span>,<br>
&nbsp;&nbsp;<span class="str">"regions"</span>: [{ <span class="str">"label"</span>: <span class="str">"crack"</span>, <span class="str">"area_pct"</span>: <span class="num">4.2</span> }],<br>
&nbsp;&nbsp;<span class="str">"recommend_action"</span>: <span class="str">"schedule_inspection"</span><br>
}
</div>
</div>
</div>
</div>
<div class="block">
<div class="block-label">Pricing</div>
<h2>One plan. Both modules included.</h2>
<div class="pricing-grid">
<div class="price-card">
<div class="price-tier">Starter</div>
<div class="price-amount">$199 <span>/mo</span></div>
<div class="price-desc">Both modules included</div>
<ul class="price-features">
<li>500 incidents / month</li>
<li>1,000 deviation analyses / month</li>
<li>Webhook events</li>
<li>Email support</li>
</ul>
<a href="#" class="btn-outline">Get started</a>
</div>
<div class="price-card featured">
<div class="price-tier">Pro</div>
<div class="price-amount">$799 <span>/mo</span></div>
<div class="price-desc">High volume + SLA</div>
<ul class="price-features">
<li>Unlimited incidents</li>
<li>50,000 deviation analyses / month</li>
<li>Custom asset models</li>
<li>Priority support</li>
<li>99.9% SLA</li>
<li>Audit export</li>
</ul>
<a href="#" class="btn-filled">Get started</a>
</div>
<div class="price-card">
<div class="price-tier">Enterprise</div>
<div class="price-amount">Custom</div>
<div class="price-desc">Volume + dedicated infra</div>
<ul class="price-features">
<li>Unlimited everything</li>
<li>On-premise option</li>
<li>Custom model training</li>
<li>SLA to 99.99%</li>
<li>Dedicated account manager</li>
</ul>
<a href="mailto:sales@aamos.ai" class="btn-outline">Contact sales</a>
</div>
</div>
</div>
</div>
<section class="cta-bottom">
<h2>Ready to integrate enterprise-grade modules?</h2>
<p>Start with Starter. We're running these in production — so you don't have to prove they work.</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>