SIDEQUEST← All guides

Guide 08 · Progress that follows the family

Save here. Sync later.

The browser saves progress first. On the hosted site, one private family link can sync trusted devices through Vercel's database.

Keep the link like a house key. Anyone who has it can read and change this family’s Sidequest progress.

The simple version

1

Today

The browser saves on this device with localStorage. Refreshing does not erase the checklist.

2

After setup

The same save also goes to a private cloud record. Another family device with the link can load it.

PRESS SAVE → BROWSER SAVES FIRST → CLOUD TRIES SECOND
cloud down?   The local device keeps working.
cloud back?   The next load tries again.
Local play never waits for the database.

When two devices save

01

Each save carries a revision

The server accepts a save only when it was based on the newest copy.

REV 7 → SAVE → REV 8An old REV 6 save gets 409 instead of erasing new progress
02

Merge checkmarks with OR

For "once checked, stays checked," combine both lists so a check on either device wins.

✓ □ ✓   +   □ ✓ ✓   =   ✓ ✓ ✓Do not use this rule for Reset
Check

Two devices can finish different steps without losing either.

Reset rule

Load the newest revision, then save one explicit cleared list.

Grown-up technical setup

Connect Neon on Vercel

  1. Open the Vercel project. Add Neon Postgres from Marketplace storage and choose the Free plan.
  2. Connect it to Sidequest and enable the needed environments.
  3. Add sensitive variable SIDEQUEST_STATE_PEPPER. Generate at least 32 random bytes with openssl rand -base64 48.
  4. Confirm that Vercel added DATABASE_URL. The endpoint creates its small tables on first use.
  5. Redeploy.

Server only

DATABASE_URL and SIDEQUEST_STATE_PEPPER never go into browser JavaScript or the repository.

Built-in guardrails

  • Same-origin POST requests. No public CORS.
  • 32-byte random family keys and HMAC-SHA256 record names.
  • Atomic compare-and-set writes.
  • 12 KiB maximum state, bounded nesting, values, keys, and strings.
  • 120 API operations per ten-minute IP window.
  • Five-second database timeout and no-store responses.
  • No accounts, email, names, tracking, recordings, or control secrets.

Grown-up references