💻 Код сайта (для разработчиков)

Код сайта (для разработчиков)

Этот раздел — для тех, кто умеет читать код, и хочет убедиться сам, а не поверить нам на слово. Ниже — настоящие фрагменты исходного кода сайта, теми же строками, что выполняются в вашем браузере прямо сейчас. Откройте инструменты разработчика (F12 → «Просмотреть код» / вкладка Network) и сравните: ничего из перечисленного ниже не приукрашено и не убрано специально для этой страницы.

1. Настройки и содержимое сайта хранятся только в вашем браузере

Панель редактирования, тема оформления и большинство содержимого сайта используют localStorage — хранилище браузера, которое ничего никуда не отправляет само по себе. Здесь нет ни одного fetch или XMLHttpRequest на сторонний сервер:

var raw = localStorage.getItem(CONFIG_KEY);
if (raw){
  var parsed = JSON.parse(raw);
  // ...дальше — только чтение объекта из памяти браузера.
}
// Ни одного запроса на сервер здесь нет — данные не покидают устройство.

2. Текст статей фильтруется от постороннего кода

Перед показом текста статей (жирный, ссылки, картинки) содержимое прогоняется через список разрешённых тегов и атрибутов — всё остальное автоматически вырезается, чтобы через статью нельзя было подсунуть посторонний скрипт:

var ALLOWED_TAGS = { B:1, STRONG:1, I:1, EM:1, U:1, A:1, SPAN:1, BR:1, DIV:1, P:1, IMG:1 };
// ...
if (!ALLOWED_TAGS[tag]){
  // тег снимается, а его текст внутри остаётся — просто как обычный текст
  while (child.firstChild) node.insertBefore(child.firstChild, child);
  node.removeChild(child);
}

3. Счётчик посещений — только числа, без данных о посетителе

Единственное, что автоматически уходит с сайта, — анонимный «плюс один» в внешний бесплатный счётчик countapi.mileshilliard.com, чтобы автор видел общую статистику посещений и кликов. Запрос не содержит ни имени, ни IP, ни cookie для отслеживания — только код события и явный запрет передавать referrer:

function hit(key){
  var img = new Image();
  img.referrerPolicy = 'no-referrer';
  img.src = BASE + '/hit/' + PREFIX + key + '?_=' + Date.now();
}
// Заход на сайт считается один раз за вкладку/сессию —
// повторные обновления страницы счётчик не раздувают.

4. Данные, которые осознанно покидают устройство, — чат поддержки и статьи

Как уже написано в разделе «Техническая информация о чате» на странице правил — переписка в чате поддержки действительно сохраняется в облачной базе данных (Firebase), чтобы её видел автор. То же самое теперь верно для статей: они хранятся в общей базе, чтобы их видели одинаково все посетители сайта, а не только браузер автора. Это открытые исключения, а не скрытая передача данных: адрес базы прямо прописан в открытом коде страницы:

var BG_FIREBASE_CONFIG = {
  projectId: "chat-bogestv0",
  // ...остальные публичные идентификаторы проекта
};
firebase.initializeApp(BG_FIREBASE_CONFIG);
window.__bgDb = firebase.firestore();
// Подключается там, где нужен чат поддержки или список статей.
// Остальные настройки сайта (тема оформления и т.п.) пока
// по-прежнему хранятся только локально, в localStorage автора.

5. Как именно хранятся статьи

Статьи сохраняются в документ siteConfig/articles общей базы Firestore. При открытии страницы со статьями сайт сначала пытается получить актуальный список из этой базы; если база временно недоступна (например, нет соединения), используется последняя сохранённая копия из localStorage браузера — это резервный, а не основной способ хранения:

window.__bgDb.collection('siteConfig').doc('articles').get()
  .then(function(doc){
    if (doc.exists){ /* показываем статьи из общей базы */ }
    else { /* используем резервную копию из localStorage */ }
  })
  .catch(function(){ /* при ошибке — тоже резервная копия */ });

Итог для тех, кто не хочет читать код: на сайте нет рекламных пикселей, скрытой аналитики или продажи данных третьим лицам. Всё содержимое и настройки хранятся локально в вашем браузере, наружу уходит только анонимный счётчик посещений/кликов (без привязки к личности) и, если вы сами решите написать в чат поддержки, — сама переписка.