# Montalesi.dev > Alberto Montalesi — software developer, author of The Complete Guide to Modern JavaScript, and builder of web and mobile apps. Alberto Montalesi is a software developer and author of *The Complete Guide to Modern JavaScript*. He writes about web development, JavaScript, and TypeScript, and builds web and mobile apps as well as browser games. ## Key pages - [Home](https://montalesi.dev): Site homepage and author profile - [Projects](https://montalesi.dev/projects): Portfolio of web apps, mobile apps, games, and books - [About](https://montalesi.dev/about): Author profile and background - [Experience](https://montalesi.dev/experience): Professional and independent work history - [Resume](https://montalesi.dev/resume): Concise professional resume - [Blog](https://montalesi.dev/blog): Index of all published articles - [Tags](https://montalesi.dev/tags): Topic index for the blog ## Articles - [Why Greenland Looks Bigger Than Africa on a Mercator Map](https://montalesi.dev/blog/article/map2maps-v2): Mercator maps make Greenland look close to the size of Africa, although Africa is roughly fourteen times larger. Map2Maps lets you select a country or draw a shape and compare it across up to four map projections. - [How I Make App Store Screenshots Without a Design Tool](https://montalesi.dev/blog/article/appframer): A free browser-based tool for generating App Store screenshots: device mockups at the required resolutions, captions, backgrounds, translation into 18 languages, and ZIP export. No account or screenshot upload required. - [Designing a Simple Currency Conversion Calculator](https://montalesi.dev/blog/article/valuta): Valuta is an iPhone currency converter with a calculator keypad built in, so you can convert a price and then split it, add tax, or multiply it without switching apps. It saves recent rates for offline reference, stores favorite currency pairs locally, and has a one-time purchase with no account. - [I Built One Place for Movies, Books, and Games](https://montalesi.dev/blog/article/yore): Yore is a local-first iPhone app that replaces half a dozen single-purpose trackers with one library, log, and diary for movies, TV, anime, books, manga, games, music, podcasts, board games, and comics, with metadata pulled from public, no-key sources. - [A Browser Tank Game Inspired by Battle City](https://montalesi.dev/blog/article/battle-tanks): Battle Tanks is a free browser-based, top-down tank arena shooter built with Three.js and WebGPU: classic Battle City energy (drive a tank, blast bricks, defend a base) layered with a modern roguelite power-up ladder, boss fights, and local co-op. No download, no install. - [How I Balanced a City Builder with Run Exports](https://montalesi.dev/blog/article/arcology): ARCOLOGY is a free browser-based cyberpunk city builder made with Three.js, where you grow a neon district into a profit machine while keeping three rival factions in balance. The economy was tuned by exporting every run as JSON and iterating on the data instead of guessing. - [Remembering Which Coffee Shop (and Order) Was Actually Good](https://montalesi.dev/blog/article/provato): Provato is a local-first iPhone app for tracking restaurants and cafes you tried or want to try, with notes, ratings, photos, locations, history, and wishlist items. It is built for the specific problem of forgetting which coffee shop was worth returning to. - [Why I moved this blog from Vercel to Cloudflare Workers](https://montalesi.dev/blog/article/vercel-to-cloudflare-workers): Why I moved this Next.js blog off Vercel to Cloudflare Workers: the April 2026 security incident, the pricing math, and the technical steps of swapping in OpenNext and replacing the unmaintained Contentlayer with Velite. - [I Built Baby Book Tracker for Our Reading Routine](https://montalesi.dev/blog/article/baby-book-tracker): Baby Book Tracker is a simple, local-first iOS app for logging reading sessions with your baby, tracking progress toward goals like 1000 Books Before Kindergarten, and sharing the routine with caregivers. No account is required, and full access is a one-time unlock rather than a subscription. - [Everything new coming in ES2022](https://montalesi.dev/blog/article/what-is-coming-es2022): Learn the new features that will become part of JavaScript with the ES2022 specification - [Everything new coming in ES2021](https://montalesi.dev/blog/article/what-is-coming-es2021): Learn the new features that will become part of JavaScript with the ES2021 specification - [What is the difference between passing by value or by reference in JavaScript](https://montalesi.dev/blog/article/pass-by-value): Learn what is the difference between pass by value and pass by reference and understand how JavaScript uses them - [Stay motivated during lockdown by learning Programming](https://montalesi.dev/blog/article/learn-programming-during-quarantine): It's easy to feel down during lockdown, don't waste your day in front of the TV, learn something new and stay motivated and positive - [Learn JavaScript with this interactive course](https://montalesi.dev/blog/article/educative-course): Learn everything from the basics to the latest features of ES2019 and practice with quizzes and coding challenges in this interactive course - [10 Must Know JavaScript string methods](https://montalesi.dev/blog/article/10-javascript-string-methods): A list of 10 must know string methods that every JavaScript developer should know. Includes a downloadable set of flashcards. - [Everything you need to know from ES2016 to ES2019](https://montalesi.dev/blog/article/es2016-to-es2019): Learn all the new features introduced to JavaScript from ES2016 to ES2019 and download a cheatsheet to bring with you - [What is MDX and how you can use it on your Gatsby blog](https://montalesi.dev/blog/article/what-is-mdx): Supercharge your Markdown with MDX and implement components inside your articles with this plugin for Gatsby - [5 Best Gatsby plugins for your programming blog](https://montalesi.dev/blog/article/5-best-gatsby-plugins): A list of my favorite plugins to use on a static site created with Gatsby. Use these plugins to improve your blog quickly and easily - [An introduction to CSS Variables](https://montalesi.dev/blog/article/css-variables): Learn how to use CSS Variables to write cleaner and more reusable stylesheets - [What's new in JavaScript: Optional Chaining](https://montalesi.dev/blog/article/what-is-optional-chaining): Discover one of the most anticipated upcoming features of JavaScript, optional chaining and start using it right now - [Best laptops for programmer under 800 Dollars](https://montalesi.dev/blog/article/best-laptops-under-800): Get yourself a new laptop, suitable for all your needs as a programmer, for under 800 dollars - [5 Best note taking apps for programmers](https://montalesi.dev/blog/article/5-best-note-taking-apps): Taking notes is a vital part of the job of programmer and these apps will help you easily take notes that you can export and save in different formats - [5 Great VSCode extensions for web developers](https://montalesi.dev/blog/article/5-best-vscode-extensions): Arguably, the most fun part of installing a new IDE is to check out the extensions available. In this article I will tell you the 5 I think every developer should install - [My Journey from an ESL Teacher to Software Developer in Vietnam](https://montalesi.dev/blog/article/my-journey-from-an-esl-teacher-to-software-developer-in-vietnam): Hi, my name is Alberto, and this is the story of how I learned to code, wrote a programming book, started my own blog and became a software developer. - [FREE JavaScript ES2016 / ES2017 / ES2018 Cheatsheet](https://montalesi.dev/blog/article/free-javascript-es2016-es2017-es2018-cheatsheet): Download this cheatsheet with all the new features introducedo to JavaScript from 2016 all the way to ES2018 - [The best resources to learn Ruby on Rails in 2018](https://montalesi.dev/blog/article/the-best-resources-to-learn-ruby-on-rails-in-2018): Let's have a look at what I consider to be the best resources to learn Ruby on Rails - [The 4 best FREE Resources to Learn CSS Grid in 2019](https://montalesi.dev/blog/article/where-to-learn-css-grid-the-4-best-free-resources-to-learn-css-grid-in-2018): Let's have a look at 4 free resources where you can get started with CSS Grid. ## Tutorials - [Find and Replace elements in Array with JavaScript](https://montalesi.dev/blog/tutorial/find-replace-in-array): Learn how to find and replace elements in arrays with JavaScript. Learn how to use indexOf, filter, splice and more - [Discover more Console methods available in JavaScript and learn how to style them](https://montalesi.dev/blog/tutorial/console-logging): Learn how to use more methods than just console.log and improve your debugging. Apply some style to your console methods and make your code more recognisable - [Create a JavaScript plugin to highlight and tweet text](https://montalesi.dev/blog/tutorial/highlight-to-tweet): Learn how to create a plugin to allow users to highlight and tweet text from your pages - [Copy text to the clipboard with JavaScript in 10 lines of code](https://montalesi.dev/blog/tutorial/copy-to-clipboard): Add a copy to clipboard button with JavaScript in only 10 lines of code - [Add dark mode to your website with just a few lines of code](https://montalesi.dev/blog/tutorial/dark-mode-toggle): Learn how you can implement dark mode to your website in two different ways - [Create a dynamic sticky table of contents for your website](https://montalesi.dev/blog/tutorial/tutorial-5-create-a-dynamic-table-of-content): Learn how to create a dynamic table of contents for your articles and how to make it sticky, always at the top, with just a few lines of code - [Send automated tweets from a Google Sheet with Google Scripts](https://montalesi.dev/blog/tutorial/send-daily-tweets-from-google-sheet): Automate tweeting by leveraging Google Scripts, post a new tweet everyday from a Google Sheet file - [Create Pomodoro Clock in JavaScript Tutorial | freeCodeCamp](https://montalesi.dev/blog/tutorial/project-2-pomodoro-clock): Use only JavaScript and create a Pomodoro Clock in one hour and complete this project inspired by the FreeCodeCamp curriculum - [Create a Random Quote Machine in JavaScript | freeCodeCamp](https://montalesi.dev/blog/tutorial/project-1-random-quote-machine): Learn how to create a random quote generator using a public API and JavaScript and complete this project inspired by the FreeCodeCamp curriculum - [Tutorial - Create a Smooth Scrolling Navigation with JavaScript](https://montalesi.dev/blog/tutorial/tutorial-4-smooth-scrolling-navigation): In this tutorial you will learn how to create a simple smooth scrolling navigation menu with JavaScript that works on every browser - [Tutorial - Create a Carousel with JavaScript](https://montalesi.dev/blog/tutorial/tutorial-3-javascript-carousel): Learn how to create a simple, responsive carousel with JavaScript. Use it to display images or testimonials on your website - [Tutorial - Create a Responsive HTML Login Form](https://montalesi.dev/blog/tutorial/tutorial-2-create-a-responsive-html-login-form): Using only HTML, create a responsive,mobile friendly, beautiful login form to attract users to register your website. No JavaScript required. - [Tutorial - Create a To Do List with JavaScript](https://montalesi.dev/blog/tutorial/tutorial-1-how-to-create-a-to-do-list-with-javascript): Learn how to create a to do list with only JavaScript. Add and remove items with just a few lines of code ## Challenges - [JS Challenge 7: Multiples of 3 or 5](https://montalesi.dev/blog/challenge/challenge-7-multiples-of-3-and-5): If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. - [JS Challenge 6: Convert string to camel case](https://montalesi.dev/blog/challenge/challenge-6-string-to-camelcase): Complete the method/function so that it converts dash/underscore delimited words into camel casing. - [JS Challenge 5: Pete the baker](https://montalesi.dev/blog/challenge/challenge-5-pete-the-baker): Write a function cakes(), which takes the recipe (object) and the available ingredients (also an object) and returns the maximum number of cakes Pete can bake (integer). - [JS Challenge 4: Who Likes it?](https://montalesi.dev/blog/challenge/challenge-4-who-likes-it): Implement a function likes :: [String] -> String, which must take in input array, containing the names of people who like an item. It must return the display text as shown in the examples. - [JS Challenge 3: Remove Zeroes](https://montalesi.dev/blog/challenge/challenge-3-remove-zeroes): Write a function that takes an array of values and moves all elements that are zero to the end of the array, otherwise preserving the order of the array. The zero elements must also maintain the order in which they occurred. - [JS Challenge 2: Word Scrambles](https://montalesi.dev/blog/challenge/challenge-2-word-scrambles): Complete the function scramble(str1, str2) that returns true if a portion of str1 characters can be rearranged to match str2, otherwise returns false. - [JS Challenge 1: Simple Pig Latin](https://montalesi.dev/blog/challenge/challenge-1-pig-latin): Move the first letter of each word to the end of it, then add 'ay' to the end of the word. Leave punctuation marks untouched. ## CSS3 - [30 Useful CSS Examples For Logically Creative Minds](https://montalesi.dev/blog/article/30-useful-css-examples-for-logically-creative-minds) ## Optional - [Machine-readable content index](https://montalesi.dev/ai-index.json) - [Full text of every post](https://montalesi.dev/llms-full.txt) - [RSS feed](https://montalesi.dev/feed.xml)