feat(cms): U1 content model + migration scaffold for blog/news/events
Establish content/ as the source of truth for editable content and back-fill it from the existing detail pages, per U1 of the no-code CMS plan. - docs/content-model.md: front-matter schema (EN/MK/SI), body_format html-vs-markdown, content/events -> projects/ output mapping. - tools/migrate_pages_to_content.py: bs4/yaml extractor; pulls title, subtitle, category, ISO date (from ARTICLE_DATES), hero image+caption; preserves the article body PLUS trailing sibling sections (event galleries) verbatim as body_format: html. Reports unparseable pages instead of emitting half-formed files. - content/**: 51 files (17 entries x EN/MK/SI), 0 skips. - tools/tests/test_migrate_roundtrip.py: 12 characterization tests (structured fields, news-has-no-subtitle, event gallery/lightbox preserved, Cyrillic UTF-8 round-trip, every page parses). - .gitignore: ignore __pycache__/ and *.pyc. U1 is unblocked and standalone. U2 (render content -> pages) is next; U5/U6 remain blocked on Open Question Q1 (Gitea<->GitHub topology). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
6204db5f0c
commit
9ddd0f88ef
55 files changed
+4572
No files matched your search
@@ -0,0 +1,47 @@
|
||||
---
|
||||
type: event
|
||||
slug: in-memory-of-the-kochani-victims
|
||||
lang: en
|
||||
source_folder: projects
|
||||
title: In Memory of the Victims of the Kochani Tragedy
|
||||
subtitle: On March 21, 2025, more than 600 people gathered at Kongresni trg in Ljubljana for a peaceful public gathering to honor the victims of the tragic fire in Kochani.
|
||||
date: '2025-03-21'
|
||||
date_line: Published on March 21, 2025
|
||||
hero:
|
||||
src: /images/kochani-1.webp
|
||||
alt: Candles and flowers at Kongresni trg in memory of the Kochani victims
|
||||
width: '720'
|
||||
height: '480'
|
||||
body_format: html
|
||||
---
|
||||
<div class="article-body">
|
||||
<p>On March 16, 2025, a fire broke out in the Pulse nightclub in Kochani, North Macedonia, taking the lives of 60 people and leaving deep scars across the country. For Macedonian students abroad, the news was devastating. Though far from home, the feeling of loss was shared, and the need to stand together was undeniable.</p>
|
||||
<p>The MSOS community decided to create a moment of solidarity in Slovenia, not as an act of protest or politics, but as a way to express humanity, grief, and unity in the face of tragedy.</p>
|
||||
<figure class="article-inline-image">
|
||||
<img alt="Candlelight and flowers at the memorial gathering in Ljubljana" decoding="async" height="480" loading="lazy" src="../../../images/kochani-2.webp" width="720"/>
|
||||
</figure>
|
||||
<h2 id="section-1">The gathering in Ljubljana</h2>
|
||||
<p>On March 21, the square in Ljubljana was filled with silence and candlelight. What began as an expectation of around 200 attendees grew into a gathering of more than 600 people of all ages. The program opened with a short address by the MSOS president, followed by a 16-minute silence to honor the victims, one minute for each March day leading up to the tragedy.</p>
|
||||
<p>Students, families, and members of the wider community laid flowers and lit candles, creating a sea of light and color that remained untouched for weeks after, as no one dared to disturb the memorial. The atmosphere was solemn, respectful, and deeply emotional.</p>
|
||||
<figure class="article-inline-image">
|
||||
<img alt="A sea of candles and flowers left by attendees" decoding="async" height="480" loading="lazy" src="../../../images/kochani-3.webp" width="720"/>
|
||||
</figure>
|
||||
<h2 id="section-2">A message beyond borders</h2>
|
||||
<p>This gathering was a reminder that even away from home, students carry their roots, their compassion, and their voice for justice. It was not a promotional act but a human one, a sign that the new generation wants to build a future where solidarity and care define who we are.</p>
|
||||
<p>The event also received coverage in Slovenia, with the MSOS president giving a short interview for RTV Slovenia, reflecting on the importance of standing united in difficult times.</p>
|
||||
<figure class="article-inline-image">
|
||||
<img alt="Attendees standing together during the moment of silence" decoding="async" height="480" loading="lazy" src="../../../images/kochani-4.webp" width="720"/>
|
||||
</figure>
|
||||
<h2 id="section-3">Closing words</h2>
|
||||
<p>The tragedy in Kochani showed us how fragile life is, but also how strong we can be when we come together. In Ljubljana, the student community stood side by side, sending love and respect back home.</p>
|
||||
<p>May the victims rest in peace.</p>
|
||||
</div>
|
||||
<section class="event-gallery">
|
||||
<h2 class="event-gallery-title">Photos from the event</h2>
|
||||
<div class="event-gallery-grid js-lightbox">
|
||||
<button class="eg-thumb" data-caption="In Memory of the Kochani Victims" data-full="../../../images/kochani-1.webp" type="button"><img alt="In Memory of the Kochani Victims, photo 1" decoding="async" height="480" loading="lazy" src="../../../images/kochani-1.webp" width="720"/></button>
|
||||
<button class="eg-thumb" data-caption="In Memory of the Kochani Victims" data-full="../../../images/kochani-2.webp" type="button"><img alt="In Memory of the Kochani Victims, photo 2" decoding="async" height="480" loading="lazy" src="../../../images/kochani-2.webp" width="720"/></button>
|
||||
<button class="eg-thumb" data-caption="In Memory of the Kochani Victims" data-full="../../../images/kochani-3.webp" type="button"><img alt="In Memory of the Kochani Victims, photo 3" decoding="async" height="480" loading="lazy" src="../../../images/kochani-3.webp" width="720"/></button>
|
||||
<button class="eg-thumb" data-caption="In Memory of the Kochani Victims" data-full="../../../images/kochani-4.webp" type="button"><img alt="In Memory of the Kochani Victims, photo 4" decoding="async" height="480" loading="lazy" src="../../../images/kochani-4.webp" width="720"/></button>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
type: event
|
||||
slug: in-memory-of-the-kochani-victims
|
||||
lang: mk
|
||||
source_folder: projects
|
||||
title: Во спомен на жртвите од трагедијата во Кочани
|
||||
subtitle: На 21 март 2025 година, повеќе од 600 луѓе се собраа на Конгресниот плоштад во Љубљана на мирен јавен собир за да ги почестат жртвите од трагичниот пожар во Кочани.
|
||||
date: '2025-03-21'
|
||||
date_line: Објавено на 21 март 2025
|
||||
hero:
|
||||
src: /images/kochani-1.webp
|
||||
alt: Свеќи и цвеќе на Конгресниот плоштад во спомен на жртвите од трагедијата во Кочани
|
||||
width: '720'
|
||||
height: '480'
|
||||
body_format: html
|
||||
---
|
||||
<div class="article-body">
|
||||
<p>На 16 март 2025 година, во ноќниот клуб Pulse во Кочани, Северна Македонија, избувна пожар што одзеде 60 животи и остави длабоки лузни низ целата земја. За македонските студенти во странство, веста беше поразителна. Иако далеку од дома, чувството на загуба беше споделено, а потребата да застанеме заедно беше непобитна.</p>
|
||||
<p>Заедницата на МСОС одлучи да создаде момент на солидарност во Словенија, не како чин на протест или политика, туку како начин да се изрази хуманост, тага и единство пред трагедијата.</p>
|
||||
<figure class="article-inline-image">
|
||||
<img alt="Светлина од свеќи и цвеќе на жалниот собир во Љубљана" decoding="async" height="480" loading="lazy" src="../../../images/kochani-2.webp" width="720"/>
|
||||
</figure>
|
||||
<h2 id="section-1">Собирот во Љубљана</h2>
|
||||
<p>На 21 март, плоштадот во Љубљана беше исполнет со тишина и светлина од свеќи. Тоа што започна како очекување за околу 200 присутни, прерасна во собир на повеќе од 600 луѓе од сите возрасти. Програмата започна со краток говор на претседателот на МСОС, проследена со 16-минутна тишина во чест на жртвите, по една минута за секој мартовски ден до трагедијата.</p>
|
||||
<p>Студенти, семејства и членови на пошироката заедница оставаа цвеќе и палеа свеќи, создавајќи море од светлина и боја што остана недопрено со недели потоа, бидејќи никој не се осмели да го наруши меморијалот. Атмосферата беше свечена, почитувачка и длабоко емотивна.</p>
|
||||
<figure class="article-inline-image">
|
||||
<img alt="Море од свеќи и цвеќе оставени од присутните" decoding="async" height="480" loading="lazy" src="../../../images/kochani-3.webp" width="720"/>
|
||||
</figure>
|
||||
<h2 id="section-2">Порака преку границите</h2>
|
||||
<p>Овој собир беше потсетник дека и далеку од дома, студентите ги носат своите корени, своето сочувство и својот глас за правда. Не беше промотивен чин, туку човечки, знак дека новата генерација сака да гради иднина каде солидарноста и грижата го определуваат тоа што сме.</p>
|
||||
<p>Настанот доби покриеност и во Словенија, каде претседателот на МСОС даде краток интервју за РТВ Словенија, размислувајќи за важноста на единството во тешки времиња.</p>
|
||||
<figure class="article-inline-image">
|
||||
<img alt="Присутните стојат заедно за време на минутата тишина" decoding="async" height="480" loading="lazy" src="../../../images/kochani-4.webp" width="720"/>
|
||||
</figure>
|
||||
<h2 id="section-3">Завршни зборови</h2>
|
||||
<p>Трагедијата во Кочани ни покажа колку е кревок животот, но и колку силни можеме да бидеме кога сме заедно. Во Љубљана, студентската заедница застана рамо до рамо, испраќајќи љубов и почит дома.</p>
|
||||
<p>Нека жртвите почиваат во мир.</p>
|
||||
</div>
|
||||
<section class="event-gallery">
|
||||
<h2 class="event-gallery-title">Фотографии од настанот</h2>
|
||||
<div class="event-gallery-grid js-lightbox">
|
||||
<button class="eg-thumb" data-caption="Во спомен на жртвите во Кочани" data-full="../../../images/kochani-1.webp" type="button"><img alt="Во спомен на жртвите во Кочани, photo 1" decoding="async" height="480" loading="lazy" src="../../../images/kochani-1.webp" width="720"/></button>
|
||||
<button class="eg-thumb" data-caption="Во спомен на жртвите во Кочани" data-full="../../../images/kochani-2.webp" type="button"><img alt="Во спомен на жртвите во Кочани, photo 2" decoding="async" height="480" loading="lazy" src="../../../images/kochani-2.webp" width="720"/></button>
|
||||
<button class="eg-thumb" data-caption="Во спомен на жртвите во Кочани" data-full="../../../images/kochani-3.webp" type="button"><img alt="Во спомен на жртвите во Кочани, photo 3" decoding="async" height="480" loading="lazy" src="../../../images/kochani-3.webp" width="720"/></button>
|
||||
<button class="eg-thumb" data-caption="Во спомен на жртвите во Кочани" data-full="../../../images/kochani-4.webp" type="button"><img alt="Во спомен на жртвите во Кочани, photo 4" decoding="async" height="480" loading="lazy" src="../../../images/kochani-4.webp" width="720"/></button>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
type: event
|
||||
slug: in-memory-of-the-kochani-victims
|
||||
lang: si
|
||||
source_folder: projects
|
||||
title: V spomin na žrtve tragedije v Kočanih
|
||||
subtitle: 21. marca 2025 se je na Kongresnem trgu v Ljubljani zbralo več kot 600 ljudi na mirnem javnem zboru v počastitev žrtev tragičnega požara v Kočanih.
|
||||
date: '2025-03-21'
|
||||
date_line: Objavljeno 21. marca 2025
|
||||
hero:
|
||||
src: /images/kochani-1.webp
|
||||
alt: Sveče in cvetje na Kongresnem trgu v spomin na žrtve tragedije v Kočanih
|
||||
width: '720'
|
||||
height: '480'
|
||||
body_format: html
|
||||
---
|
||||
<div class="article-body">
|
||||
<p>16. marca 2025 je v nočnem klubu Pulse v Kočanih v Severni Makedoniji izbruhnil požar, ki je terjal življenja 60 ljudi in pustil globoke rane po vsej državi. Za makedonske študente v tujini je bila novica pretresljiva. Čeprav daleč od doma, je bil občutek izgube skupen, potreba po povezovanju pa nezanikljiva.</p>
|
||||
<p>Skupnost MŠOS se je odločila ustvariti trenutek solidarnosti v Sloveniji, ne kot dejanje protesta ali politike, ampak kot način izražanja človečnosti, žalosti in enotnosti ob tragediji.</p>
|
||||
<figure class="article-inline-image">
|
||||
<img alt="Svetloba sveč in cvetje na žalni slovesnosti v Ljubljani" decoding="async" height="480" loading="lazy" src="../../../images/kochani-2.webp" width="720"/>
|
||||
</figure>
|
||||
<h2 id="section-1">Zbor v Ljubljani</h2>
|
||||
<p>21. marca je bil trg v Ljubljani napolnjen s tišino in svetlobo sveč. Kar se je začelo s pričakovanjem okoli 200 udeležencev, je preraslo v zbor več kot 600 ljudi vseh starosti. Program se je začel s kratkim nagovorom predsednika MŠOS, ki mu je sledila 16-minutna tišina v počastitev žrtev, ena minuta za vsak marčevski dan do tragedije.</p>
|
||||
<p>Študenti, družine in člani širše skupnosti so polagali cvetje in prižigali sveče ter ustvarili morje svetlobe in barv, ki je ostalo nedotaknjeno še tedne po dogodku, saj si nihče ni upal skruniti spomenika. Vzdušje je bilo slovesno, spoštljivo in globoko čustveno.</p>
|
||||
<figure class="article-inline-image">
|
||||
<img alt="Morje sveč in cvetja, ki so ga pustili udeleženci" decoding="async" height="480" loading="lazy" src="../../../images/kochani-3.webp" width="720"/>
|
||||
</figure>
|
||||
<h2 id="section-2">Sporočilo onkraj meja</h2>
|
||||
<p>Ta zbor je bil opomnik, da študenti tudi daleč od doma nosijo svoje korenine, svoje sočutje in svoj glas za pravico. Ni bilo promocijsko dejanje, ampak človeško, znak, da nova generacija želi graditi prihodnost, v kateri nas opredeljujeta solidarnost in skrb.</p>
|
||||
<p>Dogodek je bil odmeven tudi v Sloveniji, kjer je predsednik MŠOS podal kratek intervju za RTV Slovenija in razmišljal o pomenu enotnosti v težkih časih.</p>
|
||||
<figure class="article-inline-image">
|
||||
<img alt="Udeleženci stojijo skupaj med trenutkom tišine" decoding="async" height="480" loading="lazy" src="../../../images/kochani-4.webp" width="720"/>
|
||||
</figure>
|
||||
<h2 id="section-3">Sklepne besede</h2>
|
||||
<p>Tragedija v Kočanih nam je pokazala, kako krhko je življenje, a tudi kako močni smo lahko, ko se povežemo. V Ljubljani je študentska skupnost stala z ramo ob rami in domov pošiljala ljubezen in spoštovanje.</p>
|
||||
<p>Naj žrtve počivajo v miru.</p>
|
||||
</div>
|
||||
<section class="event-gallery">
|
||||
<h2 class="event-gallery-title">Fotografije z dogodka</h2>
|
||||
<div class="event-gallery-grid js-lightbox">
|
||||
<button class="eg-thumb" data-caption="V spomin na žrtve v Kočanih" data-full="../../../images/kochani-1.webp" type="button"><img alt="V spomin na žrtve v Kočanih, photo 1" decoding="async" height="480" loading="lazy" src="../../../images/kochani-1.webp" width="720"/></button>
|
||||
<button class="eg-thumb" data-caption="V spomin na žrtve v Kočanih" data-full="../../../images/kochani-2.webp" type="button"><img alt="V spomin na žrtve v Kočanih, photo 2" decoding="async" height="480" loading="lazy" src="../../../images/kochani-2.webp" width="720"/></button>
|
||||
<button class="eg-thumb" data-caption="V spomin na žrtve v Kočanih" data-full="../../../images/kochani-3.webp" type="button"><img alt="V spomin na žrtve v Kočanih, photo 3" decoding="async" height="480" loading="lazy" src="../../../images/kochani-3.webp" width="720"/></button>
|
||||
<button class="eg-thumb" data-caption="V spomin na žrtve v Kočanih" data-full="../../../images/kochani-4.webp" type="button"><img alt="V spomin na žrtve v Kočanih, photo 4" decoding="async" height="480" loading="lazy" src="../../../images/kochani-4.webp" width="720"/></button>
|
||||
</div>
|
||||
</section>
|
||||
Reference in new issue
Block a user