The fifth version of chriskrycho.com, built in Eleventy.

Migrate from Netlify to Render

Netlify wants to charge me $55 for going 2GB (i.e. 1%) over one month,
by 'helpfully' buying me the extra 100GB of storage instead of, you
know, charging me per GB or something. Cool. Goodbye, Netlify.

- Add a `render.yaml` with all the appropriate config, including all the
redirects from `_redirects`.
- Update to current Node LTS so that functionality in corepack will work
correctly (`URL.canParse`).

+203 -5
+1 -1
.node-version
··· 1 - 18.16.0 1 + 20.14.0
+4 -1
.prettierignore
··· 1 1 # Never format Markdown files. For real though. 2 - *.md 2 + *.md 3 + 4 + # Or YAML, at least at present 5 + *.yaml
+3 -3
package.json
··· 7 7 "author": "Chris Krycho <hello@chriskrycho.com>", 8 8 "license": "MIT", 9 9 "volta": { 10 - "node": "18.16.0", 11 - "pnpm": "8.6.12" 10 + "node": "20.14.0", 11 + "pnpm": "9.2.0" 12 12 }, 13 - "packageManager": "pnpm@8.6.12", 13 + "packageManager": "pnpm@9.2.0", 14 14 "devDependencies": { 15 15 "@11ty/eleventy": "^2.0.1", 16 16 "@rollup/plugin-node-resolve": "^15.0.2",
+195
render.yaml
··· 1 + services: 2 + - type: web 3 + name: v5.chriskrycho.com 4 + runtime: static 5 + envVars: 6 + - key: SKIP_INSTALL_DEPS 7 + value: 'true' 8 + buildCommand: | 9 + corepack enable 10 + pnpm install --frozen-lockfile 11 + pnpm build 12 + staticPublishPath: './public' 13 + domain: v5.chriskrycho.com 14 + routes: 15 + # Redirect misconfigured URLs from when I accidentally had `title | slug` 16 + # instead of `fileSlug | slug`. 17 + - type: redirect 18 + source: /journal/relaunch! 19 + destination: /journal/relaunch 20 + 21 + # A few URLs I changed on purpose after publication 22 + - type: redirect 23 + source: /journal/work-in-progress-composition-for-crew-dragon-demo-2/ 24 + destination: /journal/crew-dragon-fanfare/day-1/ 25 + - type: redirect 26 + source: /journal/crew-dragon-fanfare-day-2/ 27 + destination: /journal/crew-dragon-fanfare/day-2/ 28 + - type: redirect 29 + source: /journal/crew-dragon-fanfare/day-4/ 30 + destination: /journal/crew-dragon-fanfare/day-4-part-1/ 31 + - type: redirect 32 + source: /journal/crew-dragon-fanfare/days-7-and-8/ 33 + destination: /journal/crew-dragon-fanfare/day-7/ 34 + - type: redirect 35 + source: /journal/this-week-i-learned-*/ 36 + destination: /journal/this-week-i-learned/*/ 37 + - type: redirect 38 + source: /appearances/* 39 + destination: /elsewhere/* 40 + - type: redirect 41 + source: /library/2020-11-28-1146/ 42 + destination: /notes/2020-11-28-1146/ 43 + - type: redirect 44 + source: /journal/private-chat-and-dms-are-good-actually/ 45 + destination: /essays/private-chat-and-dms-are-good-actually/ 46 + - type: redirect 47 + source: /journal/heuristics-for-good-software-design/introducing-heuristics-for-good-software-design/ 48 + destination: /journal/heuristics-for-good-software-design/introduction/ 49 + - type: redirect 50 + source: /photos/life-finds-a-way/ 51 + destination: /photos/dinosaur-national-monument/life-finds-a-way/ 52 + - type: redirect 53 + source: /feed-without-notes.json 54 + destination: /feeds/without-notes.json 55 + - type: redirect 56 + source: /feed-without-notes.xml 57 + destination: /feeds/without-notes.xml 58 + - type: redirect 59 + source: /feed-without-reply.json 60 + destination: /feeds/without-reply.json 61 + - type: redirect 62 + source: /library/god-without-measure/volume-1/* 63 + destination: /library/god-without-measure/volume-i/* 64 + - type: redirect 65 + source: /journal/crew-dragon-fanfare/* 66 + destination: /journal/fanfare-for-a-new-era-of-american-spaceflight/* 67 + - type: redirect 68 + source: /library/reading-papers/* 69 + destination: /library/reading-papers-in-public/* 70 + - type: redirect 71 + source: /journal/trying-out-jujutsu/ 72 + destination: /journal/jj-init/ 73 + - type: redirect 74 + source: /journal/reflections-on-a-month-with-nova-and-bbedit/ 75 + destination: /journal/reflections-on-a-month-with-bbedit-and-nova/ 76 + - type: redirect 77 + source: /journal/note-on-typescript-conversions/ 78 + destination: /journal/how-to-do-a-typescript-conversion/ 79 + - type: redirect 80 + source: /journal/jj-init/ 81 + destination: /essays/jj-init/ 82 + 83 + # ...including after I made library collections work correctly 84 + - type: redirect 85 + source: /library/good-theology-demands-good-theologians/ 86 + destination: /library/the-culture-of-theology/good-theology-demands-good-theologians/ 87 + - type: redirect 88 + source: /library/the-first-and-last-act-of-theological-existence/ 89 + destination: /library/the-culture-of-theology/the-first-and-last-act-of-theological-existence/ 90 + - type: redirect 91 + source: /library/theological-self-criticism/ 92 + destination: /library/the-culture-of-theology/theological-self-criticism/ 93 + - type: redirect 94 + source: /library/the-story-of-modern-theology/ 95 + destination: /library/the-culture-of-theology/the-story-of-modern-theology/ 96 + - type: redirect 97 + source: /library/christian-theologys-place-in-the-university/ 98 + destination: /library/the-culture-of-theology/christian-theologys-place-in-the-university/ 99 + - type: redirect 100 + source: /library/the-real-aim-of-utopias/ 101 + destination: /library/the-culture-of-theology/the-real-aim-of-utopias/ 102 + - type: redirect 103 + source: /library/an-anti-culture/ 104 + destination: /library/the-culture-of-theology/an-anti-culture/ 105 + - type: redirect 106 + source: /library/christian-astonishment/ 107 + destination: /library/the-culture-of-theology/christian-astonishment/ 108 + - type: redirect 109 + source: /library/good-theologians/ 110 + destination: /library/the-culture-of-theology/good-theologians/ 111 + 112 + - type: redirect 113 + source: /library/perfectionism-without-perfectibility/ 114 + destination: /library/politics-and-the-order-of-love/perfectionism-without-perfectibility/ 115 + - type: redirect 116 + source: /library/the-mixed-moral-qualities-of-any-age/ 117 + destination: /library/politics-and-the-order-of-love/the-mixed-moral-qualities-of-any-age/ 118 + - type: redirect 119 + source: /library/all-is-broken-and-incomplete-and-politics-can-not-heal-the-rupture/ 120 + destination: /library/politics-and-the-order-of-love/all-is-broken-and-incomplete-and-politics-can-not-heal-the-rupture/ 121 + - type: redirect 122 + source: /library/a-chalcedonian-conceptual-grammar-for-love-and-justice/ 123 + destination: /library/politics-and-the-order-of-love/a-chalcedonian-conceptual-grammar-for-love-and-justice/ 124 + 125 + - type: redirect 126 + source: /library/fall-centered-theological-anthropologies/ 127 + destination: /library/eccentric-existence/fall-centered-theological-anthropologies/ 128 + - type: redirect 129 + source: /library/gods-self-commitment-to-creatures/ 130 + destination: /library/eccentric-existence/gods-self-commitment-to-creatures/ 131 + - type: redirect 132 + source: /library/problematic/ 133 + destination: /library/eccentric-existence/problematic/ 134 + - type: redirect 135 + source: /library/tell-me-your-priors/ 136 + destination: /library/eccentric-existence/tell-me-your-priors/ 137 + - type: redirect 138 + source: /library/the-triune-creators-relating-to-creation/ 139 + destination: /library/eccentric-existence/the-triune-creators-relating-to-creation/ 140 + 141 + # ...and notes redirects for bad slug generation 142 + - type: redirect 143 + source: /notes/feed-for-social.* 144 + destination: https://v1.notes.chriskrycho.com/feeds/without-reply.* 145 + - type: redirect 146 + source: /notes/* 147 + destination: https://v1.notes.chriskrycho.com/* 148 + 149 + # and topics I merged 150 + - type: redirect 151 + source: /topics/logic-pro-x 152 + destination: /topics/logic-pro/ 153 + - type: redirect 154 + source: /topics/auto-tracking 155 + destination: /topics/autotracking/ 156 + - type: redirect 157 + source: /topics/ember.js 158 + destination: /topics/ember/ 159 + - type: redirect 160 + source: /topics/programming-language 161 + destination: /topics/programming-languages/ 162 + - type: redirect 163 + source: /topics/composition 164 + destination: /topics/composing 165 + - type: redirect 166 + source: /topics/productivity 167 + destination: /topics/working-effectively 168 + 169 + # and topics that I turned into collections 170 + - type: redirect 171 + source: /topics/the-culture-of-theology 172 + destination: /library/the-culture-of-theology 173 + - type: redirect 174 + source: /topics/the-doctrine-of-scripture 175 + destination: /library/the-doctrine-of-scripture 176 + 177 + # and then some things I just plain moved 178 + - type: redirect 179 + source: /photos/disney-world-2022-camera-gear/ 180 + destination: /journal/disney-world-2022-camera-gear/ 181 + - type: redirect 182 + source: /photos/sony-sonnar-t-fe-55mm-f18-za/ 183 + destination: /journal/disney-world-2022-camera-gear/sony-sonnar-t-fe-55mm-f18-za/ 184 + - type: redirect 185 + source: /photos/sony-a7-iv/ 186 + destination: /journal/disney-world-2022-camera-gear/sony-a7-iv/ 187 + - type: redirect 188 + source: /photos/tamron-35-150mm-f2-28-di-iii-vxd/ 189 + destination: /journal/disney-world-2022-camera-gear/tamron-35-150mm-f2-28-di-iii-vxd/ 190 + 191 + # A future version of my publishing software should embrace the idea that 192 + # series roots can have feed entries 193 + - type: redirect 194 + source: /journal/2022-in-review/overview-and-introduction/ 195 + destination: /journal/2022-in-review/