21 |
22 | );
23 | };
24 |
25 | export default UnderConstruction;
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 Omar Lengua Suárez
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/src/pages/Contact.tsx:
--------------------------------------------------------------------------------
1 | // src/pages/Contact.tsx
2 |
3 | import React from 'react';
4 | import ContactForm from '../components/ContactForm'; // Ensure the path is correct
5 |
6 | const Contact: React.FC = () => {
7 | return (
8 | // Main page/section container
9 |
10 |
11 |
12 | {/* Section Title */}
13 |
14 | Get in Touch
15 |
16 | {/* Optional introductory text */}
17 |
18 | Have a question or want to work together? Fill out the form, and I'll get back to you as soon as possible.
19 |
20 |
21 | {/* Form container with background and shadow */}
22 |
69 | Welcome to my digital space! I'm a passionate Full Stack Developer actively broadening my horizons into the exciting fields of AI Development and Data Science. Here, you'll find a showcase of my projects, insights into my journey, and ways to connect with me.
70 |
122 | Questions, proposals, or just want to say hi? Reach out.
123 |
124 |
125 | Contact Me →
126 |
127 |
128 |
129 |
130 |
131 | {/* Renderiza el carrusel con los datos preparados */}
132 | {featuredForCarousel.length > 0 && (
133 |
134 | )}
135 |
136 |
137 |
Bridging Tech Development with Business Strategy
138 |
139 |
140 | |
141 |
142 | |
143 |
144 |
145 |
146 | I am committed to leveraging my skills in full stack development, AI, and data analysis to create impactful solutions that drive business success. My goal is to bridge the gap between technology and business strategy, ensuring that every project not only meets technical requirements but also aligns with broader business objectives.
147 | Whether it's building robust applications, developing intelligent systems, or analyzing data to extract actionable insights, I strive to deliver high-quality results that make a difference.
148 |
149 |
150 |
151 |
152 | {showScrollButton && (
153 |
161 | )}
162 |
163 | );
164 | };
165 |
166 | export default Home;
--------------------------------------------------------------------------------
/src/data/ProjectsData.ts:
--------------------------------------------------------------------------------
1 | export type ProjectCategory = 'AI Developer' | 'Full Stack Developer';
2 | export type ProjectType = 'Group' | 'Individual';
3 |
4 | export interface Project {
5 | id: string;
6 | category: ProjectCategory;
7 | title: string;
8 | description: string;
9 | technologies: string[];
10 | detailedDescription?: string;
11 | repoUrl: string;
12 | type: ProjectType;
13 | }
14 |
15 | export const projectsData: Project[] = [
16 | // === AI Developer Projects ===
17 | {
18 | id: 'ai-1',
19 | category: 'AI Developer',
20 | title: 'Keep in Shape',
21 | description: 'Predicting the BMI and type of obesity using machine learning.',
22 | technologies: ['Python', 'Dash', 'Flask', 'Supabase', 'Docker', 'Docker-compose', 'Jupyter Notebook', 'Pandas', 'Scikit-learn', 'Git', 'Github'],
23 | detailedDescription: `This project focuses on predicting the Body Mass Index (BMI) and type of obesity using machine learning techniques. The application is built with Dash and Flask, allowing users to input their physical characteristics and receive predictions on their BMI and obesity type. The data is stored in a Supabase database, and the machine learning model is trained using Scikit-learn. The project is containerized using Docker and Docker-compose for easy deployment.`,
24 | repoUrl: 'https://github.com/fergarcat/multiclass_prediction_obesity_risk',
25 | type: 'Group'
26 | },
27 | {
28 | id: 'ai-2',
29 | category: 'AI Developer',
30 | title: 'Flight Satisfaction Prediction',
31 | description: 'Predicting flight satisfaction using machine learning (Kaggle dataset).',
32 | technologies: ['Python', 'Flask', 'MySQL', 'Docker', 'Docker-compose', 'Jupyter Notebook', 'Pandas', 'Scikit-learn', 'HTML', 'CSS', 'Git', 'Github'],
33 | detailedDescription: `This project focuses on predicting flight satisfaction using machine learning techniques. The dataset used is from Kaggle and contains various features related to flight experiences. The project involves data preprocessing, feature selection, model training, and evaluation. A Flask web application is developed to allow users to input flight-related data and receive predictions on passenger satisfaction. The results are stored in a MySQL database for further analysis.`,
34 | repoUrl: 'https://github.com/Bootcamp-IA-P4/flight-feel-analyzer',
35 | type: 'Group'
36 | },
37 | {
38 | id: 'ai-3',
39 | category: 'AI Developer',
40 | title: 'Housing Price Prediction',
41 | description: 'RESTful API and simple UI with Flask to predict housing values (California Housing dataset).',
42 | technologies: ['Python', 'Flask', 'MySQL','Docker', 'Docker-compose', 'Jupyter Notebook', 'Pandas', 'Scikit-learn', 'HTML', 'CSS', 'Git', 'Github'],
43 | detailedDescription: `This project implements a RESTful API built with Flask and a simple web interface. It allows users to input characteristics of a residential area (based on the California Housing dataset) and obtain a prediction of the median housing value for that area, generated by a previously trained regression model using Scikit-learn. The application saves each set of input characteristics ('property') and its corresponding prediction in a MySQL database for later analysis.`,
44 | repoUrl: 'https://github.com/Bootcamp-IA-P4/e1_regression',
45 | type: 'Group'
46 | },
47 | {
48 | id: 'ai-4',
49 | category: 'AI Developer',
50 | title: 'EDA: Global and Regional Migration',
51 | description: 'Exploratory Data Analysis (EDA) on global and regional migration patterns (focus on LatAm).',
52 | technologies: ['Python', 'Jupyter Notebook', 'Pandas', 'NumPy', 'Matplotlib', 'Seaborn', 'Git', 'Github'],
53 | detailedDescription: `An exhaustive Exploratory Data Analysis (EDA) was performed on global and regional migration patterns, with a particular focus on Latin America. Using World Bank data and tools like Pandas and Matplotlib/Seaborn in Python, the study analyzes the potential causes (economic, social, political) and demographic effects of migration flows in different countries and regions, aiming to identify significant trends and correlations.`,
54 | repoUrl: 'https://github.com/Bootcamp-IA-P4/world-population-migration-eda',
55 | type: 'Group'
56 | },
57 | {
58 | id: 'ai-5',
59 | category: 'AI Developer',
60 | title: 'EDA: Synthetic Stock Market Data',
61 | description: 'Exploratory Data Analysis (EDA) on a synthetic stock market dataset.',
62 | technologies: ['Python', 'Jupyter Notebook', 'Pandas', 'NumPy', 'Matplotlib', 'Seaborn', 'SciPy', 'Git', 'Github'],
63 | detailedDescription: `This repository contains the code and findings of an Exploratory Data Analysis (EDA) performed on the synthetic_stock_data.csv dataset. The main objective was to understand the structure, quality, characteristics, and relationships within the data (distributions, correlations, outliers), using Python and libraries like Pandas, NumPy, Matplotlib, Seaborn, and SciPy. This analysis serves as a fundamental basis for potential deeper analyses or the development of predictive models.`,
64 | repoUrl: 'https://github.com/Bootcamp-IA-P4/stock-market-eda',
65 | type: 'Individual'
66 | },
67 | {
68 | id: 'ai-6',
69 | category: 'AI Developer',
70 | title: 'Job Scraper (Python)',
71 | description: 'Web scraping of job offers from InfoJobs using Python and Selenium.',
72 | technologies: ['Python', 'Selenium', 'BeautifulSoup', 'Pandas', 'NumPy', 'Git', 'Github'],
73 | detailedDescription: `This project involves web scraping job offers from the InfoJobs website using Python and Selenium. The scraper collects data on job offers, including title, company, location, and other relevant details. The collected data is then processed and stored in a structured format using Pandas and NumPy for further analysis or visualization.`,
74 | repoUrl: 'https://github.com/Omarlsant/job-scraper',
75 | type: 'Individual'
76 | },
77 | {
78 | id: 'ai-7',
79 | category: 'AI Developer',
80 | title: 'CRUD App',
81 | description: 'CRUD application using Python and Django.',
82 | technologies: ['Python', 'Django', 'SQLite', 'Next.js', 'Tailwind CSS', 'Git', 'Github'],
83 | detailedDescription: `This project is a CRUD (Create, Read, Update, Delete) application developed using Python and Django. The application allows users to perform basic operations on a database, including creating new records, reading existing records, updating records, and deleting records. The front-end is built with Next.js and styled with Tailwind CSS. The project demonstrates the use of Django's ORM for database interactions and provides a user-friendly interface for managing data.`,
84 | repoUrl: 'https://github.com/Omarlsant/job-scraper',
85 | type: 'Individual'
86 | },
87 | {
88 | id: 'ai-8',
89 | category: 'AI Developer',
90 | title: 'Digital Taximeter (Python)',
91 | description: 'Digital taximeter application with Tkinter and Docker.',
92 | technologies: ['Python', 'Javascript', 'React Vite', 'Tkinter', 'Unittest', 'Git', 'Docker', 'Docker-compose', 'Documentation'],
93 | detailedDescription: `This project is a digital taximeter application developed using Python and Tkinter. The application simulates a taximeter, allowing users to input distance and time to calculate fares. The project includes unit tests to ensure the functionality of the application and is containerized using Docker and Docker-compose for easy deployment. Documentation is provided to guide users through the installation and usage of the application.`,
94 | repoUrl: 'https://github.com/Omarlsant/app-taximetro',
95 | type: 'Individual'
96 | },
97 | // === Full Stack Developer Projects ===
98 | {
99 | id: 'fs-1',
100 | category: 'Full Stack Developer',
101 | title: 'Omarlsant Portfolio - Front-end',
102 | description: 'Personal portfolio website showcasing projects and skills.',
103 | technologies: ['React Js & Vite', 'TypeScript', 'Tailwind CSS', 'Node.js', 'Git', 'Github'],
104 | detailedDescription: `This is my personal portfolio website, developed using React Vite and TypeScript. The website showcases my projects, skills, and experience as a developer. It is designed to be responsive and user-friendly, providing visitors with an overview of my work and capabilities.`,
105 | repoUrl: 'https://github.com/Omarlsant/omarlsant-portfolio',
106 | type: 'Individual'
107 | },
108 | {
109 | id: 'fs-2',
110 | category: 'Full Stack Developer',
111 | title: 'Fhios Manager - Full Stack',
112 | description: 'Full Stack development of a management application, coordinating with PO and stakeholder.',
113 | technologies: ['React Js & Vite', 'Tailwind CSS', 'Node.js', 'Express', 'MySQL', 'Git', 'Github'],
114 | detailedDescription: `Full Stack project for a management application. I participated in the planning phase, defining the project scope and functionalities. I collaborated in creating the prototype and worked on the implementation of the front-end and back-end using React Vite and Node.js with Express. I was responsible for testing, bug fixing, and documentation. I also participated in the final project presentation.`,
115 | repoUrl: 'https://github.com/juanvprada/fhios-manager-client',
116 | type: 'Group'
117 | },
118 | {
119 | id: 'fs-3',
120 | category: 'Full Stack Developer',
121 | title: 'Bio Blog - Full Stack',
122 | description: 'Planning and Full Stack development of a blog, from prototype to presentation.',
123 | technologies: ['React Js & Vite', 'Tailwind CSS', 'Node.js', 'Firebase', 'Git' , 'Github'],
124 |
125 | detailedDescription: `Full Stack project for a blog application. I participated in the planning phase, defining the project scope and functionalities. I collaborated in creating the prototype and worked on the implementation of the front-end and back-end using React Vite and Firebase. I was responsible for testing, bug fixing, and documentation. I also participated in the final project presentation.`,
126 | repoUrl: 'https://github.com/Omarlsant/bio-blog',
127 | type: 'Group'
128 | },
129 | {
130 | id: 'fs-4',
131 | category: 'Full Stack Developer',
132 | title: 'Simpson’s Museum - Back-end',
133 | description: 'Back-end development for a "The Simpsons" themed application.',
134 | technologies: ['Vanilla JavaScript','Node.js', 'Express', 'Sequelize', 'PostgreSQL', 'JWT', 'Git' , 'Github'],
135 | detailedDescription: `Contribution to the back-end development for the "Simpson’s Museum" project. I contributed key ideas to define the project's scope and functionalities. I participated in structuring the server, defining the data model, and selecting the technologies to implement (Node.js, Express, Sequelize with PostgreSQL). I was responsible for documenting the work performed and participated in the final project presentation.`,
136 | repoUrl: 'https://github.com/LorelizDev/simpsons-memeseum-project',
137 | type: 'Group'
138 | }
139 | ];
--------------------------------------------------------------------------------
/src/pages/About.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import profilePicSrc from '../assets/images/fotoCurso.jpg';
3 | import googleCertBadge from '../assets/images/google-sc.png';
4 | import microsoftScBadge from '../assets/images/microsoft-sc.png';
5 | import microsoftAiBadge from '../assets/images/microsoft-ai.png';
6 | import pythonCertBadge from '../assets/images/python-ess.png';
7 |
8 | const About: React.FC = () => {
9 | // State for scroll button remains the same
10 | const [showScrollButton, setShowScrollButton] = useState(false);
11 |
12 | // Data remains the same
13 | const professionalSummary = `Banking and Financial Products Administrator currently transitioning into the Technology sector, with one
14 | year of Full Stack web development experience. I am a person with strong values, responsible, committed,
15 | and constantly motivated to learn. My ability to quickly adapt to new challenges, which includes constant
16 | updates on emerging technologies, aligns perfectly with my great passion for programming. `;
17 | const technicalSkills = [
18 | { category: 'Languages', skills: ['JavaScript', 'TypeScript', 'Python', 'C'] },
19 | { category: 'Frontend', skills: ['React', 'Vite', 'Sass', 'Tailwind CSS', 'npm', 'Css'] },
20 | { category: 'Backend', skills: ['Node.js', 'Express', 'Django', 'Flask', 'Fast-Api', 'Rest Api', 'Swagger', 'Postman', 'JWT'] },
21 | { category: 'Databases', skills: ['MySQL', 'MongoDB', 'Supabase'] },
22 | { category: 'Testing', skills: ['Jest', 'Supertest', 'Pytest', 'Unittest'] },
23 | { category: 'DevOps & Tools', skills: ['Docker', 'docker-compose', 'CI/CD (GitHub Actions)', 'Git', 'GitHub'] },
24 | ];
25 | const softSkills = [
26 | 'Highly Adaptable', 'Problem Solver', 'Proactive', 'Analytical Thinking',
27 | 'Time Management', 'Quality-Oriented', 'Effective Communication', 'Team player',
28 | 'Conflict Resolution', 'Accessibility Awareness (WCAG)',
29 | ];
30 | const education = [
31 | { title: 'AI Developer', institution: 'Factoría F5', dates: 'Jan 2025 - Oct 2025', duration: '1250H', current: true },
32 | { title: 'Full Stack Developer', institution: 'Factoría F5', dates: 'Jun 2024 - Dec 2024', duration: '850H' },
33 | { title: 'Banking Administration', institution: 'IFB Certus', dates: 'Mar 2015 - Oct 2018' },
34 | ];
35 | const certifications = [
36 | { name: 'Cybersecurity of Google', issuer: 'Google (via Coursera)', badgeUrl: googleCertBadge },
37 | { name: 'SC-900: Security, Compliance and Identity Fundamentals', issuer: 'Microsoft', badgeUrl: microsoftScBadge },
38 | { name: 'AI-900: Azure AI Fundamentals', issuer: 'Microsoft', badgeUrl: microsoftAiBadge },
39 | { name: 'Python Essentials 1', issuer: 'Cisco', badgeUrl: pythonCertBadge },
40 | ];
41 | const experience = [
42 | { role: 'Full Stack Developer', company: 'Lima Service Security S.A.C', location: 'Perú', dates: 'Sep 2021 - Oct 2022',
43 | description: ['Designed the web application architecture. Used Git and GitHub for version control.', 'Developed the frontend using HTML and Vanilla JavaScript, applying styles with CSS.', 'Implemented the REST API (backend) with Node.js and Express to manage CRUD operations.', 'Modeled the relational database in MySQL to store and manage company information, users, inventory and services', 'Implemented an authentication and authorization system based on JWT (JSON Web Tokens) to protect the API endpoints', 'Developed unit tests with Jest', 'Performed application maintenance and implemented new features as required', ] },
44 | { role: 'Commercial Assistant', company: 'Snowboarding S.A', location: 'Perú', dates: 'Apr 2018 - Aug 2019',
45 | description: ['Generated sales performance and trend reports.', 'Presented results to sales teams and management.', 'Processed orders and verified stock levels.', 'Coordinated logistics and maintained CRM.', ] }
46 | ];
47 | const volunteering = {
48 | role: 'User Tester', organization: 'Fundación Telefónica', dates: 'Nov 2024 (8h)', platforms: 'Marte & Saturno',
49 | description: 'In a two-day engagement, including an onboarding meeting and a final group meeting, I tested and reviewed two iterations of their platform. As a frontend developer, I leveraged my expertise to identify and document critical bugs across both versions, providing actionable feedback that directly contributed to improvements in the platform performance and usability.',
50 | };
51 | const languages = [
52 | { lang: 'Spanish', level: 'Native' },
53 | { lang: 'English', level: 'Intermediate B2' },
54 | { lang: 'Italian', level: 'Basic' },
55 | ];
56 |
57 | // Scroll logic remains the same
58 | useEffect(() => {
59 | const checkScrollTop = () => {
60 | if (!showScrollButton && window.scrollY > 400) {
61 | setShowScrollButton(true);
62 | } else if (showScrollButton && window.scrollY <= 400) {
63 | setShowScrollButton(false);
64 | }
65 | };
66 | window.addEventListener('scroll', checkScrollTop);
67 | return () => window.removeEventListener('scroll', checkScrollTop);
68 | }, [showScrollButton]);
69 |
70 | const scrollToTop = () => {
71 | window.scrollTo({ top: 0, behavior: 'smooth' });
72 | };
73 |
74 | // Updated Skill Badge Renderer
75 | const renderSkillBadge = (skill: string, index: number) => (
76 |
77 | {skill}
78 |
79 | );
80 |
81 | // Card Container Base Styles (applied via @apply potentially, or repeated)
82 | const cardBaseStyles = "bg-slate-800/50 backdrop-blur-sm border border-slate-700/30 rounded-lg shadow-lg p-6";
83 | const sectionCardBaseStyles = "bg-slate-800/50 backdrop-blur-sm border border-slate-700/30 rounded-lg shadow-lg p-4"; // Slightly less padding for list items
84 |
85 | return (
86 | // Updated main section styles - assuming dark background from layout
87 | {/* Base text color */}
88 |