Skip to content

Commit 7f31c19

Browse files
committed
feat(site,sanity): add Chalkboard TierList with peeking AJ, hybrid relatedVideo & relatedContent system, and Senior Solutions Architect updates
1 parent ce74314 commit 7f31c19

32 files changed

Lines changed: 6114 additions & 2859 deletions

File tree

‎apps/ops/src/App.tsx‎

Lines changed: 1874 additions & 838 deletions
Large diffs are not rendered by default.

‎apps/sanity/extract.json‎

Lines changed: 2497 additions & 1922 deletions
Large diffs are not rendered by default.

‎apps/sanity/schemas/documents/booking.ts‎

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,73 @@ export default defineType({
160160
title: 'Run-of-Show Last Updated By',
161161
type: 'string',
162162
}),
163+
defineField({
164+
name: 'collaborationThread',
165+
title: '2-Way Call Notes, Comments & File Drop Chat',
166+
type: 'array',
167+
description: 'Timestamped back-and-forth call notes, comments, and dropped files shared between Alex Patterson and the guest.',
168+
of: [
169+
{
170+
type: 'object',
171+
fields: [
172+
defineField({name: 'authorName', title: 'Author Name', type: 'string'}),
173+
defineField({
174+
name: 'authorRole',
175+
title: 'Author Role',
176+
type: 'string',
177+
options: {
178+
list: [
179+
{title: 'Host (Alex Patterson)', value: 'host'},
180+
{title: 'Guest / Partner', value: 'guest'},
181+
],
182+
},
183+
initialValue: 'host',
184+
}),
185+
defineField({name: 'authorEmail', title: 'Author Email', type: 'string'}),
186+
defineField({
187+
name: 'noteType',
188+
title: 'Note Type',
189+
type: 'string',
190+
options: {
191+
list: [
192+
{title: 'Call Note / Pre-Call Summary', value: 'call_note'},
193+
{title: 'Comment / Question', value: 'comment'},
194+
{title: 'Run-of-Show Revision', value: 'ros_update'},
195+
{title: 'File / Asset Drop', value: 'file_drop'},
196+
],
197+
},
198+
initialValue: 'call_note',
199+
}),
200+
defineField({name: 'message', title: 'Message / Note Body', type: 'text'}),
201+
defineField({name: 'createdAt', title: 'Created At', type: 'datetime'}),
202+
defineField({
203+
name: 'emailedToCounterpart',
204+
title: 'Emailed to Counterpart',
205+
type: 'boolean',
206+
initialValue: false,
207+
}),
208+
defineField({
209+
name: 'attachments',
210+
title: 'Attached Files & Links',
211+
type: 'array',
212+
of: [
213+
{
214+
type: 'object',
215+
fields: [
216+
defineField({name: 'title', title: 'Title / Filename', type: 'string'}),
217+
defineField({name: 'category', title: 'Category', type: 'string'}),
218+
defineField({name: 'assetId', title: 'Sanity Asset ID', type: 'string'}),
219+
defineField({name: 'mimeType', title: 'MIME Type', type: 'string'}),
220+
defineField({name: 'fileSize', title: 'File Size (Bytes)', type: 'number'}),
221+
defineField({name: 'externalUrl', title: 'Download / Open URL', type: 'url'}),
222+
],
223+
},
224+
],
225+
}),
226+
],
227+
},
228+
],
229+
}),
163230
defineField({
164231
name: 'legacyPortalToken',
165232
title: 'Legacy Short Portal Token Alias',

‎apps/sanity/schemas/documents/sponsorLead.ts‎

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,73 @@ export default defineType({
272272
title: 'Notes',
273273
type: 'text',
274274
}),
275+
defineField({
276+
name: 'collaborationThread',
277+
title: '2-Way Call Notes, Comments & File Drop Chat',
278+
type: 'array',
279+
description: 'Timestamped back-and-forth call notes, comments, and dropped files shared between Alex Patterson and the partner.',
280+
of: [
281+
{
282+
type: 'object',
283+
fields: [
284+
defineField({name: 'authorName', title: 'Author Name', type: 'string'}),
285+
defineField({
286+
name: 'authorRole',
287+
title: 'Author Role',
288+
type: 'string',
289+
options: {
290+
list: [
291+
{title: 'Host (Alex Patterson)', value: 'host'},
292+
{title: 'Guest / Partner', value: 'guest'},
293+
],
294+
},
295+
initialValue: 'host',
296+
}),
297+
defineField({name: 'authorEmail', title: 'Author Email', type: 'string'}),
298+
defineField({
299+
name: 'noteType',
300+
title: 'Note Type',
301+
type: 'string',
302+
options: {
303+
list: [
304+
{title: 'Call Note / Pre-Call Summary', value: 'call_note'},
305+
{title: 'Comment / Question', value: 'comment'},
306+
{title: 'Run-of-Show Revision', value: 'ros_update'},
307+
{title: 'File / Asset Drop', value: 'file_drop'},
308+
],
309+
},
310+
initialValue: 'call_note',
311+
}),
312+
defineField({name: 'message', title: 'Message / Note Body', type: 'text'}),
313+
defineField({name: 'createdAt', title: 'Created At', type: 'datetime'}),
314+
defineField({
315+
name: 'emailedToCounterpart',
316+
title: 'Emailed to Counterpart',
317+
type: 'boolean',
318+
initialValue: false,
319+
}),
320+
defineField({
321+
name: 'attachments',
322+
title: 'Attached Files & Links',
323+
type: 'array',
324+
of: [
325+
{
326+
type: 'object',
327+
fields: [
328+
defineField({name: 'title', title: 'Title / Filename', type: 'string'}),
329+
defineField({name: 'category', title: 'Category', type: 'string'}),
330+
defineField({name: 'assetId', title: 'Sanity Asset ID', type: 'string'}),
331+
defineField({name: 'mimeType', title: 'MIME Type', type: 'string'}),
332+
defineField({name: 'fileSize', title: 'File Size (Bytes)', type: 'number'}),
333+
defineField({name: 'externalUrl', title: 'Download / Open URL', type: 'url'}),
334+
],
335+
},
336+
],
337+
}),
338+
],
339+
},
340+
],
341+
}),
275342
defineField({
276343
name: 'passionfrootPartnerId',
277344
title: 'Passionfroot Partner ID',

‎apps/sanity/schemas/partials/content.ts‎

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,58 @@ const content = defineType({
122122
},
123123
],
124124
}),
125+
defineField({
126+
name: "relatedVideo",
127+
title: "Related Video Deep Dive",
128+
description:
129+
"Optional explicit video shown in the 'Watch the Related Video Deep Dive' card when this document does not have its own primary YouTube video. Reference an existing Sanity document (Post, Podcast, Course, or Lesson) OR provide a custom YouTube URL, title, and description. If left blank, the site dynamically matches the best published video by tags and topics.",
130+
type: "object",
131+
options: { collapsible: true, collapsed: true },
132+
fields: [
133+
defineField({
134+
name: "reference",
135+
title: "Referenced Sanity Document (Post, Podcast, Course, or Lesson)",
136+
type: "reference",
137+
to: [
138+
{ type: "post" },
139+
{ type: "podcast" },
140+
{ type: "course" },
141+
{ type: "lesson" },
142+
],
143+
}),
144+
defineField({
145+
name: "youtube",
146+
title: "Custom YouTube URL Override",
147+
description:
148+
"Optional YouTube URL (used if no Sanity document is referenced, or to override the referenced document's YouTube link).",
149+
type: "string",
150+
}),
151+
defineField({
152+
name: "title",
153+
title: "Custom Video Title Override",
154+
type: "string",
155+
}),
156+
defineField({
157+
name: "description",
158+
title: "Custom Video Description Override",
159+
type: "text",
160+
rows: 2,
161+
}),
162+
],
163+
}),
164+
defineField({
165+
name: "relatedContent",
166+
title: "Curated Related Content (Posts, Podcasts & Courses)",
167+
description:
168+
"Optional curated related content items displayed at the bottom of the page. Any remaining slots are automatically filled using dynamic tag and topic matching.",
169+
type: "array",
170+
of: [
171+
{
172+
type: "reference",
173+
to: [{ type: "post" }, { type: "podcast" }, { type: "course" }],
174+
},
175+
],
176+
}),
125177
defineField({
126178
name: "syndications",
127179
title: "Syndications",
563 KB
Loading
586 KB
Loading
637 KB
Loading
744 KB
Loading

‎apps/site/src/components/PortalFeedbackAnnotator.astro‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -973,7 +973,11 @@ const RATING_OPTIONS = [
973973
method: "POST",
974974
body: fd,
975975
});
976-
const data = await res.json();
976+
const data = (await res.json()) as {
977+
ok?: boolean;
978+
message?: string;
979+
collaborationThread?: unknown;
980+
};
977981
if (!res.ok || !data.ok) {
978982
throw new Error(data.message || "Failed to submit feedback");
979983
}

0 commit comments

Comments
 (0)