diff --git a/README.md b/README.md index bb3ffe0..9e03c8e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Calvin McLean -[![GitHub Pages Site](https://img.shields.io/badge/View-GitHub_Pages-blue?style=for-the-badge)](https://calvinmclean.github.io/#/) -[![dev.to](https://img.shields.io/badge/View-Dev.to-yellow?style=for-the-badge)](https://calvinmclean.github.io/#/) +[![image](https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white)](https://calvinmclean.github.io/#/) +[![dev.to](https://img.shields.io/badge/dev.to-0A0A0A?style=for-the-badge&logo=devdotto&logoColor=white)](https://dev.to/calvinmclean) This repository will eventually contain some more information about myself, my interests, and experience. Currently, it just contains articles that I have written. diff --git a/_sidebar.md b/_sidebar.md index aa95a5e..3582abf 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -8,3 +8,8 @@ * [The Magic of Interfaces in Go](articles/implicit-interfaces/article.md) * [Taking Notes to Improve Your Productivity](articles/note-taking/article.md) * [Stop Using Makefile (Use Taskfile Instead)](articles/taskfile/article.md) +* [Projects](projects_homepage.md) + * [`babyapi`](projects/babyapi.md) + * [`automated-garden`](projects/automated_garden.md) + * [`article-sync`](projects/article_sync.md) + * [`tic-tac-go`](projects/tic_tac_go.md) diff --git a/projects/article_sync.md b/projects/article_sync.md new file mode 100644 index 0000000..f6d581b --- /dev/null +++ b/projects/article_sync.md @@ -0,0 +1,9 @@ +# Article Sync + +[![article-sync](https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white)](https://github.com/calvinmclean/article-sync) + +Article Sync is a simple CLI written in Go + a GitHub Action to easily run it in GitHub. This enables synchronizing markdown articles (like the ones on this site!) to blog/article platforms like [dev.to](https://dev.to/calvinmclean/manage-dev-articles-with-git-and-github-actions-13md). + +The GitHub Action will leave comments on PRs with an explanation of changes after merging. Then, once merged to `main`, it will synchronize with the platforms and commit any new article IDs and links to the `article.json` files. + +A fun feature of `article-sync` is that you can provide a link to an image from [gopherize.me](https://gopherize.me) to automatically create an article banner with the title and the generated gopher image. diff --git a/projects/automated_garden.md b/projects/automated_garden.md new file mode 100644 index 0000000..81e20c5 --- /dev/null +++ b/projects/automated_garden.md @@ -0,0 +1,11 @@ +# Automated Garden + +[![automated-garden](https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white)](https://github.com/calvinmclean/automated-garden) + +Automated Garden is an open source irrigation controller. The repository contains code for ESP32 microcontrollers to toggle valves and report sensor data as well as a Go server which provides the API, scheduling, and serves the UI. Currently, the UI is created with Svelte but I am re-writing to use HTMX. It is integrated with the Netatmo API to allow watering based on real measurements from your Netatmo weather sensors. + +The backend communicates with multiple devices using the MQTT message protocol. The individual controllers then push data and watering logs to InfluxDB via MQTT and Telegraf. Grafana is used to visualize sensor data and Prometheus metrics from the application. + +The architecture of the project uses InfluxDB to store time-series data from sensors and logs to confirm that the controller successfully completed watering. + +This project also was the starting point for the API structure that was used to create `babyapi`. diff --git a/projects/babyapi.md b/projects/babyapi.md new file mode 100644 index 0000000..696a037 --- /dev/null +++ b/projects/babyapi.md @@ -0,0 +1,9 @@ +# BabyAPI + +[![babyapi](https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white)](https://github.com/calvinmclean/babyapi) + +`babyapi` is a super simple framework that automatically creates an HTTP API for create, read, update, and delete operations on a struct. It is intended to make it as easy as possible to go from nothing to a fully functioning REST API, but also aims to allow enough flexibility for creating real web applications. It also has built-in integrations for using Redis as a key-value store so you can quickly and easily create an HTTP API with persistent storage. + +I got tired of re-writing boilerplate code for HTTP handling in my `automated-garden` project. I also was interested in learning about generics in Go, so I extracted some of the generic behaviors into reusable methods. This eventually evolved into `babyapi`. + +You can read more about `babyapi` in [this article that I wrote](https://dev.to/calvinmclean/the-easiest-way-to-create-a-rest-api-with-go-20bo) and the [GitHub repository](https://github.com/calvinmclean/babyapi). diff --git a/projects/tic_tac_go.md b/projects/tic_tac_go.md new file mode 100644 index 0000000..e4643d5 --- /dev/null +++ b/projects/tic_tac_go.md @@ -0,0 +1,5 @@ +# Tic Tac Go + +[![tic-tac-go](https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white)](https://github.com/calvinmclean/tic-tac-go) + +Tic Tac Go is a tic tac toe game implemented using Go and HTMX. It uses server-sent events to enable multiplayer without websockets. Simply share the link with a friend to have them join your game. diff --git a/projects_homepage.md b/projects_homepage.md new file mode 100644 index 0000000..8340a8b --- /dev/null +++ b/projects_homepage.md @@ -0,0 +1,10 @@ +# Projects + +I enjoy working on programming projects in my free time to learn new things and build tools that are useful in my regular life. + +These are some of my side projects that I am particularly proud of. Check out [my GitHub](https://github.com/calvinmclean) to see all of my projects! + +* [`babyapi`: Simple HTTP API framework in Go](projects/babyapi.md) +* [`automated-garden`: Weather-aware open irrigation controller](projects/automated_garden.md) +* [`article-sync`: CLI and GitHub Action to sync articles from this repostory to Dev.to](projects/article_sync.md) +* [`tic-tac-go`: web-based tic tac toe game with Go and HTMX](projects/tic_tac_go.md)