|
|
<!DOCTYPE html> |
|
|
<html lang="en"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>Cameron Rafaela - Python Developer & Designer</title> |
|
|
<link rel="icon" type="image/x-icon" href="/static/favicon.ico"> |
|
|
<script src="https://cdn.tailwindcss.com"></script> |
|
|
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> |
|
|
<script src="https://unpkg.com/feather-icons"></script> |
|
|
<script src="https://cdn.jsdelivr.net/npm/animejs/lib/anime.iife.min.js"></script> |
|
|
<script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.net.min.js"></script> |
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/p5.min.js"></script> |
|
|
<style> |
|
|
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@200;300;400;500;600;700;800;900&display=swap'); |
|
|
|
|
|
* { |
|
|
font-family: 'Inter', sans-serif; |
|
|
} |
|
|
.gradient-text { |
|
|
background: linear-gradient(135deg, #FFD700 0%, #FFC125 25%, #FFB90F 50%, #FFD700 75%, #FFC125 100%); |
|
|
-webkit-background-clip: text; |
|
|
-webkit-text-fill-color: transparent; |
|
|
background-clip: text; |
|
|
filter: drop-shadow(0 0 25px rgba(255, 215, 0, 0.9)) drop-shadow(0 0 50px rgba(255, 215, 0, 0.6)) drop-shadow(0 0 75px rgba(255, 215, 0, 0.3)); |
|
|
text-shadow: 0 0 20px rgba(255, 215, 0, 0.8); |
|
|
} |
|
|
.hero-gradient { |
|
|
background: linear-gradient(135deg, #6366f1 0%, #3b82f6 100%); |
|
|
} |
|
|
|
|
|
.card-hover { |
|
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); |
|
|
} |
|
|
|
|
|
.card-hover:hover { |
|
|
transform: translateY(-8px); |
|
|
box-shadow: 0 20px 40px rgba(99, 102, 241, 0.3); |
|
|
} |
|
|
|
|
|
.tech-badge { |
|
|
background: linear-gradient(135deg, rgba(99, 102, 241, 0.2) 0%, rgba(59, 130, 246, 0.2) 100%); |
|
|
backdrop-filter: blur(10px); |
|
|
border: 1px solid rgba(99, 102, 241, 0.3); |
|
|
} |
|
|
|
|
|
.floating { |
|
|
animation: float 6s ease-in-out infinite; |
|
|
} |
|
|
|
|
|
@keyframes float { |
|
|
0%, 100% { transform: translateY(0px); } |
|
|
50% { transform: translateY(-20px); } |
|
|
} |
|
|
|
|
|
.slide-up { |
|
|
opacity: 0; |
|
|
transform: translateY(30px); |
|
|
} |
|
|
|
|
|
.slide-up.active { |
|
|
opacity: 1; |
|
|
transform: translateY(0); |
|
|
transition: all 0.8s ease-out; |
|
|
} |
|
|
|
|
|
.typing-cursor::after { |
|
|
content: '|'; |
|
|
animation: blink 1s infinite; |
|
|
} |
|
|
|
|
|
@keyframes blink { |
|
|
0%, 50% { opacity: 1; } |
|
|
51%, 100% { opacity: 0; } |
|
|
} |
|
|
|
|
|
.blob { |
|
|
position: absolute; |
|
|
filter: blur(40px); |
|
|
opacity: 0.3; |
|
|
animation: blob 7s infinite; |
|
|
} |
|
|
|
|
|
@keyframes blob { |
|
|
0%, 100% { transform: translate(0px, 0px) scale(1); } |
|
|
33% { transform: translate(30px, -50px) scale(1.1); } |
|
|
66% { transform: translate(-20px, 20px) scale(0.9); } |
|
|
} |
|
|
|
|
|
.gradient-border { |
|
|
background: linear-gradient(135deg, #6366f1, #3b82f6); |
|
|
padding: 2px; |
|
|
border-radius: 12px; |
|
|
} |
|
|
#vanta-bg { |
|
|
position: absolute; |
|
|
top: 0; |
|
|
left: 0; |
|
|
width: 100%; |
|
|
height: 100%; |
|
|
z-index: -2; |
|
|
} |
|
|
#matrix-canvas { |
|
|
position: fixed; |
|
|
top: 0; |
|
|
left: 0; |
|
|
width: 100%; |
|
|
height: 100%; |
|
|
z-index: -1; |
|
|
opacity: 0.35; |
|
|
} |
|
|
.matrix-text { |
|
|
color: #FFD700; |
|
|
font-family: 'Inter', monospace; |
|
|
font-weight: 700; |
|
|
text-shadow: 0 0 25px rgba(255, 215, 0, 0.9), 0 0 50px rgba(255, 215, 0, 0.7), 0 0 75px rgba(255, 215, 0, 0.5); |
|
|
} |
|
|
.dark-glass { |
|
|
background: rgba(17, 24, 39, 0.8); |
|
|
backdrop-filter: blur(10px); |
|
|
border: 1px solid rgba(99, 102, 241, 0.2); |
|
|
} |
|
|
|
|
|
.dark-card { |
|
|
background: rgba(31, 41, 55, 0.8); |
|
|
backdrop-filter: blur(10px); |
|
|
border: 1px solid rgba(99, 102, 241, 0.1); |
|
|
} |
|
|
|
|
|
.dark-input { |
|
|
background: rgba(31, 41, 55, 0.9); |
|
|
border: 1px solid rgba(99, 102, 241, 0.3); |
|
|
} |
|
|
|
|
|
.dark-input:focus { |
|
|
border-color: #6366f1; |
|
|
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); |
|
|
} |
|
|
|
|
|
::-webkit-scrollbar { |
|
|
width: 8px; |
|
|
} |
|
|
|
|
|
::-webkit-scrollbar-track { |
|
|
background: #1f2937; |
|
|
} |
|
|
|
|
|
::-webkit-scrollbar-thumb { |
|
|
background: linear-gradient(135deg, #6366f1, #3b82f6); |
|
|
border-radius: 4px; |
|
|
} |
|
|
|
|
|
::-webkit-scrollbar-thumb:hover { |
|
|
background: linear-gradient(135deg, #4f46e5, #2563eb); |
|
|
} |
|
|
</style> |
|
|
</head> |
|
|
<body class="bg-gray-900 text-gray-100 overflow-x-hidden"> |
|
|
|
|
|
<nav class="fixed top-0 w-full dark-glass z-50 border-b border-gray-800"> |
|
|
<div class="container mx-auto px-6 py-4"> |
|
|
<div class="flex justify-between items-center"> |
|
|
<div class="text-2xl font-bold gradient-text">CR</div> |
|
|
<div class="hidden md:flex space-x-8"> |
|
|
<a href="#home" class="nav-link text-gray-300 hover:text-indigo-400 transition-colors">Home</a> |
|
|
<a href="#projects" class="nav-link text-gray-300 hover:text-indigo-400 transition-colors">Projects</a> |
|
|
<a href="#about" class="nav-link text-gray-300 hover:text-indigo-400 transition-colors">About</a> |
|
|
<a href="#contact" class="nav-link text-gray-300 hover:text-indigo-400 transition-colors">Contact</a> |
|
|
</div> |
|
|
<button id="mobile-menu-btn" class="md:hidden"> |
|
|
<i data-feather="menu" class="w-6 h-6"></i> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div id="mobile-menu" class="hidden md:hidden dark-glass border-t border-gray-800"> |
|
|
<div class="px-6 py-4 space-y-3"> |
|
|
<a href="#home" class="block text-gray-300 hover:text-indigo-400 transition-colors">Home</a> |
|
|
<a href="#projects" class="block text-gray-300 hover:text-indigo-400 transition-colors">Projects</a> |
|
|
<a href="#about" class="block text-gray-300 hover:text-indigo-400 transition-colors">About</a> |
|
|
<a href="#contact" class="block text-gray-300 hover:text-indigo-400 transition-colors">Contact</a> |
|
|
</div> |
|
|
</div> |
|
|
</nav> |
|
|
|
|
|
<section id="home" class="min-h-screen flex items-center relative pt-20"> |
|
|
<div id="vanta-bg"></div> |
|
|
<div id="matrix-canvas"></div> |
|
|
<div class="blob w-72 h-72 bg-indigo-600 rounded-full top-20 left-20"></div> |
|
|
<div class="blob w-96 h-96 bg-blue-600 rounded-full bottom-20 right-20"></div> |
|
|
|
|
|
<div class="container mx-auto px-6 relative z-10"> |
|
|
<div class="grid md:grid-cols-2 gap-12 items-center"> |
|
|
<div class="slide-up"> |
|
|
<h1 class="text-5xl md:text-7xl font-bold mb-6"> |
|
|
Hi, I'm <span class="gradient-text">Cameron Rafaela</span> |
|
|
</h1> |
|
|
<div class="text-2xl md:text-3xl text-gray-300 mb-4"> |
|
|
Python Developer & Designer |
|
|
</div> |
|
|
<div class="text-xl text-gray-400 mb-8"> |
|
|
<span class="typing-cursor">Crafting intelligent solutions with code and creativity</span> |
|
|
</div> |
|
|
<div class="flex flex-wrap gap-3 mb-8"> |
|
|
<span class="tech-badge px-4 py-2 rounded-full text-sm font-medium text-indigo-300"> |
|
|
Python |
|
|
</span> |
|
|
<span class="tech-badge px-4 py-2 rounded-full text-sm font-medium text-indigo-300"> |
|
|
Django |
|
|
</span> |
|
|
<span class="tech-badge px-4 py-2 rounded-full text-sm font-medium text-indigo-300"> |
|
|
AI/ML |
|
|
</span> |
|
|
<span class="tech-badge px-4 py-2 rounded-full text-sm font-medium text-indigo-300"> |
|
|
FastAPI |
|
|
</span> |
|
|
<span class="tech-badge px-4 py-2 rounded-full text-sm font-medium text-indigo-300"> |
|
|
PostgreSQL |
|
|
</span> |
|
|
</div> |
|
|
<div class="flex gap-4"> |
|
|
<a href="#projects" class="hero-gradient text-white px-8 py-4 rounded-full font-semibold hover:shadow-xl transition-all transform hover:scale-105"> |
|
|
View Projects |
|
|
</a> |
|
|
<a href="#contact" class="border-2 border-indigo-500 text-indigo-400 px-8 py-4 rounded-full font-semibold hover:bg-indigo-500 hover:text-white transition-all"> |
|
|
Get In Touch |
|
|
</a> |
|
|
</div> |
|
|
</div> |
|
|
<div class="floating"> |
|
|
<img src="http://static.photos/technology/640x360/42" alt="Cameron Rafaela" class="rounded-2xl shadow-2xl"> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</section> |
|
|
|
|
|
|
|
|
<section id="projects" class="py-20 bg-gray-800"> |
|
|
<div class="container mx-auto px-6"> |
|
|
<div class="text-center mb-16 slide-up"> |
|
|
<h2 class="text-4xl md:text-5xl font-bold mb-4"> |
|
|
<span class="gradient-text">Featured Projects</span> |
|
|
</h2> |
|
|
<p class="text-xl text-gray-400">Showcasing innovation in Python development and AI integration</p> |
|
|
</div> |
|
|
|
|
|
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8"> |
|
|
|
|
|
<div class="card-hover dark-card rounded-2xl shadow-lg overflow-hidden slide-up"> |
|
|
<div class="gradient-border"> |
|
|
<div class="dark-card rounded-2xl"> |
|
|
<img src="http://static.photos/technology/640x360/123" alt="AI Analytics Dashboard" class="w-full h-48 object-cover"> |
|
|
<div class="p-6"> |
|
|
<div class="flex items-center gap-2 mb-3"> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-xs font-semibold">AI/ML</span> |
|
|
<span class="bg-blue-900/50 text-blue-300 px-3 py-1 rounded-full text-xs font-semibold">Python</span> |
|
|
</div> |
|
|
<h3 class="text-xl font-bold mb-2 text-gray-100">AI-Powered Analytics Dashboard</h3> |
|
|
<p class="text-gray-400 mb-4">Real-time data visualization with predictive analytics using TensorFlow and Streamlit. Processes millions of data points with intelligent insights.</p> |
|
|
<div class="flex gap-2 mb-4"> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">TensorFlow</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">Streamlit</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">Pandas</span> |
|
|
</div> |
|
|
<div class="flex justify-between items-center"> |
|
|
<a href="#" class="text-indigo-400 font-semibold hover:text-indigo-300 flex items-center gap-1"> |
|
|
View Project <i data-feather="arrow-right" class="w-4 h-4"></i> |
|
|
</a> |
|
|
<a href="#" class="text-gray-400 hover:text-gray-300"> |
|
|
<i data-feather="github" class="w-5 h-5"></i> |
|
|
</a> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="card-hover dark-card rounded-2xl shadow-lg overflow-hidden slide-up"> |
|
|
<div class="gradient-border"> |
|
|
<div class="dark-card rounded-2xl"> |
|
|
<img src="http://static.photos/technology/640x360/456" alt="Smart Assistant" class="w-full h-48 object-cover"> |
|
|
<div class="p-6"> |
|
|
<div class="flex items-center gap-2 mb-3"> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-xs font-semibold">AI/ML</span> |
|
|
<span class="bg-green-900/50 text-green-300 px-3 py-1 rounded-full text-xs font-semibold">NLP</span> |
|
|
</div> |
|
|
<h3 class="text-xl font-bold mb-2 text-gray-100">Intelligent Virtual Assistant</h3> |
|
|
<p class="text-gray-400 mb-4">Natural language processing-powered assistant with context awareness and multi-language support using OpenAI API and spaCy.</p> |
|
|
<div class="flex gap-2 mb-4"> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">OpenAI</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">spaCy</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">FastAPI</span> |
|
|
</div> |
|
|
<div class="flex justify-between items-center"> |
|
|
<a href="#" class="text-indigo-400 font-semibold hover:text-indigo-300 flex items-center gap-1"> |
|
|
View Project <i data-feather="arrow-right" class="w-4 h-4"></i> |
|
|
</a> |
|
|
<a href="#" class="text-gray-400 hover:text-gray-300"> |
|
|
<i data-feather="github" class="w-5 h-5"></i> |
|
|
</a> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="card-hover dark-card rounded-2xl shadow-lg overflow-hidden slide-up"> |
|
|
<div class="gradient-border"> |
|
|
<div class="dark-card rounded-2xl"> |
|
|
<img src="http://static.photos/technology/640x360/789" alt="E-commerce Platform" class="w-full h-48 object-cover"> |
|
|
<div class="p-6"> |
|
|
<div class="flex items-center gap-2 mb-3"> |
|
|
<span class="bg-orange-900/50 text-orange-300 px-3 py-1 rounded-full text-xs font-semibold">Full Stack</span> |
|
|
<span class="bg-blue-900/50 text-blue-300 px-3 py-1 rounded-full text-xs font-semibold">Django</span> |
|
|
</div> |
|
|
<h3 class="text-xl font-bold mb-2 text-gray-100">Smart E-commerce Platform</h3> |
|
|
<p class="text-gray-400 mb-4">Scalable e-commerce solution with AI-powered recommendations, inventory management, and payment processing.</p> |
|
|
<div class="flex gap-2 mb-4"> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">Django</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">Redis</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">Stripe</span> |
|
|
</div> |
|
|
<div class="flex justify-between items-center"> |
|
|
<a href="#" class="text-indigo-400 font-semibold hover:text-indigo-300 flex items-center gap-1"> |
|
|
View Project <i data-feather="arrow-right" class="w-4 h-4"></i> |
|
|
</a> |
|
|
<a href="#" class="text-gray-400 hover:text-gray-300"> |
|
|
<i data-feather="github" class="w-5 h-5"></i> |
|
|
</a> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="card-hover dark-card rounded-2xl shadow-lg overflow-hidden slide-up"> |
|
|
<div class="gradient-border"> |
|
|
<div class="dark-card rounded-2xl"> |
|
|
<img src="http://static.photos/technology/640x360/321" alt="Computer Vision" class="w-full h-48 object-cover"> |
|
|
<div class="p-6"> |
|
|
<div class="flex items-center gap-2 mb-3"> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-xs font-semibold">AI/ML</span> |
|
|
<span class="bg-red-900/50 text-red-300 px-3 py-1 rounded-full text-xs font-semibold">Computer Vision</span> |
|
|
</div> |
|
|
<h3 class="text-xl font-bold mb-2 text-gray-100">Object Detection System</h3> |
|
|
<p class="text-gray-400 mb-4">Advanced computer vision system for real-time object detection and classification using YOLO and OpenCV.</p> |
|
|
<div class="flex gap-2 mb-4"> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">YOLO</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">OpenCV</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">PyTorch</span> |
|
|
</div> |
|
|
<div class="flex justify-between items-center"> |
|
|
<a href="#" class="text-indigo-400 font-semibold hover:text-indigo-300 flex items-center gap-1"> |
|
|
View Project <i data-feather="arrow-right" class="w-4 h-4"></i> |
|
|
</a> |
|
|
<a href="#" class="text-gray-400 hover:text-gray-300"> |
|
|
<i data-feather="github" class="w-5 h-5"></i> |
|
|
</a> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="card-hover dark-card rounded-2xl shadow-lg overflow-hidden slide-up"> |
|
|
<div class="gradient-border"> |
|
|
<div class="dark-card rounded-2xl"> |
|
|
<img src="http://static.photos/technology/640x360/654" alt="Data Pipeline" class="w-full h-48 object-cover"> |
|
|
<div class="p-6"> |
|
|
<div class="flex items-center gap-2 mb-3"> |
|
|
<span class="bg-yellow-900/50 text-yellow-300 px-3 py-1 rounded-full text-xs font-semibold">Data</span> |
|
|
<span class="bg-blue-900/50 text-blue-300 px-3 py-1 rounded-full text-xs font-semibold">Python</span> |
|
|
</div> |
|
|
<h3 class="text-xl font-bold mb-2 text-gray-100">Automated ETL Pipeline</h3> |
|
|
<p class="text-gray-400 mb-4">Robust data pipeline with automated extraction, transformation, and loading using Apache Airflow and Pandas.</p> |
|
|
<div class="flex gap-2 mb-4"> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">Airflow</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">Pandas</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">AWS</span> |
|
|
</div> |
|
|
<div class="flex justify-between items-center"> |
|
|
<a href="#" class="text-indigo-400 font-semibold hover:text-indigo-300 flex items-center gap-1"> |
|
|
View Project <i data-feather="arrow-right" class="w-4 h-4"></i> |
|
|
</a> |
|
|
<a href="#" class="text-gray-400 hover:text-gray-300"> |
|
|
<i data-feather="github" class="w-5 h-5"></i> |
|
|
</a> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="card-hover dark-card rounded-2xl shadow-lg overflow-hidden slide-up"> |
|
|
<div class="gradient-border"> |
|
|
<div class="dark-card rounded-2xl"> |
|
|
<img src="http://static.photos/technology/640x360/987" alt="API Gateway" class="w-full h-48 object-cover"> |
|
|
<div class="p-6"> |
|
|
<div class="flex items-center gap-2 mb-3"> |
|
|
<span class="bg-green-900/50 text-green-300 px-3 py-1 rounded-full text-xs font-semibold">Backend</span> |
|
|
<span class="bg-blue-900/50 text-blue-300 px-3 py-1 rounded-full text-xs font-semibold">FastAPI</span> |
|
|
</div> |
|
|
<h3 class="text-xl font-bold mb-2 text-gray-100">Microservices API Gateway</h3> |
|
|
<p class="text-gray-400 mb-4">High-performance API gateway with authentication, rate limiting, and monitoring using FastAPI and Docker.</p> |
|
|
<div class="flex gap-2 mb-4"> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">FastAPI</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">Docker</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-1 rounded text-gray-300">Redis</span> |
|
|
</div> |
|
|
<div class="flex justify-between items-center"> |
|
|
<a href="#" class="text-indigo-400 font-semibold hover:text-indigo-300 flex items-center gap-1"> |
|
|
View Project <i data-feather="arrow-right" class="w-4 h-4"></i> |
|
|
</a> |
|
|
<a href="#" class="text-gray-400 hover:text-gray-300"> |
|
|
<i data-feather="github" class="w-5 h-5"></i> |
|
|
</a> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</section> |
|
|
|
|
|
|
|
|
<section id="about" class="py-20 bg-gray-900"> |
|
|
<div class="container mx-auto px-6"> |
|
|
<div class="text-center mb-16 slide-up"> |
|
|
<h2 class="text-4xl md:text-5xl font-bold mb-4"> |
|
|
<span class="gradient-text">About Me</span> |
|
|
</h2> |
|
|
<p class="text-xl text-gray-400">Passionate developer with a global perspective</p> |
|
|
</div> |
|
|
|
|
|
<div class="grid md:grid-cols-2 gap-12 items-center"> |
|
|
<div class="slide-up"> |
|
|
<img src="http://static.photos/people/640x360/111" alt="Cameron Rafaela" class="rounded-2xl shadow-xl"> |
|
|
</div> |
|
|
<div class="slide-up"> |
|
|
<h3 class="text-3xl font-bold mb-4 text-gray-100">Cameron Rafaela</h3> |
|
|
<p class="text-lg text-gray-400 mb-6"> |
|
|
I'm a Python Developer and Designer based in Amsterdam, passionate about creating intelligent solutions that bridge the gap between technology and user experience. With a strong foundation in Python development and a keen eye for design, I specialize in building scalable applications that leverage artificial intelligence and machine learning. |
|
|
</p> |
|
|
<p class="text-lg text-gray-400 mb-8"> |
|
|
My journey in tech has been driven by curiosity and a desire to solve complex problems through elegant code and thoughtful design. I believe in the power of technology to transform ideas into reality and make a positive impact on people's lives. |
|
|
</p> |
|
|
|
|
|
<div class="grid grid-cols-2 gap-6 mb-8"> |
|
|
<div class="dark-card p-4 rounded-xl shadow-md"> |
|
|
<i data-feather="map-pin" class="w-6 h-6 text-indigo-400 mb-2"></i> |
|
|
<h4 class="font-semibold mb-1 text-gray-100">Location</h4> |
|
|
<p class="text-gray-400">Amsterdam, Netherlands</p> |
|
|
</div> |
|
|
<div class="dark-card p-4 rounded-xl shadow-md"> |
|
|
<i data-feather="globe" class="w-6 h-6 text-indigo-400 mb-2"></i> |
|
|
<h4 class="font-semibold mb-1 text-gray-100">Languages</h4> |
|
|
<p class="text-gray-400">4 languages fluent</p> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="mb-8"> |
|
|
<h4 class="font-semibold mb-3 text-gray-100">Language Skills</h4> |
|
|
<div class="space-y-3"> |
|
|
<div class="flex items-center gap-3"> |
|
|
<span class="w-24 text-sm text-gray-300">Dutch</span> |
|
|
<div class="flex-1 bg-gray-700 rounded-full h-2"> |
|
|
<div class="hero-gradient h-2 rounded-full" style="width: 100%"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="flex items-center gap-3"> |
|
|
<span class="w-24 text-sm text-gray-300">English</span> |
|
|
<div class="flex-1 bg-gray-700 rounded-full h-2"> |
|
|
<div class="hero-gradient h-2 rounded-full" style="width: 100%"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="flex items-center gap-3"> |
|
|
<span class="w-24 text-sm text-gray-300">Papiamentu</span> |
|
|
<div class="flex-1 bg-gray-700 rounded-full h-2"> |
|
|
<div class="hero-gradient h-2 rounded-full" style="width: 100%"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="flex items-center gap-3"> |
|
|
<span class="w-24 text-sm text-gray-300">Spanish</span> |
|
|
<div class="flex-1 bg-gray-700 rounded-full h-2"> |
|
|
<div class="hero-gradient h-2 rounded-full" style="width: 100%"></div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div> |
|
|
<h4 class="font-semibold mb-3 text-gray-100">Core Skills</h4> |
|
|
<div class="flex flex-wrap gap-2"> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-sm">Python</span> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-sm">Django</span> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-sm">FastAPI</span> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-sm">Machine Learning</span> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-sm">Data Science</span> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-sm">PostgreSQL</span> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-sm">Docker</span> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-sm">AWS</span> |
|
|
<span class="bg-indigo-900/50 text-indigo-300 px-3 py-1 rounded-full text-sm">Git</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</section> |
|
|
|
|
|
|
|
|
<section id="contact" class="py-20 bg-gray-800"> |
|
|
<div class="container mx-auto px-6"> |
|
|
<div class="text-center mb-16 slide-up"> |
|
|
<h2 class="text-4xl md:text-5xl font-bold mb-4"> |
|
|
<span class="gradient-text">Get In Touch</span> |
|
|
</h2> |
|
|
<p class="text-xl text-gray-400">Let's discuss your next project</p> |
|
|
</div> |
|
|
|
|
|
<div class="max-w-4xl mx-auto"> |
|
|
<div class="grid md:grid-cols-2 gap-8"> |
|
|
<div class="slide-up"> |
|
|
<h3 class="text-2xl font-bold mb-6 text-gray-100">Let's Connect</h3> |
|
|
<p class="text-gray-400 mb-8"> |
|
|
I'm always interested in hearing about new projects and opportunities. Whether you have a question or just want to say hi, feel free to reach out! |
|
|
</p> |
|
|
|
|
|
<div class="space-y-4"> |
|
|
<div class="flex items-center gap-4"> |
|
|
<div class="w-12 h-12 bg-indigo-900/50 rounded-full flex items-center justify-center"> |
|
|
<i data-feather="mail" class="w-6 h-6 text-indigo-400"></i> |
|
|
</div> |
|
|
<div> |
|
|
<h4 class="font-semibold text-gray-100">Email</h4> |
|
|
<p class="text-gray-400">cameron.rafaela@example.com</p> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="flex items-center gap-4"> |
|
|
<div class="w-12 h-12 bg-indigo-900/50 rounded-full flex items-center justify-center"> |
|
|
<i data-feather="map-pin" class="w-6 h-6 text-indigo-400"></i> |
|
|
</div> |
|
|
<div> |
|
|
<h4 class="font-semibold text-gray-100">Location</h4> |
|
|
<p class="text-gray-400">Amsterdam, Netherlands</p> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="flex items-center gap-4"> |
|
|
<div class="w-12 h-12 bg-indigo-900/50 rounded-full flex items-center justify-center"> |
|
|
<i data-feather="github" class="w-6 h-6 text-indigo-400"></i> |
|
|
</div> |
|
|
<div> |
|
|
<h4 class="font-semibold text-gray-100">GitHub</h4> |
|
|
<p class="text-gray-400">github.com/cameronrafaela</p> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="mt-8"> |
|
|
<h4 class="font-semibold mb-4 text-gray-100">Follow Me</h4> |
|
|
<div class="flex gap-4"> |
|
|
<a href="#" class="w-10 h-10 dark-card rounded-full flex items-center justify-center hover:bg-indigo-900/50 transition-colors"> |
|
|
<i data-feather="linkedin" class="w-5 h-5 text-gray-300"></i> |
|
|
</a> |
|
|
<a href="#" class="w-10 h-10 dark-card rounded-full flex items-center justify-center hover:bg-indigo-900/50 transition-colors"> |
|
|
<i data-feather="twitter" class="w-5 h-5 text-gray-300"></i> |
|
|
</a> |
|
|
<a href="#" class="w-10 h-10 dark-card rounded-full flex items-center justify-center hover:bg-indigo-900/50 transition-colors"> |
|
|
<i data-feather="github" class="w-5 h-5 text-gray-300"></i> |
|
|
</a> |
|
|
<a href="#" class="w-10 h-10 dark-card rounded-full flex items-center justify-center hover:bg-indigo-900/50 transition-colors"> |
|
|
<i data-feather="instagram" class="w-5 h-5 text-gray-300"></i> |
|
|
</a> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="slide-up"> |
|
|
<form id="contact-form" class="space-y-4"> |
|
|
<div> |
|
|
<label class="block text-sm font-medium text-gray-300 mb-2">Name</label> |
|
|
<input type="text" required class="w-full px-4 py-3 dark-input rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-transparent outline-none transition-all text-gray-100 placeholder-gray-500" placeholder="Your Name"> |
|
|
</div> |
|
|
|
|
|
<div> |
|
|
<label class="block text-sm font-medium text-gray-300 mb-2">Email</label> |
|
|
<input type="email" required class="w-full px-4 py-3 dark-input rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-transparent outline-none transition-all text-gray-100 placeholder-gray-500" placeholder="your@email.com"> |
|
|
</div> |
|
|
|
|
|
<div> |
|
|
<label class="block text-sm font-medium text-gray-300 mb-2">Subject</label> |
|
|
<input type="text" required class="w-full px-4 py-3 dark-input rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-transparent outline-none transition-all text-gray-100 placeholder-gray-500" placeholder="Project Discussion"> |
|
|
</div> |
|
|
|
|
|
<div> |
|
|
<label class="block text-sm font-medium text-gray-300 mb-2">Message</label> |
|
|
<textarea required rows="4" class="w-full px-4 py-3 dark-input rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-transparent outline-none transition-all resize-none text-gray-100 placeholder-gray-500" placeholder="Tell me about your project..."></textarea> |
|
|
</div> |
|
|
|
|
|
<button type="submit" class="w-full hero-gradient text-white py-3 rounded-lg font-semibold hover:shadow-xl transition-all transform hover:scale-105"> |
|
|
Send Message |
|
|
</button> |
|
|
</form> |
|
|
|
|
|
<div id="success-message" class="hidden mt-4 p-4 bg-green-900/50 text-green-300 rounded-lg border border-green-700/50"> |
|
|
Thank you for your message! I'll get back to you soon. |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</section> |
|
|
|
|
|
|
|
|
<footer class="bg-gray-950 text-gray-400 py-8 border-t border-gray-800"> |
|
|
<div class="container mx-auto px-6"> |
|
|
<div class="flex flex-col md:flex-row justify-between items-center"> |
|
|
<div class="mb-4 md:mb-0"> |
|
|
<p>© 2024 Cameron Rafaela. All rights reserved.</p> |
|
|
</div> |
|
|
<div class="flex gap-6"> |
|
|
<a href="#home" class="hover:text-indigo-400 transition-colors">Home</a> |
|
|
<a href="#projects" class="hover:text-indigo-400 transition-colors">Projects</a> |
|
|
<a href="#about" class="hover:text-indigo-400 transition-colors">About</a> |
|
|
<a href="#contact" class="hover:text-indigo-400 transition-colors">Contact</a> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</footer> |
|
|
<script> |
|
|
|
|
|
const matrixPhrases = [ |
|
|
'import numpy as np', |
|
|
'def neural_network()', |
|
|
'E = mc²', |
|
|
'F = ma', |
|
|
'λ = h/p', |
|
|
'∇·E = ρ/ε₀', |
|
|
'∇×B = μ₀J', |
|
|
'class DeepLearning:', |
|
|
'return optimizer.step()', |
|
|
'tensor.reshape()', |
|
|
'gradient_descent()', |
|
|
'backpropagate()', |
|
|
'activation.sigmoid()', |
|
|
'loss.mse()', |
|
|
'quantum.entangle()', |
|
|
'fourier.transform()', |
|
|
'e^(iπ) + 1 = 0', |
|
|
'∂f/∂x', |
|
|
'∫f(x)dx', |
|
|
'Σ(n=1→∞)', |
|
|
'matrix.multiply()', |
|
|
'eigenvectors', |
|
|
'determinant', |
|
|
'transpose()', |
|
|
'convolution()', |
|
|
'pooling()', |
|
|
'softmax()', |
|
|
'cross_entropy()', |
|
|
'adam_optimizer', |
|
|
'learning_rate', |
|
|
'batch_normalize', |
|
|
'drop_out()', |
|
|
'relu_activation', |
|
|
'tanh_function', |
|
|
'weight_decay', |
|
|
'momentum', |
|
|
'bias_term', |
|
|
'feature_map', |
|
|
'kernel_size', |
|
|
'stride_length', |
|
|
'padding_same', |
|
|
'max_pooling', |
|
|
'avg_pooling', |
|
|
'flatten_layer', |
|
|
'dense_layer', |
|
|
'output_layer', |
|
|
'hidden_layer', |
|
|
'input_shape', |
|
|
'output_shape', |
|
|
'train_model', |
|
|
'validate_model', |
|
|
'test_accuracy', |
|
|
'confusion_matrix', |
|
|
'precision_recall', |
|
|
'f1_score', |
|
|
'roc_curve', |
|
|
'auc_score', |
|
|
'cross_validation', |
|
|
'grid_search', |
|
|
'random_forest', |
|
|
'decision_tree', |
|
|
'support_vector', |
|
|
'kmeans_clustering', |
|
|
'pca_analysis', |
|
|
't_sne', |
|
|
'umap_embedding', |
|
|
'autoencoder', |
|
|
'variational_auto', |
|
|
'gan_network', |
|
|
'discriminator', |
|
|
'generator', |
|
|
'cycle_gan', |
|
|
'style_transfer', |
|
|
'image_segment', |
|
|
'object_detect', |
|
|
'yolo_v5', |
|
|
'resnet50', |
|
|
'vgg16', |
|
|
'mobilenet', |
|
|
'efficientnet', |
|
|
'transformer', |
|
|
'attention', |
|
|
'multi_head', |
|
|
'positional_encoding', |
|
|
'token_embedding', |
|
|
'bert_model', |
|
|
'gpt_model', |
|
|
'seq2seq', |
|
|
'lstm_cell', |
|
|
'gru_unit', |
|
|
'rnn_layer', |
|
|
'time_series', |
|
|
'arima_model', |
|
|
'prophet_forecast', |
|
|
'anomaly_detect', |
|
|
'reinforcement', |
|
|
'q_learning', |
|
|
'deep_q', |
|
|
'policy_gradient', |
|
|
'actor_critic', |
|
|
'monte_carlo', |
|
|
'temporal_difference', |
|
|
'exploration', |
|
|
'exploitation', |
|
|
'reward_function', |
|
|
'state_space', |
|
|
'action_space', |
|
|
'markov_chain', |
|
|
'bellman_equation', |
|
|
'value_function', |
|
|
'advantage_function', |
|
|
'eligibility_trace' |
|
|
]; |
|
|
let matrixSketch = function(p) { |
|
|
let fontSize = 20; |
|
|
let columns; |
|
|
let drops = []; |
|
|
let chars = []; |
|
|
let dropSpeed = 0.15; |
|
|
let individualSpeeds = []; |
|
|
|
|
|
p.setup = function() { |
|
|
let canvas = p.createCanvas(p.windowWidth, p.windowHeight); |
|
|
canvas.parent('matrix-canvas'); |
|
|
columns = Math.floor(p.width / fontSize); |
|
|
|
|
|
for (let i = 0; i < columns; i++) { |
|
|
drops[i] = Math.floor(p.random(-100, 0)); |
|
|
chars[i] = []; |
|
|
individualSpeeds[i] = p.random(0.1, 0.25); |
|
|
for (let j = 0; j < 20; j++) { |
|
|
chars[i][j] = matrixPhrases[Math.floor(p.random(matrixPhrases.length))]; |
|
|
} |
|
|
} |
|
|
}; |
|
|
|
|
|
p.draw = function() { |
|
|
p.background(17, 24, 39, 15); |
|
|
|
|
|
for (let i = 0; i < drops.length; i++) { |
|
|
let currentY = drops[i] * fontSize; |
|
|
let text = chars[i][Math.floor(drops[i]) % chars[i].length]; |
|
|
|
|
|
p.push(); |
|
|
p.drawingContext.shadowBlur = 35; |
|
|
p.drawingContext.shadowColor = 'rgba(255, 215, 0, 0.95)'; |
|
|
p.fill(255, 215, 0, 255); |
|
|
p.textSize(fontSize); |
|
|
p.textStyle(p.BOLD); |
|
|
p.text(text, i * fontSize, currentY); |
|
|
p.pop(); |
|
|
|
|
|
p.push(); |
|
|
p.drawingContext.shadowBlur = 30; |
|
|
p.drawingContext.shadowColor = 'rgba(255, 215, 0, 0.85)'; |
|
|
for (let j = 1; j < 6; j++) { |
|
|
if (currentY - j * fontSize > 0) { |
|
|
let trailY = currentY - j * fontSize; |
|
|
let trailOpacity = 255 - (j * 20); |
|
|
p.fill(255, 215, 0, Math.max(trailOpacity, 100)); |
|
|
p.textSize(fontSize - (j * 0.3)); |
|
|
p.textStyle(p.NORMAL); |
|
|
let trailText = chars[i][(Math.floor(drops[i]) - j) % chars[i].length]; |
|
|
p.text(trailText, i * fontSize, trailY); |
|
|
} |
|
|
} |
|
|
p.pop(); |
|
|
|
|
|
if (currentY > p.height && Math.random() > 0.995) { |
|
|
drops[i] = Math.floor(p.random(-50, 0)); |
|
|
individualSpeeds[i] = p.random(0.1, 0.25); |
|
|
for (let j = 0; j < chars[i].length; j++) { |
|
|
chars[i][j] = matrixPhrases[Math.floor(p.random(matrixPhrases.length))]; |
|
|
} |
|
|
} |
|
|
drops[i] += individualSpeeds[i]; |
|
|
} |
|
|
}; |
|
|
|
|
|
p.windowResized = function() { |
|
|
p.resizeCanvas(p.windowWidth, p.windowHeight); |
|
|
columns = Math.floor(p.width / fontSize); |
|
|
drops = []; |
|
|
chars = []; |
|
|
individualSpeeds = []; |
|
|
for (let i = 0; i < columns; i++) { |
|
|
drops[i] = Math.floor(p.random(-100, 0)); |
|
|
chars[i] = []; |
|
|
individualSpeeds[i] = p.random(0.1, 0.25); |
|
|
for (let j = 0; j < 20; j++) { |
|
|
chars[i][j] = matrixPhrases[Math.floor(p.random(matrixPhrases.length))]; |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
new p5(matrixSketch); |
|
|
|
|
|
|
|
|
feather.replace(); |
|
|
|
|
|
|
|
|
VANTA.NET({ |
|
|
el: "#vanta-bg", |
|
|
mouseControls: true, |
|
|
touchControls: true, |
|
|
gyroControls: false, |
|
|
minHeight: 200.00, |
|
|
minWidth: 200.00, |
|
|
scale: 1.00, |
|
|
scaleMobile: 1.00, |
|
|
color: 0xFFD700, |
|
|
backgroundColor: 0x111827, |
|
|
points: 10.00, |
|
|
maxDistance: 25.00, |
|
|
spacing: 18.00 |
|
|
}); |
|
|
|
|
|
const mobileMenuBtn = document.getElementById('mobile-menu-btn'); |
|
|
const mobileMenu = document.getElementById('mobile-menu'); |
|
|
|
|
|
mobileMenuBtn.addEventListener('click', () => { |
|
|
mobileMenu.classList.toggle('hidden'); |
|
|
}); |
|
|
|
|
|
|
|
|
document.querySelectorAll('a[href^="#"]').forEach(anchor => { |
|
|
anchor.addEventListener('click', function (e) { |
|
|
e.preventDefault(); |
|
|
const target = document.querySelector(this.getAttribute('href')); |
|
|
if (target) { |
|
|
target.scrollIntoView({ |
|
|
behavior: 'smooth', |
|
|
block: 'start' |
|
|
}); |
|
|
|
|
|
mobileMenu.classList.add('hidden'); |
|
|
} |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
const observerOptions = { |
|
|
threshold: 0.1, |
|
|
rootMargin: '0px 0px -50px 0px' |
|
|
}; |
|
|
|
|
|
const observer = new IntersectionObserver((entries) => { |
|
|
entries.forEach(entry => { |
|
|
if (entry.isIntersecting) { |
|
|
entry.target.classList.add('active'); |
|
|
} |
|
|
}); |
|
|
}, observerOptions); |
|
|
|
|
|
document.querySelectorAll('.slide-up').forEach(el => { |
|
|
observer.observe(el); |
|
|
}); |
|
|
|
|
|
|
|
|
const contactForm = document.getElementById('contact-form'); |
|
|
const successMessage = document.getElementById('success-message'); |
|
|
|
|
|
contactForm.addEventListener('submit', (e) => { |
|
|
e.preventDefault(); |
|
|
|
|
|
|
|
|
setTimeout(() => { |
|
|
successMessage.classList.remove('hidden'); |
|
|
contactForm.reset(); |
|
|
|
|
|
setTimeout(() => { |
|
|
successMessage.classList.add('hidden'); |
|
|
}, 5000); |
|
|
}, 500); |
|
|
}); |
|
|
|
|
|
|
|
|
window.addEventListener('scroll', () => { |
|
|
const nav = document.querySelector('nav'); |
|
|
if (window.scrollY > 50) { |
|
|
nav.classList.add('bg-gray-900/95'); |
|
|
nav.classList.remove('bg-gray-900/80'); |
|
|
} else { |
|
|
nav.classList.add('bg-gray-900/80'); |
|
|
nav.classList.remove('bg-gray-900/95'); |
|
|
} |
|
|
}); |
|
|
|
|
|
|
|
|
const typingElements = document.querySelectorAll('.typing-cursor'); |
|
|
typingElements.forEach(el => { |
|
|
const text = el.textContent; |
|
|
el.textContent = ''; |
|
|
let index = 0; |
|
|
|
|
|
const type = () => { |
|
|
if (index < text.length) { |
|
|
el.textContent += text[index]; |
|
|
index++; |
|
|
setTimeout(type, 50); |
|
|
} |
|
|
}; |
|
|
|
|
|
setTimeout(type, 1000); |
|
|
}); |
|
|
|
|
|
|
|
|
const projectCards = document.querySelectorAll('.card-hover'); |
|
|
projectCards.forEach(card => { |
|
|
card.addEventListener('mouseenter', () => { |
|
|
card.style.transform = 'translateY(-8px) scale(1.02)'; |
|
|
}); |
|
|
|
|
|
card.addEventListener('mouseleave', () => { |
|
|
card.style.transform = 'translateY(0) scale(1)'; |
|
|
}); |
|
|
}); |
|
|
</script> |
|
|
</body> |
|
|
</html> |