SEO (all 201 pages, en/mk/si):
- Inject canonical, hreflang (en/mk/sl + x-default), Open Graph, Twitter
cards and Organization JSON-LD via idempotent SEO:START/END block
- Generate multilingual sitemap.xml (xhtml:link alternates) + robots.txt
- Curated meta descriptions for lead-less pages (home, become-a-member,
faq, news hub, my-route); every page now has a description
- Absolute URLs target final domain msosorg.com, not the temp host
- Add reusable tools/seo_inject.py (+ README)
Content fixes:
- Translate about-us and timeline-and-milestones into MK + SI, wire up
their pages, and repair the previously-dead "Who We Are" nav links
across all mk/si pages
- Remove duplicate en/projects/makedonska-studentska-vecer-vo-ljubljana
(unreferenced; already covered by macedonian-student-night-in-ljubljana)
Locale correctness:
- Normalise Slovene pages to <html lang="sl"> (correct ISO 639-1)
- Map sl->si in main.js so the language-switcher highlight and newsletter
i18n keep working on Slovene pages (data-lang="si" still maps to /si/)
MK/SI translations and descriptions are AI-drafted; flag for native review.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Navigation
- Replace "Donate" with a "Support MSOS ❤️" CTA site-wide
- Remove dead nav links (Gallery, Press releases)
- Turn the one-item News dropdown into a direct link
Homepage
- Replace the non-functional "Become part" contact form with a
"Find your people in Slovenia" join CTA (blue/white gradient band,
orange button, photo collage), in all three languages
- Fix the placeholder Activities subtitle
- Redesign Activities into card-style tabs with icons; move per-tab
content into HTML panels and switch by index so the tabs work in
every language (MK/SI tabs were previously dead)
Newsletter (MailerLite)
- Add the subscribe block to the News hub, news articles, and every
events/projects page and hub, in all three languages
- Resize/rebalance the block, shrink the privacy line, add top spacing
- Standardise on honest copy (drop the "2,000+ subscribers" claim)
- Load main.js on the News hub pages (they shipped without it, so the
form and header dropdowns didn't work there)
- Fix a dead privacy-policy link on the makedonska-vecer page
- Document the signup convention in docs/newsletter-signup.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The "Get Involved" dropdown (Become a member / Support MSOS) had dead href="#"
links and only duplicated the two top-right buttons (Become a member, Donate).
Removed it site-wide (desktop + mobile, en/si/mk) - 390 blocks across 195 pages,
including the privacy-policy header the generators slice from, so regeneration
stays clean. Nav is now Who We Are / What We Do / For Students / News + the two
pill buttons.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Update the residence-permit "sufficient means" figure to 507,43 EUR/month
(Slovenian basic minimum income from 1 April 2026, source gov.si) across the
guide, FAQ, budget note, sample parent statement and my-route tip; replaces
the old 484,88 everywhere.
- New standalone news announcement page /<lang>/news/proof-of-means-updated-2026/
(trilingual), published 1 August 2026, with a clickable gov.si source box and a
hero image (Pixabay, credited). news.js now supports announcement items
(slug + body) and shows them newest-first on the homepage and News hub; the
image doubles as the card thumbnail. Optimised 6.98MB to 255KB.
- Switch English EUR amounts to European format (comma decimal, dot thousands):
507,43 / 9.600 / 1.000 etc. Only euro-prefixed amounts are touched, so SI/MK
(which use a euro suffix) are unaffected. New generator eurofmt.js.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Mobile fixes (article, guide, get-to-know, projects pages):
- Remove duplicate main.js include site-wide. footer.js emitted a
<script src=main.js> inside the footer block while pages also load one
before </body>, so DOMContentLoaded ran twice and every tap toggled the
mobile menu / article TOC twice (net no-op). Menu and TOC only worked on
the homepage. Now exactly one main.js per page, before </body>.
- Kill horizontal overflow: add overflow-x: clip to html/body (clips the
off-canvas mobile nav panel without breaking position: sticky, unlike
overflow-x: hidden).
- Reset align-items to stretch in the mobile .article-layout-container
rule; the desktop flex-start made .article-container size to max-content
width in a column flexbox and overflow the viewport.
Membership form hardening (Become a Member):
- Honeypot field + localStorage cooldown (30s gap, max 3/24h) + stronger
email regex; trilingual cooldown alert message.
- Apps Script (setup doc): per-email auto-reply dedupe + daily send cap;
applicant reply is a plain thank-you that never echoes submitted answers.
- Draft HTML welcome email (email-welcome-preview.html) for later use.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
New trilingual /<lang>/become-a-member/ conversion page: hero with real-photo collage, why-join benefits, animated MSOS-in-numbers, ways to participate, membership-in-real-life and projects showcase (real project photos), testimonials, who-can-join, an adaptive multi-step form (student + supporter flows, conditional fields, progress, personalised messages, validation, success screen), FAQ and final CTA. Site-wide 'Become a member' buttons now link here. Form posts to a Google Form once wired; metrics/testimonials are placeholders to confirm.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
New /<lang>/news/ hub aggregates real projects (title+image read from their pages), placeholder news announcements, and blog items, newest-first with type badges and a type filter. Homepage Latest news now shows the newest dated items as badged cards with a working See all to the hub; the News menu link points there too. Dates in news.js are placeholders to replace with real publish dates.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Remove 'Mentorship Programme' and 'Open calls' from the menus, rename 'Announcements' to 'News and Announcements', and wire the Blog link. Add a trilingual /<lang>/blog/ page with a distinct look: featured strip, client-side topic filters, and a masonry card wall with colour-coded tags (placeholder posts for now).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace em/en dashes with commas (or 'to' for number ranges, keeping the euro sign) across the FAQ, home, timeline and project pages; hyphens in compound words are left intact. Increase .faq-hero top padding so the eyebrow/title clear the fixed 80px header.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
New /<lang>/faq/ page (en/si/mk) with categorised accordion Q&A that link into the Student Welcome Guide, plus a contact/Viber block. Nav 'FAQs' links and 'See all FAQs' buttons across the site now point to it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Flags: replace flag-icons CDN with local SVGs (images/flags/{gb,si,mk}.svg) referenced as CSS backgrounds, so no external dependency and no per-page path issues. Partners: replace the static home-page logo row with a seamless auto-scrolling, hover-pausing marquee (CSS-only, reduced-motion aware, edge fade).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Desktop dropdown and mobile modal now show circular country flags (flag-icons) with clean language names and an active-language highlight, driven by the page lang via main.js.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add legal name, real social links (FB/IG/LinkedIn/YouTube), clickable email, guide and section navigation, and 2026 copyright. All links depth-correct per page and translated per language.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Launch the two country sections as a cultural bridge, following the
approved Phase A spec and reusing the Events & Projects structure.
Hubs (6 pages, EN/SI/MK each):
- get-to-know-slovenia and get-to-know-macedonia
- Section header + newsletter form, 6-category filter (Places & Nature,
Culture & Traditions, Food & Flavours, History & Heritage,
People & Identity), 6 launch cards, empty state, client-side pagination.
- Five cards per hub link to articles that arrive in later batches.
Articles (6 pages, EN/SI/MK each):
- Welcome to Slovenia and Welcome to Macedonia, full text with the
auto-generated table of contents and sticky mobile header.
- Real, sourced images with attribution captions (place, photographer,
source link). Wikimedia photos also link the CC BY-SA licence and note
that the image was cropped. Images center-cropped to a uniform 3:2 and
downscaled. Each article's hero image is reused on its hub card.
Site-wide:
- Wire the For Students menu links (desktop and mobile) to the new hubs on
every page and in the header templates; rename the menu label from
North Macedonia to Macedonia (formal name kept in body content).
- Placeholder styles for images and cards still awaiting a sourced photo.
- Add caption styling for the hero image and give the article table of
contents clear separation from the footer.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>