Add Macedonian and Slovenian versions of the accommodation post (AI-drafted,
flagged for native review), rebuild EN with a proper Student Welcome Guide link
and a real Sources section, and add MK/SI blog index cards. Converter now treats
a secondary "# Sources" heading as a section.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Build full articles for "Learning Slovene", "Study in North Macedonia
(government scholarship)" and "Ad futura scholarship" in all three languages,
split from the trilingual Markdown sources (no machine translation). Dates
registered in ARTICLE_DATES and SEO re-injected per page. Blog index cards for
these already existed and now point to real content instead of stubs.
Hero images are placeholders pending topical photos.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#9.2 Full-width auto-rotating team hero (crossfade every 4.5s, transparent blue
overlay) directly under the About Us title — 11 landscape photos supplied by MSOS.
#9.4 "Our members & friends" appreciation section after Mission & Vision: a
contained photo carousel + name chips. Photos and names are PLACEHOLDERS
(names in "First L." format) pending the full members list.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add tools/build_listings.py: copies the top 3 cards from each language's News
hub into the homepage "Latest news" block (marker-wrapped), so editing the News
page now updates the homepage. The News hub stays the hand-edited source of truth
(it may hold curated teaser cards without a detail page).
Also: fix the Gallery meta description (was a copy of the FAQ text) and add a
durable gallery override to seo_inject.py; refresh llms.txt / links-for-bots.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Footer disclaimer on every page (informative-only, verify with official sources)
- "Good to know" callout across all Student Welcome Guide pages, pointing to
the "Was this page helpful?" box for reporting errors
- "Website content & liability" disclaimer card on the Official information page
All three languages (EN/MK/SI).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- #9.1 Reorder "Who We Are" nav to Our team, Timeline, MSOS Hub (all 225 pages)
- #4 Fix MK "Ask MSOS" label to "Прашај го МСОС"
- #11 Landing hero overlay -> radial blue vignette (lighter centre)
- #3 Gallery cards show the event date under the title (DD.MM.YYYY)
- #1 Membership/support CTA at the end of project pages (memorials excluded)
- #8 "Illustrative image" tag on blog/news photo captions
- #9.3 Mission & Vision: full-width gradient band + more space above title
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
New posts (Ad futura scholarship, learning Slovene, welcome days,
study in North Macedonia) across EN/MK/SI, plus blog index and _blog.css
updates. (Also carries the site-wide nav reorder and the illustrative-image
caption tag on the bank-account post.)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Convert the Hub / Become-a-member carousels from a pure-CSS marquee to a
JS-driven scroller with click-and-drag, touch swipe, and progress dots
(setupHubCarousel). Turn the "ways to be part of MSOS" cards into hub-style
photo cards and add the final Become-a-member photos (WebP).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Convert the fixed 6-card grid in the "There is more than one way to be
part of MSOS" section into the Hub's auto-scrolling marquee, reusing the
existing .hub-carousel mechanics with icon-based gradient cards. Applied
across EN/MK/SI.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the temporary placeholder images in the "What you can do here"
and "A glimpse of the space" sections with the final Hub photos
(converted to WebP) across EN/MK/SI, and drop the placeholder notes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the "Image placeholder" boxes on all 30 guide subpages + the guide
landing hero with real, optimized photos and captions, EN/MK/SI (93 figures).
- 31 source photos (up to 18 MB) optimized to WebP (<=1400px, all <500 KB)
as images/guide-<slug>.webp.
- Captions follow the Get-to-Know style: description + "Photo:/Фото:/Foto:"
+ linked source (or MSOS for own event photos). Photographer credits kept.
MK/SI descriptions are translated (proofread welcome).
- CSS: move the banner crop from the figure onto the <img> so the caption
shows below it (was clipped by the figure's fixed height + overflow).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A privacy-friendly help widget that answers visitor questions from the
site's own content and links to the full page — runs 100% in the browser,
no API, no server, no per-token cost.
- tools/build_search_index.py: parses every EN/MK/SI page into ~720
heading-level chunks per language -> assistant/index-<lang>.json
(lazy-loaded only when the chat is opened; gzips to ~80 KB).
- assistant.js: dependency-free BM25 search + multilingual stopword
filtering + a curated short-answer layer for common questions, plus an
accessible chat widget (role=dialog, keyboard, aria). CSP-safe (self only).
- assistant.css: scoped .msa-* styles in the site's teal palette;
responsive (full-screen panel on mobile).
- Injected on 208 pages (blog WIP excluded; picks it up when that lands).
Verified in a headless browser across EN/MK/SI: curated answers, search
fallback with correct ranking (rare terms win), correct deep links,
Cyrillic + Slovene diacritics, and zero console errors. Curated MK/SI
answers are machine-drafted — proofread before launch.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The homepage "Every Student Has a Story" section had a <button class=
"play-button"> with no handler and no video wired to it — clicking did
nothing. Remove the dead button; keep the team photo and section copy.
The story video can be wired back in later.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Site-wide health pass (excludes in-progress blog work). Verified with a
local server + headless browser: Timeline, homepage and gallery pages load
with zero console errors and no layout distortion.
Render bugs
- Timeline page (en/mk/si): fix ../../../ paths that overshot the site root,
so the main stylesheet and hero image load again.
- Meet Student Slovenia 2023 (en/mk/si): remove a <figure> referencing
event3-photo-11.png, an image that was never uploaded (broken image).
Performance
- Add intrinsic width/height to 1039 raster <img> tags to prevent layout
shift (CLS); 450 SVGs correctly skipped. Add a global
`img { max-width:100%; height:auto }` safety net so aspect ratio is
preserved and images never overflow.
- Preload the homepage hero (LCP) image on en/mk/si.
- Load Font Awesome non-blocking (media=print/onload swap) with a <noscript>
fallback, on 225 pages.
Accessibility
- Add aria-label to 57 unlabeled newsletter email inputs.
- Add an sr-only <h1> to the three "My Route" pages (had no h1).
- Add an .sr-only utility class.
SEO
- Add meta descriptions to legal/msos-hub/support pages (en/mk/si).
Note: MK/SI meta descriptions are machine-drafted and should be proofread
by a native speaker before considering them final.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Proactive security & health pass. No live/exploitable vulnerabilities were
found; these changes remove information-disclosure surfaces and add
standard hardening.
- Remove publicly-downloadable 1.1 MB full source dump (code_export.txt)
and stray empty l.php; add code_export.txt to .gitignore.
- Exclude dev files/folders (*.sh, *.py, docs/, templates/, tools/,
README.md) from the rsync deploy so they never reach the live server.
- .htaccess: add X-Frame-Options, Referrer-Policy, Permissions-Policy,
and a report-only Content-Security-Policy; add defense-in-depth deny
block for dev/VCS files (robots.txt & sitemap.xml left served).
- .htaccess: fix root redirect to canonical msosorg.com + /en/.
- Swap 4 project-page YouTube embeds to youtube-nocookie.com so no
Google cookies are set before consent (GDPR).
- Add rel="noopener" to 30 team social links on the About Us pages.
- Harden esc() in my-route.js to also escape single quotes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Fixed 3 SI event posts that were missing their </article> and </main> tags
- Replaced all punctuation em-dashes and spaced en-dashes (435 across 64 files)
with commas; normalized a SI date range to a hyphen to match EN/MK
- Verified the new Gallery + in-post gallery content is fully translated in
EN/MK/SI (headings, titles, links, nav labels) with no English leftovers
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Added the reusable lightbox gallery block to all 9 event posts in every
language (27 pages): shows 5 thumbnails + "+N more", opens the full-screen
viewer with the whole photo set
- Inserted inside <article> (before the author footer where present) so it
never breaks the sidebar/article flex layout
- Handled 3 SI posts that were missing their </article> tag by anchoring on
the newsletter section instead
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Each album is now a bordered card with a resting shadow and clear separation
- Blue brand tint over the cover photos; fades on hover so images brighten
- Whole card lifts with a stronger shadow on hover (album-level, not per image)
- Clicking anywhere on a card opens the event story page (removed the lightbox)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Each album is now a compact collage card (1 large + 2 small photos) with a
"+N" overlay on the last tile; multiple cards per row (responsive grid)
- Title + photo count + "Read the story" link under each card
- All album photos remain in the DOM (hidden) so the lightbox still browses
the full set; clicking any tile opens the lightbox at that photo
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- New multilingual Gallery page (en/mk/si) with 9 event albums and a
keyboard-accessible lightbox (prev/next scoped per album)
- Reuses existing event photos; links each album to its event post
- New css/pages/_gallery.css + setupGallery() lightbox in main.js
- "Gallery" link added to the "What We Do" nav (desktop + mobile) site-wide
- Gallery URLs added to sitemap.xml with hreflang
- Landing "Every Student Has a Story": removed backdrop blur on the video
thumbnail, kept the bluish gradient tint
Note: images/original/ (458 MB of raw source photos, gitignored + unused by
the site) moved out of the working tree to reclaim disk.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MSOS Hub page:
- "What you can do here": Porsche-style vertical image cards in a
continuous auto-scrolling marquee with edge fades (real photos placeholders)
- "A glimpse of the space": full-bleed band of 4 connected photos
- "A space we built together": full-bleed image banner with blue gradient overlay
- "Made possible by": partner logo tiles (Cultural Association + Ministry);
processed Ministry + Cultural Association logos from source art
- Copy/spacing polish; removed em-dashes; larger section spacing; deeper
final-CTA gradient so it no longer blends into the footer
Branding / partners:
- Per-language MSOS logos (SVG) in header + footer across all pages
- Partner carousel: added Ministry (wide variant), Cultural Association,
Embassy of North Macedonia, and Spletni Mojster (width-capped); de-duplicated
logos within each marquee group so new logos appear sooner
Footer:
- Build credit line (Spletni Mojster + Kristijan), clean centered text
- Synced MK/SI footers to EN (added missing About us + Timeline links)
Landing page:
- FAQ short CTA already avatar design (FAQ page kept its Email/Viber block)
- Swapped blurry stock video thumbnail for the real team photo
- Removed the intentional hero-background blur
Navigation:
- Mobile menu: use 100dvh so the language selector is reachable with submenus open
- Desktop: dropdown parents no longer navigate to dead "/#" links
Language suggestion banner:
- Dismissible, browser-language based banner suggesting the matching locale;
remembers choice in localStorage and waits for the cookie-consent choice
to avoid overlapping the consent card
Removed stale *.html.bak backup files.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Account holder on the bank card now shows the full legal name (…za
študentsko podporo in kulturno sodelovanje), matching the Official
information page, in all three languages
- Fix cramped spacing: the .sup-thanks rule had cut the partners section's
bottom padding to 24px, pushing the logos against the teal CTA; raised to
72px for clear separation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Fix the hero: override the global flex-row .container so the eyebrow,
title and lead stack and centre (they were laid out in a row)
- Short name -> "Društvo MŠOS za študentsko podporo in kulturno sodelovanje"
(official kratki naziv, normal case) instead of "MSOS"
- Add the main activity row: SKD 94.999 (activities of other membership
organisations n.e.c.), and relabel S.15000 as the institutional sector
(SKIS). All three languages.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
New legal/registration reference page at /{lang}/legal/ with the official
details: legal name, registered office, registration number (4128133000),
tax number (44932448), VAT status, SKIS activity, registration date, bank
(NLB d.d.), IBAN SI56 0284 3026 6115 703, SWIFT LJBASI2X, representative,
and contact. New css/pages/_legal.css. Linked as "Official information" in
the footer legal bar on all pages.
Also fills the Support page's bank-transfer card with the same real IBAN/
bank/SWIFT (placeholders removed). SEO block + hreflang + sitemap (210
pages) regenerated.
MK/SI labels AI-drafted -> native review. SWIFT LJBASI2X is inferred from
the IBAN bank code (02 = NLB) -> please double-check.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A promo page for the MSOS Hub — a renovated community/event space in
Ljubljana for gatherings up to 50 people. Sections: hero with quick facts,
the funding/partner story (Ministry of Foreign Affairs and Trade of North
Macedonia, Municipality of Ljubljana, Macedonian Cultural Association
"Macedonia"), what you can do here, what's inside (amenities), an image
placeholder gallery (photos pending — captioned), "made possible by", and a
booking CTA (mailto info@msosorg.com). New css/pages/_hub.css.
'MSOS Hub' added to the Who We Are dropdown (desktop + mobile) on all pages.
SEO block + hreflang + sitemap (207 pages) regenerated.
MK/SI translations are AI-drafted -> native review. Real photos to replace
the captioned placeholders when available.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
New donation/partnership landing page telling the MSOS story of being
community-built: hero, "built by the community" narrative, four ways to
support (partner/sponsor, donate, offer skills/space, spread the word),
"where your support goes" impact, a bank-transfer card (placeholder IBAN/
bank/SWIFT for the org to fill in), a partners thank-you marquee, and a
contact CTA (mailto info@msosorg.com). New css/pages/_support.css.
The header "Support MSOS" button (previously a dead <button>) now links to
/{lang}/support/ on all pages. SEO block + hreflang + sitemap regenerated.
MK/SI translations are AI-drafted -> native review. Bank details are
placeholders pending real IBAN/SWIFT.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Remove the duplicate Privacy/Cookie links from the footer Organisation
column; keep them (plus Manage cookies) in the bottom legal bar
- Show both info@msosorg.com and info.msosorg@gmail.com in the privacy +
cookie policy prose (en/mk/si)
- Fix the privacy policy's now-false "no tracking cookies" sentence to
reflect consent-based Google Analytics (en/mk/si)
MK/SI policy text is AI-drafted -> native review.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The policy previously claimed the site set no tracking/analytics cookies
and showed no consent banner - both untrue after adding GA4. Updated
en/mk/si: revised "how we use cookies", added an Analytics cookie type
and a Google Analytics third-party entry (_ga/_gid, Consent Mode), and
rewrote the consent section to describe the banner + "Manage cookies"
withdrawal. Bumped last-updated date. MK/SI text AI-drafted -> review.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds a per-language "Manage cookies" link to the footer legal bar on all
201 pages, wired to window.msosOpenConsent() so visitors can change or
withdraw their choice at any time (GDPR requirement). Verified: decline ->
re-open via link -> accept flips analytics consent to granted.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- consent.js: self-contained, non-blocking bottom banner in EN/MK/SI,
remembers the choice in localStorage, links to the per-language cookie
policy. Accept -> gtag consent 'update' granted; Decline stays denied.
- Head GA snippet restores a returning visitor's prior "granted" choice
before the first hit; loads /consent.js on every page.
- Re-openable via window.msosOpenConsent() for a "manage cookies" link.
Verified in-browser: shows for new visitors, Accept grants + remembers,
reload keeps consent without re-prompting, Slovene text + /si/ policy link.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- gtag.js injected on all 201 pages via tools/seo_inject.py + on 404.html
- Consent Mode v2 defaults all storage to 'denied' (EEA-safe: tag loads,
no tracking cookies until a consent banner grants analytics_storage)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Add datePublished/dateModified to Article JSON-LD on the 11 dated
articles (curated once from EN, applied to all languages)
- Replace og-default.jpg with the official brand OG image (1200x630)
- Add docs/launch-seo-checklist.md (go-live steps: redirects, Search
Console, analytics, rich-result validation, monitoring)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Add branded 1200x630 og-default.jpg; article pages use their hero as
og:image, others use the default
- Wire the existing (previously unlinked) favicon set into every page
- Add branded 404.html with root-absolute paths + noindex
- Emit Article + localized BreadcrumbList JSON-LD on all article pages
- Convert 74 heavy served photos to WebP (28MB -> 8.5MB, -70%), rewrite
references, add loading=lazy/decoding=async to below-fold images and
fetchpriority=high to heroes (protect LCP)
- Stop tracking images/original/ (458MB of unused source masters; kept on
disk, gitignored) and ignore .playwright-mcp/
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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>
- New scrollspy article page in all three languages, with guide-style
warning callout, sourced link list + last-checked line, and standard
author + newsletter blocks
- Blog listing featured card now links to the article and shows the hero
photo + read-time instead of the "coming soon" placeholder
- Add hero image and cropped MSOS emblem avatar; add .blog-read-time and
.blog-feat-thumb--image styles
MK/SI translations are AI-produced and need a native-speaker proofread.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pagination
- Fix the broken mobile layout on News & Projects: page numbers on top,
Previous / Next side-by-side below (shared .pagination component)
- Add a page chooser to the Blog: rewrite blog-filter.js to combine the
topic filter with client-side pagination (page size 6), add the pager
markup (all 3 languages) and .blog-pagination styles; it auto-hides
when a topic has one page
Events & Projects — match the Blog/News design
- Hero: uppercase letter-spaced eyebrow, sentence-case bold title, lead
subtitle, soft gradient; drop the redundant hero subscribe form and the
placeholder copy (signup still available in the bottom newsletter CTA);
align MK/SI titles to "Events & projects"
- Filters: News-style pills (dark active), left-aligned, with the thin
separator line below; .filter-inner wrapper aligns pills/separator with
the grid
- Spacing: reduce the gap under the header, add space below the filter so
the separator / Events sub-filter no longer collide with "All our
projects" (these hero/spacing tweaks also tidy the shared About/Get-to-know/
Timeline heroes)
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>
Why become a member
- Rebuild the benefits grid as a 3x3 bento: 7 icon cards + 2 real event photos
(with captions), fixes the orphan card, adds hover motion. Swap the blank
fa-house-heart (Pro) for fa-house-user (Free) on "Feel at home".
Join form
- Merge the duplicate "There is a place for you here" section into the form's
path step (student / supporter cards now carry the descriptions); drop the
separate section. New heading "There is a place for you here"; centred layout.
- Redesign the choice cards: colour-coded (student orange / supporter teal)
icon circles, descriptions, hover lift + "Choose this" reveal.
- Fix the stray "Support MSOS" submit button showing on the path step.
Conversion + polish
- Floating "Become a member" CTA that appears after the hero and hides near the
form/final CTA, so the ask stays reachable without scrolling to the bottom.
- More space between section titles and their cards (numbers, reals, tests,
showcase, benefits).
- Testimonials: Elena -> Katerina (Koper); un-swap Ana (Maribor) and Marko
(Ljubljana); remove the "sample quotes" placeholder note.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Hero gradient now spans edge to edge (full-viewport ::before band behind the
centred content) and is more colourful/on-brand (warm peach to soft teal).
- Both hero CTAs (Become a member / See what we do) share one size so they align.
- Add hover (lift + shadow + colour shift) and active (press) states to the
reusable .btn classes, so all buttons site-wide get consistent feedback; plus
a focus-visible outline for keyboard users.
- Remove the confusing Community/Events/Support/... tag pills (they duplicated
the hero lead sentence). member.js updated + now emits main.js on the member
pages so regeneration keeps the nav working.
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>
Client-side paginator (9 per page) reusing the site's pagination styling; page numbers with dots for long lists, Previous/Next with disabled states, resets to page 1 on filter change and hides when a single page.
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>
Replace the ad-hoc FAQ questions with the curated P1 + strong-P2 set from research/faq-questions-and-rating.md: 33 questions across 9 sections, priority-ordered, including the MSOS third-country questions and concrete facts (free bachelor+master, B2 only for specific programmes, no entrance exam except art/architecture/sport/dental-prosthetics, 30 Sept renewal, 8-day address registration, non-EU quotas).
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>
Add the auto-scrolling partners marquee to all three home pages (en/si/mk) with the six official partner logos (Embassy of Slovenia in Skopje, NLB, CTK, DSMP, Kampus, Povezani), trimmed to their artwork so they size consistently.
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>
Adds role, faculty (typed), and budget fields; the configurator now navigates to a new per-language results page (my-route/) carrying the answers in the URL. The results page renders a branded, printable report: profile chips, tailored ordered steps, city/budget/role/level focus tips, key page links, a disclaimer, and a Save-as-PDF/print button (print CSS shows only the report). my-route.js also has a Google Form hook to collect the profile for demographics once configured.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds a 5-card featured row (journey, deadlines, eVS apply, residence permit, accommodation) above the stages, and converts the six stage cards into native details/summary accordions (first open by default, chevron rotates). Links inside open into a compact grid. Cuts the empty white space and visual noise.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replaces the flat crowded quicklink wall with six numbered stage cards (Start here, Apply to study, Residence and healthcare, Move and settle in, Everyday student life, After your first year), each with an icon, a one-line description, and its topic links. New guide-cats/guide-cat styles; section retitled to Find your way through the guide.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds a reusable {video} block (responsive 16:9 youtube-nocookie embed) rendered as a prominent orange callout with title and caption, placed right after the warning box on evs-application-guide so students see it first. Trilingual title/caption.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Voting now locks the widget for the page view (buttons disabled, chosen one highlighted, thank-you shown); reload to vote again. Fixes the CSS bug where display:flex overrode the hidden attribute so buttons stayed clickable. On No, an optional comment box posts to a separate Comment field. Adds a guarded [hidden] rule and selected/disabled/comment styles.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Every guide page and the landing now end with a help section: an Email us contact, a prominent Viber community join button, and a Was this page helpful Yes/No widget. guide-feedback.js records the vote in localStorage and on No invites emailing MSOS or asking in Viber; it exposes a sendVote hook for later central collection.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
student-budget gains an illustrative monthly budget table (per-category ranges, ~EUR455-850
total) tied to the EUR484.88 means minimum. academic-life gains a section on what student
status grants and how long the rights last (one programme per level, n+1+1 extensions).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
choose-a-programme gains concrete info-day timing (mid-Feb Fri/Sat, visit 2-3), a
question checklist, and the aptitude-test faculty list + timing. admission-and-enrolment
gains the national three-round system, omejitev vpisa (end-April), basic/additional
criteria, and July-October enrolment timing.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds the hard fact that self-funded foreign degree students cannot get a subsidised
Studentski dom place, the faculty-brokered non-subsidised route (Dijaski dom Vic), and
the free m2 room-brokerage contact (Studentska hisa SRCe, 080 98 67, svetovalnica.com/sobe).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds student e-bike pricing (EUR30 / EUR25 ISIC, 30-min free, NAZAJVSOLO coupon),
BicikeLJ/MBajk parity, LPP 2025/26 renewal and pre-sale dates, Potniski center address,
the Slovenija intercity option, and the Urbana+IJPP unlock note.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Splits the health-insurance pathway into the Macedonia side (getting the bilingual
RM/SI 3 from the FZOM branch) and the Slovenia side (converting it into the Potrdilo
MedZZ certificate at ZZZS), and names the actual certificate issued.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
where-to-apply now includes the full portal appointment walkthrough (steps, Slovenian
labels, 120-minute confirmation) and an appointment-day warning. means/address gains a
sample parent support statement and the concrete EUR484.88 monthly figure.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rewrites the residence permit page from vague signposting into a full walkthrough:
per-document explanations, exact fees, EUR484.88 means rule, 8-day address
registration, 30 September renewal deadline, sub-90-day rule, and the confirmation
that permits border crossing. Corrects photo size to 33x45mm.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rewrites the ten application/admission pages to the deeper v3 English
master, trilingual: complete-student-journey (9-stage timeline),
choose-a-programme, bachelor-application, master-application,
application-deadlines (2026/2027 tables), evs-application-guide,
recognition-of-education, document-preparation, admission-and-enrolment,
tuition-and-scholarships. Adds hero placeholders, Sources sections, and
warning/macedonia/msos boxes. Tuition notes bilateral tuition-free
treatment; deadlines shown per university with verify-latest guidance.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rewrites the six living/arrival/benefits pages (student-accommodation,
prepare-to-move, arrival-checklist, administrative-basics, student-meals,
student-transport) to the deeper v3 English master, trilingual, with
hero placeholders and Sources sections. Transport states subsidy applies
regardless of distance (old 2 km rule explicitly retired); meals keep the
current €5.19; dorm eligibility distinction and scam/lease checklists added.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rewrites the six residence/health pages (visa-and-residence-explained,
student-residence-permit, where-to-apply-for-residence,
means-accommodation-address, rm-si-3-health-insurance,
healthcare-in-slovenia) to the deeper v3 English master, trilingual.
Adds backward-compatible generator support for per-page hero-image
placeholders and a "Sources and further information" section, plus
.guide-last-checked styling. Owner decisions applied (student work on
the study permit vs employment permit; sufficient means shown as
"check current"). SI/MK bodies are MSOS working translations pending
native proofread.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Completes the 30-page guide: adds programme choice, recognition,
documents, admission, tuition, residence, health, accommodation,
arrival, admin basics, meals, transport, student work, academic
life, study cities, budget, wellbeing, renewal, and official
sources, each in EN/SI/MK. Landing quicklinks now list all 29
topics; adds guide-linklist styling and a links block renderer.
SI/MK bodies of dense administrative content still need a native
proofread before publishing.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Complete the three remaining Macedonia stories with sourced photos, so
both country sections are now fully illustrated.
Articles (EN/SI/MK each), placeholders replaced with real images:
- A Table Full of Macedonia (shared table, tavče gravče, ajvar,
pastrmajlija).
- Music, Dance and the Moments That Bring Us Together (oro celebration,
tapan and zurla, kopachkata, an MSOS event).
- History You Can Still Walk Through (Stobi, Heraclea Lyncestis, Kokino,
Makedonium).
Each image is center-cropped to a uniform 3:2, downscaled, and given an
attribution caption with place, photographer where known, and source
link.
Captions:
- Replace bare one-word labels with a short descriptive phrase in all
three languages, so a caption reads "Kokino, a prehistoric megalithic
observatory" rather than just "Kokino". Applies across the food,
culture, and heritage stories.
- Support an author-only credit with no external link, used for the
photo from the MSOS archive.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Complete the two country sections with the place, food, culture, and
heritage stories, so every hub card now leads to a full article instead
of a pending page.
Articles (EN/SI/MK each):
- Slovenia: Lake Bled Beyond the Famous View, A First Taste of Slovenian
Food, Slovenian Habits That May Surprise You, and Slovenia's Stories in
Stone and Tradition.
- Macedonia: Ohrid, More Than a Postcard, plus the earlier Skopje and
Ljubljana stories that were still untracked.
- Table, Music and Dance, and History articles for Macedonia are in place
and still use image placeholders until their photos are sourced.
Images:
- Real, sourced photos wired into every finished article, each with an
attribution caption (place, photographer where known, source link).
Images are center-cropped to a uniform 3:2 and downscaled; webp and
jfif sources converted to jpg.
- Each article's hero image is reused on its hub card.
- Welcome to Macedonia now opens with Macedonia Square in Skopje; the
Church of St. John at Kaneo photo moves to the Ohrid story.
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>
Add the 2025 events batch to the Events & Projects section, each as a
full article page in all three languages following the established
template (auto-generated TOC, sticky mobile header, inline figures):
- Humanitarian sports tournament in Maribor (05 Apr 2025)
- Public gathering for the Kocani victims (21 Mar 2025)
- Paint & Wine at Sunset in Gorizia (08 Mar 2025, with aftermovie embed)
- Public gathering for Frosina Kulakova (08 Feb 2025)
- Watching handball together in Slovenia (25 Jan 2025)
Also:
- Add 33 event images to images/ (oversized JPGs downscaled to <=1600px).
- Add localized cards for the five events to the EN/SI/MK listing pages.
- Remove the two placeholder cards (Bill Walsh, PM mental models) and
delete the testproject article folders they linked to.
- Convert punctuation dashes in the new copy to commas or sentence
breaks for a more human tone; keep compound-word hyphens.
- Add docs handover brief for the future Get to know Slovenia and
North Macedonia sections.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a Proxify-style category filter and real client-side pagination to
the Events & Projects listing across all three languages (EN/SI/MK).
- Filter: a pill nav (All / Events / Student Life / Projects / Webinars)
plus a contextual sub-chip row for Events (Sports / Cultural /
Entertainment / Educational). Buttons carry stable data-filter /
data-subfilter keys and cards carry data-category / data-subcategory,
so a single language-agnostic handler drives all three locales.
- Pagination: replaces the hardcoded dead 1..10 links with real
client-side paging (9 per page). Shows a single page today and grows
automatically as content is added, with windowed page numbers,
enabled/disabled Prev/Next, and smooth scroll-to-top. Integrates with
the filter (resets to page 1, repaginates, hides when no matches).
- Show a localized empty-state message when a filter has no results.
- Nudge the filter block up and add space below it for even spacing.
- Drop the duplicate News pill (News has its own top-nav section) and
retag the placeholder card from announcements to projects so it stays
reachable.
Verified with jsdom across EN/SI/MK: filtering, sub-filtering, empty
state, single/multi-page navigation, and filter/pagination interaction.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>