Skip to content

About

Пиратский сборник: 1386 ссылок в 9 разделах (торренты, кино, аниме, игры, книги, музыка, обход блокировок, инструменты, файлообменники). Поиск по Ctrl+K, избранное, PWA, работа офлайн.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

MegaThread — пиратский сборник

Пиратский сборник трекеров, раздач, зеркал и инструментов обхода блокировок. 1383 ресурса в 9 разделах.

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

Одностраничник на чистом HTML/CSS/JS: без сборки, без фреймворков, без внешних зависимостей в рантайме. Работает офлайн, ставится как PWA, читается без JavaScript.

Что умеет

Возможность Детали
Поиск быстрая палитра по Ctrl/⌘+K — как в документации: подсказки, ↑↓ и Enter; полноценная страница поиска #/search
Навигация постоянный сайдбар с 9 разделами и счётчиками, верхняя панель с разделами, подборками, метками и избранным
Разделы страница раздела — «докс»-списком: подзаголовки-группы, название-ссылка, описание, статус доступности и метки
Фильтры 29 меток и 5 платформ со счётчиками; состояние фильтров пишется в URL — ссылкой можно поделиться
Статусы доступности четыре состояния: открывается / с оговорками / заблокирован / нужно зеркало; у части ресурсов есть заметка с подробностями
Карточка ресурса открывается по клику на название: скриншот сайта, описание, статус доступности, метки и ссылки — всё в одном окне
Подборки десять готовых наборов: трекеры и индексы, открывается напрямую, обход блокировок, смотреть онлайн, книги, игры, музыка, инструменты, файлообменники, нужен зеркало
Страницы весь каталог, разделы, подборки, облако меток, поиск, избранное, о проекте, правила — плюс статичная версия без JS
Избранное localStorage, счётчик в шапке, скачивание списком, копирование, очистка
Недавние последние 12 открытых ресурсов, очищаются одной кнопкой
Сортировка по категории, по названию, по разделу — запоминается
Каталог выдаётся порциями по 48 карточек: страница не тяжелее сразу
Экспорт весь каталог или избранное — в Markdown-файл
Установка кнопка установки PWA появляется, когда браузер готов предложить приложение
Клавиатура Ctrl/⌘+K или / — палитра поиска, ? — подсказка, R — случайный ресурс, Esc — закрыть
Темы светлая и тёмная, по умолчанию — как в системе, выбор запоминается
Офлайн service worker: навигация network-first, статика cache-first, скриншоты сайтов — отдельный кэш
Без JavaScript noscript.html — полный каталог обычной страницей со статусами доступности, генерируется скриптом

Дизайн

Вёрстка в духе документационных сайтов: липкая верхняя панель, сайдбар с разделами, плитка карточек на главной, списки-«доксы» с подзаголовками-группами на страницах разделов, модальная палитра поиска.

Палитра монохромная: графитовая шкала, единственный акцент — чернила, цифры моноширинные. Никакого синего, градиентов, свечений и цветных плиток.

Метод вёрстки — unslop by Damir Sokolovsky (@heydamir), CC BY 4.0.

Тёмная тема — холодная сине-серая: мягче чёрного, приглушённый акцент, чтобы длинные списки не резали глаза.

Все цвета, отступы, радиусы и размеры шрифтов живут исключительно в css/tokens.css. Вне токенов нет ни одного литерала цвета.

Структура

.
├── index.html              # разметка: hero, поиск, факты, разделы, страницы, диалоги
├── noscript.html           # статический каталог (генерируется)
├── css/
│   ├── tokens.css          # палитра, типографика, шаг, радиусы, движение
│   ├── base.css            # reset, фокус, overflow-x: clip, reduced motion
│   └── style.css           # страница: сетки, компоненты, адаптив
├── js/
│   ├── app.js              # точка входа: события, экраны, инициализация
│   ├── store.js            # состояние, localStorage, подписки
│   ├── router.js           # хэш-роутинг и deep-links
│   ├── search.js           # корпус, нормализация, синонимы, ранжирование
│   ├── catalog.js          # фильтрация, сортировка, подсчёты
│   ├── collections.js      # подборки: правила отбора ресурсов
│   ├── render.js           # чистые функции разметки
│   ├── icons.js            # линейные глифы
│   ├── labels.js           # подписи, статусы доступности, синонимы, подсказки клавиш
│   ├── groups.js            # группы подразделов для докс-страниц
│   └── data.js             # каталог: 9 категорий, 1377 ресурсов
├── previews/               # скриншоты сайтов (640×400, ~16 КБ) + manifest.json + stubs.json
├── scripts/
│   ├── serve.mjs           # локальный статический сервер
│   ├── generate-fallback.mjs  # пересобирает noscript.html из каталога
│   ├── fmhy-fetch.mjs      # собирает ссылки FMHY в scripts/fmhy-links.json
│   ├── reddit-fetch.mjs    # собирает ссылки мегатредов Reddit в scripts/reddit-links.json
│   ├── build-piracy-catalog.mjs # собирает каталог из источников (FMHY, мегатреды Reddit)
│   ├── build-groups.mjs    # пересобирает группы подразделов в js/groups.js
│   ├── sync-numbers.mjs    # синхронизирует числа (счётчики, OG, README) с каталогом
│   ├── fetch-previews-piracy.mjs  # снимает скриншоты пиратских доменов в previews/
│   ├── cleanup-previews.mjs # убирает превью доменов, которых больше нет в каталоге
│   ├── merge-stubs.mjs     # объединяет список заглушек из git и текущего прогона
│   ├── drop-stub-previews.mjs # сбрасывает заглушки, чтобы переснять их заново
│   ├── make-og.mjs         # рисует OG-обложку icons/og-image.png
│   ├── publish-repo.mjs    # описание, темы и Pages на GitHub
│   └── shots.mjs           # снимает скриншоты для визуальной проверки
├── tests/
│   └── smoke.mjs           # 70 проверок в headless Chromium
├── sw.js                   # офлайн-кэш
├── manifest.json           # PWA-манифест
└── icons/                  # SVG-иконки и OG-обложка

Запуск

npm start            # http://localhost:8080

Сайту нужен http://, а не file://: модули ES и service worker не работают с локального файла. Подойдёт и любой другой статический сервер — например, python -m http.server.

Тесты

npm test

Скрипт сам поднимает статический сервер, открывает сайт в Chromium и проверяет поведение: счётчики, поиск с синонимами, маршруты, deep-links, избранное между перезагрузками, карточку ресурса, постепенную выдачу каталога, сортировку, фильтры по меткам и платформам, горячие клавиши, недавние, статусы доступности, подборки, облако меток, страницы «О проекте» и «Правила», карточку ресурса со скриншотом и закрытием по кнопке, фону и Esc, мобильную навигацию, сохранение темы и сортировки, статическую версию без JS, доступность манифеста и иконок, отсутствие битых ссылок, чистую консоль и отсутствие горизонтального скролла на мобильном.

Нужен playwright: npm i -D playwright && npx playwright install chromium.

Ожидания тестов берутся из самого js/data.js, поэтому после пересборки каталога числа в тестах не расходятся с данными: сколько ресурсов, сколько разделов, сколько меток — всё считается динамически.

Каталог

Данные лежат в js/data.js — это единственный источник правды:

export const CATEGORIES = [{ id, title, desc, icon }, ...];
export const RESOURCES  = [{ cat, name, desc, url, tags: [...], os: [...], ru, note }, ...];

Каталог собирается из внешних источников — FMHY и мегатредов Reddit, — поэтому пересобирается целиком:

npm run fetch:links    # обновить scripts/fmhy-links.json и scripts/reddit-links.json
npm run build:catalog  # каталог → группы → числа → noscript.html → OG-обложка

Ручная правка js/data.js сразу затирается следующей сборкой: чтобы добавить ресурс надолго, допишите его в CORE в scripts/build-piracy-catalog.mjs — эти ресурсы не теряются при сборе.

Добавить ресурс — дописать объект в RESOURCES: счётчики, фильтры, поиск и номера обновятся сами.

Поля ru и note отвечают за доступность ресурса:

ru Значение
ok открывается напрямую, без дополнительных инструментов
limited работает не всегда, нужна оплата из-за рубежа или обходные ссылки
blocked домен недоступен напрямую
mirror нужен зеркальный домен

Подписи меток и платформ (os: w, m, l, a, i, any) — в TAG_LABELS и OS_LABELS в js/labels.js. Синонимы для поиска — в SYNONYMS там же.

После правки каталога пересоберите статическую версию:

npm run build        # пересобирает noscript.html

Скриншоты сайтов

Превью для карточки ресурса снимаются автоматически:

node scripts/fetch-previews-piracy.mjs

Скрипт обходит уникальные домены каталога (сначала самые используемые), снимает экран 1280×800 и складывает JPEG 640×400 (~16 КБ) в previews/. Имя файла совпадает с тем, что ищет карточка ресурса: домен без www, не-буквы заменены на -.

Если сайт отдаёт ошибку (HTTP 4xx/5xx, 404-страница, антибот-заглушка) или не открывается вовсе, вместо кадра сохраняется аккуратная заглушка «превью недоступно» с именем домена — чтобы в карточке не было чужих страниц ошибок. Список таких доменов лежит в previews/stubs.json, их можно переснять повторно:

node scripts/fetch-previews-piracy.mjs   # обычный проход
$env:STUBS='1'; $env:FORCE='1'; node scripts/fetch-previews-piracy.mjs   # только по заглушкам

Чтобы убрать скриншоты доменов, которых больше нет в каталоге:

node scripts/cleanup-previews.mjs

Файлы кэшируются сервис-воркером отдельно от основной статики и грузятся только при открытии карточки.

Релиз

Пакет готов к публикации: это статические файлы, достаточно залить корень на любой хостинг (GitHub Pages, Netlify, Cloudflare Pages, nginx).

Перед публикацией:

npm run build        # noscript.html в актуальном состоянии
npm run build:og     # OG-обложка (нужен playwright)
npm test             # 67 проверок в реальном Chromium

Сервис-воркер кэширует статику по списку из sw.js — после релиза подними версию кэша (CACHE = 'megathread-v8'), чтобы клиенты получили свежие файлы.

Лицензия и содержимое

Только легальный и бесплатный контент. Каталог открыт для всех — его можно дополнять: ссылка на «Предложить ресурс» ведёт в issues репозитория. Ответственность за то, что вы скачиваете и как используете, лежит на вас: распространение пиратского контента может преследоваться по закону.

About

Пиратский сборник: 1386 ссылок в 9 разделах (торренты, кино, аниме, игры, книги, музыка, обход блокировок, инструменты, файлообменники). Поиск по Ctrl+K, избранное, PWA, работа офлайн.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages