82 lines
3.5 KiB
Markdown
82 lines
3.5 KiB
Markdown
# The Founder's Break
|
|
|
|
Event site for the weekly UF startup pool social at Silver Q, Gainesville.
|
|
Hosted by OneTouch Studio at **https://foundersbreak.onetouch.studio**.
|
|
|
|
Corben EJS site. There is no build step: `deploy_site` copies this repo verbatim.
|
|
|
|
```
|
|
site.config.js all schedule, venue and copy data
|
|
views/index.ejs the single page, including the next-date logic
|
|
public/css/style.css brand tokens lifted from onetouch.studio
|
|
public/js/main.js nav state, scroll reveal, live countdown, RSVP submit
|
|
public/assets/ the recurring .ics and the print-resolution QR
|
|
public/images/ logo, favicon, RSVP QR
|
|
```
|
|
|
|
## The date is never hard-coded
|
|
|
|
`views/index.ejs` computes the next occurrence at render time from `weekday` +
|
|
`firstEvent` in `site.config.js`. `public/js/main.js` runs the same rule in the
|
|
browser, so the countdown ticks and rolls itself over to the following Thursday
|
|
once the night ends, with no reload and no redeploy.
|
|
|
|
## Cancelling a week
|
|
|
|
Add the ISO date to `cancelled` in `site.config.js` and redeploy:
|
|
|
|
```js
|
|
cancelled: ["2026-11-26"], // Thanksgiving
|
|
```
|
|
|
|
The page then skips that Thursday, shows a notice naming the cancelled date, and
|
|
points at the next one that is actually happening. Two other places do **not**
|
|
read this list and need the same date added by hand:
|
|
|
|
- `public/assets/founders-break.ics` is a plain weekly recurrence.
|
|
- the `CANCELLED` array in the `founders-break-reminder` Corben function, or it
|
|
will email everyone about a Break that is not happening.
|
|
|
|
## Deploying
|
|
|
|
```
|
|
deploy_site id=4ae63819-3f63-4fea-b0de-eb1e5befe607 repo=gator/founders-break mode=ejs
|
|
```
|
|
|
|
Nothing redeploys itself. Every edit needs the deploy step.
|
|
|
|
## What happens when somebody RSVPs
|
|
|
|
The form POSTs to `/forms/rsvp`. The Corben sites renderer stores it in
|
|
`site_form_submissions` and fires a `form.submitted` event. From there it is all
|
|
plain JavaScript, deliberately: there is no LLM anywhere in the send path.
|
|
|
|
| Piece | Id |
|
|
|---|---|
|
|
| Trigger `Founder's Break RSVP` (form.submitted, form_name=rsvp) | `e035fb68-2ecd-452b-bf74-a051c2775423` |
|
|
| Function `founders-break-rsvp` | `3d3c4bed-c073-40a4-9a32-9ff6944737dd` |
|
|
| Function `founders-break-reminder` | `cf2a1e4c-43f9-4cf4-8fc5-652c494940ae` |
|
|
| Cron `Founder's Break weekly reminder` (every 6h) | `84efd815-5426-4952-af88-2f4ed81efc54` |
|
|
| Email list `Founder's Break` | `09429866-0005-4260-bf56-2d520eea4db7` |
|
|
|
|
`founders-break-rsvp` resolves a CRM contact, writes the email address back onto
|
|
it (`create_contact` dedupes server-side and can return a record with no address,
|
|
which would put an unmailable member on the list), adds them to the list, sends
|
|
the HTML confirmation, and sends an internal note to gatordevin@gmail.com.
|
|
|
|
`founders-break-reminder` runs every 6 hours, works out the Eastern weekday
|
|
itself, and only sends on Wednesday between 09:00 and 20:00 ET. A `kv` marker
|
|
keyed to the event date makes any repeat run a no-op, which is what makes it safe
|
|
to run four times a day.
|
|
|
|
Both functions authenticate with a scoped `email + crm` key held by the paused
|
|
**Founders Break** agent record (`666f7ad0-f546-4fc6-a3c4-14f1384e91a5`). That
|
|
agent runs nothing. It exists only because an API key cannot mint another API
|
|
key. Deleting it revokes the key and breaks both functions.
|
|
|
|
## The QR code
|
|
|
|
`public/images/rsvp-qr.png` and `public/assets/rsvp-qr.svg` both encode
|
|
`https://foundersbreak.onetouch.studio/#rsvp`. Deliberately dark-on-white:
|
|
inverted QR codes are unreliable on older scanners and these go on flyers.
|
|
Regenerate with the `qrcode` npm package if the URL ever changes.
|