Это как, через fetch()? Я бэкэнд ещё вообще не трогал?
Т.е. я создаю <span>, пишу в него, браузер выполняет appendChild() и отправляет данные на сервер.
Ну, не span, наверно, а textarea. А appendChild - после того, как сервер вернёт "окей". Мало ли что - сетевая ошибка, или неавторизованная операция. Нужно следить, чтобы у браузера и у сервера совпадали идеи о наборе постов. А пока fetch работает, показывать спиннер какой-нибудь.
В проектах я библиотеками пользовался: axios или встроенный в Angular http-клиент.
А чтобы писать мог только я надо создавать многостраничный сайт? Редактор поста и ленту?
Достаточно и одной - ведь окно ввода может быть в самой ленте, как много где, на реддите том же. (Но даже если страниц несколько и поддерживается маршрутизация, всё равно реализовано может быть как single-page application.)