Zell Liew
Streaming capabilities comes to zlFetch
Making sense of starting-style
Setting up a Corne Keyboard v4
Upcoming Breaking Changes for Splendid Layouts
A little rant about breaking changes
Killing and Restarting pm2
Understanding Recursion in JavaScript
Best Practice for Astro Endpoints
Speed of Svelte reactive bindings vs keyboard events
Conditional Slot Forwarding is not a thing in Svelte 4
Breaking out of Svelte's reactive statements
What developers should be learning
A Great Failed Experiment
Data Table Accessibility in 2024
Found the Light
Collecting Payments with Stripe while using Astro
Easy way to remove inline styles
Understanding and using npm exports
DoItAnyway
Invisible adversaries
No more waiting
4 years is not too many
Handling cookies with Fetch's credentials
Using Cookies vs Local Storage for storing access tokens
Bravery
Move fast, break things
JavaScript Mental Models
Why I love the web
Analytics and Ads
An easy way to implement conversion tracking for Facebook
On Spam
Splendid Layouts in here!
Splendid Layouts
My CSS of Late
3 Techniques to learn JavaScript effectively
Changing CSS Variables with Tailwind
The main challenge of building an Astro-first component library
Enough of the homogenous and soulless content all around the internet
The easiest way to get and set CSS Variables in JavaScript
December 2023
The easiest way to get __dirname in Node with ES Modules
The easiest way to use SVGs in an Astro or Svelte app
Automatic reactivity with Vanilla JavaScript with two methods — Getters and Setters and JavaScript Proxies
Iterating over objects in JavaScript
Easy way to parse JSON with JavaScript
Free chapters for Magical Dev School
Making a nice neon button
Splendid Astro Spacing — A Tailwind Utility for Astro
Updates for Understanding Async JS and Rest APIs
Easy caching on the local file system with Node
zlFetch now supports FormData!
Limitations of Scoped CSS
Quality of life improvements for zlFetch
The Magical Dev School Student Portal is live!
Finding my roots in my business
How to get better at design (for developers)
Here’s how to quickly test components that use container queries
When building components in Astro, you might not want to use Astro files
Best practices for container queries
Overcoming styling frustrations caused by Astro islands and slots
How AI will shape the coding ecosystem in the future
Convertkit API: Using Forms vs Tags
Building fancy list items in Astro
The Spirit of CSS Tricks is now gone
How camel-cased classes are way better than kebab-cased classes
Rendering MDX in a Svelte component when using Astro
Setting up Visual Studio Code for Web Development — For Beginners and Intermediate Developers
Never let anyone stop you from pursuing your dreams
Understanding the color-scheme property
Using npm packages in the frontend without any bundlers
Best way to install Node and keep it up to date
Understanding CSRF Attacks
How to find a tag id in Convertkit
A library to make localStorage easier to use
New CSS Color syntax — rgb instead of rgba
Don't be ashamed of tutorial hell
Getting a cookie's expiry value on a server
Rsync with a custom port
Rsync with Github actions when using a a custom port
Why I stopped using Operator Mono
Using async/await in Express
Serving HTTPS locally with Node
Get good at the hiring game
Year end review — 2021
Dealing with anxiety during job interviews
Why I'm super excited about Astro (a new static site generator)
How and when to use Async and Defer attributes
Trying Your Best is really bad advice (and strategy)
Rapid Mac Setup for Frontend Development
Using Gulp with Dart Sass
Disabling languages for Prettier (in VScode)
Prettier and Standard in VSCode
How to remember JavaScript
Overcoming 7 main problems of learning to code for people who don't have a developer job
8 lessons I learned from spending 4 years writing one course — Learn JavaScript
How to debug a Github Actions' secret
Deploying to a server via SSH and Rsync in a Github Action
Understanding how to use Github Actions
How to use Reduce in JavaScript
Choosing between Netlify, Vercel and Digital Ocean
How to write super simple and useful regular expressions for the real world
Year End Review — 2020
Case Conversion in JavaScript
How I set up my Moonlander
Why we should use Ergonomic keyboards
What's the difference between an Interface and an API?
Understanding JavaScript Prototype
Testing JavaScript Performance
Leading Trim is in the works!
A JavaScript Utility Library?
How to improve without receiving feedback
How to create sites with winding SVG paths
Giving away 99 copies of The Coding Career Handbook by Shawn Wang
TCC: The course that gave me the strength to pursue my dreams
Why use Getters and Setters functions
Creating a deep-assign library
Copying properties from one object to another (including Getters and Setters)
Getting the horizontal and vertical centers of an element
Polymorphism in JavaScript
Arrow Function Best Practices
Getting CSS Translate values with JavaScript
How I work with arrays
Snowpack + Eleventy + Sass + PostCSS
First look at Snowpack
Customised (and effective) Visual Studio Code keyboard shortcuts for Mac and Windows (Part 2)
How to think like a programmer
Customised (and effective) Visual Studio Code keyboard shortcuts for Mac and Windows
Syncing Visual Studio Code settings between Mac and Windows
Bash vs Zsh vs Fish
Preventing a Windows PC from adjusting the screen's brightness automatically
Emulating Mac's Dvorak-Qwerty-⌘ on Windows
Build Your Developer Brand post-mortem
Free Workshop on Branding and Marketing yourself as a developer
Building a Simple CRUD app with Node, Express, and MongoDB
Setting up Windows for web development
A Simple CLI for Convertkit
Element.focus vs aria-activedescendant
Overcoming my panic towards accessibility
Designing Learn JavaScript's course portal (Part 3)
Designing Learn JavaScript's course portal (Part 2)
Installing MongoDB on Mac (Catalina and non-Catalina)
Designing Learn JavaScript's course portal
Building a login system with HTML, CSS, and JavaScript
Getting keyboard-focusable elements
Multi-line gradient links
Year-end review: 2019
Mongoose 101: Population
Mongoose 101: Working with subdocuments
Mongoose 101
What to do if you're struggling with a Bootcamp
Understanding Homebrew
Protecting and syncing secret keys
Handling Errors in Express
What programming languages should you learn?
The difference between HTML, CSS, and JavaScript
Style hover, focus, and active states differently
Creating a custom focus style
Designing a focus style
Converting callbacks to promises
Three useful Express middleware
Inconsistent behavior among browsers when clicking on buttons
Dancing with Fear
Seeding a database
Connecting Jest and Mongoose
Endpoint testing with Jest and Supertest
How to setup a local MongoDB Connection
Frontend vs Backend
How to add Flexbox fallback to CSS Grid
How to build a calendar with CSS Grid
Stages of learning
Shutting down Fridays with Zell
Everything You Need to Know About Date in JavaScript
Using Standard with VSCode
How to go through the job application process—an interview with Chris Lienert
On Advocacy
Maybe we should step away from the online-world for a bit
Dealing with nested callbacks
JavaScript async and await in loops
A new (and easy) way to hide content accessibly
JavaScript async and await
Publishing packages that can be used in browsers and Node
How to ignore files from your npm package
The best time to npm init
How to publish packages to npm (the way the industry does things)
How to use JSDelivr
My CSS reset
Migrating to a new Mac
Setting up my new Mac (Part 1—the apps I use)
RSS and Tags are here!
Zellwk.com is now open source!
It's okay to write dirty code
Sit down and figure it out
Using small pockets of idle time
Year end review—2018
Checking if an input is empty with JavaScript
Checking if an input is empty with CSS
The Gitignore file
Why support older browsers?
What not to save into a Git repository
Supporting older browsers—Part 3: JavaScript
Undoing changes in Git
Supporting older browsers—Part 2: CSS
Git Tags
Supporting older browsers with Polyfills
Switching to Dvorak as a web developer
How to take a good break
How to review and edit a pull request
Getting out of a productivity funk
How to submit a pull request
Creating a simple form with CSS Grid
How to use Git stashes as a temporary storage
Creating a simple form with Flexbox
How I remember CSS Grid properties
Semantic Versioning
Becoming more productive while working less
Managing your Git branches with Git Flow
When will Learn JavaScript be completed?
What is a branch in Git?
Changing my refund policy
Resolving Git conflicts
How to use the :empty selector and the :blank selector
Cloning a Git repository
What makes a good frontend developer?
Pulling from a Git remote
Stop using big words and industry jargons (and what to do instead)
Pushing to a Git remote
Creating good analogies
Your first Git commit
How to write a good coding article
Setting up a Git Client
The key to teaching
Starting a podcast
Where to find people to teach
Visual Studio Live Share
What to do when life shits on you
Finding mentors
How to get CSS values in JavaScript
Finding motivation
Finding the right materials to learn
Why you shouldn't reassign values in JavaScript
Dealing with overwhelm
Why you learn when you teach
Dealing with confusion
5 things I learned from Infinity Wars
Which JavaScript framework should you learn?
Finding time to learn
Which should you learn first? Frameworks or JavaScript?
Results of the restructure
How I'm going to teach authentication
New CSS features that are changing web design
Is your code good enough?
Should I teach authentication in Learn JavaScript?
Are you a real developer?
Avengers, Star Wars, and learning code
Why I switched from Sublime Text to Visual Studio Code
My experience at CSS Conf China
Why I restructured Learn JavaScript
Traversing the DOM with JavaScript
How to handle the "bad experience" question
How to build a calculator—part 3
Job search protip—don't look for a junior position
How to build a calculator—part 2
Are you too old to learn to code?
How to build a calculator—part 1
Experiment publicly
Case study—a project from hell
How do you decide what to build?
How to use a linter
Responsive Vertical Rhythm with CSS Custom Properties and CSS Calc
Useful VS Code keyboard shortcuts
Setting up Visual Studio Code (Part 3)—Extensions
Faux Subgrid
Intro to Object Oriented Programming in JavaScript
Setting up Visual Studio Code (Part 2)—HTML, CSS and JavaScript settings
Setting up Visual Studio Code (Part 1)—appearances
Year End Review—2017
Understanding And Using REST APIs
Should you use CSS or JavaScript for animations?
Why mutation can be scary
Can I get a discount?
An introduction to animations with Greensock Animation API (GSAP)
CSS Animations explained
Dealing with Imposter Syndrome
CSS Transitions explained
How to make interactive components
Understanding for loops
Understanding if/else statements
How to debug Javascript errors
Learning JavaScript – where should you start and what to do when you're stuck?
Console.log everything!
Understanding JavaScript Functions
Should you use semicolons in JavaScript?
What are variables and why use them in JavaScript
Announcing Learn JavaScript!
How to overcome your fear of JavaScript
How to get hired as a junior web developer
Typi—case study
JavaScript Scope and Closures
Should you use this in JavaScript?
Remembering what you learned
5 top tips for speedy learning
This in JavaScript
Promises in JavaScript
Callbacks in JavaScript
How to set up your development environment to learn JavaScript
The rules of responsive web typography
Introduction to commonly used ES6 features
Using Fetch
Altering the DOM with JavaScript
Breaking the rules
Writing modular CSS (Part 3) — CSS file structure
20 things to consider when creating your first Node.js application
Writing modular CSS (Part 2) — Namespaces
Writing modular CSS (Part 1) — BEM
Should you learn [insert shiny new tool]?
How to pair typefaces
Fighting decision paralysis
How to read faster and remember more
Year End Review – 2016
How to build a responsive grid system
Designing grids
Don't reinvent the wheel
Learning to code quickly
How to Reset Susy's Span or Gallery
How to Ask Good Coding Questions That Get Great Answers
Everything about the Modular Scale Sass Libary and Modular Scale with Typi
Changing Modular Scale Ratio at Different Breakpoints
Responsive Modular Scale
Were We Wrong About Vertical Rhythm All Along?
Deploying a Static Site with Cron and Git
Advanced Usage with Typi
An In-depth Tutorial to Typi
Beating Procrastination
Moving from HTML Grid Systems to CSS Grid Systems
Is Web Typography Completely Broken?
PX, EM or REM Media Queries?
Viewport Unit Based Typography
Why is Vertical Rhythm an Important Typography Practice?
REM vs EM – The Great Debate
Star Rating Re-imagined with Flexbox
Everything I know about Responsive Web Typography
Year End Review – 2015
Animating SVGs (CSSConf.Asia talk)
Trolls & Expert Opinions – Lessons Learned From Publishing on a Popular Website
Website Layout Tools Compared—Flexbox Vs. Susy
Overcoming Your Fears
Migrating From Bootstrap to Susy
What to add to your Gitignore File
How to Modularize HTML Using Template Engines and Gulp
Gulp for Beginners
A Gulp.js Tutorial (Part 2)
A Gulp.js Tutorial
Choosing a Build Tool
Overcoming your Fear of the Command Line
Manage your Frontend Dependencies with Bower
An Overview of a Development Workflow
Common Problems With Susy Gallery And How To Solve Them
Why I stopped blogging, and what do you want to read about next?
How to use Masonry with Susy
Mappy Breakpoints, A Breakpoint Mixin that uses Sass Maps
Configuring Gulp to use LibSass with Susy
Configuring Grunt To Use LibSass With Susy
Learning Susy Update Is Going To Be Delayed
How To Write Mobile-first CSS
How to use susy with bootstrap
I'm Going To Make The Learning Susy Book Better, And What That Means For You
Fix 90% of Your Problems With Susy by Getting This One Concept Right
How I Wrote and Sold My First Ebook (and how you can do it too)
How to Create Off Canvas Layouts with Susy
Build Web Layouts Easily with Susy
How to Build a Responsive Website That Supports Older Browsers
Smarter Layouts with Susy
Bootstrap’s grid system vs. susy—a comparison
Creating Asymmetric Layouts With Susy
Understanding Gutter Positions in Susy
How to Debug Your Susy Layout with the Susy Background Image (Even If The Grid Changes)
Organizing Multiple Theme Styles with Sass
A Sexier Float Label Pattern
Compass vs Autoprefixer
Using Codekit 2 Autoprefixer With Compass
Neatly Organized Layouts with Sass Maps and Susy
Static Grids with Susy 2
A Complete Tutorial to Susy 2 (Part 2)
A Complete Tutorial to Susy 2
A Complete Guide to @font-face
How to structure HTML for an actual website (Part 2)
How to structure HTML for an actual website
Understanding and Using CSS Positions
How to use Mailchimp API in Wordpress
Compass Vertical Rhythms
Understanding CSS Box Sizing Property
Understanding Wordpress Actions and Filters
How to find the Wordpress CSS File
How to Quicken Wordpress Development with Grunt JS
A Complete Tutorial to Susy (Part 2)
A Complete Tutorial to Susy
Tools I use for learning and using colors
Why color pickers and palettes are bad for you
Wordpress 101 – 5 critical things you need to know to use Wordpress effectively.
5 things you can do to keep learning when things turn unexpectedly difficult
How to organize and edit your CSS painlessly
Make your website more professional with 1 simple step
Creating a clean and simple website (Part 3 - Style the content and 6 items to take note)
Creating a clean and simple website (Part 2 – Styling the header)
9 Important CSS Properties You Must Know
Creating a clean and simple website (Part 1 – HTML)
The Layout of a Website
Why I started learning about web design and how you can do it too