Migrate over to a jekyll site with lagrange theme.

jekyll
Joshua Potter 2023-12-17 07:05:38 -07:00
parent d07f24b808
commit 0ebdcd7586
28 changed files with 615 additions and 388 deletions

2
.bundle/config Normal file
View File

@ -0,0 +1,2 @@
---
BUNDLE_FORCE_RUBY_PLATFORM: "true"

View File

@ -1,21 +0,0 @@
#!/usr/bin/env bash
set -e
STAGED=$(
git --no-pager diff --name-only --no-color --cached --diff-filter=d |
# Remove quotations used to surrounding filenames with special characters.
sed -e "s/^\"//" -e "s/\"$//g"
)
TARGETS=()
while IFS= read -r FILENAME
do
if [[ "$FILENAME" =~ .*\.jsx?$ ]] || [[ "$FILENAME" == .*\.tsx?$ ]]; then
TARGETS+=("${FILENAME}")
fi
done <<< "$STAGED"
if (( ${#TARGETS[@]} )); then
prettier --write "${TARGETS[@]}"
git add "${TARGETS[@]}"
fi

7
.gitignore vendored
View File

@ -1,11 +1,8 @@
# Directory used by `direnv` to hold `use flake`-generated profiles.
/.direnv/
# The directory containing all build outputs.
/dist/
# A symlink produced by default when running `nix build`.
/result
# The NodeJS dependency directory.
/node_modules/
# The jekyll-produced static bundle.
_site/

25
404.html Normal file
View File

@ -0,0 +1,25 @@
---
permalink: /404.html
layout: default
---
<style type="text/css" media="screen">
.container {
margin: 10px auto;
max-width: 600px;
text-align: center;
}
h1 {
margin: 30px 0;
font-size: 4em;
line-height: 1;
letter-spacing: -1px;
}
</style>
<div class="container">
<h1>404</h1>
<p><strong>Page not found :(</strong></p>
<p>The requested page could not be found.</p>
</div>

11
Gemfile Normal file
View File

@ -0,0 +1,11 @@
# frozen_string_literal: true
source "https://rubygems.org"
gem "jekyll", "~> 4.3.2"
gem "lagrange", "~> 4.0"
# If you have any plugins, put them here!
group :jekyll_plugins do
gem "jekyll-feed", "~> 0.12"
end

87
Gemfile.lock Normal file
View File

@ -0,0 +1,87 @@
GEM
remote: https://rubygems.org/
specs:
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
colorator (1.1.0)
concurrent-ruby (1.2.2)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
eventmachine (1.2.7)
ffi (1.16.3)
forwardable-extended (2.6.0)
google-protobuf (3.25.1)
http_parser.rb (0.8.0)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
jekyll (4.3.2)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (>= 2.0, < 4.0)
jekyll-watch (~> 2.0)
kramdown (~> 2.3, >= 2.3.1)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (>= 0.3.6, < 0.5)
pathutil (~> 0.9)
rouge (>= 3.0, < 5.0)
safe_yaml (~> 1.0)
terminal-table (>= 1.8, < 4.0)
webrick (~> 1.7)
jekyll-feed (0.17.0)
jekyll (>= 3.7, < 5.0)
jekyll-paginate (1.1.0)
jekyll-sass-converter (3.0.0)
sass-embedded (~> 1.54)
jekyll-seo-tag (2.8.0)
jekyll (>= 3.8, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
lagrange (4.0.0)
jekyll (~> 4.2)
jekyll-feed (~> 0.6)
jekyll-paginate (~> 1.1)
jekyll-seo-tag (~> 2.6)
jekyll-sitemap (~> 1.3)
liquid (4.0.4)
listen (3.8.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (5.0.4)
rake (13.1.0)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.6)
rouge (4.2.0)
safe_yaml (1.0.5)
sass-embedded (1.69.5)
google-protobuf (~> 3.23)
rake (>= 13.0.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
unicode-display_width (2.5.0)
webrick (1.8.1)
PLATFORMS
ruby
DEPENDENCIES
jekyll (~> 4.3.2)
jekyll-feed (~> 0.12)
lagrange (~> 4.0)
BUNDLED WITH
2.4.22

View File

@ -1,27 +1,29 @@
# Portfolio
# Jekyll Flake Template
This is a single-page springboard for my various links/projects/services.
## Quickstart
[direnv](https://direnv.net/) can be used to launch a dev shell upon entering
this directory (refer to `.envrc`). Otherwise run via:
This is a template for bootstrapping a [Jekyll](https://jekyllrb.com/)-based
project (version 4.3.2) with the [minima](https://github.com/jekyll/minima)
theme (version 2.5.1). [direnv](https://direnv.net/) can be used to launch a
dev shell upon entering this directory (refer to `.envrc`). Otherwise run via:
```bash
$ nix develop
```
## Language Server
The [typescript-language-server](https://github.com/typescript-language-server/typescript-language-server)
(version 4.1.2) is included in this flake.
## Formatting
Formatting depends on [prettier](https://prettier.io/) (version 3.1.0). A
`pre-commit` hook is included in `.githooks` that can be used to format all
`*.jsx?` and `*.tsx?` files prior to commit. Install via:
```bash
$ git config --local core.hooksPath .githooks/
Start the server by running:
```
If running [direnv](https://direnv.net/), this hook is installed automatically
when entering the directory.
$ jekyll serve [--watch]
```
## Building
Dependencies are managed using [bundix](https://github.com/nix-community/bundix).
If you make any changes to the `Gemfile`, run the following:
```bash
$ bundix -l
```
This will update the `Gemfile.lock` and `gemset.nix` files. Afterward you can
run:
```bash
$ nix build
```
Note that we need the `.bundle/config` file to workaround issues bundix has with
pre-built, platform-specific gems. Refer to
[PR #68](https://github.com/nix-community/bundix/pull/68) for more details.

48
_config.yml Normal file
View File

@ -0,0 +1,48 @@
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'bundle exec jekyll serve'. If you change this file, please restart the server process.
#
# If you need help with YAML syntax, here are some quick references for you:
# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml
# https://learnxinyminutes.com/docs/yaml/
#
# Site settings
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.
title: Joshua Potter
description: My portfolio
github_username: jrpotter
# Build settings
theme: lagrange
plugins:
- jekyll-feed
# Exclude from processing.
# The following items will not be processed, by default.
# Any item listed under the `exclude:` key here will be automatically added to
# the internal "default list".
#
# Excluded items can be processed by explicitly listing the directories or
# their entries' file path in the `include:` list.
#
# exclude:
# - .sass-cache/
# - .jekyll-cache/
# - gemfiles/
# - Gemfile
# - Gemfile.lock
# - node_modules/
# - vendor/bundle/
# - vendor/cache/
# - vendor/gems/
# - vendor/ruby/

18
about.markdown Normal file
View File

@ -0,0 +1,18 @@
---
layout: page
title: About
permalink: /about/
---
This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/)
You can find the source code for Minima at GitHub:
[jekyll][jekyll-organization] /
[minima](https://github.com/jekyll/minima)
You can find the source code for Jekyll at GitHub:
[jekyll][jekyll-organization] /
[jekyll](https://github.com/jekyll/jekyll)
[jekyll-organization]: https://github.com/jekyll

View File

@ -1,5 +0,0 @@
#!/usr/bin/env bash
tailwindcss -i ./src/main.css -o ./dist/main.css
cp ./src/index.html ./dist/index.html
cp -a ./imgs ./dist

View File

@ -19,11 +19,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1694529238,
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github"
},
"original": {
@ -34,11 +34,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1701253981,
"narHash": "sha256-ztaDIyZ7HrTAfEEUt9AtTDNoCYxUdSd6NrRHaYOIxtk=",
"lastModified": 1702312524,
"narHash": "sha256-gkZJRDBUCpTPBvQk25G0B7vfbpEYM5s5OZqghkjZsnE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e92039b55bcd58469325ded85d4f58dd5a4eaf58",
"rev": "a9bf124c46ef298113270b1f84a164865987a91c",
"type": "github"
},
"original": {

View File

@ -1,11 +1,11 @@
{
description = ''
An opinionated nodejs flake.
An opinionated jekyll flake.
To generate a copy of this template elsewhere, install
[bootstrap](https://github.com/jrpotter/bootstrap) and run:
```bash
$ bootstrap nodejs
$ bootstrap jekyll
```
'';
@ -19,28 +19,20 @@
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
gems = pkgs.bundlerEnv {
name = "portfolio-gems";
gemdir = ./.;
ruby = pkgs.ruby_3_2;
};
in
{
packages = {
app = pkgs.buildNpmPackage {
pname = "portfolio";
version = "0.1.0";
app = pkgs.stdenv.mkDerivation {
name = "portfolio";
buildInputs = [ gems gems.wrappedRuby ];
src = ./.;
npmDepsHash = "sha256-Vx9NOJfk4sF2MMy/x0mJ0SINqWgx5oKmc8XOhi2vu6I";
forceEmptyCache = true;
buildPhase = "bash ${./build.sh}";
# Needed to properly invoke npm run build.
nativeBuildInputs = with pkgs; [
nodePackages.tailwindcss
typescript
];
installPhase = ''
mkdir $out
cp -a dist/* $out
'';
version = "0.1.0";
installPhase = "jekyll b -d $out";
};
default = self.packages.${system}.app;
@ -48,13 +40,11 @@
devShells.default = pkgs.mkShell {
packages = with pkgs; [
nodePackages.prettier
nodePackages.typescript-language-server
nodePackages.tailwindcss
nodejs
prefetch-npm-deps
typescript
bundix
gems
gems.wrappedRuby
];
};
});
}
);
}

369
gemset.nix Normal file
View File

@ -0,0 +1,369 @@
{
addressable = {
dependencies = ["public_suffix"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0irbdwkkjwzajq1ip6ba46q49sxnrl2cw7ddkdhsfhb6aprnm3vr";
type = "gem";
};
version = "2.8.6";
};
colorator = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
type = "gem";
};
version = "1.1.0";
};
concurrent-ruby = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
type = "gem";
};
version = "1.2.2";
};
em-websocket = {
dependencies = ["eventmachine" "http_parser.rb"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1a66b0kjk6jx7pai9gc7i27zd0a128gy73nmas98gjz6wjyr4spm";
type = "gem";
};
version = "0.5.3";
};
eventmachine = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
type = "gem";
};
version = "1.2.7";
};
ffi = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1yvii03hcgqj30maavddqamqy50h7y6xcn2wcyq72wn823zl4ckd";
type = "gem";
};
version = "1.16.3";
};
forwardable-extended = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
type = "gem";
};
version = "2.6.0";
};
google-protobuf = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "18yiqq657lbqbrbdfbxfspdrkiynd0wf49l3cgdw939z36cy0h77";
type = "gem";
};
version = "3.25.1";
};
"http_parser.rb" = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1gj4fmls0mf52dlr928gaq0c0cb0m3aqa9kaa6l0ikl2zbqk42as";
type = "gem";
};
version = "0.8.0";
};
i18n = {
dependencies = ["concurrent-ruby"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
type = "gem";
};
version = "1.14.1";
};
jekyll = {
dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "kramdown-parser-gfm" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml" "terminal-table" "webrick"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0wbp9xjnjv832ksqs816napy6amp5fh8v4wbrxlpxvgakqz6scsx";
type = "gem";
};
version = "4.3.2";
};
jekyll-feed = {
dependencies = ["jekyll"];
groups = ["jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1hzwmjrxi57x68i7jx5rxi8qlcbqcbg3di55wywrp53pr0bap6k8";
type = "gem";
};
version = "0.17.0";
};
jekyll-paginate = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0r7bcs8fq98zldih4787zk5i9w24nz5wa26m84ssja95n3sas2l8";
type = "gem";
};
version = "1.1.0";
};
jekyll-sass-converter = {
dependencies = ["sass-embedded"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00n9v19h0qgjijygfdkdh2gwpmdlz49nw1mqk6fnp43f317ngrz2";
type = "gem";
};
version = "3.0.0";
};
jekyll-seo-tag = {
dependencies = ["jekyll"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0638mqhqynghnlnaz0xi1kvnv53wkggaq94flfzlxwandn8x2biz";
type = "gem";
};
version = "2.8.0";
};
jekyll-sitemap = {
dependencies = ["jekyll"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0622rwsn5i0m5xcyzdn86l68wgydqwji03lqixdfm1f1xdfqrq0d";
type = "gem";
};
version = "1.4.0";
};
jekyll-watch = {
dependencies = ["listen"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1qd7hy1kl87fl7l0frw5qbn22x7ayfzlv9a5ca1m59g0ym1ysi5w";
type = "gem";
};
version = "2.2.1";
};
kramdown = {
dependencies = ["rexml"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ic14hdcqxn821dvzki99zhmcy130yhv5fqfffkcf87asv5mnbmn";
type = "gem";
};
version = "2.4.0";
};
kramdown-parser-gfm = {
dependencies = ["kramdown"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
type = "gem";
};
version = "1.1.0";
};
lagrange = {
dependencies = ["jekyll" "jekyll-feed" "jekyll-paginate" "jekyll-seo-tag" "jekyll-sitemap"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1x94cw219d8pwqmsm9dp9swvsfsxpdph1d4sninbr9anc83yndh1";
type = "gem";
};
version = "4.0.0";
};
liquid = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1czxv2i1gv3k7hxnrgfjb0z8khz74l4pmfwd70c7kr25l2qypksg";
type = "gem";
};
version = "4.0.4";
};
listen = {
dependencies = ["rb-fsevent" "rb-inotify"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "13rgkfar8pp31z1aamxf5y7cfq88wv6rxxcwy7cmm177qq508ycn";
type = "gem";
};
version = "3.8.0";
};
mercenary = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0f2i827w4lmsizrxixsrv2ssa3gk1b7lmqh8brk8ijmdb551wnmj";
type = "gem";
};
version = "0.4.0";
};
pathutil = {
dependencies = ["forwardable-extended"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4";
type = "gem";
};
version = "0.16.2";
};
public_suffix = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1bni4qjrsh2q49pnmmd6if4iv3ak36bd2cckrs6npl111n769k9m";
type = "gem";
};
version = "5.0.4";
};
rake = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ilr853hawi09626axx0mps4rkkmxcs54mapz9jnqvpnlwd3wsmy";
type = "gem";
};
version = "13.1.0";
};
rb-fsevent = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1zmf31rnpm8553lqwibvv3kkx0v7majm1f341xbxc0bk5sbhp423";
type = "gem";
};
version = "0.11.2";
};
rb-inotify = {
dependencies = ["ffi"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
type = "gem";
};
version = "0.10.1";
};
rexml = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
type = "gem";
};
version = "3.2.6";
};
rouge = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fkfa0iq3r9b0zzrxpxha17avmyzci3kidzmfbf6fd1279mndpb0";
type = "gem";
};
version = "4.2.0";
};
safe_yaml = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56";
type = "gem";
};
version = "1.0.5";
};
sass-embedded = {
dependencies = ["google-protobuf" "rake"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "10f04wvgca22lynvy4pycabkf55p4jf3a3bhmmscjmxv89g9khpg";
type = "gem";
};
version = "1.69.5";
};
terminal-table = {
dependencies = ["unicode-display_width"];
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "14dfmfjppmng5hwj7c5ka6qdapawm3h6k9lhn8zj001ybypvclgr";
type = "gem";
};
version = "3.0.2";
};
unicode-display_width = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1d0azx233nags5jx3fqyr23qa2rhgzbhv8pxp46dgbg1mpf82xky";
type = "gem";
};
version = "2.5.0";
};
webrick = {
groups = ["default" "jekyll_plugins"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "13qm7s0gr2pmfcl7dxrmq38asaza4w0i2n9my4yzs499j731wh8r";
type = "gem";
};
version = "1.8.1";
};
}

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 25 25" xmlns="http://www.w3.org/2000/svg">
<path d="M 12.5 0 H 20 Q 25 0, 25 5 V 12.5 H 12.5 Z" fill="rgb(10 10 10)"></path>
<path d="M 0 20 Q 0 25, 5 25 H 12.5 V 12.5 H 0 Z" fill="rgb(10 10 10)"></path>
</svg>

Before

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M12,2.2467A10.00042,10.00042,0,0,0,8.83752,21.73419c.5.08752.6875-.21247.6875-.475,0-.23749-.01251-1.025-.01251-1.86249C7,19.85919,6.35,18.78423,6.15,18.22173A3.636,3.636,0,0,0,5.125,16.8092c-.35-.1875-.85-.65-.01251-.66248A2.00117,2.00117,0,0,1,6.65,17.17169a2.13742,2.13742,0,0,0,2.91248.825A2.10376,2.10376,0,0,1,10.2,16.65923c-2.225-.25-4.55-1.11254-4.55-4.9375a3.89187,3.89187,0,0,1,1.025-2.6875,3.59373,3.59373,0,0,1,.1-2.65s.83747-.26251,2.75,1.025a9.42747,9.42747,0,0,1,5,0c1.91248-1.3,2.75-1.025,2.75-1.025a3.59323,3.59323,0,0,1,.1,2.65,3.869,3.869,0,0,1,1.025,2.6875c0,3.83747-2.33752,4.6875-4.5625,4.9375a2.36814,2.36814,0,0,1,.675,1.85c0,1.33752-.01251,2.41248-.01251,2.75,0,.26251.1875.575.6875.475A10.0053,10.0053,0,0,0,12,2.2467Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 866 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M20.47,2H3.53A1.45,1.45,0,0,0,2.06,3.43V20.57A1.45,1.45,0,0,0,3.53,22H20.47a1.45,1.45,0,0,0,1.47-1.43V3.43A1.45,1.45,0,0,0,20.47,2ZM8.09,18.74h-3v-9h3ZM6.59,8.48h0a1.56,1.56,0,1,1,0-3.12,1.57,1.57,0,1,1,0,3.12ZM18.91,18.74h-3V13.91c0-1.21-.43-2-1.52-2A1.65,1.65,0,0,0,12.85,13a2,2,0,0,0-.1.73v5h-3s0-8.18,0-9h3V11A3,3,0,0,1,15.46,9.5c2,0,3.45,1.29,3.45,4.06Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 480 B

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<path d="M25.264 5.562v-0.769c-0.001-0.442-0.359-0.8-0.801-0.8h-16.639c-0.442 0-0.8 0.358-0.8 0.8v0.929c0 0.442 0.358 0.8 0.8 0.8h13.738l-14.885 19.418c-0.103 0.133-0.165 0.302-0.165 0.485 0 0 0 0.001 0 0.002v-0 0.768c0 0.442 0.358 0.8 0.8 0.801h17.119c0.442-0.001 0.8-0.359 0.801-0.801v-0.928c-0.001-0.442-0.359-0.8-0.801-0.801h-14.219l14.885-19.417c0.103-0.133 0.166-0.302 0.166-0.486v-0z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 509 B

6
index.markdown Normal file
View File

@ -0,0 +1,6 @@
---
# Feel free to add content and custom Front Matter to this file.
# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults
layout: home
---

13
package-lock.json generated
View File

@ -1,13 +0,0 @@
{
"name": "portfolio",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "portfolio",
"version": "0.1.0",
"license": "ISC"
}
}
}

View File

@ -1,14 +0,0 @@
{
"name": "portfolio",
"version": "0.1.0",
"description": "",
"main": "main.js",
"scripts": {
"build": "./build.sh",
"format": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}

View File

@ -1,7 +0,0 @@
/** @type {import('prettier').Options} */
module.exports = {
arrowParens: "always",
semi: false,
tabWidth: 2,
trailingComma: "es5",
}

View File

@ -1,208 +0,0 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="description" content="Joshua Potter portfolio" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link phx-track-static rel="stylesheet" href="./main.css" />
<title>Portfolio • Joshua Potter</title>
<link rel="icon" href="./imgs/favicon.ico" type="image/x-icon" />
</head>
<body class="bg-primary">
<div
class="bg-secondary border-b-2 border-zinc-200 flex items-center gap-4 p-6 text-zinc-200"
>
<header class="grow flex items-center gap-5">
<img
class="rounded-full w-28 h-28 border-2 border-black"
src="https://avatars.githubusercontent.com/u/3267697?v=4"
/>
<h1 class="text-2xl mb-2 text-black">Joshua Potter</h1>
</header>
<div class="flex flex-col gap-6">
<a href="https://github.com/jrpotter/" target="_blank">
<img class="w-6 h-6 link" src="./imgs/github.svg" />
</a>
<a href="https://www.linkedin.com/in/jrpotter2112/" target="_blank">
<img class="w-6 h-6 link" src="./imgs/linkedin.svg" />
</a>
<a href="https://www.zotero.org/jrpotter2112/library" target="_blank">
<img class="w-6 h-6 link" src="./imgs/zotero.svg" />
</a>
</div>
</div>
<main class="mx-auto max-w-7xl p-8">
<section class="grid grid-cols-1 lg:grid-cols-2 gap-16 pb-16">
<div class="col-span-1 lg:col-span-2">
<h2 class="text-xl pb-2">Hosting</h2>
<p class="text-sm grow">
The following websites are served from
<a href="https://nixos.org/" target="_blank">NixOS</a>
machines hosted on
<a href="https://www.digitalocean.com/" target="_blank"
>Digital Ocean</a
>. Configuration files for each of my machines can be found
<a
href="https://github.com/jrpotter/nixos-configuration"
target="_blank"
>here</a
>. If interested in starting a similar hosting solution, consider
getting a $200 credit using my
<a href="https://m.do.co/c/c65b89434c1b">referral link</a>.
</p>
</div>
<div class="flex gap-8">
<a
href="https://blog.jrpotter.com"
target="_blank"
class="w-32 h-32 flex-none bg-[#343433] rounded-full"
>
<img class="p-4 mx-auto" src="./imgs/jekyll.png" alt="blog" />
</a>
<div class="grow">
<a
href="https://blog.jrpotter.com"
target="_blank"
class="font-bold grow"
>Blog</a
>
<p class="text-sm pt-2">
I occasionally write about (usually) technical concepts in my
blog. Originally powered by Github Pages, I've since moved the
<a href="https://jekyllrb.com/" target="_blank">Jekyll</a>-based
project to a self-hosting solution. Theming is provided by
<a
href="https://github.com/cotes2020/jekyll-theme-chirpy"
target="_blank"
>Chirpy</a
>.
</p>
</div>
</div>
<div class="flex gap-8">
<a
href="https://bookshelf.jrpotter.com"
target="_blank"
class="w-32 h-32 flex-none"
>
<img class="mx-auto" src="./imgs/lean.png" alt="bookshelf" />
</a>
<div class="grow">
<a
href="https://bookshelf.jrpotter.com"
target="_blank"
class="font-bold"
>Bookshelf</a
>
<p class="text-sm pt-2">
A collection of books I am actively studying. Usually mathematics
or computer-science based. I aim to prove concepts as I encounter
them using the
<a href="https://lean-lang.org/" target="_blank">Lean</a>
interactive theorem prover. All proofs are also available in
<a href="https://www.latex-project.org/" target="_blank">LaTeX</a
>.
</p>
</div>
</div>
<div class="flex gap-8">
<a
href="https://www.boardwise.gg"
target="_blank"
class="flex-none w-32 h-32"
>
<img src="./imgs/boardwise.svg" alt="boardwise" />
</a>
<div class="grow">
<a href="https://www.boardwise.gg" target="_blank" class="font-bold"
>BoardWise</a
>
<p class="text-sm pt-2">
A
<a href="https://www.phoenixframework.org/" target="_blank"
>Phoenix</a
>- and
<a href="https://react.dev/" target="_blank">React</a>-based
project that provides an interface for finding chess coaches. This
serves as an alternative to those found on
<a href="https://lichess.org/coach" target="_blank">Lichess</a>
and
<a href="https://chess.com/coaches" target="_blank">Chess.com</a>.
Based on the
<a href="https://tailwindui.com/templates/studio" target="_blank"
>Tailwind Studio</a
>
theme.
</p>
</div>
</div>
</section>
<section>
<h2 class="text-xl pb-4">Projects</h2>
<div class="grid grid-cols-1 gap-6">
<div>
<a
href="https://github.com/jrpotter/bootstrap"
target="_blank"
class="font-bold"
>Bootstrap</a
>
<p class="text-sm pt-2">
A C-based CLI for initializing projects in a flexible but
deterministic way. Originally motivated to serve as a better
alternative to
<a href="https://github.com/NixOS/templates" target="_blank"
>Nix flake templates</a
>, <code>bootstrap</code> allows you to provide different
parameters to custom initialization scripts akin to
<code>npm init</code>, <code>django-admin startproject</code>,
etc.
</p>
</div>
<div>
<a
href="https://github.com/jrpotter/anki-synonyms"
target="_blank"
class="font-bold"
>Anki Synonyms</a
>
<p class="text-sm pt-2">
An
<a href="https://apps.ankiweb.net/" target="_blank">Anki</a>
plugin for specifying synonyms within flashcard question and
answer prompts.
</p>
</div>
<div>
<a
href="https://github.com/jrpotter/homesync"
target="_blank"
class="font-bold"
>Homesync</a
>
<p class="text-sm pt-2">
An experimental Rust-based project for automatically syncing files
scross your desktop to a git repository. Allows upstream and
downstream syncing with a single command, without any need to copy
files manually to and from a git repository. Separately, a daemon
can be spawned that watches files for changes and pushes/pulls
them as they happen.
</p>
</div>
</div>
</section>
</main>
<footer
class="h-24 px-4 lg:px-8 bg-secondary border-t-2 border-zinc-200 flex items-center"
>
<div class="grow">© 2023 Joshua Potter</div>
<a
href="https://www.digitalocean.com/?refcode=c65b89434c1b&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge"
><img
src="https://web-platforms.sfo2.cdn.digitaloceanspaces.com/WWW/Badge%201.svg"
alt="DigitalOcean Referral Badge"
class="w-40 max-w-none"
/></a>
</footer>
</body>
</html>

View File

@ -1,15 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
a {
text-decoration: underline;
}
a:hover {
color: #0056b2;
}
.link:hover {
filter: invert(19%) sepia(98%) saturate(2006%) hue-rotate(198deg) brightness(98%) contrast(101%);
}

View File

@ -1,14 +0,0 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["src/**/*.{html,ts}"],
theme: {
extend: {
colors: {
primary: "white",
secondary: "#f6f8fa",
},
},
},
plugins: [],
}

View File

@ -1,14 +0,0 @@
{
// Visit https://aka.ms/tsconfig to read more about this file.
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"outDir": "dist"
},
"include": ["src"],
"$schema": "https://json.schemastore.org/tsconfig"
}