diff --git a/src/lib/constants/resume.json b/src/lib/constants/resume.json new file mode 100644 index 0000000..dd1e92c --- /dev/null +++ b/src/lib/constants/resume.json @@ -0,0 +1,98 @@ +{ + "basics": { + "name": "Benjamin Palko", + "email": "benjaminpalko@hotmail.com", + "phone": "613-340-4839", + "location": { + "city": "Ottawa", + "region": "ON" + } + }, + "education": [ + { + "institution": "Carleton University", + "location": "Ottawa, ON", + "area": "Software Engineering", + "studyType": "B. Eng", + "endDate": "2019-11", + "startDate": "2014-09" + } + ], + "work": [ + { + "company": "Bizxcel", + "location": "Brockville, ON", + "position": "Software Developer", + "website": "", + "description": "Contributed to an internal issue tracking web app by adding Markdown support to time entries. Later returned full-time to maintain and enhance a proprietary insurance submission server, ensuring stability and compliance with evolving submission rules.", + "startDate": "2018-05", + "endDate": "2020-02" + }, + { + "company": "Mitel", + "position": "Backend Developer", + "description": "At Mitel as backend developer working on MiCloud Contact Center, later I moved to a new project to create a PBX cloud solution, on this project I was part of a team developing an Analytics Service in AWS Lambda. This service integrated with a third party analytics tool to provide user dashboards of operational data, which enhanced management level decision making.", + "location": "Ottawa, ON", + "startDate": "2020-03", + "endDate": "2021-08" + }, + { + "company": "Privacy Analytics", + "position": "Backend Developer", + "description": "Contributed to a new product for parsing and de-identifying unstructured healthcare documents. Worked on a multinational team building a multi-language microservices backend. Developed unit test–driven PDF parsing code, migrated a core Node.js service to TypeScript to improve reliability and speed, and led the creation of an asynchronous job service API integrating with existing company tools.", + "location": "Ottawa, ON", + "startDate": "2021-09", + "endDate": "2022-09" + }, + { + "company": "Shakudo", + "position": "Full Stack Developer", + "description": "Worked in a fast-paced Scrum environment with a focus on frontend development for a Web3 and data processing platform. Built robust, reusable UI components and led improvements including an asynchronous notification system, enhanced state management, and more responsive, validated forms.", + "location": "Toronto, ON", + "startDate": "2022-09", + "endDate": "2023-05" + }, + { + "position": "Full Stack Developer", + "description": "Provided production support and feature development for a logistics management platform, including client communications and coordination with cross-functional teams. Also contributed to a .NET-based integration system for importing AS400 data, built on Azure infrastructure and managed using Pulumi for infrastructure-as-code, ensuring efficient, scalable, and reliable data processing.", + "company": "Bridgenext", + "location": "Ottawa, ON", + "startDate": "2023-12" + } + ], + "skills": [ + { + "keywords": ["Typescript", "Javascript", "CSS", "C#", "C++", "Bash"], + "name": "Languages" + }, + { + "keywords": [ + "React", + "Nextjs", + "Svelte", + "Expressjs", + "GraphQL", + "Tailwindcss", + ".NET", + "ASPNET" + ], + "name": "Frameworks & Web" + }, + { + "keywords": ["Docker", "Kubernetes", "Github Actions", "AWS", "Azure"], + "name": "Build & Deployment" + }, + { + "keywords": ["CosmosDb", "MongoDb", "PostgresDb", "Prisma"], + "name": "Databases" + } + ], + "projects": [ + { + "url": "https://store.steampowered.com/app/2648600/Cowpocalypse/", + "keywords": ["Unity, C#"], + "name": "Cowpocalypse", + "description": "This was a solo project based on a Game Jam submission for GB Jam 2023, the game was further developed and released on Steam. It is an arcade style game built with the Unity game engine, written in C#, with assets made in Aseprite and audio assets from the Kenneys asset pack." + } + ] +} diff --git a/src/routes/resume/+page.server.ts b/src/routes/resume/+page.server.ts deleted file mode 100644 index 0d81056..0000000 --- a/src/routes/resume/+page.server.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { error } from '@sveltejs/kit'; -import type { PageServerLoad } from './$types'; -import { logger } from '$lib/server/logger'; - -export const load: PageServerLoad = async ({ locals }) => { - const { strapi } = locals; - - try { - const { data: experiences, meta: experiencesMeta } = await strapi.Experiences(); - const { data: education, meta: educationMeta } = await strapi.Education(); - - return { - experiences: experiences.map((item) => { - return { - title: item.Title, - company: item.Company, - description: item.Description, - startDate: item.StartDate, - endDate: item.EndDate, - logo: item.Logo - }; - }), - education: education.map((item) => { - return { - institute: item.Institute, - field: item.Field, - description: item.Description, - startDate: item.StartDate, - endDate: item.EndDate - }; - }), - meta: { - experiences: experiencesMeta, - education: educationMeta - } - }; - } catch (err) { - logger.error('Uh-oh!', err); - if (err instanceof Error) { - error(500, err); - } - } -}; diff --git a/src/routes/resume/+page.svelte b/src/routes/resume/+page.svelte index def4e44..2fe27fc 100644 --- a/src/routes/resume/+page.svelte +++ b/src/routes/resume/+page.svelte @@ -1,33 +1,49 @@ +{#snippet EducationEntry(item: EducationItem)} +
+
+
+ {dayjs(item.startDate).format('MMM YYYY')} - {item.endDate + ? dayjs(item.endDate).format('MMM YYYY') + : 'Current'} +
+

{item.location}

+
+
+

{item.studyType}, {item.area}

+

{item.institution}

+
+
+{/snippet} + {#snippet ExperienceEntry(item: ExperienceItem)} -
+
{dayjs(item.startDate).format('MMM YYYY')} - {item.endDate @@ -37,30 +53,44 @@

{item.company}

-

{item.title}

+

{item.position}

{item.description}

{/snippet} -{#snippet EducationEntry(item: EducationItem)} -
+{#snippet SkillEntry(skill: SkillItem)} +
-
- {dayjs(item.startDate).format('MMM YYYY')} - {item.endDate - ? dayjs(item.endDate).format('MMM YYYY') - : 'Current'} -
-

{item.institute}

+ {skill.name}
-
-

{item.field}

-

{item.description}

+
+ {#each skill.keywords as keyword (keyword)} +
{keyword}
+ {/each}
{/snippet}
+ +
+
+

Education

+
+
+
+
+
+ + {#if !education} + Looks like I have no education :( + {:else} + {#each education as item (item.location)} + {@render EducationEntry(item)} + {/each} + {/if} +
@@ -79,21 +109,21 @@ {/each} {/if} - +
-

Education

+

Skills

- {#if !education} - Looks like I have no education :( + {#if !experiences} + Looks like I have no skills :( {:else} - {#each education as item (item.field)} - {@render EducationEntry(item)} + {#each skills as skill (skill.name)} + {@render SkillEntry(skill)} {/each} {/if}