Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions site/src/components/Job.astro
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@ interface Props {
const {
data: { organization, role, start, end, image, description },
} = Astro.props;

function monthYear(s: string): string {
return new Date(`${s}-01`).toLocaleString("en-US", {
month: "short",
year: "numeric",
});
}
---

<section>
Expand All @@ -21,10 +28,10 @@ const {
<h3>{organization}</h3>
<p>{role}</p>
{start === end ? (
<p>{start}</p>
<p>{monthYear(start)}</p>
) : (
<p>
{start} &ndash; {end ?? "Present"}
{monthYear(start)} &ndash; {end ? monthYear(end) : "Present"}
</p>
)}
</div>
Expand Down
1 change: 1 addition & 0 deletions site/src/content.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ const education = defineCollection({
start: z.string().nonempty(),
end: z.string().nonempty().optional(),
image: image(),
kind: z.enum(["degree", "certification"]),
description: z.string(),
}),
});
Expand Down
3 changes: 3 additions & 0 deletions site/src/data/work/education.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
- id: byu-bs-cs
kind: "degree"
organization: Brigham Young University
role: B.S. Computer Science
start: "Sep 2020"
Expand All @@ -8,6 +9,7 @@
Cum Laude - 3.96 GPA

- id: aws-cloudquest-cloud-practitioner
kind: "certification"
organization: Amazon Web Services
role: CloudQuest Cloud Practitioner
start: "Sep 2025"
Expand All @@ -16,6 +18,7 @@
description: >

- id: rock-jvm-advanced-scala-fp
kind: "certification"
organization: Rock the JVM
role: "Advanced Scala 3 & Functional Programming"
start: "Sep 2023"
Expand Down
14 changes: 7 additions & 7 deletions site/src/data/work/professional.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
- id: fidelity-associate-swe
organization: Fidelity Investments
role: Associate Software Engineer
start: "Jun 2025"
start: "2025-06"
image: ./img/fidelity.jpg
description: >
I currently work as a software engineer for Fidelity Brokerage's Digital
Expand All @@ -16,8 +16,8 @@
- id: opiniion-integrations-eng
organization: Opiniion, Inc.
role: Integrations Engineer
start: "Aug 2024"
end: "Jun 2025"
start: "2024-08"
end: "2025-06"
image: ./img/opiniion.jpg
description: >
Opiniion is a platform for property management companies to collect
Expand All @@ -42,8 +42,8 @@
- id: fidelity-swe-intern
organization: Fidelity Investments
role: Software Engineer Intern
start: "Jun 2024"
end: "Aug 2024"
start: "2024-06"
end: "2024-08"
image: ./img/fidelity.jpg
description: >
I interned at Fidelity in the summer of 2024 as a software engineer for
Expand All @@ -60,8 +60,8 @@
- id: byu-ls-web-dev
organization: BYU Learning Suite
role: Web Developer
start: "May 2022"
end: "May 2024"
start: "2022-05"
end: "2024-05"
image: ./img/ls.jpg
description: >
Learning Suite is a proprietary learning management system (LMS) built
Expand Down
46 changes: 42 additions & 4 deletions site/src/pages/work.astro
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
import { getCollection } from "astro:content";
import { type CollectionEntry, getCollection } from "astro:content";
import Job from "../components/Job.astro";
import Layout from "../layouts/Layout.astro";

Expand All @@ -8,9 +8,47 @@ const description =
"A high-level overview of the problems I’ve worked on professionally or as a FOSS contributor. " +
"Not exhaustive, just the work that’s interesting enough to explain in more detail.";

const professional = await getCollection("professional");
const education = await getCollection("education");
const foss = await getCollection("foss");
function byRecency(
a: CollectionEntry<"professional" | "education" | "foss">,
b: CollectionEntry<"professional" | "education" | "foss">,
): number {
return (
new Date(`${b.data.start}-01`).valueOf() -
new Date(`${a.data.start}-01`).valueOf()
);
}

function byKind(
a: CollectionEntry<"education">,
b: CollectionEntry<"education">,
): number {
switch (a.data.kind) {
case "degree":
switch (b.data.kind) {
case "degree":
return 0;
case "certification":
return -1;
default:
return 0;
}
case "certification":
switch (b.data.kind) {
case "degree":
return 1;
case "certification":
return 0;
default:
return 0;
}
}
}

const professional = (await getCollection("professional")).sort(byRecency);
const education = (await getCollection("education")).sort(
(a, b) => byKind(a, b) || byRecency(a, b),
);
const foss = (await getCollection("foss")).sort(byRecency);
---

<Layout {title} {description}>
Expand Down
Loading