From 0bfe88ddf23648a48a368d616b9039ad9d466693 Mon Sep 17 00:00:00 2001 From: Ivan Dimitrov Date: Mon, 13 Nov 2023 13:33:50 +0200 Subject: [PATCH] GG --- .gitignore | 1 + README.md | 15 ++++ bun.lockb | Bin 29215 -> 59464 bytes cv.tsx | 213 ++++++++++++++++++++++++++++++++++++++++++++------ flake.nix | 14 +++- index.ts | 1 + package.json | 19 ++++- tsconfig.json | 22 ++++++ 8 files changed, 260 insertions(+), 25 deletions(-) create mode 100644 README.md create mode 100644 index.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore index b00b59b..279a3a5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules outputs +pid diff --git a/README.md b/README.md new file mode 100644 index 0000000..eb7b0fa --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# react-cv + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.0.7. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/bun.lockb b/bun.lockb index a2a457d83da63f2bb778c46a25f3260da5e0c093..d2fcec40612684bd6acd348e7ee7af3bca582b3c 100755 GIT binary patch literal 59464 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 ( +const link = "no-underline text-red-50" +const section = "w-full flex flex-col m-4" + +const divider = + + + + + +const github = + github/ivandimitrov8080 +const upwork = + upwork/freelancers/idimitrov +const resume = + idimitrov.dev +const email = + ivan@idimitrov.dev + +const tech = { + android: [ + "Android", + "Android Studio", + ], + java: [ + "Java", + "JPA", + "Hibernate", + "Spring Framework", + "Spring Boot", + "Lombok", + "Spring MVC", + "Thymeleaf", + "JSP", + "JSTL", + "XML", + "Spring Security", + "OAuth2", + "H2", + "Spring Boot Actuator", + ], + web: [ + "JavaScript", + "TypeScript", + "React", + "HTML", + "CSS" + ], + api: [ + "REST", + "SOAP", + ], + db: [ + "MySQL", + "PostgreSQL" + ], + linux: [ + "Linux", + "Bash", + "coreutils", + "Ubuntu", + "CentOS", + "RHEL", + "SSH", + "iptables", + "systemd", + "vim", + "Monit", + "CLI", + ], + hybris: [ + "SAP hybris", + "ZK Framework", + ], + payment: [ + "PayPal", + "Adyen", + "V12", + "Wells Fargo Open Banking APIs", + ] +} + +const techKeys = [...Object.keys(tech)] as const + +const cnetTech: string[] = techKeys + .filter(e => !e.includes("hybris")) + .filter(e => !e.includes("payment")) + // @ts-ignore + .map(e => tech[e]).flat() +const raTech: string[] = techKeys + // @ts-ignore + .map(e => tech[e]).flat() + + +const experience = ({ + company, + position, + location, + from, + to, + description, + technologies +}: Experience) => ( + + + {position} + at + {company}, {location} + from + {from.toDateString()} + to + {to.toDateString()} + + + {description} + + + {technologies.map(t => ( + + + {t} + + ))} + + +) + +const Links = () => ( + + {github} + {upwork} + {email} + {resume} + +) + +const Experience = () => ( + + Experience + {experience({ + company: "Central Net", + position: "Software Developer", + location: "Blagoevgrad, Bulgaria", + from: new Date("May 2016"), + to: new Date("May 2020"), + description: "Developed a full-stack web app helping students book exams, browse resources, see events, news and more.", + technologies: cnetTech + })} + {experience({ + company: "RA Creative", + position: "Software Developer", + location: "Nottingham, UK", + from: new Date("Dec 2020"), + to: new Date("20 Jan 2023"), + description: "Worked on seven international eCommerce web apps serving customers in the US and Europe.", + technologies: raTech + })} + +) + +const Intro = () => ( + + Ivan K. Dimitrov + Software Developer + + +) + +const CV = () => ( - - - Section #1 - - - Section #2 - + + + {divider} + ); @@ -35,5 +202,5 @@ if (!fs.existsSync(outDir)) { fs.mkdirSync(outDir, { recursive: true }) } -ReactPDF.render(, `${outDir}/${pname}.pdf`); +ReactPDF.render(, `${outDir}/${pname}.pdf`); diff --git a/flake.nix b/flake.nix index d7d6455..2214524 100644 --- a/flake.nix +++ b/flake.nix @@ -22,11 +22,23 @@ nativeBuildInputs = with pkgs; [ nodejs_20 bun + inotify-tools ]; + shellHook = '' + echo "$$" > ./pid + monitor() { + while true; do + inotifywait -e modify ${pname}.tsx > /dev/null 2>&1 + make + pkill -HUP mupdf + done + } + monitor > /dev/null 2>&1 & + ''; in { devShells.default = pkgs.mkShell { - inherit pname buildInputs nativeBuildInputs; + inherit pname buildInputs nativeBuildInputs shellHook; }; packages.default = pkgs.stdenv.mkDerivation { inherit buildInputs nativeBuildInputs pname version src; diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..f67b2c6 --- /dev/null +++ b/index.ts @@ -0,0 +1 @@ +console.log("Hello via Bun!"); \ No newline at end of file diff --git a/package.json b/package.json index a19f289..f67494e 100644 --- a/package.json +++ b/package.json @@ -1 +1,18 @@ -{ "dependencies": { "@react-pdf/renderer": "^3.1.14", "@types/node": "^20.9.0", "@types/react": "^18.2.37", "react": "^18.2.0" } } \ No newline at end of file +{ + "name": "cv", + "module": "cv.tsx", + "type": "module", + "devDependencies": { + "bun-types": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "dependencies": { + "@react-pdf/renderer": "^3.1.14", + "@types/node": "^20.9.0", + "@types/react": "^18.2.37", + "react": "^18.2.0", + "react-pdf-tailwind": "^2.1.0" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7556e1d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "allowImportingTsExtensions": true, + "noEmit": true, + "composite": true, + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "jsx": "react-jsx", + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "types": [ + "bun-types" // add Bun global + ] + } +}