first commit

This commit is contained in:
Vassshhh
2025-07-30 14:53:08 +07:00
commit a92b63bbd0
27 changed files with 18564 additions and 0 deletions

38
src/App.css Normal file
View File

@@ -0,0 +1,38 @@
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}

70
src/App.js Normal file
View File

@@ -0,0 +1,70 @@
import React, { useEffect, useState } from 'react';
import 'bootstrap/dist/css/bootstrap.min.css';
// import './assets/css/templatemo-chain-app-dev.css'; // Assuming you copy your original CSS here
// import './assets/css/animated.css';
// import './assets/css/owl.css';
// Import your converted React components
import Header from './components/Header';
import HeroSection from './components/HeroSection';
import ServicesSection from './components/ServicesSection';
import ProductSection from './components/ProductSection';
import AcademySection from './components/AcademySection';
import AboutUsSection from './components/AboutUsSection';
import KnowledgeBaseSection from './components/KnowledgeBaseSection';
import ClientsSection from './components/ClientsSection';
import Footer from './components/Footer';
function App() {
const [loading, setLoading] = useState(true);
useEffect(() => {
// Simulate preloader and remove it after some time
const timer = setTimeout(() => {
setLoading(false);
}, 1000); // Adjust time as needed
return () => clearTimeout(timer);
}, []);
if (loading) {
return (
<div id="js-preloader" className="js-preloader">
<div className="preloader-inner">
<span className="dot"></span>
<div className="dots">
<span></span>
<span></span>
<span></span>
</div>
</div>
</div>
);
}
return (
<div className="App">
<Header />
<HeroSection />
{/* FULL WIDTH IMAGE SECTION */}
{/* This can be a separate component or integrated into HeroSection */}
<div className="custom-image-section wow fadeInRight">
<a href="https://registration.kediritechnopark.com/" target="_blank" className="custom-image-link" rel="noopener noreferrer">
<div className="custom-image-wrapper">
<img src="/assets/images/FREE!.png" alt="Snack dan Jajanan" className="custom-image" />
<div className="light-glare"></div>
</div>
</a>
</div>
<ServicesSection />
<ProductSection />
<AcademySection />
<AboutUsSection />
<KnowledgeBaseSection />
<ClientsSection />
<Footer />
</div>
);
}
export default App;

8
src/App.test.js Normal file
View File

@@ -0,0 +1,8 @@
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});

View File

@@ -0,0 +1,40 @@
import React from 'react';
import { Container, Row, Col, Button } from 'react-bootstrap';
const AboutUsSection = () => {
return (
<section id="about" className="about-us section py-5">
<Container>
<Row className="align-items-center">
<Col lg={6}>
<div className="section-heading">
<span style={{ color: '#6a59ff', fontWeight: 'bold' }}>Kediri Technopark</span>
<h2 className="mt-2">ABOUT US</h2>
<img src="/assets/images/heading-line-dec.png" alt="" />
<p className="mt-3">
<strong>Kediri Technopark: Katalis Inovasi dan Pusat Pertumbuhan Digital Lokal</strong><br /><br />
Kediri Technopark adalah inisiatif strategis yang bertujuan membangun ekosistem teknologi dan inovasi yang dinamis di Kediri, Jawa Timur. Kami menyediakan infrastruktur, sumber daya, dan komunitas pendukung yang dibutuhkan untuk mendorong pertumbuhan startup dan bisnis IT yang sudah ada.<br /><br />
Dengan misi memberdayakan talenta lokal, menjembatani teknologi dan industri, serta mempercepat transformasi digital, Kediri Technopark berkomitmen menjadi penggerak kemajuan ekonomi dan teknologi, baik di tingkat lokal maupun nasional.
</p>
<div className="mt-4 d-flex gap-3">
<Button href="konsultasi.html" className="px-4 py-2 rounded-pill text-white" style={{ background: 'linear-gradient(to right, #6a59ff, #8261ee)', border: 'none' }}>
Konsultasi
</Button>
<Button href="https://wa.me/6281318894994" target="_blank" variant="outline-success" className="px-4 py-2 rounded-pill">
<i className="fab fa-whatsapp"></i> WhatsApp
</Button>
</div>
</div>
</Col>
<Col lg={6}>
<div className="right-image">
<img src="/assets/images/about-right-dec.png" alt="" className="img-fluid" />
</div>
</Col>
</Row>
</Container>
</section>
);
};
export default AboutUsSection;

View File

@@ -0,0 +1,48 @@
import React from 'react';
import { Container, Row, Col, Card, Button } from 'react-bootstrap';
const AcademySection = () => {
return (
<section id="academy" className="academy-tables py-5">
<Container>
<div className="section-heading text-center mb-4">
<h4>OUR <em>ACADEMY PROGRAM</em></h4>
<img src="/assets/images/heading-line-dec.png" alt="" />
<p>Academy Program adalah wadah belajar digital untuk anak-anak dan remaja. Didesain interaktif, kreatif, dan gratis setiap modul membekali peserta dengan keterampilan masa depan, dari teknologi dasar hingga coding dan proyek nyata.</p>
</div>
<Row>
{[
{ title: 'Digital Funstart', items: ['Pengenalan teknologi', 'Interaktif & menyenangkan', 'Untuk anak-anak usia dini'] },
{ title: 'KidCode', items: ['Belajar coding visual', 'Kreatif & edukatif', 'Untuk anak SD & SMP'] },
{ title: 'Tech for Teens', items: ['Pengembangan skill digital', 'Remaja & pelajar', 'Berbasis proyek'] },
{ title: 'IT Training Camp', items: ['Pelatihan intensif IT', 'Untuk semua usia', 'Instruktur profesional'] },
{ title: 'Smart Teacher', items: ['Pelatihan guru', 'Integrasi teknologi', 'Media ajar digital'] },
{ title: 'Smart Staff', items: ['Pelatihan digital untuk staf', 'Administrasi dan operasional', 'Penguatan sistem kerja'] },
{ title: 'UMKM Go Digital', items: ['Digitalisasi bisnis kecil', 'Platform online', 'Pelatihan marketplace'] },
{ title: 'Creative Spark', items: ['Inkubasi ide kreatif', 'Coaching & mentoring', 'Kompetisi & showcase'] },
].map((program, idx) => (
<Col lg={3} key={idx} className="mb-4">
<Card className="academy-item-regular h-100">
<Card.Body>
<Card.Title>{program.title}</Card.Title>
<div className="icon mb-3">
<img src="/assets/images/pricing-table-01.png" alt="" />
</div>
<ul>
{program.items.map((item, i) => (
<li key={i}>{item}</li>
))}</ul>
<div className="border-button mt-3">
<Button variant="outline-primary" href="#program">Lihat Detail</Button>
</div>
</Card.Body>
</Card>
</Col>
))}
</Row>
</Container>
</section>
);
};
export default AcademySection;

View File

@@ -0,0 +1,28 @@
import React from 'react';
import { Container, Row, Col, Image } from 'react-bootstrap';
const ClientsSection = () => {
return (
<section id="clients" className="the-clients section py-5">
<Container>
<Row>
<Col lg={{ span: 8, offset: 2 }}>
<div className="section-heading text-center mb-4">
<h4>TRUSTED BY <em>OUR CLIENTS</em></h4>
<img src="/assets/images/heading-line-dec.png" alt="" className="mb-3" />
<p>We are proud to work with these amazing brands and organizations.</p>
</div>
<div id="clients-carousel" className="d-flex justify-content-center flex-wrap">
{[1, 2, 3, 4, 5].map((num) => (
<div key={num} className="client-logo-wrapper m-2">
<Image src={`/assets/images/client-logo${num}.png`} alt={`Client ${num}`} fluid />
</div>
))}</div>
</Col>
</Row>
</Container>
</section>
);
};
export default ClientsSection;

49
src/components/Footer.js Normal file
View File

@@ -0,0 +1,49 @@
import React from 'react';
import { Container, Row, Col } from 'react-bootstrap';
const Footer = () => {
return (
<footer id="contact" className="bg-dark text-white py-4">
<Container>
<Row className="justify-content-center">
<Col lg={6} className="text-center mb-3">
<h4>Contact Us</h4>
<p>Sunan Giri GG. I No. 11, Rejomulyo, Kediri, Jawa Timur 64129</p>
<p><a href="tel:+6281318894994" className="text-white">0813 1889 4994</a></p>
<p><a href="mailto:marketing@kediritechnopark.com" className="text-white">marketing@kediritechnopark.com</a></p>
<p><a href="https://instagram.com/kediri.technopark" target="_blank" rel="noopener noreferrer" className="text-white">@kediri.technopark</a></p>
<p><a href="https://kediritechnopark.com" target="_blank" rel="noopener noreferrer" className="text-white">www.KEDIRITECHNOPARK.com</a></p>
<div className="mt-3">
<a href="https://wa.me/6281318894994" target="_blank" rel="noopener noreferrer" className="me-3 text-white fs-4">
<i className="fab fa-whatsapp"></i>
</a>
<a href="https://instagram.com/kediri.technopark" target="_blank" rel="noopener noreferrer" className="text-white fs-4">
<i className="fab fa-instagram"></i>
</a>
</div>
</Col>
<Col lg={6} className="text-center">
<div className="footer-widget">
<h4>About Our Company</h4>
<div className="logo mb-3">
<img src="/assets/images/logo-white.png" alt="Logo" className="img-fluid" />
</div>
<p>Kediri Technopark adalah pusat pengembangan inovasi digital dan aplikasi untuk masyarakat dan pelaku usaha.</p>
</div>
</Col>
<Col lg={12} className="text-center mt-3">
<div className="copyright-text">
<p>
&copy; 2025 Kediri Technopark. All Rights Reserved.<br />
Design by <a href="https://templatemo.com/" target="_blank" rel="noopener noreferrer" className="text-white">TemplateMo</a><br />
Distributed by <a href="https://themewagon.com/" target="_blank" rel="noopener noreferrer" className="text-white">ThemeWagon</a>
</p>
</div>
</Col>
</Row>
</Container>
</footer>
);
};
export default Footer;

25
src/components/Header.js Normal file
View File

@@ -0,0 +1,25 @@
import React from 'react';
import { Navbar, Nav, Container } from 'react-bootstrap';
const Header = () => {
return (
<Navbar bg="light" expand="lg" sticky="top">
<Container>
<Navbar.Brand href="#">Kediri Technopark</Navbar.Brand>
<Navbar.Toggle aria-controls="basic-navbar-nav" />
<Navbar.Collapse id="basic-navbar-nav">
<Nav className="me-auto">
<Nav.Link href="#top">Home</Nav.Link>
<Nav.Link href="#services">Services</Nav.Link>
<Nav.Link href="#produk">Product</Nav.Link>
<Nav.Link href="#academy">Academy</Nav.Link>
<Nav.Link href="#about">About</Nav.Link>
<Nav.Link href="#knowledge">Knowledge</Nav.Link>
</Nav>
</Navbar.Collapse>
</Container>
</Navbar>
);
};
export default Header;

View File

@@ -0,0 +1,26 @@
import React from 'react';
import { Container, Row, Col, Button } from 'react-bootstrap';
const HeroSection = () => {
return (
<section className="hero-section py-5 bg-light">
<Container>
<Row className="align-items-center">
<Col lg={6}>
<h1>KATALIS KARIR DAN BISNIS DIGITAL</h1>
<p>Kami adalah ekosistem tempat mimpi digital tumbuh dan masa depan dibentuk. Di sinilah semangat belajar bertemu dengan inovasi, dan ide-ide muda diberi ruang untuk berkembang. Lebih dari sekadar tempat, kami adalah rumah bagi talenta, teknologi, dan transformasi. Mari jelajahi dunia digital, bangun karir, dan ciptakan solusi semua dimulai dari sini.</p>
<div className="d-flex gap-3">
<Button variant="outline-primary" href="https://instagram.com/kediri.technopark" target="_blank">Instagram</Button>
<Button variant="outline-success" href="tel:+6281318894994">WhatsApp</Button>
</div>
</Col>
<Col lg={6}>
<img src="/assets/images/gambar1.png" alt="Hero Image" className="img-fluid" />
</Col>
</Row>
</Container>
</section>
);
};
export default HeroSection;

View File

@@ -0,0 +1,25 @@
import React from 'react';
import { Container, Row, Col } from 'react-bootstrap';
const KnowledgeBaseSection = () => {
return (
<section id="knowledge" className="knowledge section py-5">
<Container>
<Row>
<Col lg={{ span: 8, offset: 2 }}>
<div className="section-heading text-center mb-4">
<h4>KNOWLEDGE <em>BASE</em></h4>
<img src="/assets/images/heading-line-dec.png" alt="" className="mb-3" />
<p>Berbagai artikel dan panduan untuk membantu Anda memahami teknologi dan inovasi digital.</p>
</div>
<div className="knowledge-content">
<p>Kami sedang mengembangkan pusat dokumentasi digital, artikel praktis, dan tutorial untuk mendukung pelaku usaha dan masyarakat digital. Nantikan konten terbaru kami!</p>
</div>
</Col>
</Row>
</Container>
</section>
);
};
export default KnowledgeBaseSection;

View File

@@ -0,0 +1,42 @@
import React from 'react';
import { Container, Row, Col, Card } from 'react-bootstrap';
const ProductSection = () => {
return (
<section id="produk" className="product-section py-5 bg-light">
<Container>
<div className="section-heading text-center mb-4">
<h4>OUR <em>PRODUCT</em></h4>
<img src="/assets/images/heading-line-dec.png" alt="" />
<p>Kami menyediakan berbagai solusi teknologi untuk mendukung transformasi digital bisnis dan masyarakat.</p>
</div>
<Row className="justify-content-center">
<Col lg={12}>
<div className="d-flex overflow-auto">
<Card className="text-center me-3" style={{ minWidth: '200px' }}>
<Card.Img variant="top" src="/assets/images/mr.kyaiiphone.png" alt="Mr. Kyai" />
<Card.Body>
<Card.Title>MR. KYAI</Card.Title>
</Card.Body>
</Card>
<Card className="text-center me-3" style={{ minWidth: '200px' }}>
<Card.Img variant="top" src="/assets/images/kedaimasteriphone.png" alt="Kedai Master" />
<Card.Body>
<Card.Title>KEDAIMASTER</Card.Title>
</Card.Body>
</Card>
<Card className="text-center" style={{ minWidth: '200px' }}>
<Card.Img variant="top" src="/assets/images/mayageniphone.png" alt="Mayagen" />
<Card.Body>
<Card.Title>MAYAGEN</Card.Title>
</Card.Body>
</Card>
</div>
</Col>
</Row>
</Container>
</section>
);
};
export default ProductSection;

View File

@@ -0,0 +1,44 @@
import React from 'react';
import { Container, Row, Col, Card } from 'react-bootstrap';
const ServicesSection = () => {
return (
<section id="services" className="services py-5">
<Container>
<div className="section-heading text-center mb-4">
<h4>OUR <em>SERVICES</em></h4>
<img src="/assets/images/heading-line-dec.png" alt="" />
<p>Kami menyediakan berbagai solusi teknologi untuk mendukung transformasi digital bisnis dan masyarakat.</p>
</div>
<Row>
<Col lg={4}>
<Card className="mb-4">
<Card.Body>
<Card.Title>Mesthicon</Card.Title>
<Card.Text>Layanan instalasi jaringan, CCTV, dan infrastruktur teknologi.</Card.Text>
</Card.Body>
</Card>
</Col>
<Col lg={4}>
<Card className="mb-4">
<Card.Body>
<Card.Title>Techcare</Card.Title>
<Card.Text>Perakitan komputer, servis, dan konsultasi infrastruktur digital.</Card.Text>
</Card.Body>
</Card>
</Col>
<Col lg={4}>
<Card className="mb-4">
<Card.Body>
<Card.Title>Gawechno</Card.Title>
<Card.Text>Pembuatan software, website, sistem otomatisasi bisnis, dan aplikasi AI.</Card.Text>
</Card.Body>
</Card>
</Col>
</Row>
</Container>
</section>
);
};
export default ServicesSection;

13
src/index.css Normal file
View File

@@ -0,0 +1,13 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}

18
src/index.js Normal file
View File

@@ -0,0 +1,18 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import 'bootstrap/dist/css/bootstrap.min.css';
import reportWebVitals from './reportWebVitals';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

1
src/logo.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

13
src/reportWebVitals.js Normal file
View File

@@ -0,0 +1,13 @@
const reportWebVitals = onPerfEntry => {
if (onPerfEntry && onPerfEntry instanceof Function) {
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry);
getFID(onPerfEntry);
getFCP(onPerfEntry);
getLCP(onPerfEntry);
getTTFB(onPerfEntry);
});
}
};
export default reportWebVitals;

5
src/setupTests.js Normal file
View File

@@ -0,0 +1,5 @@
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom';