"Двойная работа получается" в любом случае.
Нам нужно
создавать/отдавать данные и нам нужно
получать/показывать данные.
За что отвечает бек а за что фронт выбирать вам, но удобней и правильней иметь api по которому фронт сможет получить необходимые данные и показать их в нужных местах и с нужной красотой.
Например нам нужно получить список книг:
get /books
получим в ответе:
{
items: [
{
id: 0,
name: "Book0"
},
{
id: 1,
name: "Book1"
}
]
}
А если мы захотим узнать количество всех книг?
Просто добавим в ответ "totalResults: 50" и в шаблоне на фронте их отобразим (если нужно), аля:
<div class="books-total">{books.totalResults}</div>
А если шаблонов много и они разные?
А если вы хотите показать график с этими книгами? А если этих графиков десятки?
А если нужно в определенный момент показать пагинацию?
итд.
Рекомендую посмотреть на api googl'a или digitalocean.