Kategorien
Allgemein Projekte

IN-LIVE Cocktail-Schule – mein erstes Projekt mit Astro

Ich hatte ja schon lange vor, mal ein realistisches Projekt mit Astro umzusetzen. Mein langjähriger Freund und Trauzeuge hat, nachdem wir schon länger darüber gesprochen hatten, seine Seite mal zu verbessern, das ganze vertrauensvoll in meine Hände gelegt.

Seine Seite ist eigentlich eine reine Marketing-Seite, so dass der Inhalt zu 90% statisch ist und bleiben kann – ein fast perfektes Szenario für das Astro Content Layer.

Also erstmal überlegen, was man mit den restlichen 10 Prozent macht. Meine erste Idee war, dass ein CSV hochgeladen und geparst wird. Das hat sich in einem ersten Test als nicht sehr bedienerfreundlich entpuppt. Ein Google Sheet als API, wie ich es damals bei dem Gamingbooster gemacht habe, ist hier in diesem Kontext leider auch schwierig aufgrund der Startup-Zeiten bei der Google API.

Letztendlich sind wir dann bei Contentful gelandet, das Free Tier ist mehr als ausreichend für den Veranstaltungskalender. Und später dann vielleicht auch noch ein bisschen mehr.

Die Buchungen der Cocktailkurse etc. werden durch externe Bookingwidgets eines Anbieters dafür erledigt, diese sind als custom-elements umgesetzt und können ohne Probleme auch auf der neuen statischen Website eingebunden werden.

Astro 4 und Astro 5

Da ich aufgrund externer Umstände recht lange mit dem Projekt beschäftigt war, ergab sich der glückliche Umstand, dass ich bei ca. 50% der Fertigstellung auf Astro 5 Beta und bei ca. 90% auf Astro 5 ‘gold’ wechseln konnte.

Das war ein mega Boost für das Projekt, der Change im Content Layer hat weniger Probleme gemacht als gedacht, alle MDX-Files sind sauber typisiert und durch die neuen Relations ist der Content auch besser in sich aufgebaut (und queryable).

Dazu die neuen Responsive-Images und das Image-Cropping in den astro:asset Features – Ein Traum und bezahlt gleich 2 der 4 grünen 100er Ringe bei Lighthouse.

Screenshot der Lighthouse-Untersuchung

SEO

Natürlich darf eine Optimierung für eine solche Seite nicht fehlen:

  1. Sauber strukturierte Überschriften / Listen und Navigationen – was man seit den 90ern schon als “semantisches HTML” kennt.
  2. Title, Descriptions, alt-Attribute und Co.
  3. Korrekte Statuscodes

Accessibility

Wer mich kennt, weiß, dass ich da sehr nervig sein kann. Das BFSG steht vor der Tür, also haben wir das gleich mit berücksichtigt: Das Design ist nicht nur responsive, es ist auch tastatur-navigierbar. Kontraste etc. wurden alle mit WebAIM dauerhaft geprüft und angepasst. Die Bilder haben alle alt-Texte, wenn notwendig oder explizit keinen, wenn es nur Design-Bilder sind.

Komponenenten, die eigene Überschriften enthalten können die korrekten Heading-Level von außen mitgegeben bekommen, so dass sie universeller einsetzbar sind. Sinnvolle Überschriften sind schließlich auch ein Thema beim BFSG, ebenso wie die anderen semantischen Themen.

Die FAQ-Akkordeons z.B. sind per custom-element erweiterte Definition Lists, die diese Frage-Antwort-Hierarchie schon abbilden.

Deployment

Mittlerweile gibt es 2 Versionen der Seite, eine Version die bei Netlify auf Basis des Develop-Branches gebaut wird, eine Version die per Gitlab Runner gebaut und dann auf dem finalen System deployed wird. So haben wir Gitlab als generelles Preview und Feature-Branches und ein sauberes Deployment auf einem komplett anderen Host.

Die Zukunft

Spannend wird es, wenn man sich überlegt, dass man die Content-Pflege in Zukunft auf ein Headless-CMS übernehmen kann und mit der Content-Struktur weiterarbeiten kann oder dann ggf. irgendwann mehr Interaktion in die Seite kommt. Ich bin gespannt, was da noch kommt.

Kategorien
Projekte Webentwicklung

Astro, Netlify und falsche Annahmen

Gestern habe ich endlich herausgefunden, warum Netlify in meinem Preview-Build keine Bilder in bestimmten Seiten anzeigt. In meinem Fall war das eine Gallery, die einen Ordner übergeben bekommt.

Danach habe ich alle Bilder, die in Astro gefunden werden über diesen Filter gejagt. Lokal und im statischen Build war alles wunderbar.

Erster Gedanke war, dass bei Netlify die Bilder-Ausgabe einen Timeout hat, da ich am Anfang noch recht große Bilder verwendet habe. Allerdings hat der Resize der Bilder nichts bewirkt. Das war’s dann nicht.

Dann war die nächste Vermutung es läge an der fehlenden Netlify Integration, aber die ist für den static Build völlig unerheblich, wichtig ist die hauptsächlich für den Betrieb einer SSR Anwendung. Das Image-CDN und die Bearbeitung der Bilder ist davon (im static Build) nicht betroffen.

Am Ende habe ich in meiner Verzweiflung angefangen, in der Anwendung an verschiedenen Stellen zu debuggen, unter anderem an dem Mechanismus, mit dem ich die Bilder zusammensuche. Tatsächlich war das nur als Übergang gedacht, da ich damit ja den Bildern auch keine alt-Texte und Co. übergeben konnte, aber die Galeriemodule funktional schon mal testen konnte.

Spannenderweise hat die obige Debug-Ausgabe lokal das erwartete Ergebnis gezeigt.

Im Netlify-Build-Log war allerdings trotz gefundenen Images das filteredImages-Log leer, bzw. ein leeres Array:

Und wie man sieht: Netlify findet Bilder scheinbar nur – in schon bearbeiteter Form – in dem _astro-Ordner, wenn die Components gebaut werden. Blöd, aber genau der Grund, warum der Filter nicht funktioniert und damit keine Bilder zurückgegeben werden. Leider unterscheided sich das von der Lokalen Bauweise, wo die Bilder noch in den korrekten Ordnern liegen.

Verlinkt man die Bilder normal, z.B. aus der Content-Collection, dann geht natürlich alles korrekt und auch der Preview Build bei Netlify funktioniert korrekt. Jetzt sogar schon mit Alt-Texten, zumindest bei den Contents, in denen ich das ganze schon gepflegt habe. Wird der nächste Schritt mit SEO-und Accessibility-Screening halt schon etwas schneller möglich.

Kategorien
Wochenbericht

Wochenbericht 2022.46

  1. Automatisierte Scans: Microsoft sperrt Kunden unangekündigt für immer aus
  2. Announcing Nuxt 3.0
  3. Ryan Dahl talks about Deno and JavaScript in general
  4. Mozilla to begin signing Mv3 extensions for Firefox
  5. Interactive CSS Flex Tutorial / Flexible Box
Kategorien
Projekte

Gamingbooster V2

Vielleicht hat es der eine oder andere mal mitbekommen, ich bin ja Freund koffeinhaltiger Getränke und gerade wenn es warm ist, ist Kaffee (warm) nicht immer das geilste und Kaffee (Eiskaffee und Co.) nicht immer schnell genug herzustellen. Dazu hat man dann mit Milch oder Eis auch schnell noch par ungeplante Kalorien dabei.

Energydrinks sind auch nicht das wahre, kosten schweineviel Geld und die ganzen Dosen, die sich dann da stapeln… Dann bin ich irgendwann über “Gamingbooster” gestolpert, die einen Weg aus der Situation hinaus anbieten: Super als Kaltgetränk, verschiedene Geschmacksrichtungen, meist deutlich günstiger als Energydrinks. Und mehr Koffein, da Gamingbooster in Pulverform als Nahrungsergänzungsmittel gelten.

Interessiert habe ich mich dann mal auf die Reise in das Internet begeben und versucht herauszufinden, welche Marken und Arten es außer den bekannten Größen noch so gibt.

Ursprünglich als kleine Web-App mit Google Spreadsheet-API angefangen, hat sich das Konzept weiterentwickelt und so steht neuerdings ein echtes CMS hinter der Seite, in dem auch deutlich mehr Daten strukturiert erfasst werden. Das zahlt sich dann in zukünftigen Versionen aus.

Nun also ist es erstmal soweit und die Version 2.0 der Gamingbooster Datenbank ist jetzt endlich online.

Kategorien
Wochenbericht

Wochenbericht 2022.12

  1. Postgres.js – Fastest Full-Featured PostgreSQL Client for Node and Deno
  2. What Web Frameworks Solve And How To Do Without Them
  3. Actually completing personal projects (and gaining value from them)
  4. Five coding interview questions I hate
  5. My key takeaways from The Pragmatic Programmer