add:initial files

This commit is contained in:
Carls2320 2025-01-20 10:03:20 +07:00
commit 9cc4fb7713
40 changed files with 6650 additions and 0 deletions

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

1
README.md Normal file
View File

@ -0,0 +1 @@
# MyProject

38
eslint.config.js Normal file
View File

@ -0,0 +1,38 @@
import js from '@eslint/js'
import globals from 'globals'
import react from 'eslint-plugin-react'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
export default [
{ ignores: ['dist'] },
{
files: ['**/*.{js,jsx}'],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
ecmaVersion: 'latest',
ecmaFeatures: { jsx: true },
sourceType: 'module',
},
},
settings: { react: { version: '18.3' } },
plugins: {
react,
'react-hooks': reactHooks,
'react-refresh': reactRefresh,
},
rules: {
...js.configs.recommended.rules,
...react.configs.recommended.rules,
...react.configs['jsx-runtime'].rules,
...reactHooks.configs.recommended.rules,
'react/jsx-no-target-blank': 'off',
'react-refresh/only-export-components': [
'warn',
{ allowConstantExport: true },
],
},
},
]

23
index.html Normal file
View File

@ -0,0 +1,23 @@
<!doctype html> <!-- Menandakan bahwa ini adalah dokumen HTML5 -->
<html lang="en"> <!-- Menentukan bahasa utama dari halaman adalah bahasa Inggris -->
<head>
<meta charset="UTF-8" /> <!-- Menentukan karakter encoding untuk halaman ini (UTF-8 mencakup banyak karakter internasional) -->
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <!-- Menentukan favicon halaman (ikon kecil di tab browser) -->
<!-- Mengimpor font 'Montserrat' dari Google Fonts untuk digunakan di seluruh halaman -->
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&display=swap" rel="stylesheet">
<!-- Menentukan viewport untuk memastikan aplikasi responsif pada perangkat mobile (agar skalanya sesuai dengan lebar layar perangkat) -->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- Menentukan judul halaman yang akan ditampilkan di tab browser -->
<title>Vite + React</title>
</head>
<body>
<!-- Elemen dengan id 'root' adalah tempat di mana aplikasi React akan di-render -->
<div id="root"></div>
<!-- Menyisipkan script utama aplikasi React. Menggunakan 'type="module"' karena kita menggunakan ES Modules -->
<script type="module" src="/src/main.jsx"></script>
</body>
</html>

5804
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

31
package.json Normal file
View File

@ -0,0 +1,31 @@
{
"name": "rekanaiv3",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"devDependencies": {
"@eslint/js": "^9.17.0",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
"@vitejs/plugin-react": "^4.3.4",
"autoprefixer": "^10.4.20",
"eslint": "^9.17.0",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.16",
"globals": "^15.14.0",
"postcss": "^8.4.49",
"tailwindcss": "^3.4.17",
"vite": "^6.0.5"
}
}

6
postcss.config.js Normal file
View File

@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

1
public/vite.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

23
src/App.jsx Normal file
View File

@ -0,0 +1,23 @@
import Header from "./componen/Header/Header"; // Mengimpor komponen Header untuk ditampilkan di bagian atas halaman
import CustomerService from "./componen/customer/CustomerService"; // Mengimpor komponen CustomerService untuk menampilkan informasi layanan pelanggan
import FormSection from "./componen/form/FormSection"; // Mengimpor komponen FormSection yang berisi form
import FAQ from "./componen/faq/FAQSection"; // Mengimpor komponen FAQ untuk menampilkan bagian pertanyaan yang sering diajukan
import BottomCTA from "./componen/bottom/BottomCTA"; // Mengimpor komponen BottomCTA untuk panggilan aksi di bagian bawah halaman
import Footer from "./componen/footer/Footer"; // Mengimpor komponen Footer untuk menampilkan bagian footer
import WhatsAppButton from "./componen/whatsappbutton/whatsappbutton"; // Mengimpor komponen WhatsAppButton untuk menampilkan tombol WhatsApp
function App() {
return (
<>
<Header /> {/* Menampilkan komponen Header */}
<CustomerService /> {/* Menampilkan komponen CustomerService */}
<FormSection /> {/* Menampilkan komponen FormSection */}
<FAQ /> {/* Menampilkan komponen FAQ */}
<BottomCTA /> {/* Menampilkan komponen BottomCTA */}
<Footer /> {/* Menampilkan komponen Footer */}
<WhatsAppButton /> {/* Menampilkan komponen WhatsAppButton */}
</>
)
}
export default App;

View File

@ -0,0 +1,104 @@
import { useState } from 'react';
import Logo1 from '../asset/logo.png'; // Mengimpor logo
import search from '../asset/search.png'; // Mengimpor ikon pencarian
import row from '../asset/arrow.png'; // Mengimpor ikon panah untuk dropdown
const Header = () => {
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); // Menyimpan status menu mobile (terbuka atau tertutup)
return (
<header className="fixed top-0 left-0 w-full z-50 font-montserrat bg-white shadow-md">
<nav className="flex items-center justify-between px-5 sm:px-10 md:px-20 py-3 gap-4 flex-wrap relative">
{/* Logo */}
<div className="flex items-center gap-2">
<img src={Logo1} alt="Logo" className="w-[203px] h-[36.05px]" /> {/* Menampilkan logo dengan ukuran spesifik */}
</div>
{/* Tombol Hamburger (Responsive) */}
<div className="sm:hidden flex items-center">
<button
onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)} // Mengubah status menu mobile saat tombol ditekan
className="text-[#212121]"
>
{/* Icon hamburger (menu mobile) */}
<svg xmlns="http://www.w3.org/2000/svg" className="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
</div>
{/* Menu Navigasi */}
<ul
className={`${
isMobileMenuOpen ? 'flex' : 'hidden' // Menampilkan menu jika isMobileMenuOpen true, jika tidak disembunyikan
} sm:flex flex-col sm:flex-row list-none gap-5 sm:gap-10 absolute sm:relative top-full left-0 sm:top-auto sm:left-auto w-full sm:w-auto bg-white sm:bg-transparent p-5 sm:p-0 shadow-md sm:shadow-none z-40`}
>
{/* Menu Item Beranda */}
<li className="relative group">
<a href="#home" className="text-[#212121] text-base transition-colors hover:text-[#5a55ff]">
Beranda
</a>
</li>
{/* Menu Item Produk */}
<li className="relative group">
<a href="#produk" className="text-[#212121] text-base transition-colors hover:text-[#5a55ff] flex items-center">
Produk
<img src={row} alt="arrow" className="ml-1" /> {/* Ikon panah untuk dropdown Produk */}
</a>
{/* Dropdown menu untuk Produk */}
<ul className="absolute left-0 top-full hidden w-40 bg-white list-none py-2 shadow-lg group-hover:block z-50">
<li className="px-5 py-2 hover:text-[#5a55ff]">
<a href="#produk1" className="text-[#212121]">Produk 1</a>
</li>
<li className="px-5 py-2 hover:text-[#5a55ff]">
<a href="#produk2" className="text-[#212121]">Produk 2</a>
</li>
</ul>
</li>
{/* Menu Item Solusi */}
<li className="relative group">
<a href="#solusi" className="text-[#212121] text-base transition-colors hover:text-[#5a55ff] flex items-center">
Solusi
<img src={row} alt="arrow" className="ml-1" /> {/* Ikon panah untuk dropdown Solusi */}
</a>
{/* Dropdown menu untuk Solusi */}
<ul className="absolute left-0 top-full hidden w-40 bg-white list-none py-2 shadow-lg group-hover:block z-50">
<li className="px-5 py-2 hover:text-[#5a55ff]">
<a href="#solusi1" className="text-[#212121]">Solusi 1</a>
</li>
<li className="px-5 py-2 hover:text-[#5a55ff]">
<a href="#solusi2" className="text-[#212121]">Solusi 2</a>
</li>
</ul>
</li>
{/* Menu Item Hubungi Kami */}
<li>
<a href="#hubungi" className="text-[#212121] text-base transition-colors hover:text-[#5a55ff]">
Hubungi Kami
</a>
</li>
</ul>
{/* Pencarian */}
<div className="relative flex items-center gap-2 w-full sm:w-auto order-2 sm:order-none">
<input
type="text"
placeholder="Pencarian..."
className="w-full sm:w-[592px] h-12 px-4 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-[#5a55ff]" // Field input pencarian
/>
{/* Tombol Pencarian */}
<button className="absolute right-4 sm:right-2 text-gray-500 hover:text-[#5a55ff]">
<img src={search} alt="search" className="w-5 h-5" /> {/* Menampilkan ikon pencarian */}
</button>
</div>
{/* Tombol Konsultasi */}
<button className="bg-[#DC0168] text-white px-5 py-2 text-sm font-bold rounded-md hover:bg-[#e6006e] transition order-3 sm:order-none w-full sm:w-auto mt-3 sm:mt-0">
Konsultasi Gratis
</button>
</nav>
</header>
);
};
export default Header;

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 958 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 715 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
src/componen/asset/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
src/componen/asset/ojk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 881 B

BIN
src/componen/asset/x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 651 B

View File

@ -0,0 +1,44 @@
import logowa from "../asset/whatsapp-color_svgrepo.com.png"; // Import gambar WhatsApp untuk ikon
const BottomCTA = () => {
return (
<section className="w-full bg-white text-center py-10 mb-[113px]">
{/* Bagian ini untuk menampilkan teks yang memberi tahu pengguna bahwa mereka bisa menghubungi jika masih ada pertanyaan */}
<div className="flex flex-wrap justify-center gap-2">
<h3 className="text-[#212121] text-center text-[32px] font-semibold leading-[48px] tracking-[0.005em] text-left">
Masih punya pertanyaan seputar
</h3>
<h3 className="text-lg sm:text-xl md:text-2xl text-[#212121] font-semibold mb-3">
{/* Menampilkan tag #Rekan AI dengan background warna dan teks putih */}
<span className="bg-[#dc0168] bg-[length:100%] rounded-[18px] text-[#ffffff] px-6 py-2 inline-block mr-[5px]">
#Rekan AI
</span>
?
</h3>
</div>
{/* Pesan yang memberi tahu pengguna untuk menghubungi jika pertanyaan belum terjawab */}
<p className=" text-[20px] font-normal leading-[30px] tracking-[0.005em] text-center text-[#212121] mb-5 mx-auto">
Jika pertanyaan Anda belum terjawab di atas, jangan ragu untuk menghubungi kami melalui formulir<br />kontak atau email. Kami dengan senang hati akan membantu!
</p>
{/* Bagian tombol CTA */}
<div className="flex justify-center flex-col lg:flex-row mt-8 lg:mt-16 gap-6">
{/* Tombol Konsultasi Gratis dengan ikon WhatsApp */}
<button className="w-full lg:w-[270px] h-[70px] btn2 flex items-center justify-center py-3 border-2 border-[#DC0168] rounded-[14px] text-[#DC0168] font-bold text-[18px] lg:text-[20px] cursor-pointer transition-all ease-in-out hover:bg-[#ffffff1a]">
{/* Gambar WhatsApp di kiri tombol */}
<img src={logowa} alt="WhatsApp Icon" className="mr-2 h-[1.2rem] w-auto" />
Konsultasi Gratis
</button>
{/* Tombol Coba Sekarang dengan efek gradient */}
<button className="w-full lg:w-[276px] h-[70px] btn2 flex items-center justify-center py-3 px-8 rounded-[14px] bg-gradient-to-r from-[#DC0168] to-[#5B59E8] text-white font-bold text-[18px] lg:text-[20px] cursor-pointer transition-all ease-in-out hover:opacity-90">
Coba Sekarang
</button>
</div>
</section>
);
};
export default BottomCTA;

View File

@ -0,0 +1,79 @@
import email from "../asset/email.png"; // Import gambar icon untuk email
import customer from "../asset/customer.png"; // Import gambar ilustrasi customer service
import phone from "../asset/phone.png"; // Import gambar icon untuk telepon
const CustomerService = () => {
return (
<section className="mt-[180px] md:mt-[115px] 2xl:mt-[45px] flex flex-col md:flex-row justify-between items-center px-5 py-10 max-w-6xl mx-auto gap-10 mb-[114px]">
{/* Container utama dengan styling responsif untuk menampung konten customer service */}
<div className="md:max-w-xl text-center md:text-left ">
{/* Div untuk teks utama dan informasi pendukung */}
<div className="mb-5">
<h2 className="text-[#212121] text-[32px] font-semibold leading-[48px] text-left decoration-solid">
{/* Heading utama dengan warna teks dan ukuran font yang diatur */}
Kami Siap Membantu Bisnis <br /> Anda Lebih Maju!
</h2>
</div>
<p className="text-[#212121] leading-relaxed mb-6 text-left">
{/* Paragraf penjelasan singkat mengenai layanan yang ditawarkan */}
Butuh informasi lebih lanjut tentang produk atau solusi kami? <br />{" "}
Tim Rekan AI siap menjawab pertanyaan Anda dengan cepat dan
profesional.
</p>
<div className="flex flex-col gap-4">
{/* Container untuk menampung daftar kontak dalam format fleksibel */}
<div className="flex items-start gap-4">
{/* Kontainer untuk informasi kontak via email */}
<img
src={email} // Menampilkan icon email
alt="Email Icon" // Teks alternatif untuk gambar email
className="w-10 h-10 object-contain" // Styling untuk ukuran gambar
/>
<div className="text-left">
<p className="text-sm text-[#212121]">
Kirim pertanyaan Anda ke{" "}
<strong className="text-[#5B59E8]">support@rekanai.com</strong>{" "}
dan tim kami
</p>
<p className="text-sm text-[#212121]">akan segera merespons.</p>
</div>
</div>
<div className="flex items-start gap-4">
{/* Kontainer untuk informasi kontak via telepon */}
<img
src={phone} // Menampilkan icon telepon
alt="Phone Icon" // Teks alternatif untuk gambar telepon
className="w-10 h-10 object-contain" // Styling untuk ukuran gambar
/>
<div className="text-left">
<p className="text-sm text-[#212121]">
Hubungi kami di{" "}
<strong className="text-[#5B59E8]">(+62) 123-4567-890</strong>
</p>
<p className="text-sm text-[#212121]">
(Senin - Jumat, 08:00 - 17:00 WIB).
</p>
</div>
</div>
</div>
</div>
<div className="flex-1 flex justify-center items-center">
{/* Div untuk menampilkan gambar ilustrasi customer service */}
<img
src={customer} // Menampilkan gambar customer service
alt="Customer Service" // Teks alternatif untuk gambar customer service
className="max-w-full h-auto" // Styling untuk memastikan gambar berskala dengan baik
/>
</div>
</section>
);
};
export default CustomerService; // Ekspor komponen agar dapat digunakan di file lain

View File

@ -0,0 +1,157 @@
import { useState } from "react";
const FAQ = () => {
// State untuk menyimpan indeks pertanyaan yang sedang dibuka
// Jika tidak ada pertanyaan yang terbuka, nilai adalah null
const [openQuestion, setOpenQuestion] = useState(null);
// Fungsi untuk membuka atau menutup pertanyaan berdasarkan indeks
// Jika pertanyaan yang sama diklik lagi, tutup pertanyaan tersebut
const toggleQuestion = (index) => {
// Cek apakah pertanyaan yang sama diklik
// Jika iya, tutup (set openQuestion ke null), jika tidak, buka pertanyaan tersebut
setOpenQuestion(openQuestion === index ? null : index);
};
// Data FAQ yang berisi array objek dengan pertanyaan dan jawaban
const faqData = [
{
question: "Apa itu Rekan AI?",
answer: (
<p>
Rekan AI adalah platform teknologi kecerdasan buatan (AI) yang
menyediakan solusi berbasis AI untuk meningkatkan efisiensi
operasional, analisis data, dan pengalaman pelanggan bagi UMKM hingga
perusahaan besar.
</p>
),
},
{
question: "Apa saja produk yang ditawarkan oleh Rekan AI?",
answer: (
<div>
<p>Kami menawarkan beberapa produk unggulan, termasuk:</p>
<ul className="list-disc list-inside">
<li>
Rekan Doku: Solusi autentikasi dan manajemen dokumen digital.
</li>
<li>Rekan HR: Automasi dan optimalisasi proses HR.</li>
<li>
Rekan LLM: AI berbasis model bahasa besar untuk analisis dan
komunikasi.
</li>
<li>Rekan Veri: Verifikasi data yang cepat dan akurat.</li>
</ul>
</div>
),
},
{
question: "Bagaimana cara menghubungi tim Rekan AI?",
answer: (
<div>
<p>Anda dapat menghubungi kami melalui:</p>
<ul className="list-disc list-inside">
<li>Email: support@rekanai.com</li>
<li>Telepon: (+62) 123-4567-890</li>
<li>WhatsApp: (+62) 812-3456-7890</li>
</ul>
</div>
),
},
{
question: "Apakah solusi Rekan AI mudah diimplementasikan?",
answer: (
<p>
Ya, produk kami dirancang untuk integrasi yang mulus dengan sistem
bisnis Anda yang sudah ada. Kami juga menyediakan dukungan teknis
untuk memastikan implementasi berjalan lancar.
</p>
),
},
{
question: "Apakah Rekan AI cocok untuk UMKM?",
answer: (
<p>
Tentu saja! Kami menawarkan solusi yang terjangkau, mudah digunakan,
dan dapat membantu UMKM meningkatkan efisiensi, mengurangi biaya
operasional, dan mempercepat pertumbuhan.
</p>
),
},
{
question: "Bagaimana dengan keamanan data?",
answer: (
<p>
Keamanan adalah prioritas kami. Semua produk Rekan AI menggunakan
teknologi enkripsi canggih untuk melindungi data Anda dari ancaman
cyber.
</p>
),
},
{
question: "Bagaimana saya memulai menggunakan produk Rekan AI?",
answer: (
<p>
Anda dapat memulai dengan menghubungi tim kami untuk demo produk atau
konsultasi gratis. Kami akan membantu Anda menemukan solusi yang
paling sesuai dengan kebutuhan bisnis Anda.
</p>
),
},
{
question: "Apakah Rekan AI memiliki paket harga yang bisa dipilih?",
answer: (
<p>
Ya, kami dapat memberikan paket harga terbaik untuk solusi produk yang
Anda pilih. Informasi lebih lanjut silakan hubungi kami dan
konsultasikan kebutuhan Anda secara gratis.
</p>
),
},
];
return (
<div className="text-[#212121] max-w-4xl mx-auto px-4 py-6 text-center ">
{/* Judul halaman FAQ */}
<div className="mt-[111px]">
<h1 className="text-[32px] font-semibold leading-[48px] tracking-[0.005em] text-center mb-4">
Frequently Asked Questions
</h1>
<h2 className="text-[20px] font-normal leading-[30px] tracking-[0.005em] text-center mb-6">
Pertanyaan Umum tentang Rekan AI
</h2>
</div>
{/* Bagian FAQ */}
<div className="space-y-4 mb-[110px] mt-[60px] ">
{faqData.map((item, index) => (
<div
key={index}
className="border border-[#5B59E8] rounded-lg overflow-hidden mb-[22px]"
>
{/* Bagian untuk menampilkan pertanyaan dan tanda buka/tutup */}
<div
className={`flex justify-between items-center p-4 cursor-pointer bg-white border-b ${
// Jika pertanyaan ini dibuka, beri highlight
openQuestion === index ? "text-blue-500" : ""
}`}
onClick={() => toggleQuestion(index)} // Ketika pertanyaan diklik, panggil toggleQuestion
>
<span className="font-bold">{item.question}</span>
<span>{openQuestion === index ? "" : "+"}</span> {/* Tampilkan tanda buka atau tutup */}
</div>
{/* Bagian untuk menampilkan jawaban jika pertanyaan ini terbuka */}
{openQuestion === index && (
<div className="p-4 text-left bg-white text-sm">
{item.answer}
</div>
)}
</div>
))}
</div>
</div>
);
};
export default FAQ;

View File

@ -0,0 +1,113 @@
// Import gambar-gambar yang digunakan dalam komponen Footer
import nvdia from "../asset/nvidia.png"; // Gambar logo NVIDIA sebagai partner
import kmn from "../asset/kementerian.png"; // Gambar logo Kementerian sebagai partner
import kominfo from "../asset/kominfo.png"; // Gambar logo Kominfo sebagai partner
import ojk from "../asset/ojk.png"; // Gambar logo OJK sebagai partner
import facebook from "../asset/facebook.png"; // Gambar logo Facebook untuk ikon media sosial
import x from "../asset/x.png"; // Gambar logo X (dulu Twitter) untuk ikon media sosial
import instagram from "../asset/instagram.png"; // Gambar logo Instagram untuk ikon media sosial
import frame from "../asset/Component 11.png"; // Gambar logo utama perusahaan
function Footer() {
return (
<footer className="bg-[#D4DAE4] py-10 text-[#212121]">
{/* Kontainer utama footer */}
<div className="flex flex-col sm:flex-row sm:flex-wrap justify-between gap-5 mx-5 sm:mx-28 mt-20 text-sm">
{/* Kolom 1: Logo perusahaan */}
<div className="mb-5 sm:mb-0">
<img
src={frame} // Gambar logo perusahaan
alt="Logo"
className="max-w-[200px] w-[50.3px] h-[40.24px] sm:mx-0"
/>
</div>
{/* Kolom 2: Deskripsi singkat perusahaan */}
<div className="flex-1 mb-5 sm:mb-0 sm:pl-0">
<div className="flex mb-5">
<p>
<strong className="text-[25px] text-[#5B59E8]">Rekan AI</strong>{" "}
<br />
<span className="text-[#5B59E8] italic">
Reimagine Your Business with AI.
</span>
</p>
</div>
<p className="mb-4">
Jl. Anggrek No.6, Sawah Lama, Kec. Ciputat, Kota Tangerang Selatan,
Banten 15413
</p>
<p className="mb-4">Lebih dekat dengan Kami</p>
<div className="flex space-x-3">
{/* Tautan ke media sosial */}
<a href="#">
<img src={instagram} alt="Instagram" className="w-5 h-5" /> {/* Ikon Instagram */}
</a>
<a href="#">
<img src={facebook} alt="Facebook" className="w-5 h-5" /> {/* Ikon Facebook */}
</a>
<a href="#">
<img src={x} alt="Twitter" className="w-5 h-5" /> {/* Ikon Twitter (X) */}
</a>
</div>
</div>
{/* Kolom 3: Produk perusahaan */}
<div className="flex-1 mb-5 sm:mb-0 sm:pl-0">
<h4 className="text-base font-semibold mb-4">Produk Kami</h4>
<ul className="space-y-4">
<li>Rekan Doku</li> {/* Produk: Dokumen otomatis */}
<li>Rekan Veri</li> {/* Produk: Verifikasi data */}
<li>Rekan HR</li> {/* Produk: Manajemen SDM */}
<li>Rekan LLM</li> {/* Produk: Model bahasa besar */}
</ul>
</div>
{/* Kolom 4: Solusi yang ditawarkan */}
<div className="flex-1 mb-5 sm:mb-0 sm:pl-0">
<h4 className="text-base font-semibold mb-4">Solusi Kami</h4>
<ul className="space-y-4">
<li>Personal</li> {/* Solusi untuk individu */}
<li>UMKM</li> {/* Solusi untuk Usaha Mikro, Kecil, dan Menengah */}
<li>Corporate Business</li> {/* Solusi untuk perusahaan besar */}
</ul>
</div>
{/* Kolom 5: Informasi kontak */}
<div className="flex-1 mb-5 sm:mb-0 sm:pl-0">
<h4 className="text-base font-semibold mb-4">Hubungi Kami</h4>
<ul className="space-y-4">
<li>Email: support@rekanai.com</li> {/* Email dukungan */}
<li>Phone: +68452098</li> {/* Nomor telepon */}
<li>F.A.Q</li> {/* Halaman Pertanyaan yang Sering Diajukan */}
</ul>
</div>
{/* Kolom 6: Partner perusahaan */}
<div className="mb-5 sm:mb-0 sm:pl-0">
<div className="mb-4">
<img
src={nvdia} // Gambar logo partner NVIDIA
alt="NVIDIA Inception Premier Member"
className="w-[221px] h-[83px]"
/>
</div>
<div className="flex gap-5">
<img src={kmn} alt="Partner 1" className="w-[56px] h-[72px]" /> {/* Gambar logo partner Kementerian */}
<img src={kominfo} alt="Partner 2" className="w-[63px] h-[62px]" /> {/* Gambar logo partner Kominfo */}
<img src={ojk} alt="Partner 3" className="w-[77px] h-[60px]" /> {/* Gambar logo partner OJK */}
</div>
</div>
</div>
{/* Bagian hak cipta */}
<div className="text-left mt-40 mx-5 sm:mx-28 text-xs">
<p>
© Copyright 2025 Rekan AI. Seluruh hak cipta dilindungi undang-undang
</p>
</div>
</footer>
);
}
export default Footer;

View File

@ -0,0 +1,133 @@
import bgImage from "../asset/image 10.png";
const ContactForm = () => {
return (
<div
className="flex min-h-screen items-center justify-center p-5 text-white overflow-hidden"
// Menentukan gaya background menggunakan gambar dengan gradien
style={{
background: `linear-gradient(to right, #dc016866, rgba(91, 89, 232, 1)), url(${bgImage})`,
backgroundSize: "cover", // Memastikan background menutupi seluruh elemen
backgroundPosition: "center", // Menempatkan gambar di tengah
}}
>
<div className="flex flex-col lg:flex-row items-start w-full max-w-6xl">
{/* Bagian Kiri */}
<div className="flex-1 p-5 mb-10 lg:mb-auto mt-20">
{/* Judul utama */}
<h2 className="text-[32px] font-[700] leading-[48px] tracking-[0.005em] text-left mb-[39px]">
Isi formulir di samping ini dan kami akan menghubungi Anda secepat
mungkin
</h2>
{/* Deskripsi tambahan */}
<p className="text-[20px] font-[400] leading-[30px] tracking-[0.005em] text-left mb-6">
Kami percaya bahwa kolaborasi adalah kunci kesuksesan. <br />
Hubungi kami hari ini, dan mari wujudkan masa depan bisnis Anda
bersama Rekan AI!
</p>
</div>
{/* Bagian Form */}
<div className="flex-1 bg-white text-[#212121] rounded-2xl p-8 shadow-lg border-4 border-pink-300 mx-auto lg:mx-0 lg:ml-12 w-full max-w-lg mt-[79px] mb-[79px]">
{/* Judul form */}
<h3 className="text-xl font-bold mb-4 text-[#212121]">
Hubungi Tim Terbaik Kami
</h3>
{/* Deskripsi form */}
<p className="mb-6 text-[#212121]">
Silakan isi data diri Anda pada formulir di bawah ini
</p>
{/* Formulir input */}
<form className="flex flex-col gap-4">
{/* Input Nama */}
<div>
<label className="text-[#6B5CEA] font-bold">
Nama (Tanpa Gelar)*
</label>
<input
type="text"
placeholder="Masukkan nama Anda"
required
className="w-full mt-1 p-4 border rounded-lg focus:ring-2 focus:ring-indigo-500"
/>
</div>
{/* Input Nomor Telepon */}
<div>
<label className="text-[#6B5CEA] font-bold">
Nomor Telepon*
</label>
<input
type="tel"
placeholder="Masukkan nomor telepon Anda"
required
className="w-full mt-1 p-4 border rounded-lg focus:ring-2 focus:ring-indigo-500"
/>
</div>
{/* Input Email */}
<div>
<label className="text-[#6B5CEA] font-bold">Email*</label>
<input
type="email"
placeholder="Masukkan email Anda"
required
className="w-full mt-1 p-4 border rounded-lg focus:ring-2 focus:ring-indigo-500"
/>
</div>
{/* Input Nama Organisasi */}
<div>
<label className="text-[#6B5CEA] font-bold">
Nama Organisasi/Perusahaan
</label>
<input
type="text"
placeholder="Masukkan nama organisasi/perusahaan Anda"
className="w-full mt-1 p-4 border rounded-lg focus:ring-2 focus:ring-indigo-500"
/>
</div>
{/* Dropdown Pilih Kebutuhan */}
<div>
<label className="text-[#6B5CEA] font-bold">
Pilih Kebutuhan
</label>
<select
required
className="w-full mt-1 p-4 border rounded-lg focus:ring-2 focus:ring-indigo-500"
>
<option value="">Pilih kebutuhan Anda</option>
<option value="konsultasi">Konsultasi</option>
<option value="pelatihan">Pelatihan</option>
<option value="pengembangan">Pengembangan</option>
</select>
</div>
{/* Checkbox Verifikasi */}
<div className="flex items-center gap-2">
<input
type="checkbox"
required
className="focus:ring-2 focus:ring-indigo-500"
/>
<span className="text-[#212121]">Saya bukan robot</span>
</div>
{/* Tombol Kirim */}
<button
type="submit"
className="bg-indigo-500 hover:bg-indigo-600 text-white font-bold py-3 px-6 rounded-lg shadow-md transition-all w-[173px] pr-6"
>
Kirim Pesan
</button>
</form>
</div>
</div>
</div>
);
};
export default ContactForm;

View File

@ -0,0 +1,16 @@
import WaButtons from '../asset/Whatsapp22.png'; // Mengimpor gambar ikon WhatsApp
const WhatsAppButton = () => {
return (
<div className="fixed bottom-2 right-2 md:right-24 flex justify-center items-center w-16 h-16 md:w-20 md:h-20 rounded-full z-50 cursor-pointer border-4 border-[#6950DA] bg-gradient-to-l from-[#FD66B9] to-[#A162F9] m-[10px]">
{/* Tombol WhatsApp */}
<img
className="w-10 h-10 md:w-12 md:h-12" // Menentukan ukuran ikon WhatsApp
src={WaButtons} // Gambar yang diimpor
alt="WhatsApp" // Deskripsi gambar jika gambar gagal dimuat
/>
</div>
);
};
export default WhatsAppButton;

17
src/index.css Normal file
View File

@ -0,0 +1,17 @@
/* Mengimpor basis CSS dari Tailwind CSS */
@tailwind base;
/* Mengimpor komponen-komponen UI dari Tailwind CSS */
@tailwind components;
/* Mengimpor utilitas Tailwind CSS untuk penggunaan styling cepat */
@tailwind utilities;
/* Menambahkan aturan dasar untuk proyek Anda di dalam layer 'base' */
@layer base {
/* Mengatur font dasar untuk elemen html */
html {
/* Menetapkan font 'Montserrat' sebagai font dasar untuk seluruh halaman */
font-family: 'Montserrat';
}
}

11
src/main.jsx Normal file
View File

@ -0,0 +1,11 @@
import { StrictMode } from 'react' // Mengimpor StrictMode dari React untuk memeriksa potensi masalah dalam aplikasi
import { createRoot } from 'react-dom/client' // Mengimpor fungsi createRoot untuk membuat root DOM untuk aplikasi
import './index.css' // Mengimpor file CSS global yang akan diterapkan ke seluruh aplikasi
import App from './App.jsx' // Mengimpor komponen utama aplikasi (App) dari file App.jsx
// Membuat root React pada elemen dengan id 'root' dan merender aplikasi
createRoot(document.getElementById('root')).render(
<StrictMode>
<App />
</StrictMode>,
)

18
tailwind.config.js Normal file
View File

@ -0,0 +1,18 @@
/** @type {import('tailwindcss').Config} */
export default {
// Menentukan file-file yang akan dipindai oleh Tailwind untuk menghasilkan kelas-kelas CSS yang digunakan.
content: [
// Memindai file HTML di direktori root
"./index.html",
// Memindai semua file JavaScript dan TypeScript (termasuk JSX dan TSX) di dalam direktori src dan subdirektorinya
"./src/**/*.{js,ts,jsx,tsx}",
],
theme: {
// Bagian untuk memperluas (extend) tema Tailwind. Anda bisa menambahkan tema atau konfigurasi lain di sini.
extend: {
// Misalnya, Anda bisa menambahkan warna kustom, font, spacing, dan lainnya di dalam bagian ini
},
},
// Daftar plugin yang akan digunakan oleh Tailwind
plugins: [],
};

7
vite.config.js Normal file
View File

@ -0,0 +1,7 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
})