mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-12 07:43:10 +10:00
Compare commits
17 Commits
v4.5.1
...
c28bd3cd59
| Author | SHA1 | Date | |
|---|---|---|---|
| c28bd3cd59 | |||
| 6fcb7a4845 | |||
| 213f96b189 | |||
| e8d6d4ad3a | |||
| 87370cfdf0 | |||
| 112a644927 | |||
| 2977e3528a | |||
| 21fd079f94 | |||
| 9bdc61b50d | |||
| 2de24d5b55 | |||
| 1cba9d0fb9 | |||
| 8f532bf4a6 | |||
| 4efdabd475 | |||
| 8803101dcd | |||
| a4a9381b65 | |||
| 618d42019e | |||
| 313fe47050 |
22
README.md
22
README.md
@ -37,17 +37,21 @@ Start creating your standout resume with Reactive Resume today!
|
||||
|
||||
## Templates
|
||||
|
||||
| Azurill | Bronzor | Chikorita |
|
||||
| ------------------------------------------------------------ | ----------------------------------------------------------- | ----------------------------------------------------------- |
|
||||
| <img src="https://i.imgur.com/jKgo04C.jpeg" width="200px" /> | <img src="https://i.imgur.com/DFNQZP2.jpg" width="200px" /> | <img src="https://i.imgur.com/Dwv8Y7f.jpg" width="200px" /> |
|
||||
| Azurill | Bronzor | Chikorita |
|
||||
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------- |
|
||||
| <img src="./apps/client/public/templates/jpg/azurill.jpg" width="200px" /> | <img src="./apps/client/public/templates/jpg/bronzor.jpg" width="200px" /> | <img src="./apps/client/public/templates/jpg/chikorita.jpg" width="200px" /> |
|
||||
|
||||
| Ditto | Kakuna | Nosepass |
|
||||
| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- |
|
||||
| <img src="https://i.imgur.com/6c5lASL.jpg" width="200px" /> | <img src="https://i.imgur.com/268ML3t.jpg" width="200px" /> | <img src="https://i.imgur.com/npRLsPS.jpg" width="200px" /> |
|
||||
| Ditto | Gengar | Glalie |
|
||||
| -------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
||||
| <img src="./apps/client/public/templates/jpg/ditto.jpg" width="200px" /> | <img src="./apps/client/public/templates/jpg/gengar.jpg" width="200px" /> | <img src="./apps/client/public/templates/jpg/glalie.jpg" width="200px" /> |
|
||||
|
||||
| Onyx | Pikachu | Rhyhorn |
|
||||
| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- |
|
||||
| <img src="https://i.imgur.com/cxplXOW.jpg" width="200px" /> | <img src="https://i.imgur.com/Y9f7qsh.jpg" width="200px" /> | <img src="https://i.imgur.com/h4kQxy2.jpg" width="200px" /> |
|
||||
| Kakuna | Leafish | Nosepass |
|
||||
| ---------------------------------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------ |
|
||||
| <img src="./apps/client/public/templates/jpg/kakuna.jpg" width="200px" /> | <img src="./apps/client/public/templates/jpg/leafish.jpg" width="200px" /> | <img src="./apps/client/public/templates/jpg/nosepass.jpg" width="200px" /> |
|
||||
|
||||
| Onyx | Pikachu | Rhyhorn |
|
||||
| ------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- |
|
||||
| <img src="./apps/client/public/templates/jpg/onyx.jpg" width="200px" /> | <img src="./apps/client/public/templates/jpg/pikachu.jpg" width="200px" /> | <img src="./apps/client/public/templates/jpg/rhyhorn.jpg" width="200px" /> |
|
||||
|
||||
## Features
|
||||
|
||||
|
||||
@ -531,6 +531,11 @@ const mapSectionToComponent = (section: SectionKey) => {
|
||||
case "education": {
|
||||
return <Education />;
|
||||
}
|
||||
|
||||
case "summary": {
|
||||
return <Summary />;
|
||||
}
|
||||
|
||||
case "awards": {
|
||||
return <Awards />;
|
||||
}
|
||||
@ -592,8 +597,6 @@ export const Gengar = ({ columns, isFirstPage = false }: TemplateProps) => {
|
||||
</div>
|
||||
|
||||
<div className={cn("main group", sidebar.length > 0 ? "col-span-2" : "col-span-3")}>
|
||||
{isFirstPage && <Summary />}
|
||||
|
||||
<div className="p-custom space-y-4">
|
||||
{main.map((section) => (
|
||||
<Fragment key={section}>{mapSectionToComponent(section)}</Fragment>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -139,8 +139,6 @@ export class PrinterService {
|
||||
page.waitForSelector('[data-page="1"]', { timeout: 15_000 }),
|
||||
]);
|
||||
|
||||
await page.waitForNetworkIdle({ idleTime: 500, timeout: 15_000 });
|
||||
|
||||
const pagesBuffer: Buffer[] = [];
|
||||
|
||||
const processPage = async (index: number) => {
|
||||
|
||||
@ -151,6 +151,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("bold")}
|
||||
disabled={!editor.can().chain().toggleBold().run()}
|
||||
data-state={editor.isActive("bold") ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleBold().run()}
|
||||
>
|
||||
<TextBIcon />
|
||||
@ -163,6 +164,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("italic")}
|
||||
disabled={!editor.can().chain().focus().toggleItalic().run()}
|
||||
data-state={editor.isActive("italic") ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleItalic().run()}
|
||||
>
|
||||
<TextItalicIcon />
|
||||
@ -175,6 +177,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("strike")}
|
||||
disabled={!editor.can().chain().focus().toggleStrike().run()}
|
||||
data-state={editor.isActive("strike") ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleStrike().run()}
|
||||
>
|
||||
<TextStrikethroughIcon />
|
||||
@ -187,6 +190,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("underline")}
|
||||
disabled={!editor.can().chain().focus().toggleUnderline().run()}
|
||||
data-state={editor.isActive("underline") ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleUnderline().run()}
|
||||
>
|
||||
<TextAUnderlineIcon />
|
||||
@ -199,6 +203,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("highlight")}
|
||||
disabled={!editor.can().chain().focus().toggleHighlight().run()}
|
||||
data-state={editor.isActive("highlight") ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleHighlight().run()}
|
||||
>
|
||||
<HighlighterCircleIcon />
|
||||
@ -217,6 +222,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("code")}
|
||||
disabled={!editor.can().chain().focus().toggleCode().run()}
|
||||
data-state={editor.isActive("code") ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleCode().run()}
|
||||
>
|
||||
<CodeIconImport />
|
||||
@ -229,6 +235,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("codeBlock")}
|
||||
disabled={!editor.can().chain().focus().toggleCodeBlock().run()}
|
||||
data-state={editor.isActive("codeBlock") ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleCodeBlock().run()}
|
||||
>
|
||||
<CodeBlockIconImport />
|
||||
@ -241,6 +248,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("heading", { level: 1 })}
|
||||
disabled={!editor.can().chain().focus().toggleHeading({ level: 1 }).run()}
|
||||
data-state={editor.isActive("heading", { level: 1 }) ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}
|
||||
>
|
||||
<TextHOneIcon />
|
||||
@ -253,6 +261,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("heading", { level: 2 })}
|
||||
disabled={!editor.can().chain().focus().toggleHeading({ level: 2 }).run()}
|
||||
data-state={editor.isActive("heading", { level: 2 }) ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}
|
||||
>
|
||||
<TextHTwoIcon />
|
||||
@ -265,6 +274,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("heading", { level: 3 })}
|
||||
disabled={!editor.can().chain().focus().toggleHeading({ level: 3 }).run()}
|
||||
data-state={editor.isActive("heading", { level: 3 }) ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleHeading({ level: 3 }).run()}
|
||||
>
|
||||
<TextHThreeIcon />
|
||||
@ -276,6 +286,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
size="sm"
|
||||
type="button"
|
||||
pressed={editor.isActive("paragraph")}
|
||||
data-state={editor.isActive("paragraph") ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().setParagraph().run()}
|
||||
>
|
||||
<ParagraphIconImport />
|
||||
@ -288,6 +299,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive({ textAlign: "left" })}
|
||||
disabled={!editor.can().chain().focus().setTextAlign("left").run()}
|
||||
data-state={editor.isActive({ textAlign: "left" }) ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().setTextAlign("left").run()}
|
||||
>
|
||||
<TextAlignLeftIcon />
|
||||
@ -300,6 +312,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive({ textAlign: "center" })}
|
||||
disabled={!editor.can().chain().focus().setTextAlign("center").run()}
|
||||
data-state={editor.isActive({ textAlign: "center" }) ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().setTextAlign("center").run()}
|
||||
>
|
||||
<TextAlignCenterIcon />
|
||||
@ -312,6 +325,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive({ textAlign: "right" })}
|
||||
disabled={!editor.can().chain().focus().setTextAlign("right").run()}
|
||||
data-state={editor.isActive({ textAlign: "right" }) ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().setTextAlign("right").run()}
|
||||
>
|
||||
<TextAlignRightIcon />
|
||||
@ -324,6 +338,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive({ textAlign: "justify" })}
|
||||
disabled={!editor.can().chain().focus().setTextAlign("justify").run()}
|
||||
data-state={editor.isActive({ textAlign: "justify" }) ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().setTextAlign("justify").run()}
|
||||
>
|
||||
<TextAlignJustifyIcon />
|
||||
@ -336,6 +351,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("bulletList")}
|
||||
disabled={!editor.can().chain().focus().toggleBulletList().run()}
|
||||
data-state={editor.isActive("bulletList") ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleBulletList().run()}
|
||||
>
|
||||
<ListBulletsIcon />
|
||||
@ -348,6 +364,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
|
||||
type="button"
|
||||
pressed={editor.isActive("orderedList")}
|
||||
disabled={!editor.can().chain().focus().toggleOrderedList().run()}
|
||||
data-state={editor.isActive("orderedList") ? "on" : "off"}
|
||||
onPressedChange={() => editor.chain().focus().toggleOrderedList().run()}
|
||||
>
|
||||
<ListNumbersIcon />
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@reactive-resume/source",
|
||||
"description": "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume.",
|
||||
"version": "4.5.1",
|
||||
"version": "4.5.2",
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
"packageManager": "pnpm@10.18.1",
|
||||
@ -211,7 +211,7 @@
|
||||
"nestjs-minio-client": "^2.2.0",
|
||||
"nestjs-prisma": "^0.26.0",
|
||||
"nestjs-zod": "^3.0.0",
|
||||
"nodemailer": "^6.10.1",
|
||||
"nodemailer": "^7.0.7",
|
||||
"openai": "^4.104.0",
|
||||
"otplib": "^12.0.1",
|
||||
"papaparse": "^5.5.3",
|
||||
|
||||
38
pnpm-lock.yaml
generated
38
pnpm-lock.yaml
generated
@ -40,7 +40,7 @@ importers:
|
||||
version: 4.14.1(react@18.3.1)
|
||||
'@nestjs-modules/mailer':
|
||||
specifier: ^2.0.2
|
||||
version: 2.0.2(@nestjs/common@10.4.20(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)(nodemailer@6.10.1)
|
||||
version: 2.0.2(@nestjs/common@10.4.20(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)(nodemailer@7.0.7)
|
||||
'@nestjs/axios':
|
||||
specifier: ^3.1.3
|
||||
version: 3.1.3(@nestjs/common@10.4.20(reflect-metadata@0.2.2)(rxjs@7.8.2))(axios@1.12.2)(rxjs@7.8.2)
|
||||
@ -264,8 +264,8 @@ importers:
|
||||
specifier: ^3.0.0
|
||||
version: 3.0.0(@nestjs/common@10.4.20(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)(@nestjs/swagger@7.4.2(@nestjs/common@10.4.20(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)(reflect-metadata@0.2.2))(zod@3.25.76)
|
||||
nodemailer:
|
||||
specifier: ^6.10.1
|
||||
version: 6.10.1
|
||||
specifier: ^7.0.7
|
||||
version: 7.0.7
|
||||
openai:
|
||||
specifier: ^4.104.0
|
||||
version: 4.104.0(ws@8.18.0)(zod@3.25.76)
|
||||
@ -9028,6 +9028,10 @@ packages:
|
||||
resolution: {integrity: sha512-9O00Vh89/Ld2EcVCqJ/etd7u20UhME0f/NToPfArwPEe1Don1zy4mAIz6ariRr7mJ2RDxtaDzN0WJVdVXPtZaw==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
||||
nodemailer@7.0.7:
|
||||
resolution: {integrity: sha512-jGOaRznodf62TVzdyhKt/f1Q/c3kYynk8629sgJHpRzGZj01ezbgMMWJSAjHADcwTKxco3B68/R+KHJY2T5BaA==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
||||
nopt@7.2.1:
|
||||
resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
|
||||
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
|
||||
@ -10019,7 +10023,7 @@ packages:
|
||||
puppeteer@23.11.1:
|
||||
resolution: {integrity: sha512-53uIX3KR5en8l7Vd8n5DUv90Ae9QDQsyIthaUFVzwV6yU750RjqRznEtNMBT20VthqAdemnJN+hxVdmMHKt7Zw==}
|
||||
engines: {node: '>=18'}
|
||||
deprecated: < 24.10.2 is no longer supported
|
||||
deprecated: < 24.15.0 is no longer supported
|
||||
hasBin: true
|
||||
|
||||
pure-rand@6.1.0:
|
||||
@ -10497,6 +10501,11 @@ packages:
|
||||
engines: {node: '>=10'}
|
||||
hasBin: true
|
||||
|
||||
semver@7.7.3:
|
||||
resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
|
||||
engines: {node: '>=10'}
|
||||
hasBin: true
|
||||
|
||||
send@0.19.0:
|
||||
resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@ -14247,13 +14256,13 @@ snapshots:
|
||||
'@tybys/wasm-util': 0.10.1
|
||||
optional: true
|
||||
|
||||
'@nestjs-modules/mailer@2.0.2(@nestjs/common@10.4.20(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)(nodemailer@6.10.1)':
|
||||
'@nestjs-modules/mailer@2.0.2(@nestjs/common@10.4.20(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)(nodemailer@7.0.7)':
|
||||
dependencies:
|
||||
'@css-inline/css-inline': 0.14.1
|
||||
'@nestjs/common': 10.4.20(reflect-metadata@0.2.2)(rxjs@7.8.2)
|
||||
'@nestjs/core': 10.4.20(@nestjs/common@10.4.20(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.2)
|
||||
glob: 10.3.12
|
||||
nodemailer: 6.10.1
|
||||
nodemailer: 7.0.7
|
||||
optionalDependencies:
|
||||
'@types/ejs': 3.1.5
|
||||
'@types/mjml': 4.7.4
|
||||
@ -15206,7 +15215,7 @@ snapshots:
|
||||
'@opentelemetry/core': 1.24.1(@opentelemetry/api@1.9.0)
|
||||
'@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.9.0)
|
||||
'@opentelemetry/semantic-conventions': 1.24.1
|
||||
semver: 7.7.2
|
||||
semver: 7.7.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@ -15291,7 +15300,7 @@ snapshots:
|
||||
'@types/shimmer': 1.2.0
|
||||
import-in-the-middle: 1.4.2
|
||||
require-in-the-middle: 7.5.2
|
||||
semver: 7.7.2
|
||||
semver: 7.7.3
|
||||
shimmer: 1.2.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@ -15304,7 +15313,7 @@ snapshots:
|
||||
'@types/shimmer': 1.2.0
|
||||
import-in-the-middle: 1.7.1
|
||||
require-in-the-middle: 7.5.2
|
||||
semver: 7.7.2
|
||||
semver: 7.7.3
|
||||
shimmer: 1.2.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@ -15316,7 +15325,7 @@ snapshots:
|
||||
'@types/shimmer': 1.2.0
|
||||
import-in-the-middle: 1.7.4
|
||||
require-in-the-middle: 7.5.2
|
||||
semver: 7.7.2
|
||||
semver: 7.7.3
|
||||
shimmer: 1.2.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@ -22510,11 +22519,14 @@ snapshots:
|
||||
long-timeout: 0.1.1
|
||||
sorted-array-functions: 1.3.0
|
||||
|
||||
nodemailer@6.10.1: {}
|
||||
nodemailer@6.10.1:
|
||||
optional: true
|
||||
|
||||
nodemailer@7.0.4:
|
||||
optional: true
|
||||
|
||||
nodemailer@7.0.7: {}
|
||||
|
||||
nopt@7.2.1:
|
||||
dependencies:
|
||||
abbrev: 2.0.0
|
||||
@ -24132,6 +24144,8 @@ snapshots:
|
||||
|
||||
semver@7.7.2: {}
|
||||
|
||||
semver@7.7.3: {}
|
||||
|
||||
send@0.19.0:
|
||||
dependencies:
|
||||
debug: 2.6.9
|
||||
@ -25341,7 +25355,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@volar/typescript': 2.4.23
|
||||
'@vue/language-core': 2.0.29(typescript@5.9.3)
|
||||
semver: 7.7.2
|
||||
semver: 7.7.3
|
||||
typescript: 5.9.3
|
||||
optional: true
|
||||
|
||||
|
||||
Reference in New Issue
Block a user