Nice walkthrough. One thing worth keeping in mind with EmailJS setups is that they work well for quick projects, but the frontend becomes part of your delivery pipeline. That means your public key, request flow, and rate limits are all exposed at the client layer.
For simple portfolio or contact pages that’s usually fine, but once forms start handling lead generation, bookings, or anything business-critical, I’ve found server-side handling tends to be more reliable. It gives you better control over validation, spam protection, logging, retries, and integrations with other systems.
EmailJS is definitely a good lightweight starting point though, especially for developers who want to avoid setting up backend mail handling early on.