fb4227178d546a0d119a927bd36ee7d508845be8 — HokieGeek a month ago 02e40ba v3.3.0
Fixed an HTML whoosie-doodle I have been ignoring for a while
4 files changed, 18 insertions(+), 14 deletions(-)

M data.go
M function.go
M page.go
M templates.go
M data.go => data.go +2 -4
@@ 19,8 19,7 @@ Name:        "life",
  		URL:         "http://life.hokiegeek.net",
  		Img:         "https://gitlab.com/pond-life/biologist-web/raw/master/stable-life.gif",
- 		Description: `I occasionally play around with a Conway's Game of Life simulation I wrote in Go and Angular.`,
- 		// Description: `I occasionally play around with a <a href="http://www.conwaylife.com/wiki/Conway%27s_Game_of_Life" title="Wiki entry" alt="Explanation for Conway's Game of Life">Conway's Game of Life</a> simulation I wrote in Go and Angular.`,
+ 		Description: `I occasionally play around with a <a href="http://www.conwaylife.com/wiki/Conway%27s_Game_of_Life" title="Wiki entry" alt="Explanation for Conway's Game of Life">Conway's Game of Life</a> simulation I wrote in Go and Angular.`,
  	},
  	{
  		Name:        "wiki",


@@ 51,7 50,6 @@ Name:        "other code",
  		URL:         "https://git.sr.ht/~hokiegeek",
  		Img:         "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAY8AAAGGCAIAAAAM95p4AAAJl3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHja7ZhbdiM5DkT/uYpZAgkQfCyHD/Cc2cEsfy5TKlfZXfPqnk9LtjNFZTJJRCAQcPB//P2Ev/FSqTFkq630UiKv3HOXwUmLr9frmGJ+/r6GzvssfR4PrbxPhaNy1NcXxV/HNBi3nzfU/B6fn8dDXa8Tae+J3l8w8fPS++R7vt8rek+k8hpP78+hv28Y5ZftvH9lfWzjNfeXz7kSjG3MpxLENWl8/X09SVmFdh0cjb+qiQujNs7tGRG1P8YvvNfx2wCe8bHNT/GLP1amP8PxmujHtsqXOL3Hk30Z14/Hy6cVJflATn5d0fA446+vX+J3zm7n+Gt3I5dAuMp7Uz+2+JxxIZNkfW4rvCu/xnl93p13iyMuUNtsdQaeuVJPQqxPymmnkU7y57jSYolZXCpHkSX6jDWt0mU9oOT7TkdqAJ8NIqIL5JRh+VhLep7b7/N4WOPJO3GlJCZL3PHpHb4O/Nn3p4nOuTRP6QnmeGLFuuRSlmVc5O5frgKQdN4xtSe+KbwO8evrAqsgaE+YGxsccb6mmJZ+cksfnDVa4NIcX/mS6n5PQIh4trGYpCAQS1JLJcUqUlMijg18BisXzTJBIFkw2axSsmoBnCb32dxT03OtmLyGkReAMC1agYYEAqycLRfyrUGhEUifbGbFqjXrNoqWXKyUUsvVqVG15mq11Fpb7XU0bblZK6221nobXboiYxZ66bW33vsYPHTkwVyD6wcDU6bOPG2WWWebfY4FfVZetsqqq62+xpatGwkIu+y62+57eHKo5NnNi1dv3n0cuHb05GOnnHra6Wd8oPZG9TNqX5H796ilN2ryAHWvqz9RY7jWH1OkKyd2MQMxyQnE60UAQsvFLLaUs1zkLmaxiwZVE1ZpF5ydLmIgmD2JnfSB3U/k/iVugej+r7jJ75ALF7r/B3LhQvcLcn/E7Teo7fHIrT4A3Swkpiikkn5cNKTxgyz+uWOIf3GC74m+J/qe6D8dp6CcYZzRVvXUkYGTW8zON2V52egOn85C3WJtUuZaExE7cfuYo9rYY6nL3kXzOiFp2bkge7tOGYsbHIHmsyRrWEA0cmesXp1YCPN6XNpsG6nLJ6FtOJdk8/Qwtm+/n/1Y7L6tLZNMFS1RRk8LQdwbRzTPNMu7ltgVKXKJJx5z773OusVC85HqXeree2xEjh20Wg932/aMqdFYWtQt3q6DW5rQXAzHsnbSsLl6TTJXQO9t1G5JFXHvvWGaSvOmyurEGnMvrasMPm1iIX3yhOSKwqO8u6VZm+cYWNupSKezP3S1HwrAKKjvrAh3AQv0fw/qxCk6d2e6QXmJmDFPU/JsRM1nC6l7i2brgtHLcV3tWNqVurHRfCLuec5e4qQgsT/PDZ/YAOHaAKPKrexVcvBXACgZR/UkKSMh7/E6FifUexKpmdJedtaseRZM6ZA1MqvJq95wWqUMh6OLZYD0WNDDE7WFwqfAnNZJtWD0fdbSZ8ntLJ+ju9mktPqROYjewEp176ERn5PLLrDzaOlGM3GI2K2Nq0uuAwQm16+VE1NNi3tFP31t1meet8uYrdMdZUjxbIaSaqVrpnvb9URbhGNXuJ1xJfiAts715H0lX7WPecYsnSKZmOuEAzXOKLBpMIeOZrtTW1kEvyyJ0h4X7CmJmpriR0Q96lL7QalNivQ984tTKa5aphtB9DwGeUOu0eklkB89ap61E7YDwbUY2zmsTErLk3ofsAtkEnO16+VpS1etadHlgf8wn9xCbtqR3TEO3GrkLQFwq5cE+TZxdRwLyQa5aP3EcvK4LJUbl6abzmLoJp1kr+J9M9NoRFIss8lyTmkH7KDHaX0GS50+EJyM5F2SYy8KWbNkGMMdWAMYUXwNt9trgFZOxQ8Wd4xhh7Bgi3cPd7ExG5TtTELG1j2nEe3kJPKYmJ2TI4aGbN/c1aMPNl2NkBUV2nJdvtYIXotDR8OJN1LGnadiw/A1uNO6BGKmfqkwkpPqaF1DINxokzwnReQgLsmL0YIAqT9ub465ZzmCQO4+jl8pkYY7EjR004alTtOlp9EMxH7W2iS4s2+CE+AU6ct+8WVoF3eRNMyzYRqKR5Yxk+uoefgmKsLOe7uIJrRB1zj15pqQItDL63+r9YKorH0J2VHjjU1ckY8xB6HBnI14FeBXepGjBjPazZNcl5HHi43vCbJx77ThXQOShBZgnY+M3dEgelpjavKIrGrETyFV74/ad4fPTIPG5TZvNsZV5mG3E6tKFTEbdMgOPXZagdQ4qQNCQfvwqLRS9VI15Tnwp05xUBIjotgCY6gR+VEaImUIJgOb7Fk7CLPu67OlIo1cS6WA63A/OSNlXrYXBCKXqWPn+/8IMO+j4njpfNdmA1j+sHD2zW7CLhi0KzyA5ruVOYUQpVvBgFlvonbkRUeBDMBPuyxIAjttjeoSaOlBF9zgUkOsBnWQ1ZCbi4Im5cYml4MKYdnZ7FhMp51djRzbodB1iXA44NKlUWXpyeXafQpQFFKRq1H93sXLKhThkk/PZNrphfreWIfu0x2NbE8lDg849gh0JoupomBr2j22K6SoVD3lNlpsda9Bw0An09huXNS8dVCJfSs5tf+AB+DQMfHggw5tyMPQog+5WYpun1IohqeTilYWFQ3mRSeMdkmqjZoLIW+090aZDV6Rg9S+m9m70H/0MzMlXElHKlqMhQ3cHRy41CvqAChYGe0j0Nmwueb7NluAWiAkWaQAzJqeGqPEd1G9DlK88mTBxty5znHRpLKjZBJi9dXsmgOYgp+AGun+K6VU1C8/fEa2ytx6yTAdAphu2IBlQDn5JmXRGkPZKDf9Ulu5pgnJESYC6coRKcnxiQKSQ+9M+b41FAKTj1ueIpbp4IwcDnoROiKseI+SaB7jtRQToJN3wwS0VvMq15ex7hkbVo4yRbXOEI21OKJMsBH/ilVYyB6JWAjZXCOCD/LLPXrf3rB843aI1uZtTWOn/XTqwM1ddodrCA0STL0FoEMB0EX1IGCjQaVO0yAeQbiwG93xWGQZNIFTpHocLGo6J6DhIe+1EmvFZ7J3NnWN0IUDUHEzMyfEkWDhCbyzvCNahLVMcl2lqBKf5qkF3BOWFUUToAMsXJRlnOL9j1rBwGz3WtdMGgfMoZgrfgMi0S5fE4Ycj4qGIf610RuTW432ubJmqjZOlwsy1QZ/hBJiCknrm7NXcHe6/+lBd3BUjJRJsY4jXCmmdkUU6IrQnz6GvzrB90TfE31P9LtjOteA/hOKbVqkjhhAlgAAAYRpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVfU0tFKg52EBHMUJ0siFVx1CoUoUKoFVp1MLn0C5o0JCkujoJrwcGPxaqDi7OuDq6CIPgB4uLqpOgiJf4vKbSI9eC4H+/uPe7eAUK9zDSraxzQdNtMJeJiJrsqBl8RwDBCmEJMZpYxJ0lJdBxf9/Dx9S7Kszqf+3P0qjmLAT6ReJYZpk28QTy9aRuc94nDrCirxOfEYyZdkPiR64rHb5wLLgs8M2ymU/PEYWKx0MZKG7OiqRFPEkdUTad8IeOxynmLs1ausuY9+QtDOX1lmes0h5DAIpYgQYSCKkoow0aUVp0UCynaj3fwD7p+iVwKuUpg5FhABRpk1w/+B7+7tfKxCS8pFAcCL47zMQIEd4FGzXG+jx2ncQL4n4ErveWv1IGZT9JrLS1yBPRtAxfXLU3ZAy53gIEnQzZlV/LTFPJ54P2MvikL9N8CPWteb819nD4AaeoqeQMcHAKjBcpe7/Du7vbe/j3T7O8H40xy1FFYOBQAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfjBR8MNxr44asfAAAW9ElEQVR42u3de1xUZcLA8We4yt1xNBQVRMwilUy3LFE01wte4uIbvlbL62qimS65kpWauyau5nXTvLx4dz9mvmIqCrZJZYCKl1QUMbwQKDCAyFXuMDPvH4eOZxFGEVR2/X0//nGAmXHmzJwf5zzzzEFlMBgEALR4JqwCANQKAKgVAGoFANQKAKgVAGoFANQKAKgVAGoFANQKAKgVAGoFANQKAKgVAGoFANQKALUCAGoFANQKALUCAGoFANQKALUCAGoFANQKALUCAGoFANQKALUCAGoFgFoBALUCAGoFgFoBALUCAGoFgFoBALUCAGoFgFoBALUCAGoFgFoBALUCQK0AgFoBALUCQK0AgFoBALUCQK0AgFoBALUCQK0AgFoBALUCQK0AgFoBoFYAQK0AgFoBoFYAQK0AgFoBoFYAQK0AgFoBoFYAQK0AgFoBoFYAQK0AUCsAoFYAQK0AUCsAoFYAQK0AUCsAoFYAQK0AUCsAoFYAQK0AUCsAoFYAqBUAUCsAoFYAqBUAUCsAoFYAqBUAUCsAoFYAqBUAUCsAoFYAqBUAUCsA1AoAqBUAUCsA1AoAqBUAUCsA1AoAqBUAUCsA1AoAqBUAUCsA1AoAqBUAagUA1AoAqBUAagUA1AoAqBUAagUA1AoAqBUAagUA1AoAqBUAagUA1AoAtWIVAKBWAECtAFArAKBWAECtAFArAKBWAECtAFArAKBWAECtAFArAKBWAECtAFArAKBWAKgVAFArAKBWAKgVAFArAKBWAKgVAFArAKBWAKgVAFArAKBWAKgVAFArANQKAKgVAFArANQKAKgVAFArANQKAKgVAFArANQKAKgVAFArANQKAKgVAGoFANQKAKgVAGoFANQKAKgVWpizZ886/SY6OvppXhWlP8SmvDJc+ld1NYXXBrUCQK0A4EkwYxXgqXLlypXIyEghxPTp01u1avX474DFc93afji9dvN7pu29FygKP6grKGzVy936tZd5vqgVnl4RERFffPGFEGLy5MlPpFbmnZwcxvk29FNDZdXtVRuETucw3p9acSSIp9qZM2da8t2rvJwsdDqeJmqFp51Opzt//nxLvoflFy/zNFErQCQlJZWVlbXke1hxIYmnqSGMW9WKj48/dOjQxYsXb9y4UVJSotfr7ezsnJ2de/fuPXr0aE9PT+NXv3379r59++Li4q5evVpQUFBdXa1Wqx0dHV999VVvb+9+/frVe63r1697eXlJyytWrHj77bcbun1vb++LFy8KIQYPHrxr1y7lj15//fUrV64IIUJCQkJCQsrLy1etWhUZGanVaqurq2NjY7t161bn1i5evBgREXHs2LGsrKyioiIbGxsXF5f+/fu//fbbbm5uxh9pZmbm/v37Y2Ji0tLS8vPzTUxM2rZt271798GDB/v5+anV6vu/5sxqX3UnTpz46quvLl26pNVq9Xq9RqN56aWXAgIChg4d2uzrqm/fvllZWcqLubu7SwuWlpapqamNfcHUaLOLI74tO3GmOvuWvqTU1MHO0r273ehhtr/3EiqV0OlTPEcJvV4I8cz8ELs3RshXLP0hNnvOImm5884NFt3dhBDFB77NXfx35e0X7d5ftHu/tNxm+iT1hPFspNRKaLXa4ODgEydO1Pl+fn5+fn5+QkLC9u3b+/Xrt3bt2o4dO957dYPBsHr16rVr19b5pZ2dnZ2dnX3hwoWwsDBPT89Vq1Z17tz5Udx/eai4oqJCr9cHBgbe+1hkd+7c+eSTTw4cOGAwGORvFhYWFhYWSnf13Xff/fTTT83NzevZPmtqli5dunnz5srKSuX3S0tLb9y4ER0dvXz58o8++uiPf/yj8TtsaWlZVlY2bdq0OtNEMzIyMjIyDh06NGbMmLVr11pYWLTY10zR3oN5qzcZFOtBl19Ydvx02fHTxa/+s/2S+UKnk1IlhFBZWbGVUavmeNkVFfn7+6enp0tfmpubu7m5aTSa6urqnJycmzdvSlv1qVOnxo4d++2337Zp00Z5db1eP2PGjAMHDsjf6dKli5ubm5WV1a1btxISEqqqqoQQx48f9/Hx2bNnz7PPPvvoalVeXr5nzx4jqSosLBw/fry03yFp3769vb19Xl5eXl6e9HA2bdqUlpa2detWU1PTfzlCqagICgr64YcfardAlapnz57Ozs7V1dUpKSkpKSnS7c+dOzcjI+PTTz81cofNzc0nTZoUGxsrhNBoNJ06dSovL8/IyJBzHxkZ6eLiMm/evGZcS/7+/gUFBcnJyfK41ZtvvilFud40G1F84Nvby9beHUyxtbHs7ibMzatSb+hu3S4/eVY7bXb7JXfXgMr8/luZRZfOdj7eQog7UUeETi+EsOjqYtnzt72/Z7uSKmol1qxZI6VKpVKFhIQEBQXZ2dkpj3rCwsI2b94shEhPT1+xYsXixYuVVw8LC5NT1aNHj6VLl/bp0+fuy7q4ePny5Vu2bBFC5OTkzJgxIyoqSj4Oai7yxlZRUREWFiaE8PLy8vPz02g0hYWFGo1GvuScOXPkVP3hD38IDg7u1KmT9OWlS5fmzJlz9uxZIUR0dPS6deuCg4OV/8uiRYvkVA0dOvRvf/ubclcxMTFx9uzZ0o2vX7++T58+o0aNaugO79y5MzY21t3dfeHChf3791epVNKd37Vr12effVZdXS2E2Lp165/+9Cd7e/vmWktSQDds2CDXKjQ01MHBobG3o8sruP33DbVfmJpoZkxuPc5X/PYUlHwfe3vlusrka/mbd96tlcn9R4db9e7ZqndPIUTJkZ8MugohhNUrfdrOmkahlJ72UXZpoqAQIiAgYNasWcpUCSE6duy4cOHCDz74QPoyPDxc2leSx6qWL18uLXft2jU8PFyZKiGEvb19aGhoUFCQvEnv3bu3+Z/C3zaGc+fOXblyZebMmbt37x4/fvywYcMCAgLkgaRjx45FRERIy9OnT1+2bJmcKiFEz549d+7c6ezsLH25bt26O3fuyD9NSEjYtm2btDxy5Mjt27fXOart1avXvn37unfvLqdBik699u7d6+HhERER4enpKaVK2kOcNGnS1KlT5f3EY8eOtcAXTOHX3xjKK6RlzYzJrd95Uyh2zWyHejl9+bmJrc2dqGjiQq2ak06ny8zMlJb79u3b0MWmTJkyefLkBQsWrF69Wv/bYIQQYs+ePRUVtS/cuXPntm7dut6rf/jhh/I+wu7dux9drZKTk3v16jV79ux6L/aPf/yjdhvTaGbNmnXvBRwcHGbOnCkPb8l7UkKILVu2SEfE1tbWK1asMKlvZ8Ha2nrhwoXymJ3y6nWoVKovv/zS1tb23h+NH393LPny5Zb4Xn7pj7UNNX2mbev/9qvnmK6ba5sp/0NZOBJs/u3c3NxcGjM28q6QWq2Wt0Olw4cPyxcYMWJEQ1e3s7MbMmSIdMB4+vTpwsLChrrWdBMnTpT3VpQqKyuPHDkiLQ8fPtyqgXHf4cOHT5gwQa1Wq9Xqrl1rx0qqqqrkR+rr62vkXT8vL6+OHTtKvwAOHjzo7e3d0MUaGr9zdXW1sLCQdmBzc3Nb2gumJiunOkNbuxs12FM0cFBv7z86f8tX+qJi+sK+VbNRqVTPP/+8tLxjx47vvvuuES/cmhr5l3+/fv3qjEnXoZzBkJT0CCfUyO/x13H58mX5GPZ3v/tdQ1dv06bNkiVLPvroo6CgIA8PD/m65eXl0vJrr71m/A7IF1CO5ddhZDqISqWS90NLSkpa2gumKvXG3ZEmjxcafBSWFtYvv0RcqFUzmzZtmjxQMnHiRF9f3y1btqSlpd33iqmpqfJh4H3nKLm6usrL165de0SPxc7OzsnJqd4fJScny8suLi6NutlffvlFXpYHthoiz+1KTU2VG1eHcrzsXvKbBsqD7hai+mbm3fvZycnIJa36eBAXjgSbmY+Pz7Vr11auXCl9eebMmTNnzsyfP79z584DBw4cNGjQoEGD6n1nqrCwUF52dHQ0/r8o5z0UFRU9osdi5G4UFBQoD2wbdbP5+fnysp+f3wNey2Aw5Ofn1ztDzdra+t/01aIvLZWXTdsYW42m9Z1cAexbNVVISMjOnTvlmc2S9PT0Xbt2TZ061cPDIygo6MKFC3WupXzL7L6bn/ICj+4Ax6rhWYjFxcUPcrH7XrdRlKvoP4O+rEJ5uGesVg72bFnsWz0SQ4YMGTJkSEJCQlRU1I8//qg89qmqqoqKijp8+PCUKVPmz59f79thynnhDe1oKIdmHtGjeMBbbuwRlnKCmIeHx4OfZcXE5D/ud6Fi1d1nFpUJ+wHU6lHq3bt37969582bl5OTExMTExMTc/ToUemIz2AwhIWFmZmZyROslTOzGhqgqfcCDzfj8b5BNE75nzb2Y73KR7pq1aoXXnihhT+PTVxXxn4fKEptqKwyljXeEORI8PFwdHQcN27cunXrzp8/v3TpUnlmUFhYmPwZHeVQVHZ2tvEbzMnJkZcfbvpCE4+qlGNVdT7ce1/K2fDK8a8W69EdgZpY362VrtjY/1KTl892RK0eK0tLy8DAwDVr1tS+BGtqvv/+e2nZ1dVVHo26evWq8dv59ddf5WV5zkSdYyUjO2jV1dWNTUwdylG5xr4p2aNHD3lZOtnDk3mlPq51ZexIpMPd9zFqsnKMXLLifCKbD7V6AkaMGCEfDWm1WnnjefHFF6XlkydPGvmgiRBC/hCJmZlZz5495e/b2NjIy8o3Ges4e/ZsndMePEStLC0tpWXp48QNHUMNGzasf//+/fv3//zzz6VvPvfcc/L9PHr06JN6Fh7bujLCwvnu3IuKyw3/iqqpKTt9jg2HWjWnHTt2TJ48uV+/fuvXrzc2WqFSyZOAlNuMj4+PtFBSUiJ/3vBe2dnZcXFx0vKwYcOUo9StW7eWx7CNzBrdunVr03cShw0bJi0fP368oYn7P//8c1JSUlpaWlpamjy1ytTUVH6kMTEx0ukWGhISEvL+++/v2bOn2WeiN/u6qqmpaXSturqY2NTuUJfGxTd0seKD3+luN/VI0ND4u0et/pMlJSUdPnw4PT1dOSB1r7i4OHnOkfKwyN/fXx69XrJkiXJeknJvZcGCBfI80jrnfrK0tJSnU8bExNS7he/fvz8yMrLp7yQGBgbWDrjodB9//PG922plZWVoaKi0bGVlNXr0aPlHEyZMkO5ATU3Nn//854YOxCIiIr7++usDBw7MnDmzUR8MeMDgNn1dKc+Z9TAHjGZm1v1fkRarrqaUxtRzcp7qtPS8DduE6UNuWfLpZWpycskTtbprypQp0idmcnNzx4wZExERIWeldm+/oiI8PFw+MUCnTp0GDRok/9Te3v6vf/2rtJyRkREQEJCQkKC8emZm5tSpUw8ePCh96efnN3DgwDr3Yfjw4fJYzMSJE69fvy7/qKCgYNmyZcHBwe3bt2/oM3cPbuDAgWPGjJGPTAMCAuRzp+h0uri4OF9f359//ln6TnBwsPJsKh4eHu+++668/zV27Ng6f4tBq9WGhoZOnz5dPngMCAho9uer6euqXbt28nJYWJh0/K7X6x/84LH1W2Pl5VsLlpV8HysUb0GW/nQ88/3Z+qJih/964+Eeo6mm9v2Q8lNnK6/UPkD5rA9Puad6BkO3bt3mzZsnfWI5Nzd32rRplpaWrq6uarXaYDAUFhampqbKr2MrK6vVq1fXOaHlW2+9lZiYuH37diHEL7/8MmrUKDc3t65du6pUqszMzMuXL8vvpvft23fJkiX33ocJEyZs375dmoF57tw5Ly8vJycnjUZTVlaWlpam0+nMzMzWrFlz6NAh6fJN+TzK0qVLb9y4kZiYKIQ4derU6NGj7e3tHRwcsrOzleNuI0aMkLsjmzt3bmpqqnRmhQsXLvj6+jo5OUkf4snKykpPT9f99pda2rZtu2nTJnmYrBk1fV1Jn+iU7uo333xz+PDhdu3a3bp1a82aNXLK77OL1/N5Ox/vOwf/KYTQl5blzF10u53GsltXIURV6o2a7FtCCJvXB9j7eBftiXiIx2jV98XqtHQhhKGqOiPwfdN2GqHXmzo4dN69kVo97aPs77333sqVK+VZBZWVlcnJyfHx8SdPnkxOTpZT5e7uvnfv3no/07t48eK//OUv8jB8SkpKdHT0kSNHkpKSpFSZmZkFBgaGh4fXe+63Dh06bNy4UTmnSavVJiYmpqSk6HQ6W1vbjRs3DhgwQJ6ArjzBVmOp1erw8HDlp2eKi4vT09PlVKlUqilTpkgzy+pct1WrVtu2bZsxY4Y87qbVauPj4+Pj46VSSN/09PSMioq690zwzaLp68rR0XHChAnyl+Xl5Tdv3qyzQ31fz8z5wG7k7+Uvdbl5ZfFnyuLPSKmye2NE+0Vz6gx8NuI5ChynsrFW3rgur0AIA6kSzA6V9o/eeOONyMjImJiYK1euZGVllZWVqVQqW1vbzp079+rVa+TIkV5eXkbOsvDee+8FBATs27fv6NGj169fl84arFarXVxcBgwY4O/v36VLFyN3wMvLKy4ubtu2bdKfZigtLW3Tpk3Hjh1Hjhw5btw46eBFni1Rqvio2kOwt7dfv3791KlTIyIijh8/rtVqpb8i4ezs7Onp+c477xj5hLaZmdncuXMnTpy4f//+2NjYlJSU/Pz8mpoaOzs7FxeXPn36+Pj4vPzyo/2DnU1fVwsXLuzQocPu3btv3rxpYWGh0Wjc3d3l0+M82NGa6TOffWw3ZsSdqCPlCZd0eQUGnc7MsZ3VS73s/Ue16vWC+NcxclWrRuxmmjm177T5i7z1WyvOJ+rLK0xsbcw7trfx7Md2KoRQPbqJv8BTq/zkWW1w7R6W/IdtwJEg0OJUptydI6KcUwqOBIHHpPpmZuXV69U3M2tu5bYLeV808PdySn+snWFn0dXFxM6W9UatgMet5Ghc/rraCagWXZwdxvvXc5nvjlYk1p7Gw9Z7CCuNI0HgCbD38Zbfs7v99/8t2LxTX3T3482GsvLCHf+Xs2BZ7dbV2sHBfwwrrbkwyg40cvcq+qeceYo/K2lmZu7U3lSj1peWVf16Q8jvBpqZOX2xyOqVPqwxagU8MaU/Hc/9fLUuv8EPV5s5tXcM/USazQBqBTxJhvKKO98dLTtxuvLar7q8AkNVlYmNtWkbdasez1l7vmI7xOuhPyoIagXg3xv5B0CtAIBaAaBWAECtAIBaAaBWAECtAIBaAaBWAECtAIBaAaBWAECtAIBaAaBWAECtAFArAKBWAECtAFArAKBWAECtAFArAKBWAECtAFArAKBWAECtAFArAKBWAKgVAFArAKBWAKgVAFArAKBWAKgVAFArAKBWAKgVAFArAKBWAKgVAFArANQKAKgVAFArANQKAKgVAFArANQKAKgVAFArANQKAKgVAFArANQKAKgVAGoFANQKAKgVAGoFANQKAKgVAGoFANQKAKgVAGoFANQKAKgVAGoFANQKALUCAGoFANQKALUCAGoFANQKALUCAGoFANQKALUCAGoFANQKALUCAGoFgFoBALUCAGoFgFoBALUCAGoFgFoBALUCAGoFgFoBALUCAGoFgFoBALUCQK0AgFoBALUCQK0AgFoBALUCQK0AgFoBALUCQK0AgFoBALUCQK0AgFoBoFYAQK0AgFoBoFYAQK0AgFoBoFYAQK0AgFoBoFYAQK0AgFoBoFYAQK0AgFoBoFYAQK0AUCsAoFYAQK0AUCsAoFYAQK0AUCsAoFYAQK0AUCsAoFYAQK0AUCsAoFYAqBUAUCsAoFYAqBUAUCsAoFYAqBUAUCsAoFYAqBUAUCsAoFYAqBUAUCsA1AoAqBUAUCsA1AoAqBUAUCsA1AoAqBUAUCsA1AoAqBUASP4fZAwbuXwnsnYAAAAASUVORK5CYII=",
- 		Description: `I am in the process of trying out SourceHut as an alternative to GitLab, so some of my stuff is there as well!`,
- 		// Description: `I am in the process of trying out <a href="https://sourcehut.org">SourceHut</a> as an alternative to GitLab, so some of my stuff is there as well!`,
+ 		Description: `I am in the process of trying out <a href="https://sourcehut.org">SourceHut</a> as an alternative to GitLab, so some of my stuff is there as well!`,
  	},
  }

M function.go => function.go +2 -3
@@ 1,4 1,3 @@-// Package p contains an HTTP Cloud Function.
  package hokiegeeknet
  
  import (


@@ 6,8 5,8 @@ "net/http"
  )
  
- // Home spits out mah site
- func Home(w http.ResponseWriter, r *http.Request) {
+ // Serve spits out mah site
+ func Serve(w http.ResponseWriter, r *http.Request) {
  	if err := Execute(w); err != nil {
  		log.Printf("could not serve page: %v\n", err)
  		w.WriteHeader(http.StatusInternalServerError)

M page.go => page.go +4 -3
@@ 6,6 6,7 @@ "io"
  )
  
+ // Execute will write the page template to the given io.Writer
  func Execute(w io.Writer) error {
  	t := template.Must(template.New("home").Parse(main))
  	if err := t.Execute(w, page); err != nil {


@@ 22,11 23,11 @@ Title:    "hokiegeek.net",
  	Subtitle: `My homepage. Under construction <span class="oldie">since 1998</span>.`,
  	Favicon:  imgFavicon,
- 	Styles:   styles,
+ 	Styles:   template.CSS(styles),
  	Sites:    sites,
  }
  
- var styles = template.CSS(`@media (max-width: 499px) {
+ var styles = `@media (max-width: 499px) {
  		  #title {
  		      font-size: 12vw;
  		  }


@@ 105,4 106,4 @@ max-height: 240px;
  		    object-fit: cover;
  		    border-radius: 0 !important;
- 		}`)
+ 		}`

M templates.go => templates.go +10 -4
@@ 27,15 27,21 @@ </header>
              <div class="d-flex justify-content-around flex-wrap">
  				{{range .Sites}}
- 				<a href="{{.URL}}" class="tarjetaEnlace">
+ 				<div>
  					<div class="card tarjeta rounded-0">
- 						<img src="{{.Img}}" class="card-img-top" alt="image for {{.Name}} site card"/>
+ 						<a href="{{.URL}}" class="tarjetaEnlace">
+ 							<img src="{{.Img}}" class="card-img-top" alt="image for {{.Name}} site card"/>
+ 						</a>
  					    <div class="card-body">
- 							<h4 class="card-title">{{.Name}}</h4>
+ 							<h4 class="card-title">
+ 								<a href="{{.URL}}" class="tarjetaEnlace">
+ 									{{.Name}}
+ 								</a>
+ 							</h4>
  					        <p class="card-text">{{.Description}}</p>
  					    </div>
  					</div>
- 				</a>
+ 				</div>
  				{{end}}
  			</div>
  		</div>