/* embeddedTR — Q&A, Libraries, Roadmap, CTA, Footer, Join modal */
const { useState: useStateC } = React;
/* ---------------- Q&A ---------------- */
function QuestionRow({ q }) {
const [v, setV] = useStateC(q.votes);
const [up, setUp] = useStateC(false);
const toggle = () => { setUp(!up); setV(v + (up ? -1 : 1)); };
return (
{v}
{q.answers}
{q.solved ? "çözüldü" : "cevap"}
{q.solved && }
{q.q}
{q.tags.map((t) => {t} )}
@{q.author} · {q.time}
);
}
function QA({ onJoin }) {
const ref = useReveal();
return (
Soru-Cevap
Takıldığın yerde yalnız değilsin.
Sorununu sor, deneyimini paylaş. Oylama ve çözüm işaretlemeyle en iyi cevaplar yükselir; topluluğun bilgi bankası büyür.
12K+ çözülen soru
%92 cevaplanma oranı
~3s ort. ilk cevap
Soru Sor
{QUESTIONS.map((q) => )}
);
}
/* ---------------- YOUTUBE ---------------- */
function VidThumb({ v }) {
const [err, setErr] = useStateC(false);
const I = Icons[v.icon] || Icons.play;
return (
{v.img && !err ? (
setErr(true)} />
) : (
)}
{v.dur &&
{v.dur} }
);
}
function YouTube() {
const ref = useReveal();
return (
Video · YouTube
İzleyerek öğren, uygulayarak pekiştir.
Topluluğun video tarafı {CHANNEL.name} kanalında. Gömülü sistem projeleri, kod incelemeleri ve uygulamalı dersler — gerçek donanım üzerinde, baştan sona.
{CHANNEL.name}
{CHANNEL.handle}
Abone Ol
);
}
function Libraries() {
const ref = useReveal();
return (
Kütüphaneler & sürücüler
Tekerleği yeniden icat etme.
STM32, ESP32, TMS320F ve Nuvoton için topluluk tarafından bakımı yapılan açık kaynak sürücüler.
);
}
/* ---------------- ROADMAP / VISION ---------------- */
function Roadmap() {
const ref = useReveal();
const tr = { live: "yayında", progress: "geliştiriliyor", planned: "planlandı" };
return (
Vizyon & yol haritası
Türkiye’nin en büyük gömülü sistem topluluğunu kuruyoruz.
Mühendisleri, öğrencileri ve meraklıları tek platformda buluşturmak için adım adım ilerliyoruz. İşte yol haritamız:
~/ açık geliştirme · topluluk önerileriyle
{ROADMAP.map((r) => (
{r.label}
{tr[r.status]}
{r.desc}
))}
);
}
/* ---------------- CTA BAND ---------------- */
function CTA({ onJoin }) {
const ref = useReveal();
return (
~/ embeddedTR
Bir lehim teli kadar yakınsın topluluğa.
Ücretsiz katıl; ilk projeni paylaş, ilk sorunu sor. Türkiye’nin gömülü sistem mühendisleriyle aynı masada ol.
);
}
/* ---------------- FOOTER ---------------- */
function Footer() {
const cols = [
["Topluluk", [["Projeler","#projeler"],["Blog","blog.html"],["Soru-Cevap","#soru-cevap"],["Kütüphaneler","#kutuphaneler"]]],
["Platformlar", [["STM32","#projeler"],["ESP32","#projeler"],["TMS320F","#projeler"],["Nuvoton","#projeler"]]],
["Kaynaklar", [["Başlangıç rehberi","blog.html"],["Katkı kuralları","#"],["Etiketler","#"],["SSS","#"]]],
];
return (
embeddedTR
Türkiye’nin gömülü sistem topluluğu. Projeni paylaş, teknik yaz, sor & cevapla, birlikte öğren.
{cols.map(([h, items]) => (
{h}
{items.map(([label, href]) =>
{label} )}
))}
© 2026 embeddedTR — topluluk tarafından, topluluk için.
build · v0.1.0 · made in Türkiye 🇹🇷
);
}
/* ---------------- JOIN MODAL ---------------- */
function JoinModal({ open, onClose }) {
const [email, setEmail] = useStateC("");
const [done, setDone] = useStateC(false);
React.useEffect(() => { if (open) { setDone(false); setEmail(""); } }, [open]);
if (!open) return null;
const valid = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
return (
e.stopPropagation()}>
{!done ? (
<>
Topluluğa katıl
E-postanı bırak, açılışta ilk sen haberdar ol. Spam yok — sadece gömülü sistemler.
veya
setDone(true)}>
GitHub ile devam et
>
) : (
Listeye eklendin! 🎉
Teşekkürler — embeddedTR açılırken ilk davet sana gelecek.
Harika
)}
);
}
Object.assign(window, { QA, YouTube, Libraries, Roadmap, CTA, Footer, JoinModal });