尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A live radar of online, globally-open AI competitions, agent challenges and hackathons — upcoming, in progress, or ended within the last 7 days.
🔗 Live site: https://nobodyme.github.io/hackathons-online/
Layout and data are deliberately separated:
| File | Role |
|---|---|
index.html | Page shell / structure |
styles.css | Design, responsive layout, light + dark themes |
app.js | Fetches competitions.json and renders cards, filters and sort live in the browser — it recomputes status and countdowns from the current date, so the page stays accurate between refreshes |
competitions.json | The only file that changes on a refresh — the competition list |
assets/fonts/ | Self-hosted Archivo (variable woff2) — no external font dependency |
.github/workflows/deploy.yml | Publishes the site to GitHub Pages on every push to main |
The visual style is Neo-brutalist: a butter-cream ground (#fff5db), chunky Archivo set
heavy, 3px black outlines with hard offset shadows, zero corner radius, and bright color-coded
status badges (orange accent, yellow = in progress, mint = upcoming). Design tokens live at the
top of styles.css — restyling is a matter of editing those variables.
Because the page renders competitions.json client-side, refreshing the data is just a matter of
overwriting that one file — the layout never has to be regenerated.
competitions.json shape{
"generated": "YYYY-MM-DD",
"items": [
{
"id": "stable-kebab-slug",
"name": "…",
"platform": "Devpost",
"url": "https://…",
"type": "agent-challenge | coding-challenge | hackathon | benchmark",
"format": "online | hybrid",
"location": "Online",
"start": "YYYY-MM-DD",
"end": "YYYY-MM-DD",
"reg": "YYYY-MM-DD",
"prize": 10000,
"prize_kind": "cash | mixed | non-cash | unknown",
"prize_note": "e.g. split across tracks",
"summary": "One sentence, ≤160 chars.",
"conf": "confirmed | approximate | unknown",
"eligibility": "Open globally, 18+",
"audience": "all | students",
"tags": ["agents", "llm"]
}
]
}
start, end and reg are all required — no date field is ever null. A competition whose
start or end date cannot be established is left out of the file entirely rather than published
with a null: an entry you cannot plan around is not worth a row.
Many competitions have no registration step separate from submission (ARC Prize, MLH Global Hack
Week, most Devpost hackathons). For those, reg carries the submission deadline, which is the
same as end. So reg == end means "no separate registration cutoff — you have until the
deadline"; reg < end means there is a real earlier cutoff to watch.
Rules the page enforces automatically:
end is more than 7 days in the past are hidden.upcoming / in-progress / completed)."students" marks competitions restricted to students/youth. These are hidden by
default (with an "N student-only hidden" note); ticking the "I'm a student" checkbox includes
them. Detection uses the explicit audience field when present, otherwise a scan of the
eligibility text — so it works whether or not the data is tagged.The content is curated by Claude on 3 day schedule, fully AI curated and pushes to this branch which then publishes the github page. Let's see how useful this experiment turns out to be.