Initial commit: Korrith website, assessment API, PocketBase schema, Docker/Coolify deployment

This commit is contained in:
Korrith
2026-09-17 20:47:51 +00:00
commit c17f11f591
248 changed files with 39721 additions and 0 deletions
+197
View File
@@ -0,0 +1,197 @@
import React from 'react';
import { Helmet } from 'react-helmet';
import { Link } from 'react-router-dom';
import { motion } from 'framer-motion';
import {
ArrowRight,
BrainCircuit,
Fingerprint,
RefreshCcw,
ShieldCheck,
Crosshair,
Sparkles
} from 'lucide-react';
import LayoutWrapper from '@/components/LayoutWrapper.jsx';
import { Button } from '@/components/ui/button.jsx';
const fadeInUp = {
initial: { opacity: 0, y: 30 },
whileInView: { opacity: 1, y: 0 },
viewport: { once: true, margin: "-50px" },
transition: { duration: 0.7, ease: "easeOut" }
};
const staggerContainer = {
initial: { opacity: 0 },
whileInView: { opacity: 1 },
viewport: { once: true, margin: "-50px" },
transition: { staggerChildren: 0.15 }
};
const principles = [
{
title: "Grounded AI: no invented risk",
body: "AI in security usually means a black box that produces a confident paragraph you cannot check. We built Argus the opposite way. Every insight Argus produces is tied to a specific, verifiable finding through a grounding mechanism, so each claim carries its evidence with it. If Argus cannot point to a real finding behind a statement, it does not make the statement. The practical result: you can trust the priorities, because none of them are hallucinated, and you can click any insight and land on the exact finding that produced it.",
icon: BrainCircuit,
color: "text-purple-400",
bg: "bg-purple-500/10",
border: "border-purple-500/20"
},
{
title: "Provable authorization: the engine cannot act outside its scope",
body: "The line between an assurance product and a hacking tool is authorization. Most tools treat that line as a policy in a document. Korrith treats it as code. Active testing passes through a single gate that fails closed: it runs only when a current, cryptographically signed authorization covers that exact target and test type, in an approved window, on the agreed environment, with the kill-switch up. Anything else is denied, with a reason. There is no path for the engine to act outside the authorization you grant, and a single control halts everything instantly. This is why we can offer active validation responsibly.",
icon: Fingerprint,
color: "text-blue-400",
bg: "bg-blue-500/10",
border: "border-blue-500/20"
},
{
title: "The closed loop, with proof of resolution",
body: "Finding a problem is the easy half. Proving it is gone is the half that matters at audit time. Korrith tracks every finding through its whole life: first seen, validated as real, remediated, and verified closed by a later check that actually observed its absence. A fix is not marked done because someone clicked a button. It is shown done because Korrith looked again and the exposure was no longer there. That record is continuous, so a regression that quietly reopens is caught the same week, not at the next annual review.",
icon: RefreshCcw,
color: "text-emerald-400",
bg: "bg-emerald-500/10",
border: "border-emerald-500/20"
},
{
title: "Honest by design: never fake-clean",
body: "A security tool that reports clean when it simply could not check is worse than useless, because it sells you false confidence. Korrith reports coverage exactly as it is. Where a check could not run or a data source was unavailable, the product says so. Unverified is shown as unverified. That discipline runs through the scoring, the dashboards, and the reports, and it is the reason a Korrith report is something you can put in front of an auditor or a board without flinching.",
icon: ShieldCheck,
color: "text-amber-400",
bg: "bg-amber-500/10",
border: "border-amber-500/20"
},
{
title: "Built for the threat as it is now",
body: "Attackers use AI to find and exploit faster, and they shop a dark-web economy of stolen credentials and ready footholds. Korrith is built to meet that: external first, the way an adversary maps you, with reasoning that prioritizes by what is actually being weaponized, and a clear path to quantum-safe cryptography as that threat matures.",
icon: Crosshair,
color: "text-rose-400",
bg: "bg-rose-500/10",
border: "border-rose-500/20"
},
{
title: "What this means for you",
body: "You stop drowning in findings and start working from a short, reasoned, evidence-backed list. You can prove your security on demand. And you can trust what the tool tells you, because it refuses to tell you anything it cannot back.",
icon: Sparkles,
color: "text-primary",
bg: "bg-primary/10",
border: "border-primary/20"
}
];
export default function WhyKorrithPage() {
return (
<LayoutWrapper>
<Helmet>
<title>Why Korrith | Reasoned, Proven, Honest Security</title>
<meta
name="description"
content="Plenty of tools find problems. Korrith proves they are real, proves they are fixed, and shows its work. Here is exactly how, and why it matters."
/>
</Helmet>
{/* Hero Section */}
<section className="relative pt-32 pb-24 md:pt-48 md:pb-32 overflow-hidden border-b border-border/50 min-h-[80vh] flex items-center">
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,hsl(var(--primary)/0.15),transparent_50%)] pointer-events-none"></div>
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_bottom_left,rgba(155,77,255,0.1),transparent_50%)] pointer-events-none"></div>
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10 w-full text-center flex flex-col items-center">
<motion.div
initial={{ opacity: 0, y: 30 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.8, ease: "easeOut" }}
className="max-w-4xl flex flex-col items-center"
>
<h1 className="text-4xl md:text-6xl lg:text-7xl font-bold tracking-tight text-foreground mb-8 text-balance leading-[1.1]">
Most tools find problems.<br />
<span className="text-transparent bg-clip-text bg-gradient-to-r from-primary to-purple-400">
Korrith proves them.
</span>
</h1>
<p className="text-xl md:text-2xl text-muted-foreground leading-relaxed max-w-3xl text-balance">
Korrith was built to close the gap between a finding and the truth: is it real, and is it actually fixed. Everything below is a design decision we made on purpose, because security you cannot prove is just a feeling.
</p>
</motion.div>
</div>
</section>
{/* Core Principles (Numbered List Layout) */}
<section className="py-24 md:py-32 bg-background relative overflow-hidden">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
<div className="flex flex-col gap-20 md:gap-32">
{principles.map((principle, index) => {
const Icon = principle.icon;
return (
<motion.div
key={index}
variants={fadeInUp}
initial="initial"
whileInView="whileInView"
className="flex flex-col md:flex-row gap-8 lg:gap-16 items-start group"
>
{/* Decorative Number */}
<div className="hidden md:block w-32 shrink-0">
<div className="text-7xl lg:text-8xl font-black text-foreground/[0.03] select-none font-mono leading-none tracking-tighter group-hover:text-primary/10 transition-colors duration-500">
{(index + 1).toString().padStart(2, '0')}
</div>
</div>
{/* Content Card */}
<div className="flex-1 bg-card border border-border p-8 md:p-12 rounded-3xl hover:bg-secondary/40 transition-colors relative overflow-hidden">
<div className="absolute top-0 right-0 w-64 h-64 bg-primary/5 rounded-full blur-3xl pointer-events-none transition-opacity group-hover:bg-primary/10"></div>
<div className="flex items-center gap-4 mb-8 relative z-10">
<div className="md:hidden text-4xl font-black text-foreground/[0.05] select-none font-mono leading-none tracking-tighter mr-2">
{(index + 1).toString().padStart(2, '0')}
</div>
<div className={`w-14 h-14 rounded-2xl ${principle.bg} border ${principle.border} flex items-center justify-center shrink-0`}>
<Icon className={`w-7 h-7 ${principle.color}`} />
</div>
</div>
<h2 className="text-3xl md:text-4xl font-bold text-foreground mb-6 text-balance relative z-10">
{principle.title}
</h2>
<p className="text-xl text-muted-foreground leading-relaxed relative z-10 max-w-[65ch]">
{principle.body}
</p>
</div>
</motion.div>
);
})}
</div>
</div>
</section>
{/* CTA Section */}
<section className="py-32 bg-secondary/20 border-t border-border/50 relative overflow-hidden">
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_center,hsl(var(--primary)/0.1),transparent_50%)] pointer-events-none"></div>
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center relative z-10">
<motion.div
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.6 }}
>
<h2 className="text-4xl md:text-5xl font-bold text-foreground mb-6 text-balance">
Stop guessing. Start proving.
</h2>
<p className="text-xl text-muted-foreground leading-relaxed mb-10 text-balance max-w-2xl mx-auto">
Experience the platform built to prioritize truth over noise, and evidence over assumptions.
</p>
<Button asChild size="lg" className="h-14 px-10 text-base font-semibold shadow-[0_0_30px_-5px_hsl(var(--primary)/0.4)] hover:shadow-[0_0_40px_-5px_hsl(var(--primary)/0.6)] transition-all group">
<Link to="/assessment">
Get a free assessment
<ArrowRight className="ml-2 h-5 w-5 group-hover:translate-x-1 transition-transform" />
</Link>
</Button>
</motion.div>
</div>
</section>
</LayoutWrapper>
);
}