Этот репозиторий — основная точка редактирования и source of truth для статей сайта rslive.ru.
Движок, компоненты, стили, сборка и деплой находятся в приватном репозитории Antiokh/rslive.ru. Здесь хранятся только материалы энциклопедии и относящаяся к ним редакционная документация.
First-party редакционный контент в src/content/docs/**, если для конкретного материала не указаны другие условия, распространяется по Creative Commons Attribution-ShareAlike 4.0 International (CC-BY-SA-4.0).
Материал можно свободно копировать, распространять и адаптировать, в том числе коммерчески, при соблюдении Attribution и ShareAlike. Предоставленная RSLive общая атрибуция:
Инструкция по Сербии — RSLive.ru
https://rslive.ru/
Для конкретной статьи сохраняйте также её канонический URL, насколько это практически возможно, и отмечайте изменения в соответствии с CC BY-SA 4.0.
Почему здесь CC BY-SA, а не прежняя GPLv3: rslive_content фактически является контентным репозиторием, а основная программная реализация вынесена в Antiokh/rslive.ru. GPLv3 юридически может применяться и к не-программным произведениям, но её software/source-code модель плохо выражала нужные энциклопедии Attribution + ShareAlike и требовала лишних пояснений. CC BY-SA 4.0 задаёт эти условия непосредственно и понятнее для текстового коллективного корпуса.
Лицензии разделены по типу материала, но GitHub намеренно видит только одну основную root-level лицензию:
LICENSE— стандартный текст CC BY-SA 4.0, чтобы GitHub однозначно показывал эту лицензию как основную;NOTICE.md— атрибуция, scope, исключения и переход с прежней GPLv3;docs/licensing/gpl-3.0-only.txt— полный текст GPLv3 для небольшого first-party программного слоя;map-data/**, сторонние материалы и provider snapshots — по собственным provenance/licensing rules.
Редактируйте статьи только здесь:
src/content/docs/
Каталог движка:
Antiokh/rslive.ru: astro/src/content/docs/
— синхронизируемое зеркало. Не используйте его как штатную точку редактирования: импорт из этого репозитория выполняется через rsync --delete, поэтому несогласованные изменения в зеркале могут быть перезаписаны.
Автоматической обратной синхронизации из rslive.ru в rslive_content нет. Это намеренно: публичный репозиторий является source of truth, а зеркало в движке — только runtime-копией.
Перед изменением контента:
- Прочитайте этот README.
- Откройте
docs/CONTENT_INDEX.mdи при необходимости generated-проекциюsrc/content/docs/CONTENT_INDEX.yml. - Найдите существующую статью, соседние страницы раздела и подходящие внутренние ссылки.
- Проверьте факты, даты, юридические термины и внешние источники.
- Внесите минимальное связное изменение в
src/content/docs/**. - Не редактируйте
CONTENT_INDEX.ymlвручную: маршруты выводятся из дерева, а дополнительный контекст перелинковки задаётся черезfrontmatter.linking. - Проверьте MDX-синтаксис, сноски, ссылки и компоненты.
- После push в
mainдождитесь статусаrslive.ru / Публикацияна исходном коммите.
Если задача касается компонента, CSS, sidebar, поиска, API, PWA, редиректа, сборки или Cloudflare — это задача для Antiokh/rslive.ru, а не для этого репозитория.
RSLive — веб-энциклопедия по переезду и жизни в Сербии.
Текст должен быть:
- энциклопедическим, конкретным и практичным;
- написанным преимущественно в императивной форме там, где описывается порядок действий;
- пригодным для человека, который впервые сталкивается с процедурой;
- связанным с другими статьями внутренними ссылками;
- снабжённым внешними источниками для проверяемых фактических и юридических утверждений.
Не превращайте статьи в блоговые заметки, рекламу, пересказ слухов или набор общих советов.
Не смешивайте без маркировки:
- норму закона;
- официальную инструкцию ведомства;
- установленный административный порядок;
- практику конкретного отделения или инспектора;
- пользовательский опыт;
- оценку, прогноз или рекомендацию редакции.
Если официальное правило и наблюдаемая практика отличаются, опишите оба уровня отдельно.
Не выдавайте пользовательский опыт за обязательное правило и не делайте юридический вывод только из того, что «так обычно принимают».
Для существенных утверждений используйте источники в таком порядке:
- законы и подзаконные акты Сербии;
- официальные сайты министерств, ведомств, муниципалитетов и государственных организаций;
- официальные инструкции, тарифы, формы и реестры;
- сайты регулируемых организаций и поставщиков услуг;
- надёжные вторичные источники;
- пользовательский опыт — только как практическое дополнение.
Для юридических утверждений по возможности ссылайтесь не только на документ целиком, но и на конкретную статью, раздел или официальный фрагмент процедуры.
Проверяйте:
- актуальность редакции закона;
- дату тарифа, суммы или административного сбора;
- компетенцию органа;
- территориальные различия;
- исключения и переходные положения;
- отличается ли правило для граждан, иностранцев, резидентов, нерезидентов, предпринимателей или членов семьи.
Не придумывайте отсутствующие сроки, документы, основания отказа, обязанности ведомств или правоприменительную практику.
Если надёжного ответа нет, прямо укажите границу известного и не превращайте предположение в факт.
.github/workflows/
notify-rslive-ru.yml # публикует content/stickers/map-data в движок и возвращает статус Cloudflare
src/content/docs/
CONTENT_INDEX.yml # автоматически сгенерированный семантический индекс
index.mdx # главная страница
arrival/
move/
adaptation/
integration/
lifestyle/
med/
edu/
gov/
map/
tools/
about/
blog/
Статья обычно находится в папке с index.mdx:
src/content/docs/arrival/boravak/index.mdx -> https://rslive.ru/arrival/boravak/
src/content/docs/move/visa/index.mdx -> https://rslive.ru/move/visa/
src/content/docs/integration/euprava/index.mdx -> https://rslive.ru/integration/euprava/
Главная страница раздела также называется index.mdx:
src/content/docs/move/index.mdx -> https://rslive.ru/move/
Статья может опционально объявить, при каких ответах персонального навигатора её показывать. Для этого используется отдельное поле navigator; поисковый keywords для этой задачи не применяется.
Один набор условий:
navigator:
now: [traveling, pets]означает: показать статью в фазе now, если одновременно активны теги traveling И pets.
Несколько альтернатив:
navigator:
now:
- [traveling, pets]
- [car, pets]означают: показать статью, если выполнен первый набор ИЛИ второй. Внутри каждого массива по-прежнему действует И.
Допустимые фазы, полный словарь тегов, производные теги и правила редактирования перечислены в docs/RELOCATION_WIZARD.md. Не добавляйте произвольный новый тег только в статью: неизвестный тег должен останавливать линтер и Astro schema validation.
- Найдите страницу через файловую структуру; generated
CONTENT_INDEX.ymlиспользуйте как вспомогательную семантическую карту. - Прочитайте статью целиком, а не только изменяемый абзац.
- Проверьте соседние статьи на дублирование и возможную перелинковку.
- Сохраните тезис, структуру и полезные детали, если задача не требует полного переписывания.
- Обновите источники и даты проверки.
- Проверьте, не противоречит ли новое утверждение другим страницам.
- Если меняется смысл страницы, обновите
description,keywordsи при необходимостиlinking; индекс перегенерируется автоматически.
Создайте папку и файл по ожидаемому URL:
src/content/docs/arrival/new-topic/index.mdx
Минимальный шаблон:
---
title: "Название статьи"
description: "Короткое описание содержания страницы для поиска и превью."
keywords: ["ключевая фраза 1", "ключевая фраза 2"]
sourceCheckedAt: 2026-07-31
live: "https://rslive.ru/arrival/new-topic/"
---
Коротко объясните, кому нужна эта статья и какой результат получит читатель.
## Что нужно знать
Основные правила, ограничения и условия.
## Порядок действий
<Steps>
1. Выполните первый шаг.
2. Подготовьте документы.
3. Подайте заявление.
4. Проверьте результат.
</Steps>
## Практические особенности
Отдельно опишите различия между официальным порядком и наблюдаемой практикой.
## Примечания
[^1]: [Официальный источник](https://example.com)После добавления страницы внесите её в CONTENT_INDEX.yml и добавьте ссылки из релевантных существующих статей.
Каждая статья должна начинаться с frontmatter. Поле title обязательно по схеме. Для новых и существенно переработанных публичных страниц также указывайте description и канонический URL live.
live содержит абсолютный канонический URL опубликованной страницы на https://rslive.ru. Значение выводится из пути файла: src/content/docs/index.mdx соответствует https://rslive.ru/, а src/content/docs/arrival/boravak/index.mdx — https://rslive.ru/arrival/boravak/. Для файлов не с именем index.mdx используйте маршрут с именем файла без расширения и завершающим /.
Поле source относится к завершённой миграции с DokuWiki и больше не используется. Не добавляйте его в новые или существующие статьи; при обнаружении заменяйте его на live с фактическим URL страницы.
---
title: "Визы и документы"
seoTitle: "Визы в Сербию: виды, правила въезда и документы"
description: "Виды виз, правила въезда и документы для переезда в Сербию."
ogTitle: "Визы и документы для въезда в Сербию"
ogDescription: "Какая виза нужна, как подготовить документы и проверить условия въезда."
ogSticker: passport
keywords: ["виза в Сербию", "въезд в Сербию", "документы"]
sourceCheckedAt: 2026-07-31
live: "https://rslive.ru/move/visa/"
---Поддерживаемые дополнительные поля:
seoTitle: "Отдельный заголовок для поисковой выдачи"
ogTitle: "Короткий заголовок для соцсетей"
ogDescription: "Короткое описание для OG-карточки"
ogSticker: passport
author: "Автор"
reviewedBy: "Проверяющий"
sourceCheckedAt: 2026-07-31
live: "https://rslive.ru/arrival/boravak/"seoTitleпозволяет задать SEO-заголовок, не меняя видимыйtitleстатьи.ogTitleиogDescriptionпереопределяют текст сгенерированной Open Graph-карточки; без них используютсяtitleиdescription.ogStickerзадаёт стикер для широкой Open Graph-карточки. Указывайте техническое английское имя без.svgили.png; доступные значения собраны на странице /about/stickers/.reviewedByможет быть строкой или массивом.
Для управления боковым меню:
---
title: "Контентные компоненты"
description: "Примеры компонентов, доступных в статьях."
sidebar:
label: "Компоненты"
order: 60
---Не добавляйте новое поле frontmatter без поддержки в схеме движка. Схема находится в Antiokh/rslive.ru/astro/src/content.config.ts.
Используйте обычный Markdown и MDX:
## Раздел
### Подраздел
Текст со [ссылкой](/arrival/boravak/).
- Пункт списка
- Ещё пункт
1. Первый шаг
2. Второй шагВнутренние ссылки должны быть абсолютными путями от корня сайта и обычно заканчиваться /:
[боравак](/arrival/boravak/)Не используйте относительные переходы вроде ../boravak/, если можно указать канонический маршрут.
Используйте цифровые Markdown-сноски:
Утверждение, требующее подтверждения.[^1]
[^1]: [Официальный источник](https://example.com)Для нескольких источников:
Требование установлено законом и официальной инструкцией.[^1][^2]
[^1]: [Текст закона](https://example.com/law)
[^2]: [Инструкция ведомства](https://example.com/instruction)Не используйте именованные labels вместо цифровых [^1], [^2] и далее.
Ставьте сноску рядом с утверждением, которое она подтверждает. Не прикрепляйте одну ссылку ко всему разделу, если из неё не следует каждое утверждение раздела.
MDX может принять Markdown-autolink за JSX.
Плохо:
<http://onelink.to/q9p3q2>Правильно:
[http://onelink.to/q9p3q2](http://onelink.to/q9p3q2)src/content/docs/CONTENT_INDEX.yml — семантическая карта сайта для поиска страниц и внутренней перелинковки.
Типичная запись:
- url: /arrival/beli-karton/
title: "Белый картон: регистрация иностранца в Сербии"
tags: [боравак, регистрация, документ, адрес]
aliases: [белый картон, prijava boravka, регистрация иностранца]
link_when:
- нужно оформить регистрацию после приезда
- требуется подтверждение адреса
anchors: []Обновляйте индекс, когда:
- добавлена или удалена страница;
- изменён URL;
- изменено название или основная тема статьи;
- появились важные aliases или варианты терминов;
- изменился контекст, в котором на страницу нужно ссылаться;
- добавлен проверенный стабильный anchor.
Не добавляйте anchor по памяти. Заголовок MDX и итоговый Astro ID могут различаться. Оставляйте anchors: [], пока anchor не проверен по собранной странице.
CONTENT_INDEX.yml не заменяет ссылки в статьях. Он помогает находить правильные страницы, но фактическую перелинковку нужно добавлять в MDX.
Точный публичный MDX surface определяется движком в Antiokh/rslive.ru: astro/config/mdx-components.config.mjs. Запись с autoImport: true доступна в обычной статье без локального import; исключения с autoImport: false сохраняют явный импорт. Не поддерживайте второй полный список компонентов в этом README.
Подробный синтаксис и редакторские правила находятся в docs/MDX_COMPONENTS.md. Перед использованием редкого компонента сверяйте registry и текущий исходник компонента в движке.
<Aside type="tip" title="Совет">
Текст подсказки.
</Aside>Используйте tip для практического совета, note для пояснения и caution для существенного риска или ограничения.
<Steps>
1. Подготовьте документы.
2. Оплатите сбор.
3. Подайте заявление.
</Steps><Accordion title="Частые вопросы">
<AccordionItem title="Нужна ли запись?">
Ответ с пояснением и источником.
</AccordionItem>
<AccordionItem title="Сколько длится процедура?">
Ответ.
</AccordionItem>
</Accordion><Spoiler title="Показать подробности">
Скрытый дополнительный материал.
</Spoiler><UplatnicaGenerator
payer="Ваше имя и адрес"
subject="Название услуги или назначение платежа"
recipient={`Назив примаоца
Адрес примаоца`}
code="153"
sum="11745.00"
account="840-1848-16"
model="97"
target="Позив на број"
/>Не публикуйте квитанцию как актуальную без проверки суммы, счёта, модели и позива на број по официальному источнику. Если реквизиты зависят от муниципалитета или заявителя, укажите это рядом с компонентом.
<YouTube id="NHkCfZjIEV4" title="Название видео" />
<MapEmbed
src="https://www.google.com/maps/d/embed?mid=..."
title="Карта"
caption="Описание карты"
/>Перед добавлением внешнего embed проверьте, что он доступен без авторизации и не содержит секретных параметров.
Небольшие таблицы пишите обычным Markdown:
| Город | Адрес | Очередь |
| --- | --- | ---: |
| Белград | Bulevar Zorana Đinđića 64a | 18 |
| Нови-Сад | Bulevar oslobođenja 56a | 7 |Для фильтрации, сортировки, длинного текста, ссылок и иконок используйте SmartTable:
<SmartTable
id="branches-demo"
title="Подразделения"
stretchColumn="address"
columns={[
{ key: 'name', label: 'Название' },
{ key: 'address', label: 'Адрес', stretch: true },
{ key: 'city', label: 'Город' },
{ key: 'queue', label: 'Очередь', numeric: true },
{ key: 'website', label: 'Сайт', icon: 'website', iconOnly: true },
]}
rows={[
{
name: 'GTC',
address: 'Bulevar Zorana Đinđića 64a',
city: 'Beograd',
queue: 18,
website: 'https://example.com',
},
]}
/>Поддерживаемые значения icon:
telegram | whatsapp | website | facebook | email | link
Для управляемых таблиц используются:
<SanityTable
tableId="banks_raiffeisen"
title="Список подразделений Raiffeisen"
limit={100}
pageSize={25}
/>
<SupabaseTable
table="data_banks_raiffeisen"
title="Supabase: Raiffeisen"
select="rid,name,address,city,website"
order="rid"
limit={100}
pageSize={25}
/>
<StructTable schema="banks_raiffeisen" pageSize={25} />Не угадывайте имя таблицы, schema или колонки. Проверьте реализацию компонента и источник данных в репозитории движка.
Не добавляйте DokuWiki-синтаксис в новые или обновляемые статьи:
[[page:name|Текст]]
{{section>page#anchor}}
+++ Спойлер|
<barcode ... />
<do ...>
<autott>...</autott>
Используйте Markdown или MDX-компоненты:
[Текст](/page/name/)
<Spoiler title="Спойлер">
Текст.
</Spoiler>При встрече legacy-синтаксиса заменяйте только после проверки, что новая конструкция сохраняет смысл и поведение исходной вставки.
Основной поток публикации при наличии изменений в зеркалируемых путях:
push в Antiokh/rslive_content:main
→ .github/workflows/notify-rslive-ru.yml (public GitHub Actions runner)
→ validation map-data
→ checkout Antiokh/rslive.ru:main с RSLIVE_CONTENT_SYNC_TOKEN
→ rsync content + sticker SVG + allowlisted map-data в runtime-пути движка
→ sync-коммит в Antiokh/rslive.ru:main
→ Cloudflare Pages Git integration / npm run build
→ public workflow ждёт check run Cloudflare Pages
→ статус rslive.ru / Публикация на исходном контентном коммите
Если после rsync в зеркалируемых путях нет фактических изменений, workflow не создаёт sync-коммит и не ждёт Cloudflare Pages. Вместо этого исходный content-коммит сразу получает успешный status rslive.ru / Публикация с описанием Публикация не требуется: изменений для сайта нет.
Несмотря на legacy-имя notify-rslive-ru.yml, workflow не отправляет repository_dispatch. Он сам выполняет полный public-runner publication flow и является действующим production workflow.
Синхронизируются, в частности:
rslive_content/src/content/docs/
→ rslive.ru/astro/src/content/docs/
rslive_content/src/content/docs/about/stickers/assets/svg/
→ rslive.ru/astro/src/assets/stickers/
allowlisted файлы из rslive_content/map-data/core/
→ rslive.ru/astro/public/maps/core/ и build-only map boundaries
rslive_content/map-data/basemaps/**
→ rslive.ru/astro/public/maps/basemaps/
allowlisted файлы из rslive_content/map-data/packs/cities/
→ rslive.ru/astro/public/maps/packs/cities/
rslive_content/map-data/snapshots/**
→ rslive.ru/astro/public/maps/snapshots/
Точный allowlist map-data и правила --delete определяет актуальный .github/workflows/notify-rslive-ru.yml; не дублируйте их по памяти в других документах.
Файлы уровня репозитория — README.md, LICENSE, .gitignore, .github/ и другие — в движок не копируются.
Синхронизационные коммиты содержат:
[skip content-sync]
Маркер сохраняется для совместимости и явной маркировки generated sync-коммитов. Не используйте его в обычных редакционных коммитах.
Активный Actions secret находится в этом публичном репозитории:
RSLIVE_CONTENT_SYNC_TOKEN
Он должен позволять workflow читать и изменять приватный rslive.ru, читать checks созданных engine-коммитов и публиковать commit statuses в rslive_content. Routine publication не зависит от одноимённого secret в приватном репозитории.
Если публикация не произошла, проверьте:
- workflow
rslive.ruв этом репозитории; RSLIVE_CONTENT_SYNC_TOKENи его permissions;- validation map-data в начале workflow;
- если зеркалируемые пути изменились — появился ли sync-коммит в
rslive.ru/main; если изменений нет — получил ли исходный commit success-status с описаниемПубликация не требуется: изменений для сайта нет; - для созданного engine-коммита — check run
Cloudflare Pages; - commit status
rslive.ru / Публикацияна исходном content-коммите; - MDX/build-ошибку в изменённых материалах;
- конфликтующий push в
rslive.ru/mainво время retry/rebase.
Этот репозиторий не содержит Astro-приложение и сам по себе не может выполнить полный production build.
Обычная удалённая проверка выполняется автоматически после push через rslive.ru и Cloudflare Pages. Результат возвращается в исходный коммит как:
rslive.ru / Публикация
Для локальной полной проверки нужен приватный репозиторий движка. Если оба репозитория клонированы рядом:
rsync -a --delete \
../rslive_content/src/content/docs/ \
./astro/src/content/docs/
cd astro
npm ci
npm run checkНе коммитьте результат локального копирования в зеркало движка как альтернативный редакционный поток.
- Работайте с контентом в этом репозитории, а не в зеркале движка.
- Не меняйте маршрут страницы без проверки ссылок и необходимости редиректа в
rslive.ru. - Не удаляйте факты, источники и полезные детали только ради сокращения текста.
- Не добавляйте фактические или юридические утверждения без проверки.
- Не используйте один вторичный источник там, где доступен официальный.
- Не называйте практический опыт обязательным правилом.
- Не создавайте дублирующую статью до проверки
CONTENT_INDEX.ymlи соседних разделов. - Не придумывайте component props. Найдите существующее использование или проверьте компонент в движке.
- При добавлении компонента движка обновите этот README или профильную документацию для авторов.
- При изменении страницы проверьте входящие и исходящие внутренние ссылки.
- При значимом обновлении фактов измените
sourceCheckedAt. - Перед завершением перечитайте diff целиком и убедитесь, что
CONTENT_INDEX.ymlостаётся актуальным.
- изменён правильный файл в
src/content/docs; titleиdescriptionсоответствуют содержанию;- фактические и юридические утверждения подтверждены;
- официальные источники имеют приоритет;
- суммы, сроки и процедуры датированы или проверены;
- сноски цифровые и стоят рядом с утверждениями;
- внутренние ссылки ведут на существующие канонические маршруты;
CONTENT_INDEX.ymlобновлён при необходимости;- MDX не содержит autolink в угловых скобках;
- legacy DokuWiki-синтаксис не добавлен;
- component props проверены по существующим примерам или коду движка;
- новая страница связана с соседними статьями;
- после push получен результат
rslive.ru / Публикация.
LICENSE— стандартный текст лицензии редакционного корпуса CC BY-SA 4.0;NOTICE.md— scope, атрибуция и переход с прежней GPLv3;docs/CONTRIBUTOR_ATTRIBUTION.md— авторство и лицензирование вкладов;CONTENT_INDEX.yml— карта страниц и перелинковки;Antiokh/rslive.ru/README.md— стартовая документация движка;Antiokh/rslive.ru/astro/CUSTOMIZATION_INVENTORY.md— компоненты и кастомизации;Antiokh/rslive.ru/docs/content-sync.md— техническая схема синхронизации.