Two environments
Every app has development and production. Each has its own keys, data and cases. Production does not appear in everydeck’s addresses, development has?env=dev at the end.
A locally set up app does not switch to production by itself. Until the first event from production arrives, Setup says “Waiting for your deployment”. Merged code alone sends nothing.
Flows checked only locally wait for their first real event in production. everydeck confirms them by itself.
Kinds of keys
everydeck creates every key itself and shows it once. Your agent never sends a key to everydeck.
To replace a key, go to Settings › App › Keys and click Replace. The old key keeps working for 1 day.
What to set where
The setup page and Setup › To do list exactly the ones your app needs. You cannot send these to your agent: they are steps at your host.
On a connected Supabase project
everydeck sets the settings of its own functions and its Vault entries in your project itself. The values never go to your agent or into the chat. Your own Edge Functions read their everydeck settings from the project when you deploy them as usual. If you deploy everydeck’s own functions again yourself with the Supabase CLI, Supabase turns its JWT check back on for them, and everydeck can no longer reach them.The outbox
Some apps write from the browser straight into the database, for example with the Supabase client and row level security. Then there is no server that could report “this was saved”. The browser cannot prove it either: it does not know whether the database really committed. The outbox solves this:1
A trigger writes a note
A trigger on your table writes a short note into
everydeck_outbox.event, in the same transaction as your change. If the change is rolled back, the note is gone too. So only confirmed results arrive.2
The relay sends it
The relay reads waiting notes in order, sends them to everydeck in batches, and deletes a batch only after everydeck accepted it. everydeck counts each event once.
3
everydeck records the result
The result joins the browser’s start of the same run. In Live, these events show as Supabase.
What goes through it
Only references: the name of the signal, the run id, the person, the organization, the kind and id of the record and the platform. Never column values or texts. The outbox table is closed toanon, authenticated and Supabase’s Data API.
When it runs
- On Supabase: a schedule calls the function
everydeck-outbox-relayevery 5 seconds while notes wait, and every 5 minutes with a heartbeat. A quiet app costs no extra calls. A result arrives within seconds. - On plain PostgreSQL:
npx everydeck-outbox-relayruns as a worker of your app. It delivers every 5 seconds.
When it stops
The relay is a job of your app, named “everydeck outbox relay”. It sends its heartbeat only after a run that delivered everything. If it misses two periods, a case opens in production: “Job “everydeck outbox relay” has not reported for 2 periods”. A note everydeck refuses for good stays ineverydeck_outbox.event with its error and is never sent again. everydeck does not show these anywhere else.
Limits
- A deleted row cannot be a result: it leaves nothing a signal could point to.
- At most 1,000 notes per run.