Initial commit: CI Agent competitive-intelligence monitoring app
FastAPI + Celery + Next.js + Postgres/Redis app with company monitoring, source collection, LLM-based change analysis, enrichment, and account security (Turnstile, escalating lockout, email verification).
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
"use client";
|
||||
|
||||
import Link from "next/link";
|
||||
import { Building2, LineChart, Mail, Radar, ShieldCheck, Sparkles } from "lucide-react";
|
||||
import { useSystemStatus } from "@/hooks/use-auth";
|
||||
import { isLocalConvenience } from "@/lib/auth";
|
||||
|
||||
const steps = [
|
||||
{
|
||||
title: "Add a company",
|
||||
body: "Point CI Agent at a competitor's public website and tell it what you actually care about — manufacturing expansion, pricing, hiring, patents, whatever matters to you.",
|
||||
icon: Building2,
|
||||
},
|
||||
{
|
||||
title: "Choose a schedule",
|
||||
body: "Hourly to monthly, or a custom cron expression. The scheduler picks up changes automatically — no code changes required to add a company.",
|
||||
icon: Radar,
|
||||
},
|
||||
{
|
||||
title: "We collect public sources",
|
||||
body: "Official site, press releases, RSS/news feeds, SEC filings, GitHub, careers pages, and any custom URLs you add — all fetched through an SSRF-safe, robots.txt-respecting pipeline.",
|
||||
icon: ShieldCheck,
|
||||
},
|
||||
{
|
||||
title: "An LLM turns evidence into a report",
|
||||
body: "Every claim in the report traces back to a stored source document. Inferences are clearly labeled and confidence-scored — never presented as fact.",
|
||||
icon: Sparkles,
|
||||
},
|
||||
{
|
||||
title: "Changes are scored and explained",
|
||||
body: "New runs are compared to prior snapshots. Meaningful changes get a severity (Critical/High/Medium/Low) and a confidence score, with noise filtered out.",
|
||||
icon: LineChart,
|
||||
},
|
||||
{
|
||||
title: "You get notified",
|
||||
body: "Email (and optional SMS) alerts above your chosen severity threshold, with evidence and a link back to the full report in your dashboard.",
|
||||
icon: Mail,
|
||||
},
|
||||
];
|
||||
|
||||
export default function LandingPage() {
|
||||
const { data: systemStatus } = useSystemStatus();
|
||||
const isLocalhost = systemStatus ? isLocalConvenience(systemStatus) : false;
|
||||
|
||||
return (
|
||||
<main className="min-h-screen">
|
||||
<header className="border-b border-slate-200 bg-white">
|
||||
<div className="mx-auto flex max-w-6xl items-center justify-between px-6 py-4">
|
||||
<span className="text-lg font-semibold tracking-tight text-slate-900">CI Agent</span>
|
||||
<nav className="flex items-center gap-3">
|
||||
<Link
|
||||
href="/login"
|
||||
className="rounded-md px-3 py-2 text-sm font-medium text-slate-700 hover:bg-slate-100"
|
||||
>
|
||||
Sign in
|
||||
</Link>
|
||||
<Link
|
||||
href="/register"
|
||||
className="rounded-md px-3 py-2 text-sm font-medium text-slate-700 hover:bg-slate-100"
|
||||
>
|
||||
Create account
|
||||
</Link>
|
||||
<Link
|
||||
href="/dashboard"
|
||||
className="focus-ring rounded-md bg-brand-600 px-3 py-2 text-sm font-semibold text-white hover:bg-brand-700"
|
||||
>
|
||||
{isLocalhost ? "Open dashboard (local mode)" : "Open dashboard"}
|
||||
</Link>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section className="mx-auto max-w-4xl px-6 py-20 text-center">
|
||||
<h1 className="text-4xl font-bold tracking-tight text-slate-900 sm:text-5xl">
|
||||
Know what your competitors are doing —{" "}
|
||||
<span className="text-brand-600">before it shows up on your roadmap.</span>
|
||||
</h1>
|
||||
<p className="mx-auto mt-6 max-w-2xl text-lg text-slate-600">
|
||||
CI Agent monitors the companies you choose, collects only publicly available information,
|
||||
and turns it into evidence-linked intelligence reports with severity- and
|
||||
confidence-scored alerts.
|
||||
</p>
|
||||
<div className="mt-8 flex items-center justify-center gap-3">
|
||||
<Link
|
||||
href="/dashboard"
|
||||
className="focus-ring rounded-md bg-brand-600 px-5 py-3 text-sm font-semibold text-white shadow-sm hover:bg-brand-700"
|
||||
>
|
||||
{isLocalhost ? "Try it in local mode" : "Try it now"}
|
||||
</Link>
|
||||
<Link
|
||||
href="/register"
|
||||
className="focus-ring rounded-md border border-slate-300 bg-white px-5 py-3 text-sm font-semibold text-slate-800 hover:bg-slate-50"
|
||||
>
|
||||
Create an account
|
||||
</Link>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="border-t border-slate-200 bg-white py-16">
|
||||
<div className="mx-auto max-w-6xl px-6">
|
||||
<h2 className="text-center text-2xl font-semibold text-slate-900">
|
||||
How monitoring works
|
||||
</h2>
|
||||
<div className="mt-10 grid gap-8 sm:grid-cols-2 lg:grid-cols-3">
|
||||
{steps.map((step) => (
|
||||
<div key={step.title} className="rounded-lg border border-slate-200 p-6">
|
||||
<step.icon className="h-6 w-6 text-brand-600" aria-hidden />
|
||||
<h3 className="mt-4 font-semibold text-slate-900">{step.title}</h3>
|
||||
<p className="mt-2 text-sm leading-relaxed text-slate-600">{step.body}</p>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="border-t border-slate-200 bg-slate-900 py-14 text-slate-100">
|
||||
<div className="mx-auto max-w-4xl px-6 text-center">
|
||||
<h2 className="text-xl font-semibold">Only publicly available information</h2>
|
||||
<p className="mx-auto mt-3 max-w-2xl text-sm leading-relaxed text-slate-300">
|
||||
CI Agent never bypasses CAPTCHAs, login walls, paywalls, or anti-bot controls, and
|
||||
respects robots.txt. Every source document keeps its original URL and retrieval
|
||||
timestamp, and every source failure is recorded transparently — a report is never
|
||||
presented as complete when a source failed to collect.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer className="bg-white py-8">
|
||||
<p className="text-center text-xs text-slate-500">
|
||||
CI Agent — local-first competitive intelligence monitoring.
|
||||
</p>
|
||||
</footer>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user