import React, { useState, useEffect, useRef } from 'react';
import {
Github,
Linkedin,
Mail,
ExternalLink,
Code2,
User,
Briefcase,
Cpu,
ChevronDown,
Menu,
X,
Globe,
Terminal,
Database,
Layout,
Gift,
ShoppingCart,
Music,
ClipboardCopy,
Download // New icon for download
} from 'lucide-react';
const EMAIL_ADDRESS = "harikrishnamanoj2@gmail.com";
const PHONE_NUMBER = "+919539440572";
// Custom hook for scroll reveal animation
const RevealOnScroll = ({ children, className = "" }) => {
const [isVisible, setIsVisible] = useState(false);
const ref = useRef(null);
useEffect(() => {
const observer = new IntersectionObserver(
([entry]) => {
if (entry.isIntersecting) {
setIsVisible(true);
observer.unobserve(entry.target);
}
},
{
threshold: 0.1,
rootMargin: "0px 0px -50px 0px"
}
);
if (ref.current) {
observer.observe(ref.current);
}
return () => {
if (ref.current && observer) {
observer.unobserve(ref.current);
}
observer.disconnect();
};
}, []);
return (
{children}
);
};
const Portfolio = () => {
const [isMenuOpen, setIsMenuOpen] = useState(false);
const [activeSection, setActiveSection] = useState('home');
const [scrolled, setScrolled] = useState(false);
const [copyMessage, setCopyMessage] = useState(null);
// Unified function to handle copying content (email or phone)
const copyToClipboard = (content, type) => {
const textarea = document.createElement('textarea');
textarea.value = content;
textarea.style.position = 'fixed';
textarea.style.opacity = '0';
document.body.appendChild(textarea);
textarea.focus();
textarea.select();
let success = false;
try {
success = document.execCommand('copy');
setCopyMessage({ text: `${type} copied!`, type: 'success' });
} catch (err) {
console.error('Copy failed:', err);
setCopyMessage({ text: `Failed to copy ${type}.`, type: 'error' });
}
document.body.removeChild(textarea);
setTimeout(() => {
setCopyMessage(null);
}, 2000);
};
// Handler for Email button
const copyEmailHandler = (e) => {
e.preventDefault();
copyToClipboard(EMAIL_ADDRESS, 'Email');
};
// Handler for Phone button
const copyPhoneHandler = (e) => {
e.preventDefault();
copyToClipboard(PHONE_NUMBER, 'Phone number');
};
// Handle scroll effects and active section
useEffect(() => {
const handleScroll = () => {
setScrolled(window.scrollY > 20);
const sections = ['home', 'about', 'experience', 'projects', 'skills', 'contact'];
let currentActive = 'home';
for (let i = sections.length - 1; i >= 0; i--) {
const sectionId = sections[i];
const element = document.getElementById(sectionId);
if (element) {
const rect = element.getBoundingClientRect();
if (rect.top <= 200) {
currentActive = sectionId;
break;
}
}
}
setActiveSection(currentActive);
};
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);
const navLinks = [
{ name: 'Home', href: '#home', id: 'home' },
{ name: 'About', href: '#about', id: 'about' },
{ name: 'Experience', href: '#experience', id: 'experience' },
{ name: 'Projects', href: '#projects', id: 'projects' },
{ name: 'Skills', href: '#skills', id: 'skills' },
];
const experiences = [
{
company: "Maninfini Automation Pvt Ltd, Bangalore",
role: "Flutter Developer",
period: "Jun 2024 - Nov 2024",
description: "Developed and maintained cross-platform mobile applications for the innovative 'Game of Giving' initiative, focusing on resource redistribution and social impact.",
tech: ["Flutter", "Dart", "Firebase", "REST APIs"]
},
{
company: "Brototype, Ernakulam",
role: "Flutter Developer Intern",
period: "Nov 2023 - Feb 2024",
description: "Gained hands-on experience in mobile application development, implementing key features and utilizing state management patterns like Bloc to enhance app scalability.",
tech: ["Flutter", "Dart", "Bloc", "Hive"]
},
{
company: "Govt Polytechnic college, Kalamassery",
role: "Diploma In Electronics And Communication Engineering",
period: "2018 - 2021 (CGPA: 8.04)",
description: "Completed academic coursework focused on core electronics and communication principles, providing a strong analytical foundation for software development.",
tech: ["Electronics", "Communication", "C Programming"]
}
];
const projects = [
{
title: "Game of Giving Apps",
description: "A community-focused initiative involving multiple cross-platform apps (Giver, Needy, Mentor) for redistributing surplus resources, promoting sustainability and social impact.",
tags: ["Flutter", "Dart", "Play Store", "App Store"],
link: "https://play.google.com/store/apps/developer?id=644869124",
github: null,
color: "bg-green-600",
icon:
},
{
title: "HRX Store - E-Commerce App",
description: "A feature-rich e-commerce application with secure payment (Razorpay), Firebase Authentication, product categories, and cart management. Built with an accompanying Admin app.",
tags: ["Flutter", "Dart", "Firebase Firestore/Storage", "Bloc", "Razorpay"],
link: "https://play.google.com/store/apps/details?id=com.ecom.hrx_store&pcampaignid=web_share",
github: "https://github.com/Harikrishna-Manoj/HRX_Store_e_commerce",
color: "bg-indigo-600",
icon:
},
{
title: "Rhythm Music Player",
description: "A conceptualized and developed offline music player with a sleek UI. Features include volume control, a dedicated play screen, mini player, and organization using Hive Database.",
tags: ["Flutter", "Dart", "Hive Database", "Bloc"],
link: "https://play.google.com/store/apps/details?id=in.freelance.rhythm_music_player&pcampaignid=web_share",
github: "https://github.com/Harikrishna-Manoj/Rhythm_music_player",
color: "bg-red-600",
icon:
}
];
const skills = [
{ category: "Languages & Frameworks", icon: , items: ["Dart", "Flutter", "SQL", "OOPS", "REST APIs", "GraphQL"] },
{ category: "State Management & Architecture", icon: , items: ["Bloc", "Provider", "GetX", "Clean Architecture", "MVC", "SOLID Principle"] },
{ category: "Backend & Database", icon: , items: ["Firebase", "Hive", "PostgreSQL", "Data Structure", "Payment Gateway"] },
{ category: "Tools & DevOps", icon: , items: ["Git/GitHub", "VS Code", "Android Studio", "Figma", "Codemagic", "ChatGPT", "Davinci Resolve", "Photoshop"] }
];
return (
{/* Toast Notification for Copy */}
{copyMessage && (
)}
{/* Navigation */}
HarikrishnaManoj
{/* Desktop Nav */}
{/* Mobile Menu Button */}
setIsMenuOpen(!isMenuOpen)}
aria-label="Toggle menu"
>
{isMenuOpen ? : }
{/* Mobile Nav */}
{/* Hero Section */}
{/* Background blobs */}
Flutter Developer
Crafting Exceptional
Mobile Experiences with Flutter.
I'm Harikrishna Manoj, a dedicated Flutter Developer specializing in building robust, cross-platform mobile applications that prioritize functionality and aesthetics.
{/* Changed mailto to copy function for the icon */}
{/* Profile Image */}
{
e.target.onerror = null;
e.target.style.display = 'none';
const parent = e.target.parentNode;
const fallbackDiv = document.createElement('div');
fallbackDiv.className = 'text-slate-700 text-6xl font-bold';
fallbackDiv.textContent = 'HM';
parent.appendChild(fallbackDiv);
}}
/>
{/* About Section */}
About Me
Building top-tier, user-centric mobile software
Specializing in Flutter development, my expertise lies in crafting cross-platform mobile applications that prioritize exceptional user experiences. My dedication to staying current with industry trends drives my focus on producing top-tier software that seamlessly merges functionality with aesthetics, ensuring high-quality solutions for the dynamic mobile landscape.
{[
{ icon:
, title: "User-Centric Design", desc: "Prioritizing exceptional user experiences by merging seamless functionality with modern aesthetics." },
{ icon:
, title: "Cross-Platform Expertise", desc: "Crafting robust mobile applications for both Android and iOS using the Flutter framework." },
{ icon:
, title: "Architecture Focus", desc: "Implementing Bloc, Clean Architecture, and SOLID principles for scalable and maintainable codebases." }
].map((item, index) => (
{item.icon}
{item.title}
{item.desc}
))}
{/* Experience Section */}
Career Path
My Professional Journey
My experience focuses on hands-on Flutter development, from core concepts to implementing complex state management and database solutions.
Download Resume
{experiences.map((exp, index) => (
{exp.role}
{exp.period}
{exp.company}
{exp.description}
{exp.tech.map((tag, i) => (
{tag}
))}
))}
{/* Projects Section */}
Portfolio
Mobile Applications
{projects.map((project, index) => (
{/* ENHANCED Mock phone frame using project-specific color and icon */}
{/* Project Icon and Title as the "Screenshot" */}
{project.icon}
{project.title.split(' - ')[0]}
{project.title}
{project.description}
{project.tags.map((tag, i) => (
{tag}
))}
{/* Only render if github link exists */}
{project.github && (
Code
)}
{/* Only render if store link exists */}
{project.link && (
Store Link
)}
))}
{/* Skills Section */}
My Stack
Expertise in Mobile Development
My proficiency centers around the Flutter ecosystem, backed by a strong understanding of architecture patterns and scalable data solutions, using tools like Bloc for state management and Hive/Firebase for persistence.
Flutter
Primary Framework
Bloc/Provider
State Management
{skills.map((skill, index) => (
{skill.icon}
{skill.category}
{skill.items.map((item, i) => (
{item}
))}
))}
{/* Contact Section */}
{/* Footer */}
);
};
export default Portfolio;