Fix Revisi Kak Inno 22 Oktober && Fix Revisi Kak Ayu 22 Oktober

This commit is contained in:
2025-10-23 17:45:45 +08:00
parent 0ff0d5234a
commit aa98359ef7
21 changed files with 320 additions and 139 deletions

View File

@@ -1,6 +1,8 @@
'use client'
import { ActionIcon, Anchor, Box, Button, Center, Container, Divider, Flex, Group, Image, Paper, SimpleGrid, Stack, Text, TextInput, Title } from '@mantine/core';
import { IconAt, IconBrandFacebook, IconBrandInstagram, IconBrandTiktok, IconBrandYoutube } from '@tabler/icons-react';
import { useRef } from 'react';
import { toast } from 'react-toastify';
const sosialMedia = [
{
@@ -60,6 +62,39 @@ const tautanPenting = [
]
function Footer() {
const emailRef = useRef<HTMLInputElement>(null)
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
const email = emailRef.current?.value.trim();
if (!email) return toast.error('Email wajib diisi!');
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) return toast.error('Format email tidak valid!');
try {
const res = await fetch('/api/subscribe', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email }),
});
const data = await res.json();
if (res.ok && data.success) {
toast.success('Berhasil! Cek email Anda untuk konfirmasi.');
emailRef.current!.value = '';
} else {
toast.error(data.message || 'Gagal berlangganan.');
}
} catch (err) {
console.error(err);
toast.error('Gagal menghubungi server. Coba lagi nanti.');
}
};
return (
<Stack bg="linear-gradient(180deg, #1C6EA4, #124170)" c="white">
<Box w="100%" p="xl">
@@ -166,8 +201,9 @@ function Footer() {
w="70%"
placeholder="Masukkan email Anda"
rightSection={<IconAt size={16} />}
ref={emailRef} // ini aja cukup
/>
<Button variant="gradient" gradient={{ from: 'blue', to: 'cyan' }} radius="md">Daftar</Button>
<Button onClick={handleSubmit} variant="gradient" gradient={{ from: 'blue', to: 'cyan' }} radius="md">Daftar</Button>
</Group>
</Stack>
</Box>

View File

@@ -34,10 +34,10 @@ function Apbdes() {
const data = (state.findMany.data || []).slice(0, 3)
return (
<Stack p="lg" gap="4rem" bg={colors.Bg}>
<Stack p="sm" gap="xl" bg={colors.Bg}>
<Box>
<Stack gap="sm">
<Text ta={"center"} fw={"bold"} fz={{ base: "1.8rem", md: "3.4rem" }}>
<Text c={colors["blue-button"]} ta={"center"} fw={"bold"} fz={{ base: "1.8rem", md: "3.4rem" }}>
{textHeading.title}
</Text>
<Text ta={"center"} fz={{ base: "1rem", md: "1.3rem" }}>
@@ -117,7 +117,7 @@ function Apbdes() {
)}
</SimpleGrid>
<Group pb={80} justify="center">
<Group justify="center" pb={10}>
<Button
component={Link}
href="/darmasaba/apbdes"

View File

@@ -30,9 +30,9 @@ function DesaAntiKorupsi() {
const data = (state.desaAntikorupsi.findMany.data || []).slice(0, 6);
return (
<Stack gap={"0"} bg={colors.Bg} p={"sm"}>
<Container w={{ base: "100%", md: "80%" }} p={"xl"} >
<Container w={{ base: "100%", md: "80%" }} p={"md"} >
<Center>
<Text fw={"bold"} fz={{ base: "1.8rem", md: "3.4rem" }}>Desa Anti Korupsi</Text>
<Text fw={"bold"} c={colors["blue-button"]} fz={{ base: "1.8rem", md: "3.4rem" }}>Desa Anti Korupsi</Text>
</Center>
<Text ta={"center"} fz={{ base: "1rem", md: "1.3rem" }}>Desa antikorupsi mendorong pemerintahan jujur dan transparan. Keuangan desa dikelola terbuka dengan melibatkan warga mengawasi anggaran, sehingga digunakan tepat sasaran sesuai kebutuhan.</Text>
<Center py={20}>

View File

@@ -140,7 +140,7 @@ function Kepuasan() {
if ((loading && !data) || !data) {
return (
<Stack py={10} px="xl">
<Stack py={10} px="sm">
<Skeleton height={300} mb="md" />
<SimpleGrid cols={{ base: 1, md: 3 }}>
<Skeleton height={300} />
@@ -154,9 +154,9 @@ function Kepuasan() {
if (data.length === 0) {
return (
<Stack p="sm">
<Container w={{ base: "100%", md: "80%" }} p={"xl"}>
<Container w={{ base: "100%", md: "80%" }} p={"sm"}>
<Center>
<Text fw={"bold"} fz={{ base: "1.8rem", md: "3.4rem" }}>Indeks Kepuasan Masyarakat</Text>
<Text fw={"bold"} c={colors["blue-button"]} fz={{ base: "1.8rem", md: "3.4rem" }}>Indeks Kepuasan Masyarakat</Text>
</Center>
<Text ta={"center"} fz={{ base: "1rem", md: "1.3rem" }}>Ukur kebahagiaan warga, tingkatkan layanan desa! Dengan partisipasi aktif masyarakat, kami berkomitmen untuk terus memperbaiki layanan agar lebih transparan, efektif, dan sesuai dengan kebutuhan warga. Kepuasan Anda adalah prioritas utama kami dalam membangun desa yang lebih baik!</Text>
<Center mt={10}>
@@ -168,7 +168,7 @@ function Kepuasan() {
>Ajukan Responden</Button>
</Center>
</Container>
<Box px={"xl"}>
<Box px={"sm"}>
<Paper p={"lg"} bg={colors.Bg}>
<Paper p={"lg"}>
<Stack gap={"xs"}>
@@ -416,16 +416,16 @@ function Kepuasan() {
}
return (
<Stack p={"sm"}>
<Container size="lg" px="md">
<Container size="lg" px="sm">
<Center>
<Text ta={"center"} fz={{ base: "2.4rem", md: "3.4rem" }}>Indeks Kepuasan Masyarakat</Text>
<Text ta={"center"} fz={{ base: "2.4rem", md: "3.4rem" }} c={colors["blue-button"]}>Indeks Kepuasan Masyarakat</Text>
</Center>
<Text fz={{ base: "1.2rem", md: "1.4rem" }} ta={"center"}>Ukur kebahagiaan warga, tingkatkan layanan desa! Dengan partisipasi aktif masyarakat, kami berkomitmen untuk terus memperbaiki layanan agar lebih transparan, efektif, dan sesuai dengan kebutuhan warga. Kepuasan Anda adalah prioritas utama kami dalam membangun desa yang lebih baik!</Text>
<Center mt={10}>
<Button radius={"lg"} bg={colors["blue-button"]} onClick={open}>Ajukan Responden</Button>
</Center>
</Container>
<Box px={"xl"}>
<Box px={"md"}>
<Paper p={"lg"} bg={colors.Bg}>
<Paper p={"lg"}>
<Stack gap={"xs"}>

View File

@@ -121,7 +121,7 @@ function LandingPage() {
}, []);
return (
<Stack bg={colors.Bg} p="md" gap="xl">
<Stack bg={colors.Bg} p="md" gap="lg">
<Flex gap="lg" wrap={{ base: "wrap", md: "nowrap" }}>
<Stack w={{ base: "100%", md: "65%" }} gap="lg">
<Card radius="xl" bg={colors.grey[1]} p="lg" shadow="xl">

View File

@@ -30,10 +30,10 @@ const textHeading = {
function Layanan() {
return (
<Stack pos={"relative"} bg={colors.grey[1]} gap={"42"} py={"xl"}>
<Container w={{ base: "100%", md: "80%" }} p={"xl"} >
<Stack pos={"relative"} bg={colors.grey[1]} gap={"xl"} py={"md"}>
<Container w={{ base: "100%", md: "80%" }} p={"md"} >
<Stack align="center" gap={"0"}>
<Text fw={"bold"} fz={{ base: "1.8rem", md: "3.4rem" }}>
<Text fw={"bold"} c={colors["blue-button"]} fz={{ base: "1.8rem", md: "3.4rem" }}>
{textHeading.title}
</Text>
<Text ta={"center"} fz={{ base: "1rem", md: "1.3rem" }}>

View File

@@ -49,9 +49,9 @@ function Potensi() {
const data = (state.findMany.data || []).slice(0, 4);
return (
<Stack p="sm" gap="4rem">
<Container w={{ base: "100%", md: "80%" }} p={"xl"} >
<Text ta={"center"} fw={"bold"} fz={{ base: "1.8rem", md: "3.4rem" }}>
<Stack p="sm" gap="xl">
<Container w={{ base: "100%", md: "80%" }} p={"md"} >
<Text ta={"center"} fw={"bold"} c={colors["blue-button"]} fz={{ base: "1.8rem", md: "3.4rem" }}>
{textHeading.title}
</Text>
<Text ta={"center"} fz={{ base: "1rem", md: "1.3rem" }}>

View File

@@ -35,7 +35,7 @@ function Prestasi() {
<Stack align="center" gap="sm">
<Group gap="xs">
<IconTrophy size={36} color={colors["blue-button"]} />
<Text ta="center" fz={{ base: "2rem", md: "3.4rem" }} fw={700}>
<Text c={colors["blue-button"]} ta="center" fz={{ base: "2rem", md: "3.4rem" }} fw={700}>
Prestasi Desa
</Text>
</Group>
@@ -55,7 +55,7 @@ function Prestasi() {
</Stack>
</Container>
<Box py={50}>
<Box py="lg">
{loading ? (
<Center mih={200}>
<Loader color={colors["blue-button"]} size="xl" />

View File

@@ -5,6 +5,7 @@ import { useMediaQuery } from "@mantine/hooks"
import { Prisma } from "@prisma/client"
import Link from "next/link"
import { IconMoodSad } from "@tabler/icons-react"
import colors from "@/con/colors"
export default function SDGS() {
const theme = useMantineTheme()
@@ -41,11 +42,7 @@ export default function SDGS() {
order={1}
fz={{ base: "2.4rem", md: "3.6rem" }}
fw={900}
style={{
background: "linear-gradient(90deg, #1A5F7A, #159895)",
WebkitBackgroundClip: "text",
WebkitTextFillColor: "transparent",
}}
c={colors["blue-button"]}
>
SDGs Desa
</Title>
@@ -54,7 +51,7 @@ export default function SDGS() {
SDGs Desa merupakan langkah nyata untuk mewujudkan desa yang maju, inklusif, dan berkelanjutan melalui 17 tujuan pembangunan dari pengentasan kemiskinan, pendidikan, kesehatan, kesetaraan gender, hingga pelestarian lingkungan.
</Text>
<Box py={50}>
<Box py="lg">
<Paper
p={{ base: "md", md: "xl" }}
radius="2xl"
@@ -156,7 +153,7 @@ export default function SDGS() {
href="/darmasaba/sdgs-desa"
radius="xl"
size="lg"
mt={40}
mt="md"
variant="gradient"
gradient={{ from: "#26667F", to: "#124170" }}
style={{ boxShadow: "0 6px 14px rgba(18,65,112,0.25)"}}