From 6d457cfe12da3281a986e5ef04416931c0fe3803 Mon Sep 17 00:00:00 2001 From: Subhajit Kundu Date: Fri, 31 Oct 2025 08:47:12 +0530 Subject: [PATCH 1/2] feat: initial port to monorepo --- .gitignore | 97 +- apps/admin/.env.example | 25 + apps/admin/.gitignore | 44 + CONTRIBUTING.md => apps/admin/CONTRIBUTING.md | 0 LICENSE => apps/admin/LICENSE | 0 apps/admin/README.md | 84 + apps/admin/WARP.md | 106 + apps/admin/apis/Check User Signed Up.bru | 19 + apps/admin/apis/bruno.json | 9 + .../apis/environments/Admin Default ENV.bru | 6 + .../app/(dashboard)/team-management/page.tsx | 197 + .../team-management/tokens/page.tsx | 165 + .../admin/app/api/admin/check-signup/route.ts | 89 + apps/admin/app/api/generate/route.ts | 73 + .../api/github-app/create-webhook/route.ts | 45 + .../app/api/github-app/install-url/route.ts | 18 + .../app/api/github-app/installations/route.ts | 18 + .../app/api/github-app/repositories/route.ts | 41 + apps/admin/app/api/github/webhooks/route.ts | 915 + apps/admin/app/api/linear/callback/route.ts | 58 + apps/admin/app/api/team/search/route.ts | 62 + apps/admin/app/favicon.ico | Bin 0 -> 4286 bytes apps/admin/app/generate-pr/page.tsx | 33 + apps/admin/app/globals.css | 100 + apps/admin/app/layout.tsx | 68 + apps/admin/app/login/page.tsx | 15 + apps/admin/app/page.tsx | 11 + apps/admin/app/settings/page.tsx | 126 + apps/admin/app/waitlist/page.tsx | 133 + apps/admin/components.json | 21 + apps/admin/components/LogoutButton.tsx | 27 + apps/admin/components/MainSidebar.tsx | 186 + apps/admin/components/auth/LoginScreen.tsx | 183 + .../generate-pr/AuthStateProvider.tsx | 18 + .../components/generate-pr/AuthWrapper.tsx | 19 + .../generate-pr/CustomInstructionsDialog.tsx | 135 + .../components/generate-pr/IssueSelect.tsx | 89 + .../generate-pr/LinearConnectButton.tsx | 59 + .../components/generate-pr/LinearOAuth.tsx | 27 + .../components/generate-pr/PRDescription.tsx | 93 + .../components/generate-pr/PRGenerator.tsx | 161 + .../components/providers/convex-provider.tsx | 11 + .../components/providers/theme-provider.tsx | 11 + .../settings/AddRepositoryDialog.tsx | 305 + .../components/settings/GitHubAppSettings.tsx | 122 + .../settings/GitHubConnectButton.tsx | 126 + .../components/settings/RepositoryCard.tsx | 160 + .../team-management/AddTeamMemberDialog.tsx | 229 + .../team-management/EditTeamMemberDialog.tsx | 236 + .../team-management/TeamMemberActions.tsx | 121 + .../team-management/ViewTeamMemberDialog.tsx | 152 + apps/admin/components/ui/alert-dialog.tsx | 141 + apps/admin/components/ui/badge.tsx | 36 + apps/admin/components/ui/button.tsx | 57 + apps/admin/components/ui/card.tsx | 76 + apps/admin/components/ui/checkbox.tsx | 30 + apps/admin/components/ui/collapsible.tsx | 11 + apps/admin/components/ui/dialog.tsx | 122 + apps/admin/components/ui/dropdown-menu.tsx | 201 + apps/admin/components/ui/image-upload.tsx | 189 + apps/admin/components/ui/input.tsx | 22 + apps/admin/components/ui/label.tsx | 27 + apps/admin/components/ui/select.tsx | 161 + .../admin/components}/ui/separator.tsx | 0 apps/admin/components/ui/sheet.tsx | 140 + apps/admin/components/ui/sidebar.tsx | 762 + apps/admin/components/ui/skeleton.tsx | 13 + apps/admin/components/ui/table.tsx | 120 + apps/admin/components/ui/textarea.tsx | 22 + apps/admin/components/ui/tooltip.tsx | 32 + .../components/utilities/LaunchCountdown.tsx | 76 + .../utilities/ThemeToggleButton.tsx | 37 + .../waitlist/ClerkAllowlistStatusColumn.tsx | 89 + .../components/waitlist/WaitlistTable.tsx | 149 + apps/admin/convex/README.md | 90 + apps/admin/convex/_generated/api.d.ts | 38 + apps/admin/convex/_generated/api.js | 22 + apps/admin/convex/_generated/dataModel.d.ts | 60 + apps/admin/convex/_generated/server.d.ts | 142 + apps/admin/convex/_generated/server.js | 89 + apps/admin/convex/apiTokens.ts | 86 + apps/admin/convex/files.ts | 23 + apps/admin/convex/repositories.ts | 364 + apps/admin/convex/schema.ts | 108 + apps/admin/convex/teamMembers.ts | 208 + apps/admin/convex/tsconfig.json | 25 + apps/admin/eslint.config.mjs | 119 + apps/admin/hooks/use-mobile.tsx | 19 + apps/admin/hooks/useLinearAuth.ts | 31 + apps/admin/hooks/useLinearClient.ts | 52 + apps/admin/hooks/useLinearUser.ts | 89 + apps/admin/lib/actions/checkLinearAuth.ts | 13 + .../lib/actions/clerkAllowlistActions.ts | 95 + apps/admin/lib/actions/waitlistActions.ts | 139 + apps/admin/lib/branch-matching.ts | 524 + apps/admin/lib/github-api.ts | 415 + apps/admin/lib/github-app.ts | 196 + apps/admin/lib/markdown.ts | 11 + apps/admin/lib/utils.ts | 4 + apps/admin/middleware.ts | 42 + apps/admin/next.config.ts | 7 + apps/admin/package.json | 67 + apps/admin/postcss.config.mjs | 8 + apps/admin/public/file.svg | 1 + apps/admin/public/globe.svg | 1 + apps/admin/public/letraz-mono.png | Bin 0 -> 528783 bytes apps/admin/public/next.svg | 1 + apps/admin/public/pfp1.png | Bin 0 -> 231974 bytes apps/admin/public/pfp2.png | Bin 0 -> 258342 bytes apps/admin/public/vercel.svg | 1 + apps/admin/public/window.svg | 1 + apps/admin/tailwind.config.ts | 75 + apps/admin/tsconfig.json | 21 + apps/admin/types/teamMember.ts | 6 + .env.example => apps/client/.env.example | 0 .eslintrc.json => apps/client/.eslintrc.json | 0 apps/client/.gitignore | 50 + apps/client/CONTRIBUTING.md | 31 + apps/client/LICENSE | 21 + README.md => apps/client/README.md | 0 .../client/__tests__}/helpers/api-mocks.ts | 0 .../client/__tests__}/helpers/index.ts | 0 .../__tests__}/helpers/mock-factories.ts | 0 .../client/__tests__}/helpers/test-helpers.ts | 0 .../helpers/test-utilities.test.tsx | 0 .../client/__tests__}/helpers/test-utils.tsx | 0 .../__tests__}/helpers/utilities-core.test.ts | 0 .../client/__tests__}/lib-utils.test.ts | 0 .../client/__tests__}/react-setup.test.tsx | 0 .../client/__tests__}/setup.test.ts | 0 {app => apps/client/app}/(auth)/layout.tsx | 0 .../[[...sign-in]]/SignInPage.title.tsx | 0 .../(auth)/signin/[[...sign-in]]/page.tsx | 0 .../signup/[[...sign-up]]/SignUp.content.tsx | 0 .../[[...sign-up]]/SignUpPage.title.tsx | 0 .../(auth)/signup/[[...sign-up]]/page.tsx | 0 .../client/app}/(auth)/sso-callback/page.tsx | 0 .../client/app}/(website)/(legal)/layout.tsx | 0 .../app}/(website)/(legal)/privacy/page.tsx | 0 .../app}/(website)/(legal)/terms/page.tsx | 0 .../app}/(website)/blog/[slug]/page.tsx | 0 .../client/app}/(website)/blog/layout.tsx | 0 .../client/app}/(website)/blog/page.tsx | 0 .../app}/(website)/changes/PostCard.tsx | 0 .../app}/(website)/changes/PostsList.tsx | 0 .../app}/(website)/changes/page.heading.tsx | 0 .../client/app}/(website)/changes/page.tsx | 0 {app => apps/client/app}/(website)/layout.tsx | 0 .../client/app}/(website)/page.canvas.tsx | 0 .../client/app}/(website)/page.faq.tsx | 0 .../client/app}/(website)/page.features.tsx | 0 .../client/app}/(website)/page.heroHeader.tsx | 0 .../client/app}/(website)/page.logo.tsx | 0 .../client/app}/(website)/page.process.tsx | 0 {app => apps/client/app}/(website)/page.tsx | 0 .../client/app}/(website)/page.video.tsx | 0 .../app}/(website)/story/page.content.tsx | 0 .../app}/(website)/story/page.heading.tsx | 0 .../client/app}/(website)/story/page.tsx | 0 .../app}/admin/resumes/[resumeId]/page.tsx | 0 .../client/app}/api/linkedin/parse/route.ts | 0 .../client/app}/api/resume/parse/route.ts | 0 .../client/app}/api/rize/status/route.ts | 0 .../client/app}/api/update/new/route.ts | 0 .../app/craft/resumes/[resumeId]/loading.tsx | 0 .../craft/resumes/[resumeId]/not-found.tsx | 0 .../app/craft/resumes/[resumeId]/page.tsx | 0 .../resumes/[resumeId]/processing.client.tsx | 0 {app => apps/client/app}/app/layout.tsx | 0 {app => apps/client/app}/app/not-found.tsx | 0 .../app/onboarding/BrainAnimation.client.tsx | 0 .../client/app}/app/onboarding/error.tsx | 0 .../client/app}/app/onboarding/page.tsx | 0 .../client/app}/app/onboarding/types.ts | 0 {app => apps/client/app}/app/page.tsx | 0 {app => apps/client/app}/docs/[slug]/page.tsx | 0 .../app}/docs/components/code-block.tsx | 0 .../app}/docs/components/docs-navigation.tsx | 0 .../docs/components/docs-search-button.tsx | 0 .../components/hierarchical-page-item.tsx | 0 .../docs/components/table-of-contents.tsx | 0 {app => apps/client/app}/docs/layout.tsx | 0 {app => apps/client/app}/docs/page.tsx | 0 {app => apps/client/app}/favicon.ico | Bin .../app}/fonts/charter/charter_bold.woff2 | Bin .../app}/fonts/charter/charter_regular.woff2 | Bin .../fonts/modelica/BwModelicaSS01-Black.woff2 | Bin .../modelica/BwModelicaSS01-BlackItalic.woff2 | Bin .../fonts/modelica/BwModelicaSS01-Bold.woff2 | Bin .../modelica/BwModelicaSS01-BoldItalic.woff2 | Bin .../modelica/BwModelicaSS01-ExtraBold.woff2 | Bin .../BwModelicaSS01-ExtraBoldItalic.woff2 | Bin .../modelica/BwModelicaSS01-Hairline.woff2 | Bin .../BwModelicaSS01-HairlineItalic.woff2 | Bin .../fonts/modelica/BwModelicaSS01-Light.woff2 | Bin .../modelica/BwModelicaSS01-LightItalic.woff2 | Bin .../modelica/BwModelicaSS01-Medium.woff2 | Bin .../BwModelicaSS01-MediumItalic.woff2 | Bin .../modelica/BwModelicaSS01-Regular.woff2 | Bin .../BwModelicaSS01-RegularItalic.woff2 | Bin .../fonts/modelica/BwModelicaSS01-Thin.woff2 | Bin .../modelica/BwModelicaSS01-ThinItalic.woff2 | Bin {app => apps/client/app}/global-error.tsx | 0 {app => apps/client/app}/globals.css | 0 {app => apps/client/app}/layout.tsx | 0 {app => apps/client/app}/not-found.tsx | 0 {app => apps/client/app}/opengraph-image.png | Bin {app => apps/client/app}/robots.ts | 0 .../client/app}/signup/sso-callback/page.tsx | 0 {app => apps/client/app}/sitemap.ts | 2 +- {app => apps/client/app}/twitter-image.png | Bin .../client/components.json | 0 .../client/components}/AppSidebar.tsx | 0 .../client/components}/DocsSearchDialog.tsx | 0 .../client/components}/MobileNavbar.tsx | 0 .../client/components}/NewResumeInput.tsx | 0 .../client/components}/UserSupport.tsx | 0 .../client/components}/UserSupportPanel.tsx | 0 .../client/components}/Waitlist.tsx | 0 .../client/components}/WebsiteFooter.tsx | 0 .../client/components}/WebsiteNavBar.tsx | 0 .../components}/__tests__/AppSidebar.test.tsx | 0 .../__tests__/NewResumeInput.test.tsx | 0 .../components}/__tests__/Waitlist.test.tsx | 0 .../__tests__/WebsiteNavBar.test.tsx | 0 .../analytics/AcquisitionTracker.tsx | 0 .../components}/animations/DefaultFade.ts | 0 .../components}/animations/DefaultSlide.ts | 0 .../components}/animations/ParticlesBurst.tsx | 0 .../components}/animations/StaggeredText.tsx | 0 .../components}/animations/TextAnimations.tsx | 0 .../__tests__/TextAnimations.test.tsx | 0 .../auth/EmailPasswordSignInForm.tsx | 0 .../auth/EmailPasswordSignUpForm.tsx | 0 .../components}/auth/GithubAuthButton.tsx | 0 .../components}/auth/GoogleAuthButton.tsx | 0 .../components}/blog/BlogCategories.tsx | 0 .../client/components}/blog/BlogPostCard.tsx | 0 .../components}/blog/BlogPostContent.tsx | 0 .../client/components}/blog/BlogPostMeta.tsx | 0 .../clientContainers/AppLayoutContainer.tsx | 0 .../clientContainers/AppSidebarContainer.tsx | 0 .../__tests__/AppLayoutContainer.test.tsx | 0 .../components}/dashboard/BaseResumeCard.tsx | 0 .../dashboard/DashboardResumesGrid.tsx | 0 .../dashboard/DashboardSearchContainer.tsx | 0 .../dashboard/DashboardSearchInput.tsx | 0 .../components}/dashboard/ResumeCard.tsx | 0 .../dashboard/ResumeCardActionsBar.tsx | 0 .../components}/dashboard/ResumeSearch.tsx | 0 .../components}/mobile/MobilePanelSheet.tsx | 2 +- .../components}/mobile/MobilePanels.tsx | 0 .../notifications/NOTIFICATION_MAPPING.ts | 0 .../notifications/NotificationBell.tsx | 0 .../notifications/NotificationFeed.tsx | 0 .../client/components}/onboarding/About.tsx | 0 .../onboarding/AboutDescription.tsx | 0 .../onboarding/AboutNextControl.client.tsx | 0 .../components}/onboarding/BaseResume.tsx | 0 .../onboarding/BaseResumeProvider.tsx | 0 .../components}/onboarding/Education.tsx | 0 .../components}/onboarding/EducationForm.tsx | 0 .../components}/onboarding/Experience.tsx | 0 .../components}/onboarding/ExperienceForm.tsx | 0 .../onboarding/OnboardingCompletionButton.tsx | 0 .../onboarding/OnboardingFlowControl.tsx | 0 .../onboarding/OnboardingFormInput.tsx | 0 .../OnboardingStepTracker.client.tsx | 0 .../onboarding/OnboardingWelcome.tsx | 0 .../components}/onboarding/ParseResume.tsx | 0 .../onboarding/PersonalDetails.tsx | 0 .../onboarding/PersonalDetailsForm.tsx | 0 .../client/components}/onboarding/Welcome.tsx | 0 .../onboarding/__tests__/About.test.tsx | 0 .../onboarding/__tests__/BaseResume.test.tsx | 0 .../onboarding/__tests__/Education.test.tsx | 0 .../onboarding/__tests__/Experience.test.tsx | 0 .../__tests__/OnboardingFormInput.test.tsx | 0 .../__tests__/PersonalDetails.test.tsx | 0 .../onboarding/__tests__/Welcome.test.tsx | 0 .../components}/onboarding/useRizeBackfill.ts | 0 .../components}/providers/ApiProvider.tsx | 0 .../components}/providers/KnockProvider.tsx | 0 .../providers/MobilePanelProvider.tsx | 2 +- .../components}/providers/PosthogProvider.tsx | 0 .../providers/SentryUserProvider.tsx | 0 .../components}/providers/SidebarProvider.tsx | 0 .../providers/SmoothScrollProvider.tsx | 0 .../resume/DesktopResumeScaler.tsx | 0 .../components}/resume/JobDetailsModal.tsx | 0 .../resume/ReorderableSections.tsx | 0 .../resume/ResumeActionsToolbar.tsx | 0 .../components}/resume/ResumeEditor.tsx | 0 .../resume/ResumeRevealOverlay.tsx | 0 .../client/components}/resume/ResumeView.tsx | 0 .../components}/resume/ResumeViewer.tsx | 0 .../__tests__/ReorderableSections.test.tsx | 0 .../resume/__tests__/ResumeEditor.test.tsx | 0 .../resume/__tests__/ResumeView.test.tsx | 0 .../resume/__tests__/ResumeViewer.test.tsx | 0 .../contexts/ResumeHighlightContext.tsx | 2 +- .../controllers/CertificationController.tsx | 0 .../controllers/EducationController.tsx | 0 .../controllers/ExperienceController.tsx | 0 .../controllers/PersonalInfoController.tsx | 0 .../resume/controllers/ProjectController.tsx | 0 .../resume/controllers/SkillsController.tsx | 0 .../resume/editors/CertificationEditor.tsx | 0 .../resume/editors/EducationEditor.tsx | 0 .../resume/editors/ExperienceEditor.tsx | 0 .../resume/editors/PersonalDetailsEditor.tsx | 0 .../resume/editors/ProjectEditor.tsx | 0 .../resume/editors/SkillsEditor.tsx | 0 .../__tests__/EducationEditor.test.tsx | 0 .../__tests__/ExperienceEditor.test.tsx | 0 .../__tests__/PersonalDetailsEditor.test.tsx | 0 .../editors/__tests__/SkillsEditor.test.tsx | 0 .../resume/editors/shared/CountrySelect.tsx | 0 .../resume/editors/shared/DateRangeFields.tsx | 2 +- .../resume/editors/shared/EditorHeader.tsx | 0 .../resume/editors/shared/FormButtons.tsx | 0 .../resume/editors/shared/ItemCard.tsx | 0 .../editors/shared/ProficiencySlider.tsx | 0 .../editors/shared/RichTextFormField.tsx | 0 .../resume/editors/shared/TextFormField.tsx | 2 +- .../components}/resume/hooks/useAutoFocus.ts | 2 +- .../resume/hooks/useDidTransition.ts | 0 .../components}/resume/hooks/useIsMobile.ts | 0 .../resume/hooks/useRevealOnReady.ts | 0 .../components}/resume/icons/CalendarPDF.tsx | 0 .../components}/resume/icons/GlobePDF.tsx | 0 .../components}/resume/icons/MailPDF.tsx | 0 .../components}/resume/icons/MapPinPDF.tsx | 0 .../components}/resume/icons/PhonePDF.tsx | 0 .../resume/mobile/MobileBottomSheet.tsx | 0 .../resume/mobile/MobileSectionTabs.tsx | 0 .../resume/mobile/ResumeViewMobile.tsx | 0 .../themes/DEFAULT_THEME/DefaultTheme.tsx | 0 .../__tests__/DefaultTheme.test.tsx | 0 .../themes/DEFAULT_THEME/fontawesome.ts | 0 .../resume/themes/DEFAULT_THEME/fonts.ts | 0 .../resume/themes/DEFAULT_THEME/index.html | 0 .../sections/CertificationSection.tsx | 0 .../sections/CertificationTitle.tsx | 0 .../sections/EducationSection.tsx | 0 .../DEFAULT_THEME/sections/EducationTitle.tsx | 0 .../sections/ExperienceSection.tsx | 0 .../sections/ExperienceTitle.tsx | 0 .../sections/PersonalInfoSection.tsx | 0 .../sections/ProjectsSection.tsx | 0 .../DEFAULT_THEME/sections/ProjectsTitle.tsx | 0 .../DEFAULT_THEME/sections/SkillsSection.tsx | 0 .../DEFAULT_THEME/sections/SkillsTitle.tsx | 0 .../__tests__/EducationSection.test.tsx | 0 .../__tests__/ExperienceSection.test.tsx | 0 .../__tests__/PersonalInfoSection.test.tsx | 0 .../DEFAULT_THEME/shared/Components.tsx | 0 .../resume/themes/DEFAULT_THEME/styles.css | 0 .../resume/themes/ThemeFactory.tsx | 0 .../themes/__tests__/ThemeFactory.test.tsx | 0 .../__tests__/RichTextEditor.test.tsx | 0 .../components/__tests__/toolbar.test.tsx | 0 .../bubble-menu/link-bubble-menu.tsx | 0 .../components/link/link-edit-block.tsx | 0 .../components/link/link-edit-popover.tsx | 0 .../components/link/link-popover-block.tsx | 0 .../components/measured-container.tsx | 0 .../components/shortcut-key.tsx | 0 .../components/toolbar-button.tsx | 0 .../components/toolbar-section.tsx | 0 .../richTextEditor/components/toolbar.tsx | 0 .../richTextEditor/extensions/link/index.ts | 3 +- .../hooks/use-container-size.ts | 2 +- .../hooks/use-minimal-tiptap.ts | 0 .../richTextEditor/hooks/use-theme.ts | 0 .../richTextEditor/hooks/use-throttle.ts | 2 +- .../components}/richTextEditor/index.tsx | 0 .../richTextEditor/styles/index.css | 0 .../richTextEditor/styles/partials/lists.css | 0 .../styles/partials/placeholder.css | 0 .../components}/richTextEditor/types.ts | 0 .../components}/richTextEditor/utils.ts | 0 .../skeletons/CertificationEditorSkeleton.tsx | 0 .../skeletons/DashboardSearchSkeleton.tsx | 0 .../skeletons/EducationEditorSkeleton.tsx | 0 .../skeletons/ExperienceEditorSkeleton.tsx | 0 .../PersonalDetailsEditorSkeleton.tsx | 0 .../skeletons/ProjectEditorSkeleton.tsx | 0 .../skeletons/ResumeCardSkeleton.tsx | 0 .../skeletons/ResumeEditorSkeleton.tsx | 0 .../skeletons/ResumeViewerSkeleton.tsx | 0 .../skeletons/SkillsEditorSkeleton.tsx | 0 .../skeletons/shared/EditorHeaderSkeleton.tsx | 0 .../skeletons/shared/EditorListSkeleton.tsx | 0 .../skeletons/shared/FormSkeleton.tsx | 0 .../skeletons/shared/ItemCardSkeleton.tsx | 0 .../client/components}/ui/CornerRibbon.tsx | 0 .../components}/ui/__tests__/button.test.tsx | 0 .../client/components}/ui/accordion.tsx | 0 .../client/components}/ui/badge.tsx | 0 .../client/components}/ui/button-group.tsx | 0 .../client/components}/ui/button.tsx | 0 .../client/components}/ui/calendar.tsx | 8 +- .../client/components}/ui/card.tsx | 0 .../components}/ui/category-autocomplete.tsx | 2 +- .../client/components}/ui/checkbox.tsx | 0 .../client/components}/ui/collapsible.tsx | 0 .../client/components}/ui/command.tsx | 2 +- .../components}/ui/country-dropdown.tsx | 0 .../client/components}/ui/date-picker.tsx | 0 .../client/components}/ui/dialog.tsx | 0 .../client/components}/ui/dropdown-menu.tsx | 0 .../client/components}/ui/empty.tsx | 0 .../client/components}/ui/expandable-tabs.tsx | 0 .../client/components}/ui/flickering-grid.tsx | 0 .../client/components}/ui/form.tsx | 0 .../client/components}/ui/highlight.tsx | 0 .../client/components}/ui/hover-card.tsx | 0 .../client/components}/ui/input-otp.tsx | 0 .../client/components}/ui/input.tsx | 0 .../client/components}/ui/label.tsx | 0 .../client/components}/ui/loading-dots.tsx | 0 .../client/components}/ui/menu.tsx | 0 .../client/components}/ui/pop-confirm.tsx | 0 .../client/components}/ui/popover.tsx | 0 .../client/components}/ui/safari-mockup.tsx | 0 .../client/components}/ui/scroll-area.tsx | 0 .../client/components}/ui/scroll-mask.tsx | 0 .../client/components}/ui/select.tsx | 0 apps/client/components/ui/separator.tsx | 31 + .../client/components}/ui/sheet.tsx | 0 .../components}/ui/skill-autocomplete.tsx | 2 +- .../client/components}/ui/slider.tsx | 0 .../client/components}/ui/sonner.tsx | 0 .../client/components}/ui/switch.tsx | 0 .../client/components}/ui/tabs.tsx | 0 .../client/components}/ui/textarea.tsx | 0 .../client/components}/ui/toggle.tsx | 0 .../client/components}/ui/tooltip.tsx | 0 .../components}/utilities/AiLoading.tsx | 0 .../components}/utilities/ErrorView.tsx | 0 .../components}/utilities/ResumeAiLoading.tsx | 0 .../utilities/__tests__/AiLoading.test.tsx | 0 .../utilities/__tests__/ErrorView.test.tsx | 0 config.ts => apps/client/config.ts | 0 constants.ts => apps/client/constants.ts | 0 .../client/emails}/account-deleted.tsx | 0 .../client/emails}/follow-up-access.tsx | 0 .../client/emails}/welcome-to-beta.tsx | 0 {emails => apps/client/emails}/welcome.tsx | 0 env.ts => apps/client/env.ts | 0 {hooks => apps/client/hooks}/useDOMMounted.ts | 0 .../client/instrumentation-client.ts | 0 .../client/instrumentation.ts | 0 .../client/lib}/__tests__/utils.test.ts | 0 {lib => apps/client/lib}/analytics/events.ts | 0 {lib => apps/client/lib}/analytics/index.ts | 0 {lib => apps/client/lib}/basehub.ts | 0 .../client/lib}/certification/actions.ts | 0 .../client/lib}/certification/keys.ts | 0 .../client/lib}/certification/mutations.ts | 0 .../client/lib}/certification/queries.ts | 0 .../client/lib}/certification/types.ts | 0 .../lib}/config/__tests__/api-client.test.ts | 0 {lib => apps/client/lib}/config/api-client.ts | 0 {lib => apps/client/lib}/config/api-types.ts | 0 {lib => apps/client/lib}/constants.ts | 0 .../lib}/education/__tests__/actions.test.ts | 0 .../education/__tests__/mutations.test.ts | 0 .../lib}/education/__tests__/queries.test.ts | 0 {lib => apps/client/lib}/education/actions.ts | 0 {lib => apps/client/lib}/education/keys.ts | 0 .../client/lib}/education/mutations.ts | 0 {lib => apps/client/lib}/education/queries.ts | 0 {lib => apps/client/lib}/education/types.ts | 0 .../lib}/experience/__tests__/actions.test.ts | 0 .../experience/__tests__/mutations.test.ts | 0 .../lib}/experience/__tests__/queries.test.ts | 0 .../client/lib}/experience/actions.ts | 0 {lib => apps/client/lib}/experience/keys.ts | 0 .../client/lib}/experience/mutations.ts | 0 .../client/lib}/experience/queries.ts | 0 {lib => apps/client/lib}/experience/types.ts | 0 {lib => apps/client/lib}/feedback/actions.ts | 0 .../client/lib}/feedback/mutations.ts | 0 {lib => apps/client/lib}/feedback/types.ts | 0 {lib => apps/client/lib}/job/actions.ts | 0 {lib => apps/client/lib}/job/types.ts | 0 {lib => apps/client/lib}/linkedin/actions.ts | 0 {lib => apps/client/lib}/linkedin/parser.ts | 0 {lib => apps/client/lib}/linkedin/types.ts | 0 .../lib}/misc/__tests__/error-handler.test.ts | 0 .../client/lib}/misc/error-handler.ts | 0 .../lib}/onboarding/__tests__/actions.test.ts | 0 .../client/lib}/onboarding/actions.ts | 0 .../client/lib}/onboarding/globals.d.ts | 0 {lib => apps/client/lib}/onboarding/hooks.ts | 0 {lib => apps/client/lib}/onboarding/types.ts | 0 {lib => apps/client/lib}/posts.method.ts | 0 {lib => apps/client/lib}/project/actions.ts | 0 {lib => apps/client/lib}/project/keys.ts | 0 {lib => apps/client/lib}/project/mutations.ts | 0 {lib => apps/client/lib}/project/queries.ts | 0 {lib => apps/client/lib}/project/types.ts | 0 .../lib}/resume/__tests__/actions.test.ts | 0 .../lib}/resume/__tests__/mutations.test.ts | 0 .../lib}/resume/__tests__/queries.test.ts | 0 {lib => apps/client/lib}/resume/accept.ts | 0 {lib => apps/client/lib}/resume/actions.ts | 0 {lib => apps/client/lib}/resume/key.ts | 0 {lib => apps/client/lib}/resume/mutations.ts | 0 {lib => apps/client/lib}/resume/parser.ts | 0 {lib => apps/client/lib}/resume/queries.ts | 0 {lib => apps/client/lib}/resume/types.ts | 0 {lib => apps/client/lib}/resume/ui-actions.ts | 0 {lib => apps/client/lib}/rize/actions.ts | 0 {lib => apps/client/lib}/rize/parser.ts | 0 {lib => apps/client/lib}/rize/rize.ts | 0 {lib => apps/client/lib}/rize/types.ts | 0 .../lib}/skill/__tests__/actions.test.ts | 0 .../lib}/skill/__tests__/mutations.test.ts | 0 .../lib}/skill/__tests__/queries.test.ts | 0 {lib => apps/client/lib}/skill/actions.ts | 0 {lib => apps/client/lib}/skill/hooks.ts | 0 {lib => apps/client/lib}/skill/mutations.ts | 0 {lib => apps/client/lib}/skill/queries.ts | 0 {lib => apps/client/lib}/skill/types.ts | 0 .../lib}/user-info/__tests__/actions.test.ts | 0 .../user-info/__tests__/mutations.test.ts | 0 .../lib}/user-info/__tests__/queries.test.ts | 0 {lib => apps/client/lib}/user-info/actions.ts | 0 {lib => apps/client/lib}/user-info/keys.ts | 0 .../client/lib}/user-info/mutations.ts | 0 {lib => apps/client/lib}/user-info/queries.ts | 0 {lib => apps/client/lib}/user-info/types.ts | 0 {lib => apps/client/lib}/user/metadata.ts | 0 {lib => apps/client/lib}/utils.ts | 0 .../lib}/waitlist/__tests__/actions.test.ts | 0 {lib => apps/client/lib}/waitlist/actions.ts | 0 {lib => apps/client/lib}/waitlist/types.ts | 0 middleware.ts => apps/client/middleware.ts | 0 next.config.ts => apps/client/next.config.ts | 0 apps/client/package.json | 159 + .../client/postcss.config.mjs | 0 {public => apps/client/public}/banner.png | Bin .../client/public}/brain-pulse.webm | Bin {public => apps/client/public}/brain.webp | Bin .../public}/download-and-apply.av1.webm | Bin .../client/public}/download-and-apply.mp4 | Bin .../client/public}/download-and-apply.webm | Bin .../client/public}/error_banner.svg | 0 .../client/public}/find-a-job.av1.webm | Bin .../client/public}/find-a-job.webm | Bin .../client/public}/footer-wordmark.svg | 0 .../client/public}/infosys-logo.svg | 0 .../client/public}/landing-bg.avif | Bin .../client/public}/landing-bg.webp | Bin .../client/public}/landing-sequence.webm | Bin .../public}/landing-sequence/frame000.webp | Bin .../public}/landing-sequence/frame001.webp | Bin .../public}/landing-sequence/frame002.webp | Bin .../public}/landing-sequence/frame003.webp | Bin .../public}/landing-sequence/frame004.webp | Bin .../public}/landing-sequence/frame005.webp | Bin .../public}/landing-sequence/frame006.webp | Bin .../public}/landing-sequence/frame007.webp | Bin .../public}/landing-sequence/frame008.webp | Bin .../public}/landing-sequence/frame009.webp | Bin .../public}/landing-sequence/frame010.webp | Bin .../public}/landing-sequence/frame011.webp | Bin .../public}/landing-sequence/frame012.webp | Bin .../public}/landing-sequence/frame013.webp | Bin .../public}/landing-sequence/frame014.webp | Bin .../public}/landing-sequence/frame015.webp | Bin .../public}/landing-sequence/frame016.webp | Bin .../public}/landing-sequence/frame017.webp | Bin .../public}/landing-sequence/frame018.webp | Bin .../public}/landing-sequence/frame019.webp | Bin .../public}/landing-sequence/frame020.webp | Bin .../public}/landing-sequence/frame021.webp | Bin .../public}/landing-sequence/frame022.webp | Bin .../public}/landing-sequence/frame023.webp | Bin .../public}/landing-sequence/frame024.webp | Bin .../public}/landing-sequence/frame025.webp | Bin .../public}/landing-sequence/frame026.webp | Bin .../public}/landing-sequence/frame027.webp | Bin .../public}/landing-sequence/frame028.webp | Bin .../public}/landing-sequence/frame029.webp | Bin .../public}/landing-sequence/frame030.webp | Bin .../public}/landing-sequence/frame031.webp | Bin .../public}/landing-sequence/frame032.webp | Bin .../public}/landing-sequence/frame033.webp | Bin .../public}/landing-sequence/frame034.webp | Bin .../public}/landing-sequence/frame035.webp | Bin .../public}/landing-sequence/frame036.webp | Bin .../public}/landing-sequence/frame037.webp | Bin .../public}/landing-sequence/frame038.webp | Bin .../public}/landing-sequence/frame039.webp | Bin .../public}/landing-sequence/frame040.webp | Bin .../public}/landing-sequence/frame041.webp | Bin .../public}/landing-sequence/frame042.webp | Bin .../public}/landing-sequence/frame043.webp | Bin .../public}/landing-sequence/frame044.webp | Bin .../public}/landing-sequence/frame045.webp | Bin .../public}/landing-sequence/frame046.webp | Bin .../public}/landing-sequence/frame047.webp | Bin .../public}/landing-sequence/frame048.webp | Bin .../public}/landing-sequence/frame049.webp | Bin .../public}/landing-sequence/frame050.webp | Bin .../public}/landing-sequence/frame051.webp | Bin .../public}/landing-sequence/frame052.webp | Bin .../public}/landing-sequence/frame053.webp | Bin .../public}/landing-sequence/frame054.webp | Bin .../public}/landing-sequence/frame055.webp | Bin .../public}/landing-sequence/frame056.webp | Bin .../public}/landing-sequence/frame057.webp | Bin .../public}/landing-sequence/frame058.webp | Bin .../public}/landing-sequence/frame059.webp | Bin .../public}/landing-sequence/frame060.webp | Bin .../public}/landing-sequence/frame061.webp | Bin .../public}/landing-sequence/frame062.webp | Bin .../public}/landing-sequence/frame063.webp | Bin .../public}/landing-sequence/frame064.webp | Bin .../public}/landing-sequence/frame065.webp | Bin .../public}/landing-sequence/frame066.webp | Bin .../public}/landing-sequence/frame067.webp | Bin .../public}/landing-sequence/frame068.webp | Bin .../public}/landing-sequence/frame069.webp | Bin .../public}/landing-sequence/frame070.webp | Bin .../public}/landing-sequence/frame071.webp | Bin .../public}/landing-sequence/frame072.webp | Bin .../public}/landing-sequence/frame073.webp | Bin .../public}/landing-sequence/frame074.webp | Bin .../public}/landing-sequence/frame075.webp | Bin .../public}/landing-sequence/frame076.webp | Bin .../public}/landing-sequence/frame077.webp | Bin .../public}/landing-sequence/frame078.webp | Bin .../public}/landing-sequence/frame079.webp | Bin .../public}/landing-sequence/frame080.webp | Bin .../public}/landing-sequence/frame081.webp | Bin .../public}/landing-sequence/frame082.webp | Bin .../public}/landing-sequence/frame083.webp | Bin .../public}/landing-sequence/frame084.webp | Bin .../public}/landing-sequence/frame085.webp | Bin .../public}/landing-sequence/frame086.webp | Bin .../public}/landing-sequence/frame087.webp | Bin .../public}/landing-sequence/frame088.webp | Bin .../public}/landing-sequence/frame089.webp | Bin .../public}/landing-sequence/frame090.webp | Bin .../public}/landing-sequence/frame091.webp | Bin .../public}/landing-sequence/frame092.webp | Bin .../public}/landing-sequence/frame093.webp | Bin .../public}/landing-sequence/frame094.webp | Bin .../public}/landing-sequence/frame095.webp | Bin .../public}/landing-sequence/frame096.webp | Bin .../public}/landing-sequence/frame097.webp | Bin .../public}/landing-sequence/frame098.webp | Bin .../public}/landing-sequence/frame099.webp | Bin .../public}/landing-sequence/frame100.webp | Bin .../public}/landing-sequence/frame101.webp | Bin .../public}/landing-sequence/frame102.webp | Bin .../public}/landing-sequence/frame103.webp | Bin .../public}/landing-sequence/frame104.webp | Bin .../public}/landing-sequence/frame105.webp | Bin .../public}/landing-sequence/frame106.webp | Bin .../public}/landing-sequence/frame107.webp | Bin .../public}/landing-sequence/frame108.webp | Bin .../public}/landing-sequence/frame109.webp | Bin .../public}/landing-sequence/frame110.webp | Bin .../public}/landing-sequence/frame111.webp | Bin .../public}/landing-sequence/frame112.webp | Bin .../public}/landing-sequence/frame113.webp | Bin .../public}/landing-sequence/frame114.webp | Bin .../public}/landing-sequence/frame115.webp | Bin .../public}/landing-sequence/frame116.webp | Bin .../public}/landing-sequence/frame117.webp | Bin .../public}/landing-sequence/frame118.webp | Bin .../public}/landing-sequence/frame119.webp | Bin .../public}/landing-sequence/frame120.webp | Bin .../public}/landing-sequence/frame121.webp | Bin .../public}/landing-sequence/frame122.webp | Bin .../public}/landing-sequence/frame123.webp | Bin .../public}/landing-sequence/frame124.webp | Bin .../public}/landing-sequence/frame125.webp | Bin .../public}/landing-sequence/frame126.webp | Bin .../public}/landing-sequence/frame127.webp | Bin .../public}/landing-sequence/frame128.webp | Bin .../public}/landing-sequence/frame129.webp | Bin .../public}/landing-sequence/frame130.webp | Bin .../public}/landing-sequence/frame131.webp | Bin .../public}/landing-sequence/frame132.webp | Bin .../public}/landing-sequence/frame133.webp | Bin .../public}/landing-sequence/frame134.webp | Bin .../public}/landing-sequence/frame135.webp | Bin .../public}/landing-sequence/frame136.webp | Bin .../public}/landing-sequence/frame137.webp | Bin .../public}/landing-sequence/frame138.webp | Bin .../public}/landing-sequence/frame139.webp | Bin .../public}/landing-sequence/frame140.webp | Bin .../public}/landing-sequence/frame141.webp | Bin .../public}/landing-sequence/frame142.webp | Bin .../public}/landing-sequence/frame143.webp | Bin .../public}/landing-sequence/frame144.webp | Bin .../public}/landing-sequence/frame145.webp | Bin .../public}/landing-sequence/frame146.webp | Bin .../public}/landing-sequence/frame147.webp | Bin .../public}/landing-sequence/frame148.webp | Bin .../public}/landing-sequence/frame149.webp | Bin .../public}/landing-sequence/frame150.webp | Bin .../public}/landing-sequence/frame151.webp | Bin .../public}/landing-sequence/frame152.webp | Bin .../public}/landing-sequence/frame153.webp | Bin .../public}/landing-sequence/frame154.webp | Bin .../public}/landing-sequence/frame155.webp | Bin .../public}/landing-sequence/frame156.webp | Bin .../public}/landing-sequence/frame157.webp | Bin .../public}/landing-sequence/frame158.webp | Bin .../public}/landing-sequence/frame159.webp | Bin .../public}/landing-sequence/frame160.webp | Bin .../public}/landing-sequence/frame161.webp | Bin .../public}/landing-sequence/frame162.webp | Bin .../public}/landing-sequence/frame163.webp | Bin .../public}/landing-sequence/frame164.webp | Bin .../public}/landing-sequence/frame165.webp | Bin .../public}/landing-sequence/frame166.webp | Bin .../public}/landing-sequence/frame167.webp | Bin .../public}/landing-sequence/frame168.webp | Bin .../public}/landing-sequence/frame169.webp | Bin .../public}/landing-sequence/frame170.webp | Bin .../public}/landing-sequence/frame171.webp | Bin .../public}/landing-sequence/frame172.webp | Bin .../public}/landing-sequence/frame173.webp | Bin .../public}/landing-sequence/frame174.webp | Bin .../public}/landing-sequence/frame175.webp | Bin .../public}/landing-sequence/frame176.webp | Bin .../public}/landing-sequence/frame177.webp | Bin .../public}/landing-sequence/frame178.webp | Bin .../public}/landing-sequence/frame179.webp | Bin .../public}/landing-sequence/frame180.webp | Bin .../public}/landing-sequence/frame181.webp | Bin .../public}/landing-sequence/frame182.webp | Bin .../public}/landing-sequence/frame183.webp | Bin .../public}/landing-sequence/frame184.webp | Bin .../public}/landing-sequence/frame185.webp | Bin .../public}/landing-sequence/frame186.webp | Bin .../public}/landing-sequence/frame187.webp | Bin .../public}/landing-sequence/frame188.webp | Bin .../public}/landing-sequence/frame189.webp | Bin .../public}/landing-sequence/frame190.webp | Bin .../public}/landing-sequence/frame191.webp | Bin .../public}/landing-sequence/frame192.webp | Bin .../public}/landing-sequence/frame193.webp | Bin .../public}/landing-sequence/frame194.webp | Bin .../public}/landing-sequence/frame195.webp | Bin .../public}/landing-sequence/frame196.webp | Bin .../public}/landing-sequence/frame197.webp | Bin .../public}/landing-sequence/frame198.webp | Bin .../public}/landing-sequence/frame199.webp | Bin .../public}/landing-sequence/frame200.webp | Bin .../public}/landing-sequence/frame201.webp | Bin .../public}/landing-sequence/frame202.webp | Bin .../public}/landing-sequence/frame203.webp | Bin .../public}/landing-sequence/frame204.webp | Bin .../public}/landing-sequence/frame205.webp | Bin .../public}/landing-sequence/frame206.webp | Bin .../public}/landing-sequence/frame207.webp | Bin .../public}/landing-sequence/frame208.webp | Bin .../public}/landing-sequence/frame209.webp | Bin .../public}/landing-sequence/frame210.webp | Bin .../public}/landing-sequence/frame211.webp | Bin .../public}/landing-sequence/frame212.webp | Bin .../public}/landing-sequence/frame213.webp | Bin .../public}/landing-sequence/frame214.webp | Bin .../public}/landing-sequence/frame215.webp | Bin .../public}/landing-sequence/frame216.webp | Bin .../public}/landing-sequence/frame217.webp | Bin .../public}/landing-sequence/frame218.webp | Bin .../public}/landing-sequence/frame219.webp | Bin .../public}/landing-sequence/frame220.webp | Bin .../public}/landing-sequence/frame221.webp | Bin .../public}/landing-sequence/frame222.webp | Bin .../public}/landing-sequence/frame223.webp | Bin .../public}/landing-sequence/frame224.webp | Bin .../public}/landing-sequence/frame225.webp | Bin .../public}/landing-sequence/frame226.webp | Bin .../public}/landing-sequence/frame227.webp | Bin .../public}/landing-sequence/frame228.webp | Bin .../public}/landing-sequence/frame229.webp | Bin .../public}/landing-sequence/frame230.webp | Bin .../public}/landing-sequence/frame231.webp | Bin .../public}/landing-sequence/frame232.webp | Bin .../public}/landing-sequence/frame233.webp | Bin .../public}/landing-sequence/frame234.webp | Bin .../public}/landing-sequence/frame235.webp | Bin .../public}/landing-sequence/frame236.webp | Bin .../public}/landing-sequence/frame237.webp | Bin .../public}/landing-sequence/frame238.webp | Bin .../public}/landing-sequence/frame239.webp | Bin .../public}/landing-sequence/frame240.webp | Bin .../public}/landing-sequence/frame241.webp | Bin .../public}/landing-sequence/frame242.webp | Bin .../public}/landing-sequence/frame243.webp | Bin .../public}/landing-sequence/frame244.webp | Bin .../public}/landing-sequence/frame245.webp | Bin .../public}/landing-sequence/frame246.webp | Bin .../public}/landing-sequence/frame247.webp | Bin .../public}/landing-sequence/frame248.webp | Bin .../public}/landing-sequence/frame249.webp | Bin .../public}/landing-sequence/frame250.webp | Bin .../public}/landing-sequence/frame251.webp | Bin .../public}/landing-sequence/frame252.webp | Bin .../public}/landing-sequence/frame253.webp | Bin .../public}/landing-sequence/frame254.webp | Bin .../public}/landing-sequence/frame255.webp | Bin .../public}/landing-sequence/frame256.webp | Bin .../public}/landing-sequence/frame257.webp | Bin .../public}/landing-sequence/frame258.webp | Bin .../public}/landing-sequence/frame259.webp | Bin .../public}/landing-sequence/frame260.webp | Bin .../public}/landing-sequence/frame261.webp | Bin .../public}/landing-sequence/frame262.webp | Bin .../public}/landing-sequence/frame263.webp | Bin .../public}/landing-sequence/frame264.webp | Bin .../public}/landing-sequence/frame265.webp | Bin .../public}/landing-sequence/frame266.webp | Bin .../public}/landing-sequence/frame267.webp | Bin .../public}/landing-sequence/frame268.webp | Bin .../public}/landing-sequence/frame269.webp | Bin .../public}/landing-sequence/frame270.webp | Bin .../public}/landing-sequence/frame271.webp | Bin .../public}/landing-sequence/frame272.webp | Bin .../public}/landing-sequence/frame273.webp | Bin .../public}/landing-sequence/frame274.webp | Bin .../public}/landing-sequence/frame275.webp | Bin .../public}/landing-sequence/frame276.webp | Bin .../public}/landing-sequence/frame277.webp | Bin .../public}/landing-sequence/frame278.webp | Bin .../public}/landing-sequence/frame279.webp | Bin .../public}/landing-sequence/frame280.webp | Bin .../public}/landing-sequence/frame281.webp | Bin .../public}/landing-sequence/frame282.webp | Bin .../public}/landing-sequence/frame283.webp | Bin .../public}/landing-sequence/frame284.webp | Bin .../public}/landing-sequence/frame285.webp | Bin .../public}/landing-sequence/frame286.webp | Bin .../public}/landing-sequence/frame287.webp | Bin .../public}/landing-sequence/frame288.webp | Bin .../public}/landing-sequence/frame289.webp | Bin .../public}/landing-sequence/frame290.webp | Bin .../public}/landing-sequence/frame291.webp | Bin .../public}/landing-sequence/frame292.webp | Bin .../public}/landing-sequence/frame293.webp | Bin .../public}/landing-sequence/frame294.webp | Bin .../public}/landing-sequence/frame295.webp | Bin .../public}/landing-sequence/frame296.webp | Bin .../public}/landing-sequence/frame297.webp | Bin .../public}/landing-sequence/frame298.webp | Bin .../public}/landing-sequence/frame299.webp | Bin .../public}/landing-sequence/frame300.webp | Bin .../public}/landing-sequence/frame301.webp | Bin .../public}/landing-sequence/frame302.webp | Bin .../public}/landing-sequence/frame303.webp | Bin .../public}/landing-sequence/frame304.webp | Bin .../public}/landing-sequence/frame305.webp | Bin .../public}/landing-sequence/frame306.webp | Bin .../public}/landing-sequence/frame307.webp | Bin .../public}/landing-sequence/frame308.webp | Bin .../public}/landing-sequence/frame309.webp | Bin .../public}/landing-sequence/frame310.webp | Bin .../public}/landing-sequence/frame311.webp | Bin .../public}/landing-sequence/frame312.webp | Bin .../public}/landing-sequence/frame313.webp | Bin .../public}/landing-sequence/frame314.webp | Bin .../public}/landing-sequence/frame315.webp | Bin .../public}/landing-sequence/frame316.webp | Bin .../public}/landing-sequence/frame317.webp | Bin .../public}/landing-sequence/frame318.webp | Bin .../public}/landing-sequence/frame319.webp | Bin .../public}/landing-sequence/frame320.webp | Bin .../public}/landing-sequence/frame321.webp | Bin .../public}/landing-sequence/frame322.webp | Bin .../public}/landing-sequence/frame323.webp | Bin .../public}/landing-sequence/frame324.webp | Bin .../public}/landing-sequence/frame325.webp | Bin .../public}/landing-sequence/frame326.webp | Bin .../public}/landing-sequence/frame327.webp | Bin .../public}/landing-sequence/frame328.webp | Bin .../public}/landing-sequence/frame329.webp | Bin .../public}/landing-sequence/frame330.webp | Bin .../public}/landing-sequence/frame331.webp | Bin .../public}/landing-sequence/frame332.webp | Bin .../public}/landing-sequence/frame333.webp | Bin .../public}/landing-sequence/frame334.webp | Bin .../public}/landing-sequence/frame335.webp | Bin .../public}/landing-sequence/frame336.webp | Bin .../public}/landing-sequence/frame337.webp | Bin .../public}/landing-sequence/frame338.webp | Bin .../public}/landing-sequence/frame339.webp | Bin .../public}/landing-sequence/frame340.webp | Bin .../public}/landing-sequence/frame341.webp | Bin .../public}/landing-sequence/frame342.webp | Bin .../public}/landing-sequence/frame343.webp | Bin .../public}/landing-sequence/frame344.webp | Bin .../public}/landing-sequence/frame345.webp | Bin .../public}/landing-sequence/frame346.webp | Bin .../public}/landing-sequence/frame347.webp | Bin .../public}/landing-sequence/frame348.webp | Bin .../public}/landing-sequence/frame349.webp | Bin .../public}/landing-sequence/frame350.webp | Bin .../public}/landing-sequence/frame351.webp | Bin .../public}/landing-sequence/frame352.webp | Bin .../public}/landing-sequence/frame353.webp | Bin .../public}/landing-sequence/frame354.webp | Bin .../public}/landing-sequence/frame355.webp | Bin .../public}/landing-sequence/frame356.webp | Bin .../public}/landing-sequence/frame357.webp | Bin .../public}/landing-sequence/frame358.webp | Bin .../public}/landing-sequence/frame359.webp | Bin .../public}/landing-sequence/frame360.webp | Bin .../public}/landing-sequence/frame361.webp | Bin .../client/public}/letraz-brain.webm | Bin .../client/public}/letraz-engine.webm | Bin .../client/public}/letraz-intro.mp4 | Bin .../client/public}/letraz-intro.webm | Bin {public => apps/client/public}/letraz.png | Bin .../client/public}/logo-carousel.av1.webm | Bin .../client/public}/logo-carousel.webm | Bin {public => apps/client/public}/logo.png | Bin {public => apps/client/public}/logo.svg | 0 {public => apps/client/public}/logo_dark.svg | 0 {public => apps/client/public}/logo_mono.png | Bin {public => apps/client/public}/logo_mono.svg | 0 .../client/public}/logo_mono_rotated.svg | 0 .../client/public}/nav_menu_bg.png | Bin {public => apps/client/public}/qr-code.webp | Bin .../client/public}/resume-cards.av1.webm | Bin .../client/public}/resume-cards.webm | Bin .../client/public}/resume-generation.av1.webm | Bin .../client/public}/resume-generation.webm | Bin .../client/public}/rize-logo-dark.svg | 0 {public => apps/client/public}/rize-logo.svg | 0 .../client/public}/rize-video.av1.webm | Bin .../client/public}/rize-video.webm | Bin .../client/public}/stacks-logo.svg | 0 {public => apps/client/public}/subhajit.png | Bin .../client/public}/tweak-resume.av1.webm | Bin .../client/public}/tweak-resume.webm | Bin .../client/public}/upload-resume.av1.webm | Bin .../client/public}/upload-resume.webm | Bin routes.ts => apps/client/routes.ts | 0 .../client/sentry.edge.config.ts | 0 .../client/sentry.server.config.ts | 0 .../client/tailwind.config.ts | 0 test-setup.ts => apps/client/test-setup.ts | 0 tsconfig.json => apps/client/tsconfig.json | 8 +- .../client/vitest.config.ts | 0 apps/server/.gitignore | 16 + apps/server/CONTRIBUTING.md | 31 + apps/server/LICENSE | 21 + apps/server/README.md | 167 + apps/server/encore.app | 9 + apps/server/eslint.config.mjs | 116 + apps/server/package.json | 46 + apps/server/services/admin/controller.ts | 25 + apps/server/services/admin/encore.service.ts | 7 + apps/server/services/admin/interface.ts | 11 + apps/server/services/admin/service.ts | 65 + apps/server/services/analytics/actions.ts | 296 + apps/server/services/analytics/controller.ts | 24 + .../services/analytics/encore.service.ts | 7 + apps/server/services/analytics/events.ts | 28 + apps/server/services/analytics/interface.ts | 20 + .../services/analytics/posthog-management.ts | 290 + apps/server/services/analytics/posthog.ts | 41 + apps/server/services/analytics/service.ts | 73 + apps/server/services/core/actions.ts | 292 + apps/server/services/core/controller.ts | 221 + apps/server/services/core/database.ts | 14 + apps/server/services/core/drizzle.config.ts | 8 + apps/server/services/core/encore.service.ts | 16 + apps/server/services/core/freshdesk.ts | 140 + apps/server/services/core/interface.ts | 349 + apps/server/services/core/linear.ts | 237 + apps/server/services/core/loops.ts | 300 + .../migrations/0000_puzzling_ravenous.sql | 9 + .../migrations/0001_colorful_leopardon.sql | 4 + .../core/migrations/0002_faithful_xorn.sql | 8 + .../core/migrations/meta/0000_snapshot.json | 81 + .../core/migrations/meta/0001_snapshot.json | 106 + .../core/migrations/meta/0002_snapshot.json | 157 + .../core/migrations/meta/_journal.json | 27 + apps/server/services/core/schema.ts | 61 + apps/server/services/core/service.ts | 644 + apps/server/services/core/topics.ts | 23 + apps/server/services/identity/actions.ts | 62 + apps/server/services/identity/auth.ts | 226 + apps/server/services/identity/clerk.ts | 247 + apps/server/services/identity/controller.ts | 98 + apps/server/services/identity/database.ts | 20 + .../services/identity/drizzle.config.ts | 8 + .../services/identity/encore.service.ts | 7 + apps/server/services/identity/interface.ts | 105 + .../migrations/0000_whole_dragon_lord.sql | 22 + .../identity/migrations/0001_flat_sandman.sql | 1 + .../migrations/meta/0000_snapshot.json | 158 + .../migrations/meta/0001_snapshot.json | 158 + .../identity/migrations/meta/_journal.json | 20 + apps/server/services/identity/schema.ts | 44 + apps/server/services/identity/service.ts | 226 + apps/server/services/identity/topics.ts | 6 + apps/server/services/job/actions.ts | 123 + apps/server/services/job/controller.ts | 116 + apps/server/services/job/database.ts | 18 + apps/server/services/job/drizzle.config.ts | 12 + apps/server/services/job/encore.service.ts | 13 + apps/server/services/job/interface.ts | 198 + .../migrations/0000_thankful_ben_grimm.sql | 18 + .../migrations/0001_dusty_hannibal_king.sql | 9 + .../job/migrations/0002_futuristic_odin.sql | 1 + .../job/migrations/0003_bitter_spot.sql | 1 + .../job/migrations/0004_low_blackheart.sql | 1 + .../job/migrations/meta/0000_snapshot.json | 130 + .../job/migrations/meta/0001_snapshot.json | 189 + .../job/migrations/meta/0002_snapshot.json | 183 + .../job/migrations/meta/0003_snapshot.json | 191 + .../job/migrations/meta/0004_snapshot.json | 191 + .../job/migrations/meta/_journal.json | 41 + apps/server/services/job/schema.ts | 120 + apps/server/services/job/service.ts | 380 + .../services/job/services/job-extractor.ts | 756 + .../services/job/services/llm-parser.ts | 220 + apps/server/services/job/topics.ts | 58 + .../services/job/utils/url-detection.ts | 129 + apps/server/services/notifications/actions.ts | 376 + .../services/notifications/controller.ts | 30 + .../services/notifications/encore.service.ts | 18 + .../services/notifications/interface.ts | 14 + apps/server/services/notifications/knock.ts | 39 + apps/server/services/notifications/service.ts | 239 + .../services/notifications/workflows.ts | 8 + apps/server/services/resume/actions.ts | 793 + apps/server/services/resume/controller.ts | 558 + apps/server/services/resume/database.ts | 19 + apps/server/services/resume/drizzle.config.ts | 9 + apps/server/services/resume/encore.service.ts | 15 + apps/server/services/resume/interface.ts | 785 + .../migrations/0000_amusing_madame_masque.sql | 146 + .../resume/migrations/0001_spooky_havok.sql | 3 + .../resume/migrations/meta/0000_snapshot.json | 978 + .../resume/migrations/meta/0001_snapshot.json | 976 + .../resume/migrations/meta/_journal.json | 20 + apps/server/services/resume/schema.ts | 516 + apps/server/services/resume/service.ts | 1253 ++ .../resume/services/ai-provider.config.ts | 89 + .../resume/services/bulk-replace.service.ts | 615 + .../resume/services/certification.service.ts | 281 + .../resume/services/education.service.ts | 313 + .../resume/services/experience.service.ts | 321 + .../resume/services/project.service.ts | 355 + .../services/resume-tailoring.service.ts | 468 + .../services/resume/services/skill.service.ts | 450 + .../services/thumbnail-evaluator.service.ts | 187 + apps/server/services/resume/storage.ts | 12 + apps/server/services/resume/topics.ts | 158 + apps/server/services/search/actions.ts | 70 + apps/server/services/search/algolia.ts | 344 + apps/server/services/search/encore.service.ts | 16 + apps/server/services/search/interface.ts | 225 + apps/server/services/utils/admin-auth.ts | 58 + .../server/services/utils/admin-middleware.ts | 41 + apps/server/services/utils/encore.service.ts | 11 + apps/server/services/utils/errors.ts | 93 + apps/server/services/utils/gateway.ts | 50 + apps/server/services/utils/middleware.ts | 17 + apps/server/services/utils/pagination.ts | 23 + apps/server/services/utils/sentry.ts | 277 + apps/server/services/webhooks/controller.ts | 39 + .../services/webhooks/encore.service.ts | 6 + apps/server/services/webhooks/interface.ts | 45 + apps/server/services/webhooks/service.ts | 75 + apps/server/services/webhooks/topics.ts | 19 + apps/server/tsconfig.json | 23 + bun.lock | 3252 --- eslint.config.mjs | 68 + package.json | 162 +- packages/terraform/.gitignore | 76 + packages/terraform/CONTRIBUTING.md | 31 + packages/terraform/LICENSE | 21 + packages/terraform/README.md | 124 + packages/terraform/main.tf | 87 + packages/terraform/modules/server/main.tf | 100 + packages/terraform/modules/server/outputs.tf | 29 + .../server/templates/userdata.sh.tftpl | 233 + .../terraform/modules/server/variables.tf | 103 + packages/terraform/modules/utils/main.tf | 120 + packages/terraform/modules/utils/outputs.tf | 39 + .../modules/utils/templates/userdata.sh.tftpl | 208 + packages/terraform/modules/utils/variables.tf | 123 + packages/terraform/outputs.tf | 75 + packages/terraform/package.json | 15 + packages/terraform/terraform.tfvars.example | 33 + packages/terraform/variables.tf | 163 + pnpm-lock.yaml | 18004 ++++++++++++++++ pnpm-workspace.yaml | 3 + tsconfig.base.json | 15 + turbo.json | 30 + 1106 files changed, 50715 insertions(+), 3460 deletions(-) create mode 100644 apps/admin/.env.example create mode 100644 apps/admin/.gitignore rename CONTRIBUTING.md => apps/admin/CONTRIBUTING.md (100%) rename LICENSE => apps/admin/LICENSE (100%) create mode 100644 apps/admin/README.md create mode 100644 apps/admin/WARP.md create mode 100644 apps/admin/apis/Check User Signed Up.bru create mode 100644 apps/admin/apis/bruno.json create mode 100644 apps/admin/apis/environments/Admin Default ENV.bru create mode 100644 apps/admin/app/(dashboard)/team-management/page.tsx create mode 100644 apps/admin/app/(dashboard)/team-management/tokens/page.tsx create mode 100644 apps/admin/app/api/admin/check-signup/route.ts create mode 100644 apps/admin/app/api/generate/route.ts create mode 100644 apps/admin/app/api/github-app/create-webhook/route.ts create mode 100644 apps/admin/app/api/github-app/install-url/route.ts create mode 100644 apps/admin/app/api/github-app/installations/route.ts create mode 100644 apps/admin/app/api/github-app/repositories/route.ts create mode 100644 apps/admin/app/api/github/webhooks/route.ts create mode 100644 apps/admin/app/api/linear/callback/route.ts create mode 100644 apps/admin/app/api/team/search/route.ts create mode 100644 apps/admin/app/favicon.ico create mode 100644 apps/admin/app/generate-pr/page.tsx create mode 100644 apps/admin/app/globals.css create mode 100644 apps/admin/app/layout.tsx create mode 100644 apps/admin/app/login/page.tsx create mode 100644 apps/admin/app/page.tsx create mode 100644 apps/admin/app/settings/page.tsx create mode 100644 apps/admin/app/waitlist/page.tsx create mode 100644 apps/admin/components.json create mode 100644 apps/admin/components/LogoutButton.tsx create mode 100644 apps/admin/components/MainSidebar.tsx create mode 100644 apps/admin/components/auth/LoginScreen.tsx create mode 100644 apps/admin/components/generate-pr/AuthStateProvider.tsx create mode 100644 apps/admin/components/generate-pr/AuthWrapper.tsx create mode 100644 apps/admin/components/generate-pr/CustomInstructionsDialog.tsx create mode 100644 apps/admin/components/generate-pr/IssueSelect.tsx create mode 100644 apps/admin/components/generate-pr/LinearConnectButton.tsx create mode 100644 apps/admin/components/generate-pr/LinearOAuth.tsx create mode 100644 apps/admin/components/generate-pr/PRDescription.tsx create mode 100644 apps/admin/components/generate-pr/PRGenerator.tsx create mode 100644 apps/admin/components/providers/convex-provider.tsx create mode 100644 apps/admin/components/providers/theme-provider.tsx create mode 100644 apps/admin/components/settings/AddRepositoryDialog.tsx create mode 100644 apps/admin/components/settings/GitHubAppSettings.tsx create mode 100644 apps/admin/components/settings/GitHubConnectButton.tsx create mode 100644 apps/admin/components/settings/RepositoryCard.tsx create mode 100644 apps/admin/components/team-management/AddTeamMemberDialog.tsx create mode 100644 apps/admin/components/team-management/EditTeamMemberDialog.tsx create mode 100644 apps/admin/components/team-management/TeamMemberActions.tsx create mode 100644 apps/admin/components/team-management/ViewTeamMemberDialog.tsx create mode 100644 apps/admin/components/ui/alert-dialog.tsx create mode 100644 apps/admin/components/ui/badge.tsx create mode 100644 apps/admin/components/ui/button.tsx create mode 100644 apps/admin/components/ui/card.tsx create mode 100644 apps/admin/components/ui/checkbox.tsx create mode 100644 apps/admin/components/ui/collapsible.tsx create mode 100644 apps/admin/components/ui/dialog.tsx create mode 100644 apps/admin/components/ui/dropdown-menu.tsx create mode 100644 apps/admin/components/ui/image-upload.tsx create mode 100644 apps/admin/components/ui/input.tsx create mode 100644 apps/admin/components/ui/label.tsx create mode 100644 apps/admin/components/ui/select.tsx rename {components => apps/admin/components}/ui/separator.tsx (100%) create mode 100644 apps/admin/components/ui/sheet.tsx create mode 100644 apps/admin/components/ui/sidebar.tsx create mode 100644 apps/admin/components/ui/skeleton.tsx create mode 100644 apps/admin/components/ui/table.tsx create mode 100644 apps/admin/components/ui/textarea.tsx create mode 100644 apps/admin/components/ui/tooltip.tsx create mode 100644 apps/admin/components/utilities/LaunchCountdown.tsx create mode 100644 apps/admin/components/utilities/ThemeToggleButton.tsx create mode 100644 apps/admin/components/waitlist/ClerkAllowlistStatusColumn.tsx create mode 100644 apps/admin/components/waitlist/WaitlistTable.tsx create mode 100644 apps/admin/convex/README.md create mode 100644 apps/admin/convex/_generated/api.d.ts create mode 100644 apps/admin/convex/_generated/api.js create mode 100644 apps/admin/convex/_generated/dataModel.d.ts create mode 100644 apps/admin/convex/_generated/server.d.ts create mode 100644 apps/admin/convex/_generated/server.js create mode 100644 apps/admin/convex/apiTokens.ts create mode 100644 apps/admin/convex/files.ts create mode 100644 apps/admin/convex/repositories.ts create mode 100644 apps/admin/convex/schema.ts create mode 100644 apps/admin/convex/teamMembers.ts create mode 100644 apps/admin/convex/tsconfig.json create mode 100644 apps/admin/eslint.config.mjs create mode 100644 apps/admin/hooks/use-mobile.tsx create mode 100644 apps/admin/hooks/useLinearAuth.ts create mode 100644 apps/admin/hooks/useLinearClient.ts create mode 100644 apps/admin/hooks/useLinearUser.ts create mode 100644 apps/admin/lib/actions/checkLinearAuth.ts create mode 100644 apps/admin/lib/actions/clerkAllowlistActions.ts create mode 100644 apps/admin/lib/actions/waitlistActions.ts create mode 100644 apps/admin/lib/branch-matching.ts create mode 100644 apps/admin/lib/github-api.ts create mode 100644 apps/admin/lib/github-app.ts create mode 100644 apps/admin/lib/markdown.ts create mode 100644 apps/admin/lib/utils.ts create mode 100644 apps/admin/middleware.ts create mode 100644 apps/admin/next.config.ts create mode 100644 apps/admin/package.json create mode 100644 apps/admin/postcss.config.mjs create mode 100644 apps/admin/public/file.svg create mode 100644 apps/admin/public/globe.svg create mode 100644 apps/admin/public/letraz-mono.png create mode 100644 apps/admin/public/next.svg create mode 100644 apps/admin/public/pfp1.png create mode 100644 apps/admin/public/pfp2.png create mode 100644 apps/admin/public/vercel.svg create mode 100644 apps/admin/public/window.svg create mode 100644 apps/admin/tailwind.config.ts create mode 100644 apps/admin/tsconfig.json create mode 100644 apps/admin/types/teamMember.ts rename .env.example => apps/client/.env.example (100%) rename .eslintrc.json => apps/client/.eslintrc.json (100%) create mode 100644 apps/client/.gitignore create mode 100644 apps/client/CONTRIBUTING.md create mode 100644 apps/client/LICENSE rename README.md => apps/client/README.md (100%) rename {__tests__ => apps/client/__tests__}/helpers/api-mocks.ts (100%) rename {__tests__ => apps/client/__tests__}/helpers/index.ts (100%) rename {__tests__ => apps/client/__tests__}/helpers/mock-factories.ts (100%) rename {__tests__ => apps/client/__tests__}/helpers/test-helpers.ts (100%) rename {__tests__ => apps/client/__tests__}/helpers/test-utilities.test.tsx (100%) rename {__tests__ => apps/client/__tests__}/helpers/test-utils.tsx (100%) rename {__tests__ => apps/client/__tests__}/helpers/utilities-core.test.ts (100%) rename {__tests__ => apps/client/__tests__}/lib-utils.test.ts (100%) rename {__tests__ => apps/client/__tests__}/react-setup.test.tsx (100%) rename {__tests__ => apps/client/__tests__}/setup.test.ts (100%) rename {app => apps/client/app}/(auth)/layout.tsx (100%) rename {app => apps/client/app}/(auth)/signin/[[...sign-in]]/SignInPage.title.tsx (100%) rename {app => apps/client/app}/(auth)/signin/[[...sign-in]]/page.tsx (100%) rename {app => apps/client/app}/(auth)/signup/[[...sign-up]]/SignUp.content.tsx (100%) rename {app => apps/client/app}/(auth)/signup/[[...sign-up]]/SignUpPage.title.tsx (100%) rename {app => apps/client/app}/(auth)/signup/[[...sign-up]]/page.tsx (100%) rename {app => apps/client/app}/(auth)/sso-callback/page.tsx (100%) rename {app => apps/client/app}/(website)/(legal)/layout.tsx (100%) rename {app => apps/client/app}/(website)/(legal)/privacy/page.tsx (100%) rename {app => apps/client/app}/(website)/(legal)/terms/page.tsx (100%) rename {app => apps/client/app}/(website)/blog/[slug]/page.tsx (100%) rename {app => apps/client/app}/(website)/blog/layout.tsx (100%) rename {app => apps/client/app}/(website)/blog/page.tsx (100%) rename {app => apps/client/app}/(website)/changes/PostCard.tsx (100%) rename {app => apps/client/app}/(website)/changes/PostsList.tsx (100%) rename {app => apps/client/app}/(website)/changes/page.heading.tsx (100%) rename {app => apps/client/app}/(website)/changes/page.tsx (100%) rename {app => apps/client/app}/(website)/layout.tsx (100%) rename {app => apps/client/app}/(website)/page.canvas.tsx (100%) rename {app => apps/client/app}/(website)/page.faq.tsx (100%) rename {app => apps/client/app}/(website)/page.features.tsx (100%) rename {app => apps/client/app}/(website)/page.heroHeader.tsx (100%) rename {app => apps/client/app}/(website)/page.logo.tsx (100%) rename {app => apps/client/app}/(website)/page.process.tsx (100%) rename {app => apps/client/app}/(website)/page.tsx (100%) rename {app => apps/client/app}/(website)/page.video.tsx (100%) rename {app => apps/client/app}/(website)/story/page.content.tsx (100%) rename {app => apps/client/app}/(website)/story/page.heading.tsx (100%) rename {app => apps/client/app}/(website)/story/page.tsx (100%) rename {app => apps/client/app}/admin/resumes/[resumeId]/page.tsx (100%) rename {app => apps/client/app}/api/linkedin/parse/route.ts (100%) rename {app => apps/client/app}/api/resume/parse/route.ts (100%) rename {app => apps/client/app}/api/rize/status/route.ts (100%) rename {app => apps/client/app}/api/update/new/route.ts (100%) rename {app => apps/client/app}/app/craft/resumes/[resumeId]/loading.tsx (100%) rename {app => apps/client/app}/app/craft/resumes/[resumeId]/not-found.tsx (100%) rename {app => apps/client/app}/app/craft/resumes/[resumeId]/page.tsx (100%) rename {app => apps/client/app}/app/craft/resumes/[resumeId]/processing.client.tsx (100%) rename {app => apps/client/app}/app/layout.tsx (100%) rename {app => apps/client/app}/app/not-found.tsx (100%) rename {app => apps/client/app}/app/onboarding/BrainAnimation.client.tsx (100%) rename {app => apps/client/app}/app/onboarding/error.tsx (100%) rename {app => apps/client/app}/app/onboarding/page.tsx (100%) rename {app => apps/client/app}/app/onboarding/types.ts (100%) rename {app => apps/client/app}/app/page.tsx (100%) rename {app => apps/client/app}/docs/[slug]/page.tsx (100%) rename {app => apps/client/app}/docs/components/code-block.tsx (100%) rename {app => apps/client/app}/docs/components/docs-navigation.tsx (100%) rename {app => apps/client/app}/docs/components/docs-search-button.tsx (100%) rename {app => apps/client/app}/docs/components/hierarchical-page-item.tsx (100%) rename {app => apps/client/app}/docs/components/table-of-contents.tsx (100%) rename {app => apps/client/app}/docs/layout.tsx (100%) rename {app => apps/client/app}/docs/page.tsx (100%) rename {app => apps/client/app}/favicon.ico (100%) rename {app => apps/client/app}/fonts/charter/charter_bold.woff2 (100%) rename {app => apps/client/app}/fonts/charter/charter_regular.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-Black.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-BlackItalic.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-Bold.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-BoldItalic.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-ExtraBold.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-ExtraBoldItalic.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-Hairline.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-HairlineItalic.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-Light.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-LightItalic.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-Medium.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-MediumItalic.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-Regular.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-RegularItalic.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-Thin.woff2 (100%) rename {app => apps/client/app}/fonts/modelica/BwModelicaSS01-ThinItalic.woff2 (100%) rename {app => apps/client/app}/global-error.tsx (100%) rename {app => apps/client/app}/globals.css (100%) rename {app => apps/client/app}/layout.tsx (100%) rename {app => apps/client/app}/not-found.tsx (100%) rename {app => apps/client/app}/opengraph-image.png (100%) rename {app => apps/client/app}/robots.ts (100%) rename {app => apps/client/app}/signup/sso-callback/page.tsx (100%) rename {app => apps/client/app}/sitemap.ts (97%) rename {app => apps/client/app}/twitter-image.png (100%) rename components.json => apps/client/components.json (100%) rename {components => apps/client/components}/AppSidebar.tsx (100%) rename {components => apps/client/components}/DocsSearchDialog.tsx (100%) rename {components => apps/client/components}/MobileNavbar.tsx (100%) rename {components => apps/client/components}/NewResumeInput.tsx (100%) rename {components => apps/client/components}/UserSupport.tsx (100%) rename {components => apps/client/components}/UserSupportPanel.tsx (100%) rename {components => apps/client/components}/Waitlist.tsx (100%) rename {components => apps/client/components}/WebsiteFooter.tsx (100%) rename {components => apps/client/components}/WebsiteNavBar.tsx (100%) rename {components => apps/client/components}/__tests__/AppSidebar.test.tsx (100%) rename {components => apps/client/components}/__tests__/NewResumeInput.test.tsx (100%) rename {components => apps/client/components}/__tests__/Waitlist.test.tsx (100%) rename {components => apps/client/components}/__tests__/WebsiteNavBar.test.tsx (100%) rename {components => apps/client/components}/analytics/AcquisitionTracker.tsx (100%) rename {components => apps/client/components}/animations/DefaultFade.ts (100%) rename {components => apps/client/components}/animations/DefaultSlide.ts (100%) rename {components => apps/client/components}/animations/ParticlesBurst.tsx (100%) rename {components => apps/client/components}/animations/StaggeredText.tsx (100%) rename {components => apps/client/components}/animations/TextAnimations.tsx (100%) rename {components => apps/client/components}/animations/__tests__/TextAnimations.test.tsx (100%) rename {components => apps/client/components}/auth/EmailPasswordSignInForm.tsx (100%) rename {components => apps/client/components}/auth/EmailPasswordSignUpForm.tsx (100%) rename {components => apps/client/components}/auth/GithubAuthButton.tsx (100%) rename {components => apps/client/components}/auth/GoogleAuthButton.tsx (100%) rename {components => apps/client/components}/blog/BlogCategories.tsx (100%) rename {components => apps/client/components}/blog/BlogPostCard.tsx (100%) rename {components => apps/client/components}/blog/BlogPostContent.tsx (100%) rename {components => apps/client/components}/blog/BlogPostMeta.tsx (100%) rename {components => apps/client/components}/clientContainers/AppLayoutContainer.tsx (100%) rename {components => apps/client/components}/clientContainers/AppSidebarContainer.tsx (100%) rename {components => apps/client/components}/clientContainers/__tests__/AppLayoutContainer.test.tsx (100%) rename {components => apps/client/components}/dashboard/BaseResumeCard.tsx (100%) rename {components => apps/client/components}/dashboard/DashboardResumesGrid.tsx (100%) rename {components => apps/client/components}/dashboard/DashboardSearchContainer.tsx (100%) rename {components => apps/client/components}/dashboard/DashboardSearchInput.tsx (100%) rename {components => apps/client/components}/dashboard/ResumeCard.tsx (100%) rename {components => apps/client/components}/dashboard/ResumeCardActionsBar.tsx (100%) rename {components => apps/client/components}/dashboard/ResumeSearch.tsx (100%) rename {components => apps/client/components}/mobile/MobilePanelSheet.tsx (97%) rename {components => apps/client/components}/mobile/MobilePanels.tsx (100%) rename {components => apps/client/components}/notifications/NOTIFICATION_MAPPING.ts (100%) rename {components => apps/client/components}/notifications/NotificationBell.tsx (100%) rename {components => apps/client/components}/notifications/NotificationFeed.tsx (100%) rename {components => apps/client/components}/onboarding/About.tsx (100%) rename {components => apps/client/components}/onboarding/AboutDescription.tsx (100%) rename {components => apps/client/components}/onboarding/AboutNextControl.client.tsx (100%) rename {components => apps/client/components}/onboarding/BaseResume.tsx (100%) rename {components => apps/client/components}/onboarding/BaseResumeProvider.tsx (100%) rename {components => apps/client/components}/onboarding/Education.tsx (100%) rename {components => apps/client/components}/onboarding/EducationForm.tsx (100%) rename {components => apps/client/components}/onboarding/Experience.tsx (100%) rename {components => apps/client/components}/onboarding/ExperienceForm.tsx (100%) rename {components => apps/client/components}/onboarding/OnboardingCompletionButton.tsx (100%) rename {components => apps/client/components}/onboarding/OnboardingFlowControl.tsx (100%) rename {components => apps/client/components}/onboarding/OnboardingFormInput.tsx (100%) rename {components => apps/client/components}/onboarding/OnboardingStepTracker.client.tsx (100%) rename {components => apps/client/components}/onboarding/OnboardingWelcome.tsx (100%) rename {components => apps/client/components}/onboarding/ParseResume.tsx (100%) rename {components => apps/client/components}/onboarding/PersonalDetails.tsx (100%) rename {components => apps/client/components}/onboarding/PersonalDetailsForm.tsx (100%) rename {components => apps/client/components}/onboarding/Welcome.tsx (100%) rename {components => apps/client/components}/onboarding/__tests__/About.test.tsx (100%) rename {components => apps/client/components}/onboarding/__tests__/BaseResume.test.tsx (100%) rename {components => apps/client/components}/onboarding/__tests__/Education.test.tsx (100%) rename {components => apps/client/components}/onboarding/__tests__/Experience.test.tsx (100%) rename {components => apps/client/components}/onboarding/__tests__/OnboardingFormInput.test.tsx (100%) rename {components => apps/client/components}/onboarding/__tests__/PersonalDetails.test.tsx (100%) rename {components => apps/client/components}/onboarding/__tests__/Welcome.test.tsx (100%) rename {components => apps/client/components}/onboarding/useRizeBackfill.ts (100%) rename {components => apps/client/components}/providers/ApiProvider.tsx (100%) rename {components => apps/client/components}/providers/KnockProvider.tsx (100%) rename {components => apps/client/components}/providers/MobilePanelProvider.tsx (93%) rename {components => apps/client/components}/providers/PosthogProvider.tsx (100%) rename {components => apps/client/components}/providers/SentryUserProvider.tsx (100%) rename {components => apps/client/components}/providers/SidebarProvider.tsx (100%) rename {components => apps/client/components}/providers/SmoothScrollProvider.tsx (100%) rename {components => apps/client/components}/resume/DesktopResumeScaler.tsx (100%) rename {components => apps/client/components}/resume/JobDetailsModal.tsx (100%) rename {components => apps/client/components}/resume/ReorderableSections.tsx (100%) rename {components => apps/client/components}/resume/ResumeActionsToolbar.tsx (100%) rename {components => apps/client/components}/resume/ResumeEditor.tsx (100%) rename {components => apps/client/components}/resume/ResumeRevealOverlay.tsx (100%) rename {components => apps/client/components}/resume/ResumeView.tsx (100%) rename {components => apps/client/components}/resume/ResumeViewer.tsx (100%) rename {components => apps/client/components}/resume/__tests__/ReorderableSections.test.tsx (100%) rename {components => apps/client/components}/resume/__tests__/ResumeEditor.test.tsx (100%) rename {components => apps/client/components}/resume/__tests__/ResumeView.test.tsx (100%) rename {components => apps/client/components}/resume/__tests__/ResumeViewer.test.tsx (100%) rename {components => apps/client/components}/resume/contexts/ResumeHighlightContext.tsx (98%) rename {components => apps/client/components}/resume/controllers/CertificationController.tsx (100%) rename {components => apps/client/components}/resume/controllers/EducationController.tsx (100%) rename {components => apps/client/components}/resume/controllers/ExperienceController.tsx (100%) rename {components => apps/client/components}/resume/controllers/PersonalInfoController.tsx (100%) rename {components => apps/client/components}/resume/controllers/ProjectController.tsx (100%) rename {components => apps/client/components}/resume/controllers/SkillsController.tsx (100%) rename {components => apps/client/components}/resume/editors/CertificationEditor.tsx (100%) rename {components => apps/client/components}/resume/editors/EducationEditor.tsx (100%) rename {components => apps/client/components}/resume/editors/ExperienceEditor.tsx (100%) rename {components => apps/client/components}/resume/editors/PersonalDetailsEditor.tsx (100%) rename {components => apps/client/components}/resume/editors/ProjectEditor.tsx (100%) rename {components => apps/client/components}/resume/editors/SkillsEditor.tsx (100%) rename {components => apps/client/components}/resume/editors/__tests__/EducationEditor.test.tsx (100%) rename {components => apps/client/components}/resume/editors/__tests__/ExperienceEditor.test.tsx (100%) rename {components => apps/client/components}/resume/editors/__tests__/PersonalDetailsEditor.test.tsx (100%) rename {components => apps/client/components}/resume/editors/__tests__/SkillsEditor.test.tsx (100%) rename {components => apps/client/components}/resume/editors/shared/CountrySelect.tsx (100%) rename {components => apps/client/components}/resume/editors/shared/DateRangeFields.tsx (98%) rename {components => apps/client/components}/resume/editors/shared/EditorHeader.tsx (100%) rename {components => apps/client/components}/resume/editors/shared/FormButtons.tsx (100%) rename {components => apps/client/components}/resume/editors/shared/ItemCard.tsx (100%) rename {components => apps/client/components}/resume/editors/shared/ProficiencySlider.tsx (100%) rename {components => apps/client/components}/resume/editors/shared/RichTextFormField.tsx (100%) rename {components => apps/client/components}/resume/editors/shared/TextFormField.tsx (93%) rename {components => apps/client/components}/resume/hooks/useAutoFocus.ts (98%) rename {components => apps/client/components}/resume/hooks/useDidTransition.ts (100%) rename {components => apps/client/components}/resume/hooks/useIsMobile.ts (100%) rename {components => apps/client/components}/resume/hooks/useRevealOnReady.ts (100%) rename {components => apps/client/components}/resume/icons/CalendarPDF.tsx (100%) rename {components => apps/client/components}/resume/icons/GlobePDF.tsx (100%) rename {components => apps/client/components}/resume/icons/MailPDF.tsx (100%) rename {components => apps/client/components}/resume/icons/MapPinPDF.tsx (100%) rename {components => apps/client/components}/resume/icons/PhonePDF.tsx (100%) rename {components => apps/client/components}/resume/mobile/MobileBottomSheet.tsx (100%) rename {components => apps/client/components}/resume/mobile/MobileSectionTabs.tsx (100%) rename {components => apps/client/components}/resume/mobile/ResumeViewMobile.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/DefaultTheme.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/__tests__/DefaultTheme.test.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/fontawesome.ts (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/fonts.ts (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/index.html (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/CertificationSection.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/CertificationTitle.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/EducationSection.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/EducationTitle.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/ExperienceSection.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/ExperienceTitle.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/PersonalInfoSection.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/ProjectsSection.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/ProjectsTitle.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/SkillsSection.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/SkillsTitle.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/__tests__/EducationSection.test.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/__tests__/ExperienceSection.test.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/sections/__tests__/PersonalInfoSection.test.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/shared/Components.tsx (100%) rename {components => apps/client/components}/resume/themes/DEFAULT_THEME/styles.css (100%) rename {components => apps/client/components}/resume/themes/ThemeFactory.tsx (100%) rename {components => apps/client/components}/resume/themes/__tests__/ThemeFactory.test.tsx (100%) rename {components => apps/client/components}/richTextEditor/__tests__/RichTextEditor.test.tsx (100%) rename {components => apps/client/components}/richTextEditor/components/__tests__/toolbar.test.tsx (100%) rename {components => apps/client/components}/richTextEditor/components/bubble-menu/link-bubble-menu.tsx (100%) rename {components => apps/client/components}/richTextEditor/components/link/link-edit-block.tsx (100%) rename {components => apps/client/components}/richTextEditor/components/link/link-edit-popover.tsx (100%) rename {components => apps/client/components}/richTextEditor/components/link/link-popover-block.tsx (100%) rename {components => apps/client/components}/richTextEditor/components/measured-container.tsx (100%) rename {components => apps/client/components}/richTextEditor/components/shortcut-key.tsx (100%) rename {components => apps/client/components}/richTextEditor/components/toolbar-button.tsx (100%) rename {components => apps/client/components}/richTextEditor/components/toolbar-section.tsx (100%) rename {components => apps/client/components}/richTextEditor/components/toolbar.tsx (100%) rename {components => apps/client/components}/richTextEditor/extensions/link/index.ts (96%) rename {components => apps/client/components}/richTextEditor/hooks/use-container-size.ts (95%) rename {components => apps/client/components}/richTextEditor/hooks/use-minimal-tiptap.ts (100%) rename {components => apps/client/components}/richTextEditor/hooks/use-theme.ts (100%) rename {components => apps/client/components}/richTextEditor/hooks/use-throttle.ts (94%) rename {components => apps/client/components}/richTextEditor/index.tsx (100%) rename {components => apps/client/components}/richTextEditor/styles/index.css (100%) rename {components => apps/client/components}/richTextEditor/styles/partials/lists.css (100%) rename {components => apps/client/components}/richTextEditor/styles/partials/placeholder.css (100%) rename {components => apps/client/components}/richTextEditor/types.ts (100%) rename {components => apps/client/components}/richTextEditor/utils.ts (100%) rename {components => apps/client/components}/skeletons/CertificationEditorSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/DashboardSearchSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/EducationEditorSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/ExperienceEditorSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/PersonalDetailsEditorSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/ProjectEditorSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/ResumeCardSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/ResumeEditorSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/ResumeViewerSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/SkillsEditorSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/shared/EditorHeaderSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/shared/EditorListSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/shared/FormSkeleton.tsx (100%) rename {components => apps/client/components}/skeletons/shared/ItemCardSkeleton.tsx (100%) rename {components => apps/client/components}/ui/CornerRibbon.tsx (100%) rename {components => apps/client/components}/ui/__tests__/button.test.tsx (100%) rename {components => apps/client/components}/ui/accordion.tsx (100%) rename {components => apps/client/components}/ui/badge.tsx (100%) rename {components => apps/client/components}/ui/button-group.tsx (100%) rename {components => apps/client/components}/ui/button.tsx (100%) rename {components => apps/client/components}/ui/calendar.tsx (99%) rename {components => apps/client/components}/ui/card.tsx (100%) rename {components => apps/client/components}/ui/category-autocomplete.tsx (99%) rename {components => apps/client/components}/ui/checkbox.tsx (100%) rename {components => apps/client/components}/ui/collapsible.tsx (100%) rename {components => apps/client/components}/ui/command.tsx (98%) rename {components => apps/client/components}/ui/country-dropdown.tsx (100%) rename {components => apps/client/components}/ui/date-picker.tsx (100%) rename {components => apps/client/components}/ui/dialog.tsx (100%) rename {components => apps/client/components}/ui/dropdown-menu.tsx (100%) rename {components => apps/client/components}/ui/empty.tsx (100%) rename {components => apps/client/components}/ui/expandable-tabs.tsx (100%) rename {components => apps/client/components}/ui/flickering-grid.tsx (100%) rename {components => apps/client/components}/ui/form.tsx (100%) rename {components => apps/client/components}/ui/highlight.tsx (100%) rename {components => apps/client/components}/ui/hover-card.tsx (100%) rename {components => apps/client/components}/ui/input-otp.tsx (100%) rename {components => apps/client/components}/ui/input.tsx (100%) rename {components => apps/client/components}/ui/label.tsx (100%) rename {components => apps/client/components}/ui/loading-dots.tsx (100%) rename {components => apps/client/components}/ui/menu.tsx (100%) rename {components => apps/client/components}/ui/pop-confirm.tsx (100%) rename {components => apps/client/components}/ui/popover.tsx (100%) rename {components => apps/client/components}/ui/safari-mockup.tsx (100%) rename {components => apps/client/components}/ui/scroll-area.tsx (100%) rename {components => apps/client/components}/ui/scroll-mask.tsx (100%) rename {components => apps/client/components}/ui/select.tsx (100%) create mode 100644 apps/client/components/ui/separator.tsx rename {components => apps/client/components}/ui/sheet.tsx (100%) rename {components => apps/client/components}/ui/skill-autocomplete.tsx (99%) rename {components => apps/client/components}/ui/slider.tsx (100%) rename {components => apps/client/components}/ui/sonner.tsx (100%) rename {components => apps/client/components}/ui/switch.tsx (100%) rename {components => apps/client/components}/ui/tabs.tsx (100%) rename {components => apps/client/components}/ui/textarea.tsx (100%) rename {components => apps/client/components}/ui/toggle.tsx (100%) rename {components => apps/client/components}/ui/tooltip.tsx (100%) rename {components => apps/client/components}/utilities/AiLoading.tsx (100%) rename {components => apps/client/components}/utilities/ErrorView.tsx (100%) rename {components => apps/client/components}/utilities/ResumeAiLoading.tsx (100%) rename {components => apps/client/components}/utilities/__tests__/AiLoading.test.tsx (100%) rename {components => apps/client/components}/utilities/__tests__/ErrorView.test.tsx (100%) rename config.ts => apps/client/config.ts (100%) rename constants.ts => apps/client/constants.ts (100%) rename {emails => apps/client/emails}/account-deleted.tsx (100%) rename {emails => apps/client/emails}/follow-up-access.tsx (100%) rename {emails => apps/client/emails}/welcome-to-beta.tsx (100%) rename {emails => apps/client/emails}/welcome.tsx (100%) rename env.ts => apps/client/env.ts (100%) rename {hooks => apps/client/hooks}/useDOMMounted.ts (100%) rename instrumentation-client.ts => apps/client/instrumentation-client.ts (100%) rename instrumentation.ts => apps/client/instrumentation.ts (100%) rename {lib => apps/client/lib}/__tests__/utils.test.ts (100%) rename {lib => apps/client/lib}/analytics/events.ts (100%) rename {lib => apps/client/lib}/analytics/index.ts (100%) rename {lib => apps/client/lib}/basehub.ts (100%) rename {lib => apps/client/lib}/certification/actions.ts (100%) rename {lib => apps/client/lib}/certification/keys.ts (100%) rename {lib => apps/client/lib}/certification/mutations.ts (100%) rename {lib => apps/client/lib}/certification/queries.ts (100%) rename {lib => apps/client/lib}/certification/types.ts (100%) rename {lib => apps/client/lib}/config/__tests__/api-client.test.ts (100%) rename {lib => apps/client/lib}/config/api-client.ts (100%) rename {lib => apps/client/lib}/config/api-types.ts (100%) rename {lib => apps/client/lib}/constants.ts (100%) rename {lib => apps/client/lib}/education/__tests__/actions.test.ts (100%) rename {lib => apps/client/lib}/education/__tests__/mutations.test.ts (100%) rename {lib => apps/client/lib}/education/__tests__/queries.test.ts (100%) rename {lib => apps/client/lib}/education/actions.ts (100%) rename {lib => apps/client/lib}/education/keys.ts (100%) rename {lib => apps/client/lib}/education/mutations.ts (100%) rename {lib => apps/client/lib}/education/queries.ts (100%) rename {lib => apps/client/lib}/education/types.ts (100%) rename {lib => apps/client/lib}/experience/__tests__/actions.test.ts (100%) rename {lib => apps/client/lib}/experience/__tests__/mutations.test.ts (100%) rename {lib => apps/client/lib}/experience/__tests__/queries.test.ts (100%) rename {lib => apps/client/lib}/experience/actions.ts (100%) rename {lib => apps/client/lib}/experience/keys.ts (100%) rename {lib => apps/client/lib}/experience/mutations.ts (100%) rename {lib => apps/client/lib}/experience/queries.ts (100%) rename {lib => apps/client/lib}/experience/types.ts (100%) rename {lib => apps/client/lib}/feedback/actions.ts (100%) rename {lib => apps/client/lib}/feedback/mutations.ts (100%) rename {lib => apps/client/lib}/feedback/types.ts (100%) rename {lib => apps/client/lib}/job/actions.ts (100%) rename {lib => apps/client/lib}/job/types.ts (100%) rename {lib => apps/client/lib}/linkedin/actions.ts (100%) rename {lib => apps/client/lib}/linkedin/parser.ts (100%) rename {lib => apps/client/lib}/linkedin/types.ts (100%) rename {lib => apps/client/lib}/misc/__tests__/error-handler.test.ts (100%) rename {lib => apps/client/lib}/misc/error-handler.ts (100%) rename {lib => apps/client/lib}/onboarding/__tests__/actions.test.ts (100%) rename {lib => apps/client/lib}/onboarding/actions.ts (100%) rename {lib => apps/client/lib}/onboarding/globals.d.ts (100%) rename {lib => apps/client/lib}/onboarding/hooks.ts (100%) rename {lib => apps/client/lib}/onboarding/types.ts (100%) rename {lib => apps/client/lib}/posts.method.ts (100%) rename {lib => apps/client/lib}/project/actions.ts (100%) rename {lib => apps/client/lib}/project/keys.ts (100%) rename {lib => apps/client/lib}/project/mutations.ts (100%) rename {lib => apps/client/lib}/project/queries.ts (100%) rename {lib => apps/client/lib}/project/types.ts (100%) rename {lib => apps/client/lib}/resume/__tests__/actions.test.ts (100%) rename {lib => apps/client/lib}/resume/__tests__/mutations.test.ts (100%) rename {lib => apps/client/lib}/resume/__tests__/queries.test.ts (100%) rename {lib => apps/client/lib}/resume/accept.ts (100%) rename {lib => apps/client/lib}/resume/actions.ts (100%) rename {lib => apps/client/lib}/resume/key.ts (100%) rename {lib => apps/client/lib}/resume/mutations.ts (100%) rename {lib => apps/client/lib}/resume/parser.ts (100%) rename {lib => apps/client/lib}/resume/queries.ts (100%) rename {lib => apps/client/lib}/resume/types.ts (100%) rename {lib => apps/client/lib}/resume/ui-actions.ts (100%) rename {lib => apps/client/lib}/rize/actions.ts (100%) rename {lib => apps/client/lib}/rize/parser.ts (100%) rename {lib => apps/client/lib}/rize/rize.ts (100%) rename {lib => apps/client/lib}/rize/types.ts (100%) rename {lib => apps/client/lib}/skill/__tests__/actions.test.ts (100%) rename {lib => apps/client/lib}/skill/__tests__/mutations.test.ts (100%) rename {lib => apps/client/lib}/skill/__tests__/queries.test.ts (100%) rename {lib => apps/client/lib}/skill/actions.ts (100%) rename {lib => apps/client/lib}/skill/hooks.ts (100%) rename {lib => apps/client/lib}/skill/mutations.ts (100%) rename {lib => apps/client/lib}/skill/queries.ts (100%) rename {lib => apps/client/lib}/skill/types.ts (100%) rename {lib => apps/client/lib}/user-info/__tests__/actions.test.ts (100%) rename {lib => apps/client/lib}/user-info/__tests__/mutations.test.ts (100%) rename {lib => apps/client/lib}/user-info/__tests__/queries.test.ts (100%) rename {lib => apps/client/lib}/user-info/actions.ts (100%) rename {lib => apps/client/lib}/user-info/keys.ts (100%) rename {lib => apps/client/lib}/user-info/mutations.ts (100%) rename {lib => apps/client/lib}/user-info/queries.ts (100%) rename {lib => apps/client/lib}/user-info/types.ts (100%) rename {lib => apps/client/lib}/user/metadata.ts (100%) rename {lib => apps/client/lib}/utils.ts (100%) rename {lib => apps/client/lib}/waitlist/__tests__/actions.test.ts (100%) rename {lib => apps/client/lib}/waitlist/actions.ts (100%) rename {lib => apps/client/lib}/waitlist/types.ts (100%) rename middleware.ts => apps/client/middleware.ts (100%) rename next.config.ts => apps/client/next.config.ts (100%) create mode 100644 apps/client/package.json rename postcss.config.mjs => apps/client/postcss.config.mjs (100%) rename {public => apps/client/public}/banner.png (100%) rename {public => apps/client/public}/brain-pulse.webm (100%) rename {public => apps/client/public}/brain.webp (100%) rename {public => apps/client/public}/download-and-apply.av1.webm (100%) rename {public => apps/client/public}/download-and-apply.mp4 (100%) rename {public => apps/client/public}/download-and-apply.webm (100%) rename {public => apps/client/public}/error_banner.svg (100%) rename {public => apps/client/public}/find-a-job.av1.webm (100%) rename {public => apps/client/public}/find-a-job.webm (100%) rename {public => apps/client/public}/footer-wordmark.svg (100%) rename {public => apps/client/public}/infosys-logo.svg (100%) rename {public => apps/client/public}/landing-bg.avif (100%) rename {public => apps/client/public}/landing-bg.webp (100%) rename {public => apps/client/public}/landing-sequence.webm (100%) rename {public => apps/client/public}/landing-sequence/frame000.webp (100%) rename {public => apps/client/public}/landing-sequence/frame001.webp (100%) rename {public => apps/client/public}/landing-sequence/frame002.webp (100%) rename {public => apps/client/public}/landing-sequence/frame003.webp (100%) rename {public => apps/client/public}/landing-sequence/frame004.webp (100%) rename {public => apps/client/public}/landing-sequence/frame005.webp (100%) rename {public => apps/client/public}/landing-sequence/frame006.webp (100%) rename {public => apps/client/public}/landing-sequence/frame007.webp (100%) rename {public => apps/client/public}/landing-sequence/frame008.webp (100%) rename {public => apps/client/public}/landing-sequence/frame009.webp (100%) rename {public => apps/client/public}/landing-sequence/frame010.webp (100%) rename {public => apps/client/public}/landing-sequence/frame011.webp (100%) rename {public => apps/client/public}/landing-sequence/frame012.webp (100%) rename {public => apps/client/public}/landing-sequence/frame013.webp (100%) rename {public => apps/client/public}/landing-sequence/frame014.webp (100%) rename {public => apps/client/public}/landing-sequence/frame015.webp (100%) rename {public => apps/client/public}/landing-sequence/frame016.webp (100%) rename {public => apps/client/public}/landing-sequence/frame017.webp (100%) rename {public => apps/client/public}/landing-sequence/frame018.webp (100%) rename {public => apps/client/public}/landing-sequence/frame019.webp (100%) rename {public => apps/client/public}/landing-sequence/frame020.webp (100%) rename {public => apps/client/public}/landing-sequence/frame021.webp (100%) rename {public => apps/client/public}/landing-sequence/frame022.webp (100%) rename {public => apps/client/public}/landing-sequence/frame023.webp (100%) rename {public => apps/client/public}/landing-sequence/frame024.webp (100%) rename {public => apps/client/public}/landing-sequence/frame025.webp (100%) rename {public => apps/client/public}/landing-sequence/frame026.webp (100%) rename {public => apps/client/public}/landing-sequence/frame027.webp (100%) rename {public => apps/client/public}/landing-sequence/frame028.webp (100%) rename {public => apps/client/public}/landing-sequence/frame029.webp (100%) rename {public => apps/client/public}/landing-sequence/frame030.webp (100%) rename {public => apps/client/public}/landing-sequence/frame031.webp (100%) rename {public => apps/client/public}/landing-sequence/frame032.webp (100%) rename {public => apps/client/public}/landing-sequence/frame033.webp (100%) rename {public => apps/client/public}/landing-sequence/frame034.webp (100%) rename {public => apps/client/public}/landing-sequence/frame035.webp (100%) rename {public => apps/client/public}/landing-sequence/frame036.webp (100%) rename {public => apps/client/public}/landing-sequence/frame037.webp (100%) rename {public => apps/client/public}/landing-sequence/frame038.webp (100%) rename {public => apps/client/public}/landing-sequence/frame039.webp (100%) rename {public => apps/client/public}/landing-sequence/frame040.webp (100%) rename {public => apps/client/public}/landing-sequence/frame041.webp (100%) rename {public => apps/client/public}/landing-sequence/frame042.webp (100%) rename {public => apps/client/public}/landing-sequence/frame043.webp (100%) rename {public => apps/client/public}/landing-sequence/frame044.webp (100%) rename {public => apps/client/public}/landing-sequence/frame045.webp (100%) rename {public => apps/client/public}/landing-sequence/frame046.webp (100%) rename {public => apps/client/public}/landing-sequence/frame047.webp (100%) rename {public => apps/client/public}/landing-sequence/frame048.webp (100%) rename {public => apps/client/public}/landing-sequence/frame049.webp (100%) rename {public => apps/client/public}/landing-sequence/frame050.webp (100%) rename {public => apps/client/public}/landing-sequence/frame051.webp (100%) rename {public => apps/client/public}/landing-sequence/frame052.webp (100%) rename {public => apps/client/public}/landing-sequence/frame053.webp (100%) rename {public => apps/client/public}/landing-sequence/frame054.webp (100%) rename {public => apps/client/public}/landing-sequence/frame055.webp (100%) rename {public => apps/client/public}/landing-sequence/frame056.webp (100%) rename {public => apps/client/public}/landing-sequence/frame057.webp (100%) rename {public => apps/client/public}/landing-sequence/frame058.webp (100%) rename {public => apps/client/public}/landing-sequence/frame059.webp (100%) rename {public => apps/client/public}/landing-sequence/frame060.webp (100%) rename {public => apps/client/public}/landing-sequence/frame061.webp (100%) rename {public => apps/client/public}/landing-sequence/frame062.webp (100%) rename {public => apps/client/public}/landing-sequence/frame063.webp (100%) rename {public => apps/client/public}/landing-sequence/frame064.webp (100%) rename {public => apps/client/public}/landing-sequence/frame065.webp (100%) rename {public => apps/client/public}/landing-sequence/frame066.webp (100%) rename {public => apps/client/public}/landing-sequence/frame067.webp (100%) rename {public => apps/client/public}/landing-sequence/frame068.webp (100%) rename {public => apps/client/public}/landing-sequence/frame069.webp (100%) rename {public => apps/client/public}/landing-sequence/frame070.webp (100%) rename {public => apps/client/public}/landing-sequence/frame071.webp (100%) rename {public => apps/client/public}/landing-sequence/frame072.webp (100%) rename {public => apps/client/public}/landing-sequence/frame073.webp (100%) rename {public => apps/client/public}/landing-sequence/frame074.webp (100%) rename {public => apps/client/public}/landing-sequence/frame075.webp (100%) rename {public => apps/client/public}/landing-sequence/frame076.webp (100%) rename {public => apps/client/public}/landing-sequence/frame077.webp (100%) rename {public => apps/client/public}/landing-sequence/frame078.webp (100%) rename {public => apps/client/public}/landing-sequence/frame079.webp (100%) rename {public => apps/client/public}/landing-sequence/frame080.webp (100%) rename {public => apps/client/public}/landing-sequence/frame081.webp (100%) rename {public => apps/client/public}/landing-sequence/frame082.webp (100%) rename {public => apps/client/public}/landing-sequence/frame083.webp (100%) rename {public => apps/client/public}/landing-sequence/frame084.webp (100%) rename {public => apps/client/public}/landing-sequence/frame085.webp (100%) rename {public => apps/client/public}/landing-sequence/frame086.webp (100%) rename {public => apps/client/public}/landing-sequence/frame087.webp (100%) rename {public => apps/client/public}/landing-sequence/frame088.webp (100%) rename {public => apps/client/public}/landing-sequence/frame089.webp (100%) rename {public => apps/client/public}/landing-sequence/frame090.webp (100%) rename {public => apps/client/public}/landing-sequence/frame091.webp (100%) rename {public => apps/client/public}/landing-sequence/frame092.webp (100%) rename {public => apps/client/public}/landing-sequence/frame093.webp (100%) rename {public => apps/client/public}/landing-sequence/frame094.webp (100%) rename {public => apps/client/public}/landing-sequence/frame095.webp (100%) rename {public => apps/client/public}/landing-sequence/frame096.webp (100%) rename {public => apps/client/public}/landing-sequence/frame097.webp (100%) rename {public => apps/client/public}/landing-sequence/frame098.webp (100%) rename {public => apps/client/public}/landing-sequence/frame099.webp (100%) rename {public => apps/client/public}/landing-sequence/frame100.webp (100%) rename {public => apps/client/public}/landing-sequence/frame101.webp (100%) rename {public => apps/client/public}/landing-sequence/frame102.webp (100%) rename {public => apps/client/public}/landing-sequence/frame103.webp (100%) rename {public => apps/client/public}/landing-sequence/frame104.webp (100%) rename {public => apps/client/public}/landing-sequence/frame105.webp (100%) rename {public => apps/client/public}/landing-sequence/frame106.webp (100%) rename {public => apps/client/public}/landing-sequence/frame107.webp (100%) rename {public => apps/client/public}/landing-sequence/frame108.webp (100%) rename {public => apps/client/public}/landing-sequence/frame109.webp (100%) rename {public => apps/client/public}/landing-sequence/frame110.webp (100%) rename {public => apps/client/public}/landing-sequence/frame111.webp (100%) rename {public => apps/client/public}/landing-sequence/frame112.webp (100%) rename {public => apps/client/public}/landing-sequence/frame113.webp (100%) rename {public => apps/client/public}/landing-sequence/frame114.webp (100%) rename {public => apps/client/public}/landing-sequence/frame115.webp (100%) rename {public => apps/client/public}/landing-sequence/frame116.webp (100%) rename {public => apps/client/public}/landing-sequence/frame117.webp (100%) rename {public => apps/client/public}/landing-sequence/frame118.webp (100%) rename {public => apps/client/public}/landing-sequence/frame119.webp (100%) rename {public => apps/client/public}/landing-sequence/frame120.webp (100%) rename {public => apps/client/public}/landing-sequence/frame121.webp (100%) rename {public => apps/client/public}/landing-sequence/frame122.webp (100%) rename {public => apps/client/public}/landing-sequence/frame123.webp (100%) rename {public => apps/client/public}/landing-sequence/frame124.webp (100%) rename {public => apps/client/public}/landing-sequence/frame125.webp (100%) rename {public => apps/client/public}/landing-sequence/frame126.webp (100%) rename {public => apps/client/public}/landing-sequence/frame127.webp (100%) rename {public => apps/client/public}/landing-sequence/frame128.webp (100%) rename {public => apps/client/public}/landing-sequence/frame129.webp (100%) rename {public => apps/client/public}/landing-sequence/frame130.webp (100%) rename {public => apps/client/public}/landing-sequence/frame131.webp (100%) rename {public => apps/client/public}/landing-sequence/frame132.webp (100%) rename {public => apps/client/public}/landing-sequence/frame133.webp (100%) rename {public => apps/client/public}/landing-sequence/frame134.webp (100%) rename {public => apps/client/public}/landing-sequence/frame135.webp (100%) rename {public => apps/client/public}/landing-sequence/frame136.webp (100%) rename {public => apps/client/public}/landing-sequence/frame137.webp (100%) rename {public => apps/client/public}/landing-sequence/frame138.webp (100%) rename {public => apps/client/public}/landing-sequence/frame139.webp (100%) rename {public => apps/client/public}/landing-sequence/frame140.webp (100%) rename {public => apps/client/public}/landing-sequence/frame141.webp (100%) rename {public => apps/client/public}/landing-sequence/frame142.webp (100%) rename {public => apps/client/public}/landing-sequence/frame143.webp (100%) rename {public => apps/client/public}/landing-sequence/frame144.webp (100%) rename {public => apps/client/public}/landing-sequence/frame145.webp (100%) rename {public => apps/client/public}/landing-sequence/frame146.webp (100%) rename {public => apps/client/public}/landing-sequence/frame147.webp (100%) rename {public => apps/client/public}/landing-sequence/frame148.webp (100%) rename {public => apps/client/public}/landing-sequence/frame149.webp (100%) rename {public => apps/client/public}/landing-sequence/frame150.webp (100%) rename {public => apps/client/public}/landing-sequence/frame151.webp (100%) rename {public => apps/client/public}/landing-sequence/frame152.webp (100%) rename {public => apps/client/public}/landing-sequence/frame153.webp (100%) rename {public => apps/client/public}/landing-sequence/frame154.webp (100%) rename {public => apps/client/public}/landing-sequence/frame155.webp (100%) rename {public => apps/client/public}/landing-sequence/frame156.webp (100%) rename {public => apps/client/public}/landing-sequence/frame157.webp (100%) rename {public => apps/client/public}/landing-sequence/frame158.webp (100%) rename {public => apps/client/public}/landing-sequence/frame159.webp (100%) rename {public => apps/client/public}/landing-sequence/frame160.webp (100%) rename {public => apps/client/public}/landing-sequence/frame161.webp (100%) rename {public => apps/client/public}/landing-sequence/frame162.webp (100%) rename {public => apps/client/public}/landing-sequence/frame163.webp (100%) rename {public => apps/client/public}/landing-sequence/frame164.webp (100%) rename {public => apps/client/public}/landing-sequence/frame165.webp (100%) rename {public => apps/client/public}/landing-sequence/frame166.webp (100%) rename {public => apps/client/public}/landing-sequence/frame167.webp (100%) rename {public => apps/client/public}/landing-sequence/frame168.webp (100%) rename {public => apps/client/public}/landing-sequence/frame169.webp (100%) rename {public => apps/client/public}/landing-sequence/frame170.webp (100%) rename {public => apps/client/public}/landing-sequence/frame171.webp (100%) rename {public => apps/client/public}/landing-sequence/frame172.webp (100%) rename {public => apps/client/public}/landing-sequence/frame173.webp (100%) rename {public => apps/client/public}/landing-sequence/frame174.webp (100%) rename {public => apps/client/public}/landing-sequence/frame175.webp (100%) rename {public => apps/client/public}/landing-sequence/frame176.webp (100%) rename {public => apps/client/public}/landing-sequence/frame177.webp (100%) rename {public => apps/client/public}/landing-sequence/frame178.webp (100%) rename {public => apps/client/public}/landing-sequence/frame179.webp (100%) rename {public => apps/client/public}/landing-sequence/frame180.webp (100%) rename {public => apps/client/public}/landing-sequence/frame181.webp (100%) rename {public => apps/client/public}/landing-sequence/frame182.webp (100%) rename {public => apps/client/public}/landing-sequence/frame183.webp (100%) rename {public => apps/client/public}/landing-sequence/frame184.webp (100%) rename {public => apps/client/public}/landing-sequence/frame185.webp (100%) rename {public => apps/client/public}/landing-sequence/frame186.webp (100%) rename {public => apps/client/public}/landing-sequence/frame187.webp (100%) rename {public => apps/client/public}/landing-sequence/frame188.webp (100%) rename {public => apps/client/public}/landing-sequence/frame189.webp (100%) rename {public => apps/client/public}/landing-sequence/frame190.webp (100%) rename {public => apps/client/public}/landing-sequence/frame191.webp (100%) rename {public => apps/client/public}/landing-sequence/frame192.webp (100%) rename {public => apps/client/public}/landing-sequence/frame193.webp (100%) rename {public => apps/client/public}/landing-sequence/frame194.webp (100%) rename {public => apps/client/public}/landing-sequence/frame195.webp (100%) rename {public => apps/client/public}/landing-sequence/frame196.webp (100%) rename {public => apps/client/public}/landing-sequence/frame197.webp (100%) rename {public => apps/client/public}/landing-sequence/frame198.webp (100%) rename {public => apps/client/public}/landing-sequence/frame199.webp (100%) rename {public => apps/client/public}/landing-sequence/frame200.webp (100%) rename {public => apps/client/public}/landing-sequence/frame201.webp (100%) rename {public => apps/client/public}/landing-sequence/frame202.webp (100%) rename {public => apps/client/public}/landing-sequence/frame203.webp (100%) rename {public => apps/client/public}/landing-sequence/frame204.webp (100%) rename {public => apps/client/public}/landing-sequence/frame205.webp (100%) rename {public => apps/client/public}/landing-sequence/frame206.webp (100%) rename {public => apps/client/public}/landing-sequence/frame207.webp (100%) rename {public => apps/client/public}/landing-sequence/frame208.webp (100%) rename {public => apps/client/public}/landing-sequence/frame209.webp (100%) rename {public => apps/client/public}/landing-sequence/frame210.webp (100%) rename {public => apps/client/public}/landing-sequence/frame211.webp (100%) rename {public => apps/client/public}/landing-sequence/frame212.webp (100%) rename {public => apps/client/public}/landing-sequence/frame213.webp (100%) rename {public => apps/client/public}/landing-sequence/frame214.webp (100%) rename {public => apps/client/public}/landing-sequence/frame215.webp (100%) rename {public => apps/client/public}/landing-sequence/frame216.webp (100%) rename {public => apps/client/public}/landing-sequence/frame217.webp (100%) rename {public => apps/client/public}/landing-sequence/frame218.webp (100%) rename {public => apps/client/public}/landing-sequence/frame219.webp (100%) rename {public => apps/client/public}/landing-sequence/frame220.webp (100%) rename {public => apps/client/public}/landing-sequence/frame221.webp (100%) rename {public => apps/client/public}/landing-sequence/frame222.webp (100%) rename {public => apps/client/public}/landing-sequence/frame223.webp (100%) rename {public => apps/client/public}/landing-sequence/frame224.webp (100%) rename {public => apps/client/public}/landing-sequence/frame225.webp (100%) rename {public => apps/client/public}/landing-sequence/frame226.webp (100%) rename {public => apps/client/public}/landing-sequence/frame227.webp (100%) rename {public => apps/client/public}/landing-sequence/frame228.webp (100%) rename {public => apps/client/public}/landing-sequence/frame229.webp (100%) rename {public => apps/client/public}/landing-sequence/frame230.webp (100%) rename {public => apps/client/public}/landing-sequence/frame231.webp (100%) rename {public => apps/client/public}/landing-sequence/frame232.webp (100%) rename {public => apps/client/public}/landing-sequence/frame233.webp (100%) rename {public => apps/client/public}/landing-sequence/frame234.webp (100%) rename {public => apps/client/public}/landing-sequence/frame235.webp (100%) rename {public => apps/client/public}/landing-sequence/frame236.webp (100%) rename {public => apps/client/public}/landing-sequence/frame237.webp (100%) rename {public => apps/client/public}/landing-sequence/frame238.webp (100%) rename {public => apps/client/public}/landing-sequence/frame239.webp (100%) rename {public => apps/client/public}/landing-sequence/frame240.webp (100%) rename {public => apps/client/public}/landing-sequence/frame241.webp (100%) rename {public => apps/client/public}/landing-sequence/frame242.webp (100%) rename {public => apps/client/public}/landing-sequence/frame243.webp (100%) rename {public => apps/client/public}/landing-sequence/frame244.webp (100%) rename {public => apps/client/public}/landing-sequence/frame245.webp (100%) rename {public => apps/client/public}/landing-sequence/frame246.webp (100%) rename {public => apps/client/public}/landing-sequence/frame247.webp (100%) rename {public => apps/client/public}/landing-sequence/frame248.webp (100%) rename {public => apps/client/public}/landing-sequence/frame249.webp (100%) rename {public => apps/client/public}/landing-sequence/frame250.webp (100%) rename {public => apps/client/public}/landing-sequence/frame251.webp (100%) rename {public => apps/client/public}/landing-sequence/frame252.webp (100%) rename {public => apps/client/public}/landing-sequence/frame253.webp (100%) rename {public => apps/client/public}/landing-sequence/frame254.webp (100%) rename {public => apps/client/public}/landing-sequence/frame255.webp (100%) rename {public => apps/client/public}/landing-sequence/frame256.webp (100%) rename {public => apps/client/public}/landing-sequence/frame257.webp (100%) rename {public => apps/client/public}/landing-sequence/frame258.webp (100%) rename {public => apps/client/public}/landing-sequence/frame259.webp (100%) rename {public => apps/client/public}/landing-sequence/frame260.webp (100%) rename {public => apps/client/public}/landing-sequence/frame261.webp (100%) rename {public => apps/client/public}/landing-sequence/frame262.webp (100%) rename {public => apps/client/public}/landing-sequence/frame263.webp (100%) rename {public => apps/client/public}/landing-sequence/frame264.webp (100%) rename {public => apps/client/public}/landing-sequence/frame265.webp (100%) rename {public => apps/client/public}/landing-sequence/frame266.webp (100%) rename {public => apps/client/public}/landing-sequence/frame267.webp (100%) rename {public => apps/client/public}/landing-sequence/frame268.webp (100%) rename {public => apps/client/public}/landing-sequence/frame269.webp (100%) rename {public => apps/client/public}/landing-sequence/frame270.webp (100%) rename {public => apps/client/public}/landing-sequence/frame271.webp (100%) rename {public => apps/client/public}/landing-sequence/frame272.webp (100%) rename {public => apps/client/public}/landing-sequence/frame273.webp (100%) rename {public => apps/client/public}/landing-sequence/frame274.webp (100%) rename {public => apps/client/public}/landing-sequence/frame275.webp (100%) rename {public => apps/client/public}/landing-sequence/frame276.webp (100%) rename {public => apps/client/public}/landing-sequence/frame277.webp (100%) rename {public => apps/client/public}/landing-sequence/frame278.webp (100%) rename {public => apps/client/public}/landing-sequence/frame279.webp (100%) rename {public => apps/client/public}/landing-sequence/frame280.webp (100%) rename {public => apps/client/public}/landing-sequence/frame281.webp (100%) rename {public => apps/client/public}/landing-sequence/frame282.webp (100%) rename {public => apps/client/public}/landing-sequence/frame283.webp (100%) rename {public => apps/client/public}/landing-sequence/frame284.webp (100%) rename {public => apps/client/public}/landing-sequence/frame285.webp (100%) rename {public => apps/client/public}/landing-sequence/frame286.webp (100%) rename {public => apps/client/public}/landing-sequence/frame287.webp (100%) rename {public => apps/client/public}/landing-sequence/frame288.webp (100%) rename {public => apps/client/public}/landing-sequence/frame289.webp (100%) rename {public => apps/client/public}/landing-sequence/frame290.webp (100%) rename {public => apps/client/public}/landing-sequence/frame291.webp (100%) rename {public => apps/client/public}/landing-sequence/frame292.webp (100%) rename {public => apps/client/public}/landing-sequence/frame293.webp (100%) rename {public => apps/client/public}/landing-sequence/frame294.webp (100%) rename {public => apps/client/public}/landing-sequence/frame295.webp (100%) rename {public => apps/client/public}/landing-sequence/frame296.webp (100%) rename {public => apps/client/public}/landing-sequence/frame297.webp (100%) rename {public => apps/client/public}/landing-sequence/frame298.webp (100%) rename {public => apps/client/public}/landing-sequence/frame299.webp (100%) rename {public => apps/client/public}/landing-sequence/frame300.webp (100%) rename {public => apps/client/public}/landing-sequence/frame301.webp (100%) rename {public => apps/client/public}/landing-sequence/frame302.webp (100%) rename {public => apps/client/public}/landing-sequence/frame303.webp (100%) rename {public => apps/client/public}/landing-sequence/frame304.webp (100%) rename {public => apps/client/public}/landing-sequence/frame305.webp (100%) rename {public => apps/client/public}/landing-sequence/frame306.webp (100%) rename {public => apps/client/public}/landing-sequence/frame307.webp (100%) rename {public => apps/client/public}/landing-sequence/frame308.webp (100%) rename {public => apps/client/public}/landing-sequence/frame309.webp (100%) rename {public => apps/client/public}/landing-sequence/frame310.webp (100%) rename {public => apps/client/public}/landing-sequence/frame311.webp (100%) rename {public => apps/client/public}/landing-sequence/frame312.webp (100%) rename {public => apps/client/public}/landing-sequence/frame313.webp (100%) rename {public => apps/client/public}/landing-sequence/frame314.webp (100%) rename {public => apps/client/public}/landing-sequence/frame315.webp (100%) rename {public => apps/client/public}/landing-sequence/frame316.webp (100%) rename {public => apps/client/public}/landing-sequence/frame317.webp (100%) rename {public => apps/client/public}/landing-sequence/frame318.webp (100%) rename {public => apps/client/public}/landing-sequence/frame319.webp (100%) rename {public => apps/client/public}/landing-sequence/frame320.webp (100%) rename {public => apps/client/public}/landing-sequence/frame321.webp (100%) rename {public => apps/client/public}/landing-sequence/frame322.webp (100%) rename {public => apps/client/public}/landing-sequence/frame323.webp (100%) rename {public => apps/client/public}/landing-sequence/frame324.webp (100%) rename {public => apps/client/public}/landing-sequence/frame325.webp (100%) rename {public => apps/client/public}/landing-sequence/frame326.webp (100%) rename {public => apps/client/public}/landing-sequence/frame327.webp (100%) rename {public => apps/client/public}/landing-sequence/frame328.webp (100%) rename {public => apps/client/public}/landing-sequence/frame329.webp (100%) rename {public => apps/client/public}/landing-sequence/frame330.webp (100%) rename {public => apps/client/public}/landing-sequence/frame331.webp (100%) rename {public => apps/client/public}/landing-sequence/frame332.webp (100%) rename {public => apps/client/public}/landing-sequence/frame333.webp (100%) rename {public => apps/client/public}/landing-sequence/frame334.webp (100%) rename {public => apps/client/public}/landing-sequence/frame335.webp (100%) rename {public => apps/client/public}/landing-sequence/frame336.webp (100%) rename {public => apps/client/public}/landing-sequence/frame337.webp (100%) rename {public => apps/client/public}/landing-sequence/frame338.webp (100%) rename {public => apps/client/public}/landing-sequence/frame339.webp (100%) rename {public => apps/client/public}/landing-sequence/frame340.webp (100%) rename {public => apps/client/public}/landing-sequence/frame341.webp (100%) rename {public => apps/client/public}/landing-sequence/frame342.webp (100%) rename {public => apps/client/public}/landing-sequence/frame343.webp (100%) rename {public => apps/client/public}/landing-sequence/frame344.webp (100%) rename {public => apps/client/public}/landing-sequence/frame345.webp (100%) rename {public => apps/client/public}/landing-sequence/frame346.webp (100%) rename {public => apps/client/public}/landing-sequence/frame347.webp (100%) rename {public => apps/client/public}/landing-sequence/frame348.webp (100%) rename {public => apps/client/public}/landing-sequence/frame349.webp (100%) rename {public => apps/client/public}/landing-sequence/frame350.webp (100%) rename {public => apps/client/public}/landing-sequence/frame351.webp (100%) rename {public => apps/client/public}/landing-sequence/frame352.webp (100%) rename {public => apps/client/public}/landing-sequence/frame353.webp (100%) rename {public => apps/client/public}/landing-sequence/frame354.webp (100%) rename {public => apps/client/public}/landing-sequence/frame355.webp (100%) rename {public => apps/client/public}/landing-sequence/frame356.webp (100%) rename {public => apps/client/public}/landing-sequence/frame357.webp (100%) rename {public => apps/client/public}/landing-sequence/frame358.webp (100%) rename {public => apps/client/public}/landing-sequence/frame359.webp (100%) rename {public => apps/client/public}/landing-sequence/frame360.webp (100%) rename {public => apps/client/public}/landing-sequence/frame361.webp (100%) rename {public => apps/client/public}/letraz-brain.webm (100%) rename {public => apps/client/public}/letraz-engine.webm (100%) rename {public => apps/client/public}/letraz-intro.mp4 (100%) rename {public => apps/client/public}/letraz-intro.webm (100%) rename {public => apps/client/public}/letraz.png (100%) rename {public => apps/client/public}/logo-carousel.av1.webm (100%) rename {public => apps/client/public}/logo-carousel.webm (100%) rename {public => apps/client/public}/logo.png (100%) rename {public => apps/client/public}/logo.svg (100%) rename {public => apps/client/public}/logo_dark.svg (100%) rename {public => apps/client/public}/logo_mono.png (100%) rename {public => apps/client/public}/logo_mono.svg (100%) rename {public => apps/client/public}/logo_mono_rotated.svg (100%) rename {public => apps/client/public}/nav_menu_bg.png (100%) rename {public => apps/client/public}/qr-code.webp (100%) rename {public => apps/client/public}/resume-cards.av1.webm (100%) rename {public => apps/client/public}/resume-cards.webm (100%) rename {public => apps/client/public}/resume-generation.av1.webm (100%) rename {public => apps/client/public}/resume-generation.webm (100%) rename {public => apps/client/public}/rize-logo-dark.svg (100%) rename {public => apps/client/public}/rize-logo.svg (100%) rename {public => apps/client/public}/rize-video.av1.webm (100%) rename {public => apps/client/public}/rize-video.webm (100%) rename {public => apps/client/public}/stacks-logo.svg (100%) rename {public => apps/client/public}/subhajit.png (100%) rename {public => apps/client/public}/tweak-resume.av1.webm (100%) rename {public => apps/client/public}/tweak-resume.webm (100%) rename {public => apps/client/public}/upload-resume.av1.webm (100%) rename {public => apps/client/public}/upload-resume.webm (100%) rename routes.ts => apps/client/routes.ts (100%) rename sentry.edge.config.ts => apps/client/sentry.edge.config.ts (100%) rename sentry.server.config.ts => apps/client/sentry.server.config.ts (100%) rename tailwind.config.ts => apps/client/tailwind.config.ts (100%) rename test-setup.ts => apps/client/test-setup.ts (100%) rename tsconfig.json => apps/client/tsconfig.json (71%) rename vitest.config.ts => apps/client/vitest.config.ts (100%) create mode 100644 apps/server/.gitignore create mode 100644 apps/server/CONTRIBUTING.md create mode 100644 apps/server/LICENSE create mode 100644 apps/server/README.md create mode 100644 apps/server/encore.app create mode 100644 apps/server/eslint.config.mjs create mode 100644 apps/server/package.json create mode 100644 apps/server/services/admin/controller.ts create mode 100644 apps/server/services/admin/encore.service.ts create mode 100644 apps/server/services/admin/interface.ts create mode 100644 apps/server/services/admin/service.ts create mode 100644 apps/server/services/analytics/actions.ts create mode 100644 apps/server/services/analytics/controller.ts create mode 100644 apps/server/services/analytics/encore.service.ts create mode 100644 apps/server/services/analytics/events.ts create mode 100644 apps/server/services/analytics/interface.ts create mode 100644 apps/server/services/analytics/posthog-management.ts create mode 100644 apps/server/services/analytics/posthog.ts create mode 100644 apps/server/services/analytics/service.ts create mode 100644 apps/server/services/core/actions.ts create mode 100644 apps/server/services/core/controller.ts create mode 100644 apps/server/services/core/database.ts create mode 100644 apps/server/services/core/drizzle.config.ts create mode 100644 apps/server/services/core/encore.service.ts create mode 100644 apps/server/services/core/freshdesk.ts create mode 100644 apps/server/services/core/interface.ts create mode 100644 apps/server/services/core/linear.ts create mode 100644 apps/server/services/core/loops.ts create mode 100644 apps/server/services/core/migrations/0000_puzzling_ravenous.sql create mode 100644 apps/server/services/core/migrations/0001_colorful_leopardon.sql create mode 100644 apps/server/services/core/migrations/0002_faithful_xorn.sql create mode 100644 apps/server/services/core/migrations/meta/0000_snapshot.json create mode 100644 apps/server/services/core/migrations/meta/0001_snapshot.json create mode 100644 apps/server/services/core/migrations/meta/0002_snapshot.json create mode 100644 apps/server/services/core/migrations/meta/_journal.json create mode 100644 apps/server/services/core/schema.ts create mode 100644 apps/server/services/core/service.ts create mode 100644 apps/server/services/core/topics.ts create mode 100644 apps/server/services/identity/actions.ts create mode 100644 apps/server/services/identity/auth.ts create mode 100644 apps/server/services/identity/clerk.ts create mode 100644 apps/server/services/identity/controller.ts create mode 100644 apps/server/services/identity/database.ts create mode 100644 apps/server/services/identity/drizzle.config.ts create mode 100644 apps/server/services/identity/encore.service.ts create mode 100644 apps/server/services/identity/interface.ts create mode 100644 apps/server/services/identity/migrations/0000_whole_dragon_lord.sql create mode 100644 apps/server/services/identity/migrations/0001_flat_sandman.sql create mode 100644 apps/server/services/identity/migrations/meta/0000_snapshot.json create mode 100644 apps/server/services/identity/migrations/meta/0001_snapshot.json create mode 100644 apps/server/services/identity/migrations/meta/_journal.json create mode 100644 apps/server/services/identity/schema.ts create mode 100644 apps/server/services/identity/service.ts create mode 100644 apps/server/services/identity/topics.ts create mode 100644 apps/server/services/job/actions.ts create mode 100644 apps/server/services/job/controller.ts create mode 100644 apps/server/services/job/database.ts create mode 100644 apps/server/services/job/drizzle.config.ts create mode 100644 apps/server/services/job/encore.service.ts create mode 100644 apps/server/services/job/interface.ts create mode 100644 apps/server/services/job/migrations/0000_thankful_ben_grimm.sql create mode 100644 apps/server/services/job/migrations/0001_dusty_hannibal_king.sql create mode 100644 apps/server/services/job/migrations/0002_futuristic_odin.sql create mode 100644 apps/server/services/job/migrations/0003_bitter_spot.sql create mode 100644 apps/server/services/job/migrations/0004_low_blackheart.sql create mode 100644 apps/server/services/job/migrations/meta/0000_snapshot.json create mode 100644 apps/server/services/job/migrations/meta/0001_snapshot.json create mode 100644 apps/server/services/job/migrations/meta/0002_snapshot.json create mode 100644 apps/server/services/job/migrations/meta/0003_snapshot.json create mode 100644 apps/server/services/job/migrations/meta/0004_snapshot.json create mode 100644 apps/server/services/job/migrations/meta/_journal.json create mode 100644 apps/server/services/job/schema.ts create mode 100644 apps/server/services/job/service.ts create mode 100644 apps/server/services/job/services/job-extractor.ts create mode 100644 apps/server/services/job/services/llm-parser.ts create mode 100644 apps/server/services/job/topics.ts create mode 100644 apps/server/services/job/utils/url-detection.ts create mode 100644 apps/server/services/notifications/actions.ts create mode 100644 apps/server/services/notifications/controller.ts create mode 100644 apps/server/services/notifications/encore.service.ts create mode 100644 apps/server/services/notifications/interface.ts create mode 100644 apps/server/services/notifications/knock.ts create mode 100644 apps/server/services/notifications/service.ts create mode 100644 apps/server/services/notifications/workflows.ts create mode 100644 apps/server/services/resume/actions.ts create mode 100644 apps/server/services/resume/controller.ts create mode 100644 apps/server/services/resume/database.ts create mode 100644 apps/server/services/resume/drizzle.config.ts create mode 100644 apps/server/services/resume/encore.service.ts create mode 100644 apps/server/services/resume/interface.ts create mode 100644 apps/server/services/resume/migrations/0000_amusing_madame_masque.sql create mode 100644 apps/server/services/resume/migrations/0001_spooky_havok.sql create mode 100644 apps/server/services/resume/migrations/meta/0000_snapshot.json create mode 100644 apps/server/services/resume/migrations/meta/0001_snapshot.json create mode 100644 apps/server/services/resume/migrations/meta/_journal.json create mode 100644 apps/server/services/resume/schema.ts create mode 100644 apps/server/services/resume/service.ts create mode 100644 apps/server/services/resume/services/ai-provider.config.ts create mode 100644 apps/server/services/resume/services/bulk-replace.service.ts create mode 100644 apps/server/services/resume/services/certification.service.ts create mode 100644 apps/server/services/resume/services/education.service.ts create mode 100644 apps/server/services/resume/services/experience.service.ts create mode 100644 apps/server/services/resume/services/project.service.ts create mode 100644 apps/server/services/resume/services/resume-tailoring.service.ts create mode 100644 apps/server/services/resume/services/skill.service.ts create mode 100644 apps/server/services/resume/services/thumbnail-evaluator.service.ts create mode 100644 apps/server/services/resume/storage.ts create mode 100644 apps/server/services/resume/topics.ts create mode 100644 apps/server/services/search/actions.ts create mode 100644 apps/server/services/search/algolia.ts create mode 100644 apps/server/services/search/encore.service.ts create mode 100644 apps/server/services/search/interface.ts create mode 100644 apps/server/services/utils/admin-auth.ts create mode 100644 apps/server/services/utils/admin-middleware.ts create mode 100644 apps/server/services/utils/encore.service.ts create mode 100644 apps/server/services/utils/errors.ts create mode 100644 apps/server/services/utils/gateway.ts create mode 100644 apps/server/services/utils/middleware.ts create mode 100644 apps/server/services/utils/pagination.ts create mode 100644 apps/server/services/utils/sentry.ts create mode 100644 apps/server/services/webhooks/controller.ts create mode 100644 apps/server/services/webhooks/encore.service.ts create mode 100644 apps/server/services/webhooks/interface.ts create mode 100644 apps/server/services/webhooks/service.ts create mode 100644 apps/server/services/webhooks/topics.ts create mode 100644 apps/server/tsconfig.json delete mode 100755 bun.lock create mode 100644 eslint.config.mjs create mode 100644 packages/terraform/.gitignore create mode 100644 packages/terraform/CONTRIBUTING.md create mode 100644 packages/terraform/LICENSE create mode 100644 packages/terraform/README.md create mode 100644 packages/terraform/main.tf create mode 100644 packages/terraform/modules/server/main.tf create mode 100644 packages/terraform/modules/server/outputs.tf create mode 100644 packages/terraform/modules/server/templates/userdata.sh.tftpl create mode 100644 packages/terraform/modules/server/variables.tf create mode 100644 packages/terraform/modules/utils/main.tf create mode 100644 packages/terraform/modules/utils/outputs.tf create mode 100644 packages/terraform/modules/utils/templates/userdata.sh.tftpl create mode 100644 packages/terraform/modules/utils/variables.tf create mode 100644 packages/terraform/outputs.tf create mode 100644 packages/terraform/package.json create mode 100644 packages/terraform/terraform.tfvars.example create mode 100644 packages/terraform/variables.tf create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 tsconfig.base.json create mode 100644 turbo.json diff --git a/.gitignore b/.gitignore index 6f9d4ddf..db8c46ce 100644 --- a/.gitignore +++ b/.gitignore @@ -1,50 +1,79 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp +# Dependencies +node_modules/ +.pnp .pnp.js -# testing -/coverage +# Testing +coverage/ +*.log + +# Next.js +.next/ +out/ +build/ +dist/ -# next.js -/.next/ -/out/ +# Encore +.encore/ -# env -/.env -/.env.old -/.env.local -/.env.development.local -/.env.test.local -/.env.production.local +# Environment +.env +.env.* +!.env.example +.env.local +.env.development.local +.env.test.local +.env.production.local +.env.sentry-build-plugin -# production -/build +# Vercel +.vercel + +# TypeScript +*.tsbuildinfo +next-env.d.ts -# misc +# IDE +.idea/ +.vscode/ +.cursor/ +.zed/ +.kiro/ .DS_Store + +# Misc *.pem +*.swp +*.swo +*~ -# debug +# Logs npm-debug.log* yarn-debug.log* yarn-error.log* +pnpm-debug.log* -# vercel -.vercel +# Turbo +.turbo/ -# typescript -*.tsbuildinfo -next-env.d.ts +# Python (for letraz-server if needed) +__pycache__/ +*.py[cod] +*$py.class +.Python +*.so +.venv/ +venv/ +ENV/ +.fonttools_venv/ -# IDE -/.idea -/.zed -/.vscode -/.cursor -/.kiro +# Terraform +.terraform/ +*.tfstate +*.tfstate.* +*.tfvars +!terraform.tfvars.example +.terraform.lock.hcl -# Sentry Config File -.env.sentry-build-plugin +# Bruno API client +.dropstone/ diff --git a/apps/admin/.env.example b/apps/admin/.env.example new file mode 100644 index 00000000..7449bdd3 --- /dev/null +++ b/apps/admin/.env.example @@ -0,0 +1,25 @@ +CLERK_SECRET_KEY=clerk_production_secret_key +CONSUMER_API_KEY=api_key_that_consumer_will_call_this_app_with +BACKEND_HOST=url_of_the_backend_service +ADMIN_API_KEY=api_key_to_call_admin_apis_from_backend_with +NEXT_PUBLIC_APP_URL=app_url_with_protocol +OPENAI_API_KEY=key_for_calling_openapi_model_via_api +NEXT_PUBLIC_LINEAR_CLIENT_ID=linear_client_id +LINEAR_CLIENT_ID=linear_client_id +LINEAR_CLIENT_SECRET=linear_client_secret + +LINEAR_API_KEY=linear_api_key +LINEAR_TEAM_ID=linear_team_id + +CONVEX_DEPLOYMENT=convex_deployment_host +NEXT_PUBLIC_CONVEX_URL=convex_url + +POSTHOG_PROJECT_ID=posthog_project_id +POSTHOG_PERSONAL_API_KEY=posthog_personal_api_key +POSTHOG_PROJECT_API_KEY=posthog_project_api_key + +GITHUB_APP_ID=github_app_id +GITHUB_APP_PRIVATE_KEY=github_app_private_key +GITHUB_APP_CLIENT_ID=github_app_client_id +GITHUB_APP_CLIENT_SECRET=github_app_client_secret +GITHUB_APP_SLUG=github_app_slug \ No newline at end of file diff --git a/apps/admin/.gitignore b/apps/admin/.gitignore new file mode 100644 index 00000000..64530e9e --- /dev/null +++ b/apps/admin/.gitignore @@ -0,0 +1,44 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# env +/.env +/.env.old +/.env.local +/.env.development.local +/.env.test.local +/.env.production.local + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# IDE +/.idea +/.zed diff --git a/CONTRIBUTING.md b/apps/admin/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTING.md rename to apps/admin/CONTRIBUTING.md diff --git a/LICENSE b/apps/admin/LICENSE similarity index 100% rename from LICENSE rename to apps/admin/LICENSE diff --git a/apps/admin/README.md b/apps/admin/README.md new file mode 100644 index 00000000..1cf8c7e8 --- /dev/null +++ b/apps/admin/README.md @@ -0,0 +1,84 @@ +# Letraz Admin + +A Next.js-based administrative panel for the Letraz ecosystem, providing tools for PR generation, user management, and Linear integration. + +## Overview + +Letraz Admin is a web application that streamlines development workflows by automating pull request description generation from Linear issues and providing administrative utilities for user management within the Letraz platform. + +## Key Features + +- **PR Generation**: Automatically generate comprehensive pull request descriptions from Linear issues using OpenAI +- **User Management**: Administrative API for checking user signup status and verification +- **Linear Integration**: Seamless OAuth integration with Linear for issue management +- **Authentication**: Secure user authentication powered by Clerk +- **Dark Mode**: Built-in dark/light theme support +- **Responsive Design**: Modern, mobile-friendly interface + +## Getting Started + +### Prerequisites + +- Node.js 18+ or Bun +- Linear account with API access +- Clerk account for authentication +- OpenAI API key + +### Installation + +1. Clone the repository: +```bash +git clone https://github.com/pingSubhajit/letraz-admin.git +cd letraz-admin +``` + +2. Install dependencies: +```bash +bun install +# or +npm install +``` + +3. Set up environment variables: +```bash +cp .env.example .env.local +``` + +Configure the following environment variables: +``` +CLERK_SECRET_KEY=your_clerk_secret_key +NEXT_PUBLIC_APP_URL=current_url_of_the_app +OPENAI_API_KEY=your_openai_api_key +CONSUMER_API_KEY=your_admin_api_key +LINEAR_CLIENT_ID=your_linear_client_id +LINEAR_CLIENT_SECRET=your_linear_client_secret +NEXT_PUBLIC_LINEAR_CLIENT_ID=your_linear_client_id +``` + +4. Run the development server: +```bash +bun dev +# or +npm run dev +``` + +Open [http://localhost:3000](http://localhost:3000) to view the application. + +## Technologies Used + +- **Framework**: Next.js 15 with App Router +- **Language**: TypeScript +- **Authentication**: Clerk +- **Styling**: Tailwind CSS +- **UI Components**: Radix UI +- **API Integration**: Linear SDK +- **AI**: OpenAI API +- **Icons**: Lucide React + +## License + +This project is proprietary software owned by Letraz. + +## Contact + +For questions or support, contact the Letraz development team. diff --git a/apps/admin/WARP.md b/apps/admin/WARP.md new file mode 100644 index 00000000..217442d1 --- /dev/null +++ b/apps/admin/WARP.md @@ -0,0 +1,106 @@ +# WARP.md + +This file provides guidance to WARP (warp.dev) when working with code in this repository. + +Project: Letraz Admin (Next.js 15 + TypeScript) + +Common commands +- Install dependencies (Bun preferred): +```bash path=null start=null +bun install +``` + +- Start development server (Turbopack): +```bash path=null start=null +bun run dev +``` + +- Build production bundle: +```bash path=null start=null +bun run build +``` + +- Start production server (after build): +```bash path=null start=null +bun run start +``` + +- Lint: +```bash path=null start=null +bun run lint +``` + +- Lint and fix: +```bash path=null start=null +bun run lint:fix +``` + +- Tests: + - No test script is currently defined in package.json. + - If tests are added later (e.g., with Vitest or Jest), prefer Bun-compatible invocations (e.g., `bun test` or `bun run test`) and document how to run a single test here. + +Environment +- Copy the example env file and set required variables: +```bash path=null start=null +cp .env.example .env.local +``` +- Required keys (see .env.example for the full list): + - Clerk: CLERK_SECRET_KEY, NEXT_PUBLIC_APP_URL + - Linear: NEXT_PUBLIC_LINEAR_CLIENT_ID, LINEAR_CLIENT_ID, LINEAR_CLIENT_SECRET + - OpenAI: OPENAI_API_KEY + - Admin/backends: CONSUMER_API_KEY, BACKEND_HOST, ADMIN_API_KEY + - Convex: CONVEX_DEPLOYMENT, NEXT_PUBLIC_CONVEX_URL + +High-level architecture +- Framework and routing + - Next.js 15 App Router under app/. + - Top-level layout at app/layout.tsx and global styles in app/globals.css. + - Route groups/pages: + - app/(dashboard)/team-management/page.tsx + - app/generate-pr/page.tsx + - app/settings/page.tsx + - app/waitlist/page.tsx + - app/login/page.tsx + - API route: app/api/generate/route.ts (PR description generation) + +- Authentication and providers + - Linear oAuth for authentication + - UI/theme via Tailwind CSS and Radix-based UI components in components/ui/. + - Global providers in components/providers/ (convex-provider.tsx, theme-provider.tsx). + +- Feature areas and components + - Generate PR: components/generate-pr/* (Linear OAuth/connect, issue selection, generation flow, PRDescription rendering). + - Settings: components/settings/* (GitHub App connection, repository management, tokens). + - Team Management: components/team-management/* (CRUD dialogs, actions, table interactions). + - Waitlist: components/waitlist/* (Clerk allowlist status and table). + +- Back-end/data layer + - Convex functions and schema in convex/. + - convex/schema.ts defines core tables: teamMembers, apiTokens, repositories, githubLinearMappings, githubPrMappings, webhookEvents with relevant indices. + - convex/*.ts implements server-side operations (e.g., repositories.ts, teamMembers.ts, apiTokens.ts). + - Server Actions in lib/actions/ (Next.js “use server”): + - waitlistActions.ts communicates with BACKEND_HOST (requires ADMIN_API_KEY), revalidates relevant paths. + - clerkAllowlistActions.ts integrates with Clerk server SDK for allowlist management. + - checkLinearAuth.ts reads Linear OAuth token from cookies. + +- External integrations + - OpenAI via ai-sdk (app/api/generate/route.ts) to generate PR descriptions from Linear Issue data using OPENAI_API_KEY. + - Linear via @linear/sdk for issue data and OAuth (frontend flow/components). + - GitHub: + - lib/github-api.ts wraps REST calls (user, repos, webhooks, branches, issues, PRs, labels, milestones). Uses either OAuth token (cookie github_access_token) or a GitHub App installation token. + - lib/github-app.ts manages GitHub App auth via @octokit/auth-app and @octokit/rest. Requires GITHUB_APP_ID and GITHUB_APP_PRIVATE_KEY (plus optional client ID/secret). Provides installation discovery and repo-scoped client acquisition. + +- Styling and build + - Tailwind configured in tailwind.config.ts and postcss.config.mjs. + - ESLint configured in eslint.config.mjs (flat config). Scripts: lint, lint:fix. + - TypeScript strict config; path alias @/* to project root. + +Operational notes for Warp +- Use Bun for all script execution (Node isn’t required in this environment). Prefer `bun run