@@ -31,26 +31,50 @@ <h2 class="text-2xl font-semibold mb-3">Agenda</h2>
3131 {% endif %}
3232
3333 {% if page.speakers %}
34- < h2 class ="text-2xl font-semibold mb-3 "> Speakers</ h2 >
35- < ul class ="space-y-2 mb-6 ">
36- {% for sp in page.speakers %}
37- < li >
38- < strong > {{ sp.name }}</ strong >
39- {% if sp.url and sp.url contains "linkedin.com" %}
40- < a href ="{{ sp.url }} " target ="_blank " rel ="noopener noreferrer " class ="inline-block ml-2 ">
41- <!-- LinkedIn Icon (SVG) -->
42- < svg class ="w-5 h-5 text-blue-600 hover:text-blue-800 " xmlns ="http://www.w3.org/2000/svg " fill ="currentColor " viewBox ="0 0 24 24 ">
43- < path d ="M4.98 3.5C4.98 4.88 3.87 6 2.5 6S0 4.88 0 3.5 1.12 1 2.5 1s2.48 1.12 2.48 2.5zM.4 8.34h4.18V24H.4V8.34zm7.95 0h4.01v2.13h.06c.56-1.06 1.93-2.18 3.98-2.18 4.25 0 5.03 2.8 5.03 6.44V24h-4.18v-7.73c0-1.84-.03-4.2-2.56-4.2-2.56 0-2.95 2-2.95 4.06V24H8.35V8.34z "/>
44- </ svg >
45- </ a >
46- {% endif %}
47- {% if sp.topic %} — {{ sp.topic }}{% endif %}
48- </ li >
34+ {% assign sorted_speakers = page.speakers | sort: "name" %}
4935
36+ < h2 class ="text-2xl font-semibold mb-3 "> Speakers</ h2 >
37+ < div class ="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4 mb-6 ">
38+ {% for sp in sorted_speakers %}
39+ {% if sp.url and sp.url contains "linkedin.com/in/" %}
40+ {% assign slug = sp.url | split: "/" | last %}
41+ {% assign base = slug | split: "-" | first | downcase %}
42+ {% else %}
43+ {% assign base = sp.name | split: " " | first | downcase %}
44+ {% endif %}
45+
46+ {% assign file_jpeg = "../assets/lombokdev/speakers/" | append: base | append: ".jpeg" %}
47+ {% assign file_jpg = "../assets/lombokdev/speakers/" | append: base | append: ".jpg" %}
48+ {% assign file_png = "../assets/lombokdev/speakers/" | append: base | append: ".png" %}
49+
50+ < div class ="relative rounded-xl overflow-hidden shadow-lg ">
51+ < img src ="{{ file_jpeg }} "
52+ alt ="{{ sp.name | escape }} "
53+ class ="w-full h-56 object-cover "
54+ onerror ="this.onerror=null;
55+ this.src='{{ file_jpg }}';
56+ this.onerror=function(){this.src='{{ file_png }}'};
57+ this.onerror=function(){this.src='../assets/lombokdev/speakers/placeholder.png'}; ">
58+
59+ < div class ="absolute bottom-0 left-0 right-0 bg-black bg-opacity-60 text-white p-3 flex items-center justify-between ">
60+ < span class ="font-semibold "> {{ sp.name }}</ span >
61+ {% if sp.url and sp.url contains "linkedin.com" %}
62+ < a href ="{{ sp.url }} " target ="_blank " rel ="noopener noreferrer " class ="ml-2 ">
63+ <!-- LinkedIn Icon -->
64+ < svg class ="w-5 h-5 text-blue-400 hover:text-blue-600 " xmlns ="http://www.w3.org/2000/svg " fill ="currentColor " viewBox ="0 0 24 24 ">
65+ < path d ="M4.98 3.5C4.98 4.88 3.87 6 2.5 6S0 4.88 0 3.5 1.12 1 2.5 1s2.48 1.12 2.48 2.5zM.4 8.34h4.18V24H.4V8.34zm7.95 0h4.01v2.13h.06c.56-1.06 1.93-2.18 3.98-2.18 4.25 0 5.03 2.8 5.03 6.44V24h-4.18v-7.73c0-1.84-.03-4.2-2.56-4.2-2.56 0-2.95 2-2.95 4.06V24H8.35V8.34z "/>
66+ </ svg >
67+ </ a >
68+ {% endif %}
69+ </ div >
70+ </ div >
5071 {% endfor %}
51- </ ul >
72+ </ div >
5273 {% endif %}
5374
75+
76+
77+
5478 {% if page.registration_url %}
5579 < a href ="{{ page.registration_url }} " class ="px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 "> Register</ a >
5680 {% endif %}
0 commit comments