From c840e7ca23bfe77e4e356d9f3c655cefeaaaed42 Mon Sep 17 00:00:00 2001 From: Kevin Leutzinger <6435727+kleutzinger@users.noreply.github.com> Date: Tue, 28 Nov 2023 15:41:44 -0800 Subject: [PATCH] Update Homepage to be Better - technologies are exposed without hovering - simplified generation code - update a lot of stuff on the sheet --- index.html | 223 ++++++------------------- site-generator/generate.py | 24 +-- site-generator/generated/projects.json | 77 ++++----- 3 files changed, 95 insertions(+), 229 deletions(-) diff --git a/index.html b/index.html index b64a38d..42522ea 100644 --- a/index.html +++ b/index.html @@ -30,18 +30,11 @@

Projects by Kevin Leutzinger

-

Inventive websites and programming

+

Inventive websites and programming
SF Bay Area, Web, Backend

Hi, I'm a backend-leaning software engineer. I've worked for Rescale and Squid Cloud.

Professionally, I specialize in deployments, DevOps, cloud, automation, DevEx, and linux. I like python, javascript, and shell scripting. I've been using Arch Linux (btw) for about 10 years now and the colemak keyboard layout.

On my own time, I make games and web-based utilities. You can find a gallery of my personal projects below. Everything below is created and maintained by yours truly. Ech entry inculdes a link to both the deployed app and the source code (MIT licensed).

@@ -58,18 +51,12 @@

Contact info

CNAF on AWS Govcloud

Infrastructure
- Jun 2022

+ Jun 2022
AWS, Cloudformation

While at I was at Rescale, a large aerospace company needed a new strict allowlist firewalling their cloud compute VPC in AWS Govcloud. Using CloudFormation templates and Cohesive Network's VNS3, I created a working solution to manage exactly what traffic could exit and enter the VPC without disrupting their workflows and security requirements. This closed a 6 figure deal with the company.

@@ -81,20 +68,12 @@

Infrastructure

Fitness Tracker

Website
- Sep 2023

+ Sep 2023
HTMX, Node.js, SQLite, Handlebars

This mobile-friendly website lets you easily log your workouts in the gym. You can customize the interface how you'd like and create custom workout sequences. Later, when you get home you can look at graphs of your progress or export the data as a csv or json.

| Source Code| Open| Readme

@@ -105,19 +84,12 @@

Website

movies.kevbot.xyz

Website
- Oct 2020

+ Oct 2020
Node.js, Redis, Express

How long ago was that movie made? How old was Brad Pitt in it? Has Kevin seen this one? Just type a movie title to find out.

| Source Code| Open

@@ -128,17 +100,12 @@

Website

Advent of Code 2020 Solutions

Coding Challenge
- Dec 2020

+ Dec 2020
Python

My 50 solutions to a yearly programming challenge.

| Open

@@ -149,19 +116,12 @@

Coding Challenge

Classic Game Scraper

Application
- May 2020

+ May 2020
Python, Eel

I just might have the world's largest video game collection! This personal tool allows me to browse, download, and emulate over 35,000 roms scraped from archive.org. I can get any official game on demand from over 25 systems such as Dreamcast, Gameboy, Sega, Playstation 1/2, Super Nintendo, Gamecube and more!

| Video Demo

@@ -172,20 +132,12 @@

Application

The Lounge Video Chat

Website
- Apr 2020

+ Apr 2020
Node.js, socket.io, express, mobile support

Video chat with friends while navigating a 2d space with the arrow keys or touch. You can walk away from a conversation to stop hearing it. Featuring charades and live music. I made this during lockdown to have a covid-safe birthday party with my friends.

| Source Code| Open

@@ -196,18 +148,12 @@

Website

Smash Bros. Melee Gameplay Sharing

Website
- Sep 2020

+ Sep 2020
Node.js, Postgres

Melee is a fighting game with online tournaments. With this service, players can easily upload their recorded gameplay. The site organizes, labels, and stores the files for others to download.

| Source Code| Video Demo| Open

@@ -218,18 +164,12 @@

Website

Better Challonge Tournament Results

Chrome Extension
- May 2017

+ May 2017
Javascript

This is an extension to Challonge.com. It improves the results screen for a given tournament with statistics on each individual's performance and head to heads.

"Should honestly be integrated into the vanilla challonge website"
- 5 Star review
@@ -238,249 +178,171 @@

Chrome Extension
-
-
-
- -
-
-

Fullsize Instagram Right Click

-

Chrome Extension
- Aug 2016

-

Instagram images on the web are not clickable or saveable. Use this plugin to right click to open the image directly at high quality.
- Note: Instagram removed this extension from the chrome extension store because it was too cool for them to handle.

-

| Source Code

-
-
-

Youtube "Now Playing"

Chrome Extension
- Feb 2018

+ Feb 2018
Javascript

Longer youtube videos often have their sections laid out in the video description. As the video plays, this plugin displays the current section and allows skipping forward and back between sections.

| Open

-
+

Kevin's Arch Linux dotfiles

Config
- Jan 2021

+ Jan 2021
git, yadm

Explore all the files I use to configure my Arch Linux Laptop.

| Open

-
+

kevbot.xyz

Website
- Oct 2020

+ Oct 2020
Python, Lektor, Dokku, Docker

My other site featuring a blog and even more projects of mine.

| Source Code| Open

-
+

DIY Rectangle Controller

Hardware
- May 2022

-

Homemade "rectangle"-style controller to play Super Smash Bros Melee on PC and Gamecube/Wii. This is an ergonomic alternative to the standardGamecube controller. It works on both pc and console.

+ May 2022
Raspberry Pi Pico +

Homemade "rectangle"-style controller to play Super Smash Bros Melee on Gamecube/Wii. This is an ergonomic alternative to the standard Gamecube controller. It works on both PC and console.

| Readme

-
+

Norcal Melee Data Tracker

Data
- Jun 2023

+ Jun 2023
Python, Gsheets

Norcal has a competitive Super Smash Bros. Melee scene. We play in person tournaments against each other and we calculate seasonal player rankings data within our region. This is an auto-updating scraper and google sheet that keeps track of our wins, losses, and head to heads in the curernt ranking period. I'm Kevbot on there :D.

| Source Code| Open

-
+

Survive SRC Game

Web Game
- Apr 2014

+ Apr 2014
Javascript

An HTML5 game where you try to survive the onslaught of students from Simon's Rock College. Use the arrow keys. Best played on a desktop browser. This was quite a hit at the school (circa 2014).

| Source Code| Open

-
+

Userscripts Repo

Utility
- Feb 2023

+ Feb 2023
Javascript

My list of custom made userscripts which can execute on your browser. They are like chrome extensions, but you can rapidly develop them.

| Open| Readme

-
+

Steam Tags Popularity Game

Game
- Jun 2023

+ Jun 2023
Python, Streamlit

Guess which Steam game tag is more popular to publish. Are there more FPS or strategy games?

| Source Code| Open| Readme

-
+

Clipyt

Website
- May 2017

+ May 2017
Javascript

Combine subsections of youtube videos together for sharing. Supports combining multiple video sources.

| Source Code| Open

-
+

serpent2.py

Desktop Game
- Oct 2013

+ Oct 2013
Python, Pygame

A version of snake where you can pass through yourself.

| Open

-
+
@@ -491,24 +353,35 @@

Data

| Open

+
+
+
+
+ +
+
+

Fullsize Instagram Right Click

+

Chrome Extension
+ Aug 2016
Javascript

+

Instagram images on the web are not clickable or saveable. Use this plugin to right click to open the image directly at high quality.
+ Note: Instagram removed this extension from the chrome extension store because it was too cool for them to handle.

+

| Source Code

+
+

Twitch.tv Pause Live

Chrome Extension
- Jan 2019

+ Jan 2019
Javascript

Twitch.tv is a video game live streaming platform. This extension allows viewers to store a bookmark during the middle of a live broadcast and resume watching later at their convenience.

| Open

diff --git a/site-generator/generate.py b/site-generator/generate.py index 0778de5..96a39d0 100644 --- a/site-generator/generate.py +++ b/site-generator/generate.py @@ -57,21 +57,12 @@ def generate_css(): w.truncate() -def gen_tags(project): +def gen_technologies(project): "display tags over picture when card is hovered" tag_list = project.get("technologies", []) - if tag_list == "": + if not tag_list: return "" - LIS = "\n".join([f'
  • {text}
  • ' for text in tag_list]) - out = f""" -
  • -
      - {LIS} -
    -
  • - """ - return out - + return "" + ", ".join(tag_list) + "" def get_date(project): if "date_created" in project: @@ -96,7 +87,10 @@ def gen_subtitle(project): sub_date = get_date(project) if sub_date: sub_date = "
    " + sub_date - templ = f"

    {sub_text}{sub_date}

    " + technologies = gen_technologies(project) + if technologies: + technologies = "
    " + technologies + templ = f"

    {sub_text}{sub_date}{technologies}

    " return templ @@ -121,7 +115,6 @@ def gen_card_html(project, is_alt_card=False): main_link = a(title, href=main_url) alt_class = "alt" * is_alt_card - hover_tags = gen_tags(project) project_card = f"""\
    @@ -129,11 +122,10 @@ def gen_card_html(project, is_alt_card=False):
    -

    {main_link}

    +

    {main_link}

    {subtitle} {description}

    diff --git a/site-generator/generated/projects.json b/site-generator/generated/projects.json index 9a7e634..1630d60 100644 --- a/site-generator/generated/projects.json +++ b/site-generator/generated/projects.json @@ -37,8 +37,7 @@ "youtube": "#", "technologies": [ "Python", - "Node.js", - "eel" + "Eel" ], "special_story": "Made with aaron, coolest thing i've made thus far", "collaborators": "Aaron Santiago" @@ -67,8 +66,7 @@ ], "technologies": [ "Python", - "Node.js", - "eel" + "Eel" ], "special_story": "Made with aaron, coolest thing i've made thus far", "collaborators": "Aaron Santiago" @@ -95,7 +93,6 @@ "random" ], "technologies": [ - "Chrome Extension", "Javascript" ], "i_learned": [ @@ -156,7 +153,7 @@ "technologies": [ "Node.js", "Redis", - "express" + "Express" ], "i_learned": [ "Redis" @@ -256,7 +253,6 @@ "date_created": "2017-05-15", "screenshot_url": "https://cdn.kevbot.xyz/file/kevbot-cdn/screenshots/dZhtUAf.png", "technologies": [ - "Chrome Extension", "Javascript" ], "i_learned": [ @@ -271,8 +267,8 @@ "identifiers": [ "fullsize-instagram-right-click" ], - "star_rating": 3, - "shine_rating": 5, + "star_rating": 2, + "shine_rating": 2, "medium": "Chrome Extension", "tags": [ "crx", @@ -287,7 +283,6 @@ "random" ], "technologies": [ - "Chrome Extension", "Javascript" ], "i_learned": [ @@ -339,6 +334,9 @@ "kl" ], "youtube": "https://youtu.be/1WCsfcQgjk8", + "technologies": [ + "Openshot" + ], "i_learned": [ "Openshot", "A/V syncing" @@ -362,7 +360,6 @@ "date_created": "2018-02-15", "screenshot_url": "https://cdn.kevbot.xyz/file/kevbot-cdn/screenshots/N7ZkAG0.png", "technologies": [ - "Chrome Extension", "Javascript" ], "i_learned": [ @@ -616,6 +613,9 @@ "omit_from": [ "kl", "random" + ], + "technologies": [ + "Gsheets" ] }, { @@ -637,6 +637,9 @@ "screenshot_url": "https://cdn.kevbot.xyz/file/kevbot-cdn/screenshots/mqMq1C1.png", "omit_from": [ "kl" + ], + "technologies": [ + "Javascript" ] }, { @@ -687,10 +690,6 @@ "screenshot_url": "https://cdn.kevbot.xyz/file/kevbot-cdn/screenshots/FN7pSZ9.png", "omit_from": [ "kl" - ], - "technologies": [ - "Practice", - "GC Controller" ] }, { @@ -714,8 +713,8 @@ "technologies": [ "Python", "Lektor", - "dokku", - "docker" + "Dokku", + "Docker" ] }, { @@ -797,10 +796,6 @@ "omit_from": [ "kl", "kb" - ], - "technologies": [ - "Exercise", - "Eating Habits" ] }, { @@ -818,10 +813,6 @@ "omit_from": [ "kl", "kb" - ], - "technologies": [ - "Pizza", - "Money" ] }, { @@ -897,7 +888,8 @@ "kl" ], "technologies": [ - "Web" + "HTML", + "Javascript" ] }, { @@ -950,7 +942,6 @@ "kl" ], "technologies": [ - "Firmware", "Arduino" ] }, @@ -992,11 +983,14 @@ "melee" ], "readme_url": "https://docs.google.com/document/d/1ghh1K2DEtPpqfF3jOtAsY1XcohuA7enjkYF7_MLG39k/edit#heading=h.qkq85fhrrorr", - "web_description": "Homemade \"rectangle\"-style controller to play Super Smash Bros Melee on PC and Gamecube/Wii. This is an ergonomic alternative to the standardGamecube controller. It works on both pc and console.", + "web_description": "Homemade \"rectangle\"-style controller to play Super Smash Bros Melee on Gamecube/Wii. This is an ergonomic alternative to the standard Gamecube controller. It works on both PC and console.", "date_created": "2022-05-01", "screenshot_url": "https://cdn.kevbot.xyz/file/kevbot-cdn/screenshots/eo0zqmi.png", "omit_from": [ "random" + ], + "technologies": [ + "Raspberry Pi Pico" ] }, { @@ -1020,9 +1014,8 @@ "random" ], "technologies": [ - "js", - "express", - "node" + "Express", + "Node.js" ] }, { @@ -1045,8 +1038,8 @@ "kb" ], "technologies": [ - "github actions", - "python" + "Github Actions", + "Python" ], "special_story": "i had been working on github actions all week via squid cloud. so i made this on saturday" }, @@ -1083,6 +1076,9 @@ "screenshot_url": "https://cdn.kevbot.xyz/file/kevbot-cdn/screenshots/30UcUyS.png", "omit_from": [ "kl" + ], + "technologies": [ + "Haxe" ] }, { @@ -1105,7 +1101,8 @@ "date_created": "2023-06-03", "screenshot_url": "https://cdn.kevbot.xyz/file/kevbot-cdn/screenshots/5jq3Hld.png", "technologies": [ - "Python" + "Python", + "Streamlit" ], "i_learned": [ "Pywebio is a pretty easy way to make basic interactive sites" @@ -1127,7 +1124,11 @@ "demo_url": "https://docs.google.com/spreadsheets/d/1-rj-k-gLWUize_fYmlGVH0zFkBLa14U6nMMonNEkraE/edit#gid=854185296", "web_description": "Norcal has a competitive Super Smash Bros. Melee scene. We play in person tournaments against each other and we calculate seasonal player rankings data within our region. This is an auto-updating scraper and google sheet that keeps track of our wins, losses, and head to heads in the curernt ranking period. I'm Kevbot on there :D.", "date_created": "2023-06-20", - "screenshot_url": "https://cdn.kevbot.xyz/file/kevbot-cdn/screenshots/NWkhULd.png" + "screenshot_url": "https://cdn.kevbot.xyz/file/kevbot-cdn/screenshots/NWkhULd.png", + "technologies": [ + "Python", + "Gsheets" + ] }, { "_id": 47, @@ -1150,9 +1151,9 @@ "screenshot_url": "https://cdn.kevbot.xyz/file/kevbot-cdn/screenshots/workout-scrot.png", "technologies": [ "HTMX", - "handlebars", - "Nodejs", - "sqlite" + "Node.js", + "SQLite", + "Handlebars" ], "i_learned": [ "how great htmx is"