// =====================================================
// HOME PAGE
// =====================================================
const { useState: useStateP, useEffect: useEffectP, useRef: useRefP } = React;
function Home({ lang, accent }) {
const t = useT(lang);
const T = window.I18N;
return (
);
}
function Hero({ lang }) {
const t = useT(lang);
const T = window.I18N;
const stats = T.hero.stats;
return (
{t(T.hero.eyebrow)}
{t(T.hero.estd)} · 41° N
{t(T.hero.line1)}
{t(T.hero.line2)}
{t(T.hero.line3)} {t(T.hero.line4)}
{t(T.hero.sub)}
{stats.map((s, i) => (
{s.num}{s.unit}
{t(s.lbl)}
))}
);
}
function Marquee() {
const items = ["STRENGTH", "DISCIPLINE", "COMMUNITY", "RECOVERY", "ATHLETICS", "MOBILITY", "MINDSET"];
const renderRow = () => items.map((it, i) => (
{it}
));
return (
{renderRow()}
{renderRow()}
{renderRow()}
{renderRow()}
);
}
function About({ lang }) {
const t = useT(lang);
const T = window.I18N;
return (
{t(T.about.eyebrow)}
{t(T.about.headline)}
{t(T.about.p1)}
{t(T.about.p2)}
{T.about.pillars.map((p, i) => (
))}
);
}
function Facilities({ lang }) {
const t = useT(lang);
const T = window.I18N;
return (
{t(T.facilities.eyebrow)}
{t(T.facilities.headline)}
{t(T.facilities.sub)}
{T.facilities.tags.map((tag, i) => {t(tag)} )}
);
}
function Programs({ lang }) {
const t = useT(lang);
const T = window.I18N;
return (
{t(T.programs.eyebrow)}
{t(T.programs.headline)}
{t(T.programs.sub)}
);
}
function Pricing({ lang }) {
const t = useT(lang);
const T = window.I18N;
const P = T.pricing;
return (
{t(P.eyebrow)}
{t(P.headline)}
{t(P.sub)}
{t(P.womenLabel)}
{t(P.menLabel)}
{P.durations.map((d, i) => (
{t(d.label)}
{d.womenPrice}€
{d.menPrice}€
))}
{t(P.ptLabel)}
{P.ptPlans.map((plan, i) => (
{plan.sessions}
{t(P.perWeek)}
{plan.price}€
))}
);
}
function Merch({ lang }) {
const t = useT(lang);
const T = window.I18N;
const M = T.merch;
const waUrl = `https://wa.me/38971907907?text=${encodeURIComponent("Hello, I'd like to order an Alpha T-shirt.")}`;
const price = lang === 'mk' ? "1.000 ден" : "1.000 den";
return (
{t(M.eyebrow)}
{t(M.headline)}
{t(M.sub)}
{M.features.map((f, i) => {t(f)} )}
{t(M.priceLabel)}
{price}
{t(M.cta)} →
);
}
function Services({ lang }) {
const t = useT(lang);
const T = window.I18N;
const S = T.services;
const dp = (price) => lang === 'mk' ? price : price.replace('ден', 'den');
return (
{t(S.eyebrow)}
{t(S.headline)}
{t(S.sub)}
{t(S.massageTitle)}
{S.massageTypes.map((type, i) => {t(type)} )}
{S.massagePrices.map((p, i) => (
{p.duration}
{dp(p.price)}
))}
{t(S.solariumTitle)}
{S.solariumPrices.map((p, i) => (
{p.duration}
{p.price}
))}
{t(S.barTitle)}
{S.barCategories.map((cat, ci) => (
{t(cat.title)}
{cat.items.map((item, ii) => (
{t(item.name)}
{dp(item.price)}
))}
))}
);
}
function TrainersGrid({ lang }) {
const t = useT(lang);
const T = window.I18N;
return (
{t(T.trainers.eyebrow)}
{t(T.trainers.headline)}
{t(T.trainers.sub)}
);
}
function Manager({ lang }) {
const t = useT(lang);
const T = window.I18N;
const M = T.manager;
const waText = lang === 'mk'
? "Здраво, сакам да дознам повеќе за Алфа Џим."
: lang === 'sq'
? "Përshëndetje, dëshiroj të di më shumë rreth Alpha Gym."
: "Hello, I'd like to know more about Alpha Gym.";
const waUrl = `https://wa.me/${M.waNum}?text=${encodeURIComponent(waText)}`;
return (
);
}
function Partners({ lang }) {
const t = useT(lang);
const T = window.I18N;
const P = T.partners;
return (
{t(P.eyebrow)}
{t(P.headline)}
{t(P.sub)}
{P.list.map((partner, i) => (
{partner.name}
{t(partner.body)}
))}
);
}
function Contact({ lang }) {
const t = useT(lang);
const T = window.I18N;
const [sent, setSent] = useStateP(false);
const submit = (e) => {
e.preventDefault();
setSent(true);
setTimeout(() => setSent(false), 4000);
};
return (
);
}
// =====================================================
// TRAINER DETAIL PAGE
// =====================================================
function TrainerDetail({ slug, lang }) {
const t = useT(lang);
const T = window.I18N;
const tr = T.trainerData.find((x) => x.slug === slug);
useEffectP(() => { window.scrollTo({ top: 0, behavior: "instant" }); }, [slug]);
if (!tr) {
return ;
}
const days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"];
const dayLabels = {
mk: ["ПОН","ВТО","СРЕ","ЧЕТ","ПЕТ","САБ","НЕД"],
sq: ["HËN","MAR","MËR","ENJ","PRE","SHT","DIE"],
en: ["MON","TUE","WED","THU","FRI","SAT","SUN"],
};
const waNum = tr.whatsapp.replace(/[^0-9]/g, "");
const waText = `Hello ${tr.first}, I'd like to book a session at Alpha Gym.`;
const waUrl = `https://wa.me/${waNum}?text=${encodeURIComponent(waText)}`;
const mailUrl = `mailto:${tr.email}?subject=Training inquiry — Alpha Gym&body=Hello ${tr.first},%0D%0A%0D%0AI'd like to learn more about your training.%0D%0A`;
return (
← {t(T.trainers.backTo)}
0{T.trainerData.findIndex(x => x.slug === tr.slug) + 1} · {t(T.trainers.eyebrow)}
{tr.first}{tr.last}
{t(tr.role)}
{tr.specs && (
{tr.specs.map((s, i) => {s} )}
)}
{t(tr.bio)}
{t(T.trainers.spec)}
{t(tr.spec)}
{t(T.trainers.exp)}
{tr.years}{t(T.trainers.yrs)}
{t(T.trainers.clients)}
{tr.clients}{t(T.trainers.sessionsLabel)}
{t(T.trainers.approach)}
{t({ mk: "Како работам", sq: "Si punoj", en: "How I work" })}
{tr.approach.map((a, i) => (
))}
{tr.creds.length > 0 && (
{t(T.trainers.creds)}
{t({ mk: "Сертификати", sq: "Certifikatat", en: "Credentials" })}
{tr.creds.map((c, i) => (
{c.yr &&
{c.yr}
}
{t(c.t)}
))}
)}
0 ? 40 : 0 }}>
{t(T.trainers.schedule)}
{tr.sched.map((s, i) => {
const off = s === "off";
const peak = !off && (s.startsWith("16") || s.startsWith("14") || s.startsWith("12-20"));
return (
{(dayLabels[lang] || dayLabels.en)[i]}
{off ? "—" : s}
);
})}
{t(tr.quote)}
— {tr.first} {tr.last}
{t({ mk: "Други тренери", sq: "Trajnerë të tjerë", en: "Other coaches" })}
{t({ mk: "Запознај го тимот", sq: "Njohu me ekipin", en: "Meet the team" })}
);
}
Object.assign(window, { Home, TrainerDetail, Hero, About, Facilities, Programs, Pricing, Merch, Services, Manager, Partners, TrainersGrid, Contact });