/* Portfolio App — Phan Phuoc Thinh */ const PROJECTS = [ { id: 1, title: 'Project 1 — Sales Analytics Dashboard', category: 'Data Analytics', image: 'assets/project1.png', summary: 'Interactive BI dashboard providing real-time sales insights across multiple regions and product lines.', description: 'Built an end-to-end business intelligence solution that consolidates data from multiple sources into a unified dashboard. The system processes over 500K records daily and provides stakeholders with actionable insights through interactive visualizations.', features: [ 'Real-time data pipeline from 5+ source systems', 'Interactive drill-down charts with cross-filtering', 'Automated daily/weekly report generation', 'Role-based access control for different departments', 'Mobile-responsive dashboard layout', ], tech: ['Power BI', 'SQL Server', 'Python', 'Azure Data Factory', 'DAX'], }, { id: 2, title: 'Project 2 — Data Pipeline Automation', category: 'Data Engineering', image: 'assets/project2.png', summary: 'Automated ETL pipelines reducing manual data processing time by 80% across the organization.', description: 'Designed and implemented a robust data pipeline architecture that automates the extraction, transformation, and loading of business-critical data. Reduced processing time from 8 hours to under 90 minutes while improving data quality and consistency.', features: [ 'Automated ETL workflows with error handling', 'Data quality checks and anomaly detection', 'Scheduling and monitoring dashboard', 'Integration with ERP and CRM systems', 'Incremental load optimization', ], tech: ['Python', 'Apache Airflow', 'PostgreSQL', 'Docker', 'AWS S3'], }, { id: 3, title: 'Project 3 — Predictive Analytics Model', category: 'Machine Learning', image: 'assets/project3.png', summary: 'ML-powered forecasting model improving demand prediction accuracy to 92% for supply chain planning.', description: 'Developed a machine learning solution for demand forecasting that significantly improved inventory planning. The model incorporates seasonal patterns, promotional events, and market trends to generate accurate predictions across 200+ SKUs.', features: [ 'Time-series forecasting with ensemble methods', 'Feature engineering from 30+ business variables', 'A/B testing framework for model validation', 'Automated retraining pipeline', 'Executive reporting with confidence intervals', ], tech: ['Python', 'Scikit-learn', 'XGBoost', 'Pandas', 'Jupyter', 'Tableau'], }, ]; /* ─── Project Detail Modal ─── */ function ProjectDetail({ project, onClose, tweaks }) { const primary = tweaks.primaryColor; React.useEffect(() => { document.body.style.overflow = 'hidden'; return () => { document.body.style.overflow = ''; }; }, []); return (
e.stopPropagation()}> {/* Header Image */}
{project.title}
{/* Content */}
{project.category}

{project.title}

{project.description}

{/* Features */}

Key Features

{project.features.map((f, i) => (
{f}
))}
{/* Technologies */}

Technologies

{project.tech.map((t, i) => ( {t} ))}
); } /* ─── Hero Section ─── */ function HeroSection({ onNavigate, tweaks }) { const primary = tweaks.primaryColor; return (
{/* Decorative elements */} {/* Gradient orb */}
Hello, I'm Phan Phuoc Thinh

DATA
ANALYST

Transforming complex data into actionable insights. Passionate about building data-driven solutions that drive business growth.

onNavigate('contact')} color={primary}/> {}} color={primary} icon={ }/>
{/* Scroll indicator */}
); } function HeroButton({ label, primary: isPrimary, onClick, color, icon }) { const [hovered, setHovered] = React.useState(false); return ( ); } /* ─── About Section ─── */ function AboutSection({ tweaks }) { const primary = tweaks.primaryColor; const skills = ['Python', 'SQL', 'Power BI', 'Tableau', 'Excel', 'ETL', 'Data Modeling', 'Machine Learning', 'Statistics', 'Azure']; return (

About me

I'm a Data Analyst with a strong background in business intelligence, data engineering, and predictive analytics. Previously worked as an ERP Implementation Analyst, where I gained deep expertise in enterprise systems and data workflows.

I specialize in turning raw data into strategic insights, building automated pipelines, and creating dashboards that empower decision-makers at every level.

{skills.map(s => )}
); } function StatCard({ icon, number, label, color }) { const [hovered, setHovered] = React.useState(false); return (
setHovered(true)} onMouseLeave={() => setHovered(false)} style={{ padding: 28, borderRadius: 20, background: hovered ? `${color}12` : 'rgba(57,62,70,0.3)', border: `1px solid ${hovered ? color + '30' : 'rgba(238,238,238,0.08)'}`, display: 'flex', alignItems: 'center', gap: 20, transition: 'all 0.4s ease', transform: hovered ? 'translateX(8px)' : 'none', }} >
{number}
{label}
); } /* ─── Experience & Education Section ─── */ function ExperienceSection({ tweaks }) { const primary = tweaks.primaryColor; const experiences = [ { role: 'Data Analyst', company: 'Tan Thanh Wood Joint Stocks Company', period: '9/2025 — Present', description: 'Gathered and analyzed business requirements from cross-functional departments to develop and optimize internal ERP applications. Managed the full software development lifecycle including requirements analysis, BPMN process design, stakeholder review, development, UAT, and production release.', highlights: ['ERP Modules', 'BPMN Design', 'Process Digitization', 'UAT'], }, { role: 'Developer (Remote)', company: 'Motico Company Limited', period: '3/2026 — Present', description: 'Received business requirements directly from the General Director to analyze and develop core ERP modules from scratch. Designed and built initial MVP HR and task management modules, serving as the sole IT resource on-site.', highlights: ['ERP Development', 'HR Module', 'Task Management'], }, { role: 'Intern', company: 'VNPT Cần Thơ', period: '5/2024 — 8/2024', description: 'Supported healthcare management system development under mentor guidance, gaining hands-on exposure to professional software development practices.', highlights: ['Healthcare System', 'Software Development'], }, ]; const education = [ { degree: 'Bachelor of Software Engineering', school: 'Can Tho University', period: '2019 — 2024', description: 'Focused on software engineering, database systems, and data science. Graduated with a GPA of 7.76/10.', }, ]; return (
{/* Experience */}

Work Experience

{/* Timeline line */}
{experiences.map((exp, i) => ( ))}
{/* Education */}

Education

{education.map((edu, i) => ( ))}
); } function TimelineCard({ item, type, color, isLast }) { const [hovered, setHovered] = React.useState(false); return (
setHovered(true)} onMouseLeave={() => setHovered(false)}> {/* Dot */}
{/* Card */}

{item.role || item.degree}

{item.company || item.school}
{item.period}

{item.description}

{item.highlights && (
{item.highlights.map((h, i) => ( {h} ))}
)}
); } /* ─── Projects Section ─── */ function ProjectsSection({ onSelectProject, tweaks }) { const primary = tweaks.primaryColor; const [filter, setFilter] = React.useState('All'); const categories = ['All', 'Data Analytics', 'Data Engineering', 'Machine Learning']; const filtered = filter === 'All' ? PROJECTS : PROJECTS.filter(p => p.category === filter); return (

My recent works

{categories.map(c => ( ))}
{filtered.map((p, i) => ( ))}
); } /* ─── Contact Section ─── */ function ContactSection({ tweaks }) { const primary = tweaks.primaryColor; const [form, setForm] = React.useState({ name: '', email: '', message: '' }); const [sent, setSent] = React.useState(false); const [focused, setFocused] = React.useState(null); const handleSubmit = (e) => { e.preventDefault(); setSent(true); setTimeout(() => setSent(false), 3000); setForm({ name: '', email: '', message: '' }); }; const inputStyle = (field) => ({ width: '100%', padding: '16px 24px', borderRadius: 16, background: 'rgba(57,62,70,0.5)', border: `2px solid ${focused === field ? primary : 'transparent'}`, color: '#EEE', fontFamily: 'Poppins, sans-serif', fontSize: 16, outline: 'none', transition: 'all 0.3s', boxSizing: 'border-box', }); return (

Got a project
in mind?

Let's discuss how data-driven solutions can help your business grow. I'm always open to new opportunities and collaborations.

setForm({...form, name: e.target.value})} placeholder="Name" style={inputStyle('name')} onFocus={() => setFocused('name')} onBlur={() => setFocused(null)}/>
setForm({...form, email: e.target.value})} placeholder="Email" type="email" style={inputStyle('email')} onFocus={() => setFocused('email')} onBlur={() => setFocused(null)}/>