diff --git a/apps/client/src/constants/sample-resume.ts b/apps/client/src/constants/sample-resume.ts new file mode 100644 index 000000000..54113ebe2 --- /dev/null +++ b/apps/client/src/constants/sample-resume.ts @@ -0,0 +1,493 @@ +import { ResumeData } from "@reactive-resume/schema"; + +export const sampleResume: ResumeData = { + basics: { + name: "John Doe", + headline: "Fintech Digital Assets Manager & Technology Innovator", + email: "hello@johndoe.com", + phone: "555-555-5555", + location: "Sarasota, FL", + url: { + label: "", + href: "https://johndoe.com", + }, + customFields: [], + picture: { + url: "http://localhost:9000/reactive-resume/clomqcm7b0004xi96goz2gqmt/pictures/clomqcm7b0004xi96goz2gqmt.jpg", + size: 64, + aspectRatio: 0.75, + borderRadius: 6, + effects: { + hidden: false, + border: false, + grayscale: false, + }, + }, + }, + sections: { + summary: { + name: "Summary", + columns: 1, + visible: true, + id: "summary", + content: + "

With over two decades of experience at the forefront of digital asset financial technology (FinTech) integration across the entire spectrum of financial service company operations, I bring a strategic and analytical approach, underpinned by a deep understanding of cryptocurrency markets, digital asset financial management, compliance, and regulatory frameworks.

Career Highlights

", + }, + awards: { + name: "Awards", + columns: 1, + visible: true, + id: "awards", + items: [ + { + id: "xk8q4bsp3vdlixehddifqsej", + visible: true, + title: 'Presented "Current Landscape of Digital Assets and Cryptocurrency"', + awarder: "Meeting of the Midwest International Trade Association", + date: "Jul 2022", + summary: "", + url: { + label: "", + href: "", + }, + }, + { + id: "ky6dcdrlo6bgmagidab7hze8", + visible: true, + title: 'Presented "State of Telcoin"', + awarder: "Nebraska Bankers Association", + date: "Jul 2021", + summary: "", + url: { + label: "", + href: "", + }, + }, + ], + }, + certifications: { + name: "Certifications", + columns: 1, + visible: true, + id: "certifications", + items: [ + { + id: "cx7xjbbp8q4n6uywmbjmnk06", + visible: true, + name: "Series 7, 66 and 3 Licenses", + issuer: "Financial Industry Regulatory Authority (FINRA)", + date: "Sep 2020", + summary: "", + url: { + label: "", + href: "", + }, + }, + { + id: "c60noj3hfmpui6qmisyicpza", + visible: true, + name: "Microsoft Technical Associate (MTA)", + issuer: "Microsoft Database Fundamentals", + date: "Aug 2019", + summary: "", + url: { + label: "", + href: "", + }, + }, + ], + }, + education: { + name: "Education", + columns: 1, + visible: true, + id: "education", + items: [ + { + id: "rxzt0h3k6hm2osgt99luj6ga", + visible: true, + institution: "Harvard Business School", + studyType: "Masters in Business Administration", + area: "Economics", + score: "Cambridge, MA", + date: "Aug 2008 - Jul 2012", + summary: "", + url: { + label: "", + href: "https://www.harvard.edu/", + }, + }, + { + id: "sw5c5016z5oth2nqk2wpiqrk", + visible: true, + institution: "Western Illinois University", + studyType: "Bachelor of Business Administration", + area: "Economics", + score: "Macomb, IL", + date: "Dec 2004 - Feb 2008", + summary: "", + url: { + label: "", + href: "https://www.wiu.edu/", + }, + }, + ], + }, + experience: { + name: "Experience", + columns: 1, + visible: true, + id: "experience", + items: [ + { + id: "w36cxnlowbgb4r7ruusjexb6", + visible: true, + company: "Telcoin", + position: "Vice President, Banking Operations", + location: "Los Angeles, CA", + date: "Aug 2020 - Present", + summary: + "

Key visionary in charting the company's DeFi strategy and direction, partnering across the executive team. Identify and seize opportunities to position Telcoin as an industry leader, grow business, extend the digital asset platform reach, and influence favorable legislation. Lead banking operations, including a cross-functional team and partnerships with mobile money platforms.

", + url: { + label: "", + href: "https://telcoin.xyz/", + }, + }, + ], + }, + volunteer: { + name: "Volunteering", + columns: 1, + visible: true, + id: "volunteer", + items: [ + { + id: "z9uwndyvz4vxndywohmsv5q2", + visible: true, + organization: "Rotary Club of Lakewood Ranch", + position: "Member", + location: "New York, NY", + date: "Dec 2018 - Present", + summary: "", + url: { + label: "", + href: "", + }, + }, + ], + }, + interests: { + name: "Interests", + columns: 1, + visible: true, + id: "interests", + items: [ + { + id: "yxhban7wuust7an86bwhoy68", + visible: true, + name: "Photography", + keywords: ["Polaroid", "Adobe Lightroom", "Canon DSLR"], + }, + { + id: "vdirkh4frapk72mpfoxkddju", + visible: true, + name: "Video Games", + keywords: ["FIFA 23", "Call of Duty", "Slay the Spire"], + }, + { + id: "ww6gvkhb6lacyi7q0ju13oez", + visible: true, + name: "Product Development", + keywords: ["HTML", "CSS", "JavaScript", "React"], + }, + ], + }, + languages: { + name: "Languages", + columns: 4, + visible: true, + id: "languages", + items: [ + { + id: "je6s7k590yp9wtv65bbcyiua", + visible: true, + name: "English", + fluency: "Native Speaker", + fluencyLevel: 5, + }, + { + id: "qdltq93lqi5g290t70brrpit", + visible: true, + name: "German", + fluency: "Advanced", + fluencyLevel: 5, + }, + { + id: "txxfl568h5yg5xojwj5sk3ms", + visible: true, + name: "French", + fluency: "Advanced", + fluencyLevel: 5, + }, + { + id: "zla2ezdkhemy68kg8bj86jk0", + visible: true, + name: "Spanish", + fluency: "Learning", + fluencyLevel: 2, + }, + ], + }, + profiles: { + name: "Profiles", + columns: 5, + visible: true, + id: "profiles", + items: [ + { + id: "hey1likga9nqv5x548aogybk", + visible: true, + network: "LinkedIn", + username: "johndoe", + icon: "linkedin", + url: { + label: "", + href: "https://linkedin.com/in/johndoe", + }, + }, + { + id: "tkofnqpwaf56tjqtxq7x97z8", + visible: true, + network: "Twitter", + username: "johndoe", + icon: "x", + url: { + label: "", + href: "https://x.com/johndoe", + }, + }, + { + id: "xg5nljag80domeki26dblx1k", + visible: true, + network: "GitHub", + username: "johndoe", + icon: "github", + url: { + label: "", + href: "https://github.com/johndoe", + }, + }, + { + id: "u4y7yfqi607r6un05y3leap5", + visible: true, + network: "StackOverflow", + username: "johndoe", + icon: "stackoverflow", + url: { + label: "", + href: "https://stackoverflow.com/users/1248133", + }, + }, + ], + }, + projects: { + name: "Projects", + columns: 1, + visible: true, + id: "projects", + items: [], + }, + publications: { + name: "Publications", + columns: 1, + visible: true, + id: "publications", + items: [ + { + id: "nx1qpj7u5duywvcror662woy", + visible: true, + name: "Current Landscape of Digital Assets and Cryptocurrency", + publisher: "Midwest International Trade Association", + date: "Jul 2022", + summary: "", + url: { + label: "", + href: "", + }, + }, + { + id: "u385pdal3exspenxswj02gd2", + visible: true, + name: "State of Telcoin", + publisher: "Nebraska Bankers Association", + date: "Apr 2019", + summary: "", + url: { + label: "", + href: "", + }, + }, + ], + }, + references: { + name: "References", + columns: 2, + visible: true, + id: "references", + items: [ + { + id: "znn813gd72aptpgz8dc2g0g8", + visible: true, + name: "Cosmo Kramer", + description: "Manager at EY", + summary: "

(credentials available on request)

", + url: { + label: "", + href: "https://linkedin.com/in/cosmo.kramer", + }, + }, + { + id: "erqekvctbkc4dxvqxm6mfvgj", + visible: true, + name: "Elangovan Musk", + description: "CEO at Tulsa", + summary: "

(credentials available on request)

", + url: { + label: "", + href: "https://linkedin.com/in/elan.musk", + }, + }, + ], + }, + skills: { + name: "Skills", + columns: 2, + visible: true, + id: "skills", + items: [ + { + id: "lo7bvn3dv7s13effzyy4ov2l", + visible: true, + name: "Financial Markets", + description: "Expert", + level: 5, + keywords: [ + "Foreign Exchange (FX) Markets", + "Futures", + "Options", + "Stablecoins", + "Decentralized Finance (DeFi)", + "Crypto Exchanges", + "NFTs", + ], + }, + { + id: "hr8ncy5ewyq2wug238b1licq", + visible: true, + name: "Digital Asset Management", + description: "Expert", + level: 5, + keywords: [ + "Digital Asset Strategy", + "Digital Asset Technology", + "Team Leadership", + "Technical Platform Design", + ], + }, + { + id: "s8x0oe9bfslhb4cp3wucpfus", + visible: true, + name: "Technical Expertise", + description: "Expert", + level: 5, + keywords: [ + "Architecture and Development", + "Continuous Product Development", + "Quantitative Models", + "Data Standardization", + ], + }, + { + id: "du8xdxue8hg3sfw13fixt1if", + visible: true, + name: "Legal & Compliance", + description: "Advanced", + level: 4, + keywords: [ + "KYC", + "Problem Solving Communication", + "Presentations", + "Training", + "Market Data", + "Bloomberg", + "Reuters", + ], + }, + ], + }, + custom: { + juryi0w9w9jabsgorks0bixq: { + name: "Experience", + columns: 1, + visible: true, + id: "juryi0w9w9jabsgorks0bixq", + items: [ + { + id: "j69rrkkdf94jqqfe5v726d1n", + visible: true, + name: "QuantRes", + description: "Nassau, Bahamas", + date: "Jan 2018 - Jul 2020", + level: 0, + summary: + "

Proprietary quantitative trading firm and privately-held quantitative futures fund with $1B in AUM and a focus on futures and OTC FX opportunities. 25+ year track record of trading global derivatives markets.

Execution Team Manager

Led international OTC FX and futures trading desk, software development, compliance, and market data for fund averaging $5B in monthly FX transactions and generating 500K+ futures contracts per month.

Steered a 12-member team of 4 traders and 8 software engineers. Oversaw co-located trade execution and managed direct market access in 4 data centers globally for exchanges not co-located. Built partnerships with trading technology providers. Point of contact with banks, brokerages, FXSpotStream, and 9 other liquidity providers. Led market data feed agreements with exchanges. Maintained CME and Eurex exchange memberships. Headed fulfillment of regulatory compliance and due diligence requests.

", + keywords: [], + url: { + label: "", + href: "https://quantres.xyz/", + }, + }, + ], + }, + }, + }, + metadata: { + locale: "en", + template: "rhyhorn", + layout: [ + [["profiles", "summary", "experience"], []], + [["custom.juryi0w9w9jabsgorks0bixq", "education", "awards", "certifications"], []], + [ + ["skills", "interests", "publications", "volunteer", "languages", "projects", "references"], + [], + ], + ], + css: { + value: ".section {\n\toutline: 1px solid #000;\n\toutline-offset: 4px;\n}", + visible: false, + }, + page: { + margin: 18, + format: "a4", + options: { + breakLine: true, + pageNumbers: true, + }, + }, + theme: { + background: "#ffffff", + text: "#000000", + primary: "#000000", + }, + typography: { + font: { + family: "IBM Plex Serif", + subset: "latin", + variants: ["regular", "italic", "600", "600italic"], + size: 14, + }, + lineHeight: 1.5, + underlineLinks: true, + }, + }, +}; diff --git a/apps/client/src/pages/dashboard/resumes/_dialogs/resume.tsx b/apps/client/src/pages/dashboard/resumes/_dialogs/resume.tsx index 6ff20f989..df1afe4e6 100644 --- a/apps/client/src/pages/dashboard/resumes/_dialogs/resume.tsx +++ b/apps/client/src/pages/dashboard/resumes/_dialogs/resume.tsx @@ -1,5 +1,5 @@ import { zodResolver } from "@hookform/resolvers/zod"; -import { MagicWand, Plus } from "@phosphor-icons/react"; +import { CaretDown, MagicWand, Plus, TestTube } from "@phosphor-icons/react"; import { createResumeSchema, ResumeDto } from "@reactive-resume/dto"; import { idSchema } from "@reactive-resume/schema"; import { @@ -18,6 +18,10 @@ import { DialogFooter, DialogHeader, DialogTitle, + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, Form, FormControl, FormDescription, @@ -34,6 +38,7 @@ import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; +import { sampleResume } from "@/client/constants/sample-resume"; import { useToast } from "@/client/hooks/use-toast"; import { useCreateResume, useDeleteResume, useUpdateResume } from "@/client/services/resume"; import { useImportResume } from "@/client/services/resume/import"; @@ -135,6 +140,19 @@ export const ResumeDialog = () => { form.setValue("slug", kebabCase(name)); }; + const onCreateSample = async () => { + const randomName = generateRandomName(); + const { title, slug } = form.getValues(); + + await duplicateResume({ + title: title || randomName, + slug: slug || kebabCase(randomName), + data: sampleResume, + }); + + close(); + }; + if (isDelete) { return ( @@ -233,11 +251,26 @@ export const ResumeDialog = () => { /> - +
+ + + + + + + + + Create Sample Resume + + + +
diff --git a/apps/server/src/printer/printer.service.ts b/apps/server/src/printer/printer.service.ts index 2641c4d17..724484c14 100644 --- a/apps/server/src/printer/printer.service.ts +++ b/apps/server/src/printer/printer.service.ts @@ -17,7 +17,6 @@ import { StorageService } from "../storage/storage.service"; import { UtilsService } from "../utils/utils.service"; const MM_TO_PX = 3.78; -const PREVIEW_TIMEOUT = 5000; // 5 seconds const PRINTER_TIMEOUT = 10000; // 10 seconds @Injectable() @@ -81,7 +80,7 @@ export class PrinterService { return this.utils.getCachedOrSet( `user:${resume.userId}:storage:previews:${resume.id}`, async () => { - return withTimeout(this.generatePreview(resume), PREVIEW_TIMEOUT); + return withTimeout(this.generatePreview(resume), PRINTER_TIMEOUT); }, ); } diff --git a/libs/templates/src/templates/rhyhorn/style.ts b/libs/templates/src/templates/rhyhorn/style.ts index 28052d9aa..8173408f2 100644 --- a/libs/templates/src/templates/rhyhorn/style.ts +++ b/libs/templates/src/templates/rhyhorn/style.ts @@ -27,7 +27,7 @@ export const RhyhornStyles = styled.div` span { padding: 0 6px; - border-right: 2px solid var(--color-primary); + border-right: 1px solid var(--color-primary); &:first-child { padding-left: 0; diff --git a/package.json b/package.json index f2f61b1c7..b0eb7b783 100644 --- a/package.json +++ b/package.json @@ -201,7 +201,7 @@ "nestjs-prisma": "^0.22.0", "nestjs-zod": "^3.0.0", "nodemailer": "^6.9.7", - "openai": "^4.15.3", + "openai": "^4.15.4", "otplib": "^12.0.1", "papaparse": "^5.4.1", "passport": "^0.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d201121fb..616c0423e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -264,8 +264,8 @@ dependencies: specifier: ^6.9.7 version: 6.9.7 openai: - specifier: ^4.15.3 - version: 4.15.3 + specifier: ^4.15.4 + version: 4.15.4 otplib: specifier: ^12.0.1 version: 12.0.1 @@ -15397,8 +15397,8 @@ packages: is-wsl: 2.2.0 dev: true - /openai@4.15.3: - resolution: {integrity: sha512-j2XSxxiOhF7lCiHUXmuDOGOgtKa36ia9pOQ2m9YCOMA2Ee4QTI+MzdHRoHlp6ewOsvW5NXkoT+xustSZljiGnA==} + /openai@4.15.4: + resolution: {integrity: sha512-EnlSl1p8n7Q/HnBf4+VOEcYloBKKe23sKOFfH/WJcw+XVyWav4lwDK4wCmsUY1wS4RFOdbA2EwBUB2p5WEPmoQ==} hasBin: true dependencies: '@types/node': 18.18.8