# Friday
Mention `@friday` with an informal request in Slack. Friday researches current
options, keeps the decision moving, coordinates with vendors when needed, and
records the confirmed plan in Convex.
This repository is the build workspace for the 2026 Convex All Gas Hackathon.
The frontend uses ChatGPT Sites. Convex owns durable data, backend functions,
and realtime updates.
## Current foundation
- ChatGPT Sites and Vinext frontend
- Local Convex development deployment
- One validated table, one query, and one idempotent mutation
- Convex React client with a clear missing-configuration state
- Convex Auth v2 alpha with username-first passkey sign-up and sign-in
- One private, per-user note protected by Convex authorization
- In-memory authorization tests for isolation, validation, and unauthenticated access
- AgentMail Convex component mounted
- Firecrawl Convex component installed and ready to configure when an API key is
available
- Official Convex ESLint rules
- Public, evidence-based build log in `hackathon.md`
## Local setup
Use Node.js 24. Then run:
```sh
npm install
npx @convex-dev/auth
npx convex env set AUTH_RP_ID all-gas.localhost
npx convex env set AUTH_ORIGIN https://all-gas.localhost
npx convex dev
portless all-gas npm run dev
```
Keep both commands running in separate terminal panes. The Site is available at
`https://all-gas.localhost`. Convex writes the public local backend URL to
`.env.local`; keep that file private. Run the Auth setup command once for each
new deployment. It generates signing keys and stores them in that deployment.
Run `npm test` to check the private-note authorization contract without a live
deployment.
## Auth v2 playground
The project uses `@convex-dev/auth` v2 alpha with username-first passkeys. A new
username creates an account and passkey. An existing username asks for its
registered passkey. After sign-in, the playground can read and write one note
that is indexed and authorized by the authenticated Convex user ID.
The local deployment is configured for:
```text
Relying party ID: all-gas.localhost
Origin: https://all-gas.localhost
```
Passkeys are permanently bound to their relying party ID. Before publishing,
set `AUTH_RP_ID` and `AUTH_ORIGIN` on the production Convex deployment to the
final `chatgpt.site` host, generate separate production signing keys, and test a
new production passkey. Set `NEXT_PUBLIC_CONVEX_URL` to the public production
deployment before the publish build; production rejects loopback URLs. Never
copy local signing keys to production. Production Convex URLs must use HTTPS.
Passkey autofill is off in this playground, so a page visit does not create a
WebAuthn challenge. Manual registration is still a public write path. Add rate
limits or another abuse gate before a public launch.
## Sponsor configuration
Set secrets on the Convex deployment. Do not add them to `.env.local` or commit
them.
```sh
npx convex env set FIRECRAWL_API_KEY
npx convex env set FIRECRAWL_WEBHOOK_SECRET
npx convex env set AGENTMAIL_API_KEY
npx convex env set AGENTMAIL_WEBHOOK_SECRET
```
After a Firecrawl key is available, add its typed environment mapping and
component registration to `convex/convex.config.ts`. AgentMail is already
registered. Product-specific wrappers must enforce authentication,
authorization, and rate limits before they call either paid service.
OpenAI integration will be selected with the product idea. This avoids choosing
an SDK, model, or agent architecture before the user workflow is known.
## Submission requirements
- Start the app on or after August 25, 2026 at 12:00 PM PT.
- Use Convex as the backend and make OpenAI, Firecrawl, and AgentMail do real
product work.
- Publish a public `chatgpt.site` URL that works without an invite.
- Keep the GitHub repository public and `hackathon.md` current.
- Share the build on X or LinkedIn and tag the four sponsors.
- Submit the repository, live URL, and a demo video under three minutes by
September 22, 2026 at 12:00 PM PT.