From 59e5d22a5aa88014db1c6d9b545cad5d543542e1 Mon Sep 17 00:00:00 2001 From: Ivan Dimitrov Date: Wed, 29 Nov 2023 13:06:05 +0200 Subject: [PATCH] new shit --- cv.tsx | 208 ++++++++--------------------------------------------- flake.lock | 24 +++---- tech.ts | 117 ++++++++++++++++++++++++++++++ 3 files changed, 159 insertions(+), 190 deletions(-) create mode 100644 tech.ts diff --git a/cv.tsx b/cv.tsx index 188fbca..4cb4f2e 100644 --- a/cv.tsx +++ b/cv.tsx @@ -25,7 +25,6 @@ type Experience = { from: Date; to: Date; description: string; - technologies: string[]; links?: A[]; feedback?: string; }; @@ -49,124 +48,6 @@ type Certificate = { links?: A[]; }; -const tech = { - android: ["Android", "Android Studio"], - architectures: [ - "Microservices", - "MVC", - "Layered architecture", - "DDD", - "EDA", - "Publish-subscribe", - "Client-server", - "REST", - "Pipes and filters", - ], - java: [ - "Java", - "JPA", - "Hibernate", - "Spring Framework", - "Spring Boot", - "Lombok", - "Spring MVC", - "Thymeleaf", - "JSP", - "JSTL", - "XML", - "Spring Security", - "OAuth2", - "H2", - "Spring Boot Actuator", - "Maven", - "Gradle", - "Ant", - ], - web: ["JavaScript", "HTML", "CSS"], - api: ["REST", "SOAP"], - db: ["MySQL", "PostgreSQL"], - linux: [ - "Linux", - "Bash", - "coreutils", - "Ubuntu", - "CentOS", - "RHEL", - "SSH", - "iptables", - "systemd", - "vim", - "Monit", - "CLI", - "pandoc", - "LUKS", - "hexdump", - "dd", - ], - git: ["git", "GitHub", "GitLab", "BitBucket"], - hybris: ["SAP hybris", "ZK Framework"], - payment: ["PayPal", "Adyen", "V12", "Wells Fargo Open Banking APIs"], - dataIntegration: [ - "Spring Batch", - "Data Pipeline", - "Scriptella", - "Easy Batch", - "GETL", - "Apache Camel", - "Apache Samza", - "Apache Flink", - "Apache Storm", - "Apache Spark", - "Apache NiFi", - ], - python: [ - "python", - "BeautifulSoup4", - "requests", - "pypandoc", - "markdownify", - "html2text", - "Poetry", - ], - javascript: ["TypeScript", "React"], - nextjs: [ - "NextJS 12", - "NextJS 13", - "NextJS 14", - "NextAuth", - "Prisma", - "Vercel", - "Vercel Postgres", - "Formik", - "Framer Motion", - ], - styles: [ - "CSS", - "SASS", - "TailwindCSS", - "DaisyUI", - "tailwind-scrollbar", - "FontAwesome", - "nProgress", - ], - general: ["Markdown", "Google", "DuckDuckGo", "PDF", "Email"], -} as const; - -const techKeys = Object.keys(tech) as Array; - -type TechKeys = keyof typeof tech; - -const skills = (skills: TechKeys[]): string[] => { - return skills.map((s) => tech[s]).flat(); -}; - -const skillsInverted = (skills: TechKeys[]): string[] => { - return techKeys - .filter((k) => !skills.includes(k)) - .map((s) => tech[s]) - .flat(); -}; - const createSvg = (paths: string[]) => ( {paths.map((p) => ( @@ -198,7 +79,6 @@ const experience = ({ from, to, description, - technologies, links, feedback, }: Experience) => ( @@ -209,15 +89,15 @@ const experience = ({ )} > - {position} + {position} at - + {company}, {location} from - {from.toDateString()} + {from.toDateString()} to - {to > new Date() ? "present" : to.toDateString()} + {to > new Date() ? "present" : to.toDateString()} {links && ( @@ -229,23 +109,17 @@ const experience = ({ )} - {description} + {description} {feedback && ( - - Feedback: "{feedback}" - + + let + clientFeedback + = + "{feedback}" + ; + )} - - {technologies.map((t) => ( - - - {t} - - ))} - ); @@ -267,17 +141,17 @@ const education = ({ )} > - + Studied {degree} of {field} at - + {institution}, {location} from - {from.toDateString()} + {from.toDateString()} to - {to.toDateString()} + {to.toDateString()} {links && ( @@ -289,7 +163,7 @@ const education = ({ )} - {summary} + {summary} @@ -309,11 +183,11 @@ const certificate = ({ )} > - {name} + {name} from - {issuer} + {issuer} on - {date.toDateString()} + {date.toDateString()} {links && ( @@ -325,7 +199,7 @@ const certificate = ({ )} - {description} + {description} @@ -365,13 +239,13 @@ const Links = () => ( const Intro = () => ( Ivan K. Dimitrov - Software Developer + Software Developer ); const pageStyles = tw( - "w-full h-full text-slate-50 bg-slate-950 flex flex-col p-12 text-base" + "w-full h-full text-slate-50 bg-gray-900 flex flex-col p-12 text-base" ); const divider = ( @@ -391,7 +265,7 @@ const CV = () => ( {divider} - Experience + Experience {experience({ company: "idimitrov.dev", @@ -400,13 +274,7 @@ const CV = () => ( from: new Date("2023"), to: new Date("9999"), description: - "This is my software consulting and development business. Please head over to my resume website or Upwork to learn more.", - technologies: [ - "Business development", - "Software Development", - "Communication", - ...skills(["architectures"]) - ], + "This is my software consulting and development business. It offers web development services to businesses around the world. Please head over to my resume website or my Upwork profile to learn more.", links: [ { text: "Upwork", @@ -417,6 +285,7 @@ const CV = () => ( href: "https://www.idimitrov.dev/cases", }, ], + feedback: "100% Job Success" })} {experience({ company: "Stepsy", @@ -425,15 +294,7 @@ const CV = () => ( from: new Date("29 Jul 2023"), to: new Date("5 Nov 2023"), description: - "Created a multi-tenant knowledge base website based on Google APIs", - technologies: skills([ - "nextjs", - "styles", - "linux", - "git", - "general", - "architectures" - ]).concat(["googleapis", "Fuse.js", "Interact.js"]), + "As a software developer working with stepsy.co, I was responsible for implementing their brand new wiki web app stepsy.wiki. Working on this greenfield project allowed me to make fundamental technical decisions that had a positive impact on further development.", links: [ { text: "Case Study", @@ -450,8 +311,7 @@ const CV = () => ( 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: skillsInverted(["dataIntegration", "python", "nextjs"]), + "As a software developer at RA Creative, I was responsible for delivering software solutions to an eCommerce business operating in 2 continents - Europe and North America. Watches of Switzerland Group is an international retailer of world leading luxury watch and jewellery brands. It has a market cap of £1.5B.", links: [ { text: "RA Creative", href: "https://racreative.co.uk/" }, { @@ -476,17 +336,9 @@ const CV = () => ( to: new Date("May 2020"), description: "Developed a full-stack web + android app helping students book exams, browse resources, see events, news and more.", - technologies: skillsInverted([ - "hybris", - "payment", - "dataIntegration", - "python", - "nextjs", - "styles", - ]), })} {divider} - Education + Education {education({ institution: "SWU 'Neofit Rilski'", location: "Blagoevgrad, Bulgaria", @@ -498,7 +350,7 @@ const CV = () => ( "This is an engineering degree focused on the science of electronics and electrical engineering. It studies the physical properties of individual electrons and the forces that take place when current is flowing through a circuit.", })} {divider} - Certificates + Certificates {certificate({ name: "Oracle Certified Professional, Java SE 8 Programmer", issuer: "Oracle", diff --git a/flake.lock b/flake.lock index d17cede..f12c779 100644 --- a/flake.lock +++ b/flake.lock @@ -150,11 +150,11 @@ "systems": "systems_3" }, "locked": { - "lastModified": 1700381994, - "narHash": "sha256-ANUCVLf7v276VepwjyfGNmMfY0+d9fZ9cVlt5DwZ7TM=", + "lastModified": 1701244257, + "narHash": "sha256-rJHTSJlDa0gkJubwdsNKZHQe0Is54Uk1f2chTYTxnO4=", "owner": "ivandimitrov8080", "repo": "flake-ide", - "rev": "0cb6f5a5ba5aa36194061bdd5fbaca589023f9f7", + "rev": "1f702a622d51814e8a11f72f389eff73239c1082", "type": "github" }, "original": { @@ -165,11 +165,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1700538105, - "narHash": "sha256-uZhOCmwv8VupEmPZm3erbr9XXmyg7K67Ul3+Rx2XMe0=", + "lastModified": 1701174899, + "narHash": "sha256-1W+FMe8mWsJKXoBc+QgKmEeRj33kTFnPq7XCjU+bfnA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "51a01a7e5515b469886c120e38db325c96694c2f", + "rev": "010c7296f3b19a58b206fdf7d68d75a5b0a09e9e", "type": "github" }, "original": { @@ -204,11 +204,11 @@ "pre-commit-hooks": "pre-commit-hooks" }, "locked": { - "lastModified": 1700557248, - "narHash": "sha256-8g+ZzsZcLpO55d1LvhfjheJuDlDyIm1POUNULJqSvgs=", + "lastModified": 1701250280, + "narHash": "sha256-Nx2nqkUfOAvW+GlVIs5HK8WfuZsbN8FqW2bXNx0fMJc=", "owner": "nix-community", "repo": "nixvim", - "rev": "a05b2a9cbfb28f2590b441192fa20b70b0ed319a", + "rev": "f56d412f84e2cee53365ade1093f9cc449d58fa3", "type": "github" }, "original": { @@ -259,11 +259,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1700064067, - "narHash": "sha256-1ZWNDzhu8UlVCK7+DUN9dVQfiHX1bv6OQP9VxstY/gs=", + "lastModified": 1700922917, + "narHash": "sha256-ej2fch/T584b5K9sk1UhmZF7W6wEfDHuoUYpFN8dtvM=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "e558068cba67b23b4fbc5537173dbb43748a17e8", + "rev": "e5ee5c5f3844550c01d2131096c7271cec5e9b78", "type": "github" }, "original": { diff --git a/tech.ts b/tech.ts new file mode 100644 index 0000000..a86b82a --- /dev/null +++ b/tech.ts @@ -0,0 +1,117 @@ +const tech = { + android: ["Android", "Android Studio"], + architectures: [ + "Microservices", + "MVC", + "Layered architecture", + "DDD", + "EDA", + "Publish-subscribe", + "Client-server", + "REST", + "Pipes and filters", + ], + java: [ + "Java", + "JPA", + "Hibernate", + "Spring Framework", + "Spring Boot", + "Lombok", + "Spring MVC", + "Thymeleaf", + "JSP", + "JSTL", + "XML", + "Spring Security", + "OAuth2", + "H2", + "Spring Boot Actuator", + "Maven", + "Gradle", + "Ant", + ], + web: ["JavaScript", "HTML", "CSS"], + api: ["REST", "SOAP"], + db: ["MySQL", "PostgreSQL"], + linux: [ + "Linux", + "Bash", + "coreutils", + "Ubuntu", + "CentOS", + "RHEL", + "SSH", + "iptables", + "systemd", + "vim", + "Monit", + "CLI", + "pandoc", + "LUKS", + "hexdump", + "dd", + ], + git: ["git", "GitHub", "GitLab", "BitBucket"], + hybris: ["SAP hybris", "ZK Framework"], + payment: ["PayPal", "Adyen", "V12", "Wells Fargo Open Banking APIs"], + dataIntegration: [ + "Spring Batch", + "Data Pipeline", + "Scriptella", + "Easy Batch", + "GETL", + "Apache Camel", + "Apache Samza", + "Apache Flink", + "Apache Storm", + "Apache Spark", + "Apache NiFi", + ], + python: [ + "python", + "BeautifulSoup4", + "requests", + "pypandoc", + "markdownify", + "html2text", + "Poetry", + ], + javascript: ["TypeScript", "React"], + nextjs: [ + "NextJS 12", + "NextJS 13", + "NextJS 14", + "NextAuth", + "Prisma", + "Vercel", + "Vercel Postgres", + "Formik", + "Framer Motion", + ], + styles: [ + "CSS", + "SASS", + "TailwindCSS", + "DaisyUI", + "tailwind-scrollbar", + "FontAwesome", + "nProgress", + ], + general: ["Markdown", "Google", "DuckDuckGo", "PDF", "Email"], +} as const; + +const techKeys = Object.keys(tech) as Array; + +type TechKeys = keyof typeof tech; + +export const skills = (skills: TechKeys[]): string[] => { + return skills.map((s) => tech[s]).flat(); +}; + +export const skillsInverted = (skills: TechKeys[]): string[] => { + return techKeys + .filter((k) => !skills.includes(k)) + .map((s) => tech[s]) + .flat(); +};