didillinois.win post

This commit is contained in:
2021-12-19 07:26:51 -07:00
parent c6cd3bbd65
commit 3e84b95ff0

View File

@@ -0,0 +1,167 @@
+++
title = "Design of https://didillinois.win"
date = 2021-12-18T00:00:00
lastmod = 2021-12-18T00:00:00
draft = false
# Authors. Comma separated list, e.g. `["Bob Smith", "David Jones"]`.
authors = ["Carl Pearson"]
tags = []
summary = "Design of a static site with GNU Makefiles and pandoc"
# Projects (optional).
# Associate this post with one or more of your projects.
# Simply enter your project's folder or file name without extension.
# E.g. `projects = ["deep-learning"]` references
# `content/project/deep-learning/index.md`.
# Otherwise, set `projects = []`.
projects = []
# Featured image
# To use, add an image named `featured.jpg/png` to your project's folder.
[image]
# Caption (optional)
caption = ""
# Focal point (optional)
# Options: Smart, Center, TopLeft, Top, TopRight, Left, Right, BottomLeft, Bottom, BottomRight
focal_point = "Center"
# Show image only in page previews?
preview_only = true
categories = []
# Set captions for image gallery.
+++
Introducing https://didillinois.win, a static site with some Illinois sports updates.
[Did Illinois Win](https://didillinois.win) is a static site that shows an overview of the current season for each of the University of Illinois sports that I follow.
The source for the website is available here
## Objectives
The content on the site changes infrequently and is relatively simple.
I settled on a static site, which also makes it much easier to
* load quickly
* display well on mobile and desktop
* not require any javascript (I've never written any javascript before)
## Implementation (on [github](https://github.com/cwpearson/didillinoiswin))
Each table is defined in a separate markdown file that looks something like this:
```md
---
title: "2021 Football"
result: "yes"
---
| Date | Opponent | Result |
|-|-|-|
| 11/27/2021 | vs Northwestern | [W 47-14](https://www.espn.com/college-football/game/_/gameId/401282722) |
| 11/20/2021 | at Iowa | [L 23-33](https://www.espn.com/college-football/game/_/gameId/401282721) |
...
```
The first part of the file is the "frontmatter", which defines the title and the result that are floating above the table.
The rest is just a markdown table with a column for the game date, the opponent, and the result.
These files are updated manually by the site administrator (me) and then converted to HTML using [Pandoc](http://pandoc.org) ("a universal document converter").
```
pandoc --template static/template.html input.md -o output.html
```
* `--template static/template.html`: this argument specifies the template file (more on that below)
* `input.md`: this positional argument specifies the markdown file to convert
* `-o`: this specifies the output HTML file.
The template file looks likes this:
```html
<h1 class="sport">$title$</h1>
<h1 class="$result$">$result$</h1>
<!-- put the table in a div so we can center with CSS -->
<div align="center">
$body$
</div>
```
* `$title$` and `$result$`: the text from the markdown frontmatter is subsituted in these fields.
* `$body$`: the rest of the markdown content is substituted here after being transformed.
This produces a fragment (not a complete webpage) of HTML for each of the sports.
These fragments are combined with an HTML header fragment...
```html
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="description" content="Find out if Illinois NCAA athletics won">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Did Illinois Win?</title>
<link rel="stylesheet" href="style.css">
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-WQY4PM3M68"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-WQY4PM3M68');
</script>
</head>
```
...and stitched into a webpage using bash:
```bash
cat header.html > index.html
echo "<div class="row">" >> index.html
echo "<div class="column">" >> index.html
cat basketball.html >> index.html
echo "</div>" >> index.html
echo "<div class="column">" >> index.html
cat football.html >> index.html
echo "</div>" >> index.html
echo "</div>" >> index.html
echo "<div class="row">" >> index.html
echo "<div class="column">" >> index.html
cat volleyball.html >> index.html
echo "</div>" >> index.html
echo "</div>" >> index.html
```
The combind result is that each sport's HTML fragment is put into its own div, which are organized hierarchically into a table of `row` and `column`.
A bit of CSS is used to handle the responsive layout of those divs.
## Hosting
I chose to host on Netlify.
Netlify can run some automated steps every time there is a push to a github repository.
I automated the generation of the website from the markdown files using GNU Make.
Then, on Netlify under "Site Settings" > "Build and Deploy", I specified `make` as the build command.
As of this writing, Netlify provides 100GB bandwidth and 300 build minutes, which is more than sufficient for a 0-traffic small static website.
Netlify [provides instructions](https://docs.netlify.com/domains-https/custom-domains/configure-external-dns/) for how to configure the external DNS (more on that below).
## DNS
I purchased the `didillinois.win` domain from Google.
I then had to aim the domain at where the site was hosted on Netlify:
| Host Name | Type | TTL | Data |
|-|-|-|-|
| didillinois.win | A | 1 hour | 104.198.14.52 |
| www.didillinois.win |CNAME | 1 hour | didillinoiswin.netlify.app. |