Как прописать логику спойлеру, чтобы он закрывался на второй клик вместе со всеми остальными?
Надо при закрытии спойлеров не обрабатывать текущий:

$('.spoiler-header').click(function() {
  const $thisContainer = $(this).parents('.spoiler-container');

  $('.spoiler-container')
    .not($thisContainer)
    .removeClass('active')
    .find('.spoiler-content')
    .slideUp();

  $thisContainer
    .toggleClass('active')
    .find('.spoiler-content')
    .slideToggle();
});
Я не великий спец, но действовала бы так - механизм открытия реализовала бы через анимацию, повешенную на класс типа .active, и по клику, если элемент актив, убираем у него этот класс, если не актив - ему добавляем, а у всех остальных - убираем. функцию убрать все классы active  у этой коллекции элементов можно вынести отдельно и повесить на ту кнопку ,по клику на которую все должны свернуться, если эта опция требуется отдельно.