ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
QBSheet is an offline-first electronic scoresheet for quiz bowl tournaments, practices, and scrimmages.
EducationTypeScript · RustGitHub @gbyoOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
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
A modern quiz bowl platform for scoring, tournament management, and live tournament experiences with QBLive.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
QBSheet is an offline-first electronic scoresheet for quiz bowl. It runs entirely in a web browser.
You can use QBSheet to score a game from a QBJ file. You can also connect it to tournament-control software with QBTCP. For practices and scrimmages, you can create a game directly in QBSheet.
QBSheet works as a website or an installable PWA. Standalone scoring does not require an account, a database, or an internet connection.Read the full README ↗QBSheet is an offline-first electronic scoresheet for quiz bowl. It runs entirely in a web browser.
You can use QBSheet to score a game from a QBJ file. You can also connect it to tournament-control software with QBTCP. For practices and scrimmages, you can create a game directly in QBSheet.
QBSheet works as a website or an installable PWA. Standalone scoring does not require an account, a database, or an internet connection.
The repository also includes QBSheet Director, the desktop tournament-control application. It is a
separate application under apps/director with its own Vite config and Tauri shell,
and it is not part of the website: the deployed site has no URL that launches tournament control. See
running Director below, and the product page at /about/director/.
| What it is | |
|---|---|
| QBSheet Web / Scorer | The browser scoresheet. Offline-first, no account, QBTCP client. |
| QBSheet Director | The desktop tournament-management application. Authoritative tournament state, local SQLite, QBTCP server. |
| QBSheet Live | The participant-facing half: a native iOS app, an App Clip, a responsive web client, and an open protocol for publishing a tournament. |
The website carries the scorer plus a marketing page for each of the other two, at /about/director/
and /about/qblive/. Director is installed on the tournament-control computer; QBSheet Live Web is
served from live.qbsheet.com. Neither runs on the QBSheet website.
Director runs the tournament. Live publishes the tournament.
QBSheet Live is entirely optional and is never required for scoring, QBTCP, scheduling, result acceptance, advancement, statistics, recovery, or persistence. If the internet disappears mid-day, the tournament continues normally and Live catches up afterwards. A tournament's public data lives in the tournament director's own infrastructure — QBSheet does not host it and does not pay for it.
See the QBSheet Live architecture and the QBLive protocol.
There are three primary ways to start a game.
Open a QBJ assignment or tournament file.
If the file contains more than one game, select the game that you want to score.
After the game, export the result as a QBJ file.
QBSheet can also read legacy .qbg files for compatibility.
QBSheet can connect to tournament-control software that supports QBTCP.
Enter the tournament server address. Pair the room with the server. QBSheet can then receive game assignments and send results to the tournament system.
QBSheet also keeps local recovery data on the device.
For protocol information, see QBTCP.
You do not need a tournament system to use QBSheet.
Select Create game. Enter the two teams, the players, and the scoring rules. You can then start the game.
This mode is useful for practices, scrimmages, tryouts, and pickup games.
Created games use the same scorer, corrections, recovery features, and QBJ export as other QBSheet games.
QBSheet uses two standards for interoperability.
QBTCP uses QBJ for game data. File-based games and connected games therefore use the same game format.
QBSheet requires Node.js 22 or later.
git clone https://github.com/gbyo/qbsheet.git
cd qbsheet
npm ci
npm start
Vite starts the local development server.
Director is a separate application and does not run from the root Vite server.
npm run director:dev # the Director user interface, on http://127.0.0.1:1420
npm run director:tauri:dev # the real desktop application, with its native storage and QBTCP server
npm run director:build # typecheck and build the Director frontend
npm run director:test # the Director shell's own suite
The local QBTCP listener and the durable tournament store exist only in the native shell, so the
browser-served user interface can plan a tournament but cannot run one. See
apps/director/README.md.
Run these checks before you submit a change:
npm run lint
npm run typecheck
npm test -- --run
npm run build
QBSheet Live has its own suites. The Cloudflare and iOS ones need workerd and Xcode, so they run in
a separate workflow rather than in the main gate:
npm run qblive:test # protocol, public projection privacy, Live Activity payloads, conformance
npm run live:test # QBSheet Live Web
npm run live:dev # QBSheet Live Web against a running backend
Run the browser end-to-end tests with:
npm run test:browser
For more development information, see CONTRIBUTING.md.
QBSheet builds as a static site. You can host it on GitHub Pages, Cloudflare Pages, or another static host.
Build the production version with:
npm ci
npm run build
The build output is in dist/.
QBSheet uses relative asset paths by default. The same build can work at a domain root, in a repository path, or from a local copy.
Set BASE_PATH if the deployment requires a specific base path:
BASE_PATH=/qbsheet/ npm run build
The service worker provides the application shell for offline use.
Director is not part of that build. It is a desktop application, released per platform from a
director-v* tag by .github/workflows/director-release.yml; see
Director releases.
| Document | Description |
|---|---|
| QBTCP | Protocol for communication with tournament-control software |
| QBJ assignment profile | How QBSheet reads and writes QBJ |
| Transfers | Moving assignments and results by USB, folders, and downloads |
| QBG migration | Compatibility information for the older QBG and API formats |
| Spreadsheet clipboard | Copy one complete game into a shared tournament spreadsheet |
| Test file generation | Information about test files and development fixtures |
| QBSheet Live architecture | How Live fits together, and the canonical domain decision |
| QBLive protocol | The normative public protocol for publishing a tournament |
| QBSheet Live for iOS | iOS targets, universal links, App Store Connect checklist |
| Live Activity | ActivityKit sharding and measured broadcast payload sizes |
| APNs prototype result |
Bug reports, tournament testing, documentation, and code contributions are welcome.
Read CONTRIBUTING.md before you open a pull request.
The Code of Conduct applies to project participation.
Report security problems as described in SECURITY.md. Do not report a security problem in a public issue.
QBSheet is available under the GNU Affero General Public License version 3 or later.
QBSheet includes work derived from the YellowFruit project. See NOTICE.md for attribution and project history.
| What was measured about reaching Apple's push endpoints |
| Live load results | WebSocket load, and APNs channel-consumption modelling |
| Live verification status | What is demonstrated, what is tested, and what is not |
| Director releases | How Director is versioned, built per platform, and published |