- Split Social Glass MCP into a safer public read-only endpoint and a separate write-capable endpoint for approved clients.
- Added a dedicated write MCP route and metadata endpoint so external tools can connect without exposing write operations by default.
- Added OAuth client allowlisting for the write-capable MCP surface to keep dynamic client registration compatible with safer defaults.
- Updated
/submitsurvey behavior so org-required screeners only force completion for submitters assigned to that organization’s active prompts. - Added a browseable opportunities list on
/submitthat shows org screeners to all submitters, even when they are not currently blocked by one. - Expanded submitter survey access so browseable opportunity surveys can still be opened and completed from the submit flow.
Admin Payout Controls (04/03/2026)
- Added an admin payouts page for sending one-off payouts manually and reviewing recent payout history in one place.
- Added a prompt-level payout panel so admins can preview which submitters met a prompt’s submission target for a selected window and send base payouts directly from the prompt screen.
- Added duplicate protection for prompt-window base payouts so rerunning the same prompt payout window skips people who were already paid.
- Added PayPal webhook reconciliation so payout statuses can update from PayPal processing events after the initial send request.
- Added an explicit payout platform field on users so PayPal vs Venmo no longer depends on guessing from the payment identifier format.
Agent Registry Foundation (04/01/2026)
- Reworked the existing instruction registry so rows can now act as first-class agent configs without migrating the stored prompt content into a new table.
- Added agent-specific row metadata for scope, enabled state, tool access, and attached skills, while keeping global prompts, legacy prompt artifacts, revision history, and automations in the same storage layer.
- Updated the admin surface so the registry can create and edit agent rows directly, including tool and skill assignment, while still supporting legacy instruction and automation rows during the transition.
Prompt Payout Foundations (03/31/2026)
- Added a base payout amount on prompts so admins can store how much a completed prompt should pay without keeping that logic in spreadsheets.
- Expanded payout records to capture the reason for payment, including whether it is a base payout or a bonus, which prompt it relates to, and the payout window it covers.
- Started storing payout amounts in cents for cleaner money handling while keeping the current PayPal sending flow in place.
- Fixed the prompt payout export so submitters who exactly hit the submission target are marked as payable instead of being skipped.
Admin Chat Streaming Simplification (03/30/2026)
- Swapped the admin agent chat over to OpenAI’s official AI SDK UI stream bridge, which cuts out a custom stream translation layer that had been causing drift and flaky behavior.
- Removed the old in-memory “resume the same live stream” path and replaced it with saved in-progress assistant drafts, so reloading still brings back the answer-in-progress without depending on a fragile reconnect buffer.
- Kept stop/cancel behavior for active runs, while making finished assistant replies and failure states persist more cleanly in conversation history.
Social Glass MCP (03/26/2026)
- Added a first MCP server for Social Glass so external MCP-capable agents can search zeitlets, inspect exact posts/creators/insights/personas, and make the same core insight/persona/project/dashboard updates our in-app chat agent already supports.
- Protected the MCP route with Clerk OAuth metadata endpoints, then enforced Social Glass org access in-app so non-admin users stay scoped to their assigned organization while admins can opt into a specific org.
- Kept the MCP tool contracts aligned with the existing chat-agent schemas and persistence adapters, so we now have one shared source of truth instead of a separate external-agent API surface.
Dashboard Revision Restore From History (03/24/2026)
- Added an in-product restore action to dashboard revision history, so admins can roll a dashboard draft back to any saved publish or restore snapshot without leaving the report view.
- Restoring exits read-only revision mode and returns the dashboard to draft, making it easy to review changes before publishing again.
- Added a dedicated
get_zeitlettool so the agent can pull one exact post, creator, insight, or persona with its direct linked evidence instead of guessing from search snippets. - Updated
search_zeitletsso it defaults to lightweight scan-friendly cards, while the richer mode now previews real entity fields instead of relying on the internal search corpus.
- Insight and persona relationships now use ordered
entityLinksrows as the backend source of truth, which makes saves less fragile when old linked data is imperfect. - We removed the unused insight
childrenrelationship from the product and backend contracts. - A new backfill + verification path preserves the existing order of linked posts, creators, personas, and related insights while we migrate older records safely in stages.
- Agent write tools now return structured save summaries instead of bare success strings, so chat workflows can see exactly what changed.
- New insights created through chat default to draft without silently re-drafting existing insights when they are edited.
- Recent post search now excludes posts missing descriptions and reports how many low-signal posts were skipped.
- Added readable slugs for projects so agent workflows can target projects by slug instead of only full internal IDs.
- New and renamed projects now keep their slug in sync automatically, and existing projects were migrated onto the same persisted slug field.
- Updated the agent project tools and write path so
project_<slug>and bare project slugs work the same way as other agent-friendly references.
- Tightened inbound SMS handling so split Twilio text parts are reconstructed into one logical message instead of being treated as unrelated submissions.
- Preserved more inbound Twilio metadata and attachments so debugging and follow-up handling are more reliable when messages include links, media, or multipart delivery details.
- Added a safer rollout path for the SMS routing agent behind a feature flag, including clearer replies when we can auto-route a text and when we need the sender to clarify the prompt.
- Simplified insight editing for agents so long-form insight content is rewritten as a whole instead of patched via special append/prepend/replace operations.
- Cleaned up zeitlet references so the system now relies on each item’s canonical slug for agent lookups instead of storing a separate short ID on the record.
- Kept saved markdown links stable by continuing to store durable internal IDs in
sg://...references, while still letting agents and tools use readable refs likepost_<slug>. - Ran the migration on both dev and prod, including mention normalization and legacy
shortIdcleanup.
- Added an automated monitor that checks key public pages on a schedule instead of waiting for someone to notice a broken link.
- Public dashboard views and major public site pages now have recurring browser-based health checks.
- When those checks fail, the team gets an alert with a direct link to the failing run so issues can be triaged quickly.
- Fixed admin user edits reverting after save by making Clerk the source of truth for logged-in identity fields like names, phone, and org membership.
- Updated submitter profile editing so phone still uses Clerk verification, while contact email now saves directly to the app profile without the broken Clerk email verification step.
- Removed stale local table state in the admin users screen so prompt and survey edits follow live Convex data more reliably.
- Hardened background profile generation and user merges to avoid writing older profile data back over newer admin edits.
- Reworked the signed-out
/submitflow so phone sign-in now falls straight into account creation for brand-new submitters instead of dead-ending on the sign-in screen. - Simplified submitter auth back onto Clerk’s built-in sign-in screen, so signed-out
/submitnow redirects to/signinand we no longer maintain a custom phone auth flow there.
- Added signed-in dashboard revision history so teams can open older publish and restore snapshots directly from the dashboard.
- Hardened dashboard saves and restores so partial updates no longer wipe sibling sections and restores behave like real point-in-time snapshots.
What changed
- Removed automatic admin promotion during dev database sync.
- Added a dedicated, secret-gated Convex ops command to safely set or clear a user’s admin role.
- Standardized operator email configuration to
ian@ambassco.com. - Added a clear internal runbook and agent instructions for future authorization-related maintenance.
- Prevents accidental admin access from being re-applied by default.
- Gives us one predictable, auditable way to repair access when auth/account mappings drift.
- Reduces repeated debugging and confusion for future agent-driven operations.
What changed
- Added a new
payoutstable to track each payout request and response in one place. - Added a minimal PayPal Payouts integration that can send a single payout and store the result.
- Added admin and CLI payout actions so we can run a live end-to-end payout test immediately.
- We can now verify real payout connectivity before finalizing broader payout business rules.
- Every payout attempt has a persistent record with status, provider IDs, and error details for debugging.
What changed
- Simplified
submissionsto a lightweight audit log (who submitted what URL, where it links, and prompt/user context). - Removed processing status history from
submissionsand track only latest processing state onposts.processingusing timestamps (startedAt,completedAt,failedAt). - Updated submit/scrape/orchestrator flows to patch
posts.processingdirectly. - Updated admin metrics and sender/client rollups to derive processing state from linked
posts. - Added migration support to backfill latest post processing state from legacy submission fields and remove deprecated submission fields.
- Keeps submissions clean and purpose-built as an immutable record of user submissions.
- Removes run-history table complexity while preserving the only state needed for product operations (latest run outcome).
- Keeps deep debug history in Sentry/PostHog rather than the primary relational model.
What changed
- Clarified telemetry ownership so runtime errors and incidents are handled in Sentry, while product behavior and funnel analytics remain in PostHog.
- Stopped duplicate client-side exception ingestion in PostHog to reduce overlap and alert noise.
- Standardized failure telemetry to consistently include a short failure reason and Sentry event IDs when available.
- Faster debugging with one clear source of truth for production failures.
- Cleaner analytics and less duplication between tools.
- More reliable cross-tool triage by linking product failure events to Sentry incidents.
Unified Social Account Identity Across Entities (02/27/2026)
- Migrated social account identity to a shared
accountstable as the source of truth across creators, users, brands, and organizations. - Added owner-linked account rows (
ownerType+ownerId) for consistent cross-entity identity mapping. - Updated creator/user/brand/organization write paths to sync account data through the
accountstable. - Added and ran backfills to populate canonical account rows from existing records.
Dashboard Foundation + Publish Revisions (02/25/2026)
- Added a new first-class
dashboardbackend model that supports a single live dashboard per organization. - Added
dashboardRevisionsas immutable publish snapshots, so edits can stay in draft until an admin publishes. - Publishing now records a revision history entry and marks that snapshot as the live version for read flows.
- Added a migration utility to seed each organization’s new dashboard from its most recent legacy report.
Analytics Quality
- Standardized PostHog user identity to Clerk IDs so user activity is no longer fragmented across multiple profile IDs.
- Updated messaging and vector-search telemetry paths to stop creating extra People records from internal/system identifiers.
- Switched client tracking to identified-only person profiles, which keeps anonymous funnel event tracking while reducing People-page noise.
- Added a PostHog identity backfill tool that aliases legacy Convex-based IDs to canonical Clerk-based IDs and refreshes user profile traits.
- Added dry-run and execution commands so the cleanup can be run safely and repeatedly.
Analytics
- Fixed signup tracking so funnel events are captured reliably from redirect through onboarding completion.
- Added clearer organization-signup telemetry to show view and continue actions during activation.
- Improved AI telemetry identity quality so background embedding jobs no longer pollute user-level analytics.
- Replaced placeholder PostHog reporting assets with production-ready dashboards for core product health and agent reliability.
- Added an idempotent provisioning script so reporting dashboards/insights can be reconciled quickly in both dev and prod.
- Improved public routing so invalid organization links now go to the landing page instead of forcing users into a single fallback org.
- Simplified public dashboard search reliability fixes and removed unused dev-only
react-grabhooks from the app. - Standardized optional end-to-end test URL configuration so dashboard and chat smoke tests skip cleanly when target URLs are not set.
Reports
- Dashboard v2 can now auto-populate the Insights → Consistent list when a new report is created.
- Admins can now re-run the Insights Consistent formula from the Insights tab and tune all formula settings directly in the UI.
- The consistency controls now include full formulas, detailed plain-language explanations, and per-setting tooltips so non-technical teammates can understand exactly how scoring works.
- Removed the max-insights cap from insight consistency seeding; qualifying insights are now controlled by eligibility + threshold instead of a hard count limit.
- Added the same full formula controls and explanations to the Creators → Consistent view, including all backend tuning knobs.
- Insight consistency reseeding now runs through an action flow to avoid mutation timeout failures on larger datasets.
- Added PostHog tracking for consistency formula runs (
started,completed,failed) across both creators and insights.
Insights
- Standardized
search_zeitletsto a single tool contract that returns only the existing agent-facing formatted string output. - Removed the extra side metadata channel (
results/idMapDeltamerge path) from runtime handling to reduce moving parts and failure points. - Removed request-scoped
idMaplookups entirely; typed short IDs now resolve authoritatively by slug in Convex (or pass through as full IDs), and writes/searches use that same path end-to-end.
Insights
- Reduced stored chat metadata to the fields we actively use in the product, which lowers message document size and keeps chat history lighter.
- Removed bulky Twilio raw payload storage from message records while preserving key delivery/error fields.
- Added dedicated PostHog events for SMS ingest/send/failure paths so Twilio transport visibility is tracked in analytics instead of overloading core message records.
Insights
- Simplified how dashboard report list updates are processed so all list edits now follow one consistent path.
- Reduced duplicate update logic in agent and backend layers, which should make report edits more reliable and easier to maintain.
- Added targeted regression tests for report list update behavior to help prevent this area from drifting again.
Insights
- Agent-driven insight edits can now target specific parts of long insight writeups instead of rewriting the whole content block.
- Insight updates now support both relationship-list changes and focused field edits in one operation.
- Added safer text-edit behavior that fails clearly when edit anchors are missing or ambiguous, reducing accidental overwrites.
Reports
- Dashboard v2 now auto-populates the Creators → Consistent list when a new report is created.
- The default formula prioritizes creators who show up repeatedly across the report window, with extra weight for recent activity.
- Added a Re-run Formula button in the Creators tab so admins can refresh the Consistent list after changing report dates or formula settings.
- Suggested creators are still fully editable after generation, so teams can manually tune the final list.
Insights
- Added
+ Addactions inside the insight detail “similar zeitlets” rail for posts, insights, creators, and personas. - New add actions use incremental
insights.updateInsightOpsupdates so linked lists append safely without replacing existing links. - Similar insight adds now map to the current insight’s
relatedlist; post/creator/persona adds map to their matching linked fields.
- Insights are now compact-only across views; removed the old default card path and preview toggles.
- Added shared Zeitlet layout constants (
grid/listcolumns, gap, estimated row heights) incomponents/schema/view-layout.ts. CreatorViewandPersonasViewnow use shared layout SSOT and supportlayoutVariant(withvariantkept as a compatibility alias).- Removed unused
CreatorView.organizationIdand dropped unusedroundedContainerplumbing inZeitletView.
- Fixed recurring submitter/org profile loops where required email kept reappearing: Clerk identity sync now omits blank email values instead of sending
null. - Hardened
users.upsertUserso empty/invalid synced contact identifiers no longer wipe an existing Convex email/phone on re-login. - Added retry/backoff for transient
Unauthorized Clerk syncraces during initial client-side identity sync.
Agents
- Added
EvolutionAgenthandoff from/chatfor updating agent instruction templates and notifying the operator via SMS. - Added
instructionTemplates.patchTemplatemutation for safe, partial updates to system prompt templates. - Removed seed-defaults UI and hardcoded template remnants; instructions are DB-only.
- Began
userscontact flattening rollout: added top-levelusers.emailandusers.phone, dual-write from user upsert/update paths, and dual-read helpers used by admin + submitter flows. - Backfilled top-level contact fields for existing users via
migrations:runBackfillUserTopLevelContactFields(processed 1,704 users; migration statesuccess). - Cut over indexed lookups from
by_contact_email/by_contact_phonetoby_email/by_phoneacross users, messaging, surveys, migrations, and related tests. - Completed legacy cleanup: removed nested
users.contact.emailandusers.contact.phonewrites/read paths, added and ranmigrations:runStripUserLegacyContactEmailPhone, and removed those nested fields from the Convex schema.
Admin
- Added Ops Metrics dashboard for submission pipeline health (throughput, success/failure, latency, backlog).
- Added org/prompt filters, quick time presets, and daily trend view for ops monitoring.
- Added admin editor for agent/system instruction templates stored in Convex, with previews and revision history.
Insights
- Added
updatesto insights for timestamped update entries. - Added
description(1–3 sentence summary) to insights and agent tools.
- Type
@to insert linked zeitlets in chat and report textareas. - Mentions render as chips with hover previews and deep links to detail views.
- Markdown mentions now render consistently across chat, reports, and zeitlet narratives.
Reports v2
- Insights now support
signals(crossCohort+resonance) for report generation + UI. - Dashboard v2 report Insights sidebar now sources Creators/Posts from their respective tab data sources (same filters + sort), not derived from insights.
- SMS contact-card acknowledgements are now consolidated under
contactCardAcknowledgedAt(emoji tapbacks supported); runmigrations:runBackfillContactCardAcknowledgedAtto backfill legacycontactCardLikedAtdata.
Dashboard Report Ops
Added list-ops support for dashboard v2 report updates, enabling insert/move/patch/remove without sending full lists.Report Agent
Added a dedicated dashboard report agent config and chat handoff for first-pass report generation.Chat history
Chat now supports multiple conversations with a collapsible history panel and quick new-chat actions.Prompt reminder SMS
Reminder texts now show the organization name and a clearer deadline format (e.g., “Thu, Jan 22 at 11am PST”) instead of the prompt name and bare date.SMS submission confirmations
If a submission takes more than a few seconds to process, we now send a quick “processing” reply before the final confirmation count.
Chat navigation + layout
Chat now lives in the main sidebar under Dashboard, and insight results render in a horizontal scroller for easier browsing.Chat actions
Right-click actions (find similar, delete, etc.) and approve/deny controls are now available for insights/personas created in chat.Chat reliability
Message input clears immediately on send, and agent responses no longer fail due to unsupported usage metadata.Chat filters
Filter selections in chat now persist in the URL (search, semantic, platforms, prompts, date range, ours).
Agent Chat (Admin)
Admins can now chat with an AI agent to create or update insights and personas directly from selected posts, creators, insights, or personas.Select All + Filters
“Select All” now resolves across posts, creators, insights, and personas using the current FilterBar settings (prompts, platforms, time range, search, semantic).
Automated Prompt Reminders
Submitters on active prompts now receive SMS reminders every 2 days until they hit the submission target, sent before 6 PM PT and respecting SMS opt-out/consent.Bulk SMS Preview
Admins can preview the exact outbound SMS body (including auto-appended survey links and phone-prefill URLs) before scheduling or sending a broadcast.
Referral Attribution
Signup links can now carry a referral user id (
/signup?ref=<userId>) that gets stored on new user records.
Submitter links at /submit accept the same ref param.Admin Referral Dashboard
Admins can view referral counts per user and copy referral links from the new Referrals page.Prompt Signup Links
/submit links can include prompt=<promptId> to auto-assign the viewer to that prompt as a submitter.Signup SMS Welcome
New submitters who opt into texting now receive an automated welcome SMS, with prompt-aware instructions when assigned via a prompt link. The first outbound message also sends the Social Glass contact card.Duplicate Submitter Linking
Submitter logins now reconcile duplicate accounts using verified contact info, so prompts remain attached when someone signs up by phone after previously using email.Clerk Contact Backfill Tooling
Added a batch backfill action to push known phone numbers/emails into Clerk, preventing future duplicate accounts.
Unified Activity TimelineWe now keep a single “interactions” timeline that brings together messages, submissions, and survey responses for easier review and analytics.Survey Prompt Linking (In Progress)Surveys are now linked to prompt records to start consolidating how we model questions and outreach. This is the first step toward a single prompts + surveys system.
Daily Slack UpdatesYou can now receive daily morning updates in Slack with a summary of new submissions and activity. Connect your workspace in organization settings.Improved AutosaveForms across the platform now save automatically as you type, with immediate save when you click away. No more lost work.Mobile-Friendly AdjustmentsDashboard pages now display a prompt to use desktop for the best experience on mobile devices.
Share Zeitgeists PubliclyGenerate shareable links to your zeitgeist views (creators, personas, insights) that work without login. Perfect for sharing with stakeholders who don’t need full platform access.Right-Click Context MenusAll cards (posts, creators, personas, insights) now have context menus with quick actions. Right-click to duplicate, export, or manage items without opening the full editor.Dataset ExportExport your insights and reports in the full zeitlet dataset format for easy sharing and AI-assisted analysis.
Creator IntelligenceLook up any creator by their social handle or post URL to get detailed analytics and insights about their content and audience.Improved Filter BarThe filter bar across all pages now supports more options and remembers your preferences. Quickly narrow down posts, creators, and insights.Enhanced Video PlayerVideos now load faster and stream more smoothly with our new media pipeline.
Submit Posts via SMSSubmitters can now text post links directly to receive and process submissions. No app needed.Bulk MessagingSend messages to multiple submitters at once with template support. Great for announcements and prompt updates.Error MonitoringWe’ve added comprehensive error tracking to catch and fix issues faster.
Introducing ZeitgeistYour new home for understanding cultural moments. Zeitgeist brings together posts, creators, personas, and insights in one unified view.Persona CardsSee your audience segments visualized as persona cards with key traits, behaviors, and representative content.Insights with MediaInsights now support embedded videos and images in carousels, making it easier to tell the story behind the data.