feat: page privacy-policy and anti-child-sex-abuse

This commit is contained in:
Sabda Yagra 2025-12-29 17:22:32 +07:00
parent 6fe7dffe47
commit a8256eb999
6 changed files with 205 additions and 2 deletions

View File

@ -0,0 +1,14 @@
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout: any = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -0,0 +1,71 @@
import { useTranslations } from "next-intl";
export const metadata = {
title: "Anti Child Sexual Abuse & Exploitation Policy | MediaHub",
description:
"MediaHub policy against child sexual abuse and exploitation (CSAE)",
};
export default function AntiChildSexualAbusePage() {
const t = useTranslations("LandingPage");
return (
<div className="container mx-auto max-w-4xl px-4 py-10">
<div className="flex flex-row items-center justify-center gap-4 mb-6">
<img src="/assets/icon-privacy.png" alt="Policy" />
<p className="font-semibold text-xl text-center">{t("abuse")}</p>
</div>
<p className="my-4 text-sm text-muted-foreground">
{t("lastUpdate")} {new Date().toLocaleDateString()}
</p>
<p className="mb-6">
{t("medHave")} <strong>{t("zeroTolerance")}</strong> {t("forAny")}
</p>
<h2 className="text-xl font-semibold mt-8 mb-3">
{t("prohibitedContent")}
</h2>
<p className="mb-4">{t("prohibitedDesc")}</p>
<ul className="list-disc ml-6 space-y-2 mb-6">
<li>{t("prohibited1")}</li>
<li>{t("prohibited2")}</li>
<li>{t("prohibited3")}</li>
<li>{t("prohibited4")}</li>
</ul>
<h2 className="text-xl font-semibold mt-8 mb-3">
{t("enforcementTitle")}
</h2>
<p className="mb-4">{t("enforcementDesc")}</p>
<ul className="list-disc ml-6 space-y-2 mb-6">
<li>{t("enforcement1")}</li>
<li>{t("enforcement2")}</li>
<li>{t("enforcement3")}</li>
</ul>
<h2 className="text-xl font-semibold mt-8 mb-3">{t("reportingTitle")}</h2>
<p className="mb-4">{t("reportingDesc")}</p>
<p className="mb-6">
📧 <strong>humaspolri.pid@gmail.com</strong>
</p>
<h2 className="text-xl font-semibold mt-8 mb-3">
{t("cooperationTitle")}
</h2>
<p className="mb-6">{t("cooperationDesc")}</p>
<h2 className="text-xl font-semibold mt-8 mb-3">
{t("protectionTitle")}
</h2>
<p className="mb-6">{t("protectionDesc")}</p>
<h2 className="text-xl font-semibold mt-8 mb-3">{t("contactTitle")}</h2>
<p className="mb-2">{t("contactDesc")}</p>
<p>
📧 <strong>humaspolri.pid@gmail.com</strong>
</p>
</div>
);
}

View File

@ -0,0 +1,14 @@
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout: any = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -0,0 +1,52 @@
"use client";
import { useEffect, useState } from "react";
import { getPrivacy } from "@/service/landing/landing";
import parse from "html-react-parser";
import { useTranslations } from "next-intl";
export default function PrivacyPolicyPage() {
const [privacy, setPrivacy] = useState<string | null>(null);
const [loading, setLoading] = useState(true);
const t = useTranslations("LandingPage");
useEffect(() => {
async function fetchPrivacy() {
try {
const response = await getPrivacy();
setPrivacy(response?.data?.data?.htmlContent || "");
} catch (error) {
console.error("Failed to load privacy policy", error);
} finally {
setLoading(false);
}
}
fetchPrivacy();
}, []);
return (
<div className="container mx-auto max-w-4xl px-4 py-10">
<div className="flex flex-row items-center justify-center gap-4">
<img src="/assets/icon-privacy.png" alt="Privacy" />
<p className="font-semibold text-lg">
{t("privacy", { defaultValue: "Privacy" })}
</p>
</div>
{loading && (
<p className="text-muted-foreground"> {t("loadPriv", { defaultValue: "Loading privacy policy..." })}</p>
)}
{!loading && privacy && (
<div className="prose prose-sm md:prose-base max-w-none dark:prose-invert">
{parse(privacy)}
</div>
)}
{!loading && !privacy && (
<p className="text-red-500"> {t("unavailablePriv", { defaultValue: "Privacy policy content is unavailable." })}</p>
)}
</div>
);
}

View File

@ -352,6 +352,14 @@
"versionHistory": "VERSION HISTORY" "versionHistory": "VERSION HISTORY"
}, },
"LandingPage": { "LandingPage": {
"medHave": "MediaHub has",
"forAny": "for any form of child sexual abuse and exploitation. We are committed to protecting children and preventing the misuse of our platform.",
"zeroTolerance": "zero tolerance",
"prohibitedContent": "Prohibited Content",
"lastUpdate": "Last Update:",
"abuse": "Anti Child Sexual Abuse and Exploitation Policy",
"loadPriv": "Loading privacy policy...",
"unavailablePriv": "Privacy policy content is unavailable.",
"content": "Content", "content": "Content",
"searchCoverageHere": "Find Coverage Here...", "searchCoverageHere": "Find Coverage Here...",
"new": "Latest", "new": "Latest",
@ -638,7 +646,25 @@
"sending": "Sending...", "sending": "Sending...",
"simultaneousSchedule": "Simultaneous Schedule", "simultaneousSchedule": "Simultaneous Schedule",
"viewSchedule": "View Schedule", "viewSchedule": "View Schedule",
"timeTable1": "TIMETABLE /" "timeTable1": "TIMETABLE /",
"prohibitedDesc": "The following content is strictly prohibited on MediaHub:",
"prohibited1": "Child sexual abuse material (CSAM)",
"prohibited2": "Any sexual content involving minors",
"prohibited3": "Grooming, sexual exploitation, or abuse of children",
"prohibited4": "Any attempt to create, distribute, store, promote, or access such content",
"enforcementTitle": "Enforcement Actions",
"enforcementDesc": "If any content or behavior violating this policy is identified:",
"enforcement1": "The content will be removed immediately",
"enforcement2": "The associated user account will be permanently banned",
"enforcement3": "Relevant information may be reported to law enforcement authorities when required by law",
"reportingTitle": "Reporting Child Abuse",
"reportingDesc": "MediaHub encourages users to report any suspected child abuse, exploitation, or illegal content found on the platform.",
"cooperationTitle": "Cooperation with Authorities",
"cooperationDesc": "MediaHub cooperates fully with law enforcement agencies and child protection organizations to combat child sexual abuse and exploitation.",
"protectionTitle": "Protection Measures",
"protectionDesc": "We implement reasonable safeguards, including content moderation, user reporting mechanisms, and administrative review processes to help maintain a safe platform.",
"contactTitle": "Contact Information",
"contactDesc": "If you become aware of any content that violates this policy, please contact us immediately:"
}, },
"FilterPage": { "FilterPage": {
"downloadableContent": "Downloadable Content", "downloadableContent": "Downloadable Content",

View File

@ -353,6 +353,14 @@
"versionHistory": "VERSION HISTORY" "versionHistory": "VERSION HISTORY"
}, },
"LandingPage": { "LandingPage": {
"lastUpdate": "Terakhir diperbarui:",
"medHave": "MediaHub memiliki",
"zeroTolerance": "toleransi nol",
"prohibitedContent": "Konten Terlarang",
"forAny": "untuk segala bentuk pelecehan dan eksploitasi seksual anak. Kami berkomitmen untuk melindungi anak-anak dan mencegah penyalahgunaan platform kami.",
"abuse": "Kebijakan Anti Pelecehan dan Eksploitasi Seksual Anak",
"loadPriv": "Memuat kebijakan privasi...",
"unavailablePriv": "Konten kebijakan privasi tidak tersedia.",
"resend": "Kirim Ulang", "resend": "Kirim Ulang",
"otpHelp": "Tidak menerima kode? Periksa folder spam Anda atau", "otpHelp": "Tidak menerima kode? Periksa folder spam Anda atau",
"content": "Konten", "content": "Konten",
@ -639,7 +647,25 @@
"sending": "Mengirim...", "sending": "Mengirim...",
"simultaneousSchedule": "Jadwal Bersamaan", "simultaneousSchedule": "Jadwal Bersamaan",
"viewSchedule": "Lihat Jadwal", "viewSchedule": "Lihat Jadwal",
"timeTable1": "JADWAL /" "timeTable1": "JADWAL /",
"prohibitedDesc": "Konten berikut dilarang keras di MediaHub:",
"prohibited1": "Materi pelecehan seksual anak (CSAM)",
"prohibited2": "Segala bentuk konten seksual yang melibatkan anak di bawah umur",
"prohibited3": "Grooming, eksploitasi seksual, atau pelecehan terhadap anak",
"prohibited4": "Upaya untuk membuat, menyebarkan, menyimpan, mempromosikan, atau mengakses konten tersebut",
"enforcementTitle": "Tindakan Penegakan",
"enforcementDesc": "Jika ditemukan konten atau perilaku yang melanggar kebijakan ini:",
"enforcement1": "Konten akan segera dihapus",
"enforcement2": "Akun terkait akan diblokir secara permanen",
"enforcement3": "Informasi terkait dapat dilaporkan kepada aparat penegak hukum sesuai ketentuan yang berlaku",
"reportingTitle": "Pelaporan Pelecehan Anak",
"reportingDesc": "MediaHub mendorong pengguna untuk melaporkan dugaan pelecehan, eksploitasi, atau konten ilegal yang melibatkan anak.",
"cooperationTitle": "Kerja Sama dengan Aparat",
"cooperationDesc": "MediaHub bekerja sama sepenuhnya dengan aparat penegak hukum dan organisasi perlindungan anak untuk memerangi pelecehan dan eksploitasi seksual anak.",
"protectionTitle": "Langkah Perlindungan",
"protectionDesc": "Kami menerapkan langkah perlindungan yang wajar, termasuk moderasi konten, mekanisme pelaporan pengguna, dan proses peninjauan administratif untuk menjaga keamanan platform.",
"contactTitle": "Informasi Kontak",
"contactDesc": "Jika Anda mengetahui adanya konten yang melanggar kebijakan ini, silakan segera hubungi kami:"
}, },
"FilterPage": { "FilterPage": {
"content": "Konten", "content": "Konten",