Forms
A static site can still take messages and signups. scripts.enable adds a form that Spaicely handles on https://scripts.spaicely.com, one address for every site, and answers with the HTML to put in a page:
<form action="https://scripts.spaicely.com/f/k3v9q2x7m1c8b4n6r0td" method="post"> <input type="text" name="_hp" tabindex="-1" autocomplete="off" aria-hidden="true" style="position:absolute;left:-9999px"> <label>Name <input name="name" required></label> <label>Email <input type="email" name="email" required></label> <label>Message <textarea name="message" rows="6" required></textarea></label> <button type="submit">Send</button> </form>
A contact form mails every message to one recipient, by default the person who set it up; any other address confirms once by mail before it gets anything. The mail comes from no-reply@spaicely.com with the name of the site as sender, and replying goes straight to the visitor. A signup form keeps a list with double opt-in: the visitor confirms by mail, and scripts.subscribers returns the confirmed addresses with an unsubscribe link for each.
Style the form with the site's own CSS and add fields as you like; every field whose name does not start with _ ends up in the mail. The empty _hp field catches bots. A form only accepts posts from the site's own connected domain. To stay on the page, post it with fetch and Accept: application/json; the answer is then {"ok": true} or an error code, see the HTTP API. Sessions and a shopping cart need no server: keep them in the browser with localStorage.