AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Comprehensive list of hackathons happening across Europe. Real-time updates, advanced filtering, and notifications.
Translation pending
Developer toolsTypeScript · CSSGitHub @viganogabrieleOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Discover hackathons across Europe
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
FindHackEU is an independent, open-source directory of hackathons across Europe, maintained by Gabriele Viganò. A scheduled pipeline pulls event listings from Luma, Devfolio, MLH, ETHGlobal, Eventbrite, and Devpost; normalizes and deduplicates them across sources; enriches location data with geocoding; and publishes the result as a searchable, mappable website and a public JSON API — all built and run in the open. • What you can use • Run locally • Project map • Useful commands • Origin and stewardshipRead the full README ↗
FindHackEU is an independent, open-source directory of hackathons across Europe, maintained by Gabriele Viganò. A scheduled pipeline pulls event listings from Luma, Devfolio, MLH, ETHGlobal, Eventbrite, and Devpost; normalizes and deduplicates them across sources; enriches location data with geocoding; and publishes the result as a searchable, mappable website and a public JSON API — all built and run in the open.
GET /api/hackathons returns approved, non-archived events as JSON, with optional status, cursor, and limit parameters.Discord/Telegram/Twitter notification bots exist in the codebase but are currently unconfigured and inactive in production.
Prerequisites: a current Node.js installation and Docker (for local Supabase).
git clone https://github.com/viganogabriele/FindHackEU.git
cd FindHackEU
npm install
cp .env.example .env.local
npx supabase start
supabase start boots a local Postgres/Studio stack, applies the repository's migrations, and loads supabase/seed.sql — a small set of realistic, clearly-fake sample hackathons and moderation-queue candidates, so the site and /admin have something to look at immediately with zero API keys configured. Copy the API URL, anon key, and service-role key it prints into .env.local as NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, and SUPABASE_SERVICE_ROLE_KEY, set CRON_SECRET to any value you choose, then start the app:
npm run dev
The local /admin moderation dashboard needs no Google OAuth setup by default: leave GOOGLE_CLIENT_ID and ADMIN_ALLOWED_EMAIL unset and it falls back to an open local-dev bypass. That bypass only ever activates outside production — see lib/services/require-admin-auth.ts and docs/admin-auth-setup.md if you want real sign-in locally too.
To actually populate data, trigger the discovery pipeline against your local Supabase instance with npm run trigger-update (see .env.example for the optional geocoding/search API keys that unlock location enrichment and web-search discovery).
app/ — App Router pages and API routes, including the public listing UI and /admin moderation dashboard.lib/parsers/ — one module per event source (Luma, Devfolio, MLH, ETHGlobal, Eventbrite, Devpost), each implementing a shared Provider contract.lib/dedup/ — URL normalization and fuzzy title/date matching used to merge duplicate listings across sources.lib/discovery/ and lib/search/ — the moderated web-search discovery pipeline, kept structurally separate from the provider parsers above.lib/services/ — ingestion orchestration, geocoding, persistence, and moderation logic.supabase/migrations/ — the full database schema, checked in so a local instance matches production exactly.Every stage of the ingestion pipeline reports its own status independently, so one source failing (a site redesign, a rate limit) never blocks the others from completing. Web-search-derived candidates stay entirely separate from the published dataset until a maintainer explicitly approves them — there is no path from a raw search result to a live listing that skips human review.
| Command | Purpose |
|---|---|
npm run dev | Start the development server. |
npm run lint | Run ESLint. |
npm run test | Run the Vitest test suite. |
npx tsc --noEmit | Type-check the project. |
npm run build | Build for production. |
npm run trigger-update | Run the discovery pipeline against your local Supabase instance. |
For architecture and environment details, see CLAUDE.md, AGENTS.md, and .env.example. Product and API documentation lives at /docs on the running site. To deploy your own instance to Vercel + Supabase, see docs/production-deployment.md.
FindHackEU acknowledges HackTrack EU, created by Lorenzo Palaia, as its original inspiration and starting point. It is now independently developed and operated, with its own architecture, infrastructure, issue tracker, and roadmap. Since that split, the project's focus has been on making European hackathon discovery substantially broader and more reliable: more sources, honest per-source status reporting, cross-source deduplication, and a moderation queue that keeps low-confidence results out of the public dataset.
Released under the MIT License. File bugs and proposals on the GitHub issue tracker. For anything else, reach Gabriele directly at [email protected].