Files
CIAgent/apps/web/app/page.tsx
T
sakshamandClaude Sonnet 5 4867793b66 Git Repository link always shows, defaulting to the canonical upstream repo
Previously hidden entirely when NEXT_PUBLIC_GIT_REPO_URL was unset, which
meant it never appeared on localhost or on anyone else's clone that hadn't
explicitly configured it. It should always point somewhere - the canonical
repo (git.ciagent.org) is the sensible default everywhere, overridable only
by a deployment that runs its own separate git server.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-05 20:56:48 -04:00

150 lines
6.4 KiB
TypeScript

"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";
// The canonical, authoritative repo - shown by default on every deployment
// (including someone else's clone running on their own machine) unless
// NEXT_PUBLIC_GIT_REPO_URL overrides it, e.g. because that clone runs its
// own self-hosted git server instead of pointing back at this one.
const CANONICAL_GIT_REPO_URL = "https://git.ciagent.org/saksham/CIAgent";
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&nbsp;Agent</span>
<nav className="flex items-center gap-3">
<a
href={process.env.NEXT_PUBLIC_GIT_REPO_URL || CANONICAL_GIT_REPO_URL}
target="_blank"
rel="noopener noreferrer"
className="rounded-md px-3 py-2 text-sm font-medium text-slate-700 hover:bg-slate-100"
>
Git Repository
</a>
<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>
);
}