Commit Graph

207 Commits

Author SHA1 Message Date
popovskik 7bccf716de fix(mobile): language banner vs Ask-MSOS pill + guide button overflow
- On phones the language-suggestion banner sat at the bottom and the floating
  "Ask MSOS" pill (higher z-index) overlapped its bottom-right, hiding the
  dismiss (x) button. Raise the banner above the pill (bottom: 84px) so they
  stack and the x is fully visible and tappable.
- The success-screen "Read the welcome guide" button used the base .btn
  white-space:nowrap, so the long MK label overflowed the box on narrow
  screens. Allow .ms-success-links .btn to wrap (white-space: normal).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-27 16:09:39 +02:00
popovskik 9a9eec21c5 Merge pull request 'content(mss-2026): reword live-stream CTA + fix MK grammar' (#24) from fix/mss-2026-copy into develop
Deploy to Production on Develop Push / deploy (push) Successful in 21s Details
Reviewed-on: #24
2026-08-27 10:16:26 +00:00
popovskik 01b0ebeadf content(mss-2026): reword live-stream CTA + fix MK grammar
- Live-stream line now invites online registration ("Не можеш да дојдеш во
  живо? Пријави се и следи го настанот онлајн." / EN / SI equivalents).
- MK grammar fix: "некој да им го кажел" -> "некој да им каже".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-27 12:10:22 +02:00
popovskik 7519f64047 Merge pull request 'Publish Meet Student Slovenia 2026 (banners, Capital sponsor, NLB branch venue)' (#22) from feat/mss-2026-publish into develop
Deploy to Production on Develop Push / deploy (push) Successful in 21s Details
Reviewed-on: #22
2026-08-27 05:21:05 +00:00
popovskik 11c3c25e1e content(mss-2026): "past years" wording for the previous-editions album link
Change the "See the full album" caption under the moments gallery from
singular last-year to plural past-years, across MK/EN/SI.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-27 07:15:56 +02:00
popovskik 5f56e79e5d Merge pull request 'privacy: disclose Google (Analytics + Forms) as data processor (GDPR)' (#21) from fix/privacy-policy-processors into develop
Deploy to Production on Develop Push / deploy (push) Successful in 25s Details
Reviewed-on: #21
2026-08-27 05:14:18 +00:00
popovskik 903faf54fe content(mss-2026): add sponsor logo + event banners, update venue to NLB branch
- Add Capital Asset Management sponsor logo (images/partners/capital.png),
  replacing the plain-text sponsor name in the event partners row.
- Set the in-article hero to the clean event banner (mss-2026-hero.webp) and
  the News/homepage listing cards to the sponsor-strip promo variant
  (mss-2026-card.webp) via a new front-matter `card:` field.
- Update the venue everywhere (event page key info + prose + confirmation
  text, and the homepage promo banner) to
  "НЛБ експозитура, локација East Gate Mall, Скопје" (EN: NLB branch;
  SI: poslovalnica NLB), across all three languages.

Build tooling: build_content emits an optional data-card on the hero <img>;
build_listings prefers data-card as the listing thumbnail so the card can
differ from the in-article hero. Rebuilt news pages, listings and search index.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-27 07:05:41 +02:00
popovskik 827b6b95f5 Revert "chore(release): exclude Meet Student Slovenia 2026 from publish"
This reverts commit fb26cda to publish the MSS 2026 event page,
homepage banner, and listings ahead of the 4 Sep 2026 event.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-27 06:50:17 +02:00
popovskik 9ffe440a66 content(privacy): disclose Google (Analytics + Forms) as data processor (GDPR)
Name Google Forms (membership/feedback/event forms) and Google Analytics as
processors in the privacy policy, add form-submission data to 'what we collect'
and its legal basis, and note the possible US transfer under SCCs. Applied to
EN/MK/SI. Draft wording — pending review.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-26 02:45:41 +02:00
popovskik 14d7e7e280 Merge pull request 'seo: enable canonical-host 301 redirect to msosorg.com' (#19) from seo/canonical-host-golive into develop
Deploy to Production on Develop Push / deploy (push) Successful in 24s Details
Reviewed-on: #19
2026-08-26 00:00:23 +00:00
popovskik ed76ee6db0 Merge pull request 'Go-live content: CMS + 2025-26 events (real photos), MK/SI/EN guide & deadline fixes, press interview' (#20) from release/golive-content into develop
Deploy to Production on Develop Push / deploy (push) Successful in 22s Details
Reviewed-on: #20
2026-08-26 00:00:13 +00:00
popovskik 4c88e71294 Merge branch 'fix/press-and-deadline-consistency' into release/golive-content 2026-08-26 01:58:09 +02:00
popovskik 99a0ce7061 Merge branch 'fix/mk-guide-copy-corrections' into release/golive-content 2026-08-26 01:58:08 +02:00
popovskik b0ac0831b3 seo(htaccess): enable canonical-host 301 to msosorg.com (go-live)
Now that msosorg.com serves the docroot, 301 every non-canonical host
(the temp domain msos.spletnimojster.si, any www., the origin host) to
https://msosorg.com to consolidate ranking signals. Runs before the
HTTPS-force so the temp domain reaches the canonical in a single hop; the
condition excludes msosorg.com itself so there is no redirect loop.

Mark the redirect steps done in the launch checklist.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-26 01:43:46 +02:00
popovskik 659f720e44 content(press): add MSOS president interview (YouTube) to 'In the media'
Add the interview 'Македонците се поврзуваат — интервју со лидерот на МСОС'
(youtube.com/watch?v=Vi6wzK9Zfwc) as the first item in the In the media list
on the EN/MK/SI press pages, with localized descriptions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-26 01:30:43 +02:00
popovskik da3acbff5e fix(guide): spell out abbreviated deadline months in SI/EN tables
Mirror the Macedonian reviewer's date fix to Slovenian and English: expand
feb/mar/sep... to full month names inside the deadline table cells on
application-deadlines, bachelor- and master-application (SI + EN).
Replacement is scoped to <td> cells to avoid touching words like SI 'nov'.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-26 01:29:59 +02:00
popovskik ac80736026 fix(guide,mk): apply Macedonian reviewer corrections
- Landing intro: 'заради' -> 'поради' (додипломски/магистерски студии)
- Landing study-cities paragraph reworded (Словенија не е само Љубљана)
- student-accommodation: 'Почнете рано' -> 'Почнете порано со барањето'
- Spell out abbreviated months in deadline tables (фев->февруари, сеп->
  септември, ...) on application-deadlines, bachelor- and master-application
- ljubljana-through-our-eyes: 'каналот Градашчица' -> 'каналот на Градашка река'

Skipped (do-not-touch): reword of the .guide-help 'Se uste vi treba pomos?'
feedback block. MK only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-26 01:17:14 +02:00
popovskik fb26cda8cc chore(release): exclude Meet Student Slovenia 2026 from publish
Remove the MSS 2026 news page, homepage promo banner, and listing entries,
then rebuild listings/sitemap/llms.txt/search-index so no MSS references
remain. Keeps shared event CSS/JS intact for other events. MSS 2026 stays
on feat/no-code-cms for a later, separate publish.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-25 23:47:18 +02:00
popovskik 5863c295b7 Merge origin/develop into feat/no-code-cms
Bring CMS/event branch up to date with develop. Net incoming change is the
CI deploy runner config (install rsync/openssh); all other develop history
was already present via shared kristijan-dev lineage.

Meet Student Slovenia 2026 remains on this branch only (unpublished).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-25 22:58:51 +02:00
popovskik c2a7724b0c chore(assistant): rebuild search index after content update
Regenerate assistant/index-{en,mk,si}.json to reflect real event photos
and Latinized titles.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-25 22:28:05 +02:00
popovskik a963aade36 content(projects): swap event placeholders for real photos + copy cleanup
Replace event-placeholder.svg with real .webp photos across all 2025-2026
event/project pages (EN/MK/SI), updating OG/Twitter/JSON-LD image refs,
inline article images, and content/events/*.md. Also Latinize EN/SI titles
(e.g. "Kafanska večer") and drop empty "In numbers" TOC sections.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-25 22:25:26 +02:00
popovskik dc7b8b6809 content(projects): add 7 events/projects (2025-2026) with photo placeholders
Add trilingual (EN/MK/SI) event pages for seven MSOS activities:
- Joint Walk "Path Around the Wire" (May 2025)
- Kafanska vecher (May 2025)
- Watching the Macedonia-Wales match (Nov 2025)
- Team-building and MSOS Hub opening (Feb 2026)
- SEPA webinar with the National Bank of RNM (May 2026)
- President Siljanovska-Davkova lecture at UL (May 2026)
- Morning Coffee in front of CTK, 4th edition (Jun 2026)

Each page uses a neutral placeholder image (images/event-placeholder.svg)
in every hero/inline/gallery slot, with captions describing the intended
photo so real images can be dropped in later. Pages follow the existing
event template (narrative sections + scrollspy + photo gallery); no
"At a glance" classification box.

Wires the events into the Projects hub (filter cards), News hub, sitemap,
bot-discovery files and the offline search index. Unrelated pages were
kept out of this commit to avoid build-tool encoding churn.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-22 17:58:04 +02:00
popovskik f66db9873f content(guide): clarify visa D vs residence permit and residence application routes
Update the Student Welcome Guide residence pages (EN/MK/SI):

- visa-and-residence-explained: clarify that visa D mainly applies to
  study exchanges (e.g. Erasmus, up to one year) and is handled only by
  the embassy, while degree students use the temporary residence permit
  decided by the administrative unit (a permit, not a "visa").
- where-to-apply-for-residence: explain that the embassy only forwards
  the application to the administrative unit (slower, costlier); present
  applying directly at the administrative unit as usually faster and
  cheaper with the same documents; replace vague checklist prompts with
  concrete facts (appointment contact, standard document list, official
  Slovenian translation, certification, criminal-record recency, fees);
  keep the cautious lawful-stay wording and add a warning about leaving
  Slovenia while the application is pending.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-22 16:33:29 +02:00
popovskik af294ce8a4 chore: stop tracking compiled .pyc bytecode
These auto-generated Python caches were committed before .gitignore
listed __pycache__/ and *.pyc, so Git kept tracking them and they showed
up as spurious changes on every build. Untrack them (files stay on disk)
so .gitignore takes effect and they no longer appear in diffs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-22 08:17:17 +02:00
popovskik 7bd85c11a0 feat(event): add print/PDF export styles for event pages
Add a @media print block so event pages export cleanly to PDF/print:
keep faithful colours (print-color-adjust: exact), unstick the header,
hide screen-only chrome (chat bubble, cookie consent, sticky CTA, back
link, newsletter box, mobile nav), and reset the hero image to full
width. No effect on the on-screen layout.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-22 08:16:04 +02:00
popovskik 027a888539 fix(news): style Sources lists with guide-linklist across articles
The Sources sections on the Welcome Days, accommodation-search and
Ad futura scholarship articles used bare <ul>/<ol> lists, which rendered
as default bullets/numbers with plain blue links instead of the site's
standard source-list style (chain icon, teal links, row dividers).

Add class="guide-linklist" to the Sources lists (converting Ad futura's
<ol> to <ul>) in the content/ source markdown and the generated en/mk/si
pages, matching the Student Welcome Guide. Edits scoped to the affected
articles to avoid unrelated build-tool reformatting churn.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-22 07:44:09 +02:00
popovskik 09dbeb2bc7 fix(home): restore homepage event banner styling
The .event-banner rules were dropped during an _event.css rewrite, so the
homepage promo banner rendered unstyled (full-width dark text, no gradient).
Restored the banner styles and removed the em-dash from the banner copy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-20 23:40:01 +02:00
popovskik 954dfb4d7d feat(event,support): refine event page + add supporter form to Support page
Event page (Meet Student Slovenia 2026):
- Guide-style centred header with wide banner hero and caption
- Key facts on a plain background: When/Where side by side, subtle
  live-stream line, centred Register CTA, full-width note
- Partner logos (NLB patron, Embassy support) + sponsor
  Kapital Aset Menadžment DOOEL / Капитал асет менаџмент ДООЕЛ
- Inline photos between sections; em-dash removed from the subtitle
- "Support MSOS" call-out linking to the support page

Support page:
- Added the become-a-member supporter flow (supporter path only) via a
  new data-only-flow="supporter" mode in member-form.js; submits to the
  same combined Google Form tagged type=supporter
- Hero "Become a partner" button now scrolls to the form
- .ms-section carries its own brand vars so the form renders off the
  member page

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-20 23:35:43 +02:00
popovskik 270df5b2f8 feat(news): add Meet Student Slovenia 2026 event page
Trilingual (EN/MK/SI) promo page for the upcoming "Meet Student Slovenia
2026" event, built through the content CMS (content/news/...) plus custom
sections styled to match the site.

- Guide-style centred header with a wide banner hero and caption
- Plain-background key facts (When/Where), subtle live-stream line,
  centred Register CTA, and partner/patron/sponsor logos
  (NLB Banka, Embassy of Slovenia; Capital Financial Center as text)
- Auto-scrolling "Moments from previous years" carousel + inline photos
- Embedded registration form (dropdowns, required study-plan fields,
  multi-field study preferences) wired to a Google Form; left-hand
  floating Register button
- Homepage promo banner (EN/MK/SI) + auto-listed in News hub, homepage
  latest, sitemap, llms.txt and the offline search index
- New assets: css/pages/_event.css, event-register.js

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-20 22:46:09 +02:00
mark e063b3cd4a ci: install rsync in deploy runner container
Deploy to Production on Develop Push / deploy (push) Successful in 20s Details
2026-08-20 08:30:09 +00:00
mark 9c451f12c5 ci: trigger deploy after migration to sh37.neoserv.si
Deploy to Production on Develop Push / deploy (push) Failing after 14s Details
2026-08-20 10:28:27 +02:00
popovskik 2d535db7d5 feat(cms): U4 one-command site build + local preview
Add tools/build_site.py: runs the full pipeline in dependency order
(build_content -> build_listings -> seo_inject --all --sitemap ->
build_botlinks -> build_search_index), each as a subprocess so a failing
step aborts the build before anything downstream runs (no partial
deploy). --check verifies non-destructively; --images also runs
optimize_images. This is what CI will run in U5.

Fix a build_content idempotence bug found via U4: the hero and
article-header regions were emitted with leading indentation while the
regex left the template's pre-tag whitespace in place, so indentation
compounded (+16 spaces) on every rebuild. First line is now unindented;
the full build is verified idempotent (identical git tree across two
runs). Added a fixpoint test (re-rendering a page's own output is
byte-identical) so this can't regress.

docs/local-preview.md: build + serve on :8000 in all three languages.
tools/README.md: document build_site + build_content.

26 tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-08 17:04:00 +02:00
popovskik 8ff968739a feat(cms): U3 derive article dates from content/ front-matter
Replace the hand-maintained ARTICLE_DATES registry as the source of
truth with dates read from content/ front-matter, so publishing a post
via the CMS needs no manual registry edit (plan R4).

- tools/content_index.py: load_dates() reads content/ front-matter into
  {source_folder/slug: {published|modified: iso}}. Standalone (os+yaml),
  no import cycle with seo_inject.
- tools/seo_inject.py: ARTICLE_DATES is now {**static_fallback,
  **content_dates}; content wins. The static table is kept only as a
  fallback for entries not present in content/.
- migration now preserves the published-vs-modified distinction
  (date_type), so the switch is byte-identical: content-derived dates
  equal the old static table exactly (17/17, incl. the one 'modified').

Verified: full `seo_inject --all --sitemap` + build_listings +
build_botlinks run produces ZERO changes to any site page. build_content
--check still reproduces all 51 pages.

build_botlinks.py needs no change (it scrapes built pages, which are a
pure function of content/). Listings get content-driven dates for free
via seo_inject.ARTICLE_DATES.

tools/tests/test_content_index.py: 5 tests (dates == legacy registry,
merged registry unchanged, published/modified distinction, events key on
projects/<slug>, one ISO date per entry).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-08 16:47:03 +02:00
popovskik 596290acf8 feat(cms): U2 render content/ into detail pages (characterization-verified)
Add tools/build_content.py: renders every content/ entry into its blog /
news / event detail page by self-templating the page's own chrome and
replacing only content-derived regions (title, article header, hero,
body, and — for new pages only — the scrollspy).

Faithful reproduction, proven against the live site:
- body_format: html fragments injected verbatim, so guide-boxes, inline
  figures and event galleries render unchanged.
- scrollspy sidebars are preserved (labels are hand-curated, shorter than
  the H2s); only generated when a page has none.
- <title> suffix derived per page, so EN/SI " - MSOS", MK " - МСОС", and
  suffix-less event titles all reproduce exactly.
- hero /images/… rewritten to the page's ../../../ depth.
- ASCII-only console output (no cp1252 crash on Windows/CI).

tools/tests/test_build_content.py: 8 characterization tests; the core one
renders all 51 pages and asserts each is semantically equivalent
(whitespace/attr-order-insensitive) to the current page — the R5
no-regression guarantee.

Does NOT overwrite the committed pages; whether generated pages are
committed vs built fresh in CI is decided in U4/U5. Run:
  python tools/build_content.py --check   # verify equivalence
  python tools/build_content.py --write    # emit pages (for U4)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-08 16:36:11 +02:00
popovskik 9ddd0f88ef 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>
2026-08-08 16:18:29 +02:00
popovskik 6204db5f0c docs: add no-code CMS implementation plan 2026-08-08 16:09:31 +02:00
popovskik 6054312ad4 Merge pull request 'kristijan-dev' (#17) from kristijan-dev into develop
Deploy to Production on Develop Push / deploy (push) Successful in 16s Details
Reviewed-on: #17
2026-08-08 10:32:25 +00:00
popovskik 23d89bfff8 Add photo copyright & usage clause (EN/MK/SI)
Add a "Photos, images & copyright" card to the Official information
(legal) page in all three languages, plus a short rights/removal note
on the Gallery and Events & Projects pages.

- Clarifies most images are MSOS property or used with permission, and
  that third-party images (Get to know Macedonia/Slovenia, Student
  Welcome Guide) remain their owners' property.
- Requires prior written permission to reuse MSOS's own images.
- Adds a photo-removal / consent-withdrawal path via info@msosorg.com.
- New shared .photo-rights-note style in css/pages/_gallery.css.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-08 12:24:25 +02:00
popovskik e8604a9665 Gallery: photos open lightbox, add project button, watermark our photos
Gallery flow:
- Album covers now open the photo lightbox directly (full album set), while
  the title/"Read the story" link opens the article. Previously the whole card
  linked to the article and photos were only at the bottom of it.
- Each album carries its full photo set in a hidden js-lightbox grid; added
  main.js support for [data-lightbox-target] cover triggers.
- Added the missing main.js include on the gallery page (its lightbox, mobile
  menu and language switcher never ran before).
- Lightbox gained an optional "Read the story ->" button (data-project-url /
  data-project-label) shown only for gallery albums.

Watermark:
- Baked a subtle "(c) msosorg.com" watermark (bottom-right, sized per image)
  into 114 of our own event/community photos. Stock/partner/logo/icon images
  excluded. Clean originals backed up to images/_originals/ (git-ignored); the
  script always re-derives from them so re-runs never stack.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-08 01:55:34 +02:00
popovskik 91d29121c0 About Us "Through the years": retitle, redesign names, thank-you note
- Renamed the section from "Our members & friends" to "Through the years"
  (Низ годините / Skozi leta) — a retrospective framing that honours everyone
  who has been part of MSOS without labelling anyone a current member or friend.
  Updated title, marquee aria-label, image alt text and the dev comment.
- Removed dashes from the hero intro, section intro and closing note.
- Replaced the placeholder names with the full list of 74 contributors, kept
  the original five, sorted alphabetically per language (Latin for EN/SI,
  Macedonian Cyrillic with native collation for MK).
- New design for the names: a clean multi-column credits wall (accent dot,
  hairline rows, hover) instead of pill chips (css/pages/_about.css).
- Added a thank-you note to members past, present and future, and to everyone
  who has volunteered, contributed or supported MSOS. EN/MK/SI.

MK/SI copy is AI-drafted and pending a native proofread.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-08 00:57:53 +02:00
popovskik a15e9f20f1 About Us: real member photos in the carousel + richer hero
- "Our members & friends" carousel now uses 22 curated, web-optimised photos
  (members-01..22.webp) from the members & friends library, chosen for warmth,
  smiles, hugs, events, team and community; applied to EN/MK/SI, with the
  seamless-loop duplicate set and per-language alt text. Old placeholder
  event photos removed.
- Hero slideshow enriched with 6 new candid 1920px slides (group hug, pizza,
  picnic, coffee, night group, arms-up cheer) interleaved among the existing
  crowd shots; the JS picks up all slides automatically (now 17).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-08 00:02:02 +02:00
popovskik 57a3ca187b Press: add /press/ page (EN/MK/SI) + footer link + coverage list
- New Press & media page in all three languages: press-enquiries contact,
  a 6-way logo download grid (EN/SI/MK x colour/white), an "MSOS at a glance"
  fact sheet (full legal name + preferred name), and a grouped coverage list
  (media, universities & institutions, official records, reference, government)
  with 29 verified third-party links, each described in EN/MK/SL.
- Styling in css/pages/_press.css (imported by main.css), on the site's tokens.
- Footer: added a "Press & media" link to the Organisation column on every page
  (all languages, relative paths correct for each page depth).
- SEO/sitemap refreshed so the new pages carry NGO schema + hreflang.

MK/SI copy is AI-drafted and pending a native proofread.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-07 23:35:49 +02:00
popovskik 0d49293693 GEO: FAQPage/NGO/Event schema + autonomous generation for new projects
Generative Engine Optimization pass so AI answer engines (ChatGPT, Gemini,
Perplexity, AI Overviews) can confidently identify and cite MSOS.

Schema (tools/seo_inject.py, propagated to all 231 pages):
- FAQPage JSON-LD parsed from the /faq/ Q&A blocks (33 Q&A x EN/MK/SI)
- Organization upgraded to NGO with entity-disambiguation fields:
  alternateName (all spellings), description, areaServed Slovenia,
  knowsLanguage, and foundingDate 2023-03-05
- Event JSON-LD on all 9 /projects/ recap pages (date + real location)

Autonomous for future content (no code edits to add a project):
- Event/Article dates auto-read from the English page's publish date;
  event city auto-detected from the body (Slovenian-city whitelist).
  ARTICLE_DATES/PROJECT_LOCATIONS are now optional overrides only.
  (Auto-detect corrected Paint & Wine to Nova Gorica.)
- build_listings.py: auto-date fallback so undated new content still lists
- pre-commit hook now runs seo_inject.py --all --sitemap first, then
  listings/botlinks, and re-stages changed pages (idempotent)

Docs: docs/geo-offsite-worklist.md - copy-paste-ready off-site plan
(Wikidata, Wikipedia fixes, directories, Google Business, AI-visibility tests).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-07 22:17:03 +02:00
popovskik 2b30a6c4cb Merge pull request 'Student Welcome Guide changes-2 review + Become-a-member carousel (EN/MK/SI)' (#16) from kristijan-dev into develop
Deploy to Production on Develop Push / deploy (push) Successful in 14s Details
Reviewed-on: #16
2026-08-05 22:04:06 +00:00
popovskik 43847ba935 Student Welcome Guide: batch fixes from changes-2 review (EN/MK/SI)
Layout / CSS (css/pages/_guide.css):
- Left-align .guide-checklist and .guide-steps (margin 16px 0) so bullet
  lists no longer drift right inside the flex article-body.
- Make .guide-table-wrap shrink to the viewport (width:100%; min-width:0)
  so wide tables scroll horizontally on mobile instead of overflowing.
- Add a reusable .guide-cta pill button for inline calls to action.

Content, applied across all three languages:
- Replace the info-pill row (guide-meta) on every guide page with a
  "Last checked" eyebrow above the title.
- application-deadlines: correct "North Macedonian citizen" to
  "Citizen of North Macedonia".
- study-cities: reword the "X map:" run-on paragraphs, give Nova Gorica
  and Celje proper strengths/challenges bullet lists.
- tuition-and-scholarships: fix the leftover "Link the exact call" note
  and add a prominent SRIPS 380th-call button.
- student-accommodation: retitle to "full-time student", delete the SRCe
  brokerage paragraph, add an ownership-check (land register / GURS)
  paragraph.
- prepare-to-move: add bus, flight, airport-transfer and car-sharing
  providers with links.
- administrative-basics: link the DR-02 form and FURS tax-number page and
  the bank-account blog; remove the "A common sequence" section.
- official-sources-and-checklists: remove the "Checklists to build"
  section and the pre-publication reminder sentence, and tidy the meta
  description that referenced the removed section.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-06 00:01:04 +02:00
popovskik b058c80713 Become a member: photo-only carousel + drop unconfirmed figures note
- Remove the coloured placeholder cards behind the "ways to be part of
  MSOS" carousel (override the _hub.css gradients on .mm-use) and load the
  photos eagerly with fetchpriority so they appear immediately.
- Remove the "Figures to confirm before launch." note (and the SI
  equivalent) from the MSOS-in-numbers section.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-06 00:00:30 +02:00
popovskik 541d155bc3 Merge pull request 'Landing/About/guide polish + Proxify-style category filter bar' (#15) from kristijan-dev into develop
Deploy to Production on Develop Push / deploy (push) Successful in 15s Details
Reviewed-on: #15
2026-08-05 20:31:39 +00:00
popovskik 5d50604af4 Landing/About/guide polish + Proxify-style category filter bar
About Us:
- Replace the appreciation photo with an Apple-style scrolling marquee that
  focal-zooms the centred photo (main.js + _about.css); heading now sits above
  the carousel; remove the "Have any questions?" FAQ CTA (EN/MK/SI).

Landing hero:
- Turn the flat blue overlay into a Proxify-style radial vignette (light centre
  over the CTA, dark edges) and raise the "Become a member" button.

Filter bar (Events & Projects / Blog / News, EN/MK/SI):
- Add a shared Proxify-style rounded pill bar with a trailing search icon that
  swaps to a search field and opens a results dropdown (thumbnail + category +
  title). New css/pages/_filterbar.css + filter-search.js, layered on top of the
  existing filter/pagination JS. Blog category icons preserved.
- Balance the News filter bar spacing between the header and the cards.

Student Welcome Guide:
- Widen the intro paragraphs, constrain the full-bleed disclaimer to a normal
  centred width, and add space before the route configurator.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-05 22:28:16 +02:00
popovskik 93af2d8051 Mission & Vision: remove white band behind title; hide box icons on mobile
- Override the inherited cream .page-header-section background to transparent so
  the "Mission and Vision" title sits directly on the section's blue gradient
  (no white rectangle behind it).
- On mobile, hide the mission/vision box icons (crosshair/eye) — text only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-05 18:59:11 +02:00
popovskik f309a90e1f About Us hero: align overlaid title to the top (off people's faces)
Switch the hero content from vertical-centre to top-aligned so the title/text sit
in the upper background area of the rotating group photos instead of over faces.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-05 18:52:21 +02:00