// статьи / статья
#статья #сайт#iniproject#разработка#история#команда

> От одной страницы до портала: как я делал сайт InIProject

История развития: одна идея, много кода, Telegram-бот, 2FA, статьи и несколько шишек.

SkilinPur 25.10.2026 5 мин чтения серия: как мы делали 👁
От одной страницы до портала: как я делал сайт InIProject

«Сделаем одну страницу, чтобы было где показать команду». С этой фразы, кажется, всё и началось.

Сначала была одна страница

Я не собирался делать портал. Хотелось просто место, куда можно скинуть ссылку: кто мы, что делаем, какие у нас проекты. Одна страница, тёмный фон, красный акцент — и достаточно.

Первая версия была именно такой: экран с названием, блок «кто мы», несколько карточек проектов и футер. Никакой админки, базы и «взрослой» архитектуры. Просто витрина.

Потом появилась мысль: а если у каждого будет профиль? А если добавить код? А игры? А блог? Каждая идея по отдельности была небольшой. Вместе они перестали помещаться в одну страницу.

Как это развивалось

Я не веду дневник, поэтому даты местами приблизительные. Но этапы помню хорошо.

Этап 0. Идея. Сделать одну страницу для команды: кто мы, что делаем, где наши проекты. Без базы, без админки, без планов на портал.

Этап 1. Первая версия. Статический сайт: главная, команда, проекты, футер. Всё правилось руками в HTML. Это работало ровно до момента, когда захотелось добавить нового участника без правки десяти файлов.

Этап 2. Админка и данные. Появилась SQLite и личный кабинет. Сначала — участники и проекты, потом профили, бейджи, записи, музыка, серверы, планы. Данные начали выгружаться в JSON: сайт читает файлы, админка пишет в базу. Сайт перестал быть набором страниц и стал системой.

Этап 3. Разделы и проекты. Добавились код, креаторы, игры, блог, дорожная карта, changelog. Появились страницы проектов, README, скриншоты, демо, рекомендованные репозитории, профили участников. Сайт стал порталом, но всё ещё одним сайтом, а не десятью отдельными проектами.

Этап 4. Подготовка к запуску. Тизер с таймером, разделение dev и production, SEO, sitemap, приватность, cookie-баннер, репорты. В этот момент стало понятно: «одна страница» давно выросла в инфраструктуру.

Этап 5. 28 сентября 2026 — запуск. Заглушка сменилась боевым сайтом. Было страшно не за код, а за то, что кто-то придёт и скажет: «А зачем это всё?» Но пришли первые люди, появились репорты, сообщения в Telegram, идеи. Сайт начал жить своей жизнью.

Этап 6. После запуска. Telegram-бот для участников и публичный канал, 2FA через Telegram, реестр сессий, «Выйти везде», статьи с модерацией и предпросмотром, обложки, скрытие статей, усиление безопасности. Сайт стал местом, где не только смотрят, но и работают.

Этап 7. Сейчас. Статьи открыты: раздел живёт отдельно от блога, публикуется после проверки. Впереди — портфолио креаторов, TOTP, публичный API и ещё много мелочей.

Почему без фреймворков

Технически всё просто: PHP, SQLite, vanilla JS, Caddy и один VPS. Без React, сборки и сотни зависимостей. Мне нравится, что я вижу каждый байт и могу починить баг, не разбираясь в чужом стеке.

У этого есть цена: многое приходится делать руками. Кэш, версии CSS, экспорт, админка, проверки. Но для сайта команды это честный обмен: меньше магии — меньше сюрпризов.

Стиль: терминал, который не мешает

Сайт должен выглядеть как место, где делают код и игры, а не как корпоративный лендинг. Поэтому чёрный, красный, JetBrains Mono, матрица, курсоры и немного терминала.

Но стиль не должен мешать читать. Поэтому у сайта есть темы, музыкальный плеер, поиск, cookie-баннер и обычные человеческие тексты. Хочется, чтобы это была не декорация, а рабочий инструмент.

Админка, данные и немного магии

Админка — это личный кабинет и панель управления одновременно. Участник видит свои проекты, записи, статьи и профиль. Админ — всё остальное.

Данные живут в SQLite и выгружаются в JSON. Сайт читает JSON, админка пишет в базу. Это не самая модная архитектура, но она предсказуемая: я всегда знаю, откуда взялась цифра на странице.

Главное правило, которое я вывел: не держать данные в двух местах. Если что-то правится в админке — оно должно попасть в экспорт. Если попало в экспорт — оно должно быть на сайте. Иначе появляются «призраки»: старая запись, которую уже удалили, или участник, которого нет.

Telegram, 2FA и сессии

Сайт — не только витрина. У нас есть публичный Telegram-канал и внутренний бот для участников: уведомления о входе, 2FA через Telegram, реестр сессий. Хочется, чтобы аккаунт нельзя было увести одним паролем.

Пароли, сессии, резервные коды, «Выйти везде» — это не самые заметные фичи, но именно они делают сайт взрослым. Заметные штуки приятно показывать. Незаметные — приятно иметь.

Статьи, которые уже есть

Отдельная история — статьи. Длинные тексты не помещаются в блог-заметки, поэтому появился отдельный раздел: Markdown, обложки, модерация, предпросмотр и серии.

Сейчас раздел открыт. Публично видны опубликованные статьи, черновики и материалы на проверке — только по ссылке предпросмотра. Я не хотел открывать пустую витрину: лучше показать несколько нормальных текстов, чем раздел без единого материала.

Эта статья тоже начиналась как черновик. Иронично: текст о сайте, который всё ещё дописывается, теперь лежит в открытом разделе. Но это честно — сайт и тексты растут вместе.

Что ломалось

Ломалось многое. Кэш не обновлялся, CSS-переменные терялись, Telegram-подтверждения вели не туда, логин и ник были одним полем, а бэкапы однажды унесли с собой .env. Каждый раз это выглядело как «ну всё, сейчас быстро поправлю», и каждый раз занимало больше времени, чем казалось.

Я не скажу, что после этого стал идеальным разработчиком. Но теперь я точно знаю: если что-то важное — проверять на реальном сценарии, а не только на «должно работать».

Запуск

Сайт запустился 28 сентября 2026 года. До этого была заглушка с таймером, потом — переключение, и вот он уже живой.

Было страшно. Не за код, а за то, что кто-то придёт и скажет: «А зачем это всё?» Но пришли первые люди, появились репорты, сообщения в Telegram, идеи. Сайт начал жить своей жизнью — и это лучшее, что могло случиться.

Что дальше

Дальше — нормальное портфолио для креаторов, TOTP, публичный API и ещё много мелочей. Но главное — не превратить сайт в музей.

Я хочу, чтобы он оставался живым: с новыми проектами, текстами, людьми и странными идеями. Если у тебя есть идея — напиши. Кнопка «Сообщить о проблеме» внизу, Telegram-канал и почта для этого и существуют.

Спасибо, что зашёл. Это только начало.

// реакции
SkilinPurучастник InIProject