|
839 | 839 | } |
840 | 840 | </script> |
841 | 841 |
|
| 842 | + <!-- LocalBusiness Schema for Miami/Florida --> |
| 843 | + <script type="application/ld+json"> |
| 844 | + { |
| 845 | + "@context": "https://schema.org", |
| 846 | + "@type": "LocalBusiness", |
| 847 | + "name": "Patrick Araujo - Software Engineering Services", |
| 848 | + "image": "https://pklavc.github.io/images/Lavc.png", |
| 849 | + "url": "https://pklavc.github.io/", |
| 850 | + "telephone": "+1-305-XXX-XXXX", |
| 851 | + "address": { |
| 852 | + "@type": "PostalAddress", |
| 853 | + "streetAddress": "Remote / Available for Miami-based projects", |
| 854 | + "addressLocality": "Miami", |
| 855 | + "addressRegion": "FL", |
| 856 | + "postalCode": "33101", |
| 857 | + "addressCountry": "US" |
| 858 | + }, |
| 859 | + "geo": { |
| 860 | + "@type": "GeoCoordinates", |
| 861 | + "latitude": 25.7617, |
| 862 | + "longitude": -80.1918 |
| 863 | + }, |
| 864 | + "openingHoursSpecification": [ |
| 865 | + { |
| 866 | + "@type": "OpeningHoursSpecification", |
| 867 | + "dayOfWeek": [ |
| 868 | + "Monday", |
| 869 | + "Tuesday", |
| 870 | + "Wednesday", |
| 871 | + "Thursday", |
| 872 | + "Friday" |
| 873 | + ], |
| 874 | + "opens": "09:00", |
| 875 | + "closes": "18:00" |
| 876 | + } |
| 877 | + ], |
| 878 | + "sameAs": [ |
| 879 | + "https://github.com/PkLavc", |
| 880 | + "https://www.linkedin.com/in/patrickajm/", |
| 881 | + "https://twitter.com/PkLavc" |
| 882 | + ], |
| 883 | + "description": "Software Engineer & Data Architect specializing in Backend Systems, AI Engineering, and Intelligent Automation. Expert in Python, JavaScript, and high-scale Data Pipelines. Available for remote work and Miami/Florida-based projects.", |
| 884 | + "priceRange": "$$$", |
| 885 | + "serviceArea": { |
| 886 | + "@type": "GeoCircle", |
| 887 | + "geoMidpoint": { |
| 888 | + "@type": "GeoCoordinates", |
| 889 | + "latitude": 25.7617, |
| 890 | + "longitude": -80.1918 |
| 891 | + }, |
| 892 | + "geoRadius": "100000" |
| 893 | + }, |
| 894 | + "availableService": [ |
| 895 | + { |
| 896 | + "@type": "Service", |
| 897 | + "name": "Backend Development", |
| 898 | + "description": "Custom backend systems, APIs, and server-side applications" |
| 899 | + }, |
| 900 | + { |
| 901 | + "@type": "Service", |
| 902 | + "name": "Data Engineering", |
| 903 | + "description": "Data pipelines, ETL processes, and data infrastructure" |
| 904 | + }, |
| 905 | + { |
| 906 | + "@type": "Service", |
| 907 | + "name": "AI Engineering", |
| 908 | + "description": "AI workflows, machine learning integration, and intelligent automation" |
| 909 | + }, |
| 910 | + { |
| 911 | + "@type": "Service", |
| 912 | + "name": "Cloud Architecture", |
| 913 | + "description": "AWS/Azure cloud solutions and infrastructure design" |
| 914 | + } |
| 915 | + ], |
| 916 | + "hasOfferCatalog": { |
| 917 | + "@type": "OfferCatalog", |
| 918 | + "name": "Software Engineering Services", |
| 919 | + "itemListElement": [ |
| 920 | + { |
| 921 | + "@type": "Offer", |
| 922 | + "itemOffered": { |
| 923 | + "@type": "Service", |
| 924 | + "name": "Backend Development" |
| 925 | + } |
| 926 | + }, |
| 927 | + { |
| 928 | + "@type": "Offer", |
| 929 | + "itemOffered": { |
| 930 | + "@type": "Service", |
| 931 | + "name": "Data Engineering" |
| 932 | + } |
| 933 | + }, |
| 934 | + { |
| 935 | + "@type": "Offer", |
| 936 | + "itemOffered": { |
| 937 | + "@type": "Service", |
| 938 | + "name": "AI Engineering" |
| 939 | + } |
| 940 | + } |
| 941 | + ] |
| 942 | + } |
| 943 | + } |
| 944 | + </script> |
| 945 | + |
842 | 946 | <!-- Work Experience Schema --> |
843 | 947 | <script type="application/ld+json"> |
844 | 948 | { |
|
961 | 1065 | </div> |
962 | 1066 | </div> |
963 | 1067 | <div id="header"> |
964 | | - <div id="particles"></div> |
| 1068 | + <div id="particles" class="particles-container"></div> |
965 | 1069 | <div class="social-media-links"> |
966 | | - <a href="https://github.com/PkLavc"><img src="images/github.gif" alt="GitHub-pic" class="social-media"></a> |
967 | | - <a href="https://www.linkedin.com/in/patrickajm/"><img src="images/linkedin.gif" class="social-media" alt="linkedin-logo"></a> |
968 | | - <a href="mailto:patrickajm@gmail.com"><img src="images/mail.gif" class="social-media" alt="mail"></a> |
| 1070 | + <a href="https://github.com/PkLavc"><img src="images/github.gif" alt="Patrick Araujo - GitHub Portfolio and Open Source Projects" class="social-media"></a> |
| 1071 | + <a href="https://www.linkedin.com/in/patrickajm/"><img src="images/linkedin.gif" class="social-media" alt="Patrick Araujo - Professional LinkedIn Profile"></a> |
| 1072 | + <a href="mailto:patrickajm@gmail.com"><img src="images/mail.gif" class="social-media" alt="Contact Patrick Araujo via Email"></a> |
969 | 1073 | </div> |
970 | 1074 | <div class="header-content" aria-label="Professional profile header"> |
971 | 1075 | <div class="header-content-box"> |
|
988 | 1092 | </div> |
989 | 1093 | </div> |
990 | 1094 | </div> |
991 | | - <script src="js/jquery.min.js"></script> |
992 | | - <script src="js/particles.js"></script> |
| 1095 | + <script src="js/jquery.min.js" defer></script> |
993 | 1096 | <script src="js/particles.min.js"></script> |
994 | | - <script src="js/index.js"></script> |
| 1097 | + <script src="js/index.js" defer></script> |
995 | 1098 | <!--particles script--> |
996 | 1099 | <script> |
997 | 1100 | particlesJS("particles", {"particles":{"number":{"value":50,"density":{"enable":true,"value_area":800}},"color":{"value":"#ffffff"},"shape":{"type":"circle","stroke":{"width":0,"color":"#000000"},"polygon":{"nb_sides":5},"image":{"src":"img/github.svg","width":100,"height":100}},"opacity":{"value":0.5,"random":false,"anim":{"enable":false,"speed":1,"opacity_min":0.1,"sync":false}},"size":{"value":3,"random":true,"anim":{"enable":false,"speed":40,"size_min":0.1,"sync":false}},"line_linked":{"enable":true,"distance":150,"color":"#ffffff","opacity":0.4,"width":1},"move":{"enable":true,"speed":6,"direction":"none","random":false,"straight":false,"out_mode":"out","bounce":false,"attract":{"enable":false,"rotateX":600,"rotateY":1200}}},"interactivity":{"detect_on":"canvas","events":{"onhover":{"enable":true,"mode":"repulse"},"onclick":{"enable":true,"mode":"push"},"resize":true},"modes":{"grab":{"distance":400,"line_linked":{"opacity":1}},"bubble":{"distance":400,"size":40,"duration":2,"opacity":8,"speed":3},"repulse":{"distance":200,"duration":0.4},"push":{"particles_nb":4},"remove":{"particles_nb":2}}},"retina_detect":true}); |
998 | 1101 | </script> |
999 | 1102 |
|
1000 | 1103 | <script> |
1001 | | - // Fix agressivo para forçar renderização das partículas |
| 1104 | + // Performance fallback and enhanced particles initialization |
1002 | 1105 | window.addEventListener('load', function() { |
1003 | | - // Múltiplos resizes em tempos diferentes |
1004 | | - setTimeout(function() { window.dispatchEvent(new Event('resize')); }, 100); |
1005 | | - setTimeout(function() { window.dispatchEvent(new Event('resize')); }, 500); |
1006 | | - setTimeout(function() { window.dispatchEvent(new Event('resize')); }, 1000); |
| 1106 | + // Add fallback class if particles fail to load |
| 1107 | + const particlesContainer = document.getElementById('particles'); |
| 1108 | + const header = document.getElementById('header'); |
| 1109 | + |
| 1110 | + // Check if particles loaded successfully |
| 1111 | + setTimeout(function() { |
| 1112 | + const canvas = particlesContainer.querySelector('canvas'); |
| 1113 | + if (!canvas || canvas.style.display === 'none') { |
| 1114 | + // Particles failed to load, apply fallback styling |
| 1115 | + header.classList.add('particles-fallback'); |
| 1116 | + particlesContainer.style.background = 'linear-gradient(135deg, #1a1a2e 0%, #16213e 100%)'; |
| 1117 | + } |
| 1118 | + }, 2000); |
| 1119 | + |
| 1120 | + // Enhanced resize handling |
| 1121 | + let resizeTimeout; |
| 1122 | + window.addEventListener('resize', function() { |
| 1123 | + clearTimeout(resizeTimeout); |
| 1124 | + resizeTimeout = setTimeout(function() { |
| 1125 | + if (window.pJSDom && window.pJSDom.length > 0) { |
| 1126 | + window.pJSDom[0].pJS.fn.vendors.densityAutoParticles(); |
| 1127 | + window.pJSDom[0].pJS.fn.particlesRefresh(); |
| 1128 | + } |
| 1129 | + }, 100); |
| 1130 | + }); |
1007 | 1131 |
|
1008 | | - // Força o pJSDom a atualizar o canvas diretamente |
| 1132 | + // Force particles refresh on load |
1009 | 1133 | setTimeout(function() { |
1010 | 1134 | if (window.pJSDom && window.pJSDom.length > 0) { |
1011 | 1135 | window.pJSDom[0].pJS.fn.vendors.densityAutoParticles(); |
1012 | 1136 | window.pJSDom[0].pJS.fn.particlesRefresh(); |
1013 | 1137 | } |
1014 | | - }, 1500); |
| 1138 | + }, 500); |
1015 | 1139 | }); |
1016 | 1140 | </script> |
1017 | 1141 |
|
|
0 commit comments