Web Design

15 January 2020 — Written by Avery

This is Gatsby

And it's going to help me push new content easier.

It's not really as easy as my WordPress site, but it's definitely several elephants lighter.

It's a complete website framework based on react.js toolkit to render pages. React.js is developed by Facebook, and it's taking the web by storm.

I'm basically working with both so I can get hands-on experience developing for WordPress and React.js, which collectively make up a disporportionate amount of sites hosted on the web (WordPress alone accounts for about 25% of all websites).

My old page was written with PHP tags for dynamic content (dates, page names, active buttons, etc.), Twitter Bootstrap for responsive CSS styling and components, and good ol' HTML - which collectively make up the new "HTML5" spec, apparently.

If you want to see my old bootstrap website I built from the ground-up, click this link

But if you want a streamlined content delivery system, check out Gatsby or Wordpress, using this Gatsby site or my wordpress site develmonk.com as an example

Stuff like blockquotes are all super easy.

Render Codeblocks with Syntax Highlighting

The PrismJS plugin allows codeblocks to render highlighted according to syntax. For instance, this is what this page looks like in a standard text editor:

## This is Gatsby

It's a complete website framework based on react.js(https://reactjs.org/)
toolkit to render pages. React.js is developed by Facebook
(https://developers.facebook.com/docs/react-native/), and it's 
taking the web by storm.

> Stuff like blockquotes are all super easy.

## This will be a heading

Here's how tables are written:

| Tables        |      Are      |   Cool |
| ------------- | :-----------: | -----: |
| col 3 is      | right-aligned | \$1600 |
| col 2 is      |   centered    |   \$12 |
| zebra stripes |   are neat    |    \$1 |

And here's how tables are rendered:

Tables Are Cool
col 3 is right-aligned $1600
col 2 is centered $12
zebra stripes are neat $1

Here's an example of css highlighting:

/* PostCSS code by PrismJS */

pre {
  background: #1a1a1d;
  padding: 20px;
  border-radius: 8px;
  font-size: 1rem;
  overflow: auto;

  @media (--phone) {
    white-space: pre-wrap;
    word-wrap: break-word;

  code {
    background: none !important;
    color: #ccc;
    padding: 0;
    font-size: inherit;

    .dark-theme & {
      color: inherit;

Here's some JavaScript ES6 (what the Gatsby static generator is based upon):

// JS code by PrismJS

const menuTrigger = document.querySelector('.menu-trigger')
const menu = document.querySelector('.menu')
const mobileQuery = getComputedStyle(document.body).getPropertyValue('--phoneWidth')
const isMobile = () => window.matchMedia(mobileQuery).matches
const isMobileMenu = () => {
  menuTrigger.classList.toggle('hidden', !isMobile())
  menu.classList.toggle('hidden', isMobile())


menuTrigger.addEventListener('click', () => menu.classList.toggle('hidden'))

window.addEventListener('resize', isMobileMenu)

And how about some good ol' HTML:

<section id="main">
   <h1 id="title">{{ .Title }}</h1>
    {{ range .Pages }}
        {{ .Render "summary"}}
    {{ end }}

Can't forget bash:

$ cat ~/.bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;

shopt -s histappend


shopt -s checkwinsize

[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)

case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
unset color_prompt force_color_prompt

case "$TERM" in
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'

alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

~/.bash_aliases, instead of adding them here directly.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases

if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

# set PATH so it includes user's global yarn bin if it exists
if [ -d "$HOME/.yarn/bin" ] ; then

Use Markdown to Create Posts

Developers like working in text editors, so why open a WYSIWYG for web pages?

Write everything in markdown!

  • Static pages can't really be hacked
  • Super fast load times
  • Easy deployment
  • Host basically anywhere (Amazon S3 free tier, anyone?)

    • Do all sorts of rad stuff w/ React and Node
    • Be super cool and ride the wave of currently popular languages/frameworks

Best of all, embedding silly videos is way too easy.

I'm working on adding a gallery of photos from my field work.

If you want some help with web design, especially help with setting up a content delivery framework like Gatsby or Wordpress, please send me an email