├── .gitattributes ├── packages ├── trpc │ ├── src │ │ ├── utils │ │ │ ├── index.ts │ │ │ └── send-email-helper.ts │ │ ├── schema │ │ │ ├── base.ts │ │ │ ├── README.md │ │ │ └── index.ts │ │ ├── procedures │ │ │ ├── admin-view.ts │ │ │ ├── matches │ │ │ │ ├── delete-match.ts │ │ │ │ └── create-match.ts │ │ │ ├── onboarding │ │ │ │ └── verify-email-code.ts │ │ │ ├── user.ts │ │ │ ├── get-project.ts │ │ │ ├── get-pnr-and-admins.ts │ │ │ ├── mediamaker-matches.ts │ │ │ ├── project │ │ │ │ └── song-request-submission.ts │ │ │ └── comments │ │ │ │ └── upsertComment.ts │ │ ├── types.ts │ │ ├── handler.ts │ │ ├── middleware │ │ │ ├── not-authenticated.ts │ │ │ └── authenticated.ts │ │ ├── internal │ │ │ ├── context.ts │ │ │ ├── query-client-factory.ts │ │ │ ├── prisma-abstraction.ts │ │ │ └── init.ts │ │ └── server.ts │ ├── eslint.config.js │ ├── tsconfig.json │ └── package.json ├── hooks │ ├── src │ │ ├── index.ts │ │ └── useAuthenticatedUser.ts │ ├── eslint.config.js │ ├── tsconfig.json │ └── package.json ├── ui │ ├── declarations.d.ts │ ├── shad │ │ ├── index.ts │ │ ├── label.tsx │ │ ├── textarea.tsx │ │ ├── separator.tsx │ │ ├── input.tsx │ │ ├── checkbox.tsx │ │ ├── switch.tsx │ │ ├── badge.tsx │ │ ├── X.tsx │ │ ├── tooltip.tsx │ │ ├── popover.tsx │ │ └── radio-group.tsx │ ├── eslint.config.js │ ├── tsconfig.json │ ├── tailwind.config.ts │ ├── components.json │ └── svg │ │ └── CheckIcon.tsx ├── components │ ├── src │ │ ├── landing-pages │ │ │ ├── AdminLanding.tsx │ │ │ ├── ModeratorLanding.tsx │ │ │ └── components │ │ │ │ ├── EmptyMessage.tsx │ │ │ │ └── Header.tsx │ │ ├── oldStuff │ │ │ ├── submit │ │ │ │ ├── index.tsx │ │ │ │ └── project │ │ │ │ │ ├── sections │ │ │ │ │ ├── FinalProjectDetails.tsx │ │ │ │ │ └── ProjectOverview.tsx │ │ │ │ │ └── common.tsx │ │ │ ├── projects │ │ │ │ ├── MediamakerOverview.tsx │ │ │ │ └── MediamakerProjects.tsx │ │ │ ├── form │ │ │ │ ├── index.tsx │ │ │ │ ├── types.ts │ │ │ │ ├── GoodDogTextarea.tsx │ │ │ │ └── GoodDogMultiSelect.tsx │ │ │ ├── loading │ │ │ │ └── Spinner.tsx │ │ │ ├── registration │ │ │ │ ├── index.tsx │ │ │ │ ├── inputs │ │ │ │ │ ├── RegistrationCheckbox.tsx │ │ │ │ │ └── RegistrationInput.tsx │ │ │ │ └── onboarding │ │ │ │ │ └── PNROnboardingInput.tsx │ │ │ ├── matching │ │ │ │ └── InfoIcon.tsx │ │ │ ├── CheckerColumn.tsx │ │ │ └── MediaMusicianAbout.tsx │ │ ├── GrayPlaceholder.tsx │ │ ├── base │ │ │ ├── NotificationBadge.tsx │ │ │ ├── SearchBar.tsx │ │ │ ├── DictionaryWord.tsx │ │ │ ├── Card.tsx │ │ │ ├── Modal.tsx │ │ │ ├── ProfileDropdown.tsx │ │ │ └── Checkbox.tsx │ │ ├── music │ │ │ ├── MusicDashboard.tsx │ │ │ └── components │ │ │ │ ├── MusicNote.tsx │ │ │ │ ├── SongRequestInformation.tsx │ │ │ │ ├── Matches.tsx │ │ │ │ └── Popup.tsx │ │ ├── user-onboarding │ │ │ ├── widgets │ │ │ │ ├── UserOnboardingWidgetContainer.tsx │ │ │ │ ├── components │ │ │ │ │ └── PasswordRequirements.tsx │ │ │ │ ├── reset-password-widget │ │ │ │ │ └── ResetPasswordWidget.tsx │ │ │ │ └── forgot-password-widget │ │ │ │ │ └── ForgotPasswordWidget.tsx │ │ │ ├── SectionRow.tsx │ │ │ ├── UserOnboarding.tsx │ │ │ ├── MediaMakerSection.tsx │ │ │ └── MusicianSection.tsx │ │ ├── svg │ │ │ ├── Search.tsx │ │ │ ├── TrashIcon.tsx │ │ │ ├── CloseX.tsx │ │ │ ├── status-icons │ │ │ │ ├── ClockFull.tsx │ │ │ │ ├── Check.tsx │ │ │ │ └── Hourglass.tsx │ │ │ ├── homepage │ │ │ │ └── Check.tsx │ │ │ ├── MusicNote.tsx │ │ │ ├── MusicNoteIcon.tsx │ │ │ ├── PencilIcon.tsx │ │ │ └── People.tsx │ │ ├── motion │ │ │ └── GrowOnScroll.tsx │ │ ├── rhf-base │ │ │ ├── RHFTextArea.tsx │ │ │ ├── RHFRadioGroup.tsx │ │ │ ├── RHFTextInput.tsx │ │ │ └── RFHMultiselectDropdown.tsx │ │ ├── PageContainer.tsx │ │ ├── meda-maker-matching │ │ │ ├── components │ │ │ │ ├── MatchesSection.tsx │ │ │ │ └── ListOfMatches.tsx │ │ │ └── MediaMakerMatchingDashboard.tsx │ │ ├── PermissionsLayoutWrapper.tsx │ │ ├── Nav.tsx │ │ └── project │ │ │ └── components │ │ │ └── SongRequest.tsx │ ├── eslint.config.js │ ├── utils │ │ ├── allCapsListFormatter.ts │ │ └── getStatusHelper.ts │ ├── tsconfig.json │ ├── tailwind.config.ts │ └── package.json ├── auth │ ├── src │ │ ├── permissions │ │ │ ├── index.ts │ │ │ └── resources.ts │ │ ├── password.ts │ │ └── cookies.ts │ ├── eslint.config.js │ ├── tsconfig.json │ └── package.json ├── db │ ├── prisma │ │ └── migrations │ │ │ ├── 20241025232323_name_required │ │ │ └── migration.sql │ │ │ ├── 20251023032950_affiliation_is_optional │ │ │ └── migration.sql │ │ │ ├── migration_lock.toml │ │ │ ├── 20250925235150_added_is_submitter_in_contrib_table │ │ │ └── migration.sql │ │ │ ├── 20251110032804_genre_enums │ │ │ └── migration.sql │ │ │ ├── 20250920203043_remove_email_confirmed_column │ │ │ └── migration.sql │ │ │ ├── 20251109181338_remove_referral │ │ │ └── migration.sql │ │ │ ├── 20241016233845_first_migration │ │ │ └── migration.sql │ │ │ ├── 20251123021548_add_song_request_titles │ │ │ └── migration.sql │ │ │ ├── 20251111183252_reformat_genres │ │ │ └── migration.sql │ │ │ ├── 20250202214637_add_phone_number │ │ │ └── migration.sql │ │ │ ├── 20241108002053_email_verification_code │ │ │ └── migration.sql │ │ │ ├── 20241031000211_new_user_fields │ │ │ └── migration.sql │ │ │ ├── 20250314225857_unlicensed-music │ │ │ └── migration.sql │ │ │ ├── 20250226222351_moderator_invites │ │ │ └── migration.sql │ │ │ ├── 20241121004111_password_reset_request │ │ │ └── migration.sql │ │ │ ├── 20250223072034_fix_project_owner_id │ │ │ └── migration.sql │ │ │ ├── 20241124210934_renamed_initiator_id │ │ │ └── migration.sql │ │ │ ├── 20250119220136_added_referral_source │ │ │ └── migration.sql │ │ │ ├── 20241111161425_sign_up_flow_reqs │ │ │ └── migration.sql │ │ │ ├── 20250921190345_added_contributor_table_and_supporting_enums │ │ │ └── migration.sql │ │ │ ├── 20251005222343_changed_music_sub_id_name_in_contribs │ │ │ └── migration.sql │ │ │ ├── 20251107140820_changed_contrib_name_and_genres │ │ │ └── migration.sql │ │ │ ├── 20241002232629_user_and_session_schemas │ │ │ └── migration.sql │ │ │ ├── 20251115215703_update_project_submissions │ │ │ └── migration.sql │ │ │ ├── 20250227231837_project_fixes │ │ │ └── migration.sql │ │ │ ├── 20241023232921_added_uuid │ │ │ └── migration.sql │ │ │ ├── 20251002181054_refactor_match_comments_to_comments │ │ │ └── migration.sql │ │ │ ├── 20250920182635_remove_unlicensed_music │ │ │ └── migration.sql │ │ │ └── 20251005222327_rename_matches_table │ │ │ └── migration.sql │ ├── eslint.config.js │ ├── tsconfig.json │ ├── src │ │ └── index.ts │ └── package.json ├── email │ ├── eslint.config.js │ ├── src │ │ └── index.ts │ ├── tsconfig.json │ └── package.json └── env │ ├── src │ └── env.ts │ ├── eslint.config.js │ ├── tsconfig.json │ └── package.json ├── bun.lockb ├── apps └── web │ ├── postcss.config.cjs │ ├── app │ ├── forbidden.tsx │ ├── api │ │ └── trpc │ │ │ └── [trpc] │ │ │ └── route.ts │ ├── (pages) │ │ ├── song │ │ │ └── [id] │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ ├── project │ │ │ ├── layout.tsx │ │ │ └── [id] │ │ │ │ ├── add-song-request │ │ │ │ └── page.tsx │ │ │ │ └── page.tsx │ │ ├── music-submission │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── song-request │ │ │ ├── layout.tsx │ │ │ └── [id] │ │ │ │ └── page.tsx │ │ ├── project-submission │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── profile │ │ │ └── page.tsx │ │ ├── login │ │ │ └── page.tsx │ │ ├── signup │ │ │ ├── page.tsx │ │ │ ├── musician │ │ │ │ └── page.tsx │ │ │ └── media-maker │ │ │ │ └── page.tsx │ │ ├── forgot-password │ │ │ └── page.tsx │ │ ├── reset-password │ │ │ └── page.tsx │ │ └── page.tsx │ ├── not-found.tsx │ ├── error.tsx │ ├── loading.tsx │ ├── layout.tsx │ └── ClientWrapper.tsx │ ├── public │ ├── images │ │ ├── sandbox.png │ │ ├── profHeadshot.png │ │ ├── mediaMakerAbout.png │ │ ├── musicianAbout.png │ │ ├── pianoStockImage.png │ │ ├── greenLineRecords.png │ │ └── mainLandingImage.webp │ ├── bg-assets │ │ └── green-rectangle-cut.svg │ └── icons │ │ ├── Project_Leaf.svg │ │ └── back_button.svg │ ├── next-env.d.ts │ ├── eslint.config.js │ ├── next.config.ts │ ├── tailwind.config.ts │ ├── tsconfig.json │ └── package.json ├── bunfig.toml ├── tests ├── happydom.ts ├── frontend │ ├── util.tsx │ └── signin.test.tsx ├── tsconfig.json ├── mocks │ ├── MockNextCache.ts │ ├── util.ts │ ├── MockEmailService.ts │ └── MockNextNavigation.ts ├── eslint.config.js ├── testing-library.ts ├── runtime.ts ├── package.json └── api │ └── email-service.test.ts ├── tooling ├── typescript │ ├── package.json │ ├── internal-package.json │ └── base.json ├── tailwind │ ├── eslint.config.js │ ├── native.ts │ ├── tsconfig.json │ ├── web.ts │ ├── README.md │ └── package.json ├── eslint │ ├── tsconfig.json │ ├── nextjs.js │ ├── react.js │ └── package.json └── prettier │ ├── tsconfig.json │ ├── package.json │ └── index.js ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── turbo └── generators │ └── templates │ ├── eslint.config.js.hbs │ ├── tsconfig.json.hbs │ └── package.json.hbs ├── .github ├── actions │ └── setup-bun │ │ └── action.yml ├── workflows │ ├── apply-migrations.yml │ ├── static-checks.yml │ ├── check-migrations.yml │ └── bun-tests.yml ├── scripts │ └── verify_db_empty.sh └── pull_request_template.md ├── compose.yml ├── .gitignore └── .env.example /.gitattributes: -------------------------------------------------------------------------------- 1 | *.lockb binary diff=lockb -------------------------------------------------------------------------------- /packages/trpc/src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./send-email-helper"; 2 | -------------------------------------------------------------------------------- /bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandboxnu/good-dog-licensing/main/bun.lockb -------------------------------------------------------------------------------- /packages/hooks/src/index.ts: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | export * from "./useAuthenticatedUser"; 4 | -------------------------------------------------------------------------------- /apps/web/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /apps/web/app/forbidden.tsx: -------------------------------------------------------------------------------- 1 | export default function Forbidden() { 2 | return
Moderator landing page!
; 3 | } 4 | -------------------------------------------------------------------------------- /tooling/typescript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@good-dog/typescript", 3 | "private": true, 4 | "version": "0.1.0", 5 | "files": [ 6 | "*.json" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /packages/components/src/oldStuff/projects/MediamakerOverview.tsx: -------------------------------------------------------------------------------- 1 | export default function MediamakerOverview() { 2 | returnCould not find requested resource
8 | Return Home 9 |{content}
16 |18 | {description} 19 |
20 |14 | Please wait while we fetch your content. 15 |
16 |{definition}
22 |{title}
20 |{subheader}
21 |{subtitle}
23 |{bodyText}
25 |Enter your details in the required fields below
16 |No worries! Enter your account email address to reset.
16 |{errors.message}
34 | )} 35 |{project.description}
27 |{errors.message}
42 | )} 43 |19 | GOOD DOG LICENSING 20 |
21 | 22 | 23 | 46 |Song Request Information
11 |Song Request Title
13 |{songRequest ? songRequest.songRequestTitle : "..."}
14 |Request Added
17 |18 | {songRequest?.createdAt.toLocaleDateString("en-US", { 19 | month: "long", 20 | day: "numeric", 21 | year: "numeric", 22 | })} 23 |
24 |Summary
27 |{songRequest ? songRequest.description : "..."}
28 |Purpose
31 |{songRequest ? songRequest.feelingsConveyed : "..."}
32 |Additional Information
36 |{songRequest.additionalInfo}
37 |Review and approve/deny the songs matched below
34 | {filteredMatches.length === 0 && ( 35 |No requests active at this time
38 |36 | {songRequest.songRequestTitle} 37 |
38 |{songRequest.description}
41 |Review and approve/deny the songs matched below
33 | {filteredMatches.length === 0 && ( 34 |No requests active at this time
37 |56 | {errorMessage} 57 |
58 |