Wordloop Platform
Schemas Data

Database Schema

Postgres schema — tables, relationships, and ER diagram.

Database Schema

The Postgres database is owned exclusively by wordloop-core.

Important

Schema changes must be managed through versioned SQL migrations in services/wordloop-core/scripts/migrations/. Do not apply manual schema alterations.

ER diagram

Rendering architecture map...

Tables

users

Primary user account linked to Auth0.

ColumnTypeNotes
idUUID PK
auth0_idTEXT UNIQUEExternal identity
emailTEXT
nameTEXT
person_idUUID FK → peopleOptional self-link
created_atTIMESTAMPTZ

people

Contacts and meeting participants.

ColumnTypeNotes
idUUID PK
nameTEXT
roleTEXTJob title / role description
emailTEXT
companyTEXT
tagsJSONB
voice_model_statusTEXTuntrained / training / ready
voice_confidenceDECIMAL
voice_vectorvector(512)Optional SpeechBrain embedding

meetings

Recorded or uploaded conversations.

ColumnTypeNotes
idUUID PK
user_idUUID FK → users
titleTEXT
start_timeTIMESTAMPTZ
end_timeTIMESTAMPTZ
summaryTEXTAI-generated summary
key_pointsJSONB
source_typeTEXTrecording / upload / text / anecdotal
created_atTIMESTAMPTZ

meeting_audio_files

Audio files attached to meetings.

ColumnTypeNotes
idUUID PK
meeting_idUUID FK → meetings
storage_pathTEXTGCS path
file_nameTEXT
content_typeTEXTMIME type
file_sizeBIGINTBytes
created_atTIMESTAMPTZ

transcriptions

Records the transcription job details connected to a meeting.

ColumnTypeNotes
idUUID PK
meeting_idUUID FK → meetings
statusTEXTenum: pending, transcribing, diarizing, extracting_features, completed, failed
status_messageTEXTOptional error details
created_atTIMESTAMPTZ
updated_atTIMESTAMPTZ

transcription_status_history

Audit log of transcription status changes.

ColumnTypeNotes
idUUID PK
transcription_idUUID FK → transcriptions
statusTEXT
status_messageTEXT
created_atTIMESTAMPTZ

transcript_segments

Timestamped chunks of transcribed speech.

ColumnTypeNotes
idUUID PK
transcription_idUUID FK → transcriptions
person_idUUID FK → peopleNullable
speaker_labelTEXTTemporary label before identification
textTEXT
start_timeDECIMALSeconds from start
end_timeDECIMALSeconds from start
confidenceDECIMALTranscription confidence
is_finalBOOLEANIndicates if segment is finalized (streaming)
feature_vectorvector(512)SpeechBrain embedding

tasks (formerly action_items)

Actionable items extracted from meetings.

ColumnTypeNotes
idUUID PK
user_idUUID FK → users
contentTEXT
statusTEXTpending / completed
due_dateDATE
assigned_toUUID FK → people
meeting_idUUID FK → meetings
sub_tasksJSONB
created_atTIMESTAMPTZ

notes

Free-form notes attached to people or meetings.

ColumnTypeNotes
idUUID PK
user_idUUID FK → users
contentTEXT
subject_typeTEXTPERSON / MEETING
subject_idUUIDPolymorphic FK
tagsJSONB
created_atTIMESTAMPTZ
updated_atTIMESTAMPTZ

ai_threads

Contextual AI conversation containers.

ColumnTypeNotes
idUUID PK
user_idUUID FK → users
context_typeTEXTPERSON / MEETING
context_idUUIDPolymorphic FK
created_atTIMESTAMPTZ

chat_messages

Individual messages within an AI thread.

ColumnTypeNotes
idUUID PK
thread_idUUID FK → ai_threads
roleTEXTuser / assistant / system / tool
contentTEXT
tool_callsJSONB
created_atTIMESTAMPTZ

Migration history

Migrations are applied via ./dev db migrate and live in services/wordloop-core/scripts/migrations/.

VersionDescription
20250709123530Initial schema (users, people)
20260309152000Meetings, transcripts, tasks, notes, AI threads
20260313204400Add person_id to users
20260315213000Rename action_itemstasks
20260324204621Add meeting_audio_files
20260324211500Add meeting.status
20260326090621Add meeting.status_message
20260327200316Update transcript segment fields
20260329060000Add is_final to transcript_segments
20260329204000Add meeting_status_history (later dropped)
20260330203000Add pgvector extension, transcriptions table, and voice_vector

On this page