Senuto Hackathon 2026: handbook#

Wszystko, czego potrzebujesz, żeby od poniedziałku 14:00 budować, a w czwartek pokazać działający produkt. Pytania: kanał #hackaton na Slacku.

Harmonogram#

kiedy co
pon 5.10, 9:00 kickoff, dostęp do GitHuba, Codespaces, kluczy
pon 11:30–14:00 zespoły: nazwa, kapitan, pomysł
pon 14:00 start budowania. Pierwszy deploy jeszcze w poniedziałek (nawet „hello world”)
wt 6.10 – śr 7.10 budowanie; śr wieczorem: zapasowe nagranie demo 60–90 s
czw 8.10, ~15:10 Demo Day: 7 min prezentacji + 5 min pytań, demo na żywo obowiązkowe

Start w 5 minut#

  1. GitHub: zaakceptuj zaproszenie do organizacji Senuto-Hackathon. Twój zespół ma repo team-<n>.
  2. Codespace: w repo zespołu: Code → Codespaces → Create codespace on main (4 rdzenie / 16 GB wystarczą). Instaluje się wszystko: Node 22, Python 3.12, Docker, GitHub CLI, Claude Code. Klucze API są już w środowisku.
  3. Claude Code: w terminalu claude → zaloguj się swoim kontem. Pluginy hackathonu (/hackify:*) są włączone automatycznie.
  4. Uruchom: npm run dev → otwórz port 3000. Strona startowa pokazuje, które klucze są podpięte.
  5. Deploy: w Claude: /hackify:init, potem /hackify:deploy. Od tej chwili każdy git push na main wdraża aplikację.

Wolisz laptopa? git clone, npm ci, klucze do .env.local (lista nazw w .env.example; wartości weź z Codespaces albo od kapitana), a dla deployu COOLIFY_TOKEN=… w ~/.config/hackify/env. Pluginy: /plugin marketplace add Senuto-Hackathon/hackathon-skills, potem /plugin install hackify@senuto-hackathon.

Zatrzymuj Codespace, gdy z niego nie korzystasz (automatycznie po 30 min bezczynności). Godziny Codespaces są wspólne.

Starter#

Repo zespołu powstało z szablonu hackathon-starter:

Inny stack (np. Python/FastAPI)? Proszę bardzo: ważne, żeby był Dockerfile, aplikacja słuchała na 0.0.0.0:<port> i miała endpoint zdrowia. Ustaw port: i health: w .hackathon/app.yaml.

API i klucze#

co daje zmienne limit skill
Web Unlocker (gateway Senuto → BrightData) dowolna publiczna strona: CAPTCHA, JS, geo; HTML albo markdown HACK_GATEWAY_URL, HACK_GATEWAY_TOKEN dzienny limit zespołu /hackify:crawl
Nodeshub Google SERP na żywo (organic, AI Overview, PAA, local pack, reklamy), intencja, query fan-out NODESHUB_API_KEY, NODESHUB_BASE_URL tokeny na kluczu zespołu /hackify:nodeshub
OpenRouter LLM: Claude, Gemini, GPT… (API zgodne z OpenAI) OPENROUTER_API_KEY, OPENROUTER_BASE_URL budżet $ na kluczu /hackify:openrouter
Senuto API dane Senuto (widoczność, baza słów kluczowych…) SENUTO_API_KEY per zespół /hackify:senuto-api

Przegląd dla Claude'a: /hackify:apis.

Klucze OpenRouter: każdy uczestnik dostaje osobisty klucz (DM na Slacku), a zespół dodatkowo klucz aplikacji, na którym działa wdrożone demo. Razem $500 na zespół, każdy klucz ma twardy limit. Klucz osobisty wpisz jako user secret w Codespaces (OPENROUTER_API_KEY, Settings → Codespaces → Secrets → wybierz repo zespołu).

Web Unlocker: szybki test#

curl -s -H "Authorization: Bearer $HACK_GATEWAY_TOKEN" "$HACK_GATEWAY_URL/v1/me"
curl -s -H "Authorization: Bearer $HACK_GATEWAY_TOKEN" \
  "$HACK_GATEWAY_URL/v1/unlocker?url=https://example.com/&format=markdown&country=pl"
import { gateway, nodeshub, openrouter } from "@/lib/hack";
const page = await gateway.unlock(url, { format: "markdown", country: "pl" });     // 2–10 s, czasem do 2 min
const serp = await nodeshub.search({ keyword: "buty do biegania", gl: "pl", hl: "pl", num: 10, device: "desktop" });
const text = await openrouter.chat([{ role: "user", content: "Streść:\n" + page.body }]);

Cache'ujcie wszystko. Limity są dzienne i wspólne dla zespołu, a upstreamy bywają wolne. Na Demo Day pokazujcie dane przeliczone wcześniej, a wywołania na żywo traktujcie jako bonus.

Deploy i hosting#

Zasady#

Demo Day: checklista#

FAQ#

Build pada w Coolify, a lokalnie działa. hackify check --build buduje dokładnie ten sam obraz. Najczęściej to błędy TypeScript w next build, brakujący plik w repo (nie w .gitignore?) albo za mało pamięci w buildzie.

502 / „Bad Gateway”. Aplikacja nie słucha na 0.0.0.0:3000 albo healthcheck /api/health nie zwraca 200. /hackify:status i hackify logs.

Przekierowanie na https://0.0.0.0:3000/…. Nie budujcie URL-i z request.nextUrl.origin; używajcie process.env.APP_URL albo względnych przekierowań.

429 z gatewaya. Dzienny limit zespołu wykorzystany (/v1/me). Reset o północy; w razie potrzeby piszcie na #hackaton.

403 z Nodeshub. Skończyły się tokeny na kluczu zespołu (nodeshub.balance()). Piszcie na #hackaton.

402 z OpenRouter. Klucz osiągnął limit $. Sprawdźcie, który klucz jest używany (osobisty czy aplikacji).

Nowy secret nie jest widoczny w Codespace. Codespaces: Rebuild Container albo nowy codespace.

npx shadcn add @senuto/… nie działa. Wszystkie 60 komponentów jest już w src/components/ui/. Jeśli brakuje czegoś spoza listy, użyjcie stockowego shadcn i dopasujcie tokeny (/hackify:design).

Kontakt#