index.html (4583B)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <link rel="stylesheet" href="/style.css" type="text/css"> 5 <meta charset="utf-8"> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 8 <link rel="stylesheet" type="text/css" href="/style.css"> 9 <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🏕️</text></svg>"> 10 <title></title> 11 </head> 12 <body> 13 <div id="page-wrapper"> 14 <div id="header" role="banner"> 15 <header class="banner"> 16 <div id="banner-text"> 17 <span class="banner-title"><a href="/">beauhilton</a></span> 18 </div> 19 </header> 20 <nav> 21 <a href="/about">about</a> 22 <a href="/now">now</a> 23 <a href="/thanks">thanks</a> 24 <a class="nav-active" href="/posts">posts</a> 25 <a href="https://notes.beauhilton.com">notes</a> 26 <a href="https://talks.beauhilton.com">talks</a> 27 <a href="https://git.beauhilton.com">git</a> 28 <a href="/contact">contact</a> 29 <a href="/atom.xml">rss</a> 30 </nav> 31 </div> 32 <main> 33 <h1> 34 medical-humanities.org 35 </h1> 36 <p> 37 This post is a work in progress. 38 </p> 39 <p> 40 <time id="post-date">2022-12-26</time> 41 </p> 42 <p id="post-excerpt"> 43 I made a static website as an electronic learning system and forum, 44 with the option for password protected posts and a controlled editing workflow, 45 for free and without a dedicated server. This post has the highlights. 46 </p> 47 <p> 48 It’s here: <a href="https://medical-humanities.org">medical-humanities.org</a> 49 </p> 50 <h2> 51 First, free as in beer 52 </h2> 53 <p> 54 New educational endeavors are, in my experience anyway, almost always 55 bootstrapped. They start with an idea, passion, even erudition, but 56 rarely with money. 57 </p> 58 <p> 59 This was no different. 60 </p> 61 <p> 62 There’s some funding coming in, including some I’m grateful for as it 63 will recompense the time I spent building the website, but overall this 64 thing needs to run for free. 65 </p> 66 <p> 67 Because of that, I used the best suite of free tools I know of: 68 GitHub, GitHub Actions, Netlify’s free tier, NetlifyCMS, Hugo, and 69 digital elbow grease. 70 </p> 71 <h2> 72 Second, free as in freedom (of speech, and the ability to choose 73 what to share on the open web) 74 </h2> 75 <p> 76 While we have a strict policy against violating HIPAA, we also want 77 an open forum that can be honest, vulnerable, critical if need be. 78 </p> 79 <p> 80 Though the students are encouraged to make their writing available 81 for all to read, forming a kind of living magazine from the assignments, 82 we also want to make it very easy to keep the assignments just within 83 the group if desired. 84 </p> 85 <p> 86 This combination of desired features led to a need for selective 87 password protection of certain pages, opted into or out of by each 88 student writer. 89 </p> 90 <p> 91 Usually, password protection on a website is akin to a lock on a 92 door, beyond which is a table that has the stuff you want to read. The 93 routes to sensitive data are locked by the server, you need the key to 94 get into the room, but once you get in the room you are free to wander 95 over to the table and leaf through the dusty stack of papers. Since I’m 96 not paying for a server I fully control, this approach is not going to 97 work. Every route is accessible by the whole internet, every door is 98 open. So, instead of worrying about a door and a lock, we trade the 99 dusty stack of papers for a Rubix cube with a million facets, containing 100 a message that only comes to light when you match up all the pieces. 101 Anybody can come and check out the toy, but unless you know the secret 102 to solving it, it’s just a jumble. 103 </p> 104 <p> 105 To build the Rubix cube I used <a href="https://github.com/Greenheart/pagecrypt">Pagecrypt</a>, which 106 encrypts individual HTML pages and provides a dialogue to enter a 107 password to decrypt it. To mark which pages should be encrypted, I used 108 a simple front-matter key, which a <code>grep</code> command picks out 109 on every site rebuild. 110 </p> 111 <p> 112 Another neat aspect of this is that the <em>entire</em> page is 113 encrypted, even the comments section, so if a student wants to make a 114 post somewhat private and have a personal conversation with the other 115 members of the class, it’s comfortably hidden from the view of the 116 public internet. 117 </p> 118 </main> 119 <div id="footnotes"></div> 120 <footer></footer> 121 </div> 122 </body> 123 </html>