feat(sponsor): add new Sponsor CRM system (phase 1)#262
Merged
Starefossen merged 6 commits intomainfrom Nov 5, 2025
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
- Add Sanity document schemas: sponsorForConference and sponsorActivity - Add server-side Zod schemas for sponsor CRM input/updates/validation - Add migration (and README) to create sponsorForConference docs from existing conference.sponsors[] - Implement sponsor-crm lib (types, sanity helpers, activity logging, list/create/update/delete, copy from previous year) - Add admin UI: pipeline page, SponsorCRMClient, SponsorCRMForm, UI utils and components - Wire up TRPC client calls and formatting helpers for invoice/status display Provides end-to-end support for managing sponsor relationships, stages, invoices and activity history in the admin.
aa92172 to
6af800a
Compare
- Introduce a full-featured sponsor CRM and admin UX - New client components for CRM board: SponsorCRMClient, BoardViewSwitcher, SponsorBoardColumn, SponsorCard - Modular CRM form with smaller controls: SponsorCombobox, OrganizerCombobox, StatusListbox, TierRadioGroup, ContractValueInput, and related constants - Filtering (tiers, assigned_to, tags), URL-syncing of filters, view modes (pipeline / contract / invoice), keyboard shortcuts (Cmd/Ctrl+O to open, Cmd/Ctrl+S to save) - Add sponsor page client for tier management: SponsorPageClient and admin pages for CRM, tiers, contacts, and activity - New admin widgets: SponsorDashboardMetrics, SponsorActionItems, SponsorActivityTimeline - Utilities for CRM: calculateSponsorValue, activity/action item helpers, board utils and exchange rate usage - Sanity & data model updates - Add contract_status field and legacy_synced_at to sponsorForConference schema (with dropdown options and readOnly legacy timestamp) - Expand sponsor CRM types to include ContractStatus, support GBP currency, and rename avatar -> image for organizers/assigned_to - Update Sanity fetching/filters to include contract_status/tiers and assigned image field - Server & router updates - Add support for logging contract status changes and list conference activities - Add crm.listOrganizers endpoint to expose organizers for assignment UI - Expose activities listing for conference and wire up activity creation logging on updates - Extend sponsor list query to accept tier filters - New lib utilities - lib/sponsor/utils: grouping, deterministic shuffle, seed, tier sorting/utilities - lib/sponsor-crm/action-items: generate prioritized action items - lib sponsor-crm activity/list improvements (listActivitiesForConference) - UI & component refactors - Sponsors component now uses sponsor utils for grouping, shuffling and tier price lookup - AdminPageHeader improved with backLink support and small class adjustments - ImageUploadZone minor class formatting fix - Added many new admin component exports and removed old SponsorActions (replaced by SponsorPageClient workflows) - Forms, UX & polish - SponsorCRMForm refactor to use new subcomponents, show notifications on success/failure, reset mutation state on open, richer create/update handlers and keyboard behaviors - Enhanced SponsorTierEditor currency options (add GBP) - Misc - package.json: change "format" script to use prettier --write --list-different - sanity.cli: add deployment.appId configuration Notes: - This is a large feature addition; backend schema and API changes were added to support contract workflows, filters and activity logging. - Some exports and components were renamed/moved (SponsorActions removed, SponsorPageClient added) — update any external imports if necessary.
Closed
12 tasks
… wrapping, alignment, and configurable logo/text settings - expose LOGO_SIZE_MIN/ MAX / DEFAULT, LOGO_PADDING_DEFAULT and TEXT_PADDING_* in config and use them as component defaults - implement multiline text wrapping, per-line text alignment, horizontal positioning, and text padding; add font size, padding and color controls - add per-line "Advanced Options" toggles and a global background "Advanced Options" to reveal extra controls (logo size/position, upload, color) - render logo with correct aspect ratio and pointer-events-none; fix export/preview canvas styles and spacing - various UI tweaks: reduced panel padding, adjusted grid gaps, default text/logo values and initial expanded states
… options - add qr-code-styling dependency (and related lockfile entries) - introduce QR constants & presets in meme-generator-config (size, defaults, color & style options) - integrate QRCodeStyling to generate QR PNG data URLs and draw onto the canvas - add QR Code panel in MemeGenerator with URL input, advanced options (size, position, dots/corner styles, colors) - render generated QR into preview/export canvas and wire controls to state - small accessibility tweak: make text input label sr-only
…el first Reorder MarketingTabs to show the Meme Generator first and set defaultTab to "meme-generator". Also tidy up a minor formatting/indentation in the proposal speakers filter predicate.
- add scripts/check-speaker-slugs.ts and scripts/fix-missing-slugs.ts to detect and remediate speakers missing slug.current in Sanity - update components (SpeakerPromotionCard, SpeakerShare, SpeakerShareSidebar, SpeakerGridExample, WorkshopCard) to build profile URLs from speaker.slug (remove fallback to speaker._id) - improve getSpeakerSlug implementation: warn when slug is missing, generate a slug from the speaker name as a fallback, and return 'unknown-speaker' as the ultimate fallback; remove unused constant - small formatting/JSX cleanup in WorkshopCard
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request introduces a new Sponsor CRM system for conference sponsors, including new document types, migration scripts, and schema updates. The changes migrate existing sponsor data to the new system in a backward-compatible way, add contract tracking fields, and provide tools for future sponsor management and activity logging.
Sponsor CRM System Implementation
sponsorForConferencefor sponsor-conference relationships andsponsorActivityfor logging sponsor-related actions. These are now included in the main schema (sanity/schema.ts,sanity/schemaTypes/sponsorForConference.ts,sanity/schemaTypes/sponsorActivity.ts). [1] [2] [3]014-create-sponsor-for-conference) that scans all conferences with sponsors, createssponsorForConferencedocuments for each sponsor entry, copies relevant contract/tier info, and ensures no duplicates. The migration is idempotent and non-destructive, preserving legacy data for public display. [1] [2]Contract Status and Legacy Sync
015-add-contract-status) that sets a newcontract_statusfield and alegacy_synced_attimestamp on allsponsorForConferencedocuments, initializing values based on existing status and contract info. [1] [2]Tooling and Configuration
sanity.cli.ts).package.json).These updates lay the foundation for a robust sponsor CRM pipeline, enable future sponsor management features, and ensure smooth migration from legacy sponsor data.