diff --git a/public/media/social-abigail-afi-gbadago.png b/public/media/social-abigail-afi-gbadago.png new file mode 100644 index 000000000..4ae944842 Binary files /dev/null and b/public/media/social-abigail-afi-gbadago.png differ diff --git a/public/media/social-adrien-cacciaguerra.png b/public/media/social-adrien-cacciaguerra.png new file mode 100644 index 000000000..05be2391b Binary files /dev/null and b/public/media/social-adrien-cacciaguerra.png differ diff --git a/public/media/social-adrin-jalali.png b/public/media/social-adrin-jalali.png new file mode 100644 index 000000000..edbd0ec75 Binary files /dev/null and b/public/media/social-adrin-jalali.png differ diff --git a/public/media/social-akshita-gupta.png b/public/media/social-akshita-gupta.png new file mode 100644 index 000000000..805425f87 Binary files /dev/null and b/public/media/social-akshita-gupta.png differ diff --git a/public/media/social-alan-franzoni.png b/public/media/social-alan-franzoni.png new file mode 100644 index 000000000..7614337f8 Binary files /dev/null and b/public/media/social-alan-franzoni.png differ diff --git a/public/media/social-alejandro-cabello-jimenez.png b/public/media/social-alejandro-cabello-jimenez.png new file mode 100644 index 000000000..f473b3913 Binary files /dev/null and b/public/media/social-alejandro-cabello-jimenez.png differ diff --git a/public/media/social-alenka-frim.png b/public/media/social-alenka-frim.png new file mode 100644 index 000000000..d80df989b Binary files /dev/null and b/public/media/social-alenka-frim.png differ diff --git a/public/media/social-alvaro-duran.png b/public/media/social-alvaro-duran.png new file mode 100644 index 000000000..1a842ca9c Binary files /dev/null and b/public/media/social-alvaro-duran.png differ diff --git a/public/media/social-anastasiia-tymoshchuk.png b/public/media/social-anastasiia-tymoshchuk.png new file mode 100644 index 000000000..db5f8e4f0 Binary files /dev/null and b/public/media/social-anastasiia-tymoshchuk.png differ diff --git a/public/media/social-anna-schwarz.png b/public/media/social-anna-schwarz.png new file mode 100644 index 000000000..48eca4ab1 Binary files /dev/null and b/public/media/social-anna-schwarz.png differ diff --git a/public/media/social-antonio-cuni.png b/public/media/social-antonio-cuni.png new file mode 100644 index 000000000..c20f2c9eb Binary files /dev/null and b/public/media/social-antonio-cuni.png differ diff --git a/public/media/social-anupama-tiruvaipati.png b/public/media/social-anupama-tiruvaipati.png new file mode 100644 index 000000000..359036645 Binary files /dev/null and b/public/media/social-anupama-tiruvaipati.png differ diff --git a/public/media/social-ariane-djeupang.png b/public/media/social-ariane-djeupang.png new file mode 100644 index 000000000..00b108f5c Binary files /dev/null and b/public/media/social-ariane-djeupang.png differ diff --git a/public/media/social-arie-bovenberg.png b/public/media/social-arie-bovenberg.png new file mode 100644 index 000000000..c3d417ba0 Binary files /dev/null and b/public/media/social-arie-bovenberg.png differ diff --git a/public/media/social-arthur-bayr.png b/public/media/social-arthur-bayr.png new file mode 100644 index 000000000..59808012c Binary files /dev/null and b/public/media/social-arthur-bayr.png differ diff --git a/public/media/social-arthur-pastel.png b/public/media/social-arthur-pastel.png new file mode 100644 index 000000000..7ba775656 Binary files /dev/null and b/public/media/social-arthur-pastel.png differ diff --git a/public/media/social-artur-patoka.png b/public/media/social-artur-patoka.png new file mode 100644 index 000000000..d47cb339a Binary files /dev/null and b/public/media/social-artur-patoka.png differ diff --git a/public/media/social-ashish-gupta.png b/public/media/social-ashish-gupta.png new file mode 100644 index 000000000..10a33521c Binary files /dev/null and b/public/media/social-ashish-gupta.png differ diff --git a/public/media/social-aya-elsayed.png b/public/media/social-aya-elsayed.png new file mode 100644 index 000000000..719eb4688 Binary files /dev/null and b/public/media/social-aya-elsayed.png differ diff --git a/public/media/social-bojan-miletic.png b/public/media/social-bojan-miletic.png new file mode 100644 index 000000000..b4fcd8e06 Binary files /dev/null and b/public/media/social-bojan-miletic.png differ diff --git a/public/media/social-brett-cannon.png b/public/media/social-brett-cannon.png new file mode 100644 index 000000000..10eb66a9c Binary files /dev/null and b/public/media/social-brett-cannon.png differ diff --git a/public/media/social-cheuk-ting-ho.png b/public/media/social-cheuk-ting-ho.png new file mode 100644 index 000000000..4d402360b Binary files /dev/null and b/public/media/social-cheuk-ting-ho.png differ diff --git a/public/media/social-cristian-maureira-fredes.png b/public/media/social-cristian-maureira-fredes.png new file mode 100644 index 000000000..def199800 Binary files /dev/null and b/public/media/social-cristian-maureira-fredes.png differ diff --git a/public/media/social-david-woods.png b/public/media/social-david-woods.png new file mode 100644 index 000000000..6dc33da35 Binary files /dev/null and b/public/media/social-david-woods.png differ diff --git a/public/media/social-diego-diaz-moron.png b/public/media/social-diego-diaz-moron.png new file mode 100644 index 000000000..aa03fac88 Binary files /dev/null and b/public/media/social-diego-diaz-moron.png differ diff --git a/public/media/social-diego-russo.png b/public/media/social-diego-russo.png new file mode 100644 index 000000000..ad8c8aa87 Binary files /dev/null and b/public/media/social-diego-russo.png differ diff --git a/public/media/social-dominic-hollis.png b/public/media/social-dominic-hollis.png new file mode 100644 index 000000000..6119396e2 Binary files /dev/null and b/public/media/social-dominic-hollis.png differ diff --git a/public/media/social-eloisa-perez-bennetts.png b/public/media/social-eloisa-perez-bennetts.png new file mode 100644 index 000000000..5f2d220a9 Binary files /dev/null and b/public/media/social-eloisa-perez-bennetts.png differ diff --git a/public/media/social-elvis-kwabena-asare-nkrumah.png b/public/media/social-elvis-kwabena-asare-nkrumah.png new file mode 100644 index 000000000..12c1585af Binary files /dev/null and b/public/media/social-elvis-kwabena-asare-nkrumah.png differ diff --git a/public/media/social-farhaan-bukhsh.png b/public/media/social-farhaan-bukhsh.png new file mode 100644 index 000000000..f6473f5fa Binary files /dev/null and b/public/media/social-farhaan-bukhsh.png differ diff --git a/public/media/social-florian-bruhin.png b/public/media/social-florian-bruhin.png new file mode 100644 index 000000000..ff3fc6c01 Binary files /dev/null and b/public/media/social-florian-bruhin.png differ diff --git a/public/media/social-florian-stefan.png b/public/media/social-florian-stefan.png new file mode 100644 index 000000000..c3731143b Binary files /dev/null and b/public/media/social-florian-stefan.png differ diff --git a/public/media/social-gaffiot-jonathan.png b/public/media/social-gaffiot-jonathan.png new file mode 100644 index 000000000..6d5670ed6 Binary files /dev/null and b/public/media/social-gaffiot-jonathan.png differ diff --git a/public/media/social-gauden-galea.png b/public/media/social-gauden-galea.png new file mode 100644 index 000000000..8aabe068b Binary files /dev/null and b/public/media/social-gauden-galea.png differ diff --git a/public/media/social-gina-haussge.png b/public/media/social-gina-haussge.png new file mode 100644 index 000000000..53fdccd42 Binary files /dev/null and b/public/media/social-gina-haussge.png differ diff --git a/public/media/social-grzegorz-bokota.png b/public/media/social-grzegorz-bokota.png new file mode 100644 index 000000000..a40cc8911 Binary files /dev/null and b/public/media/social-grzegorz-bokota.png differ diff --git a/public/media/social-grzegorz-kocjan.png b/public/media/social-grzegorz-kocjan.png new file mode 100644 index 000000000..265497da9 Binary files /dev/null and b/public/media/social-grzegorz-kocjan.png differ diff --git a/public/media/social-helena-gomez-pozo.png b/public/media/social-helena-gomez-pozo.png new file mode 100644 index 000000000..9e86cc091 Binary files /dev/null and b/public/media/social-helena-gomez-pozo.png differ diff --git a/public/media/social-iryna-kondrashchenko.png b/public/media/social-iryna-kondrashchenko.png new file mode 100644 index 000000000..e3433898c Binary files /dev/null and b/public/media/social-iryna-kondrashchenko.png differ diff --git a/public/media/social-israel-blancas.png b/public/media/social-israel-blancas.png new file mode 100644 index 000000000..1118d4e5a Binary files /dev/null and b/public/media/social-israel-blancas.png differ diff --git a/public/media/social-itai-gilo.png b/public/media/social-itai-gilo.png new file mode 100644 index 000000000..81689181a Binary files /dev/null and b/public/media/social-itai-gilo.png differ diff --git a/public/media/social-iulia-feroli.png b/public/media/social-iulia-feroli.png new file mode 100644 index 000000000..5ca8afd0b Binary files /dev/null and b/public/media/social-iulia-feroli.png differ diff --git a/public/media/social-jacob-coffee.png b/public/media/social-jacob-coffee.png new file mode 100644 index 000000000..009d07b02 Binary files /dev/null and b/public/media/social-jacob-coffee.png differ diff --git a/public/media/social-jakub-urban.png b/public/media/social-jakub-urban.png new file mode 100644 index 000000000..470728f43 Binary files /dev/null and b/public/media/social-jakub-urban.png differ diff --git a/public/media/social-jan-jasek.png b/public/media/social-jan-jasek.png new file mode 100644 index 000000000..a81e85d19 Binary files /dev/null and b/public/media/social-jan-jasek.png differ diff --git a/public/media/social-jannis-lubbe.png b/public/media/social-jannis-lubbe.png new file mode 100644 index 000000000..6c1b217e6 Binary files /dev/null and b/public/media/social-jannis-lubbe.png differ diff --git a/public/media/social-jenny-vega.png b/public/media/social-jenny-vega.png new file mode 100644 index 000000000..f8eb7b7e8 Binary files /dev/null and b/public/media/social-jenny-vega.png differ diff --git a/public/media/social-jessica-randall.png b/public/media/social-jessica-randall.png new file mode 100644 index 000000000..cce6b443c Binary files /dev/null and b/public/media/social-jessica-randall.png differ diff --git a/public/media/social-jimena-bermudez.png b/public/media/social-jimena-bermudez.png new file mode 100644 index 000000000..43de5707d Binary files /dev/null and b/public/media/social-jimena-bermudez.png differ diff --git a/public/media/social-joaquin-rayado.png b/public/media/social-joaquin-rayado.png new file mode 100644 index 000000000..13e06f359 Binary files /dev/null and b/public/media/social-joaquin-rayado.png differ diff --git a/public/media/social-jochem-van-dooren.png b/public/media/social-jochem-van-dooren.png new file mode 100644 index 000000000..9b2879e01 Binary files /dev/null and b/public/media/social-jochem-van-dooren.png differ diff --git a/public/media/social-josh-lowe.png b/public/media/social-josh-lowe.png new file mode 100644 index 000000000..56559b271 Binary files /dev/null and b/public/media/social-josh-lowe.png differ diff --git a/public/media/social-juan-luis-cano-rodriguez.png b/public/media/social-juan-luis-cano-rodriguez.png new file mode 100644 index 000000000..7ff4c55da Binary files /dev/null and b/public/media/social-juan-luis-cano-rodriguez.png differ diff --git a/public/media/social-julian-hofer.png b/public/media/social-julian-hofer.png new file mode 100644 index 000000000..a9de0d5ca Binary files /dev/null and b/public/media/social-julian-hofer.png differ diff --git a/public/media/social-julien-lenormand.png b/public/media/social-julien-lenormand.png new file mode 100644 index 000000000..761b14f8e Binary files /dev/null and b/public/media/social-julien-lenormand.png differ diff --git a/public/media/social-kalyan-prasad.png b/public/media/social-kalyan-prasad.png new file mode 100644 index 000000000..2b7c9d98a Binary files /dev/null and b/public/media/social-kalyan-prasad.png differ diff --git a/public/media/social-kamil-raczycki.png b/public/media/social-kamil-raczycki.png new file mode 100644 index 000000000..d3db86700 Binary files /dev/null and b/public/media/social-kamil-raczycki.png differ diff --git a/public/media/social-kamil-tokarski.png b/public/media/social-kamil-tokarski.png new file mode 100644 index 000000000..e800b2970 Binary files /dev/null and b/public/media/social-kamil-tokarski.png differ diff --git a/public/media/social-karolina-surma.png b/public/media/social-karolina-surma.png new file mode 100644 index 000000000..eb294ee21 Binary files /dev/null and b/public/media/social-karolina-surma.png differ diff --git a/public/media/social-katerina-scavnicka.png b/public/media/social-katerina-scavnicka.png new file mode 100644 index 000000000..7b0288260 Binary files /dev/null and b/public/media/social-katerina-scavnicka.png differ diff --git a/public/media/social-kayode-makinde.png b/public/media/social-kayode-makinde.png new file mode 100644 index 000000000..c87cb3657 Binary files /dev/null and b/public/media/social-kayode-makinde.png differ diff --git a/public/media/social-ken-jin.png b/public/media/social-ken-jin.png new file mode 100644 index 000000000..2615c7f25 Binary files /dev/null and b/public/media/social-ken-jin.png differ diff --git a/public/media/social-kir-chou.png b/public/media/social-kir-chou.png new file mode 100644 index 000000000..b172c6e71 Binary files /dev/null and b/public/media/social-kir-chou.png differ diff --git a/public/media/social-kirill-druzhinin.png b/public/media/social-kirill-druzhinin.png new file mode 100644 index 000000000..26d8d5231 Binary files /dev/null and b/public/media/social-kirill-druzhinin.png differ diff --git a/public/media/social-konstantinos-papadopoulos.png b/public/media/social-konstantinos-papadopoulos.png new file mode 100644 index 000000000..c351b8ebe Binary files /dev/null and b/public/media/social-konstantinos-papadopoulos.png differ diff --git a/public/media/social-koteswara-rao-vellanki.png b/public/media/social-koteswara-rao-vellanki.png new file mode 100644 index 000000000..c25f717da Binary files /dev/null and b/public/media/social-koteswara-rao-vellanki.png differ diff --git a/public/media/social-koudai-aono.png b/public/media/social-koudai-aono.png new file mode 100644 index 000000000..f87190fba Binary files /dev/null and b/public/media/social-koudai-aono.png differ diff --git a/public/media/social-krzysztof-wilczynski.png b/public/media/social-krzysztof-wilczynski.png new file mode 100644 index 000000000..4b02e23c2 Binary files /dev/null and b/public/media/social-krzysztof-wilczynski.png differ diff --git a/public/media/social-kshitijaa-jaglan.png b/public/media/social-kshitijaa-jaglan.png new file mode 100644 index 000000000..e6b0b27e9 Binary files /dev/null and b/public/media/social-kshitijaa-jaglan.png differ diff --git a/public/media/social-kumar-anirudha.png b/public/media/social-kumar-anirudha.png new file mode 100644 index 000000000..f3036f968 Binary files /dev/null and b/public/media/social-kumar-anirudha.png differ diff --git a/public/media/social-lucas-pires.png b/public/media/social-lucas-pires.png new file mode 100644 index 000000000..73de7d7c2 Binary files /dev/null and b/public/media/social-lucas-pires.png differ diff --git a/public/media/social-lysandros-nikolaou.png b/public/media/social-lysandros-nikolaou.png new file mode 100644 index 000000000..0c8003ef1 Binary files /dev/null and b/public/media/social-lysandros-nikolaou.png differ diff --git a/public/media/social-manivannan-selvaraj.png b/public/media/social-manivannan-selvaraj.png new file mode 100644 index 000000000..569f140ca Binary files /dev/null and b/public/media/social-manivannan-selvaraj.png differ diff --git a/public/media/social-marc-andre-lemburg.png b/public/media/social-marc-andre-lemburg.png new file mode 100644 index 000000000..ef3312028 Binary files /dev/null and b/public/media/social-marc-andre-lemburg.png differ diff --git a/public/media/social-marco-richetta.png b/public/media/social-marco-richetta.png new file mode 100644 index 000000000..9bb5f092b Binary files /dev/null and b/public/media/social-marco-richetta.png differ diff --git a/public/media/social-maria-ashna.png b/public/media/social-maria-ashna.png new file mode 100644 index 000000000..06c257825 Binary files /dev/null and b/public/media/social-maria-ashna.png differ diff --git a/public/media/social-marina-moro-lopez.png b/public/media/social-marina-moro-lopez.png new file mode 100644 index 000000000..c3e5b30ff Binary files /dev/null and b/public/media/social-marina-moro-lopez.png differ diff --git a/public/media/social-marine-guyot.png b/public/media/social-marine-guyot.png new file mode 100644 index 000000000..93e1d4dac Binary files /dev/null and b/public/media/social-marine-guyot.png differ diff --git a/public/media/social-mark-shannon.png b/public/media/social-mark-shannon.png new file mode 100644 index 000000000..fed163a48 Binary files /dev/null and b/public/media/social-mark-shannon.png differ diff --git a/public/media/social-martin-christen-1.png b/public/media/social-martin-christen-1.png new file mode 100644 index 000000000..9d950360b Binary files /dev/null and b/public/media/social-martin-christen-1.png differ diff --git a/public/media/social-martin-christen.png b/public/media/social-martin-christen.png new file mode 100644 index 000000000..9d950360b Binary files /dev/null and b/public/media/social-martin-christen.png differ diff --git a/public/media/social-mateusz-modrzejewski.png b/public/media/social-mateusz-modrzejewski.png new file mode 100644 index 000000000..7b7824f85 Binary files /dev/null and b/public/media/social-mateusz-modrzejewski.png differ diff --git a/public/media/social-mateusz-zaremba.png b/public/media/social-mateusz-zaremba.png new file mode 100644 index 000000000..45e53ea01 Binary files /dev/null and b/public/media/social-mateusz-zaremba.png differ diff --git a/public/media/social-matthieu-amiguet.png b/public/media/social-matthieu-amiguet.png new file mode 100644 index 000000000..240f7d19f Binary files /dev/null and b/public/media/social-matthieu-amiguet.png differ diff --git a/public/media/social-matthieu-caneill.png b/public/media/social-matthieu-caneill.png new file mode 100644 index 000000000..35a2e9d66 Binary files /dev/null and b/public/media/social-matthieu-caneill.png differ diff --git a/public/media/social-matthieu-rigal.png b/public/media/social-matthieu-rigal.png new file mode 100644 index 000000000..c72ee8fec Binary files /dev/null and b/public/media/social-matthieu-rigal.png differ diff --git a/public/media/social-max-kahan.png b/public/media/social-max-kahan.png new file mode 100644 index 000000000..c0dfa03c6 Binary files /dev/null and b/public/media/social-max-kahan.png differ diff --git a/public/media/social-may-walter.png b/public/media/social-may-walter.png new file mode 100644 index 000000000..c3c0eda53 Binary files /dev/null and b/public/media/social-may-walter.png differ diff --git a/public/media/social-mehul-goyal.png b/public/media/social-mehul-goyal.png new file mode 100644 index 000000000..23e982112 Binary files /dev/null and b/public/media/social-mehul-goyal.png differ diff --git a/public/media/social-michal-szolucha.png b/public/media/social-michal-szolucha.png new file mode 100644 index 000000000..f14211fb7 Binary files /dev/null and b/public/media/social-michal-szolucha.png differ diff --git a/public/media/social-miguel-grinberg.png b/public/media/social-miguel-grinberg.png new file mode 100644 index 000000000..d495bc9e0 Binary files /dev/null and b/public/media/social-miguel-grinberg.png differ diff --git a/public/media/social-mihail.png b/public/media/social-mihail.png new file mode 100644 index 000000000..b7e6b7cb1 Binary files /dev/null and b/public/media/social-mihail.png differ diff --git a/public/media/social-mike-muller.png b/public/media/social-mike-muller.png new file mode 100644 index 000000000..3ebb0ae90 Binary files /dev/null and b/public/media/social-mike-muller.png differ diff --git a/public/media/social-mikulas-poul.png b/public/media/social-mikulas-poul.png new file mode 100644 index 000000000..6361ffef1 Binary files /dev/null and b/public/media/social-mikulas-poul.png differ diff --git a/public/media/social-miloslav-pojman.png b/public/media/social-miloslav-pojman.png new file mode 100644 index 000000000..6aa847ff3 Binary files /dev/null and b/public/media/social-miloslav-pojman.png differ diff --git a/public/media/social-mykalin-jones.png b/public/media/social-mykalin-jones.png new file mode 100644 index 000000000..77eb467f3 Binary files /dev/null and b/public/media/social-mykalin-jones.png differ diff --git a/public/media/social-neeraj-pandey.png b/public/media/social-neeraj-pandey.png new file mode 100644 index 000000000..7fdd6ffbd Binary files /dev/null and b/public/media/social-neeraj-pandey.png differ diff --git a/public/media/social-nerea-luis.png b/public/media/social-nerea-luis.png new file mode 100644 index 000000000..84b2445d5 Binary files /dev/null and b/public/media/social-nerea-luis.png differ diff --git a/public/media/social-nicholas-h-tollervey.png b/public/media/social-nicholas-h-tollervey.png new file mode 100644 index 000000000..e9a3d5c95 Binary files /dev/null and b/public/media/social-nicholas-h-tollervey.png differ diff --git a/public/media/social-nikita-grigorian.png b/public/media/social-nikita-grigorian.png new file mode 100644 index 000000000..c324853ad Binary files /dev/null and b/public/media/social-nikita-grigorian.png differ diff --git a/public/media/social-nilo-ney-coutinho-menezes.png b/public/media/social-nilo-ney-coutinho-menezes.png new file mode 100644 index 000000000..baf4d0d0c Binary files /dev/null and b/public/media/social-nilo-ney-coutinho-menezes.png differ diff --git a/public/media/social-oladapo-kayode-abiodun.png b/public/media/social-oladapo-kayode-abiodun.png new file mode 100644 index 000000000..aa68f11d2 Binary files /dev/null and b/public/media/social-oladapo-kayode-abiodun.png differ diff --git a/public/media/social-oleh-kostromin.png b/public/media/social-oleh-kostromin.png new file mode 100644 index 000000000..b2f708eda Binary files /dev/null and b/public/media/social-oleh-kostromin.png differ diff --git a/public/media/social-oluwakemi-omowunmi-jacobs.png b/public/media/social-oluwakemi-omowunmi-jacobs.png new file mode 100644 index 000000000..f053c2db9 Binary files /dev/null and b/public/media/social-oluwakemi-omowunmi-jacobs.png differ diff --git a/public/media/social-pablo-galindo-salgado.png b/public/media/social-pablo-galindo-salgado.png new file mode 100644 index 000000000..9e2688bfe Binary files /dev/null and b/public/media/social-pablo-galindo-salgado.png differ diff --git a/public/media/social-padraic-calpin.png b/public/media/social-padraic-calpin.png new file mode 100644 index 000000000..a14f481c9 Binary files /dev/null and b/public/media/social-padraic-calpin.png differ diff --git a/public/media/social-paolo-melchiorre.png b/public/media/social-paolo-melchiorre.png new file mode 100644 index 000000000..3d183ca0e Binary files /dev/null and b/public/media/social-paolo-melchiorre.png differ diff --git a/public/media/social-patrick-hoefler.png b/public/media/social-patrick-hoefler.png new file mode 100644 index 000000000..f71a8b0de Binary files /dev/null and b/public/media/social-patrick-hoefler.png differ diff --git a/public/media/social-pavel-kral.png b/public/media/social-pavel-kral.png new file mode 100644 index 000000000..9d828358a Binary files /dev/null and b/public/media/social-pavel-kral.png differ diff --git a/public/media/social-petr-baudis.png b/public/media/social-petr-baudis.png new file mode 100644 index 000000000..344e8918d Binary files /dev/null and b/public/media/social-petr-baudis.png differ diff --git a/public/media/social-petter-salminen.png b/public/media/social-petter-salminen.png new file mode 100644 index 000000000..6b46d8ee0 Binary files /dev/null and b/public/media/social-petter-salminen.png differ diff --git a/public/media/social-ramon-corominas.png b/public/media/social-ramon-corominas.png new file mode 100644 index 000000000..f9260a7b8 Binary files /dev/null and b/public/media/social-ramon-corominas.png differ diff --git a/public/media/social-raul-cumplido.png b/public/media/social-raul-cumplido.png new file mode 100644 index 000000000..676f8e5c5 Binary files /dev/null and b/public/media/social-raul-cumplido.png differ diff --git a/public/media/social-reuven-m-lerner.png b/public/media/social-reuven-m-lerner.png new file mode 100644 index 000000000..7ae3ef61d Binary files /dev/null and b/public/media/social-reuven-m-lerner.png differ diff --git a/public/media/social-reyha-verma.png b/public/media/social-reyha-verma.png new file mode 100644 index 000000000..5cfa7ef8c Binary files /dev/null and b/public/media/social-reyha-verma.png differ diff --git a/public/media/social-rhythm-patel.png b/public/media/social-rhythm-patel.png new file mode 100644 index 000000000..acc339df6 Binary files /dev/null and b/public/media/social-rhythm-patel.png differ diff --git a/public/media/social-riccardo-magliocchetti.png b/public/media/social-riccardo-magliocchetti.png new file mode 100644 index 000000000..d5e893288 Binary files /dev/null and b/public/media/social-riccardo-magliocchetti.png differ diff --git a/public/media/social-robson-kanhalelo.png b/public/media/social-robson-kanhalelo.png new file mode 100644 index 000000000..8267ade2c Binary files /dev/null and b/public/media/social-robson-kanhalelo.png differ diff --git a/public/media/social-rodrigo-girao-serrao.png b/public/media/social-rodrigo-girao-serrao.png new file mode 100644 index 000000000..789cd99e4 Binary files /dev/null and b/public/media/social-rodrigo-girao-serrao.png differ diff --git a/public/media/social-rostan-tabet.png b/public/media/social-rostan-tabet.png new file mode 100644 index 000000000..b65cf7acf Binary files /dev/null and b/public/media/social-rostan-tabet.png differ diff --git a/public/media/social-ruben-arts.png b/public/media/social-ruben-arts.png new file mode 100644 index 000000000..b8ea083cc Binary files /dev/null and b/public/media/social-ruben-arts.png differ diff --git a/public/media/social-ruslan-korniichuk.png b/public/media/social-ruslan-korniichuk.png new file mode 100644 index 000000000..a2d156949 Binary files /dev/null and b/public/media/social-ruslan-korniichuk.png differ diff --git a/public/media/social-russell-keith-magee.png b/public/media/social-russell-keith-magee.png new file mode 100644 index 000000000..50eb7a3a2 Binary files /dev/null and b/public/media/social-russell-keith-magee.png differ diff --git a/public/media/social-samiul-huque.png b/public/media/social-samiul-huque.png new file mode 100644 index 000000000..da85d7173 Binary files /dev/null and b/public/media/social-samiul-huque.png differ diff --git a/public/media/social-savannah-ostrowski.png b/public/media/social-savannah-ostrowski.png new file mode 100644 index 000000000..356d74dad Binary files /dev/null and b/public/media/social-savannah-ostrowski.png differ diff --git a/public/media/social-sebastian-buczynski.png b/public/media/social-sebastian-buczynski.png new file mode 100644 index 000000000..05a0c8705 Binary files /dev/null and b/public/media/social-sebastian-buczynski.png differ diff --git a/public/media/social-sebastian-flores.png b/public/media/social-sebastian-flores.png new file mode 100644 index 000000000..769f9e189 Binary files /dev/null and b/public/media/social-sebastian-flores.png differ diff --git a/public/media/social-sebastian-ramirez.png b/public/media/social-sebastian-ramirez.png new file mode 100644 index 000000000..7d2b779b5 Binary files /dev/null and b/public/media/social-sebastian-ramirez.png differ diff --git a/public/media/social-sebastian-witowski.png b/public/media/social-sebastian-witowski.png new file mode 100644 index 000000000..a2c75dc91 Binary files /dev/null and b/public/media/social-sebastian-witowski.png differ diff --git a/public/media/social-sheena.png b/public/media/social-sheena.png new file mode 100644 index 000000000..141488142 Binary files /dev/null and b/public/media/social-sheena.png differ diff --git a/public/media/social-shivay-lamba.png b/public/media/social-shivay-lamba.png new file mode 100644 index 000000000..c1ae42cae Binary files /dev/null and b/public/media/social-shivay-lamba.png differ diff --git a/public/media/social-simon-podhajsky.png b/public/media/social-simon-podhajsky.png new file mode 100644 index 000000000..dd5dabcd6 Binary files /dev/null and b/public/media/social-simon-podhajsky.png differ diff --git a/public/media/social-sindre-nistad.png b/public/media/social-sindre-nistad.png new file mode 100644 index 000000000..52f7c8402 Binary files /dev/null and b/public/media/social-sindre-nistad.png differ diff --git a/public/media/social-stanislav-zmiev.png b/public/media/social-stanislav-zmiev.png new file mode 100644 index 000000000..98da46fe7 Binary files /dev/null and b/public/media/social-stanislav-zmiev.png differ diff --git a/public/media/social-stefan-barisch.png b/public/media/social-stefan-barisch.png new file mode 100644 index 000000000..f6037286c Binary files /dev/null and b/public/media/social-stefan-barisch.png differ diff --git a/public/media/social-stepan-sindelar.png b/public/media/social-stepan-sindelar.png new file mode 100644 index 000000000..ac048c951 Binary files /dev/null and b/public/media/social-stepan-sindelar.png differ diff --git a/public/media/social-steven-kolawole.png b/public/media/social-steven-kolawole.png new file mode 100644 index 000000000..bc3a6e01a Binary files /dev/null and b/public/media/social-steven-kolawole.png differ diff --git a/public/media/social-sven-arends.png b/public/media/social-sven-arends.png new file mode 100644 index 000000000..26fb38b8b Binary files /dev/null and b/public/media/social-sven-arends.png differ diff --git a/public/media/social-szymon-karpinski.png b/public/media/social-szymon-karpinski.png new file mode 100644 index 000000000..ecb85d267 Binary files /dev/null and b/public/media/social-szymon-karpinski.png differ diff --git a/public/media/social-tal-sofer.png b/public/media/social-tal-sofer.png new file mode 100644 index 000000000..1614f53e2 Binary files /dev/null and b/public/media/social-tal-sofer.png differ diff --git a/public/media/social-tamara-atanasoska.png b/public/media/social-tamara-atanasoska.png new file mode 100644 index 000000000..64432741c Binary files /dev/null and b/public/media/social-tamara-atanasoska.png differ diff --git a/public/media/social-tarun-jain.png b/public/media/social-tarun-jain.png new file mode 100644 index 000000000..bda8cde83 Binary files /dev/null and b/public/media/social-tarun-jain.png differ diff --git a/public/media/social-themistoklis-spanoudis.png b/public/media/social-themistoklis-spanoudis.png new file mode 100644 index 000000000..3120ba631 Binary files /dev/null and b/public/media/social-themistoklis-spanoudis.png differ diff --git a/public/media/social-theodore-meynard.png b/public/media/social-theodore-meynard.png new file mode 100644 index 000000000..d99519a7b Binary files /dev/null and b/public/media/social-theodore-meynard.png differ diff --git a/public/media/social-tibs.png b/public/media/social-tibs.png new file mode 100644 index 000000000..94fa1497a Binary files /dev/null and b/public/media/social-tibs.png differ diff --git a/public/media/social-tomas-roun.png b/public/media/social-tomas-roun.png new file mode 100644 index 000000000..cad9ec5c1 Binary files /dev/null and b/public/media/social-tomas-roun.png differ diff --git a/public/media/social-travis-hathaway.png b/public/media/social-travis-hathaway.png new file mode 100644 index 000000000..fc934b3ec Binary files /dev/null and b/public/media/social-travis-hathaway.png differ diff --git a/public/media/social-velda-kiara.png b/public/media/social-velda-kiara.png new file mode 100644 index 000000000..34c46ec0f Binary files /dev/null and b/public/media/social-velda-kiara.png differ diff --git a/public/media/social-vemund-mehl-santi.png b/public/media/social-vemund-mehl-santi.png new file mode 100644 index 000000000..8ed394c74 Binary files /dev/null and b/public/media/social-vemund-mehl-santi.png differ diff --git a/public/media/social-vinayak-mehta.png b/public/media/social-vinayak-mehta.png new file mode 100644 index 000000000..6ee4db76a Binary files /dev/null and b/public/media/social-vinayak-mehta.png differ diff --git a/public/media/social-vinicius-gubiani-ferreira.png b/public/media/social-vinicius-gubiani-ferreira.png new file mode 100644 index 000000000..856e6c131 Binary files /dev/null and b/public/media/social-vinicius-gubiani-ferreira.png differ diff --git a/public/media/social-wei-lee.png b/public/media/social-wei-lee.png new file mode 100644 index 000000000..76a082803 Binary files /dev/null and b/public/media/social-wei-lee.png differ diff --git a/public/media/social-yuliia-barabash.png b/public/media/social-yuliia-barabash.png new file mode 100644 index 000000000..b197539dc Binary files /dev/null and b/public/media/social-yuliia-barabash.png differ diff --git a/src/pages/api/buffer_posts.ts b/src/pages/api/buffer_posts.ts new file mode 100644 index 000000000..354e39769 --- /dev/null +++ b/src/pages/api/buffer_posts.ts @@ -0,0 +1,170 @@ +import { getCollection, getEntry } from "astro:content"; +import type { APIRoute } from "astro"; + +// Get @username from Twitter URL +function getTwitterUsername(url: string): string | undefined { + if (!url) return undefined; + const username = url.split("/").pop(); + return (username ?? url).startsWith("@") ? username : `@${username}`; +} + +// Get @username from Bluesky URL +function getBlueskyUsername(url: string): string | undefined { + if (!url) return undefined; + const username = url.split("/").pop()?.replace(/^@/, ""); + return username ? `@${username}` : undefined; +} + +// Get Bluesky profile link from username +function getBlueskyProfileLink(username: string): string { + // Remove any leading @ if present + const cleanUsername = username.replace(/^@/, ""); + return `https://bsky.app/profile/${cleanUsername}`; +} + +// Get @username@instance.tld from Mastodon URL +function getMastodonUsername(url: string): string | undefined { + if (!url) return undefined; + const match = url.match(/https?:\/\/([^\/]+)\/@([^\/]+)(\/|\?|$)/); + return match ? `@${match[2]}@${match[1]}` : undefined; +} + +function getLinkedInUsernameHandler(url: string): string | undefined { + if (!url) return undefined; + const match = url.match(/https?:\/\/([^\/]+)\/in\/([^\/]+)(\/|\?|$)/); + if (match) { + try { + return `https://www.linkedin.com/in/${decodeURIComponent(match[2])}`; + } catch { + return `https://www.linkedin.com/in/${match[2]}`; + } + } + return undefined; +} + +export const GET: APIRoute = async ({ params, request }) => { + const limit = Infinity; + const speakers = await getCollection("speakers"); + const exclude = [ + "sebastian-ramirez", + "savannah-ostrowski", + "nerea-luis", + "petr-baudis", + "brett-cannon", + ]; + const records: any[] = []; + + const charLimits: Record = { + instagram: 2200, + x: 280, + linkedin: 3000, + bsky: 300, + fosstodon: 500, + }; + + // Tailor message templates for each platform using appropriate handle formats + const message_template = { + instagram: ({ name, talkTitle, talkUrl }) => + `Join ${name} at EuroPython for "${talkTitle}".`, + + x: ({ name, handle, talkTitle, talkUrl }) => + handle + ? `Join ${name} (${handle}) at EuroPython for "${talkTitle}". Talk: ${talkUrl}` + : `Join ${name} at EuroPython for "${talkTitle}". Talk: ${talkUrl}`, + + linkedin: ({ name, handle, talkTitle, talkUrl }) => + `Join ${name} at EuroPython for "${talkTitle}".`, + + bsky: ({ name, handle, talkTitle, talkUrl }) => + handle + ? `Join ${name} (${handle}) at EuroPython for "${talkTitle}". Talk: ${talkUrl}` + : `Join ${name} at EuroPython for "${talkTitle}". Talk: ${talkUrl}`, + + fosstodon: ({ name, handle, talkTitle, talkUrl }) => + handle + ? `Join ${name} (${handle}) at EuroPython for "${talkTitle}". talk: ${talkUrl}` + : `Join ${name} at EuroPython for "${talkTitle}". Talk: ${talkUrl}`, + }; + + const trimToLimit = (text: string, limit: number) => + text.length <= limit ? text : text.slice(0, limit - 1) + "…"; + + for (const speaker of speakers) { + if (records.length >= limit) break; + if (exclude.includes(speaker.id)) continue; + + const { + name, + twitter_url, + linkedin_url, + bluesky_url, + mastodon_url, + submissions, + } = speaker.data; + + const sessions = await Promise.all( + submissions.map((session) => getEntry("sessions", session.id)) + ); + + const validSessions = sessions.filter( + (session) => session && session.data.title + ); + + if (validSessions.length === 0) continue; + + const talkTitle = validSessions[0]?.data.title || "an exciting topic"; + const talkCode = validSessions[0]?.data.code; + const talkUrl = `https://ep2025.europython.eu/${talkCode}`; + const speakerImage = `https://ep2025-buffer.ep-preview.click/media/social-${speaker.id}.png`; + const fallbackUrl = `https://ep2025.europython.eu/speaker/${speaker.id}`; + + // Extract handles for each platform + const handles = { + x: getTwitterUsername(twitter_url || ""), + linkedin: getLinkedInUsernameHandler(linkedin_url || ""), + bsky: getBlueskyUsername(bluesky_url || ""), + fosstodon: getMastodonUsername(mastodon_url || ""), + }; + + // Generate appropriate messages for each platform + const generateMessage = (platform: keyof typeof message_template) => { + const templateFn = message_template[platform]; + const handle = + platform === "instagram" + ? undefined + : handles[platform as keyof typeof handles]; + + const full = templateFn({ + name, + handle, + talkTitle, + talkUrl: platform === "instagram" ? fallbackUrl : talkUrl, + }); + + const limit = charLimits[platform]; + return trimToLimit(full, limit); + }; + + const record = { + name, + image: speakerImage, + handles: handles, + channel: { + instagram: generateMessage("instagram"), + x: generateMessage("x"), + linkedin: generateMessage("linkedin"), + bsky: generateMessage("bsky"), + fosstodon: generateMessage("fosstodon"), + }, + }; + + records.push(record); + } + + return new Response(JSON.stringify(records, null, 2), { + status: 200, + headers: { + "Content-Type": "application/json", + }, + }); +}; diff --git a/src/pages/media/social_media.csv.ts b/src/pages/media/social_media.csv.ts new file mode 100644 index 000000000..553668b6d --- /dev/null +++ b/src/pages/media/social_media.csv.ts @@ -0,0 +1,78 @@ +import { getCollection, getEntry } from "astro:content"; +export async function GET({ params, request }) { + const speakers = await getCollection("speakers"); + + const header = [ + "Talk Title", + "Speaker Name", + "Speaker Photo URL", + "Primary Social ULR", + "X URL", + "LinkedIn URL", + "Bluesky URL", + "Mastodon URL", + ]; + + const exclude = [ + "sebastian-ramirez", + "savannah-ostrowski", + "nerea-luis", + "petr-baudis", + "brett-cannon", + ]; + + const rows: string[][] = []; + + for (const speaker of speakers) { + if (exclude.includes(speaker.id)) continue; + + const { + name, + twitter_url, + linkedin_url, + bluesky_url, + mastodon_url, + submissions, + } = speaker.data; + + const sessions = await Promise.all( + submissions.map((session) => getEntry("sessions", session.id)) + ); + + for (const session of sessions) { + if (session) { + const speaker_page = `https://ep2025.europython.eu/speaker/${speaker.id}`; + rows.push([ + session.data.title || "", + name, + `https://ep2025-buffer.ep-preview.click/media/social-${speaker.id}.png`, + twitter_url || linkedin_url || mastodon_url || speaker_page, + twitter_url ?? speaker_page, + linkedin_url ?? speaker_page, + bluesky_url ?? speaker_page, + mastodon_url ?? speaker_page, + ]); + } + } + } + + const csvLines = [header, ...rows] + .map((row) => + row + .map((field) => + field.includes('"') || field.includes(",") || field.includes("\n") + ? `"${field.replace(/"/g, '""')}"` + : field + ) + .join(",") + ) + .join("\r\n"); + + return new Response(csvLines, { + status: 200, + headers: { + "Content-Type": "text/csv; charset=utf-8", + "Content-Disposition": 'attachment; filename="social_media.csv"', + }, + }); +}