Merge remote-tracking branch 'origin/main' into feature

This commit is contained in:
Amruth Pillai
2025-11-04 14:39:50 +01:00
10 changed files with 1618 additions and 1446 deletions

View File

@ -0,0 +1 @@
https://rxresu.me/funding.json

View File

@ -38,9 +38,6 @@ jobs:
- name: Lint - name: Lint
run: pnpm run lint run: pnpm run lint
- name: Format
run: pnpm run format
- name: Test - name: Test
run: pnpm run test run: pnpm run test

View File

@ -0,0 +1,68 @@
{
"$schema": "https://fundingjson.org/schema/v1.0.0/funding.schema.json",
"version": "v1.0.0",
"entity": {
"type": "individual",
"role": "maintainer",
"name": "Amruth Pillai",
"email": "im.amruth@gmail.com",
"description": "Software Engineer",
"webpageUrl": {
"url": "https://rxresu.me/funding.json"
}
},
"projects": [
{
"guid": "reactive-resume",
"name": "Reactive Resume",
"description": "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume.",
"webpageUrl": {
"url": "https://rxresu.me"
},
"repositoryUrl": {
"url": "https://github.com/AmruthPillai/Reactive-Resume",
"wellKnown": "https://github.com/AmruthPillai/Reactive-Resume/blob/main/.github/.well-known/funding-manifest-urls"
},
"licenses": ["spdx:MIT"],
"tags": ["data", "design", "productivity", "resume-builder"]
}
],
"funding": {
"plans": [
{
"guid": "sponsor",
"status": "active",
"name": "Sponsor",
"description": "Support the project on a recurring basis by becoming a sponsor.",
"amount": 10,
"currency": "EUR",
"frequency": "monthly",
"channels": ["github", "open-collective"]
},
{
"guid": "donation",
"status": "active",
"name": "Donation",
"description": "Show your support for the project by making a one-time donation.",
"amount": 0,
"currency": "EUR",
"frequency": "one-time",
"channels": ["github", "open-collective"]
}
],
"channels": [
{
"guid": "github",
"type": "payment-provider",
"description": "GitHub Sponsors",
"address": "https://github.com/sponsors/AmruthPillai"
},
{
"guid": "open-collective",
"type": "payment-provider",
"description": "Open Collective",
"address": "https://opencollective.com/reactive-resume"
}
]
}
}

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@ import { ResumeDto } from "@reactive-resume/dto";
import { ErrorMessage } from "@reactive-resume/utils"; import { ErrorMessage } from "@reactive-resume/utils";
import retry from "async-retry"; import retry from "async-retry";
import { PDFDocument } from "pdf-lib"; import { PDFDocument } from "pdf-lib";
import { connect } from "puppeteer"; import { connect } from "puppeteer-core";
import { Config } from "../config/schema"; import { Config } from "../config/schema";
import { StorageService } from "../storage/storage.service"; import { StorageService } from "../storage/storage.service";

1
funding.json Symbolic link
View File

@ -0,0 +1 @@
apps/client/public/funding.json

View File

@ -210,6 +210,8 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
</Toggle> </Toggle>
</Tooltip> </Tooltip>
<div className="my-auto h-5 w-px bg-border" />
<Tooltip content="Hyperlink"> <Tooltip content="Hyperlink">
<Button type="button" size="sm" variant="ghost" className="px-2" onClick={setLink}> <Button type="button" size="sm" variant="ghost" className="px-2" onClick={setLink}>
<LinkSimpleIcon /> <LinkSimpleIcon />
@ -242,6 +244,8 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
</Toggle> </Toggle>
</Tooltip> </Tooltip>
<div className="my-auto h-5 w-px bg-border" />
<Tooltip content="Heading 1"> <Tooltip content="Heading 1">
<Toggle <Toggle
size="sm" size="sm"
@ -293,6 +297,8 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
</Toggle> </Toggle>
</Tooltip> </Tooltip>
<div className="my-auto h-5 w-px bg-border" />
<Tooltip content="Align Left"> <Tooltip content="Align Left">
<Toggle <Toggle
size="sm" size="sm"
@ -345,6 +351,8 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
</Toggle> </Toggle>
</Tooltip> </Tooltip>
<div className="my-auto h-5 w-px bg-border" />
<Tooltip content="Bullet List"> <Tooltip content="Bullet List">
<Toggle <Toggle
size="sm" size="sm"
@ -397,6 +405,8 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
</Button> </Button>
</Tooltip> </Tooltip>
<div className="my-auto h-5 w-px bg-border" />
<Popover> <Popover>
<Tooltip content="Insert Image"> <Tooltip content="Insert Image">
<PopoverTrigger asChild> <PopoverTrigger asChild>
@ -436,6 +446,8 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
</Button> </Button>
</Tooltip> </Tooltip>
<div className="my-auto h-5 w-px bg-border" />
<Tooltip content="Undo"> <Tooltip content="Undo">
<Button <Button
size="sm" size="sm"

View File

@ -1,10 +1,10 @@
{ {
"name": "@reactive-resume/source", "name": "@reactive-resume/source",
"description": "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume.", "description": "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume.",
"version": "4.5.2", "version": "4.5.3",
"license": "MIT", "license": "MIT",
"private": true, "private": true,
"packageManager": "pnpm@10.18.1", "packageManager": "pnpm@10.20.0",
"author": { "author": {
"name": "Amruth Pillai", "name": "Amruth Pillai",
"url": "https://amruthpillai.com", "url": "https://amruthpillai.com",
@ -23,8 +23,6 @@
"start": "node dist/apps/server/main", "start": "node dist/apps/server/main",
"lint": "nx run-many -t lint", "lint": "nx run-many -t lint",
"lint:fix": "nx run-many -t lint --fix", "lint:fix": "nx run-many -t lint --fix",
"format": "pnpm exec prettier -c --log-level error .",
"format:fix": "pnpm exec prettier -w --log-level error .",
"crowdin:sync": "crowdin push && crowdin pull", "crowdin:sync": "crowdin push && crowdin pull",
"prisma:generate": "pnpm exec prisma generate", "prisma:generate": "pnpm exec prisma generate",
"prisma:migrate": "pnpm exec prisma migrate deploy", "prisma:migrate": "pnpm exec prisma migrate deploy",
@ -32,8 +30,8 @@
"messages:extract": "pnpm exec lingui extract --clean --overwrite" "messages:extract": "pnpm exec lingui extract --clean --overwrite"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.28.4", "@babel/core": "^7.28.5",
"@babel/preset-react": "^7.27.1", "@babel/preset-react": "^7.28.5",
"@lingui/cli": "^4.14.1", "@lingui/cli": "^4.14.1",
"@lingui/conf": "^4.14.1", "@lingui/conf": "^4.14.1",
"@lingui/swc-plugin": "^4.1.0", "@lingui/swc-plugin": "^4.1.0",
@ -57,13 +55,13 @@
"@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/container-queries": "^0.1.1",
"@tailwindcss/forms": "^0.5.10", "@tailwindcss/forms": "^0.5.10",
"@tailwindcss/typography": "^0.5.19", "@tailwindcss/typography": "^0.5.19",
"@tanstack/eslint-plugin-query": "^5.91.0", "@tanstack/eslint-plugin-query": "^5.91.2",
"@testing-library/react": "^16.3.0", "@testing-library/react": "^16.3.0",
"@tiptap/core": "^2.26.2", "@tiptap/core": "^2.27.1",
"@types/async-retry": "^1.4.9", "@types/async-retry": "^1.4.9",
"@types/bcryptjs": "^2.4.6", "@types/bcryptjs": "^2.4.6",
"@types/cookie-parser": "^1.4.9", "@types/cookie-parser": "^1.4.10",
"@types/express": "^4.17.23", "@types/express": "^4.17.25",
"@types/express-session": "^1.18.2", "@types/express-session": "^1.18.2",
"@types/file-saver": "^2.0.7", "@types/file-saver": "^2.0.7",
"@types/jest": "^29.5.14", "@types/jest": "^29.5.14",
@ -71,12 +69,12 @@
"@types/lodash.get": "^4.4.9", "@types/lodash.get": "^4.4.9",
"@types/lodash.set": "^4.3.9", "@types/lodash.set": "^4.3.9",
"@types/multer": "^1.4.13", "@types/multer": "^1.4.13",
"@types/node": "^22.18.8", "@types/node": "^22.19.0",
"@types/nodemailer": "^6.4.20", "@types/nodemailer": "^6.4.21",
"@types/papaparse": "^5.3.16", "@types/papaparse": "^5.3.16",
"@types/passport": "^1.0.17", "@types/passport": "^1.0.17",
"@types/passport-github2": "^1.2.9", "@types/passport-github2": "^1.2.9",
"@types/passport-google-oauth20": "^2.0.16", "@types/passport-google-oauth20": "^2.0.17",
"@types/passport-local": "^1.0.38", "@types/passport-local": "^1.0.38",
"@types/passport-openidconnect": "^0.1.3", "@types/passport-openidconnect": "^0.1.3",
"@types/prismjs": "^1.26.5", "@types/prismjs": "^1.26.5",
@ -86,8 +84,8 @@
"@types/retry": "^0.12.5", "@types/retry": "^0.12.5",
"@types/sanitize-html": "^2.16.0", "@types/sanitize-html": "^2.16.0",
"@types/webfontloader": "^1.6.38", "@types/webfontloader": "^1.6.38",
"@typescript-eslint/eslint-plugin": "^8.46.0", "@typescript-eslint/eslint-plugin": "^8.46.3",
"@typescript-eslint/parser": "^8.46.0", "@typescript-eslint/parser": "^8.46.3",
"@vitejs/plugin-react": "^4.7.0", "@vitejs/plugin-react": "^4.7.0",
"@vitejs/plugin-react-swc": "^3.11.0", "@vitejs/plugin-react-swc": "^3.11.0",
"@vitest/coverage-v8": "^2.1.9", "@vitest/coverage-v8": "^2.1.9",
@ -114,14 +112,14 @@
"postcss-import": "^16.1.1", "postcss-import": "^16.1.1",
"postcss-nested": "^6.2.0", "postcss-nested": "^6.2.0",
"prettier": "^3.6.2", "prettier": "^3.6.2",
"prettier-plugin-tailwindcss": "^0.6.14", "prettier-plugin-tailwindcss": "^0.7.1",
"tailwindcss": "^3.4.18", "tailwindcss": "^3.4.18",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",
"ts-jest": "^29.4.4", "ts-jest": "^29.4.5",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"turbo": "^2.5.8", "turbo": "^2.6.0",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"vite": "^5.4.20", "vite": "^5.4.21",
"vite-plugin-dts": "^4.5.4", "vite-plugin-dts": "^4.5.4",
"vitest": "^2.1.9" "vitest": "^2.1.9"
}, },
@ -147,7 +145,7 @@
"@nestjs/serve-static": "^4.0.2", "@nestjs/serve-static": "^4.0.2",
"@nestjs/swagger": "^7.4.2", "@nestjs/swagger": "^7.4.2",
"@nestjs/terminus": "^10.3.0", "@nestjs/terminus": "^10.3.0",
"@paralleldrive/cuid2": "^2.2.2", "@paralleldrive/cuid2": "^2.3.1",
"@phosphor-icons/react": "^2.1.10", "@phosphor-icons/react": "^2.1.10",
"@prisma/client": "^5.22.0", "@prisma/client": "^5.22.0",
"@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-accordion": "^1.2.12",
@ -176,32 +174,32 @@
"@radix-ui/react-visually-hidden": "^1.2.3", "@radix-ui/react-visually-hidden": "^1.2.3",
"@sindresorhus/slugify": "^2.2.1", "@sindresorhus/slugify": "^2.2.1",
"@swc/helpers": "^0.5.17", "@swc/helpers": "^0.5.17",
"@tanstack/react-query": "^5.90.2", "@tanstack/react-query": "^5.90.6",
"@tiptap/extension-highlight": "^2.26.2", "@tiptap/extension-highlight": "^2.27.1",
"@tiptap/extension-image": "^2.26.2", "@tiptap/extension-image": "^2.27.1",
"@tiptap/extension-link": "^2.26.2", "@tiptap/extension-link": "^2.27.1",
"@tiptap/extension-text-align": "^2.26.2", "@tiptap/extension-text-align": "^2.27.1",
"@tiptap/extension-underline": "^2.26.2", "@tiptap/extension-underline": "^2.27.1",
"@tiptap/pm": "^2.26.2", "@tiptap/pm": "^2.27.1",
"@tiptap/react": "^2.26.2", "@tiptap/react": "^2.27.1",
"@tiptap/starter-kit": "^2.26.1", "@tiptap/starter-kit": "^2.27.1",
"@types/passport-jwt": "^4.0.1", "@types/passport-jwt": "^4.0.1",
"async-retry": "^1.3.3", "async-retry": "^1.3.3",
"axios": "^1.12.2", "axios": "^1.13.1",
"axios-auth-refresh": "^3.3.6", "axios-auth-refresh": "^3.3.6",
"bcryptjs": "^2.4.3", "bcryptjs": "^2.4.3",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"cmdk": "^1.1.1", "cmdk": "^1.1.1",
"cookie-parser": "^1.4.7", "cookie-parser": "^1.4.7",
"dayjs": "^1.11.18", "dayjs": "^1.11.19",
"deepmerge": "^4.3.1", "deepmerge": "^4.3.1",
"express-session": "^1.18.2", "express-session": "^1.18.2",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"framer-motion": "^11.18.2", "framer-motion": "^11.18.2",
"fuzzy": "^0.1.3", "fuzzy": "^0.1.3",
"helmet": "^7.2.0", "helmet": "^7.2.0",
"immer": "^10.1.3", "immer": "^10.2.0",
"jszip": "^3.10.1", "jszip": "^3.10.1",
"lodash.debounce": "^4.0.8", "lodash.debounce": "^4.0.8",
"lodash.get": "^4.4.2", "lodash.get": "^4.4.2",
@ -211,7 +209,7 @@
"nestjs-minio-client": "^2.2.0", "nestjs-minio-client": "^2.2.0",
"nestjs-prisma": "^0.26.0", "nestjs-prisma": "^0.26.0",
"nestjs-zod": "^3.0.0", "nestjs-zod": "^3.0.0",
"nodemailer": "^7.0.7", "nodemailer": "^7.0.10",
"openai": "^4.104.0", "openai": "^4.104.0",
"otplib": "^12.0.1", "otplib": "^12.0.1",
"papaparse": "^5.5.3", "papaparse": "^5.5.3",
@ -224,16 +222,16 @@
"pdf-lib": "^1.17.1", "pdf-lib": "^1.17.1",
"prisma": "^5.22.0", "prisma": "^5.22.0",
"prismjs": "^1.30.0", "prismjs": "^1.30.0",
"puppeteer": "^23.11.1", "puppeteer-core": "^24.28.0",
"qrcode.react": "^4.2.0", "qrcode.react": "^4.2.0",
"react": "^18.3.1", "react": "^18.3.1",
"react-colorful": "^5.6.1", "react-colorful": "^5.6.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-helmet-async": "^2.0.5", "react-helmet-async": "^2.0.5",
"react-hook-form": "^7.64.0", "react-hook-form": "^7.66.0",
"react-parallax-tilt": "^1.7.310", "react-parallax-tilt": "^1.7.311",
"react-resizable-panels": "^2.1.9", "react-resizable-panels": "^2.1.9",
"react-router": "^7.9.4", "react-router": "^7.9.5",
"react-simple-code-editor": "^0.14.1", "react-simple-code-editor": "^0.14.1",
"react-zoom-pan-pinch": "^3.7.0", "react-zoom-pan-pinch": "^3.7.0",
"reflect-metadata": "^0.2.2", "reflect-metadata": "^0.2.2",
@ -243,7 +241,7 @@
"tailwind-merge": "^2.6.0", "tailwind-merge": "^2.6.0",
"tslib": "^2.8.1", "tslib": "^2.8.1",
"unique-names-generator": "^4.7.1", "unique-names-generator": "^4.7.1",
"use-breakpoint": "^4.0.6", "use-breakpoint": "^4.0.10",
"use-keyboard-shortcut": "^1.1.6", "use-keyboard-shortcut": "^1.1.6",
"usehooks-ts": "^3.1.1", "usehooks-ts": "^3.1.1",
"webfontloader": "^1.6.28", "webfontloader": "^1.6.28",

2331
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -8,5 +8,5 @@ onlyBuiltDependencies:
- nx - nx
- oxc-resolver - oxc-resolver
- prisma - prisma
- puppeteer - puppeteer-core
- sharp - sharp