2026-06-14 16:50:20 +08:00
|
|
|
---
|
2026-06-15 21:55:00 +08:00
|
|
|
const aiTools = [
|
|
|
|
|
"Remove Background",
|
|
|
|
|
"Image Upscaling",
|
|
|
|
|
"Face / PII Blur",
|
|
|
|
|
"Object Eraser",
|
|
|
|
|
"OCR / Text Extraction",
|
|
|
|
|
"PDF OCR",
|
|
|
|
|
"AI Colorization",
|
|
|
|
|
"Face Enhancement",
|
|
|
|
|
"Noise Removal",
|
|
|
|
|
"Smart Crop",
|
|
|
|
|
"Red Eye Removal",
|
|
|
|
|
"Photo Restoration",
|
|
|
|
|
"Passport Photo",
|
|
|
|
|
"PNG Transparency Fixer",
|
|
|
|
|
"AI Canvas Expand",
|
|
|
|
|
"Transcribe Audio",
|
|
|
|
|
"Auto Subtitles",
|
|
|
|
|
"Background Replace",
|
|
|
|
|
"Blur Background",
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const aiPillColors = [
|
|
|
|
|
"border-purple-200 bg-purple-50 text-purple-700",
|
|
|
|
|
"border-blue-200 bg-blue-50 text-blue-700",
|
|
|
|
|
"border-emerald-200 bg-emerald-50 text-emerald-700",
|
|
|
|
|
"border-amber-200 bg-amber-50 text-amber-700",
|
|
|
|
|
"border-rose-200 bg-rose-50 text-rose-700",
|
|
|
|
|
"border-slate-200 bg-slate-50 text-slate-700",
|
|
|
|
|
];
|
2026-06-14 16:50:20 +08:00
|
|
|
---
|
|
|
|
|
|
|
|
|
|
<section class="px-6 py-20 md:py-28">
|
2026-06-15 21:55:00 +08:00
|
|
|
<div class="reveal mx-auto mb-16 max-w-3xl text-center md:mb-20">
|
|
|
|
|
<span class="inline-flex items-center gap-2 rounded-full border border-primary/20 bg-primary/5 px-4 py-1.5 text-xs font-semibold uppercase tracking-[0.2em] text-primary-dark">
|
|
|
|
|
<svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>
|
|
|
|
|
Data sovereignty
|
|
|
|
|
</span>
|
|
|
|
|
<h2 class="mt-6 font-display text-3xl font-bold tracking-tight sm:text-4xl md:text-5xl">
|
|
|
|
|
Built for regulated environments.
|
|
|
|
|
</h2>
|
|
|
|
|
<p class="mt-4 text-lg leading-relaxed text-muted md:text-xl">
|
|
|
|
|
Your files stay on your infrastructure. No third-party processing, no data transfer risk.
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
2026-06-14 16:50:20 +08:00
|
|
|
|
|
|
|
|
<div class="mx-auto max-w-6xl space-y-20 md:space-y-28">
|
|
|
|
|
|
|
|
|
|
<!-- Feature 1: Data Sovereignty — text left, visual right -->
|
|
|
|
|
<div class="reveal grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-16 items-center">
|
|
|
|
|
<div class="md:order-1">
|
2026-06-15 21:55:00 +08:00
|
|
|
<span class="font-mono text-xs font-semibold uppercase tracking-[0.15em] text-primary">01 / Architecture</span>
|
|
|
|
|
<h3 class="mt-3 font-display text-2xl font-bold tracking-tight sm:text-3xl">
|
2026-06-14 16:50:20 +08:00
|
|
|
Compliant by architecture
|
|
|
|
|
</h3>
|
|
|
|
|
<p class="mt-4 text-base leading-relaxed text-muted">
|
|
|
|
|
No vendor DPAs. No data processing agreements. No third-party risk assessments.
|
|
|
|
|
Files are processed on your infrastructure and never transmitted to external services.
|
|
|
|
|
GDPR, HIPAA, and CCPA compliant from day one.
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="md:order-2">
|
|
|
|
|
<div class="rounded-xl border border-border bg-surface p-6 md:p-8">
|
|
|
|
|
<!-- Outer infrastructure box -->
|
|
|
|
|
<div class="rounded-lg border-2 border-dashed border-primary/30 p-5">
|
|
|
|
|
<span class="mb-4 block text-xs font-semibold uppercase tracking-wider text-primary">Your Infrastructure</span>
|
|
|
|
|
<div class="grid grid-cols-2 gap-4">
|
|
|
|
|
<div class="flex flex-col items-center gap-2 rounded-lg bg-primary-subtle p-4">
|
|
|
|
|
<svg class="h-8 w-8 text-primary" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
|
|
|
|
<rect x="2" y="3" width="20" height="18" rx="2" />
|
|
|
|
|
<path d="M8 12h8M8 16h5" />
|
|
|
|
|
<circle cx="18" cy="7" r="1" fill="currentColor" />
|
|
|
|
|
</svg>
|
|
|
|
|
<span class="text-xs font-semibold text-primary">SnapOtter</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="flex flex-col items-center gap-2 rounded-lg bg-primary-subtle p-4">
|
|
|
|
|
<svg class="h-8 w-8 text-primary" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
|
|
|
|
<path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z" />
|
|
|
|
|
<polyline points="13 2 13 9 20 9" />
|
|
|
|
|
</svg>
|
|
|
|
|
<span class="text-xs font-semibold text-primary">Your Files</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- Internal arrows -->
|
|
|
|
|
<div class="mt-4 flex items-center justify-center gap-2">
|
|
|
|
|
<svg class="h-4 w-20 text-primary/50" viewBox="0 0 80 16" fill="none" stroke="currentColor" stroke-width="1.5">
|
|
|
|
|
<line x1="8" y1="8" x2="32" y2="8" />
|
|
|
|
|
<polygon points="30,4 38,8 30,12" fill="currentColor" stroke="none" />
|
|
|
|
|
<line x1="42" y1="8" x2="66" y2="8" />
|
|
|
|
|
<polygon points="48,12 40,8 48,4" fill="currentColor" stroke="none" />
|
|
|
|
|
</svg>
|
|
|
|
|
</div>
|
|
|
|
|
<p class="mt-3 text-center text-xs text-muted">Data never leaves this boundary</p>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- External cloud — blocked -->
|
|
|
|
|
<div class="mt-4 flex items-center justify-center gap-3 rounded-lg border border-danger/20 bg-danger/5 px-4 py-2.5">
|
|
|
|
|
<svg class="h-4 w-4 shrink-0 text-danger" 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="4.93" y1="4.93" x2="19.07" y2="19.07" />
|
|
|
|
|
</svg>
|
|
|
|
|
<span class="text-xs text-danger">No external cloud connections</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Feature 2: REST API — visual left, text right -->
|
|
|
|
|
<div class="reveal grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-16 items-center">
|
|
|
|
|
<div class="md:order-2">
|
2026-06-15 21:55:00 +08:00
|
|
|
<span class="font-mono text-xs font-semibold uppercase tracking-[0.15em] text-primary">02 / Automation</span>
|
|
|
|
|
<h3 class="mt-3 font-display text-2xl font-bold tracking-tight sm:text-3xl">
|
2026-06-14 16:50:20 +08:00
|
|
|
Integrate with your existing workflows
|
|
|
|
|
</h3>
|
|
|
|
|
<p class="mt-4 text-base leading-relaxed text-muted">
|
|
|
|
|
Full REST API with OpenAPI documentation for every tool. Chain tools into automated
|
|
|
|
|
pipelines. Batch process thousands of files. Trigger via webhooks and integrate
|
|
|
|
|
with your internal systems.
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="md:order-1">
|
|
|
|
|
<pre class="code-block p-5"><span class="code-comment"># Resize an image via the API</span>
|
|
|
|
|
<span class="code-url">$</span> curl <span class="code-flag">-X POST</span> <span class="code-url">localhost:1349/api/v1/tools/resize</span> \
|
|
|
|
|
<span class="code-flag">-F</span> <span class="code-string">"file=@photo.jpg"</span> \
|
|
|
|
|
<span class="code-flag">-F</span> <span class="code-string">'settings={"width":800}'</span>
|
|
|
|
|
|
|
|
|
|
<span class="code-comment"># Response</span>
|
|
|
|
|
{
|
|
|
|
|
<span class="code-flag">"jobId"</span>: <span class="code-string">"abc123"</span>,
|
|
|
|
|
<span class="code-flag">"downloadUrl"</span>: <span class="code-string">"/api/v1/jobs/abc123/download"</span>
|
|
|
|
|
}</pre>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Feature 3: AI Models — text left, visual right -->
|
|
|
|
|
<div class="reveal grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-16 items-center">
|
|
|
|
|
<div class="md:order-1">
|
2026-06-15 21:55:00 +08:00
|
|
|
<span class="font-mono text-xs font-semibold uppercase tracking-[0.15em] text-primary">03 / Local AI</span>
|
|
|
|
|
<h3 class="mt-3 font-display text-2xl font-bold tracking-tight sm:text-3xl">
|
2026-06-14 16:50:20 +08:00
|
|
|
AI processing without external APIs
|
|
|
|
|
</h3>
|
|
|
|
|
<p class="mt-4 text-base leading-relaxed text-muted">
|
2026-06-15 21:55:00 +08:00
|
|
|
19 local AI tools for OCR, transcription, background removal, upscaling, and more.
|
2026-06-14 16:50:20 +08:00
|
|
|
No external API keys, no per-request charges, no data sent to third-party AI providers.
|
|
|
|
|
Runs on your GPU or CPU within your own infrastructure.
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="md:order-2">
|
|
|
|
|
<div class="flex flex-wrap gap-2.5">
|
2026-06-15 21:55:00 +08:00
|
|
|
{aiTools.map((tool, i) => (
|
|
|
|
|
<span class:list={["inline-flex items-center rounded-full border px-3.5 py-1.5 text-sm font-medium", aiPillColors[i % aiPillColors.length]]}>
|
|
|
|
|
{tool}
|
|
|
|
|
</span>
|
|
|
|
|
))}
|
2026-06-14 16:50:20 +08:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Feature 4: Deployment — visual left, text right -->
|
|
|
|
|
<div class="reveal grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-16 items-center">
|
|
|
|
|
<div class="md:order-2">
|
2026-06-15 21:55:00 +08:00
|
|
|
<span class="font-mono text-xs font-semibold uppercase tracking-[0.15em] text-primary">04 / Deployment</span>
|
|
|
|
|
<h3 class="mt-3 font-display text-2xl font-bold tracking-tight sm:text-3xl">
|
2026-06-14 16:50:20 +08:00
|
|
|
Fits your infrastructure
|
|
|
|
|
</h3>
|
|
|
|
|
<p class="mt-4 text-base leading-relaxed text-muted">
|
2026-06-15 21:55:00 +08:00
|
|
|
One Docker Compose stack with Postgres and Redis bundled in. Deploy on Kubernetes,
|
|
|
|
|
bare metal, or cloud VMs. ARM and x86 architectures. Works in air-gapped and classified
|
2026-06-14 16:50:20 +08:00
|
|
|
environments with zero internet dependency.
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="md:order-1">
|
|
|
|
|
<div class="grid grid-cols-3 gap-3">
|
|
|
|
|
<!-- Docker -->
|
|
|
|
|
<div class="flex flex-col items-center gap-2 rounded-xl border border-border bg-surface p-4 transition-shadow hover:shadow-md">
|
|
|
|
|
<img src="/logos/docker.svg" alt="Docker" class="h-8 w-8" width="32" height="32" />
|
|
|
|
|
<span class="text-xs font-medium">Docker</span>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- Kubernetes -->
|
|
|
|
|
<div class="flex flex-col items-center gap-2 rounded-xl border border-border bg-surface p-4 transition-shadow hover:shadow-md">
|
|
|
|
|
<img src="/logos/kubernetes.svg" alt="Kubernetes" class="h-8 w-8" width="32" height="32" />
|
|
|
|
|
<span class="text-xs font-medium">Kubernetes</span>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- AWS -->
|
|
|
|
|
<div class="flex flex-col items-center gap-2 rounded-xl border border-border bg-surface p-4 transition-shadow hover:shadow-md">
|
|
|
|
|
<img src="/logos/aws.svg" alt="AWS" class="h-8 w-8" width="32" height="32" />
|
|
|
|
|
<span class="text-xs font-medium">AWS</span>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- Linux -->
|
|
|
|
|
<div class="flex flex-col items-center gap-2 rounded-xl border border-border bg-surface p-4 transition-shadow hover:shadow-md">
|
|
|
|
|
<img src="/logos/linux.svg" alt="Linux" class="h-8 w-8" width="32" height="32" />
|
|
|
|
|
<span class="text-xs font-medium">Linux</span>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- macOS -->
|
|
|
|
|
<div class="flex flex-col items-center gap-2 rounded-xl border border-border bg-surface p-4 transition-shadow hover:shadow-md">
|
|
|
|
|
<svg class="h-8 w-8 text-foreground" viewBox="0 0 24 24" fill="currentColor">
|
|
|
|
|
<path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z"/>
|
|
|
|
|
</svg>
|
|
|
|
|
<span class="text-xs font-medium">macOS</span>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- Air-Gapped -->
|
|
|
|
|
<div class="flex flex-col items-center gap-2 rounded-xl border border-border bg-surface p-4 transition-shadow hover:shadow-md">
|
|
|
|
|
<svg class="h-8 w-8 text-primary" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
|
|
|
|
<rect x="3" y="11" width="18" height="11" rx="2" ry="2" />
|
|
|
|
|
<path d="M7 11V7a5 5 0 0 1 10 0v4" />
|
|
|
|
|
</svg>
|
|
|
|
|
<span class="text-xs font-medium">Air-Gapped</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</section>
|