Hub · 147 items · updated on 7 September 2026
Web development: the foundations, brought up to date
JavaScript, PHP, HTML & CSS, Laravel and Vue.js: the long-standing Gekkode articles, checked, updated and linked to the AI content that builds on them.
Foundation articles
Learn Git: the complete tutorial for beginners in 5 chapters5 chapters · 39 min · Beginner · verified on 2 September 2026
Learn JavaScript: the beginner’s guide (free course, 30-day plan)12 chapters · 48 min · Beginner · verified on 7 September 2026
VueJS 3 tutorial for beginners: build a shop in 11 chapters11 chapters · 46 min · Beginner · verified on 7 September 2026Related projects
Recent updates
- 7 SepAdd JavaScript to HTML: script tag, defer, async and Hello World — Chapter rewritten: what JavaScript is, where to put the script tag (head, end of body, defer, async), inline script versus external file, console.log alongside alert, reading your first errors. The previous version was 295 words long.
- 7 SepJavaScript objects: create, read, edit, iterate and delete properties — Chapter rewritten: definition, creation (literal, new Object, constructor function), reading with dot and bracket notation, optional chaining, methods and this, iteration with Object.keys/values/entries and for…in, nested objects and arrays of objects, shallow and deep copies, lead-in to classes. Fixed the example that used an arrow function with this. Merges the former article “Créer et manipuler un objet en Javascript”, now redirected here. The previous version was 277 words long.
- 7 SepJavaScript string to number: parseInt, parseFloat, Number() and + — Editorial pass: prose semicolons replaced with commas or full stops, filler phrases removed (“it is crucial to”, “it is important to note that”, “in order to” became “to”), version numbers dropped where they add nothing.
- 7 SepVue 3 v-on: handle events with @click, $event and modifiers — Editorial pass: prose semicolons replaced with commas or full stops, filler phrases removed (“it is crucial to”, “it is important to note that”, “in order to” became “to”), version numbers dropped where they add nothing.
- 7 SepDate regex: validate DD/MM/YYYY or YYYY-MM-DD (JavaScript, PHP, HTML) — Editorial pass: prose semicolons replaced with commas or full stops, filler phrases removed (“it is crucial to”, “it is important to note that”, “in order to” became “to”), version numbers dropped where they add nothing.
All content
JavaScript (65)
- 10 VueJS frameworks to know about in 2023, from Nuxt to Keen-UI
- 20 JavaScript libraries worth trying in 2023, by category
- Add Firebase to a Vue 3 app with Firestore and VueFire
- Add JavaScript to HTML: script tag, defer, async and Hello World
- Build a tab system in JavaScript and CSS, with ARIA attributes
- Check if an object is empty in JavaScript: vanilla and Lodash
- Date regex: validate DD/MM/YYYY or YYYY-MM-DD (JavaScript, PHP, HTML)
- DOM manipulation in JavaScript: select and change elements
- Email regex: validate an email address in JavaScript, PHP and HTML
- Format a number in JavaScript: toFixed, Intl.NumberFormat, rounding
- Function declaration vs function expression in JavaScript
- How to change CSS classes in JavaScript with classList
- IndexedDB tutorial: store data in the browser with JavaScript
- JavaScript bind(), call() and apply(): understand and control this
- JavaScript chat tutorial: real-time chat with WebSockets
- JavaScript classes and objects: an introduction to ES6
- JavaScript classes: constructor, methods and inheritance
- JavaScript conditionals: the if and switch statements
- JavaScript dark mode: detect the user’s colour scheme
- JavaScript ES6 modules: how import and export work
- JavaScript events and event handlers: addEventListener
- JavaScript events: onclick, addEventListener and the Event object
- JavaScript exercise: a number guessing game with ES6 classes
- JavaScript functions: parameters, return values and arrow functions
- JavaScript loops: for, forEach, while and do-while
- JavaScript objects: create, read, edit, iterate and delete properties
- JavaScript operators and expressions
- JavaScript promises: resolve, reject, then and catch explained
- JavaScript reduce(): how the array method actually works
- JavaScript Singleton pattern: ES6 class, module, TypeScript (and PHP)
- JavaScript sleep: how to pause code with a sleep function
- JavaScript strict mode: what it changes and how to enable it
- JavaScript string to number: parseInt, parseFloat, Number() and +
- JavaScript variable naming: 6 rules to follow every time
- JavaScript variable scope: local and global variables
- JavaScript variables and data types: var, let and const
- Learn JavaScript: the beginner’s guide (free course, 30-day plan)
- Merge arrays in JavaScript: spread, concat or push
- Passing variables from PHP to JavaScript: 6 methods
- Pinia tutorial: global state management in a Vue 3 app
- Postcode regex to validate a French postcode in JS, PHP, HTML
- Refactoring in JavaScript: the guard clause pattern
- Regex to validate a strong password in JavaScript and PHP
- Regex to validate an IP address: IPv4 and IPv6 patterns
- The JavaScript Map object: methods, iteration and WeakMap
- The JavaScript Math object: properties and methods
- Vue 3 plugins: write your own with install and provide
- Vue 3 tutorial – component events with defineEmits
- Vue 3 tutorial – components and props with defineProps
- Vue 3 tutorial – list rendering with v-for and :key
- Vue 3 tutorial: animate with Transition and TransitionGroup
- Vue 3 tutorial: computed properties and how caching works
- Vue 3 tutorial: forms and two-way binding with v-model
- Vue 3 v-on: handle events with @click, $event and modifiers
- Vue.js emit: the complete guide to component events
- Vue.js lifecycle hooks: the complete guide for Vue 3
- Vue.js SEO: how to make a Vue 3 app properly indexable
- Vue.js slots: default, named and scoped slots explained
- VueJS 3 tutorial – Attribute binding with the v-bind directive
- VueJS 3 tutorial – Binding CSS classes and inline styles
- VueJS 3 tutorial – Conditional rendering with v-if and v-show
- VueJS 3 tutorial – Create your first Vue application
- VueJS 3 tutorial for beginners: build a shop in 11 chapters
- Webpack 5 tutorial: configure an existing build (Babel, SASS, PostCSS)
- What is the DOM, and how do you change it in JavaScript?
PHP (35)
- Blade: define a variable and output HTML without an XSS hole
- Composer best practices: dependencies, autoload and versions
- Declare Laravel routes with classes instead of route files
- Eloquent queries: null checks, exists, count and columns
- Image manipulation in PHP with the GD and Imagick libraries
- Install Composer on Windows, macOS and Linux, signature checked
- Laravel 13 tutorial #1: install and set up the project
- Laravel 13 tutorial #2: routing, parameters and model binding
- Laravel 13 tutorial #3: MVC, controllers and Blade views
- Laravel 13 tutorial #4: the admin panel with Filament
- Laravel 13 tutorial #5: build a home page with Tailwind
- Laravel 13 tutorial #6: Eloquent models and admin panel
- Laravel 13 tutorial #7: routes, controllers and views
- Laravel 13 tutorial #8: build a search engine for your blog
- Laravel 13 tutorial #9: pagination and related posts
- Laravel ecommerce: 7 packages to build an online shop in 2022
- Laravel Eloquent: the main features of the Laravel 8 ORM
- Laravel migrations: add a column, roll back, delete
- Laravel: fixing the “Unknown column ‘updated_at’” error
- Learn Laravel 13: a complete tutorial for beginners
- PHP $this keyword: what it is and how to use it in a class
- PHP cURL request: GET, POST, headers and error handling
- PHP database connection: PDO, prepared statements, mysqli
- PHP date and time: format, time zones and DateTimeImmutable
- PHP file upload: validation that holds, and base64 images
- PHP loops: while, do-while, for and foreach explained
- PHP redirect: header(), status codes and open redirects
- PHP traits: share methods between classes without inheritance
- PHP traits: when to use one and what to use instead
- PHP WebSocket server: three approaches, measured and compared
- Reading large files in PHP without killing your server
- require() vs include() in PHP: fatal error or warning
- Send an email with PHP: SMTP, DKIM and deliverability
- The 10 best Laravel packages for building your website
- Value objects in PHP: immutability, equality, validation
HTML & CSS (19)
- 15 great CSS animation libraries worth knowing about
- 20 HTML5 tags worth knowing: layout, media and function
- Centre a div in CSS: horizontally, vertically or both (Flexbox, Grid)
- Check if an input is empty using only CSS and HTML
- CSS :empty selector: styling elements with no content
- CSS animation tutorial: keyframes and animation properties
- CSS card UI: build a hover card with the filter property
- CSS Flexbox tutorial: the complete guide to flexible layouts
- CSS Grid vs Flexbox: understanding the differences
- CSS nth-child selector: a practical introduction with examples
- CSS progress bar: how to build one with HTML and CSS
- CSS transition property: how to animate without JavaScript
- CSS variables tutorial: declare, scope and use custom properties
- HTML forms: 4 best practices for fieldsets, labels and select
- HTML tel link: make phone numbers clickable and disable auto-detection
- Lazy loading images: 5 methods to speed up your website
- Responsive menu with Flexbox: build one in three steps
- Semantic HTML: 10 common mistakes and the tags that fix them
- SVG with media queries: responsive SVG styled in CSS
Laravel (14)
- Add a Google reCAPTCHA to a Laravel form, without a package
- Carbon in Laravel: working with dates and time zones
- Fix “laravel: command not found” on macOS (zsh and bash)
- Install Composer on a Debian 13 server, signature checked
- Install Laravel 13 on a Debian 13 server with nginx
- Install MariaDB and phpMyAdmin on Debian 13 for Laravel
- Install PHP and its extensions for Laravel on Debian 13
- Install Redis on Debian 13 and connect it to Laravel
- Laravel debug mode: enabling, disabling and the config cache
- Laravel Debugbar: debug your Laravel 5 app in the browser
- Laravel Eloquent relationships: the complete 2022 guide
- Laravel query scopes: cleaner, reusable Eloquent queries
- Laravel storage:link returns 403 Forbidden: fixes for OVH and Apache
- Serve a Laravel application with Apache on Debian 13
More articles (13)
- Apache JMeter: load testing a website, step by step
- Disable WordPress search without a plugin (functions.php, ?s=, REST)
- Git tutorial: create a repo on GitHub or GitLab and clone it
- Git tutorial: Gitflow or trunk-based, choosing a branching model
- Git tutorial: install Git, configure it and add an SSH key
- Git tutorial: teamwork with branches, merge and rebase
- Git tutorial: the basic commands (add, commit, push, pull)
- How to migrate a WordPress site to a new host, step by step
- Learn Git: the complete tutorial for beginners in 5 chapters
- Let’s Encrypt on Nginx: install a free SSL certificate
- Nintendo 3DS homebrew development: build your own game
- Restrict access to the WordPress dashboard by user role
- Web application security: 10 best practices for 2024


