🍽️ Code Cookbook

Guide to the best-practices for building and deploying web applications.

introduction

Een korte omschrijving van wat Code Cookbook inhoudt, wat het doet, waarvoor het ingezet kan worden en hoe het praktisch te gebruiken valt.

Code Cookbook

Wat is Code Cookbook

Deze website is te gebruiken als naslagwerk voor zowel nieuwe als lopende projecten.

Een deel van dit naslagwerk bestaat uit algemene richtlijnen en gemaakte afspraken die over meerdere projecten gelden. Deze zullen in een volgende versie als aparte gemarkeerd worden en de weergave hiervan getoggled.

Verder is een deel van dit naslagwerk project-specifiek: informatie benodigd voor bijvoorbeeld de handoff van design naar development, projectdocumentatie, benodigde bestanden.

Wie gebruikt dit

Dit naslagwerk is ontwikkeld voor designers en developers bij Active Collective.

Ook (juist!) voor nieuwe medewerkers of stagiairs is dit naslagwerk fijn om een wat beter beeld te krijgen van hoe alles werkt.

Er zijn, door middel van desk research en benchmark-onderzoek bij andere agencies, industriestandaarden meegenomen en dit project is daarom ook geschikt voor gebruik door anderen.

Deze website kan overigens ook gebruikt worden door projectleiders voor het bekijken van de status van een project.

Waar te gebruiken

Dit naslagwerk kan binnen een Digital Agency met in-house design en development, gebruikt worden voor het vastleggen van:

  • Algemene richtlijnen en afspraken
  • Project-specifieke informatie (documentatie)
  • Projectbestanden
  • Herbruikbare design- of codedelen
  • Inspiratie/handige bronnen

Wanneer te gebruiken

Met aanleveren van informatie en bestanden voor de handoff, wordt dit 'handboek' erbij gepakt om te lopen of alles compleet is, en vervolgens ingevoerd in Code Cookbook

Bij het developen kan dit naslagwerk op een tweede scherm openstaan aan de hand waarvan de setup van een (nieuw) project kan worden gedaan volgens standaarden.

Dit kan zelfs door een van de 'templateprojecten' die vanuit Code Cookbook worden aangeboden, te gebruiken als basis.

Tegen de tijd van het opleveren kan met de checklists worden nagegaan of alles voldoet aan de opgestelde kwaliteitsstandarden/eisen.

Hoe te gebruiken

Navigatie

Dit naslagwerk is een single page application; dit houdt in dat alle content zich op de url 'codecookbook.nl' bevindt.

De navigatie gebeurt door middel van de sidebar aan de linkerkant; wanneer je op een van de linkjes klikt, opent de desbetreffende pagina.

Op een mobile device is dit te togglen door middel van het hamburger-icoontje rechtsbovenin.

Praktisch

Als designer kun je dit cookbook gebruiken als handleiding/checklist voor het aanleveren van de juiste projectinformatie, bestanden en designs.

Als developer kun je dit cookbook op een tabblad geopend hebben staan als een guideline en naslagwerk.

Waarom?

Behoefte aan structuur

Uit ervaring en onderzoek bleek dat er bij dit bedrijf behoefte was aan een meer gestructureerde workflow, onderling afgesproken standaarden (zoals wat er aangeleverd moet worden met de handoff), en een centrale plek waar dit in vastgelegd wordt.

Momenteel is projectinformatie namelijk nog verspreid over laptops, GitHub, Google Drive en zelfs alleen 'in het hoofd'.

Daarnaast komen er redelijk vaak bugs voor in de code; door te gaan werken volgens codestandaarden en versiebeheer goed bij te houden, zal dit al sterk verminderen.

Dez structuur in de workflow en afgesproken standaarden verhogen niet alleen de mate van transparantie in samenwerking en efficiëntie, maar ook de codekwaliteit.

workflow

Informatie over de werkwijze bij Active Collective. Hier kun je snel een idee mee krijgen van hoe de teams te werk gaan.

Werkwijze

Er wordt algemeen gezien wel volgens een standaardflow gewerkt bij AC. Hieronder staan de verschillende onderdelen visueel uitgelegd.

Good to know: deze pagina is voor de huidige werknemers van Active Collective niet zo interessant. Voor nieuwe werknemers of stagiairs is het daarentegen een met de introductie snel erbij te pakken, (leerzaam) kijkje in het bedrijf..

workflow overview

Het huidige ontwerpproces bij AC gevisualiseerd van begin tot eind.

huidige ontwerpproces gevisualiseerd

advies voor workflow met onderdelen

Met Code Cookbook komt ook het advies voor het verduidelijken en aanvullen van de workflow in meer detail. Samengevat komt dit op het volgende neer:

advies voor verloop ontwerpproces

tools overview

Onderstaand een aantal tools die momenteel door developers/designers gebruikt worden. Het is geen vereiste deze te gebruiken, maar ze zijn wel nuttig!

tools overview

Organisatiestructuur

Verder is het nuttig om te weten hoe de organisatiestructuur in elkaar steekt.

organisatie AC

Handoff design naar development

De handoff van design naar development bevat een aantal 'standaardonderdelen'; deze zijn in Code Cookbook verwerkt zodat er consistent de juiste dingen worden aangeleverd. Wat de handoff inhoudt is gevisualiseerd tot het volgende:

tijdlijn

tijdlijn handoff design naar development

per type

Hier is ook aangegeven wat vaak nog wat extra controle/aandacht bedraagt.

handoff design naar development per aandachtspunt gegroepeerd handoff design naar development per type gegroepeerd

Development-flow

Het development-proces verloopt voor een deel ook volgens een vaste flow. Hierbij gaat het vooral om ingebouwde controles met betrekking tot bijv. security.

Ingebouwde controles

Er zijn een aantal 'controleposten' in het proces die vrijwel automatisch gaan omdat ze 'ingebouwd' in de code zitten.

CI-CD checks

project

Projectspecifieke informatie. Wanneer er een nieuw project wordt gemaakt, wordt deze pagina gevuld met de relevante informatie om snel een indruk te krijgen van wat het inhoudt.

project-info

Informatie over dit project waarmee je je snel in kan lezen op de inhoud ervan.

De pagina is nu nog gevuld met placeholder-data over het project Active Collective portfolio, maar behoort met het inzetten van Code Cookbook, vervangen te worden met informatie over het project waarin het ingezet wordt.

concept

Het concept van de website van Active Collective is om hun portfolio te laten zien. Deze website is een portfoliowebsite waarop een een aantal klant-cases worden gepresenteerd.

Ook staan er een aantal blogposts op om de huidige bezigheden up-to-date te kunnen laten zien.

screenshots

mobile

screenshot of the mobile homepage
mobile homepage
screenshot of the mobile hamburger menu
mobile hamburger menu
screenshot of the mobile page contact
mobile contact page

desktop

screenshot of the desktop homepage
desktop home page
screenshot of the desktop page about
desktop about page
screenshot of the desktop page contact
desktop contact page
screenshot of the desktop page industries
desktop services page

Betrokkenen

Degenen die aan dit project werken zijn:

(placeholder-informatie voor nu)

Designers

  • [naam]
  • [naam]

Developers

  • [naam]
  • [naam]

progress

Op deze pagina wordt de huidge stand/status van het project weergegeven. Onderstaande data is gelinkt aan de GitHub-repository en wordt dan ook live-geüpdatet.

current status

milestones

Binnen een GitHub-repository kan projectvoortgang worden bijgehouden. Je kun hierbij, naast het invoeren van taken, ook 'milestones' toevoegen. Dit zijn de 'hoofddoelen' die gesteld worden voor de planning van een project.

In Code Cookbook zijn deze by default direct gelinkt aan de repository 'codecookbok', maar worden bij gebruik voor een project aangepast naar de desbetreffende repo:

Visually highlight template content and placeholder content

Right now it's not that clear which parts of Code Cookbook are 'permanent' and which ones are just placeholders for each new project. Add a feature to distinguish these visually.

due on: 2022-02-01T08:00:00Z

created: 2022-01-23T13:30:25Z

open issues: 1

closed issues: 0

link naar milestone #1

Link more pages to CMS

Currently, for the proof-of-concept sake, only the variables are editable in Netlify CMS. As the other data in Code Cookbook is also fetched from global data files, these can also be connected to a Headless CMS. That way, designers can also quickly make changes.

due on: 2022-03-15T07:00:00Z

created: 2022-01-23T13:32:58Z

open issues: 0

closed issues: 0

link naar milestone #2

to-do

To-do's are presented as repository issues and directly pulled from the project's GitHub repo. Developers can change the project link in 'pages'.

now

Dit zijn de issues die nu openstaan op de repository codecookbook.

Add light/dark theme

door: deannabosschert

2022-01-23T13:35:25Z

# ⚙️ Issue ## 📁 Part of repo SCSS. ## 🖊️ Issue itself Develop a toggle between light/dark mode, which can later on be used for highlighting certain content sections. ## 📈Recommendation Write function for toggling between color variable lists.

link naar issue #13

Generic 👥

door: deannabosschert

2022-01-22T17:09:31Z

# ⚙️ Add more content ## 📁 Part of repo Pages ## 🖊️ Issue itself Add more content to the pages. ## 📈Recommendation Do some research and just walk through the pages

link naar issue #11

done

Aangezien er nog geen lijst met afgesloten issues is op de repository van codecookbook, zijn ter illustratie de issues van een andere repository hieronder getoond.

class="github-embed-card-header">

feat: convert to flat array

created: 2020-11-13T15:11:48Z

Feat/add d3

door: deannabosschert

2020-11-13T10:13:19Z

# add sorting function

link naar issue #55

Move to frontend-data

door: deannabosschert

2020-11-09T12:37:16Z

Close this assignment and move on to frontend data.

link naar issue #54

Remove rdw-data from this repo

door: deannabosschert

2020-11-09T12:36:37Z

Clean this repo up so only the surveydata-filtering will be shown (less of a mess).

link naar issue #53

Feat/rdw data clean

door: deannabosschert

2020-11-09T11:39:59Z

# Merge current files I'm going to merge everything I've got so far into trunk, clone that to frontend-data, then proceed to work in that repo.

link naar issue #52

Feat/d3

door: deannabosschert

2020-11-08T17:20:47Z

# Get and clean data with node-fetch first and save d3 for client side rendering

link naar issue #51

Fetch data from local file

door: deannabosschert

2020-11-07T16:17:37Z

Saves me the stress of rate limiting.

link naar issue #50
class="github-embed-card-header">

Add feedback on presentation to Wiki

created: 2020-11-07T13:02:08Z

Fix file paths

door: deannabosschert

2020-11-07T12:59:24Z

Stylesheet doesn't seem to link, as well as the href-links to other pages.

link naar issue #48

fix: correct file path

door: deannabosschert

2020-11-07T12:35:12Z

Second try.

link naar issue #47
class="github-embed-card-header">

Prepare Volkskrant presentation

created: 2020-11-04T20:25:48Z

class="github-embed-card-header">

Render simple bar chart with d3

created: 2020-11-04T20:25:41Z

Get data with d3.js

door: deannabosschert

2020-11-04T02:45:38Z

Npm install, then convert to fetching the data via d3

link naar issue #41

Feat/rdwdata

door: deannabosschert

2020-11-04T02:43:05Z

# Added rdwData-page (swapped with surveydata) && added template for datafetching-function Closes #27

link naar issue #40

Feat/bedroom sizes

door: deannabosschert

2020-11-03T18:18:06Z

# Added shoeSize-column && added bedroomSize-column

link naar issue #38

Feat/bedroom sizes

door: deannabosschert

2020-11-03T01:35:48Z

# Added another cleaned column Closes #36

link naar issue #37

Add another cleaned column

door: deannabosschert

2020-11-03T01:34:55Z

Filter and render some more data (low hanging fruits)

link naar issue #36

Feat/fav color

door: deannabosschert

2020-11-02T16:50:54Z

# Made everything functional! - Made every function, actually functional by basing them on a variable - Added another column to clean (favorite colors) Closes #32

link naar issue #35
class="github-embed-card-header">

Add functional programming-principles to wiki

created: 2020-11-02T08:42:02Z

Feat/fav color

door: deannabosschert

2020-11-01T22:17:35Z

# Refactoring Mostly refactored stuff: moved files to /filter folder, changed some variable names etc.

link naar issue #33
class="github-embed-card-header">

Add another data cleaning pattern to the questionnaire-part of the assignment

created: 2020-11-01T20:41:13Z

class="github-embed-card-header">

Add techstack info to readme/wiki

created: 2020-10-31T00:04:50Z

class="github-embed-card-header">

Document data cleaning functions of survey data in codesnippets in wiki

created: 2020-10-30T16:30:44Z

class="github-embed-card-header">

Make list of questions to ask (e.g. the issue with using variables as keys/values)

created: 2020-10-30T16:30:37Z

ontwerp

Dit is het ontwerp van het project. Hierin zijn ook de basis-elementen van de pagina's die in het project gebruikt worden, vastgelegd en links naar (delen van het) design verzameld.

Design

Figma-link geheel project

Mobile design

Mobile design

Er is uiteraard mobile-first gewerkt; hier een impressie van het design. Het volledige design is te bekijken via de Figma-link hierboven.

Desktop design

Desktop design

Desktop design voor dit sproject. Het volledige design is te bekijken via de Figma-link hierboven.

Componenten

Overzicht

component overview of buttons_1 component overview of grid-spacing component overview of buttons_2 component overview of elevation component overview of labels

States

overview of all states
states overview: bigcomponents states overview: smallcomponents states overview: textcomponents states overview: dismissablecomponents

Fonts

Figma-embed

License information

This font is protected and not to be used by others as it's simply used for a graduation project here.

  • Neue Helvetica® W05 45 Light
  • Neue Helvetica® W05 55 Roman
  • Neue Helvetica® W05 65 Medium
  • Neue Helvetica® W05 75 Bold

Preview

Headings

Font 1 of 6
Font 2 of 6

Headings

Font 3 of 6
Font 4 of 6

Body

Font 5 of 6
Font 6 of 6

Afbeeldingen

Rectangles

Binnen dit project maken we gebruik van twee verschillende shapes: vierkanten en rechthoeken.

We maken gebruik van de rechthoeken voor content-afbeeldingen. Deze zijn meestal 1100x300px.

rectangle 1 van 3
rectangle 2 van 3
rectangle 3 van 3

Squares

We maken gebruik van de vierkanten voor card-afbeeldingen. Deze zijn meestal 547x610px.

square 1 van 3
square 2 van 3

Headers

Verder passen we eenzelfde formaat toe voor de pagina-header background.

background 1 van 3
background 2 van 3
background 3 van 3

Iconen

Er wordt een standaardset iconen gebruikt, afkomstig van Code Design System. Deze zijn te vinden in het templatebestand in Figma onder het kopje atoms > icons.

icon 1 van 8
icon 2 van 8
icon 1 van 8
icon 2 van 8
icon 1 van 8
icon 2 van 8
icon 1 van 8
icon 2 van 8
icon 1 van 8
icon 2 van 8
icon 1 van 8
icon 2 van 8
icon 1 van 8
icon 2 van 8
icon 1 van 8
icon 2 van 8
component overview of allicons

bestanden

Alle assets voor dit project zijn hier verzameld en met één klik te downloaden.

fonts

license information

The free version is only for personal use. However if you want to use it for commercial purposes, you need to buy the license from its foundry where it originated.

Helvetica Neue is a reworking of the typeface with a more structurally unified set of heights and widths. Other changes include improved legibility, heavier punctuation marks, and increased spacing in the numbers.

Neue Helvetica uses a numerical design classification scheme, like Univers. The font family is made up of 51 fonts including nine weights in three widths (8 in normal width, 9 in condensed, and 8 in extended width variants) as well as an outline font based on Helvetica 75 Bold Outline (no Textbook or rounded fonts are available).

The original numbering system for the weight designations came from the numbering of the Univers font. The basic font weight, “Helvetica roman”, is at the heart of this numbering system.

embed-links

<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Helvetica">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Helvetica-Neue">

afbeeldingen

variabelen

Dit zijn alle variabelen die nodig zijn voor het ontwerp van dit project. Als ontwerper kun je zo variabelen toevoegen of verwijderen, en als developer hoef je deze waarden alleen nog maar te copy-pasten naar een SCSS-file.

colors

primary

  • #202020ff

    black

  • #ffffffff

    white

  • #67c8f2ff

    brand

secondary

  • #313131ff

    gray-1

  • #878a8dff

    gray-2

  • #f6f6f6ff

    gray-3

highlight

  • #C4C4C4

    body-gray

  • #67C8F2

    body-highlight

  • #69c9f21a

    brand-transparent

variablevalue
$black:#202020ff;
$body-gray:#C4C4C4;
$body-highlight:#67C8F2;
$brand:#67c8f2ff;
$brand-transparent:#69c9f21a;
$gray-1:#313131ff;
$gray-2:#878a8dff;
$gray-3:#f6f6f6ff;
$white:#ffffffff;

typography

font-size

54px

34px

28px

22px

18px

16px

variablevalue
$heading-1:53px;
$heading-2:34px;
$heading-3:28px;
$heading-4:22px;
$heading-5:18px;
$p:16px;

font-weight

  • 700
  • 600
  • 500
  • 400
  • 300
variablevalue
$weight-bold:700;
$weight-semibold:600;
$weight-medium:500;
$weight-normal:400;
$weight-light:300;

distances

spacing

variablevalue
$mobile-xxxs:4px;
$mobile-xxs:8px;
$mobile-xs:11px;
$mobile-s:16px;
$mobile-default:20px;
$mobile-m:24px;
$mobile-l:28px;
$mobile-xl:34px;
$mobile-xxl:40px;
$mobile-xxxl:55px;
$mobile-hughmongus:64px;
$mobile-innerpage:80px;
$mobile-page:84px;
variablevalue
$desktop-xxxs:8px;
$desktop-xxs:16px;
$desktop-xs:20px;
$desktop-s:24px;
$desktop-default:32px;
$desktop-m:40px;
$desktop-l:56px;
$desktop-xl:64px;
$desktop-xxl:70px;
$desktop-xxxl:84px;
$desktop-hughmongus:100px;
$desktop-innerpage:110px;
$desktop-page:128px;

layout

variablevalue
$width-xxxs:15px;
$width-xxs:25px;
$width-xs:50px;
$width-s:100px;
$width-default:264px;
$width-m:345px;
$width-l:527px;
$width-xl:739px;
$width-xxl:878px;
$width-xxxl:0px;
$width-hughmongus:0px;
$width-innerpage:1075px;
$width-page:1440px;
variablevalue
$height-xxxs:25px;
$height-xxs:50px;
$height-xs:100px;
$height-s:161px;
$height-default:200px;
$height-m:336px;
$height-l:450px;
$height-xl:610px;
$height-xxl:620px;
$height-xxxl:0px;
$height-hughmongus:0px;
$height-innerpage:0px;
$height-page:0px;

context

Overige context. Op deze pagina nog een aantal dingen die nodig zijn om te weten, zoals: wat de doelgroep is van dit product, wat de visie is in dit project en wat de testscenarios zijn.

visie

Momenteel is deze pagina nog niet uitgewerkt met echte placeholder-content aangezien er anders vertrouwelijke informatie online zou komen te staan.

Daarnaast valt dit niet binnen de scope van Code-Cookbook wat betreft content schrijven.

Wanneer dit project in gebruik wordt genomen, kan dit verder uitgewerkt worden.

visie

Wat wil er met dit project bereikt worden? Waar moet dan ook extra aandacht naar uitgaan en heeft de prioriteit boven andere dingen?

doelgroep

De doelgroep van dit project is [..]

  • - ...
  • - ...
  • - ...

outlines

functioneel ontwerp

Dit is nu nog een placeholder-pdf.

technisch ontwerp

Dit is nu nog een placeholder-pdf.

testscenario's

Dit is nu nog een placeholder-pdf.

componenten

definities

Zijn er componenten met een bepaalde betekenis of re-usability waar rekening mee gehouden moet worden?

  • - ...
  • - ...
  • - ...

complexiteit

Zijn er componenten afhankelijk van data, of van context?

  • - ...
  • - ...
  • - ...

notities

Hier ruimte voor verder notities met betrekking tot componenten.

  • - ...
  • - ...
  • - ...

checklists

Kwaliteitscontrole; voldoet het project aan de Code Cookbook-standaarden? Hier wordt visueel weergegeven wat er nog niet is gedaan en wat er nog moet worden gedaan.

generic

Definition of Done

  • Reviewed by colleague
  • Reviewed by client
  • Security test
  • Code review
  • Audits below

Checklist by codereviewchecklist.com

Requirements

Code Formatting

Best Practices

Maintainability

Performance

Architecture

Testing

Documentation

Other

audits

Lighthouse

SEranking

coding-guidelines

Welke industriestandaarden zorgen voor een kwalitatief goede code, waarbij de technical debt wordt verlaagd en de code een betere structuur heeft? Hier een aantal afgesproken standaarden om als developer naar te werken.

best practices

  • Work in branches, even if it's a one-man project. It helps staying focused on one feature until it's finished, and keeps your from doing 10 different things at the same time. Saves you merge conflicts, too. In this project you can only collaborate via Pull Requests anyways, so branches are mandatory.
  • ^ also helps with 'closing' a feature, so you are more likely to move on to the next. Too little time, too much ideas.
  • Commit early, commit often.
  • Make single-purpose commits, following our commit guidelines
  • Always fix your .gitignore-contents asap; node_modules or the like won't ever be pushed that way.
  • Styling comes last. It's gonna change anyways so most of the time, it's better to fix the technical stuff first.
  • Don't use declarations in the global scope.
  • Start your project with writing down the future function names (pre-actors, basically).
  • Google, google, google. 99% of the time, it'll get you to the solution of your problem.
  • Set timers for solving problems that aren't super relevant in the current sprint but you do would like to work on; 25 mins tops, otherwise you'll be stuck with this for too long.
  • Make an actor diagram halfway through, it's a great reminder to refactor the code.
  • Explicitly limit the scope of your functions
  • Remember that most problems/features that have to do with the UI, can be fixed with mainly CSS.
  • Do not use .innerHTML
  • If there's an error, walk through your code from the top/beginning; explain it to your rubber ducky and state where certain data is passed.
  • Implement useful error handling.

programming principles

KISS

Keep It Simple Stupid

KISS is the acronym for the principle that says: Don't make me think about it, just do it.

DRY

Don't Repeat Yourself

DRY stands for Don't Repeat Yourself. It's the acronym for the principle that says: Don't repeat yourself, just do it.

YAGNI

You Ain't Gonna Need It

YAGNI is the acronym for the principle that says: You ain't gonna need it.

SOLID

Single Responsibility Principle

SOLID is the acronym for the principle that says: One responsibility, one responsibility.

SoC

Single-Owner-Control

SoC is the acronym for the principle that says: One owner, one control.

APO

Avoid Programming Overhead

APO is the acronym for the principle that says: Avoid programming overhead.

LoD

Level of Detail

LoD is the acronym for the principle that says: Level of detail.

naming-conventions

casing

De naming van de files kan als volgt gestructureerd worden:

  • Codefiles (js, HTML etc): kebab-case
  • Bestanden met content/data, zoals een image of json-bestand: snake_case
  • Functies en variabelen: camelCase
  • 'Grote'/exportfuncties: PascalCase

Functions

Ex/imported 'main' functions: function CleanThisThing()

Variables

Variable names: someThingsAndStuff

-->

CSS

Wat zijn interessante tools, technieken of methodologies om te gebruiken?

Hier is onderzoek naar gedaan en de bevindingen van verzameld op een Miro-bord.

CSS board

JavaScript

Functional programming

Object-oriented programming

Er werd voorheen vooral gebruik gemaakt van OOP. Dit was top om zo met meerdere programmeurs samen te kunnen werken aan een programma.

Werd alleen steeds minder efficient naarmate de applicatie groter wordt.

Functional Programming daarentegen:

  • Bugproof
  • Geautomatiseerd testen
  • Maakt gebruik van recursie
  • inFInItEloOps
  • Er bestaat geen state
  • Kost dan ook geen werkgeheugen (behalve bij het parsen)
  • Bij page refresh moet de hele structuur weer worden doorlopen bij OOP, bij FP niet
  • Als je programma klaar is, is het klaar.
  • Functies doen in principe maar 1 ding en da's herbruikbaar
  • Doet niets buiten hun eigen scope
  • Makkelijk te begrijpen wat er gebeurt
  • Soort fabrieksstraat; lopendebandwerk waarbij elk machientje een functie is

Currying

Het deels invullen van een formule zodat je ‘m later volledig kan invullen (—> re-usable)

  • Bij declareren variabele: unbound
  • Bij gebruiken variabele (invullen): bound.

pure functions

Impure functions

Een impure function pakt externe data

                
function magSpelen(leeftijd) {
    return leeftijd >= PEGI
} 
                
            

Pure functions

Een pure function houdt alles binnen de eigen scope. Dit neemt minder risico's met zich mee en behoudt overzicht.

                
function makeAdder(a) {
    return function (b) {
       return a + b
    }
}
const add42 = makeAdder(42)
console.log(add42(4))
                
            

higher order functions

Dit is een functional pattern waarbij je een een functie als variabele gebruikt (en ook direct kan returnen).

Als je bijv over een array heen mapt en daar een transformatie op loslaat, hoef je niet eerst iets te doen als:

    
function removeWhitespace(data, variable) {
    const getrimdeVariabele = data.map((item) => {
      const trimmed = item[variabele].trim()
      return {[variable]: trimmed}
    })
    return getrimdeVariabele
  }
    

maar kun je dat gewoon als volgt doen:

    
function removeWhitespace(data, variable) {
    return data.map((item) => {
      return {[variable]: item[variable].trim()}
    })
  }
    

git

Voor versiebeheer van code werken we met git. Dit wordt gekoppeld aan een GUI zoals GitHub of GitLab om de code mee te beheren en in samen te werken. Er zijn hierin een aantal features die wenselijk zijn om te gebruiken aangezien het transparantie en collaboration bevordert; deze staan hieronder uitgelegd.

project-management

flow overview

Het platform GitHub wordt gebruikt voor versiebeheer. Naast versiebeheer, biedt dit ook mogelijkheden voor project-management waarbij alles direct gelinkt is aan de development-workflow.

issues

Issues zijn de to-do's voor dit project. Als er iets gefixt moet worden (feature, bugfix, refactoring, docs etc) openen we een issue met in de titel de to-do. Er is ook een template gemaakt voor de issues die ingeschoten worden. Die templates gebruiken we zelf ook met het aanmaken van een issue.

screenshot of our issue template screenshot of our issue template

Labels

We gebruiken om overzicht te creëren betreft wat voor soorten taken we hebben, labels; zo kunnen we ook onze planning hierop aan laten sluiten. Bijvoorbeeld: feature, bugfix, refactoring, docs, release, maintenance etc. Deze labels kunnen we gebruiken om issues te categoriseren. De een doet bijvoorbeeld het liefst documentatietaken achter elkaar, of codeertaken achter elkaar, en we hebben allemaal soms nogal wat moeite om van focus te switchen dus dit helpt wel met prioriteren.

GitHub
screenshot of our assigned labels
Voorbeeld van hoe deze issue labels er in GitHub uit kunnen zien:
screenshot of our assigned milestones
Voorbeeld van hoe de verzamelingen issues onder milestones er in GitHub uit kunnen zien:

version-control

branches

Voor het adden van features maken we een aparte branch aan met feat/ , en als het specifiek voor refactoren is maken we een branch aan met refactor/. Readme-updates of het uploaden van images

We werken overigens ook in branches omdat het je forceert te focussen op het ene ding waar je mee bezig bent, het scheelt je merge conflics en het is handig om vast aan gewend te raken voor betere versiebeheer. Het is ook fijn als je een feature gewoon af kan sluiten zo.

Hieronder een placeholder-voorbeeld van wat branches.

screenshot of our branches

commit messaging

Commits proberen we te doen volgens deze guidelines. Dit betekent o.a. dat dat we alles in tegenwoordige tijd doen, en ervoor zetten waar het over gaat (feat:, refactor:, fix: etc.).
'Commit early, commit often.' --> we proberen zo veel mogelijk single-purpose commits te doen, en zo veel mogelijk.

Hieronder een placeholder-voorbeeld van wat commits volgens deze regels.

screenshot of our latest commits

collaboration

GitHub/GitLab

Project board

Handig om to-do's overzichtelijk en up-to-date online te hebben. Er kan een project board aangemaakt binnen deze repo zodat je op dezelfde locatie een beetje in de gaten kan houden waar we staan in het project en dat we geen dingen vergeten zonder 't te documenteren.

Hieronder een placeholder-voorbeeld van een project board volgens deze regels.

screenshot of our project board

pull requests

De branches mergen we met onze main branch middels een pull request; met gebruik van Netlify worden er ook gelijk controles uitgevoerd op een preview-branch.

Voordat je een 'PR' mag mergen, moet je een code review uitvoeren om er zeker van te zijn dat alles voldoet aan kwaliteit en of er niet gekke bijwerkingen meekomen.

Hieronder een placeholder-voorbeeld van wat PR's volgens deze regels.

screenshot of our open pull requests screenshot of our closed pull requests

deployment

Hoe wordt het project gedeployed naar een online omgeving? Onder staan de stappen om te volgen per use case.

server-connection

via FTP

Gehele websites kunnen direct op de server worden toegevoegd en gehost. Als gratis tool gebruiken we hiervoor FileZilla.

  • 1.

    Open FileZilla

    filezilla screenshot
  • 2.

    Maak een nieuwe connectie

    filezilla screenshot
  • 3.

    Kies de server

    filezilla screenshot
  • 4.

    Ga naar de website-directory

    filezilla screenshot
  • 5.

    Upload de website

    filezilla screenshot
  • 6.

    Item deleten: rechtermuisklik

    filezilla screenshot
  • 7.

    Bevestig verwijderen

    filezilla screenshot
  • 8.

    Sluit FileZilla

    filezilla screenshot

Testen van losse, niet-klantgerelateerde projecten

Bijvoorbeeld voor het uitproberen van een nieuw framework, een nieuwe library of een persoonlijke site.

Netlify

Op Netlify kun je gratis je statische sites hosten, en eventueel uitbreiden met andere features.

  • 1.

    Click on Netlify

    Click on Netlify
  • 2.

    Click on Log in

    Click on Log in
  • 3.

    Click on Add new site

    Click on Add new site
  • 4.

    Click on Import an existing project

    Click on Import an existing project
  • 5.

    Click on GitHub

    Click on GitHub
  • 6.

    Click on the repository you'd like to deploy

    Click on the repository you'd like to deploy
  • 7.

    Click on Deploy site

    Click on Deploy site
  • 8.

    To follow deploy log, click on Starting Up

    To follow deploy log, click on Starting Up
  • 9.

    To abort, click cancel deploy

    To abort, click cancel deploy
  • 10.

    Click on Yes, cancel deploy

    Click on Yes, cancel deploy

Heroku

Via Heroku kun je serverside sites deployen, gratis.

Stap 1: Login

Login to your Herokuapp account

screenshot of the login screen

Stap 2: Dashboard

Here's your current apps. Add a new app by clicking on the button on the right upper side

screenshot of the dashboard

Stap 3: New app

Create a new app; give it a name and select which region you're in

screenshot of making a new deploy

Stap 4: Connect to GitHub

Connect your app with the GitHub repository that your app is in

screenshot of

Stap 5: Config

As we've got a database linked, this is where the variables from your .env-file go.

screenshot of

Stap 6: Procfile

Add a Procfile to your GH repo to make sure the correct build command is used

screenshot of the procfile

examples

Met Code Cookbook zijn ook templateprojecten beschikbaar. Hierin zijn ook de basis-elementen van de pagina's die in het project gebruikt worden, vastgelegd en links naar (delen van het) design verzameld en gepresenteerd als een proof of concept. Aangezien ze re-usable zijn opgesteld, zijn deze ook beschikbaar voor andere projecten als template.

templates

11ty-Netlify boilerplate

screenshot of 11ty-cms-boilerplate repo

This example contains a basic setup for developing a static site with Eleventy and using NetlifyCMS as a content management system.

Enable NetlifyCMS

  • 1.

    Go to Netlify and click on Log in

    Go to Netlify and click on Log in
  • 2.

    Click on repo you'd like to deploy (11ty-cms-boilerplate)

    Click on repo you'd like to deploy (11ty-cms-boilerplate)
  • 3.

    Click on Identity

    Click on Identity
  • 4.

    Click on Enable Identity

    Click on Enable Identity
  • 5.

    Click on Invite users

    Click on Invite users
  • 6.

    Type your e-mail

    Type your e-mail
  • 7.

    Click on Send

    Click on Send
  • 8.

    Click on user

    Click on user
  • 9.

    Here you can edit their role later on

    Here you can edit their role later on
  • 10.

    Accept the invite in your mailbox (gmail)

    Accept the invite in your mailbox (gmail), then go to https://11ty-cms-boilerplate.netlify.app/#
  • 11.

    Fill in password field

    Fill in password field
  • 12.

    Click on Sign up

    Click on Sign up
  • 13.

    Click on Close. You're all set!

    Click on Close.

projects

Met het ontwikkelen van Code Cookbook zijn er ook twee implementaties van deze werkwijze uitgewerkt; twee proof of concepts.

Hiermee wordt bewezen dat het prima mogelijk is om volgens industriestandaarden te werken, en ook door middel van global data files te koppelen aan een Content Management System.

Deze projecten zijn in alle volledigheid door de ontwerper/developer van Code Cookbook ontwikkeld; er is dus zeker geen sprake geweeest van knip-en-plakwerk, maar letterlijk het from scratch onderzoeken en testen van data-structuren, componenten en omzetten tot code.

Er is alleen visueel gekeken naar de 'echte' website zoals voor ieder ander ook te bekijken is op het internet, en aan de hand daarvan de website ontwikkeld.

Holiday Rentals Curacao

This example is Holiday Rentals Curacao's current website, but fully remade in Code-Cookbook style and standards by just looking at the original website's page. Fully self-coded in link, code system by Code Cookbook. Design by Active Collective.

screenshot of hrc website rebuilt

NetlifyCMS gebruiken om de HRC website aan te passen

  • 1.
    In repository, click on website link
    In repository, click on website link
  • 2.
    Go to /admin
    Go to /admin
  • 3.
    Click on Login with Netlify Identity
    Click on Login with Netlify Identity
  • 4.
    Type e-mail
    Type e-mail
  • 5.
    Type password
    Type password
  • 6.
    Click on Log in
    Click on Log in
  • 7.
    Click on Ontdek Curacao subpages
    Click on Ontdek Curacao subpages
  • 8.
    Click on Bezienswaardigheden
    Click on Bezienswaardigheden
  • 9.
    Click to switch between text editor and markdown
    Click to switch between text editor and markdown
  • 10.
    Click to switch back
    Click to switch back
  • 11.
    Click on highlight to hide preview
    Click on highlight to hide preview
  • 12.
    Click to show preview again
    Click to show preview again
  • 13.
    Type your name to save as author
    Type your name to save as author
  • 14.
    Click on tags and select ontdek-curacao
    Click on tags and select ontdek-curacao
  • 15.
    Click on Save
    Click on Save
  • 16.
    Click on Status: Ready
    Click on Status: Ready
  • 17.
    Click on Publish now to publish immediately
    Click on Publish now to publish immediately

Active Collective

This example is Active Collective's current website, but fully remade in Code-Cookbook style and standards. Also fully self-coded, code system by Code Cookbook. Design by Active Collective.

screenshot of ac website rebuilt

NetlifyCMS gebruiken om de AC website aan te passen

  • 1.
    In repository, click on website link
    In repository, click on website link
  • 2.
    Go to /admin
  • 3.
    Go to /admin and click on Contents
    Go to /admin and click on Contents
  • 4.
    Click on Services list
    Click on Services list
  • 5.
    Type the text you'd like to add or edit
    Type the text you'd like to add or edit
  • 6.
    Click on Save
    Click on Save
  • 7.
    Click on Save
    Click on Save
  • 8.
    Go back
    Go back
  • 9.
    Click on Contact Page
    Click on Contact Page
  • 10.
    Click on Socials
    Click on Socials
  • 11.
    Type new entry
    Type new entry
  • 12.
    Type new entry
    Type new entry
  • 13.
    Click on Save
    Click on Save
  • 14.
    Click on Back
    Click on Back
  • 15.
    Click on Workflow
    Click on Workflow
  • 16.
    Click on CONTACT PAGE…
    Click on CONTACT PAGE…
  • 17.
    Drag highlighted element
    Drag highlighted element

code-snippets

Code Snippets zijn een manier om code te weergeven en op te slaan, die je als developer later snel kan gebruiken wanneer je een feature moet implementeren. Neem nou een hamburger-menu toggle; dit komt op veel verschillende sites voor en wil je graag zo vanilla mogelijk kunnen overnemen. Deze snippets zijn volgens de Code Cookbook-standaarden geschreven en zijn beschikbaar voor de verschillende use cases. Ze worden gehost op CodePen en live geüpdatet.

HTML/CSS

navigation

Footer with bottom nav

Sticky bottom nav bar with images

CSS submenu toggle

Nav submenu toggle with hamburger

forms

Accessible search form

styles

Font stretch

javaScript

toggle

JS (sub)menu toggle with multiple elements

Nav (sub)menu toggle - CSS and JS comparison

node.js

api

Search for keywords with Flickr API

Fetch photos with keyword from Unsplash API

Fetch photos with keyword from Unsplash API

tools

Welke tools worden gebruikt om een project mee te ontwikkelen, of kunnen handig zijn om te gebruiken? Onder zijn een aantal vermeld, maar deze lijst is nooit 'volledig'. Kom je handige tools tegen; voeg deze dan toe!

applications

Soms zijn bepaalde applicatie alleen maar wat gimmicks, maar ze kunnen ook ontzettend nuttig zijn en je efficiëntie verhogen.

Deze lijst is nu nog gevuld met wat placeholdercontent, maar wordt graag uitgebreid!

cleanshot

Een tool waarmee je 'nettere' screenshots maakt.

cleanshot screenshot

bettertouchtool

Een tool waarmee je snel en makkelijk shortcuts kan aanmaken voor je macbook.

bettertouchtool screenshot

Figma

Figma wordt gebruikt om designs mee te maken. De 'single person'-versie is gratis en er zijn veel plugins voor beschikbaar.

figma screenshot

toffe-dingen

Kom je een site tegen die je nu nog niet vast kunt gebruiken of implementeren, maar wat wel interessant is voor later? Dan kun je deze ook hier plaatsen op de 'toffe dingen'-pagina. Deze pagina is een verzameling van websites die je kunt gebruiken als inspiratie, als onderzoek of als broncode.

generic

HTMHell-newsletter

HTML-hell is heeft een nieuwsbrief waarin wekelijks de meest absurde HTML-worst practices worden uitgelicht.

Ook worden er een aantal voorbeelden genoemd van hoe het wél moet.

https://www.htmhell.dev/newsletter/

screenshot of the htmhell webpage

design

Design inspiration search engine

Muzli is a search engine specifically for the one’s that are looking for design inspiration. What I like about is most is that you can also just search for a single word or color and beautiful designs pop up anyways.

https://search.muz.li/

screenshot of muzli search

Design system for old UIs

Feeling nostalgic? This NPM-package is there to help you transform your components into the old styles.

https://github.com/jdan/98.css/

screenshot of 98css

CSS icons

If you’re in need for some icons; free and open-source CSS, SVG and Figma UI Icons. More than 700 available!

https://css.gg/

screenshot of css icons

Easings

Test common easing curves on a range of interfaces. Or generate your own custom bezier curve.

https://easings.co/

screenshot of Easings

development

css-tricks

CSS custom borders

Border-image is super nice if the usual border-styles just don’t do it for you.

Responsive picture frame by dudleystorey

Responsive picture frame by dudleystorey

CSS Grid

Found a pretty cool grid-generator a while ago and it’s very helpful for the visual-thinkers among us. You can also export your creation to codepen, or save it as is. https://grid.layoutit.com/

screenshot of css grid generator

TailwindCSS

Fresh, cool and modern. People are very fond of Tailwind and I can see why. You can also design your own system and use Tailwind for faster development.

https://tailwindcss.com/

screenshot of TailwindCSS

Matter.js

This one’s the odd one out in this article: it’s Javascript. Shhht, don’t tell. But look at this! It’s a package you can use for applying physics into your designs. https://brm.io/matter-js/

screenshot of matterjs

CSSdb.org

cssdb is a comprehensive list of CSS features and their positions in the process of becoming implemented web standards. Be cool before it’s cool.

https://cssdb.org/

screenshot of cssdb

CSS && SVG illustrations

Did you know you can make almost everything in CSS/SVG? Codepen is full of pure art!

Film strip by nickpettit
Starbucks cup by ellie
illustration of a starbucks cup done in pure css
CSS shower animation by Suzanne
illustration of a bath tub done in pure css and animated

personal

trello

Trello is a tool you can use to bring structure to a project and tasks.

https://trello.com/

screenshot of trello

hacks

Zijn er in dit project dingen opgelost opn een manier die niet helemaal de Code Cookbook-standaarden voldoet of überhaupt niet zo toekomstbestendig zijn? Dan kun je deze hier plaatsen op de 'hacks'-pagina. Wanneer een ander dan met dit project aan de slag moet, kan diegene ook direct hiervan op de hoogte worden gesteld.

Snelle hacky oplossingen

Er zijn een paar 'snelle hacks' die bij ieder project weleens toegevoegd worden.

Neem nou het gebruik van .innerHTML of een 'lelijke' class omdat een bug snel opgelost moet worden.

CSS

Bij ieder project is een css-bestand 'components.all.scss' aanwezig. dit

Dit bevat alle 'CSS_dump' die nog geplaatst moet worden op de juiste plaats en geoptimaliseerd.

Het is nu nog spaghetticode maar het is wel de bedoeling dat deze technical debt tijdig wordt opgeruimd.

spaghetti scss