feat: prepare site for Yandex Ads (RSYA) moderation

- Add About page (/about, /ru/about) with mission, history, contacts
- Add FaqBlock component for generator FAQ sections
- Add FAQ to all 10 generators (3 Q&A each, EN+RU)
- Expand howTo/whenTo content on numbers, password, coin generators
- Add About link to LanguageSwitcher navigation
- Improve Yandex RTB ad block: min-height placeholder, no layout shift
- Extend generator schema with optional faq/ruFaq fields
- Update translations.ts with about and faq i18n keys
This commit is contained in:
emil
2026-05-11 21:59:37 +03:00
parent 7a29e3c192
commit cbc0a3b545
18 changed files with 423 additions and 10 deletions
+33
View File
@@ -0,0 +1,33 @@
---
import { useT } from "../i18n/translations";
import type { Lang } from "../i18n/translations";
interface Props {
questions: Array<{ q: string; a: string }>;
lang?: Lang;
}
const { questions, lang = "en" } = Astro.props;
const T = useT(lang);
---
<section class="mt-4">
<div class="rounded-xl bg-zinc-900/50 border border-zinc-800/60 p-5">
<h2
class="flex items-center gap-2 text-xs font-semibold uppercase tracking-widest text-zinc-400 mb-3"
>
<span class="w-1.5 h-1.5 rounded-full bg-accent" aria-hidden="true"></span>
{T.faq}
</h2>
<div class="space-y-3">
{
questions.map(({ q, a }) => (
<div>
<p class="font-medium text-zinc-300 text-sm">{q}</p>
<p class="text-zinc-400 text-sm mt-0.5">{a}</p>
</div>
))
}
</div>
</div>
</section>
+7
View File
@@ -25,6 +25,13 @@ const alternatePath = isRu
data-target-lang="ru"
data-alternate={isRu ? "" : alternatePath}>RU</a
>
<span class="w-px h-3 bg-zinc-700 mx-0.5" aria-hidden="true"></span>
<a
href={isRu ? "/ru/about/" : "/about/"}
class="px-2 py-1 rounded-md transition-colors text-zinc-400 hover:text-zinc-200"
>
{isRu ? "О проекте" : "About"}
</a>
</div>
<script>
+11 -4
View File
@@ -1,10 +1,17 @@
<!-- Yandex.RTB R-A-19259130-1 -->
<div id="yandex_rtb_R-A-19259130-1"></div>
<div
id="yandex_rtb_R-A-19259130-1"
class="min-h-[90px] w-full flex items-center justify-center rounded-lg bg-zinc-900/30"
>
<span class="text-xs text-zinc-600 uppercase tracking-widest select-none"
>Advertisement</span
>
</div>
<script>
window.yaContextCb.push(() => {
Ya.Context.AdvManager.render({
blockId: "R-A-19259130-1",
renderTo: "yandex_rtb_R-A-19259130-1"
})
})
renderTo: "yandex_rtb_R-A-19259130-1",
});
});
</script>