What it does
Paste a Devpost hackathon link, your GitHub repo, and your demo video. Preflight reads that event's overview and Official Rules pages, tests your links against them, and returns a short checklist: pass, fail, or check yourself. Each row says what it found and quotes the exact rule sentence behind it, with a link to the rules page.
Checks today:
- Timing: submissions open, deadline in your own time zone, time left.
- Repository: public; open source license detected by GitHub (the detection that fills the About section); created inside the submission period, or updated in it when the rules allow existing projects; files the rules name (for this event: scope.md, prd.md, spec.md); a README at the root.
- Video: host is one the rules allow (for example PayPal's event takes YouTube only); publicly reachable through the host's oEmbed; under the length limit when the host reports length (Vimeo does; YouTube does not without a key, so Preflight says check it yourself).
- What the judges score, from the Official Rules, with a warning when the overview page shows a different list.
- Who can enter, shown for you to confirm.
Judging criteria
Design
- One page, one form, three example buttons that run real checks, so a judge can see it work in one click.
- Results read like a pilot's checklist: grouped Timing, Repository, Video; a one-line summary ("7 pass, 1 fail, 1 to confirm"); a plain next step ("Fix the failing check before you submit, then run it again").
- Quiet dark interface, green for pass, coral for fail, amber for check yourself, rule quotes in monospace with a link to the source.
- Honest states: "Couldn't check" with the reason when GitHub's anonymous limit is hit; a note when an event's rules page has little text; a footer listing what Preflight cannot see.
- Checked at 1440 and 390 pixels wide with no horizontal overflow.
Potential Impact
- Who: anyone about to submit to an online Devpost hackathon, usually in the last hours.
- The problem is documented by Devpost's own judges. Karen Bajza-Terlouw (Databricks), in Devpost's "Advice from 5 seasoned judges": "it was surprising to see how many submissions did not fulfill the basic requirements."
- The stakes: on events built on Devpost's standard rules, including this one, Stage One is pass/fail before any criterion is scored.
- The rules really differ by event. From the Official Rules of three live events: PayPal requires video "publicly visible on YouTube"; Build With AI: Basics requires "the planning documents generated by the Skill Pack (scope.md, prd.md, and spec.md)"; Amazon's says the license "should be detectable and visible at the top of the repository page (in the About section)".
- What the demo shows: the same public repo passes on Amazon's event and fails on this one, because this event requires the planning files.
Innovation/Idea
- Rules-grounded, not generic: it does not ship a fixed checklist. It reads each event's Official Rules at run time and quotes them, so the checks change with the event.
- It found a real inconsistency on Devpost itself: this event's overview page lists three judging criteria (Design, Innovation/Idea, Presentation), while its Official Rules score four (adding Potential Impact). Preflight flags that and points to the rules' own line that the Official Rules prevail.
- No language model at runtime. Devpost rules pages share one template, so plain text matching extracts the sentences exactly. A model could paraphrase or misquote a rule, which would defeat the point.
Presentation
- The video (1:51) opens with the problem and the judge's quote, says who it is for, then runs the live site on three cases: a submitted entry that passes, the same repo failing a different event's rules, and Preflight's own repo while still private. It ends with how it works and the planning files.
- Narration is a synthetic voice, disclosed on screen.
How we built it
- Planned with the Devpost Learn skill pack (1-start through 5-build). The scope, PRD, spec, build checklist, and app map are in
devpost/. - Next.js 16 (App Router) and TypeScript on Vercel, Tailwind CSS 4, one server route (
/api/preflight). src/lib/devpost.tsfetches the event's/and/rulespages and extracts quotable sentences;src/lib/github.tsuses two GitHub REST calls (repo and recursive tree);src/lib/video.tsuses YouTube and Vimeo oEmbed;src/lib/checks.tsturns rules plus findings into rows.- Only
*.devpost.comevent hosts are fetched. No keys, no sign-in, nothing stored. - Tests: 22 Vitest tests, including the parser on saved Official Rules pages from four real events (Build With AI: Basics, Amazon, Qloo, PayPal) and every status path with fake GitHub and oEmbed answers. Typecheck, lint, and production build pass.
Challenges we ran into
- Devpost returned 403 to our server when the request asked for
text/htmlexplicitly; sending no accept header fixed it. - Rules text breaks naive sentence splitting ("scope.md, prd.md" contains periods), so the splitter only breaks on a period followed by a space and a capital letter.
- Scraping YouTube for video length gave inconsistent results from our server, so Preflight does not guess: it marks length "check yourself" for YouTube.
- Events differ in small ways: Qloo's rules have no video requirement, Amazon allows existing projects if significantly updated, PayPal allows YouTube only. Each case is a test.
Accomplishments we're proud of
- Every check on the page carries the exact rule sentence it tests.
- It caught a real disagreement between this event's own pages.
What we learned
- Writing the open question into the spec first (can YouTube length be read without a key?) and settling it with one small experiment changed the plan before any UI was built.
- Quoting is more trustworthy than summarizing for anything a judge will hold you to.
What's next
- GitLab and Bitbucket repos.
- A shareable result link, and a GitHub Action that runs Preflight on each push.
- Checking the Devpost project page fields once a draft exists.
What it does not claim
- It does not tell you whether you will pass Stage One; judges also decide theme fit and quality.
- It cannot see private repos, cannot tell unlisted from public on YouTube, and cannot read YouTube video length.
- It does not decide eligibility for you.
- Rule extraction is text matching tuned on Devpost's standard rules template and tested on four events; an unusual rules page may yield fewer checks, and the check says so rather than guessing.
- It is not made by or affiliated with Devpost.
AI use disclosure
Preflight was built by Joe Simo's autonomous hackathon agent (an AI coding agent). The agent ran the Devpost Learn skill pack end to end, playing both the interviewer and the learner from Joe's standing instructions, and wrote the code, tests, docs, the demo video script, and this write-up. The planning documents say so. The app itself uses no AI at runtime. The demo video narration is a synthetic voice (Piper TTS, LJ Speech voice), disclosed on screen. No real person's face or voice is used.
Built With
- github-api
- nextjs
- oembed
- piper-tts
- react
- remotion
- tailwindcss
- typescript
- vercel
- vitest