SPRINT 7
Connect Your Tribe
Daily Checkout 03-02-2025
Wat heb ik vandaag gedaan?
Vandaag heb ik mijn NodeJS geüpdatet op mijn Macbook. Dit was nog een gedoe, aangezien mijn NodeVersionManager nog in mijn $PATH
naar een oude versie ging. Dit heb ik met Krijn samen uitgezocht.
Daarnaast heb ik mijn visitekaartje gekopieerd van Sprint 1, in de Liquid-bestanden. Ook hebben we tijdens de workshop gespeeld met de FDND API en onze eigen data geüpdatet.
04-02-2025 - Breakdown Schets + Eerste versie website met Liquid
Breakdown Schets
Vandaag heb ik een breakdown schets gemaakt:
Meer over dit issue is hier te lezen:
Project Board
Daarnaast heb ik een project board gemaakt voor deze sprint. Die is hier te bekijken:
Eerste versie website
Als laatste heb ik mijn CSS genest en mijn JavaScript code omgezet naar Vanilla ten opzichte van de site uit Sprint 1. Als extra heb ik een play-functie ingebouwd voor mijn Spotify Wrapped op mijn feitjes-artikel.
De site is hier te bekijken. De eerste weergave kan even duren (max. 60 seconden):
05-02-2025
Wat heb ik vandaag gedaan?
Vandaag heb ik de rest van mijn visitekaartje dynamisch gemaakt met JSON uit de database.
Hier een stuk code waarin ik mijn werkervaring dynamisch per entry in een table plaats:
<table class="table-primary" cellspacing="0" cellpadding="0">
<thead>
<tr>
<th>Periode</th>
<th>Werkervaring</th>
</tr>
</thead>
<tbody>
{% for werkervaring in custom.werkervaringen %}
{% if werkervaring.functie %}
<tr>
{% if werkervaring.periode %}
<td>{{ werkervaring.periode }}</td>
{% else %}
<td>Onbekende periode</td>
{% endif %}
<td>{{ werkervaring.functie }} bij
{% if werkervaring.link %}
<a class="link-werkervaring" target="_blank" href="{{ werkervaring.link }}">
{% endif %}
{{ werkervaring.bedrijf }}
{% if werkervaring.link %}
</a>
{% endif %}
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
Ook heb ik hier gebruik gemaakt van flow tags.
07-02-2025 - Code/Design Review visitekaartje
Beoordelen
Vandaag heb ik drie mensen beoordeeld op HTML, CSS en JS:
Beoordelingen behandelen
Zelf ben ik ook beoordeeld.
Hierna heb ik van de feedback issues gemaakt en de reviewers erin vermeld.
08-02-2025
Wat heb ik gedaan?
Vandaag heb ik meer particles toegevoegd zodat mijn structuur overzichtelijker is.
10-02-2025
Wat heb ik vandaag gedaan?
Vandaag heb ik met mijn nieuwe groepje, bestaande uit: Karima, Halima en mijzelf, geëxperimenteerd met sorteren en het toepassen van filters m.b.v. de Directus FDND API.
Daarna hebben we allemaal schetsen gemaakt voor leuke ideeën om de data van de studenten te filteren en te sorteren.
Mijn uitwerking van de schetsen
- Idee 1: Een hover-effect met een achtergrondkleur die is ingesteld als favoriete kleur van die leerling.
- Idee 2: Een filter gebaseerd op een random ID. Hierna wordt één persoon weergegeven.
- Idee 3: Vier select-elementen met filters voor favoriete elementen en technieken.
- Idee 4: Een bij-modus om te zoeken naar bijnamen in plaats van gewone namen. In deze modus kun je ook weer terug naar de normale weergave.
- Idee 5: Een filter op favoriete gerechten. Er worden plaatjes van gerechten getoond (met beschrijving). Bij een klik op een gerecht worden de personen weergegeven die dit als favoriete gerecht hebben.
Gekozen ideeën
Ik heb uiteindelijk besloten om idee 4 (de bijmodus) uit te werken.
Ik denk ook dat ik idee 5 (gerechtfilter) erin ga verwerken, mits genoeg mensen deze dataset invullen zodra deze is aangemaakt.
11-02-2025
Wat heb ik gedaan?
Vandaag heb ik een Hi-Fi ontwerp gemaakt van mijn uitwerking van de squad pagina.
Hierna heb ik feedback gevraagd aan een klasgenoot (Clarice). Ik was benieuwd wat andere mensen nog als feedback hadden.
Zij gaf aan dat de website qua kleurenstelling nog iets minder zakelijk mag, en dat dit te bereiken is door een ander kleurenpallet te kiezen. Ik ben voor rood gegaan. Beiden vonden we dat het er al een stuk beter uitziet nu.
12-02-2025
Wat heb ik vandaag gedaan?
Vandaag heb ik een wireflow van de gerecht-filter functionaliteiten gemaakt en de mobiele versie van de gerechtfilter uitgewerkt in de liquid-bestanden en JS.
13-02-2025
Daily checkout
Vandaag heb ik de puntjes op de i gezet met de applicatie.
Ik heb voor desktop de gerechtfilter op een andere manier aangepakt dan op mobiel (zoals in mijn wireflow). Voor de gerechten-checkbox heb ik gebruik gemaakt van de :has
selector.
Voor toegankelijkheid heb ik het aria-label
in JS aangepast wanneer het receptenfilter geopend is.
14-02-2025
Code-Design review
Vandaag heb ik samen met Halima en Karima twee mensen beoordeeld:
We love web
Vandaag kregen we een talk van de bedenker van Polypane, Kilian Valkhof.
De maker van Polypane ontwikkelde deze browser voor developers zonder investeerders. Zijn motto: "Alles bouwt voort op wat je eerder hebt gedaan."
Zijn technische reis begon met FrontPage 2000. Op zijn twaalfde verdiende hij geld met een website vol banners. Elke klik leverde 15 cent op. Hij maakte ook een pagina met de PABO-catalogus.
Hij runde 14 jaar een eigen bedrijf. In die tijd leerde hij veel nieuwe programmeertalen en technologieën kennen. De term "responsive design" bestaat inmiddels al 15 jaar.
Hij ontwikkelde verschillende tools:
- SenCSS: Een van de eerste standaard frameworks.
- gridBuilder.js: Voor het bouwen van grids.
- Grafico: Een JavaScript-library voor grafieken.
- trimage: Een image compressor in Python (gemaakt in 2010).
- f.lux indicator: Een tool geschreven in Python.
- Fromscratch: Een andere handige tool.
In mei 2019 lanceerde hij Polypane 1.0, vanaf nul opgebouwd. De browser kreeg zes jaar lang elke maand een nieuwe versie. Polypane is grotendeels gebouwd met JavaScript en gebruikt veel technieken, zoals React state, Inter Process Communication, message bus, message ports en het Chrome DevTools-protocol.
Zijn side-projects zijn:
- superposition.design
- Fix contrast
- polypane.cloud
24-02-2025
Wat hebben we vandaag gedaan?
Vandaag hebben we met ons groepje gezamenlijk een nieuwe schets gemaakt en de taken verdeeld d.m.v. issues.
27-02-2025
Wat heb ik vandaag gedaan?
Vandaag heb ik ervoor gezorgd dat de links naar de gefilterde pagina's werken.
Ook heb ik een beginnetje gemaakt aan de lessen van learnjavascript.online voor de deeltaak.
Hier heb ik in les 2 wat nieuws geleerd. Dit heb ik toegepast in mijn I love Web website.
Hier zijn schermafbeeldingen van de les:
Vragenlijst
-
Vraag 1: Ik kan uitleggen wat NodeJS is en waarvoor het gebruikt wordt
Punten: 1
-
Vraag 2: Ik weet wat het doel van package.json is en heb hier aanpassingen ingemaakt
Punten: 0
-
Vraag 3: Ik heb met npm packages geïnstalleerd en gebruikt in het bestand server.js
Punten: 0 (zelf heb ik het wel eens gedaan, maar niet op school)
-
Vraag 4: Ik kan met commando’s in de terminal een NodeJS project stoppen en starten
Punten: 3
-
Vraag 5: Ik weet waarom ik mijn NodeJS project regelmatig moet herstarten en kan dit uitleggen
Punten: 3
-
Vraag 6: Ik heb een strategie voor debuggen in NodeJS
Punten: 3
-
Vraag 7: Ik kan uitleggen wat Express.js doet en waarom het nodig is om met NodeJS een website te bouwen
Punten: 2
-
Vraag 8: Ik weet wat routes zijn en kan zelf een nieuwe route aanmaken
Punten: 3
-
Vraag 9: Ik weet wat request en response argumenten zijn in een functie voor het laden van data
Punten: 3
-
Vraag 10: Ik heb gebruik gemaakt van een request parameter om specifieke data te laden
Punten: 3
-
Vraag 11: Ik kan uitleggen wat Liquid doet en waarom het nodig is om met Express.js een website te maken
Punten: 1
-
Vraag 12: Ik weet hoe ik data naar Liquid verstuur om dit te gebruiken bij het renderen van een pagina
Punten: 3
-
Vraag 13: Ik weet hoe ik Liquid filters toe kan passen en waar ik kan vinden hoe die werken
Punten: 3
-
Vraag 14: Ik heb een nieuwe route gemaakt en nieuwe data meegegeven aan een Liquid view
Punten: 3
-
Vraag 15: Ik weet waar een foreach loop voor gebruikt wordt en pas het toe in een Liquid view om HTML te renderen
Punten: 3
-
Vraag 16: Ik kan in Liquid een controle maken waarmee de avatar niet getoond wordt als deze niet in whois.fdnd.nl is ingevuld
Punten: 3
-
Vraag 17: Ik heb een strategie voor debuggen in Liquid
Punten: 2
-
Vraag 18: Ik kan data fetchen uit een REST API
Punten: 3
-
Vraag 19: Ik snap het verschil tussen HTTP requests van de methodes GET en POST
Punten: 3
-
Vraag 20: Ik kan data uit een REST API filteren of sorteren
Punten: 3
-
Vraag 21: Ik snap wat het async keyword doet in JavaScript code
Punten: 2
-
Vraag 22: Ik weet wat het doel is van een try/catch block en kan het gebruiken bij het parsen van JSON
Punten: 1
-
Vraag 23: Ik begrijp het verschil tussen client-side JavaScript en server-side JavaScript en wanneer ik welke het handigst in kan zetten
Punten: 0
-
Vraag 24: Ik kan formulier data die is ge-POST opslaan in een variabele op de server en gebruiken bij het renderen van een pagina
Punten: 3
-
Vraag 25: Ik kan formulierdata die is ge-POST door middel van een POST of PATCH HTTP request opslaan in de REST API
Punten: 3
SPRINT 8
Server Side Rendering
04-03-2025
Briefing Mediahuis (Triple)
Vandaag hebben we onze opdracht uitgelegd gekregen in een meeting van Triple. Nills en Shyanta waren aanwezig namens Triple.
Ik heb mijn eigen debriefing geschreven:
05-03-2025
Wat heb ik vandaag gedaan?
Vandaag heb ik het HTML Prototype afgerond van de hoofdpagina.
06‐03‐2025
Wat heb ik vandaag gedaan?
Vandaag heb ik het HTML Prototype afgerond voor de stationpagina.
07-03-2025 - WE LOVE WEB
Evenement: We Love Web – Presentatie Cassie Evans over GSAP
Vandaag heb ik een presentatie bijgewoond van Cassie Evans over GSAP, een krachtige animatiebibliotheek voor het web. Cassie liet zien hoe je met GSAP eenvoudig animaties maakt en optimaliseert.
Wat ik heb geleerd:
- Tweening is een efficiënte methode om elementen te animeren.
- Voorbeeld:
gsap.to('.box', { x: 200 });
verplaatst een element.
- GSAP Timelines maken het mogelijk om meerdere animaties achter elkaar te plaatsen en te controleren.
- GSAP Utils biedt handige functies om animaties dynamischer te maken.
- Random waarden in animaties laten bewegingen natuurlijker aanvoelen.
- Bijvoorbeeld: willekeurige horizontale verplaatsing bij een beweging in meerdere richtingen.
De presentatie was erg inspirerend, vooral de voorbeelden waarin GSAP werd gebruikt om interactieve en speelse animaties te maken. Ik wil hier verder mee experimenteren en kijken hoe ik dit in mijn eigen projecten kan toepassen.
09‐03‐2025
Wat heb ik vandaag gedaan?
Vandaag heb ik de desktopversie gemaakt van home en stationpagina
12‐03‐2025
Wat heb ik vandaag gedaan?
Vandaag heb ik geexperimenteerd met data filteren/sorteren met Directus en Template filters in Liquid
Data sorteren en filteren met Directus
Template filters in Liquid
Ik heb gekozen voor de Liquid filters:
- plus
- date
- divided_by
- truncate
- replace
Experimenten
Bekijk hier de experimenten
Bekijk hier de opdracht
SPRINT 9
The Web is for Everyone
17‐03‐2025 ‐ Workshop Sprint Planning
Nieuwe studio!
We hebben een nieuwe indeling van de studio en het aquarium. De studio is voor stil werken met elkaar en het aquarium is voor kletsen en spelletjes. De pingpongtafel is in aantocht.
Workshop Sprint Planning
Hieronder zijn de drie stappen van Progressive Enhancement (een code strategie waarmee je ervoor kunt zorgen dat je website het altijd doet):
- Bepaal de core functionality van wat je wilt maken.
- Bouw de functionaliteit met de simpelste techniek (meestal HTML met een klein beetje Mobile First CSS voor de huisstijl).
- Voeg daarna extra enhancements toe met CSS en client-side JS om de User Experience te verbeteren (de leukste stap).
Opdracht
Kan je bedenken waarom de roltrap een goede metafoor is voor Progressive Enhancement? Teken op het whiteboard hoe de roltrap een voorbeeld van Progressive Enhancement is. Wat gebeurt er in stap 1, 2 en 3?
RAPPE websites maken
Houd rekening met:
- Verschillende browsers
- Verschillende internetsnelheden
Daarna hebben we onze leertaak geforkt en gecloned, issues van de vorige sprint getransferred naar de nieuwe repository. Vervolgens hebben we een nieuwe planning gemaakt voor alles wat ons deze sprint te wachten staat.
Onze planning
17‐03‐2025 ‐ Workshop User Generated Content
We gaan met ons groepje overleggen wat we kunnen maken waarbij je gegevens in jullie Directus database aan moet passen of toe moet voegen.
Hierna moeten we een snelle schets maken over wat je kan doen.
Ik heb een idee om per DJ likes te verzamelen, en het DJ Overzicht te sorteren op Likes of alfabetisch (Standaard)
Hieronder mijn snelle schets:
Meer mensen aan onze tafel willen graag likes maken en we denken dat het haalbaar is door een like attribuut toe te voegen aan de Directus structuur.
Hierna hebben we samen onze Directus database geanalyseerd, en voor zichzelf mogelijke problemen en knelpunten genoteerd die je verwacht voor jouw idee.
De knelpunten die ik zie met mijn idee, is dat er nu niet de mogelijkheid is om likes te geven aan Users (Deejays).
Hieronder is een stuk JSON van de users:
{
"users": [
{
"id": 34,
"mh_users_id": {
"sort": null,
"id": 20,
"status": "draft",
"full_name": "Barry Paf",
"date_updated": null,
"date_created": "2024-10-07T09:04:53.041Z",
"cover": "1d3c4caa-2b25-463a-b71c-940a319e5924",
"user_created": "73ac9577-6d00-4fb2-ab53-5313fe572d09",
"user_updated": null
},
"mh_show_id": {
"radiostation": 3,
"sort": null,
"id": 33,
"body": null,
"name": "De Barry Paf Show",
"status": "published",
"date_updated": "2024-12-11T14:17:37.852Z",
"date_created": "2024-10-07T09:04:53.039Z",
"headermobile": "0c6844da-e7c6-4f71-8704-c9394dd37e07",
"headerdesktop": "6169ea03-4081-4869-b3da-222d51f40478",
"user_created": "73ac9577-6d00-4fb2-ab53-5313fe572d09",
"user_updated": "73ac9577-6d00-4fb2-ab53-5313fe572d09",
"thumbnail": "f3b76db1-53cf-4d77-b0eb-eb5d25d9af31",
"users": [34]
}
}
]
}
Ik heb dit probleem bij een docent aangekaart (Krijn). Krijn gaat een Messages table toevoegen aan onze databasegroep om ervoor te zorgen dat iedereen zijn eigen POSTS-requests kan maken doormiddel van een POST. Iedereen kan met een zelfgemaakte Syntax voor de For: waarde bedenken, en deze gebruiken voor de request.
Ik zou bijvoorbeeld iets kunnen doen als:
{
"id": 10,
"created": "2025-02-24T10:40:28.884Z",
"from": "Radio Veronica",
"text": "5",
"for": "Dylan / Likes for UserID / 2"
}
Hierna bedacht ik nog een knelpunt. hoe kan ik het verschil ontdekken tussen iemand die de DJ al heeft geliked, en wie nog niet.
Ik heb hierover gebrainstormt en het volgende hiervoor bedacht:
In dat geval moet er een soort login komen, waar er dus ook herkend kan worden welk persoon de like heeft gegeven.
Dan zou elke like apart in de database moeten staa, we gaan immers ook POSTEN en niet UPDATEN. Dan had boenstaande manier ook niet gewerkt.
Een voorbeeld van twee likes zou dan zijn:
{
"id": 10,
"created": "2025-02-24T10:40:28.884Z",
"from": "UserLoggedin / DivaniNL",
"text": "Like",
"for": "Like for UserID / 2"
},
{
"id": 11,
"created": "2025-02-24T10:40:28.884Z",
"from": "UserLoggedin / Ju5tu5",
"text": "Like",
"for": "Like for UserID / 2"
}
17‐03‐2025 ‐ Lerend vermogen
Ik heb een tool gevonden om beter te kunnen testen. Ik heb een plugin gedownload voor Figma: Stark - Contrast & Accessibility Checker. Deze heb ik hier gevonden:
Hiermee kan je in je Ontwerp live je WCAG kleuren contrasten checken en worden er suggesties getoond. Hieronder is te zien dat ik de mogelijkheden onderzoek.
Daily Checkout 19-03-2024 - Workshop UI States
Wat heb ik vandaag geleerd?
Vandaag hebben we geleerd hoe belangrijk het is om UI states goed te verwerken in je project.
Duidelijke states zorgen voor betere feedback en feedforward, waardoor gebruikers altijd weten wat er gebeurt.
De vijf UI states
Er zijn vijf belangrijke UI states die je in een project kunt verwerken:
- Empty – Er is (nog) geen data beschikbaar.
- Loading – De content wordt geladen.
- Partial – Een deel van de content is al beschikbaar, maar er wordt nog meer geladen.
- Error – Er is iets misgegaan, bijvoorbeeld een foutmelding bij het ophalen van data.
- Ideal – Alles werkt zoals het hoort en alle data is beschikbaar.
Waarom is dit belangrijk?
Voor een empty state is het belangrijk om gebruikers verder te helpen.
Bijvoorbeeld: als een zoekopdracht geen resultaten oplevert, kun je alternatieve artikelen tonen of een suggestie geven.
Een successtate hoeft niet altijd groots te zijn, zoals een animatie bij Tikkie.
Soms is een subtiele bevestiging voldoende, zoals de blauwe vinkjes in WhatsApp die aangeven dat een bericht is gelezen.
Door deze UI states goed te implementeren, maak je je interface niet alleen gebruiksvriendelijker, maar ook intuïtiever!
Huiswerkopdracht
Vraag een familielid (zoals een ouder, opa, oma, oom of tante) of ze weleens een website hebben geprobeerd te gebruiken die niet werkte op hun apparaat. Misschien klaagde je vader ooit dat "die site het nooit doet" op zijn oude laptop, of riep je oma gefrustreerd dat "alles verdwenen is" toen ze iets probeerde op haar telefoon.
Onderzoeksvragen:
- Welke website werkte niet?
klm.nl
- Welk apparaat gebruikten ze?
iPad Mini 2 (oude iPad van mijn moeder)
- Welk besturingssysteem?
iOS - 12.5.7
- Welke browser en versie?
Safari
Neem je onderzoek en de anekdote maandag mee naar de les, zodat je er iets over kunt vertellen!
We love Web – Talk van Ischa Gast
Spreker: Ischa Gast
Werkt bij: Schiphol
Quote: "Liefde voor toegankelijkheid"
Belangrijke inzichten
- Onduidelijke linknamen: Veel bedrijven gebruiken nog steeds vage linkteksten zoals "Lees meer". Dit is niet handig voor screenreaders.
- Beperkingen raken iedereen: Toegankelijkheid is belangrijk voor iedereen, ook bij tijdelijke of situationele beperkingen zoals vermoeidheid of slechte verlichting.
- Kleuren met slecht contrast: Lichtblauw, groen en oranje zijn minder goed leesbaar.
- Verbeteringen: Gebruik correcte HTML, een logische koppenstructuur, beschrijvende links en voldoende kleurcontrast.
- Problemen op Schiphol.nl: Niet bruikbaar voor doven die geen Nederlands spreken.
Handige tools