diff --git a/app/hackathons/page.tsx b/app/hackathons/page.tsx index 649f2bf..aee8a10 100644 --- a/app/hackathons/page.tsx +++ b/app/hackathons/page.tsx @@ -3,25 +3,28 @@ import { useState, useEffect, useRef, Suspense, useCallback } from 'react' import dynamic from 'next/dynamic' import { - Activity, Shield, - Code2, ChevronDown, ArrowRight, Users, Trophy, - GitMerge, + Star, Terminal, Clock, MapPin, Cpu, - Boxes, Sparkles, + Eye, + Target, + AlertTriangle, + ShieldAlert, + MessageSquare, + Crown, } from 'lucide-react' import { Footer } from '@/components/footer' import { LiveTerminal } from '@/components/hackathons/live-terminal' -import { StreamViz, SecureViz, ExtendViz } from '@/components/hackathons/track-visuals' +import { StreamViz, SecureViz, RadarViz, ScanViz, ExtendViz } from '@/components/hackathons/track-visuals' const ShieldScene = dynamic( () => import('@/components/hackathons/shield-scene').then((m) => m.ShieldScene), @@ -153,11 +156,11 @@ function Hero() {
-

+

Hack the Wall.

-

- Build on the AI agent security stack. Your best hacks get merged into Greywall. +

+ AI Safety & Data Sovereignty Hackathon 2026

{[ - { value: 24, suffix: 'h', label: 'of hacking' }, - { value: 3, suffix: '', label: 'open-ended tracks' }, + { value: 48, suffix: 'h', label: 'of hacking' }, + { value: 5, suffix: '', label: 'tracks' }, { value: 100, suffix: '%', label: 'open source' }, ].map((stat) => (
@@ -199,6 +202,328 @@ function Stats() { ) } +/* ─── Notify Button ─── */ + +function NotifyButton({ className = '' }: { className?: string }) { + const [mode, setMode] = useState<'button' | 'form' | 'success'>('button') + const [email, setEmail] = useState('') + const [submitting, setSubmitting] = useState(false) + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault() + if (!email) return + setSubmitting(true) + try { + const formData = new FormData() + formData.append('access_key', '9239e4ed-eb6f-4fa2-afdd-f40b9dec25bf') + formData.append('email', email) + formData.append('subject', 'Hackathon Registration Interest') + const response = await fetch('https://api.web3forms.com/submit', { + method: 'POST', + body: formData, + }) + const data = await response.json() + if (data.success) { + setMode('success') + } + } catch { + window.location.href = `mailto:hello@greyhaven.co?subject=Hackathon%20Notify&body=Please%20notify%20me%20at%20${encodeURIComponent(email)}` + setMode('success') + } + setSubmitting(false) + } + + if (mode === 'success') { + return ( +
+ You are on the list. +
+ ) + } + + if (mode === 'form') { + return ( +
+ setEmail(e.target.value)} + autoFocus + className="px-4 py-3 bg-card/60 border border-border/40 rounded-lg text-sm font-sans text-foreground placeholder:text-muted-foreground/50 focus:outline-none focus:border-primary/50 w-64" + /> + +
+ ) + } + + return ( + + ) +} + +/* ─── Info Section (Tabbed) ─── */ + +const infoTabs = ['Overview', 'Resources', 'Guidelines', 'Schedule'] as const + +function OverviewTab() { + return ( +
+ {/* Intro */} +
+

+ The Greywall Hackathon brings together engineers, security professionals, and AI enthusiasts to tackle one of the most urgent open problems: how do we keep AI agents safe when they operate autonomously on real systems? +

+

+ Over 48 hours, participants will build guardrails, filters, classifiers, and detection systems that sit on top of{' '} + Greywall, + an open-source sandboxing system for AI agents built by{' '} + Greyhaven. +

+
+ + {/* What is Sovereign AI? */} +
+

What is Sovereign AI?

+

+ Sovereign AI is the principle that organizations should maintain full control over their AI systems: what they can access, what data they process, and what actions they take. No data leaks, no unauthorized actions, no black boxes. Your AI agents should work for you, within boundaries you define. That is what Greywall enforces, and that is what this hackathon is about extending. +

+
+ + {/* Why this hackathon? */} +
+

Why this hackathon?

+

+ AI agents are getting more powerful and more autonomous every month. But the security tooling has not kept up. There is a real gap between what agents can do and the guardrails available to keep them in check. This hackathon exists to close that gap, and to give talented people a chance to build the tools that the entire industry needs. +

+
+ + {/* Prizes */} +
+

Top teams get

+
+ {[ + { icon: Crown, title: 'Hall of Fame', sub: 'Featured on greywall.io permanently' }, + { icon: Star, title: 'Contributor credit', sub: 'Added as a contributor in the GitHub README' }, + { icon: Users, title: 'CEO Dinner Invitation', sub: 'Attend an exclusive Greyhaven CEO dinner for free' }, + ].map((item) => ( +
+
+ +
+

{item.title}

+

{item.sub}

+
+ ))} +
+
+
+ ) +} + +function ResourcesTab() { + const articles = [ + { + title: 'The Greyhaven Sovereign AI Framework', + url: 'https://greyhaven.co/insights/greyhaven-sovereign-ai-framework', + description: 'Our framework for how organizations can maintain sovereignty over their AI systems.', + }, + { + title: 'Why We Built Our Own Sandboxing System', + url: 'https://greyhaven.co/insights/why-we-built-our-own-sandboxing-system', + description: 'The story behind Greywall and why existing solutions were not enough.', + }, + { + title: 'Greywall on GitHub', + url: 'https://github.com/GreyhavenHQ/greywall', + description: 'The open-source codebase you will be building on. Start here.', + }, + { + title: 'Greywall Documentation', + url: 'https://docs.greywall.io/', + description: 'Setup guides, API reference, and architecture docs.', + }, + ] + + return ( +
+ {articles.map((article) => ( + +
+

{article.title}

+

{article.description}

+
+ +
+ ))} +
+ ) +} + +function GuidelinesTab() { + const dimensions = [ + { + title: 'Impact Potential & Innovation', + question: 'How much would this matter for AI safety if it worked? How innovative is it?', + scores: [ + { score: 1, desc: 'Negligible. No clear problem addressed, or no meaningful novelty.' }, + { score: 2, desc: 'Limited. Addresses a real problem but with a generic or well-trodden approach.' }, + { score: 3, desc: 'Moderate. Clear problem with a reasonable approach; some novelty in framing or method.' }, + { score: 4, desc: 'Significant. Important problem with an original approach. A valuable contribution others could build on.' }, + { score: 5, desc: 'Exceptional. Tackles a critical AI safety problem with a genuinely novel approach. Opens a new direction.' }, + ], + }, + { + title: 'Execution Quality', + question: 'How sound are methodology, implementation, and findings?', + scores: [ + { score: 1, desc: 'Seriously flawed. Methodology broken, results uninterpretable, or implementation does not work.' }, + { score: 2, desc: 'Weak. Significant gaps: missing validation, flawed experimental design, or incomplete implementation.' }, + { score: 3, desc: 'Competent. Technically solid given the short duration. Results are interpretable, limitations acknowledged.' }, + { score: 4, desc: 'Strong. Thorough methodology with convincing validation. Immediately useful for future work.' }, + { score: 5, desc: 'Exceptional. Ambitious scope executed rigorously. Surprising findings or unusually robust validation.' }, + ], + }, + { + title: 'Presentation & Clarity', + question: 'How clearly are work, findings, and impact potential communicated?', + scores: [ + { score: 1, desc: 'Incomprehensible. Cannot determine what the project is actually claiming or doing.' }, + { score: 2, desc: 'Hard to follow. Key information buried or missing. Significant effort to extract main points.' }, + { score: 3, desc: 'Clear enough. Can understand the problem, approach, and results without undue effort.' }, + { score: 4, desc: 'Well presented. Easy to follow, well-structured. Target audience would get it quickly.' }, + { score: 5, desc: 'Exceptionally clear. A pleasure to read. Complex ideas made accessible.' }, + ], + }, + ] + + return ( +
+ {/* Judging Criteria */} +
+

Judging Criteria

+
+ {dimensions.map((dim) => ( +
+
+

{dim.title}

+

{dim.question}

+
+
+ {dim.scores.map((s) => ( +
+ {s.score} +

{s.desc}

+
+ ))} +
+
+ ))} +
+
+ + {/* Submission Requirements */} +
+

Submission Requirements

+
+
+

A complete submission includes:

+
    +
  • A research report in PDF format
  • +
  • A project title and brief abstract (150 words max)
  • +
  • Author names for all team members
  • +
  • Which challenge track your project addresses
  • +
+
+ +
+

Recommended report structure:

+

There is no hard page limit. Most strong submissions are 4-8 pages.

+
    +
  • Introduction:What problem did you address? Why does it matter?
  • +
  • Related Work:What existing work does your project build on?
  • +
  • Methodology:What did you build or test? Enough detail to replicate.
  • +
  • Results:What did you find? Include quantitative results where possible.
  • +
  • Discussion:Implications, limitations, what you would do with more time.
  • +
  • References:Cite relevant prior work.
  • +
+
+ +
+

Important notes:

+
    +
  • You can submit as an individual or as a team
  • +
  • You can build on existing work, but you must clearly identify what is new work done during the hackathon
  • +
  • Your PDF is not editable or replaceable once submitted
  • +
+
+
+
+
+ ) +} + +function ScheduleTab() { + return ( +
+

Schedule will be announced soon.

+ +
+ ) +} + +function InfoSection() { + const [activeTab, setActiveTab] = useState('overview') + + return ( +
+
+ {/* Tab navigation */} +
+ {infoTabs.map((tab) => ( + + ))} +
+ + {/* Tab content */} + {activeTab === 'overview' && } + {activeTab === 'resources' && } + {activeTab === 'guidelines' && } + {activeTab === 'schedule' && } +
+
+ ) +} + /* ─── Terminal Showcase ─── */ function TerminalShowcase() { @@ -213,7 +538,7 @@ function TerminalShowcase() {

The data stream

- Every agent action. In real time. + Every agent action, in real time.

Greywall's proxy captures every request, file access, and command your AI agent executes. This is what you'll be building on. @@ -231,33 +556,63 @@ function TerminalShowcase() { const tracks = [ { - id: 'stream', - icon: Activity, - title: 'Build on the Stream', - hook: 'One live data firehose. Make something cool with it.', + id: 'pii-filtering', + icon: Eye, + title: 'PII Filtering', + hook: 'Strip sensitive data before it reaches the model, without breaking the task.', color: 'from-orange-500/10 to-amber-500/5', borderColor: 'hover:border-orange-500/30', - examples: ['Dashboards', 'Anomaly detection', 'Cost trackers', 'Behavior research', 'Bots', 'Art'], + description: 'Build a Greywall layer that strips PII (names, credit cards, etc.) from data before it reaches the model while still letting the agent complete tasks correctly. You define your own test cases and demonstrate it works.', + scoring: 'You bring your own proof. Show it works on real-world data, not just toy examples.', + examples: ['Data masking', 'Pattern detection', 'Context-aware redaction', 'Format preservation'], Visual: StreamViz, }, { - id: 'secure', - icon: Shield, - title: 'Secure Your Stack', - hook: 'Bring your own project. Lock it down. Demo the tightest sandbox.', + id: 'intent-classifier', + icon: Target, + title: 'Intent vs. Action Classifier', + hook: 'Detect when an agent does something the user never asked for.', color: 'from-emerald-500/10 to-teal-500/5', borderColor: 'hover:border-emerald-500/30', - examples: ['Policy templates', 'Threat models', 'Security writeups', 'Monitoring configs'], + description: 'Build a classifier that sits in the proxy and blocks destructive actions that weren\'t asked for. Some tool calls match the user\'s intent ("delete files starting with 1" results in rm ./1*). Some don\'t ("refactor this module" results in rm -rf everything). You build the test suite that proves it.', + scoring: 'Design your own evaluation. Demonstrate it catches real mismatches, not just scripted ones.', + examples: ['Heuristics-based', 'ML classifiers', 'Semantic matching', 'Action risk scoring'], Visual: SecureViz, }, { - id: 'extend', - icon: Code2, - title: 'Extend Greywall', - hook: 'Plugin, CLI tool, VS Code extension, web UI. If it\'s cool, it counts.', + id: 'derail-detection', + icon: AlertTriangle, + title: 'Derail Detection', + hook: 'Catch agents that keep trying variations after being blocked.', + color: 'from-amber-500/10 to-yellow-500/5', + borderColor: 'hover:border-amber-500/30', + description: 'Detect when an agent persistently mutates blocked commands, like repeatedly trying SSH variations to find a path through. Build something that spots the pattern and stops or redirects it with an informative message.', + scoring: 'Create your own adversarial sessions and prove your detector catches them.', + examples: ['Pattern matching', 'Mutation detection', 'Session analysis', 'Auto-redirect'], + Visual: RadarViz, + }, + { + id: 'antivirus', + icon: ShieldAlert, + title: 'Malicious Request Detection', + hook: 'Scan requests for supply chain attacks and flag them. Fast.', + color: 'from-cyan-500/10 to-sky-500/5', + borderColor: 'hover:border-cyan-500/30', + description: 'Build a guardrail that scans network requests and commands for malicious patterns (e.g. supply chain attacks via NPM packages). You define the threat scenarios and prove detection works without killing latency.', + scoring: 'Fastest accurate solution wins. You bring the benchmarks.', + examples: ['Request scanning', 'Dependency analysis', 'Threat signatures', 'Low-latency filtering'], + Visual: ScanViz, + }, + { + id: 'response-rewriting', + icon: MessageSquare, + title: 'Response Rewriting', + hook: 'Turn cryptic block messages into helpful guidance.', color: 'from-violet-500/10 to-purple-500/5', borderColor: 'hover:border-violet-500/30', - examples: ['IDE plugins', 'NLP policies', 'Cost guardians', 'Grafana integrations', 'Wild ideas'], + description: 'When an agent gets blocked, intercept the error and rewrite it to explain why and suggest alternatives, so the agent self-corrects instead of retrying the same thing twenty times.', + scoring: 'Demonstrate with real agent sessions that your rewrites actually stop the retry loop.', + examples: ['Error interception', 'Context injection', 'Alternative suggestion', 'Loop prevention'], Visual: ExtendViz, }, ] @@ -287,8 +642,8 @@ function TrackCard({ track, index }: { track: typeof tracks[0]; index: number })

- 24h - Teams + 48h + Teams of 2–3 Montreal
@@ -296,9 +651,15 @@ function TrackCard({ track, index }: { track: typeof tracks[0]; index: number })

{track.title}

-

+

{track.hook}

+

+ {track.description} +

+

+ {track.scoring} +

{track.examples.map((ex) => ( @@ -328,12 +689,15 @@ function Tracks() {

- Pick your arena. + Pick your track.

-

- Three tracks. All open-ended. You bring the creativity. +

+ Five open-ended tracks, all building on top of{' '} + Greywall. + Go deep on one or try a few.

+
{tracks.map((track, i) => ( @@ -347,10 +711,10 @@ function Tracks() { /* ─── How It Works ─── */ const steps = [ - { icon: Sparkles, title: 'Register', sub: 'All levels welcome' }, - { icon: Terminal, title: 'Get set up', sub: 'We provide everything' }, - { icon: Cpu, title: 'Hack for 24h', sub: 'Mentors on hand' }, - { icon: Trophy, title: 'Demo & win', sub: 'Best hacks ship' }, + { icon: Sparkles, title: 'Form a team', sub: 'Groups of 2–3' }, + { icon: Terminal, title: 'Get set up', sub: 'Docs & infra provided' }, + { icon: Cpu, title: 'Hack for 48h', sub: 'Collect achievements' }, + { icon: Trophy, title: 'Present & win', sub: 'Top teams demo' }, ] function HowItWorks() { @@ -358,15 +722,15 @@ function HowItWorks() { return (
-
-

+
+

How it works.

-
+
{/* Animated connector line */}
-
+
{steps.map((step, i) => ( @@ -375,11 +739,11 @@ function HowItWorks() { className={`relative text-center transition-all duration-700 ${visible ? 'opacity-100 translate-y-0 scale-100' : 'opacity-0 translate-y-8 scale-95'}`} style={{ transitionDelay: `${i * 150}ms` }} > -
+
-

{step.title}

-

{step.sub}

+

{step.title}

+

{step.sub}

))}
@@ -394,27 +758,26 @@ function Prizes() { const { ref, visible } = useInView() const items = [ - { icon: GitMerge, title: 'Code gets merged', sub: 'Your hack becomes the product' }, - { icon: Star, title: 'Contributor credit', sub: 'Name in the release notes' }, - { icon: Boxes, title: 'Demo day invite', sub: 'Present to the community' }, - { icon: Trophy, title: 'Community status', sub: 'Featured on greywall.io' }, + { icon: Crown, title: 'Hall of Fame', sub: 'Featured on greywall.io permanently' }, + { icon: Star, title: 'Contributor credit', sub: 'Added as a contributor in the GitHub README' }, ] return (
{/* Background dot grid */} -
- -
+
-
-

- More than a trophy. +
+

+ What you win.

-

- The best hacks ship. -

-
+
{items.map((item, i) => (

+ ) } @@ -460,11 +824,12 @@ function Location() { /* ─── FAQ ─── */ const faqs = [ - { q: 'Do I need security experience?', a: 'No. All experience levels welcome. If you can write code, you can participate.' }, + { q: 'Can I work on more than one track?', a: 'Yes. You can tackle as many tracks as you want over 48 hours. Focus deep on one or spread across several.' }, + { q: 'Do I need security or ML experience?', a: 'No. The tracks are designed so you can approach them with heuristics, ML, or creative engineering. If you can write code, you can participate.' }, + { q: 'How are teams formed?', a: 'We split participants into teams of 2 to 3. You can request to be grouped with someone, or we will match you.' }, { q: 'Do I need to know Greywall?', a: 'Nope. We provide setup support and Greywall maintainers are on hand throughout.' }, - { q: 'Is it in-person only?', a: 'Yes. Hackathons are a social experience. Plus, you get direct access to maintainers all day.' }, - { q: 'What happens to my code?', a: 'Your code is yours. Winning hacks get merged into Greywall with your full contributor credit, but only with your consent.' }, - { q: 'What do I need to bring?', a: 'A laptop. We provide Greywall infrastructure, data streams, docs, food, and caffeine.' }, + { q: 'What happens to my code?', a: 'Your code is yours. Winners get featured on the permanent Hall of Fame page, added as contributors in the GitHub README, and invited to an exclusive Greyhaven CEO dinner.' }, + { q: 'What do I need to bring?', a: 'A laptop. We provide Greywall infrastructure, docs, food, and caffeine.' }, ] function FAQ() { @@ -510,17 +875,9 @@ function FinalCTA() {

- Build something that ships. + Build something that matters.

- - Get notified when registration opens - - -

- Follow{' '} - Greywall on GitHub{' '} - for updates. -

+

) @@ -534,11 +891,9 @@ export default function HackathonsPage() {