From 77b0f69d0c6e555349dd491d7ca209924d119e61 Mon Sep 17 00:00:00 2001 From: Matt Kosarek Date: Wed, 11 Mar 2026 17:49:05 -0400 Subject: Migrate to astro --- src/pages/index.astro | 46 +++++++++ src/pages/posts/[slug].astro | 19 ++++ src/pages/posts/feed.xml.ts | 21 ++++ src/pages/posts/index.astro | 88 +++++++++++++++++ src/pages/resume.astro | 225 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 399 insertions(+) create mode 100644 src/pages/index.astro create mode 100644 src/pages/posts/[slug].astro create mode 100644 src/pages/posts/feed.xml.ts create mode 100644 src/pages/posts/index.astro create mode 100644 src/pages/resume.astro (limited to 'src/pages') diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 0000000..5ef947e --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,46 @@ +--- +import BaseLayout from '../layouts/BaseLayout.astro'; +--- + + +
+ +
+ +
+

About Me

+

+ Hi there 🌊 My name is Matthew Kosarek. + I am a computer programmer from northern New Jersey and I currently live in Philadelphia, PA. I work at Canonical on + Mir and I am currently building + miracle-wm, a Mir-based tiling window manager. +

+
+
+

Links

+
    +
  • Github: my personal github with most of my projects
  • +
  • CGit: my self-hosted git instance with a few of my projects
  • +
  • physicsforgames.com: a project that I'm currently working on in my spare time where I explore the world of realtime physics
  • +
  • LinkedIn
  • +
+
+ +
+
+ + + + + +
+
+ + + +
diff --git a/src/pages/posts/[slug].astro b/src/pages/posts/[slug].astro new file mode 100644 index 0000000..0f29ec5 --- /dev/null +++ b/src/pages/posts/[slug].astro @@ -0,0 +1,19 @@ +--- +import { getCollection, type CollectionEntry } from 'astro:content'; +import PostLayout from '../../layouts/PostLayout.astro'; + +export async function getStaticPaths() { + const posts = await getCollection('posts'); + return posts.map((post: CollectionEntry<'posts'>) => ({ + params: { slug: post.slug }, + props: { post }, + })); +} + +const { post } = Astro.props as { post: CollectionEntry<'posts'> }; +const { Content } = await post.render(); +--- + + + + diff --git a/src/pages/posts/feed.xml.ts b/src/pages/posts/feed.xml.ts new file mode 100644 index 0000000..43b9b84 --- /dev/null +++ b/src/pages/posts/feed.xml.ts @@ -0,0 +1,21 @@ +import rss from '@astrojs/rss'; +import { getCollection } from 'astro:content'; +import { marked } from 'marked'; +import type { APIContext } from 'astro'; + +export async function GET(context: APIContext) { + const posts = await getCollection('posts'); + posts.sort((a, b) => b.data.date.localeCompare(a.data.date)); + + return rss({ + title: "Matthew Kosarek's Blog", + description: 'Updates and thoughts from Matthew Kosarek', + site: context.site ?? 'https://matthewkosarek.xyz', + items: posts.map(post => ({ + title: post.data.title, + pubDate: new Date(post.data.date), + link: `/posts/${post.slug}/`, + content: marked(post.body) as string, + })), + }); +} diff --git a/src/pages/posts/index.astro b/src/pages/posts/index.astro new file mode 100644 index 0000000..b3ea740 --- /dev/null +++ b/src/pages/posts/index.astro @@ -0,0 +1,88 @@ +--- +import { getCollection, type CollectionEntry } from 'astro:content'; +import BaseLayout from '../../layouts/BaseLayout.astro'; +import '../../styles/post.css'; +import '../../styles/sitemap.css'; + +const allPosts = await getCollection('posts'); +allPosts.sort((a: CollectionEntry<'posts'>, b: CollectionEntry<'posts'>) => b.data.date.localeCompare(a.data.date)); + +function formatDate(dateStr: string): string { + const [year, month, day] = dateStr.split('-').map(Number); + const d = new Date(year, month - 1, day); + return d.toLocaleDateString('en-US', { month: 'long', day: '2-digit', year: 'numeric' }); +} +--- + + +
+

+ RSS Feed +
+ +
+ +
+
    + {allPosts.map((post: CollectionEntry<'posts'>) => ( +
  • +

    {post.data.title}

    +

    {formatDate(post.data.date)}

    +

    {post.data.tags.join(',')}

    +
  • + ))} +
+
+ + +
diff --git a/src/pages/resume.astro b/src/pages/resume.astro new file mode 100644 index 0000000..b8bf02b --- /dev/null +++ b/src/pages/resume.astro @@ -0,0 +1,225 @@ +--- +import BaseLayout from '../layouts/BaseLayout.astro'; +import '../styles/resume.css'; +import '../styles/resume.mobile.css'; +--- + + + + +
+
+ + + 📥 + +
+
+
+
+ Matthew
Kosarek
+ +
+ πŸ–₯️ Software Developer + πŸ”— matthewkosarek.xyz + + + github.com/mattkae + + πŸ“§ mkosare1@gmail.com + πŸ‡ΊπŸ‡Έ United States Citizen +
+
+
+ +
+
+

Experience

+
+
+
+
+ Software Engineer II + Canonical +
+
+ July 2023 to Present + Philadelphia, PA +
+
+
+ +
+
    +
  • + Working on Mir, a Wayland compositor +
  • +
+
+
+
+
+ Software Team Lead for MachineApps + Vention +
+
+ July 2020 to July 2023 + Montreal, QC +
+
+
+ + + + + + +
+
    +
  • Developed industrial software applications including cobot palletizers, cartesian palletizers, and path following machines
  • +
  • Programmed, deployed, and supported several client projects valued over $100k+ USD each
  • +
  • Developed the core user-facing API for programming industrial machines in Python
  • +
  • Interfaced with both technical and non-technical teams on a daily basis
  • +
  • Planned and organized long-term projects and daily tasks via Asana and Github Projects
  • +
  • Programmed thousands of lines across the codebase, from the firmware running on a BeagleBone AI to the application layer running in the cloud
  • +
  • Onboarded and mentored new members of the team
  • +
+
+
+
+
+ Software Engineer I + Big Huge Games +
+
+ January 2018 to June 2020 + Timonium, MD +
+
+
+ + + + + + + +
+
    +
  • Developed and maintained the data pipeline - from data entry, to data validation, to data publication - for Arcane Showdown
  • +
  • Designed, built, and maintained a live operations scheduling and publishing web application for DomiNations
  • +
  • Implemented a localization system for Arcane Showdown which allowed the game to be released in different languages
  • +
  • Implemented game features on all parts of the stack, including tools, Unity client, and game servers
  • +
+
+
+
+
+ Teaching Assistant for Intro to Video Game Design + Johns Hopkins University +
+
+ September 2017 to December 2017 + Baltimore, MD +
+
+
+ +
+
    +
  • Assisted beginner programmers in the development of 2D game engines using SDL2
  • +
+
+
+
+
+ Software Engineering Intern + Big Huge Games +
+
+ May 2017 to August 2017 + Timonium, MD +
+
+
+ + + + +
+
    +
  • Developed a tool using C# and GTK to improve the workflow of the quality assurance team for DomiNations
  • +
  • Wrote a comprehensive user manual that explains how the tool functions for both technical and non-technical users
  • +
+
+
+
+
+ Software Engineering Intern + Sparkypants Studios +
+
+ May 2016 to August 2016 + Baltimore, MD +
+
+
+ +
+
    +
  • Developed a profiling framework for the game systems of Dropzone
  • +
+
+
+
+ +
+

Education

+
+
+
+
+ BSc Computer Engineering at Johns Hopkins University + Baltimore, MD +
+
+ September 2014 to December 2017 +
+
+
    +
  • 3.53 GPA (Magna Cum Laude)
  • +
  • Relevant Coursework: Computer Graphics, Object Oriented Software Engineering, Linear Algebra, Video Game Engines and Design, Operating Systems, Data Structures
  • +
+
+
+
+ +
+

Projects

+ +
+
+
+
+
-- cgit v1.2.1