Портал для сайта с техническими утилитами, который вы наполняете и продвигаете сами. Каждый инструмент описывается данными в админке: поля с типом и границами, формула из нескольких строк, проверки, форматы результатов, примеры, ограничения, методика и вопросы. Править код ради нового калькулятора не нужно. Посетитель вводит адрес, цвет или размер, а рядом видит результат, формулу и подстановку своих значений. Введённые значения на сервере не сохраняются, а файлы сайт не принимает и к введённым адресам не обращается. Подсети считаются только для IPv4.
Сайт для посетителей
- Главная. Поиск по инструментам, пример расчёта подсети, категории с образцами значений, список популярных инструментов, блок «недавно проверено» и ссылки на справочник.
- Страница инструмента. Форма с кнопками-примерами, результат строками и крупными числами, двоичный вид адреса или образец цвета, формула и «Ваши числа», таблица обозначений, примеры для проверки, ограничения, вопросы и ответы, похожие инструменты, дата проверки и номер редакции.
- Расчёт на лету. Результат обновляется при вводе. Ошибки видны у поля: адрес с двоеточиями, префикс больше 32, цвет из пяти знаков, пустое обязательное поле. Запятая и точка принимаются одинаково.
- Подсветка значений. Адреса, маски, префиксы, цвета и числа окрашены одинаково на сервере и в браузере.
- Работа без JavaScript. Сервер считает те же значения из адреса запроса, кнопки-примеры работают как ссылки.
- Печать. Одна кнопка: результат, исходные значения, формула и оговорка без шапки, подвала и рекламы.
- Категории. Карточки инструментов с образцом расчёта, дата проверки, блок «Что важно знать об этом разделе».
- Справочник. Статьи с датой проверки и номером редакции, оглавление, таблицы единиц, правила округления и формулы всех инструментов.
- Поиск. Подсказки при вводе, подсветка найденного, фильтр по типу; работает и без JavaScript.
- SEO. Адреса, заголовки и описания, sitemap.xml, robots.txt, canonical, разметка WebApplication, FAQPage, BreadcrumbList и Article, переадресации. Рейтингов и отзывов в разметке нет.
- Места под изображения. Вместо иллюстраций стоит блок «Здесь будет изображение», пока вы не загрузили свои.
Инструменты как данные
- Поля. Число, список, IPv4-адрес, длина префикса и цвет; ключ, единица, минимум и максимум, пример, обязательность, раздел формы, подсказка.
- Формула. Одна строка — один шаг: `имя = выражение | подпись | единица | формат`. Числа, ключи полей, прошлые строки, знаки `+ - * / ^`, скобки, сравнения и функции `ceil`, `floor`, `round`, `min`, `max`, `abs`, `sqrt`, `pow`, `if`, `mod`, `ln`, `log2`, `log10`, `gcd`, `bitand`, `bitor`. Вычислитель написан для продукта и не использует `eval`: ввод посетителя в код не превращается.
- Форматы результатов. Число, IPv4-адрес, маска, префикс `/26`, цвет `#RRGGBB`, время в часах и минутах, двоичный октет, отношение `16:9`, размер `1280×720`, подпись по значению.
- Одинаковый расчёт. Браузер и сервер считают одним деревом формулы и одним правилом округления; промежуточные значения не округляются, двоичные хвосты вроде `10 · 1,1 = 11,000000000000002` не меняют результат.
- Проверки. Строки `условие | сообщение`: «это не маска подсети», «ниже абсолютного нуля». Сообщение видно посетителю вместо результата.
- Примеры. Кнопки-примеры и таблица для проверки на странице. Сохранить инструмент, который не считает свой пример, нельзя.
- Проверка на примере в редакторе: кнопка считает значения на сервере и показывает подстановку.
- Версии. Каждое сохранение создаёт редакцию с комментарием, редакции сравниваются, вернуть можно любую; возврат сохраняется как новая редакция.
- Статусы и роли. Черновик, на проверке, опубликован. Редактор готовит инструмент и отправляет на проверку, проверяющий публикует, владелец получает уведомление.
- Копирование инструмента как отправная точка для нового.
Демонстрационное наполнение
18 инструментов в пяти категориях и 6 статей справочника:
- Сети и IP: IPv4-подсеть (сеть, broadcast, маска, обратная маска, диапазон узлов, правила для /31 и /32, тип адреса), маска по префиксу, адрес в двоичном виде, префикс по маске.
- Единицы измерения: длина, масса, объём, температура, скорость, размер данных (КБ и КиБ).
- Изображения: соотношение сторон, размер с сохранением пропорций, размер в сантиметрах по плотности.
- Цвета: HEX в RGB и HSL, RGB в HEX, контрастность двух цветов.
- Скорость загрузки: время загрузки файла с накладными расходами, перевод Мбит/с и МБ/с.
Коэффициенты единиц взяты из определений. Цен, ставок и тарифов в демонстрации нет. Всё демонстрационное помечено и удаляется одним действием в разделе «О продукте» или командой `php bin/psy demo:clear`.
Реклама
- Девять мест. Главная между разделами и справа, инструмент справа и в тексте, категория между инструментами и справа, справочник в тексте и справа, поиск справа.
- Подпись и резерв места. Над каждым блоком слово «Реклама», высота для компьютера и телефона занята заранее, страница не сдвигается. Блоки стоят в стороне от полей ввода и кнопок расчёта.
- Правила показа. Устройства, типы страниц, категории и инструменты, исключения, лимит на страницу и число показов одному посетителю в день.
- Сети и блоки. Рекламная сеть Яндекса (идентификатор блока из вашего кабинета), Google AdSense, произвольный код сети, собственные баннеры с рекламодателем, периодом, ERID и пометкой, партнёрские блоки.
- A/B-варианты. Несколько вариантов в одном месте делят показы по весам, показы и клики считаются по вариантам.
- ads.txt и app-ads.txt. Редактор проверяет строки и публикует файл по адресу `/ads.txt`.
- Предпросмотр. Настоящая страница с отмеченными рекламными местами.
- Безопасность чужого кода. Код сетей запускается только после согласия на рекламу, адреса разрешаются в политике безопасности страницы, встроенные скрипты проходят по контрольной сумме.
Метрики и согласие
- Баннер cookie. Принять всё, отклонить необязательное или выбрать категории: аналитика и реклама. Журнал согласий без IP-адреса.
- Счётчики. Яндекс Метрика (с вебвизором), Google Analytics 4, свои счётчики и пиксели; всё запускается после согласия.
- События. Просмотр, выполненный расчёт, печать, поиск, прокрутка, показ и клик по собственному блоку. Введённые значения в события не попадают.
- Собственная статистика. Просмотры и посетители, график по дням, популярные инструменты и категории, число расчётов, источники переходов, запросы поиска и запросы без результата, показы, клики и CTR мест. IP-адрес не записывается.
- Доход по местам. Суммы вносятся вручную или загружаются отчётом CSV из кабинета сети, выгрузка отчётов в CSV.
- Политика конфиденциальности. Образец с полями в квадратных скобках; пока поля не заполнены, реклама и сторонние счётчики на сайте закрыты.
Оформление
- Светлая клетчатая страница. Фон в клетку, чернильный текст, фиолетовый акцент, изумрудный и пурпурный для подсветки значений, жёсткие тени у карточек. Цвета, шрифты и скругления меняются в админке.
- Шрифты Rubik, Source Sans 3 и Fira Code лежат в комплекте и грузятся с вашего сайта: кириллица, знак рубля и знаки округления ⌈ ⌉ ⌊ ⌋ включены. Лицензии указаны в THIRD-PARTY.txt.
- Мобильная версия без горизонтальной прокрутки: меню, форма, результат, двоичный вид адреса, справочник, поиск и баннер cookie.
- Подписи вместо картинок. `/26`, `16:9`, `Мбит/с` и `#HEX` крупно на карточках инструментов.
Фирменная админ-панель ARCHIVE0
Панель студии, общая для продуктов ARCHIVE0. Обзор, инструменты с редактором и версиями, категории, справочник, страницы, меню, медиатека, оформление, SEO, редиректы, реклама РСЯ, метрики и аналитика, пользователи и роли (владелец, администратор, проверяющий, редактор), журнал, резервные копии, настройки, уведомления о материалах на проверке по почте и в Telegram.
Документация
README, руководство владельца (`docs/GUIDE.md`: установка, первый запуск, редактор инструментов и язык формул, SEO, подключение Рекламной сети Яндекса после модерации сайта, ads.txt, метрики, cron, резервные копии) и юридическая памятка (`docs/LEGAL.md`: рекламные сети, маркировка рекламы, персональные данные и cookie, оговорка о расчётах, что проверить перед запуском).
Для запуска нужно
Сервер или хостинг с PHP 8.3 или новее и MariaDB 10.5+ (или MySQL 8), nginx или Apache, домен с HTTPS и доступ к cron для чистки статистики. Node.js и Composer не нужны. Для рекламы нужны аккаунты сетей, для счётчиков — идентификаторы Метрики и GA4.