complete rewrite

main
Ricard Illa 2021-06-27 18:22:40 +02:00
commit 02cafbdcad
22 changed files with 1773 additions and 0 deletions

66
Makefile Normal file
View File

@ -0,0 +1,66 @@
BASE_URL_WWW ?= https://monotremata.xyz
BASE_URL_ONION ?= http://zswm576cm7wgmgcwluy4l4ixkfasj25taqbn2r5pnrrj552l263ff2qd.onion
SASS_FILES=$(shell find sass -name \*.scss)
ICON_FILES=$(shell find icons -name \*.svg)
PAGES=$(shell find pages -maxdepth 1 -mindepth 1 -type d -printf "%f\n")
ASSETS=$(shell find assets -mindepth 1)
WWW_UNTIDY=$(PAGES:%=untidy_www_%.html)
WWW_ASSETS=$(ASSETS:assets/%=html/www/%)
WWW_HTML=$(PAGES:%=html/www/%.html)
ONION_UNTIDY=$(PAGES:%=untidy_onion_%.html)
ONION_ASSETS=$(ASSETS:assets/%=html/onion/%)
ONION_HTML=$(PAGES:%=html/onion/%.html)
.PHONY: all clean deploy onion www
.INTERMEDIATE: style.css
all: www onion
deploy: all
rsync --recursive --human-readable --delete --info=progress2 html/* caladan:/srv/sites/frontpage
clean:
rm -fr html
onion: $(ONION_HTML) $(ONION_ASSETS)
www: $(WWW_HTML) $(WWW_ASSETS)
style.css: $(SASS_FILES)
sassc sass/main.scss style.css
define build_html
BASE_URL=$(1) j2 -f yaml -o $@ pages/$*/main.j2 config.yaml
endef
define cp_asset
@mkdir -p $$(dirname $@)
cp $? $@
endef
define tidy_html
@mkdir -p $$(dirname $@)
tidy --show-info no -output $@ $<
endef
page_deps = pages/%/*.j2 config.yaml header.j2 footer.j2 style.css $(ICON_FILES)
untidy_www_%.html: $(page_deps)
$(call build_html,$(BASE_URL_WWW))
untidy_onion_%.html: $(page_deps)
$(call build_html,$(BASE_URL_ONION))
html/www/%.html: untidy_www_%.html
$(tidy_html)
html/onion/%.html: untidy_onion_%.html
$(tidy_html)
html/www/%: assets/%
$(cp_asset)
html/onion/%: assets/%
$(cp_asset)

View File

@ -0,0 +1,149 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBF3Wf70BEADLKMIZSBJDmwWPEpwdcAahfpkMfkDmLkcIm2t9X6kM0nKY5h2V
BpbK9gXqsqhqTAEJ99w/J9Db7BudoaFPAvX+UWpkt6fMOk6zkG/XbLNR8MtPK8IL
U8K+OUw816VqKpmUQts0yW2S1u+DbeJ2XCzlRL+SloJkP3Sr2lOHlurnZMQF6EIP
bKlnY8+69xW4jZDl4x0j7SEya/qr4uZhSLR9BQUDK3ttyihlQgYqpb+zZ5PaGoRL
qN39JGyXpTxKmpGtDLhvYab9b8QdTP3Fonxtg8iQ5+n0Od+Rt7Lt6C+u6dCyGc0e
T500mRQj/MqodkEmaeovaCjIB8TFtLCkQVtbv+TidwFyHyC+3wiLhkOYeyPM+aft
hyy/f4vqzcwvYq+zZ5ixnueFT/KWsOSJoI7DGn4IGC+PV+krl6dSjs8R4ezuVkKY
7EDMR7dHA4llrnu6XxkhN8miwSihUECgRUeCo/mvw1ka2KcKNdl2Z8WrnIFQF+aM
/Shj2uyAWo2quN6GrsSjWFFJ1UP5jgK575fcHDibMQxvaSTwUr/yTOwiQtvhsBs8
j2e0W8iOiS7+hYdKlI6wPtYUPLN8hq6F1vZsj+mx6aa6vTZZB+6YRcYatJxrQZsb
xIQcof8B4t/JuhHk7llGKedU8Hc54E9SIN4QyUYhFV9DfWuB0enmwbjp+QARAQAB
tCtSaWNhcmQgSWxsYSBQdWphZ3V0IDxyaWxsYUBtb25vdHJlbWF0YS54eXo+iQJP
BBMBCgA5AhsBBAsJCAcEFQoJCAUWAgMBAAIeAQIXgBYhBLUdRUikhG48jRFcgIMz
z7C50yRNBQJgE/dkAhkBAAoJEIMzz7C50yRNRSMP+wbF2KaLAN3LzjoW+cf0EfYV
qlrWRPIZeNNEz4P8qLCCHQSrFC5qfmmntNA4G57thMp006tOZ7MnSom8qVuu1HT/
eA63KIP4gKg9mrKiE+5XeX+TIYuMb4N7WBQ0M3LR7BTa24hU6LeIFyV/jqwZheBl
ETrw8iXQZWeyPMBWFvfelu9hEJVfPvrz6B/z/hB63MAHzk7La6kCxsioDcHTUZbM
1a1doE4BOtGqhP+fB9n3VDbAAFJvTZE4N3k05PrWxgFOHYxo9D1WIxYxVJ3PKN2G
3nzv7r68vm5r3UC+k0jmUn/IyM4z914Ix2fhEz+d0Qw3eLdVktuAhxPMZ6oQyRcH
ytDF4GydKiWuWK01Hy6MvDkwehXZUtP+JnLvNss7HhmiOcg0eVLmM5ZsRz9tJFBS
6k+cXqD0/ySDU6iTqtRgthav9/p7pV4rs5S7rHrzUdwAEmonAcH/tBVk9hCCF2I+
LGd+zGjSmoXRTikXAUoTR65+ZLMco8rs2Rsot+EWWwDvzoKJ3urTGJgmd7C1r3aE
tHq6/bFGs0QKDtv+e+QS12WkX3UjTFZblQ/xFvBD8kKdQbftYavHQ0mU7wlzCbT7
kvmcy9TNwCuhrbb8yO7wT/0odhkeEJ/Mi4ZwLLgz37eSVpIwlrOzyYdnam0RCUBZ
ic1TTczDw2qat4KczLFxtCZSaWNhcmQgSWxsYSBQdWphZ3V0IDxyaWNhcmRAdHJr
a24uY29tPokCTAQTAQoANhYhBLUdRUikhG48jRFcgIMzz7C50yRNBQJgE/bzAhsB
BAsJCAcEFQoJCAUWAgMBAAIeAQIXgAAKCRCDM8+wudMkTVojD/wPkAnbGrfVwff9
Ef5gPQRmghz9peHJHwIrAPO3yRPiMIMMwmg3KuV+mvFJT+rzlmCKfy+L9s1BaspJ
awgAHi57BFDsM7Bio3Thp8b++qruxCG64GKSvmCwHV+gfnfSv5hdMjrtigG38BXX
TcPjsJmhPWw0QLWy4yEEBPYbcOYnnNDCf7iFozilk6Fv3COT0jTxVz16xKWIiLib
9arSUDHufn7QMxh4feM1mxNM/ipD/zbADRugIR3zdCS0TzkzY5KWAPyuLY8R9MiI
Yp4Tc236KCmrDgF1MXAcMXaWPnzmOzvCRaBKd13t27zFq9s4jfe22i9eNQsxwGk5
w5Qg6sIjFbCUGOw8GItbiK8NfiIfBSk/tCT+gdXEED3hqvjE3GQPKTuBXKdLAMIa
70lwCUZVcYJg19plfeqWhdvVYvvV29wuVYDRLeYPYYhIMBefdaxs4u6/SX+QgL2E
vJrvhpo9KlPKUfyxclvNUlIryeJDftAFLrlMO6CvrWMJgKOjBLL1L49TlUNL9wH/
UVrbIacXf0rjrYSgiW6t+DVWyBtGIF0LsXbTIkzJcm0CwsNXmzVBAcDZ2q2Q2L0Q
u4UYPUvDtmcQczq0FWRQPNftdvgs8G4Dn9JyURnDTVc2wQErwZVNGCpYBIphbXQX
PuWazolsccfhUzGHl0BEtwtrp5FSH7QuUmljYXJkIElsbGEgUHVqYWd1dCA8ci5p
bGxhLnB1amFndXRAZ21haWwuY29tPokCTAQTAQoANhYhBLUdRUikhG48jRFcgIMz
z7C50yRNBQJd1oM5AhsBBAsJCAcEFQoJCAUWAgMBAAIeAQIXgAAKCRCDM8+wudMk
TRZiEACHzqDGVmiVMZr8TW/VhxzYky9fBRbrBkwR+I8H2uiy0c/800umEgqqVDAY
xMLhYZoj1oKYGO4zAIaPNCDpZBEUeOEJOKvmQ9lPCVJhDHjT9AdTS9r6I3EWRcnf
RQg5p0gwEVFCWLVI19L3aMfbecHVdJ32UySrL87f/clHGn9gmddRQd679VcbMntT
9YymJKs3KWYdreXmCkzZ6eY1R3SKhLKBeQd0NRq7Hjy02WX5ajGXe7QZ8470IOeh
mwmpzYA8U19X4GOXee7DmVLevRvGD95Y3PITeOcVBbAZil1nW6jLnBfKIybAPdO3
VJdO33VRQFi2ZG5IaXPMBuVwE2Wun5Ns+IMUsllT+p87jzF+XRAkZsWWkFNvF+Bu
83qzJE7fb4EVVRafZkLDerGjrwpA36l2ZxPlsFsnRoHeQxMfLYd8U+wkGuPLr3yX
pHKO9RsYNTRkiEJgDYC9kFbYgof8uK7MJByHks7qvwCqK92s9HHOcPDl9SeROokK
qzakopZ2rC4yIm1yIrYAvBKQobUAW0wqQuX/xEKIJTxHOhOdrXrbvV8kRf5LIrVJ
7qNUweF0vZ1UwW1qIl9Z+jrTOF7g1vk1RhTQX4LbHH0VetkDWnY7ZgELXCquB1TV
+n+Ld+4Tl1r2nVA9Wp9SAngMQ8/jQKWbIc70+vVh+NmWApVCErQkYTU3NTA0Y2Yt
MGRkMC00ZTJhLTg1MjctMTVlZGRlMTdkOTZhiQJMBBMBCgA2FiEEtR1FSKSEbjyN
EVyAgzPPsLnTJE0FAl3Wf70CGwEECwkIBwQVCgkIBRYCAwEAAh4BAheAAAoJEIMz
z7C50yRNBZUQAImTlu4GEIz3uvkzSFXoNjZPqAZ3k3DVett1XbrG/2LpeDrTht02
pQYNjkGWopxqyVONXGT+q7TwZ+Fa/jQBXzeQvPVes+XzsjX+g/3ijHouTUg+scm9
6DDhQFK/liT3wkggFuZpoQKeM+2EK6sxyNGL933dzRGaXxYXOWssl6WdGPBvh8zs
nKHwzmZKwVRGifeeMcVRdninCy88k1XIYhSwt7ykxN4wkHk/RIrrpplPpr5zzye+
9QvQQCJSYHapi4lf9kHwjbxGuatceyk18w3C+zt/o2gHuj1VN+QfoXebO4k/35XT
oJNTtM/PQVwz7CVIAdNeny4qVl4Le/CeGzT0ugyziutvAZC9On3tcNn9iEM9bHhk
PEiwlZnIN670XI73LjeZPdMkIYO4iDI0msmeKEKJiWmYlUut9qWCNox10u1fOU8F
k6LQf7LOXrHu5yZ5MywIHWWLk58ntFVDrLK/CE0/elAiACFEBJMBG38WpyxXxgAw
fVrDzYNxkVhHfg0pB+63uKlfQI8a3YFAXcTVuOo1PnFunZaQZAXlDf8ge1iorXDy
s3faQYjEG2Yxb7cKMDIgsZTbz0UCyiSkFlWbsmG2+ffGN0LdOSYa39hxjYVsASFb
EPojmwrn6X+YrnYtFgokn/z/79J7XzIkwOnACsrTltANmkyx9A8G9hdOuQINBF3W
gVABEADIhpPoiTFd60S5FvxrCt1djiJsI0c6VElpWgJz9sxE4GrmMWzATpcXN+yQ
VhKq+E4OISnnYroZ03fEAaoUU76MhNJrAMTDNUtg+JzuP4R+g8fDfFdgi/CAhP6x
tvNU9+Yqu5Fh0V0YXHeMT8jYE3ROjmwb++F89a39LyDusGuNpwb3JWR8g8z2Vu93
R0AmoYdPptO8xwno4qk36AJtJffEJ4UEAa3eDgsRT3+RTWkTKlARAn165fXbjzr/
NnrO/2Mu0n2jP83a31qF5O1p+BHlXUoUeQGTlR826dZK0rP+DmM7eqUu8DWW1TXO
CPOkOxIGNlBR1iB3rn/6wtl5EwIHl7lMh4Ok9PX0tYTrMycD6R8Jyr5QrF1c8wdI
UpSr7ONOBtZtcMIR0dQMje+3z/b/1kYh97jUrScl9rP7q8AKbeHKyIrQ2NtSuHGu
4QQh4jIYSxGYhblJhERdcHLUxsFMV4JJ3+BQR/C7bmLsSGweXBILvs/nm7lQQ9v6
OnU0U8sXPlBqr884bbNs1JRAWz8Cd2z9DWz8PBQFXmBYY+dDOxPnGxw9ynpWc8PI
ydtKm6QzxT5u2SAnds4MIqfWu8ayzY1hVO2bQKMepMv675Fwf4tB+rHl8ZS4d02l
MlWFYCA0ElLm3s6TaaqilOGFsiWv7vx8KYvaR0AxJW9V1yew2wARAQABiQRyBBgB
CgAmAhsCFiEEtR1FSKSEbjyNEVyAgzPPsLnTJE0FAmAT/FwFCQQerowCQMF0IAQZ
AQoAHRYhBM392XYFUu/Af+y37faaZyty5UkCBQJd1oFQAAoJEPaaZyty5UkCx4gP
/0MY67c01V2zacjOcSQBZ9u/RIpVT9exZXSBoO8QXwyGzYoIjEtEKgK3M405Klbh
dImPvua+MN8sKL4DnXlvK3Mr1vN38yETjk+qdk/V1PLGpg7+sS1DUkKQpRBk9Aor
xaUkB7HrgvAiDig62YYkNfJefDnS3ZQIBZJNu5k0mkNm3IgFFOiYFDa48u/2AUtH
QmdQVU0pvmWQh3sjo3JSKeWrxWXJ1qSYmfjstQ4TUohZcPXsZ3wUmLFkOztsPrUl
+OMlkHrrRQaUeaccwQFYTAH7xlLiSrpwG81HjWg8cucOojl2RHemmM7ZMov9gGq/
HmulgL+9X2/tb1+UT0Vtr++QgQsb0bMnHNKY8lxi5ZFarxoRaWpLBoI5lgUijObJ
zOOx6e7dYgIMPqoX2bZvhIW0JA6oB5PiVIpyYzmHIxTiWNk9IAewi7v0rIVogSBx
ao6bJExnvRB1CZ7eX4OsAcbtOwfphfN6ug4vWB8Mq5tGdCiCOAc+sFtkCLromZhl
MOGNQJc+nMyKaGlaM64pGHHsu+FKV+lWgxipdBMvJNQIrlO0BlltJED4woTcB0Uk
sLpI7W/fQhzRxwdDCr+GxCB74V70oH1p7BBSpQSvECKWFX7yED/qvPqFNv2Qh5im
QNNKZAcInZ74MsaaXZ/3z4UaERSwAuMeQqoeUMP1J02eCRCDM8+wudMkTRcgEACr
GsK6PLbcJtsq8vmPXkr024U7J5F5Jw56QJ6hxmfXKXHZtFp+AT1/Pwn7/Qb3sXdg
HU0H1Pw2v1dkXspyNyzhW0AGQ28U5gh397Z3DjA7Ar1k9Uh9fMpkNm8u5J5ACd4g
xxaRU3Jcq6I2pTgDAzRmFZGfyfuIzit08fq9/H9BVuDduYcaNM6wHUaVzBMmSooU
iR1AnRutTue4xl6G8ullGgo3vJ6DvP2aEpms+JbW1Ab64974CItJ0rSsS/wTJ9IP
YEIhXlkG7Y4ndr0VdoMfGMXNSSP/4ttfrG3R3ZLZb2ocpUZx76S7nJpp4N67C1iw
JM86Ek2XqvEOd4a9YyFnq2wdbNeCKyrFvQlrbvXdVugOsrpS5RQio9nQfiinvuy0
wnPjA7eiCZchx7sbqBR4eKdmeNNbiqPNAzqXnRtVkUBMZbFEsSf8YN/FCztgLYJP
L4AXJjVRGWMfGWPkKm7jEOGjHYWYvg0ToH6DrdidOBwtR3d/Vzrb2C57OZf97Gqm
FlWepOxoeBaglk5fOXw7bkfpuUoOE0BHK/C9vQq0Fvuh5Ew7ffIydnMPfXF5Gquz
ZWao4mC50iuKD3MU2orJK1+MldZfwC0OfGEiCAqSExRj46tRhOxvi1NHNR7h8Jqs
gibNzTaWC8h5n+5yK5bLG8AKFhALZTA3rgF2VvQDXbkCDQRd1oGWARAA2vqkLtCL
MadYQ9tYqcxsKA2tNXn36Q5eMJ9Xyjr1OsMF1C2+6f0JGlpvswQDXczzcU/RZNXp
rjoeg4ofu1+OdiBQpe4tdkNemmA0nuSokkJwe5LL9QgGI4sq8tFlIW9FLwXdNhnu
3WjC5cOS6QJBtvKTl+YyhJMuPkJq9bpCFXCh/WymJNmb18qHgHLHQVYcHiQd9S3O
6u7zqKTzSatrw//ktpMYB8oEY72intF81Qx1+py3lO8N2McCHiPgRQo4ZOwG1S/D
2aFCjK1Bvj0SWvf2auo4zKoAE866FTpjXIYE1gMy5uUL4NFzsIGEcPxBCjHDN+we
bSgAgYemKkPM0mo/mmBx9D6ZIxsh2AFD15QVT+INGJnPjtZE90KVoybE7jQgNe85
VtCjOeOdbz6UM2UmAfaZK1zgHSk0nlvb/D3gYW4nb2n/UKNV0lFFRTCzCNVjNyav
PS7AzRCHONED6Pi//PB6Xp0uulYN8PKQAjO1+kR+Z/j84L4+rYTd29BUnqoqGxx9
b0Jd3E96+3DOs1Ofv7VlbGhZGJXq36ITax/pGgZY1DLsuxDhwe6nauMZiBdoF7JX
SRcuFe2TICvO0hLG1TPVunlvbEorgQ5pWkwBo0CHrJgbw49bCzbcvWX2sglNgC26
MHXOhdx5VuAwOFS0tsp8zE709my6q5c1nWsAEQEAAYkCPAQYAQoAJgIbDBYhBLUd
RUikhG48jRFcgIMzz7C50yRNBQJgE/xnBQkEHq5GAAoJEIMzz7C50yRNJbcP/Awh
4lzYSNI4TjKBcPBInnk5pVvllMgUbTi1f4IbZhkLmyUHiTyWnSVWqJe7OV3sFuuE
phtIpKcIvveQvW2pPkHxONBSFiC+K2Kt0690/yIaLQnb+4kM6OaCRmQ+StWN3rwx
SgS5weHIoaQBjsPIzXs5RVaCbztBJZ1kbVdiS0ZBfWu8a4+EHGSnE4R3Ra3JMtZp
MmysUJPM9C3xXa7tg3FtygTZTloL4Gb7W7IiBj16MD98s0eKq9CIsqfv29npyWiz
WrKYftfS10Lz2EWB9/iVR1ms2bA9zFPr+8caZd52Sr4f6rQzJwTxJ21vrdPkJtPc
0pZrnDdSqvIGLPIQZtbfc4ykRduxU/lltQNfeJpRdjYtgSLxqlXdjFrmdE1jxpk7
rwaO2I3JytToTFaFQLrqCeXORUujlNhLnaSuodIrNgaVlJl0JuxS+j2huiXj0V66
29Q+bge31RQiilLLxbTvZ6LmqcpB/7eN5hvK/Nq2auAesi9/g7IA81qSCQ775AQs
QCEl4rUkOjcCy9J+hdKhkyLMdwNrCapG90x/w9hmSOvECpaKZGSJIMWDiaX1Q736
//GYhwxsTAA+NUePxw+QcZTs3KDwp7s2IL9PkqTrKB28q//kTaKk5BhUm3eH3Q4u
o1u6nSsxtfoBEqQXe7Bl2IoG5aIebetyfu5+viwduQINBF3WgiMBEADaiwmnSKC4
DpznZlode1987DvGVLWqkvDZXZ6ey/LOZhRHvNnr5lP4Ke034R17mHHuTlzzuTKU
KTN6JcIxBURGUwjWgNQO5z+7SapdOvPpw7M8wOlgp92CbIMiE/tReNbUi2e584Y5
NR4tMCQm+FPvQ7c7nY/WoxJ6VSiKBbXzN+IrB9H6ZAVyfAlzHpxhwXeuP5xFwTta
pzyzyc4phvuIhbXUc9NOZHXwoAR2La/0TVOgDyktEmCq6aGet03Azz6KPRptdnf4
g9V3u8YivccXfd9WTrJr9fj1fWjDU9bBKVU6GtdcSwfqKwa6X4sQIZfONKvVEfqb
IIEB70FsXHcdfnm3EN5L1PWbC441Q8bB1zvu/GnlXTlxDFmzByxnbLWTSPLuQyKq
5sv9va8Jl9QEVpS3qWJbPHYBTevgboTExyLmpEfsCI+Of86Oxb8PNjyhX1/oWiy8
S3w+5oQgAb+yNfSVPnX7CO4oGQhnttoXHA94LzxArYr9zZIp2asRMlc4VVWVH/jQ
4FdLDjvKNARYiytOplZBPvFOHJiGb/rfjZKbMPPE+3V1WQPZ6B2nlWN5QxTpnLgT
QnONr5rlSrvzFPY8BISUAYcdOCErG4agHDkHFZqWn8u+51wUZUnXo4NI+rty4Nzm
c/kPfqWyv/8mSJfihidfuuHGEEzCk1qVdQARAQABiQI8BBgBCgAmAhsgFiEEtR1F
SKSEbjyNEVyAgzPPsLnTJE0FAmAT/GcFCQQerbkACgkQgzPPsLnTJE1Fxw/9FKUS
jgvebXAbnpwOzNhZ6kxqBUgVv+My+ckcnLXSvlsiB9v1WgBhI86nhMyF9Kbi0RrH
qTNI6MaE1vbc3wZd7tHyhs4UxUUys7eQj72FBHYwp18CZhqgtL1+4LSanwms8lDI
G9pv/eDyJ0WpjQbxSxQsARSiZ7Caw/uCdWZnrmxQtu2MKAsDy1UDNAHX7gqN2gsK
SWHnKZaC0R3E5MF7o5uisrnNNOTi7buVQzl8wI+Noe8Czv/72tjyVs7ER7qvqZyc
f8I8azdZhOxNIoX4SH0i7IK/LV4pV4nqSONd/f88g1Pbdk3QCL0neOHRK4oqw7QD
Do0w7qdKA2p8BgClr/LOd63A3qnbBpx4+mOxzGOJXHiseqsabqA8f9+9xpVl0zt7
KA2We9Anzd6KhKiBQVo3+Zz0Mi56TdLneTLaJUcbFQEjpDGqexChjS75thcMZm92
6e8lmqJxkM1yaxd6QNgTZVSjxBr7e6G4Du1Zj4XjqAEflwutfe52ddvfXqVf3lX+
9oEw3hRInHV/uuwXH4MLAKCaFS6QJs617n2TKR5+24hONTE6wnMpGkDYkyt8pIsu
Onbprfp7tilAzE1UsXYX89b+ub7xk7S6sCl95Y14phYUwlY1X8Lr63Hv/ko/bB7S
k04FD4X8hRaihqa4RPDG8kyMKS9zCd3lL+Fteuo=
=vzV3
-----END PGP PUBLIC KEY BLOCK-----

848
assets/cv_ricardilla.pdf Normal file

File diff suppressed because one or more lines are too long

16
config.yaml Normal file
View File

@ -0,0 +1,16 @@
nav:
- name: about
icon: info
endpoint: ""
- name: CV
icon: file-text
endpoint: cv
- name: code
icon: code
url: https://git.monotremata.xyz
- name: contact
icon: mail
endpoint: contact

6
footer.j2 Normal file
View File

@ -0,0 +1,6 @@
</div>
<hr>
{% if note is defined %}<p class="note">{{ note }}</p>{% endif %}
</main>
</body>
</html>

30
header.j2 Normal file
View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<style>
{% include "style.css" %}
</style>
<link rel="stylesheet" href="style.css">
<title>
{% if page is defined %}{{ page }} | {% endif %}Ricard Illa's page</title>
</head>
<body>
<nav id="nav" class="nav justify-content-center">
{% for x in nav %}
<a
class="nav-link"
href="{% if x.url is defined %}{{ x.url }}{% else %}{{ "BASE_URL" | env }}/{{ x.endpoint }}{% endif %}"
>
{% include "icons/" + x.icon + ".svg" %}{{ x.name }}
</a>
{% endfor %}
</nav>
<main id="main">
<div class="header"{% if headerid is defined %} id="{{ headerid }}"{% endif %}>
<h1>{{ title }}</h1>{% if side is defined %}{{ side }}{% endif %}
{% if subtitle is defined %}<h2>{{ subtitle }}</h2>{% endif %}
</div>
<hr>
<div class="container">

1
icons/code.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-code"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg>

After

Width:  |  Height:  |  Size: 307 B

1
icons/file-text.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file-text"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>

After

Width:  |  Height:  |  Size: 473 B

1
icons/info.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-info"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>

After

Width:  |  Height:  |  Size: 347 B

1
icons/mail.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>

After

Width:  |  Height:  |  Size: 354 B

19
pages/contact/main.j2 Normal file
View File

@ -0,0 +1,19 @@
{% with %}
{% set page = "contact" %}
{% set title = "Contact" %}
{% include "header.j2" %}
{% endwith %}
<dl class="contacts">
<dt>e-mail</dt>
<dd><a href="mailto:rilla@monotremata.xyz">rilla@monotremata.xyz</a></dd>
<dt>GPG public key</dt>
<dd><a href="{{ "BASE_URL" | env }}/0x8333CFB0B9D3244D.pub">B51D4548A4846E3C8D115C808333CFB0B9D3244D</a></dd>
<dt>matrix</dt><dd><a href="https://matrix.to/#/@rilla:monotremata.xyz">@rilla:monotremata.xyz</a></dd>
<dt>xmpp</dt>
<dd><a href="xmpp:rilla@monotremata.xyz?message">rilla@monotremata.xyz</a></dd>
<dt>fediverse</dt>
<dd><a href="https://pleroma.monotremata.xyz/users/rilla/">@rilla@pleroma.monotremata.xyz</a></dd>
</dl>
{% include "footer.j2" %}

31
pages/cv/education.j2 Normal file
View File

@ -0,0 +1,31 @@
<h2>Education</h2>
<div class="flex-jobs">
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">2012 - 2013</span></dd>
<dt>degree</dt>
<dd><em>MSc in Bioinformatics</em></dd>
<dt>institution</dt><dd><strong>Universitat Autònoma de Barcelona</strong></dd>
</dl>
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">2008 - 2012</span></dd>
<dt>degree</dt>
<dd><em>BSc in Biochemistry</em></dd>
<dt>institution</dt>
<dd><strong>Universitat Autònoma de Barcelona</strong></dd>
</dl>
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">2013 - 2018</span></dd>
<dt>degree</dt>
<dd><em>PhD in Biomedicine</em> <span class="note">(unfinished)</span></dd>
<dt>institution</dt>
<dd><strong>Universitat de Barcelona</strong></dd>
</dl>
</div>

118
pages/cv/experience.j2 Normal file
View File

@ -0,0 +1,118 @@
<h2>Professional experience</h2>
<div class="flex-jobs">
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">January 2021 - current</span></dd>
<dt>company</dt>
<dd><strong>Trakken</strong></dd>
<dt>position</dt>
<dd><em>Data Engineer</em></dd>
<dt>duties</dt>
<dd>
<ul>
<li>Design and implement data infrastructure</li>
<li>Develop and maintain internal tooling</li>
</ul>
</dd>
<dt>technologies</dt>
<dd>
<ul>
<li>Apache Airflow</li>
<li>BigQuery</li>
<li>Apache Beam</li>
<li>Google Cloud Platform</li>
<li>Python</li>
</ul>
</dd>
</dl>
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">June 2019 - October 2020</span></dd>
<dt>company</dt>
<dd><strong>Lead Ratings</strong></dd>
<dt>position</dt>
<dd><em>Data Engineer</em></dd>
<dt>duties</dt>
<dd>
<ul>
<li>Develop and maintain a data-centered ML SaaS platform</li>
<li>Assist Data Scientists' internal workflow</li>
<li>Develop connectors to third party platforms</li>
</ul>
</dd>
<dt>technologies</dt>
<dd>
<ul>
<li>Python</li>
<li>Django</li>
<li>Amazon web services</li>
<li>Docker and Docker Swarm</li>
<li>Redis</li>
<li>MySQL</li>
<li>Elasticsearch</li>
<li>Numpy and Pandas</li>
<li>Git</li>
</ul>
</dd>
</dl>
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">July 2018 - June 2020</span></dd>
<dt>company</dt>
<dd><strong>Sellbytell Group</strong></dd>
<dt>position</dt>
<dd><em>GCP Support Engineer</em> <span class="note">(Big Data and ML specialist)</span></dd>
<dt>duties</dt>
<dd>
<ul>
<li>Provide Big Data and Machine Learning technical support to Google Cloud Platform users</li>
<li>Troubleshoot and debug customer&rsquo;s issues</li>
</ul>
</dd>
<dt>technologies</dt>
<dd>
<ul>
<li>Google Cloud Platform</li>
<li>BigQuery</li>
<li>Google Dataflow / Apache Beam</li>
<li>Google Composer / Apache Airflow</li>
<li>Google Cloud Pub/Sub</li>
<li>Python</li>
</ul>
</dd>
</dl>
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">November 2013 - April 2018</span></dd>
<dt>institution</dt>
<dd><strong>Institute for Research in Biomedicine</strong> <span class="note">(Barcelona)</span></dd>
<dt>group</dt>
<dd><strong>Molecular Modeling and Bioinformatics</strong></dd>
<dt>position</dt><dd><em>PhD Student</em></dd>
<dt>duties</dt>
<dd>
<ul>
<li>Perform bioinformatics research on Nucleosome Positioning</li>
<li>Develop and implement statistical analysis methods</li>
<li>Develop and maintain R packages</li>
<li>Integrate my code into bigger genomics frameworks</li>
</ul>
</dd>
<dt>technologies</dt>
<dd>
<ul>
<li>R</li>
<li>C</li>
<li>Python</li>
<li>Bioconductor</li>
<li>Sun Grid Engine</li>
<li>MongoDB</li>
</ul>
</dd>
</dl>
</div>

21
pages/cv/main.j2 Normal file
View File

@ -0,0 +1,21 @@
{% with %}
{% set page = "CV" %}
{% set title = "CV" %}
{% set side = '<a href="' + ("BASE_URL" | env) + '/cv_ricardilla.pdf">pdf version</a>' %}
{% include "header.j2" %}
{% endwith %}
I'm a tinkerer, a <em>data-oriented</em> programmer with a bias towards
<em>functional programming</em>. I'm a fan of <em>clean code</em> and
<em>correctness</em>, as well as <em>minimalism</em>. I enjoy
<em>modern</em> (but not bloated) technologies and I like playing with
new things.
<hr>
{% include "pages/cv/experience.j2" %}
<hr>
{% include "pages/cv/education.j2" %}
<hr>
{% include "pages/cv/research.j2" %}
{% include "footer.j2" %}

143
pages/cv/research.j2 Normal file
View File

@ -0,0 +1,143 @@
<h2>Research</h2>
<h3>Published software</h3>
<div class="flex-jobs">
<dl class="job">
<dt>name</dt>
<dd><em>NucleosomeDynamics</em></dd>
<dt>language</dt>
<dd>R and C</dd>
<dt>function</dt>
<dd>Suite for nucleosome positioning analysis using MNase-seq</dd>
<dt>forms</dt>
<dd>
<ul>
<li><a href="http://github.com/gthar/NucleosomeDynamics">Standalone R package</a></li>
<li><a href="https://mmb.irbbarcelona.org/NucleosomeDynamics/">Backend to the NucleosomeDynamics web service</a></li>
<li><a href="https://www.multiscalegenomics.eu/">Tool integrated within the VRE of the Multiscale Genomics European project</a></li>
</ul>
</dd>
</dl>
</div>
<h3>Congresses attended</h3>
<div class="flex-jobs">
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">2016</span></dd>
<dt>name</dt>
<dd><em>15th European Conference on Computational Biology</em></dd>
<dt>location</dt>
<dd><strong>World Forum Convention Center</strong> <span class="note">(The Hague, Nederlands)</span></dd>
<dt>poster presented</dt>
<dd>NucleosomeDynamics: a web portal to analyze and visualize MNase-seq data</dd>
</dl>
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">2016</span></dd>
<dt>name</dt>
<dd><em>XIII Symposium in Bioinformatics</em></dd>
<dt>location</dt>
<dd><strong>Universidad politécnica de Valencia</strong> <span class="note">(Valencia, Spain)</span></dd>
<dt>talk given</dt>
<dd>NucleosomeDynamics: a web portal to analyze and visualize MNase-seq data</dd>
</dl>
</div>
<h3>Workshops given</h3>
<div class="flex-jobs">
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">2017</span></dd>
<dt>name</dt>
<dd><em>Multi-scale study of 3D Chromatin Structure</em></dd>
<dt>location</dt>
<dd><strong>European Bioinformatics Institute</strong> <span class="note">(Cambridge, UK)</span></dd>
<dt>topic I covered</dt>
<dd>MNase-seq data analysis using the MuG research environment</dd>
</dl>
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">2017</span></dd>
<dt>name</dt>
<dd><em>Multi-scale genomics</em></dd>
<dt>location</dt>
<dd><strong>Barcelona Supercomputing Center</strong> <span class="note">(Barcelona)</span></dd>
<dt>topic I covered</dt>
<dd>MNase-seq data analysis using the MuG research environment</dd>
</dl>
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">2016</span></dd>
<dt>name</dt>
<dd><em>3DAROC 2016</em></dd>
<dt>location</dt>
<dd><strong>Instituto Gulbenikan de la ciéncia</strong> <span class="note">(Lisboa, Portugal)</span></dd>
<dt>topic I covered</dt>
<dd>MNase-seq data analysis using the NucleosomeDynamics portal</dd>
</dl>
</div>
<h3>Internships</h3>
<div class="flex-jobs">
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">2011-2013</span></dd>
<dt>descr.</dt>
<dd>
<ul>
<li><em>Master&rsquo;s internship</em></li>
<li><em>Colaboration scolarship</em></li>
<li><em>Degree&rsquo;s internship</em></li>
</ul>
</dd>
<dt>group</dt>
<dd><strong>Protein folding and conformational diseases</strong></dd>
<dt>institution</dt>
<dd>Institute of Biotechnology and Biomedicine <span class="note">(Barcelona)</span></dd>
</dl>
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">2012</span></dd>
<dt>descr.</dt>
<dd><em>Internship</em></dd>
<dt>group</dt>
<dd><strong>Peptide synthesis and protein structure</strong></dd>
<dt>institution</dt>
<dd>Institute for Research in Biomedicine <span class="note">(Barcelona)</span></dd>
</dl>
<dl class="job">
<dt><span class="date">period</span></dt>
<dd><span class="date">2011</span></dd>
<dt>descr.</dt>
<dd><em>Exchange Student</em></dd>
<dt>department</dt>
<dd><strong>Biophysics and radiadion biology</strong></dd>
<dt>institution</dt>
<dd>Semmelweis University <span class="note">(Budapest)</span></dd>
</dl>
</div>
<h3>Publications</h3>
<ul>
<li><a href="https://academic.oup.com/nar/article/47/18/9511/5557727">Buitrago D, Codó L, Illa R, et al. Nucleosome Dynamics: a new tool for the dynamic analysis of nucleosome positioning. Nucleic Acids Res. 2019;47(18):9511-9523. doi:10.1093/nar/gkz759</a></li>
<li><a href="https://academic.oup.com/nar/article/44/9/4052/2462513">Dans PD, Danilāne L, Ivani I, et al. Long-timescale dynamics of the Drew-Dickerson dodecamer. Nucleic Acids Res. 2016;44(9):4052-4066. doi:10.1093/nar/gkw264</a></li>
<li><a href="https://academic.oup.com/nar/article/43/W1/W331/2467935">Zambrano R, Conchillo-Sole O, Iglesias V, et al. PrionW: a server to identify proteins containing glutamine/asparagine rich prion-like domains and their amyloid cores. Nucleic Acids Res. 2015;43(W1):W331-W337. doi:10.1093/nar/gkv490</a></li>
<li><a href="https://www.future-science.com/doi/10.4155/fso.15.39">Navarro S, Diaz-Caballero M, Illa R, Ventura S. Aggregation propensity of neuronal receptors: potential implications in neurodegenerative disorders. Future Sci OA. 2015;1(2):FSO39. Published 2015 Sep 1. doi:10.4155/fso.15.39</a></li>
<li><a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4076991/">Fraga H, Graña-Montes R, Illa R, Covaleda G, Ventura S. Association between foldability and aggregation propensity in small disulfide-rich proteins. Antioxid Redox Signal. 2014;21(3):368-383. doi:10.1089/ars.2013.5543</a></li>
</ul>

28
pages/index/main.j2 Normal file
View File

@ -0,0 +1,28 @@
{% with %}
{% set headerid = "home-jumbotron" %}
{% set title = "Ricard Illa's page" %}
{% set subtitle = "My shamelessly self-referential page about me and myself" %}
{% include "header.j2" %}
{% endwith %}
<p>I am yet another random nerd on the internet. I am a
computer nerd, a music nerd, a fermentation nerd and a beer
nerd. I have an unhealthy tendency to dive down too many
rabbit holes.</p>
<p>Despite my original background being on biochemistry and
bioinformatics, I am currently employed as a data
engineer/backend developer.</p>
<p>I am a free/libre and open source advocate and a DIY
obsessive. I highly value technological sovereignty and
personal privacy.</p>
<p>I am a fan of music in general and of weird heavy shit
in particular.</p>
<p>I feel the most comfortable within *nix systems and find
functional programming the most enjoyable.</p>
<p><a href="../preferences">Here</a>s a list of random
trivial preferences of mine.</p>
{% with %}
{% set note = "obvious disclaimer: any opinions expressed here are solely my own" %}
{% include "footer.j2" %}
{% endwith %}

52
pages/preferences/main.j2 Normal file
View File

@ -0,0 +1,52 @@
{% with %}
{% set page = "my preferences" %}
{% set title = "My preferences" %}
{% include "header.j2" %}
{% endwith %}
<p>
These are some trivial preferences of mine that may or may not be polemic.
</p>
<p>
My preferred text editor is VIM (actually, I use neovim). At some point, I'd be
willing to try Emacs, but right now I don't have enough time to properly learn
and customize it. I'm probably already way too invested in VIM.
</p>
<p>
I like Megadeth more than Metallica. I like Genesis's Peter Gabriel era more
than the Phil Collins era. Dio was a much better singer than Ozzy, but I like
the riffs and songs from the Ozzy era more. I prefer Mike Portnoy over Mike
Mangini. I like Syd Barret and David Gilmour equally, but for different
reasons.
</p>
<p>
The two sounds the bring me the most joy are heavy guitars with fuzz and
mellotrons.
</p>
<p>
My favorite beer styles are Imperial Stouts, Barleywines and Scotch ales. I
rarely drink IPAs outside of summer.
</p>
<p>
I prefer functional programming over object-oriented programming. Out of all
the programming languages I've tried, Haskell and Clojure are the ones that
I've liked the most. Click <a href="{{ "BASE_URL" | env }}/preferences">here</a>
to read my opinion on recursion.
</p>
<p>Xmonad is my favorite window manager. I like the
<a href="https://github.com/morhetz/gruvbox">gruvbox</a> color scheme and the
Inconsolata font.
</p>
<p>
I use GNU/Linux as a daily driver. Mostly, because it's the most viable FLOSS
desktop operating system. I may try some of the BSDs (OpenBSD being
particularly attractive) at some point. I don't consider other free OSs (like
Haiku, FreeDOS, ReactOS, Redox, TempleOS...) viable daily driver options for
me, but playing with them in VMs is still fun. I don't consider non-free OSs as
options (unless I'm forced to use them by my employer).
</p>
<p>
Btw, I use arch.
</p>
{% include "footer.j2" %}

7
sass/contacts.scss Normal file
View File

@ -0,0 +1,7 @@
.contacts {
a {
text-decoration: none;
}
dt {
}
}

28
sass/jobs.scss Normal file
View File

@ -0,0 +1,28 @@
.job {
padding: 5px;
dt .date {
display: none;
}
dd {
ul {
list-style-type: none;
padding: 0;
font-size: smaller;
margin-bottom: 0px;
li {
padding-bottom: 2px;
}
}
.date {
font-size: smaller;
color: $light4;
font-style: italic;
}
}
}
.flex-jobs {
justify-content: center;
}

4
sass/main.scss Normal file
View File

@ -0,0 +1,4 @@
@import "variables";
@import "style";
@import "jobs";
@import "contacts";

128
sass/style.scss Normal file
View File

@ -0,0 +1,128 @@
body {
background-color: $dark0;
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
color: $fg1;
font-size: 16px;
}
main {
margin: 10px auto;
max-width: 80%;
.container {
margin: auto;
max-width: 95%;
line-height: 1.8;
padding: 10px;
}
}
h1, h2 {
font-weight: normal;
margin: 5px;
}
em {
color: $primary;
}
strong {
color: $secondary;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
}
#home-jumbotron {
background-color: $dark1;
text-align: center;
padding: 0px;
margin: 0px;
margin-top: 20px;
margin-bottom: 20px;
border: 0px;
display: block;
h2 {
font-size: 125%;
margin: 0px;
padding: 0px;
border: 0px;
}
}
hr {
border: none;
height: 1px;
background-color: $dark1;
}
a {
color: $secondary;
text-decoration: underline;
&:hover {
color: $secondary-light;
}
}
nav {
display: flex;
justify-content: center;
border-bottom: 1px;
border-bottom-color: $gray;
border-bottom-style: solid;
width: 85%;
margin: auto;
a {
display: flex;
text-align: center;
justify-content: center;
align-items: center;
padding: 10px;
padding-top: 0px;
color: $fg1;
text-decoration: none;
font-weight: bold;
&:hover {
color: $primary;
}
}
}
.note {
font-style: italic;
color: $light4;
font-size: smaller;
}
dl {
display: grid;
grid-column-gap: 0px;
grid-template-columns: auto auto;
margin: 10px;
dt {
padding: 3px 10px;
font-weight: normal;
text-align: right;
color: $light4;
font-size: smaller;
border-right: 1px solid $gray;
}
dd {
padding: 3px 10px;
margin-left: 0px;
}
}
code {
color: $bright_purple;
}

75
sass/variables.scss Normal file
View File

@ -0,0 +1,75 @@
$dark0_hard : #1d2021;
$dark0 : #282828;
$dark0_soft : #32302f;
$dark1 : #3c3836;
$dark2 : #504945;
$dark3 : #665c54;
$dark4 : #7c6f64;
$dark4_256 : #7c6f64;
$gray_245 : #928374;
$light0_hard : #f9f5d7;
$light0 : #fbf1c7;
$light0_soft : #f2e5bc;
$light1 : #ebdbb2;
$light2 : #d5c4a1;
$light3 : #bdae93;
$light4 : #a89984;
$bright_red : #fb4934;
$bright_green : #b8bb26;
$bright_yellow : #fabd2f;
$bright_blue : #83a598;
$bright_purple : #d3869b;
$bright_aqua : #8ec07c;
$bright_orange : #fe8019;
$neutral_red : #cc241d;
$neutral_green : #98971a;
$neutral_yellow : #d79921;
$neutral_blue : #458588;
$neutral_purple : #b16286;
$neutral_aqua : #689d6a;
$neutral_orange : #d65d0e;
$faded_red : #9d0006;
$faded_green : #79740e;
$faded_yellow : #b57614;
$faded_blue : #076678;
$faded_purple : #8f3f71;
$faded_aqua : #427b58;
$faded_orange : #af3a03;
$is_dark : true;
$contrast : "soft";
$bg0 : $dark0_soft; // soft
//$bg0 : $dark0_hard; // hard
//$bg0 : $dark0; // medium
$bg1 : $dark1;
$bg2 : $dark2;
$bg3 : $dark3;
$bg4 : $dark4;
$gray : $gray_245;
$fg0 : $light0;
$fg1 : $light1;
$fg2 : $light2;
$fg3 : $light3;
$fg4 : $light4;
$red : $bright_red;
$green : $bright_green;
$yellow : $bright_yellow;
$blue : $bright_blue;
$purple : $bright_purple;
$aqua : $bright_aqua;
$orange : $bright_orange;
$primary: $neutral_blue;
$primary-light: $bright_blue;
$secondary: $neutral_aqua;
$secondary-light: $bright_aqua;