Data model

Three tables carry the whole reaction flow: a talk, its sessions, and the reactions tapped during them. Account tables like users and user_identities live in Authentication instead, so they’re covered once rather than twice.

talks

One row per conference talk, owned by a user.

FieldTypeNotes
titlestringWhat the speaker sees on their dashboard
slugstringUnique, auto-generated from the title, URL-safe
user_idreferencesOwning speaker

The slug is the thread that ties all three actors together: it’s in the attendee’s URL, it’s the PubSub topic name, and it’s the Channel topic the extension joins. One string, three jobs.

talk_sessions

A recording window within a talk. A speaker can run the same talk multiple times (a conference circuit, a rehearsal, the real thing) and each run gets its own session.

FieldTypeNotes
labelstringAuto-increments "Session 1", "Session 2"... renameable from the dashboard
started_atdatetimeSet when the session starts
ended_atdatetimeNil while the session is active
talk_idreferencesParent talk

See Talk sessions for how sessions get started and stopped.

reactions

One row per emoji tap, but only while a session is recording.

FieldTypeNotes
emojistringThe tapped emoji
slide_numberintegerDefaults to 0, meaning unknown or before the session started
talk_session_idreferencesDeleted along with its session

The full set the attendee can pick from, straight from talk_live.ex, is:

Attendee emoji set
❤️ 😂 👏 🤯 🎉 😮 🎯 🔥 💡

Where the code lives


This site uses Just the Docs, a documentation theme for Jekyll.