版本发布 8
## What's Changed * feat(glf): update base styles by @zacjones93 in https://github.com/badass-courses/course-builder/pull/325 * feat: Sync Lessons and Video Resources to Sanity by @Creeland in https://github.com/badass-courses/course-builder/pull/323 * fix: use body instead of summary for sanity lesson descriptions by @Creeland in https://github.com/badass-courses/course-builder/pull/326 * feat: add the idea of collections to posts by @joelhooks in https://github.com/badass-courses/course-builder/pull/313 * feat(ai): add bluesky to share component by @zacjones93 in https://github.com/badass-courses/course-builder/pull/329 * feat: sync video resource data by @joelhooks in https://github.com/badass-courses/course-builder/pull/328 * chore: tighten up sync by @joelhooks in https://github.com/badass-courses/course-builder/pull/330 * feat(egh): simple transcript editor by @joelhooks in https://github.com/badass-courses/course-builder/pull/331 * feat(egh): add instructor profile edit page by @zacjones93 in https://github.com/badass-courses/course-builder/pull/327 * feat(egh): add access state to post form by @zacjones93 in https://github.com/badass-courses/course-builder/pull/332 * feat(egh): prompt to share on publish by @zacjones93 in https://github.com/badass-courses/course-builder/pull/342 * feat(egh): set up instructor invites table and dashboard by @zacjones93 in https://github.com/badass-courses/course-builder/pull/344 * feat(egh): Refactor Sanity Schema Types and Add Course Creation Function by @Creeland in https://github.com/badass-courses/course-builder/pull/343 * fix: Improve Lesson Upsert to Typesense by @Creeland in https://github.com/badass-courses/course-builder/pull/347 * feat(egghead): spike search by @vojtaholik in https://github.com/badass-courses/course-builder/pull/345 * chore(ai): fix console errors and warnings by @vojtaholik in https://github.com/badass-courses/course-builder/pull/348 * fix: syntax highlighting in markdown editor & feedback widget by @vojtaholik in https://github.com/badass-courses/course-builder/pull/349 * feat(egh): Course Creation Sync Flow by @zacjones93 in https://github.com/badass-courses/course-builder/pull/350 * fix: separate publish/unpublish by @joelhooks in https://github.com/badass-courses/course-builder/pull/351 * feat(ai): refactor feedback widget and solidify dependencies by @vojtaholik in https://github.com/badass-courses/course-builder/pull/353 * feat(ai): implement basic search and post indexing with typesense by @vojtaholik in https://github.com/badass-courses/course-builder/pull/354 * feat(ai): rss feed by @vojtaholik in https://github.com/badass-courses/course-builder/pull/352 * fix: build by @vojtaholik in https://github.com/badass-courses/course-builder/pull/355 * feat(ai): tags by @vojtaholik in https://github.com/badass-courses/course-builder/pull/356 * feat: initial structure for subs by @joelhooks in https://github.com/badass-courses/course-builder/pull/346 * feat(aih): org billing management by @joelhooks in https://github.com/badass-courses/course-builder/pull/358 * feat(egh): add primary tag to post by @zacjones93 in https://github.com/badass-courses/course-builder/pull/357 * feat: playlist syncing backtrack by @joelhooks in https://github.com/badass-courses/course-builder/pull/359 * feat: partykit editor by @joelhooks in https://github.com/badass-courses/course-builder/pull/360 * fix: back out partykit by @joelhooks in https://github.com/badass-courses/course-builder/pull/361 * feat(ui): improved auto-save that only triggers after timeout of no typing and cancels pending saves when new typing occurs by @vojtaholik in https://github.com/badass-courses/course-builder/pull/362 * feat(ui): ability to opt-out from resource revalidation when update occurs by @vojtaholik in https://github.com/badass-courses/course-builder/pull/363 * style(ai): transcript dialog by @vojtaholik in https://github.com/badass-courses/course-builder/pull/364 * fix: standardize auth packages and replace lodash with nodash by @joelhooks in https://github.com/badass-courses/course-builder/pull/365 * feat(ai): scrollycoding mdx by @vojtaholik in https://github.com/badass-courses/course-builder/pull/366 * feat(aih): adds posts api and oauth device flow by @joelhooks in https://github.com/badass-courses/course-builder/pull/367 * fix(build): uploadthing handler by @vojtaholik in https://github.com/badass-courses/course-builder/pull/369 * feat(aih): edit and create lists by @vojtaholik in https://github.com/badass-courses/course-builder/pull/368 * feat(aih): special treatment for shellscript code blocks by @vojtaholik in https://github.com/badass-courses/course-builder/pull/370 * feat(aih): implement next up from list retrieval for posts & ui by @vojtaholik in https://github.com/badass-courses/course-builder/pull/372 * chore(glf): use shared feedback widget component by @vojtaholik in https://github.com/badass-courses/course-builder/pull/373 * chore: bump next to canary by @vojtaholik in https://github.com/badass-courses/course-builder/pull/374 * feat(discord): enhance token refresh and streamline auth flow by @joelhooks in https://github.com/badass-courses/course-builder/pull/371 * chore(release): 📦 version packages by @joelhooks in https://github.com/badass-courses/course-builder/pull/375 * feat: add post metadata to mux player by @zacjones93 in https://github.com/badass-courses/course-builder/pull/376 * feat(glf): Update Go Local-first Posts and lists functionality by @zacjones93 in https://github.com/badass-courses/course-builder/pull/377 * feat(core): create subscriber with name by @vojtaholik in https://github.com/badass-courses/course-builder/pull/378 * feat(aih): list navigation & progress by @vojtaholik in https://github.com/badass-courses/course-builder/pull/381 * feat: Post API route testing and fine tuning by @joelhooks in https://github.com/badass-courses/course-builder/pull/380 * feat: Adds a Team Plan Inquiry Page by @joelhooks in https://github.com/badass-courses/course-builder/pull/384 * feat(aih): typesense driven posts route with search and refinements by @vojtaholik in https://github.com/badass-courses/course-builder/pull/382 * feat(aih): add `thumbnailTime` field for posts + config UI by @vojtaholik in https://github.com/badass-courses/course-builder/pull/386 * fix(aih): redis adapter initialization error with turbopack by @vojtaholik in https://github.com/badass-courses/course-builder/pull/385 * chore: bump next canary by @vojtaholik in https://github.com/badass-courses/course-builder/pull/387 * refactor(glf): refactor for loop to flatMap with Promise.all by @zacjones93 in https://github.com/badass-courses/course-builder/pull/383 * chore: bump to react 19 release by @joelhooks in https://github.com/badass-courses/course-builder/pull/389 * feat(aih): vector search driven recs by @vojtaholik in https://github.com/badass-courses/course-builder/pull/391 * fix(egh): create rails playlist with egh user id not instructor id by @zacjones93 in https://github.com/badass-courses/course-builder/pull/393 * feat(aih): add description generation for posts by @vojtaholik in https://github.com/badass-courses/course-builder/pull/394 * style(aih): light mode by @vojtaholik in https://github.com/badass-courses/course-builder/pull/396 * feat(glf): create typesense collection per database url before pnpm dev by @zacjones93 in https://github.com/badass-courses/course-builder/pull/390 * feat(aih): add admin dashboard with content completion stats by @vojtaholik in https://github.com/badass-courses/course-builder/pull/395 * feat(egh): remove post from course post by @zacjones93 in https://github.com/badass-courses/course-builder/pull/397 * feat(aih): pages can have attached resources in list form to streamline content curation by @vojtaholik in https://github.com/badass-courses/course-builder/pull/399 * feat(aih): streamline featured posts curation by @vojtaholik in https://github.com/badass-courses/course-builder/pull/400 * feat(aih): add public profile page with achievements by @vojtaholik in https://github.com/badass-courses/course-builder/pull/392 * feat(aih): shortlinks api by @vojtaholik in https://github.com/badass-courses/course-builder/pull/401 * chore(release): 📦 version packages by @joelhooks in https://github.com/badass-courses/course-builder/pull/379 * feat(egh): sync resource positions with Egghead playlist by @Creeland in https://github.com/badass-courses/course-builder/pull/398 * feat(egh): sync course post with sanity by @zacjones93 in https://github.com/badass-courses/course-builder/pull/402 * refactor(aih): reorganize component imports and file structure by @vojtaholik in https://github.com/badass-courses/course-builder/pull/403 * feat(egh): index course posts to typesense by @zacjones93 in https://github.com/badass-courses/course-builder/pull/405 * feat: add entitlement schemas to drizzle adapter2 by @joelhooks in https://github.com/badass-courses/course-builder/pull/404 * feat(egh): publish egghead playlist onPublish by @zacjones93 in https://github.com/badass-courses/course-builder/pull/406 * feat: adds cohort content type to be added to product by @joelhooks in https://github.com/badass-courses/course-builder/pull/407 * feat(egh): allow admin to update the instructor on post and edit page improvements by @zacjones93 in https://github.com/badass-courses/course-builder/pull/408 * feat: cohort content resources with tier metadata by @joelhooks in https://github.com/badass-courses/course-builder/pull/409 * chore(release): 📦 version packages by @joelhooks in https://github.com/badass-courses/course-builder/pull/410 * chore: improve data modeling stuff for tiers in list by @joelhooks in https://github.com/badass-courses/course-builder/pull/411 * feat: adds a postType to posts by @joelhooks in https://github.com/badass-courses/course-builder/pull/413 * chore: tree component composability by @joelhooks in https://github.com/badass-courses/course-builder/pull/415 * feat: "quick add" lessons to the cohort resource list by @joelhooks in https://github.com/badass-courses/course-builder/pull/416 * feat: custom configuration for post edit based on the type of post by @joelhooks in https://github.com/badass-courses/course-builder/pull/417 * feat(egh): add image field support for posts by @Creeland in https://github.com/badass-courses/course-builder/pull/419 * feat(egh): add course info to TypeSense by @zacjones93 in https://github.com/badass-courses/course-builder/pull/418 * feat: Add Solution Resource Type to Lessons by @joelhooks in https://github.com/badass-courses/course-builder/pull/420 * feat: add Mermaid diagram support for MDX content by @vojtaholik in https://github.com/badass-courses/course-builder/pull/423 * feat: allow workshops to be added to cohorts by @joelhooks in https://github.com/badass-courses/course-builder/pull/421 * chore(release): 📦 version packages by @joelhooks in https://github.com/badass-courses/course-builder/pull/412 * feat: workshop structure for ai-hero by @joelhooks in https://github.com/badass-courses/course-builder/pull/425 * feat: connect solutions and lessons by @joelhooks in https://github.com/badass-courses/course-builder/pull/426 * feat(aih): design updates by @vojtaholik in https://github.com/badass-courses/course-builder/pull/427 * chore: centralize common utilities into shared packages by @joelhooks in https://github.com/badass-courses/course-builder/pull/428 * fix(aih): user ability for request by @vojtaholik in https://github.com/badass-courses/course-builder/pull/429 * fix(aih): redirect upon saving resource with new slug by @vojtaholik in https://github.com/badass-courses/course-builder/pull/430 * feat(aih): videos widget by @vojtaholik in https://github.com/badass-courses/course-builder/pull/431 * chore: kill the extra list by @joelhooks in https://github.com/badass-courses/course-builder/pull/432 * refactor: comprehensive module restructuring and type improvements by @joelhooks in https://github.com/badass-courses/course-builder/pull/424 * feat(ai-hero): enhance resource path management and integration by @vojtaholik in https://github.com/badass-courses/course-builder/pull/434 * feat: sections appear by @joelhooks in https://github.com/badass-courses/course-builder/pull/433 * feat(aih): improved sections editing and workshop list functionality by @vojtaholik in https://github.com/badass-courses/course-builder/pull/436 * feat(aih): enhance workshop navigation and resource management by @vojtaholik in https://github.com/badass-courses/course-builder/pull/438 * feat(aih): table of contents for posts by @vojtaholik in https://github.com/badass-courses/course-builder/pull/439 * fix(sanity): make replaceSanityLessonResources more resilient to missing references by @joelhooks in https://github.com/badass-courses/course-builder/pull/442 * chore: bumps next version by @joelhooks in https://github.com/badass-courses/course-builder/pull/443 * feat(aih): lessons api by @vojtaholik in https://github.com/badass-courses/course-builder/pull/441 * feat(egh): update typesense when adding resource to resource by @zacjones93 in https://github.com/badass-courses/course-builder/pull/422 * feat(aih): lesson solutions api service by @vojtaholik in https://github.com/badass-courses/course-builder/pull/444 * fix(egh): pass proper instructor id when updating instructor for post by @zacjones93 in https://github.com/badass-courses/course-builder/pull/440 * feat(ed): init by @vojtaholik in https://github.com/badass-courses/course-builder/pull/445 * feat(egh): core instructor invite flow by @zacjones93 in https://github.com/badass-courses/course-builder/pull/435 * feat(eai): implement products pages with CRUD functionality by @vojtaholik in https://github.com/badass-courses/course-builder/pull/450 * feat(eaip): event purchase workflows by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/451 * feat(ew): Using CB by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/449 * fix(eai): update product ID in welcome email function by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/453 * feat(eai): sold out disable button by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/454 * feat(eai): add waitlist component to notify users for sold out products by @vojtaholik in https://github.com/badass-courses/course-builder/pull/455 * feat: add events routes by @joelhooks in https://github.com/badass-courses/course-builder/pull/457 * feat: everytimezone link builder by @joelhooks in https://github.com/badass-courses/course-builder/pull/459 * Update turbo.build to turborepo.com by @anthonyshew in https://github.com/badass-courses/course-builder/pull/461 * feat(aih): refactor event edit form by @vojtaholik in https://github.com/badass-courses/course-builder/pull/462 * feat(cp): initialize cursor pro by @zacjones93 in https://github.com/badass-courses/course-builder/pull/456 * feat(pricing): add ability for coupons to bypass product being sold out by @vojtaholik in https://github.com/badass-courses/course-builder/pull/460 * chore(release): 📦 version packages by @joelhooks in https://github.com/badass-courses/course-builder/pull/447 * fix(egh): handle indexing articles by @zacjones93 in https://github.com/badass-courses/course-builder/pull/452 * fix(aih): Fix zod validation in getSolutionForLesson by @Creeland in https://github.com/badass-courses/course-builder/pull/463 * refactor(ui): standardize ResourceForm component across edit forms by @vojtaholik in https://github.com/badass-courses/course-builder/pull/464 * fix(ui): remove unnecessary router.refresh() call in NewLessonVideoForm and streamline video resource handling in ContentVideoResourceField by @vojtaholik in https://github.com/badass-courses/course-builder/pull/467 * feat(eai): add GitHub account connection and disconnection functionality to profile page by @vojtaholik in https://github.com/badass-courses/course-builder/pull/468 * feat(edai): product purchase table display under product by @zacjones93 in https://github.com/badass-courses/course-builder/pull/466 * feat: cohort entitlements by @joelhooks in https://github.com/badass-courses/course-builder/pull/469 * feat(aih): cohort access ability for workshops by @vojtaholik in https://github.com/badass-courses/course-builder/pull/470 * fix(commerce): team quantity logic by @vojtaholik in https://github.com/badass-courses/course-builder/pull/472 * feat(aih): invoke post cohort purchase workflow when redeeming a full price coupon by @vojtaholik in https://github.com/badass-courses/course-builder/pull/471 * chore(tcoui): init commit by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/473 * feat(craft-of-ui): few updates by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/475 * feat: add to calendar after ticket purchase by @joelhooks in https://github.com/badass-courses/course-builder/pull/474 * feat(eai): enhance welcome email for live events by @vojtaholik in https://github.com/badass-courses/course-builder/pull/478 * feat(eai): sync calendar invites on purchase transfer by @vojtaholik in https://github.com/badass-courses/course-builder/pull/476 * feat(eai): add handleRefundAndRemoveFromCalendar function for processing refunds and updating calendar events by @vojtaholik in https://github.com/badass-courses/course-builder/pull/477 * refactor(assistant): replace ChatCompletionRequestMessage with CoreMessage, update related parsing logic, and remove unused streaming chunk publisher by @vojtaholik in https://github.com/badass-courses/course-builder/pull/479 * feat(eai): post embeds by @vojtaholik in https://github.com/badass-courses/course-builder/pull/482 * feat(aih): implement paginated video resource fetching by @vojtaholik in https://github.com/badass-courses/course-builder/pull/483 * feat(aih): implement cohort transfer workflow for purchase management by @vojtaholik in https://github.com/badass-courses/course-builder/pull/480 * feat(eai): add active event components and integrate into post and navigation by @vojtaholik in https://github.com/badass-courses/course-builder/pull/484 * feat(egh): add createEggheadLessonVersion function and integrate egghead lesson versioning in post updates by @zacjones93 in https://github.com/badass-courses/course-builder/pull/481 * feat(aih): add sale banner on homepage by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/487 * feat: enforce workshop start times by @joelhooks in https://github.com/badass-courses/course-builder/pull/486 * feat(aih): wire up module certificate on workshop page by @zacjones93 in https://github.com/badass-courses/course-builder/pull/485 * feat(aih): add optional field to lesson metadata and form config by @vojtaholik in https://github.com/badass-courses/course-builder/pull/488 * feat(eai): create mcp workshops landing page + enhance event creation form with tags and seats by @vojtaholik in https://github.com/badass-courses/course-builder/pull/490 * feat(aih): add transcript button when missing by @zacjones93 in https://github.com/badass-courses/course-builder/pull/491 * fix: cohort redirecting flow for auth by @joelhooks in https://github.com/badass-courses/course-builder/pull/492 * feat(aih): Automated Workshop Access Email System by @vojtaholik in https://github.com/badass-courses/course-builder/pull/493 * feat(aih): post purchase welcome emails by @zacjones93 in https://github.com/badass-courses/course-builder/pull/494 * chore(release): 📦 version packages by @joelhooks in https://github.com/badass-courses/course-builder/pull/465 * feat(aih): add course link to primary nav by @vojtaholik in https://github.com/badass-courses/course-builder/pull/489 * feat: Epic AI Transcript Editor by @joelhooks in https://github.com/badass-courses/course-builder/pull/496 * feat(aih): join discord cta on cohort module page by @zacjones93 in https://github.com/badass-courses/course-builder/pull/498 * feat(aih): add Discord connection button to cohort page by @vojtaholik in https://github.com/badass-courses/course-builder/pull/497 * feat(eai): add attendee instructions to event form and page by @vojtaholik in https://github.com/badass-courses/course-builder/pull/499 * fix: no purchase transfer on invoice page unless logged in by @joelhooks in https://github.com/badass-courses/course-builder/pull/500 * fix: ensure user logged in for purchase transfer by @zacjones93 in https://github.com/badass-courses/course-builder/pull/501 * feat(eai): add Discord connection functionality with redirect support by @Creeland in https://github.com/badass-courses/course-builder/pull/502 * refactor(aih): enhance ConnectToDiscord component to include abilityLoader for access control by @zacjones93 in https://github.com/badass-courses/course-builder/pull/503 * feat(eai): implement multi-event creation with shared product configuration and enhance event form UI by @vojtaholik in https://github.com/badass-courses/course-builder/pull/505 * fix(aih): correct date formatting for dayOneUnlockDate in postCohortPurchaseWorkflow by @vojtaholik in https://github.com/badass-courses/course-builder/pull/504 * feat(ew): add Tips page and enhance post creation modal by @Creeland in https://github.com/badass-courses/course-builder/pull/506 * feat(ew): enhance author management in post creation and editing by @Creeland in https://github.com/badass-courses/course-builder/pull/510 * fix: remove dashboard link by @zacjones93 in https://github.com/badass-courses/course-builder/pull/512 * feat(ew): implement user role-based action sections on home page by @Creeland in https://github.com/badass-courses/course-builder/pull/513 * feat(aih): Add automated cohort entitlement sync and refactor entitlement creation to a lib by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/508 * feat(core): extend user roles in user schema to include 'contributor' by @Creeland in https://github.com/badass-courses/course-builder/pull/514 * feat(eai): event series by @vojtaholik in https://github.com/badass-courses/course-builder/pull/507 * feat(eai): enhance AdminDashboard with subscriber, user, and purchase metrics by @vojtaholik in https://github.com/badass-courses/course-builder/pull/515 * feat(cp): add live product event product creation and management by @zacjones93 in https://github.com/badass-courses/course-builder/pull/511 * feat(ew): refactor resource creation modals and enhance page query logging by @Creeland in https://github.com/badass-courses/course-builder/pull/517 * feat(aih): add Live Office Hours invitation email component by @zacjones93 in https://github.com/badass-courses/course-builder/pull/519 * feat(ew): Contributor Dashboard with Enhanced Navigation and Impersonation Support by @Creeland in https://github.com/badass-courses/course-builder/pull/518 * chore: upgrade tailwind to v4 by @vojtaholik in https://github.com/badass-courses/course-builder/pull/516 * feat(eai): add discount coupon functionality to event creation by @vojtaholik in https://github.com/badass-courses/course-builder/pull/520 * feat(aih): add `openEnrollment` and `closeEnrollment` fields to product schema and update related components for enrollment management by @vojtaholik in https://github.com/badass-courses/course-builder/pull/521 * feat(aih): enhance workshop resources access rules by @vojtaholik in https://github.com/badass-courses/course-builder/pull/523 * feat(aih): Improved the scheduling and processing of workshop access emails, now sending emails at the precise start time of each workshop. by @vojtaholik in https://github.com/badass-courses/course-builder/pull/524 * refactor: extract resource paths util into shared package and add tests by @vojtaholik in https://github.com/badass-courses/course-builder/pull/525 * feat(ew): unify user role system to restore contributor impersonation by @Creeland in https://github.com/badass-courses/course-builder/pull/526 * fix(ai-hero): entitlements by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/522 * feat: extract event creation UI into separate package by @vojtaholik in https://github.com/badass-courses/course-builder/pull/527 * feat(ew): enhance admin view in root page with content and user management sections by @Creeland in https://github.com/badass-courses/course-builder/pull/528 * fix(aih): fix workshop access emails cron by enhancing workshop filtering with timezone support by @vojtaholik in https://github.com/badass-courses/course-builder/pull/530 * feat(eai): add event reminder email functionality by @vojtaholik in https://github.com/badass-courses/course-builder/pull/531 * feat(egh): Improve course lesson edit workflow by @zacjones93 in https://github.com/badass-courses/course-builder/pull/533 * chore: bumps next version by @vojtaholik in https://github.com/badass-courses/course-builder/pull/534 * feat(eai): enable ppr for posts and events by @vojtaholik in https://github.com/badass-courses/course-builder/pull/535 * fix(aih): streamline workshop date handling and improve UTC consistency by @vojtaholik in https://github.com/badass-courses/course-builder/pull/536 * chore(release): 📦 version packages by @joelhooks in https://github.com/badass-courses/course-builder/pull/495 * fix(ai-hero): entitlement updates by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/529 * feat(egh): add search/filters/pagination to posts page by @zacjones93 in https://github.com/badass-courses/course-builder/pull/537 * feat(utils-resource): add tip path generation tests and update resource paths configuration by @Creeland in https://github.com/badass-courses/course-builder/pull/539 * refactor(events): replace direct DB queries with courseBuilderAdapter for event retrieval and creation by @vojtaholik in https://github.com/badass-courses/course-builder/pull/538 * feat(edai): throw 404 on admin routes when not admin by @zacjones93 in https://github.com/badass-courses/course-builder/pull/542 * feat(all): Protect admin routes with manage all check by @zacjones93 in https://github.com/badass-courses/course-builder/pull/544 * feat(egh): support ogimages for egghead-next and add custom ogimage field for post by @zacjones93 in https://github.com/badass-courses/course-builder/pull/540 * feat(eai): cohorts, workshops, and lessons by @vojtaholik in https://github.com/badass-courses/course-builder/pull/543 * feat(coupons): refactor coupon creation logic to create coupons of any value by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/541 * feat(eai): add lesson and solution embeds by @vojtaholik in https://github.com/badass-courses/course-builder/pull/546 * feat(egh): improve add existing lesson to course ux by @zacjones93 in https://github.com/badass-courses/course-builder/pull/545 * feat(eai): ability to attach exercises to lessons by @vojtaholik in https://github.com/badass-courses/course-builder/pull/547 * feat(eai): integrate exercises into "next up" logic by @vojtaholik in https://github.com/badass-courses/course-builder/pull/548 * feat(eai): enhance UI and typography across components by @vojtaholik in https://github.com/badass-courses/course-builder/pull/549 * feat(eai): add loyalty coupon functionality for users based on purchase history by @vojtaholik in https://github.com/badass-courses/course-builder/pull/552 * feat(eai): add launch page with starfield animation and sockets by @vojtaholik in https://github.com/badass-courses/course-builder/pull/553 * feat(eai): add course link to primary site nav by @vojtaholik in https://github.com/badass-courses/course-builder/pull/551 * fix(eai): fix 100 off coupons by @vojtaholik in https://github.com/badass-courses/course-builder/pull/555 * feat(egh): add event management by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/554 * feat(eai): add lessons and solutions API routes by @vojtaholik in https://github.com/badass-courses/course-builder/pull/556 * feat(eai): implement calendar invite functionality for events associated with cohort products by @vojtaholik in https://github.com/badass-courses/course-builder/pull/558 * feat(eai): implement bulk calendar invite processing for large operations by @vojtaholik in https://github.com/badass-courses/course-builder/pull/559 * feat(edai): add event location by @zacjones93 in https://github.com/badass-courses/course-builder/pull/560 * feat(eai): add progress API routes for lesson tracking by @vojtaholik in https://github.com/badass-courses/course-builder/pull/561 * fix(eai): dark mode styles by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/562 * feat(eai): add access route for workshop content visibility by @vojtaholik in https://github.com/badass-courses/course-builder/pull/563 * feat(eai): add API route for fetching workshop details by @vojtaholik in https://github.com/badass-courses/course-builder/pull/564 * feat(eai): add workflows to inngest configuration for transfers by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/565 * feat(aih): support self-paced workshops by @vojtaholik in https://github.com/badass-courses/course-builder/pull/566 * feat(edai): get started page by @zacjones93 in https://github.com/badass-courses/course-builder/pull/567 * feat(eai): add discord info to oauth/userinfo by @zacjones93 in https://github.com/badass-courses/course-builder/pull/569 * feat(aih): implement entitlement-based access for self-paced workshops by @vojtaholik in https://github.com/badass-courses/course-builder/pull/568 * feat(eai): enable partitioned auth cookies for kcd workshop app by @vojtaholik in https://github.com/badass-courses/course-builder/pull/571 * feat: add skill cookie on session request by @zacjones93 in https://github.com/badass-courses/course-builder/pull/570 * feat(eai): add bypassSoldOut logic and refactor product loading in coupon generator form by @vojtaholik in https://github.com/badass-courses/course-builder/pull/572 * Add video quality setting to new asset settings by @joelhooks in https://github.com/badass-courses/course-builder/pull/574 * feat(aih): implement navigation menu component by @vojtaholik in https://github.com/badass-courses/course-builder/pull/573 * feat(aih): use the new tailwind v4 css only config by @vojtaholik in https://github.com/badass-courses/course-builder/pull/575 * feat(eai): cohort certificate download by @zacjones93 in https://github.com/badass-courses/course-builder/pull/576 * feat(eai): sellable self-paced workshops by @vojtaholik in https://github.com/badass-courses/course-builder/pull/577 * chore: bump next@beta by @vojtaholik in https://github.com/badass-courses/course-builder/pull/579 * feat: add cwa by @vojtaholik in https://github.com/badass-courses/course-builder/pull/580 * feat(aih): fixed coupon discount by @zacjones93 in https://github.com/badass-courses/course-builder/pull/578 * feat: add AI SDK v5 Crash Course to navigation by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/582 * fix(aih): update bulk purchase fixed coupon flow by @zacjones93 in https://github.com/badass-courses/course-builder/pull/583 * fix(egh): fixes og images with dynamic routes instead of query params by @Creeland in https://github.com/badass-courses/course-builder/pull/584 * fix(inngest): add idempotency key to post-purchase workflows, notifications and checkout session by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/585 * feat(cwa): extract workshop and cohort creation to adapter and add tests by @vojtaholik in https://github.com/badass-courses/course-builder/pull/587 * chore: bump mux to latest by @vojtaholik in https://github.com/badass-courses/course-builder/pull/588 * chore: bump next from beta to stable 16 by @vojtaholik in https://github.com/badass-courses/course-builder/pull/589 * chore: bump instantsearch by @vojtaholik in https://github.com/badass-courses/course-builder/pull/590 * feat(aih): survey rig by @vojtaholik in https://github.com/badass-courses/course-builder/pull/592 * feat(aih): add CRUD for surveys and questions by @vojtaholik in https://github.com/badass-courses/course-builder/pull/593 * feat(invoices): add refunds in invoice page by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/594 * chore: bump mux player by @vojtaholik in https://github.com/badass-courses/course-builder/pull/595 * feat(aih): add QuestionResponse table, update survey flow to populate responses, integrate proper CK url param parsing by @vojtaholik in https://github.com/badass-courses/course-builder/pull/596 * refactor(cwa): streamline resource navigation and update component structures by @vojtaholik in https://github.com/badass-courses/course-builder/pull/597 * feat(database): add MerchantEvents schema and logging for webhook events by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/591 * refactor(cwa): module resource list navigation by @vojtaholik in https://github.com/badass-courses/course-builder/pull/598 * feat(aih): add quick edit functionality for workshops in cohort form by @vojtaholik in https://github.com/badass-courses/course-builder/pull/599 * feat(aih): implement sales data integration for the cohort MDX body by @vojtaholik in https://github.com/badass-courses/course-builder/pull/600 * fix(aih): conditionally render workshop availability date in CohortPage by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/601 * feat(stack-coupons): allow stackable discounts based on entitlements by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/603 * feat(post-purchase): implement coupon-based entitlements for eligible purchases by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/604 * feat(post-purchase): post-purchase workflow to mark entitlement-based coupons as used by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/605 * refactor(aih): streamline cohort data loading by @vojtaholik in https://github.com/badass-courses/course-builder/pull/602 * feat(aih): refund for credit entitlements by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/606 * refactor(pricing): fix logic for which coupon to apply and which is stackable by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/608 * test(core): add coupon stacking logic tests by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/609 * feat: init dev.build by @vojtaholik in https://github.com/badass-courses/course-builder/pull/612 * feat(aih): process every product's resource in post-purchase-flow by @vojtaholik in https://github.com/badass-courses/course-builder/pull/611 * fix(post-purchase): handle entitlement coupon processing by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/614 * feat(commerce): ppp stackable with special credits by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/615 * feat(ai-hero): add ppp credit for new purchases by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/616 * feat(coupon): move grant coupon entitlements for purchase in a new fnction by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/618 * feat(coupon): transfer of coupon entitlements from source to target user by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/617 * feat(search): refactor search component to use SearchContent by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/619 * feat(aih): add ability to modify name on invoice by @vojtaholik in https://github.com/badass-courses/course-builder/pull/620 * feat(eai): support nested sections by @vojtaholik in https://github.com/badass-courses/course-builder/pull/621 * fix(pricing): fix coupon stacking logic to allow URL coupons to stack… by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/622 * fix(video-processing): extend video processing timeout to 30 days by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/623 * fix(aih): fan out user sync events by @vojtaholik in https://github.com/badass-courses/course-builder/pull/624 * feat(eai): Multi-workshop UI and entitlements fix by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/626 * fix: upgrade react and next to resolve cve-2025-55182 by @zacjones93 in https://github.com/badass-courses/course-builder/pull/628 * feat(epicdev-ai): gate sale banner visibility for users who purchased product by @joelhooks in https://github.com/badass-courses/course-builder/pull/629 * fix(ai-hero): transfer entitlements for all resources including individual workshops by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/630 * feat(aih): products api and light rearrange by @vojtaholik in https://github.com/badass-courses/course-builder/pull/631 * fix(eai): ability retrieval for lessons by checking all parent workshops by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/632 * fix(edai): fix discord role entitlements by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/635 * refactor(dev): consolidate pricing components and enhance resource landing pages by @vojtaholik in https://github.com/badass-courses/course-builder/pull/636 * chore: bump react by @vojtaholik in https://github.com/badass-courses/course-builder/pull/637 * feat: init just react by @vojtaholik in https://github.com/badass-courses/course-builder/pull/639 * feat(tutorials): add tutorials in EW by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/638 * fix(ui): handle optional label in tag selector for improved filtering by @zacjones93 in https://github.com/badass-courses/course-builder/pull/640 * feat(edai): conditionally render StartLearningWorkshopButton for multi-workshop products by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/642 * feat(edai): add user entitlement check for product access by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/641 * feat: epicdev ai credits by @Creeland in https://github.com/badass-courses/course-builder/pull/644 * feat(cwa): style workshops by @vojtaholik in https://github.com/badass-courses/course-builder/pull/651 * feat(aih): add shortlinks system with admin UI and analytics by @joelhooks in https://github.com/badass-courses/course-builder/pull/654 * feat: add google-calendar-sync opencode skill wizard by @joelhooks in https://github.com/badass-courses/course-builder/pull/656 * feat(aih): add shortlink attribution tracking by @joelhooks in https://github.com/badass-courses/course-builder/pull/655 * feat(cwa): subscriptions by @vojtaholik in https://github.com/badass-courses/course-builder/pull/653 * feat(edai): CRUD authors by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/657 * feat(aih): streamline waitlist signup for logged-in users by @joelhooks in https://github.com/badass-courses/course-builder/pull/659 * docs: Monorepo-wide Unified Pricing Widget PRD + P0 Bug Fix by @joelhooks in https://github.com/badass-courses/course-builder/pull/660 * docs(cwa): Performance Optimization PRD by @joelhooks in https://github.com/badass-courses/course-builder/pull/661 * fix: show loading indicator when processing transcript by @Creeland in https://github.com/badass-courses/course-builder/pull/664 * feat: Auto generate seo descriptions on transcript ready by @Creeland in https://github.com/badass-courses/course-builder/pull/665 * fix(cwa): resolve cache key collisions and add video data caching by @joelhooks in https://github.com/badass-courses/course-builder/pull/662 * refactor(turbo): improve cache efficiency and task configuration by @anthonyshew in https://github.com/badass-courses/course-builder/pull/658 * chore: update Next.js version to 16.0.10 across all apps by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/667 * feat(ai-hero): implement SDK v0.5.0 agent intelligence methods by @joelhooks in https://github.com/badass-courses/course-builder/pull/668 * Update use-nav-links.tsx by @Creeland in https://github.com/badass-courses/course-builder/pull/669 * docs(aih): add comprehensive Mermaid flow diagrams by @vojtaholik in https://github.com/badass-courses/course-builder/pull/670 * feat(aih): serve free content as markdown for AI agents by @vojtaholik in https://github.com/badass-courses/course-builder/pull/671 * feat(ewd): workshops and lessons crud by @vojtaholik in https://github.com/badass-courses/course-builder/pull/672 * feat(ewd): add products CRUD with sync to original DB by @vojtaholik in https://github.com/badass-courses/course-builder/pull/673 * feat(aih): hide autoplay no video by @vojtaholik in https://github.com/badass-courses/course-builder/pull/674 * docs: shortlinks by @vojtaholik in https://github.com/badass-courses/course-builder/pull/675 * feat(cwa): shortlinks by @vojtaholik in https://github.com/badass-courses/course-builder/pull/676 * feat(cwa): enhance workshop access page and login integration by @vojtaholik in https://github.com/badass-courses/course-builder/pull/677 * feat(adapter-drizzle): add generated column for JSON slug indexing by @vojtaholik in https://github.com/badass-courses/course-builder/pull/678 * feat(email-templates): enhance login email with resource context by @vojtaholik in https://github.com/badass-courses/course-builder/pull/679 * feat(aih): improve event sold out state visibility by @vojtaholik in https://github.com/badass-courses/course-builder/pull/680 * chore(release): 📦 version packages by @joelhooks in https://github.com/badass-courses/course-builder/pull/550 * feat(aih): event emails by @vojtaholik in https://github.com/badass-courses/course-builder/pull/681 * feat(posts): fix post author display and search hit component for custom authors by @nicollguarnizo in https://github.com/badass-courses/course-builder/pull/683 ## New Contributors * @Creeland made their first contribution in https://github.com/badass-courses/course-builder/pull/323 * @nicollguarnizo made their first contribution in https://github.com/badass-courses/course-builder/pull/451 * @anthonyshew made their first contribution in https://github.com/badass-courses/course-builder/pull/461 **Full Changelog**: https://github.com/badass-courses/course-builder/compare/@coursebuilder/adapter-drizzle@1.0.0...aihero-cli-v0.1.0
### Major Changes - [#320](https://github.com/badass-courses/course-builder/pull/320) [`d6caa19`](https://github.com/badass-courses/course-builder/commit/d6caa19626edc5424c39fca90b293311d852cc12) Thanks [@joelhooks](https://github.com/joelhooks)! - adds organizations for multi-tenant ### Patch Changes - Updated dependencies \[[`d6caa19`](https://github.com/badass-courses/course-builder/commit/d6caa19626edc5424c39fca90b293311d852cc12)]: - @coursebuilder/core@1.0.0
### Patch Changes - Updated dependencies \[[`d6caa19`](https://github.com/badass-courses/course-builder/commit/d6caa19626edc5424c39fca90b293311d852cc12)]: - @coursebuilder/core@1.0.0
### Major Changes - [#320](https://github.com/badass-courses/course-builder/pull/320) [`d6caa19`](https://github.com/badass-courses/course-builder/commit/d6caa19626edc5424c39fca90b293311d852cc12) Thanks [@joelhooks](https://github.com/joelhooks)! - adds organizations for multi-tenant
### Patch Changes - Updated dependencies \[[`d6caa19`](https://github.com/badass-courses/course-builder/commit/d6caa19626edc5424c39fca90b293311d852cc12)]: - @coursebuilder/core@1.0.0 - @coursebuilder/ui@2.0.0
### Major Changes - [#320](https://github.com/badass-courses/course-builder/pull/320) [`d6caa19`](https://github.com/badass-courses/course-builder/commit/d6caa19626edc5424c39fca90b293311d852cc12) Thanks [@joelhooks](https://github.com/joelhooks)! - adds organizations for multi-tenant
### Patch Changes - [#315](https://github.com/badass-courses/course-builder/pull/315) [`2180c88`](https://github.com/badass-courses/course-builder/commit/2180c8887041cbe99bdbdcf37e391c5183644c0c) Thanks [@joelhooks](https://github.com/joelhooks)! - update to next 15 and react 19 😭 - Updated dependencies \[[`2180c88`](https://github.com/badass-courses/course-builder/commit/2180c8887041cbe99bdbdcf37e391c5183644c0c)]: - @coursebuilder/core@0.2.4
### Patch Changes - [#315](https://github.com/badass-courses/course-builder/pull/315) [`2180c88`](https://github.com/badass-courses/course-builder/commit/2180c8887041cbe99bdbdcf37e391c5183644c0c) Thanks [@joelhooks](https://github.com/joelhooks)! - update to next 15 and react 19 😭 - Updated dependencies \[[`2180c88`](https://github.com/badass-courses/course-builder/commit/2180c8887041cbe99bdbdcf37e391c5183644c0c)]: - @coursebuilder/core@0.2.4