Skip to content

Commit 3433330

Browse files
committed
Added Featured Projects showcase section with images
1 parent 0f889e9 commit 3433330

5 files changed

Lines changed: 87 additions & 4 deletions

File tree

assets/img/showcase_bea_cukai.png

218 KB
Loading

assets/img/showcase_erp.png

624 KB
Loading

assets/img/showcase_wms.png

261 KB
Loading

assets/js/data.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,33 @@ export const achievements = [
8585
},
8686
]
8787

88+
export const showcase = [
89+
{
90+
title: 'Enterprise Resource Planning (ERP)',
91+
subtitle: 'Integrated Business Management Suite',
92+
description:
93+
'Sebuah sistem terpusat yang mengintegrasikan seluruh proses bisnis inti perusahaan mulai dari Finance, Procurement, Inventory, Production, hingga HR. Dirancang untuk skalabilitas tinggi dan real-time decision making.',
94+
image: 'assets/img/showcase_erp.png',
95+
tags: ['Desktop & Web Ecosystem', 'Finance & Accounting', 'Supply Chain', 'Full Automation'],
96+
},
97+
{
98+
title: 'Ekosistem Integrasi Bea Cukai',
99+
subtitle: 'ERP + IT Inventory + CEISA 4.0 Host-to-Host',
100+
description:
101+
'Solusi kepatuhan Bea Cukai (Kawasan Berikat) yang menghubungkan data ERP pabrik secara langsung dengan portal CEISA 4.0. Menjamin data realtime, akurat, dan sesuai regulasi tanpa input manual ganda.',
102+
image: 'assets/img/showcase_bea_cukai.png',
103+
tags: ['Government Compliance', 'Host-to-Host API', 'Automated Reporting', 'Zero-Error Data'],
104+
},
105+
{
106+
title: 'Warehouse Management System (WMS)',
107+
subtitle: 'Automotive Industry Standard (PT. TVS)',
108+
description:
109+
'Sistem manajemen gudang canggih untuk industri otomotif dengan fitur First-In-First-Out (FIFO), serial number tracking, dan optimasi layout gudang. Meningkatkan akurasi stok hingga 99.9% dan efisiensi picking.',
110+
image: 'assets/img/showcase_wms.png',
111+
tags: ['Automotive Standard', 'FIFO Logic', 'Mobile Scanning', 'Stock Accuracy >99%'],
112+
},
113+
]
114+
88115
export const projects = [
89116
{
90117
no: 1,

index.html

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,15 +248,38 @@ <h3 class="text-xl font-bold mb-4 text-slate-900 dark:text-white">Core Focus</h3
248248
</li>
249249
</ul>
250250
</div>
251-
</div>
252-
</div>
253251
</div>
254252
</section>
255253

254+
<!-- Project Showcase Section -->
255+
<section id="showcase" class="py-24 bg-slate-50 dark:bg-slate-900 transition-colors duration-300 relative overflow-hidden">
256+
<!-- Decoration -->
257+
<div class="absolute top-0 right-0 -mr-20 -mt-20 w-96 h-96 bg-blue-500/5 rounded-full blur-3xl"></div>
258+
<div class="absolute bottom-0 left-0 -ml-20 -mb-20 w-96 h-96 bg-purple-500/5 rounded-full blur-3xl"></div>
259+
260+
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
261+
<div class="text-center mb-16">
262+
<h2 class="text-3xl md:text-4xl font-bold mb-4 text-slate-900 dark:text-white">Featured Projects</h2>
263+
<p class="text-slate-500 dark:text-slate-400 max-w-2xl mx-auto">High-impact solutions delivering real business value in manufacturing and compliance.</p>
264+
</div>
265+
266+
<div class="space-y-20" id="showcase-container">
267+
<!-- Injected via JS -->
268+
</div>
269+
270+
<div class="mt-16 text-center">
271+
<a href="projects.html" class="inline-flex items-center px-6 py-3 border border-transparent text-base font-medium rounded-md shadow-sm text-white bg-blue-600 hover:bg-blue-700 transition-all">
272+
View All Developed Systems
273+
<svg class="ml-2 -mr-1 w-5 h-5" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg>
274+
</a>
275+
</div>
276+
</div>
277+
</section>
278+
256279
<!-- Experience Section -->
257280
<section
258281
id="experience"
259-
class="py-24 relative bg-slate-50 dark:bg-slate-900 transition-colors duration-300"
282+
class="py-24 relative bg-white dark:bg-slate-800/50 transition-colors duration-300"
260283
>
261284
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
262285
<h2 class="text-3xl md:text-4xl font-bold mb-12 text-center text-slate-900 dark:text-white">
@@ -389,7 +412,7 @@ <h3 class="text-slate-900 dark:text-white font-semibold mb-2">Correspondence Add
389412

390413
<!-- Application Script -->
391414
<script type="module">
392-
import { profile, experiences, skills, achievements } from './assets/js/data.js'
415+
import { profile, experiences, skills, achievements, showcase } from './assets/js/data.js'
393416
import { renderNavbar, renderFooter } from './assets/js/components.js'
394417
import {
395418
initTheme,
@@ -422,6 +445,39 @@ <h3 class="text-slate-900 dark:text-white font-semibold mb-2">Correspondence Add
422445
document.getElementById('profile-summary').textContent = profile.summary
423446
document.getElementById('profile-sub-summary').textContent = profile.sub_summary
424447

448+
// Render Showcase
449+
const showcaseContainer = document.getElementById('showcase-container')
450+
showcase.forEach((item, index) => {
451+
const isReverse = index % 2 !== 0;
452+
const html = `
453+
<div class="flex flex-col lg:flex-row ${isReverse ? 'lg:flex-row-reverse' : ''} items-center gap-12">
454+
<div class="w-full lg:w-1/2">
455+
<div class="relative group rounded-2xl overflow-hidden shadow-2xl border border-slate-200 dark:border-slate-800">
456+
<div class="absolute inset-0 bg-blue-600/10 group-hover:bg-transparent transition-all duration-500 z-10"></div>
457+
<img src="${item.image}" alt="${item.title}" class="w-full h-auto transform group-hover:scale-105 transition-transform duration-700">
458+
</div>
459+
</div>
460+
<div class="w-full lg:w-1/2">
461+
<div class="inline-flex items-center px-3 py-1 rounded-full bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 text-sm font-medium mb-4">
462+
${item.subtitle}
463+
</div>
464+
<h3 class="text-3xl font-bold text-slate-900 dark:text-white mb-6 leading-tight">${item.title}</h3>
465+
<p class="text-lg text-slate-600 dark:text-slate-300 mb-8 leading-relaxed">
466+
${item.description}
467+
</p>
468+
<div class="flex flex-wrap gap-2">
469+
${item.tags.map(tag => `
470+
<span class="px-3 py-1 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-400 text-sm rounded-md font-medium border border-slate-200 dark:border-white/10">
471+
${tag}
472+
</span>
473+
`).join('')}
474+
</div>
475+
</div>
476+
</div>
477+
`;
478+
showcaseContainer.insertAdjacentHTML('beforeend', html);
479+
});
480+
425481
// Age Calculation
426482
const age = new Date().getFullYear() - new Date(profile.birth_date).getFullYear()
427483
document.getElementById('profile-age').textContent = `${age} Years Old`

0 commit comments

Comments
 (0)