diff --git a/public/open-source/favorite-places.png b/public/open-source/favorite-places.png new file mode 100644 index 0000000..ff89003 Binary files /dev/null and b/public/open-source/favorite-places.png differ diff --git a/public/open-source/house-calendar.png b/public/open-source/house-calendar.png new file mode 100644 index 0000000..88be1f2 Binary files /dev/null and b/public/open-source/house-calendar.png differ diff --git a/public/open-source/interview-as-a-service.png b/public/open-source/interview-as-a-service.png new file mode 100644 index 0000000..4747c14 Binary files /dev/null and b/public/open-source/interview-as-a-service.png differ diff --git a/public/sitemap.xml b/public/sitemap.xml index 8acc7a8..ad7fd3e 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -9,6 +9,9 @@ https://508.dev/portfolio + + https://508.dev/open-source + https://508.dev/members diff --git a/src/components/Header.astro b/src/components/Header.astro index 3e2ceb4..6c5cd67 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -74,6 +74,10 @@ const routes: Route[] = [ name: "Portfolio", route: "/portfolio", }, + { + name: "Open Source", + route: "/open-source", + }, { name: "Blog", route: "https://blog.508.dev", diff --git a/src/pages/open-source.astro b/src/pages/open-source.astro new file mode 100644 index 0000000..97255bf --- /dev/null +++ b/src/pages/open-source.astro @@ -0,0 +1,377 @@ +--- +import Layout from "../layouts/Layout.astro"; + +type Project = { + name: string; + description: string; + repo: string; + tags: string[]; + featured?: boolean; + url?: string; + note?: string; + screenshot?: string; +}; + +const projects: Project[] = [ + { + name: "508-devkit", + description: "Sane conventions for new coding projects.", + repo: "https://github.com/508-dev/508-devkit", + tags: ["Project conventions"], + featured: true, + }, + { + name: "interview-as-a-service", + description: "Technical interviews with 508 members.", + repo: "https://github.com/508-dev/interview-as-a-service", + tags: ["Django", "HTMX"], + featured: true, + url: "https://interviews.508.dev", + screenshot: "/open-source/interview-as-a-service.png", + }, + { + name: "favorite-places", + description: "Convert public Google Places Lists into a beautiful viewer.", + repo: "https://github.com/508-dev/favorite-places", + tags: ["Astro", "CSS", "TypeScript", "Python"], + featured: true, + url: "https://favorites.demflyers.com", + note: "Powers DEM Flyers Favorites and other public list viewers.", + screenshot: "/open-source/favorite-places.png", + }, + { + name: "gmaps-scraper", + description: + "A scraper for Google Places Lists and Maps Places. Powers Favorite Places.", + repo: "https://github.com/508-dev/gmaps-scraper", + tags: ["Python"], + featured: true, + }, + { + name: "house-calendar", + description: "Show room availability from an ICS link.", + repo: "https://github.com/508-dev/house-calendar", + tags: ["TypeScript", "React", "TanStack Start", "Drizzle", "Postgres"], + featured: true, + screenshot: "/open-source/house-calendar.png", + }, + { + name: "media-crm", + description: + "CRM to track media consumption across TV shows, movies, books, and more.", + repo: "https://github.com/508-dev/media-crm", + tags: [ + "TypeScript", + "tRPC", + "React", + "Node", + "Express", + "Drizzle", + "Zod", + "pnpm", + ], + url: "https://mediacrm.508.dev", + note: "Temporarily deployed on Caleb's homelab.", + }, + { + name: "friend-library", + description: "App to borrow things from friends.", + repo: "https://github.com/508-dev/friend-library", + tags: ["Django", "HTMX"], + url: "https://stuff4friends.508.dev", + }, + { + name: "running-calorie-average", + description: "Simple calorie averages webapp.", + repo: "https://github.com/508-dev/running-calorie-average", + tags: ["TypeScript", "Svelte", "SvelteKit", "HTML", "CSS"], + url: "https://calories.508.dev", + }, + { + name: "english-vehicles-tw", + description: + "Static site for an English-language vehicle service in Taiwan.", + repo: "https://github.com/508-dev/english-vehicles-tw", + tags: ["TypeScript", "Astro", "CSS"], + url: "https://englishvehicles.tw", + }, + { + name: "game-remix-guesser-backend", + description: "Backend for the guessagame game.", + repo: "https://github.com/508-dev/game-remix-guesser-backend", + tags: ["Python", "PostgreSQL", "FastAPI", "SQLAlchemy", "Docker"], + }, + { + name: "game-remix-guesser-frontend", + description: "Frontend SPA for the guessagame game.", + repo: "https://github.com/508-dev/game-remix-guesser-frontend", + tags: ["TypeScript", "Vue", "CSS"], + url: "https://guessagame.508.dev", + }, + { + name: "quick-taiwan-conversions", + description: "Useful conversions for living in Taiwan.", + repo: "https://github.com/508-dev/quick-taiwan-conversions", + tags: ["TypeScript", "Vue"], + }, + { + name: "travel-cards", + description: + "SPA to generate business cards with allergy info and other travel details.", + repo: "https://github.com/508-dev/travel-cards", + tags: ["TypeScript", "Svelte", "HTML", "CSS"], + url: "https://travelcards.508.dev", + }, +]; + +const featuredProjects = projects.filter((project) => project.featured); +const otherProjects = projects.filter((project) => !project.featured); +const githubOrgUrl = "https://github.com/508-dev"; + +const openSourceStructuredData = { + "@context": "https://schema.org", + "@type": "CollectionPage", + name: "508.dev Open Source", + url: "https://508.dev/open-source", + description: + "Open source projects from 508.dev, including coding project conventions, interview tools, Google Places utilities, internal tools, and public web apps.", + mainEntity: { + "@type": "ItemList", + itemListElement: projects.map((project, index) => ({ + "@type": "ListItem", + position: index + 1, + url: project.repo, + name: project.name, + description: project.description, + })), + }, +}; +--- + + +
+
+
+
+

+ 508.dev on GitHub +

+

+ Open source from the 508 workshop +

+

+ Projects we use to codify how we work, publish what we learn, and + ship useful tools for members, friends, and public communities. +

+ +
+ +
+
+ + + +
+
+

$ gh repo list 508-dev

+

{projects.length} public projects

+

+ {featuredProjects.length} + highlighted for conventions, interviews, writing, and reusable utilities +

+
+
+
+
+ + + +
+
+
+
+

+ More projects +

+

+ Useful apps, experiments, and member tools +

+

+ Smaller public projects that solve practical problems: lending, + media tracking, travel, Taiwan utilities, and games. +

+
+ +
+ { + otherProjects.map((project) => ( +
+

+ {project.name} +

+

+ {project.description} +

+ {project.note && ( +

+ {project.note} +

+ )} +
+ {project.tags.map((tag) => ( + + {tag} + + ))} +
+
+ + Source + + + {project.url && ( + + Live site + + + )} +
+
+ )) + } +
+
+
+
+
+