В работе

K39

Путеводитель по Калининградской области

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

Создал веб-приложение и редакционный процесс. Страницы собираются из PostgreSQL на сервере; для AI-агентов предусмотрен отдельный доступ к черновикам без права публикации.

Задача

Туристу нужно понять, куда пускают, когда открыто, сколько стоит и как доехать. Я хочу собрать это на одном сайте, где у каждого места своя страница с источниками, и получать посетителей из поиска.

Что сделано

k39.online: страницы мест (форты, замки, пляжи, курорты, еда), карта, маршруты, подборки и квесты, каталог заведений с расписаниями и ценами, поиск по сайту. Редакторы работают в админке, владельцы заведений правят карточку в кабинете. Первая версия в 2025 году была социальным продуктом с подписками и лентой. 10 октября 2026 я перезапустил репозиторий как контентный сайт, и с тех пор в нём 263 коммита. Задачи ведутся в GitHub Issues, код пишут агенты Cursor и Codex, решения фиксируются в ADR.

Ключевые решения

  • Весь контент в Postgres, админка внутри приложения

    Раньше тексты лежали в markdown и синхронизировались в базу, и копии расходились. Теперь одна база, а опубликованные страницы рендерятся на сервере, это нужно для SEO.

  • Агент предлагает, человек публикует

    Агенты пишут через MCP-сервер на самом сайте с отдельным токеном. Их правки к живой странице уходят в очередь, страница не меняется, пока редактор не опубликует. Подробно в статье о правах черновиков.

  • Факты отдельно от текста

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

  • Своя аналитика без cookies

    Скрипт меньше 2 КБ, IP не хранится, посетитель определяется хешем, который меняется каждый день. Причины: требования 152-ФЗ и нежелание отдавать трафик внешним сервисам.

Стек

  • Nuxt 4
  • Vue
  • Reka UI
  • PostgreSQL
  • Drizzle ORM
  • MapLibre GL и PMTiles
  • sharp
  • Zod
  • @nuxtjs/mcp-toolkit
  • Docker на Dokploy

Статус и что дальше

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