The official site for hackPHS 2026
From the project folder run
python wsgi.pyThen open http://localhost:3000
Press Ctrl+C in the same terminal to stop the server
index.htmlcontains the page content and accessible markupstyles/contains focused stylesheets for the layout and each visual areascripts/contains the page behavior split by responsibilityassets/contains branding sponsor images and documentswsgi.pyruns the small local development server
Questions about the event can be sent to team@hackphs.tech
Registration is closed. The homepage and FAQ link directly to the waitlist form
in index.html, including when JavaScript is disabled. scripts/registration.js
only shows the reminder bar after the hero scrolls out of view.
Hoodie registration is closed. Registered attendees must print, complete, and bring the participant waiver and their ID to check-in. Participants under 18 also need a parent or legal guardian signature. The PDF is an unchanged copy of the organizer's waiver.
The homepage schedule and event details follow the logistics schedule. Elad Hazan's talk is Saturday, 11:30 AM–12:30 PM, per the organizer's correction.
Open /leaderboard.html, also linked in the main navigation. Update scores in
the existing Google Sheet as usual. The site reads only the Sorted Teams tab
(gid 857309), columns A and B, with the headers Teams and Score.
Keep that tab in the desired ranking order. Equal adjacent scores share a rank;
the site does not recalculate totals or sort the raw event scores.
The sheet must remain viewable by anyone with the link. Only share team names
and scores, not private attendee information. Sharing the whole workbook makes
its other tabs public too. For tab-only publishing, publish Sorted Teams as CSV
and replace standingsUrl in scripts/leaderboard-data.js with that published URL.
The page polls every 30 seconds while visible and refreshes when reopened or when Refresh is clicked. Google may cache results briefly. On connection failure, the last successful standings remain visible and are labeled as out of date. An empty sheet shows an awaiting-scores state, not example teams. A team with a blank score waits for a score; zero is a valid score. Formula errors are reported as unavailable updates instead of becoming fake scores.
Event dates remain October 10-11, 2026, as confirmed by the organizers. The linked event guide is maintained separately and still needs its dates corrected.
The website and Python preview do not need Node or npm. If Node is already
available, run the data checks with node --test tests/data.test.mjs.
Browser checks use Playwright and Edge: with the Python preview running and
Playwright available to Node, run node --test tests/browser.test.mjs.
Those checks include the real public sheet connection, mocked score updates and
outages, the midnight waitlist switch, schedule rooms, and phone layouts.
Test teams are browser-only fixtures and are never written to the Google Sheet.