|
1 | 1 | --- |
2 | | -import { getImage, Image } from 'astro:assets' |
3 | 2 | import Layout from '@/layouts/Layout.astro' |
4 | | -import socialNetworks from '@/assets/data/social-networks.json' |
5 | | -import skills from '@/assets/data/skills.json' |
6 | | -
|
7 | | -import sorteosClickImage from '@/assets/images/sorteos.click.png' |
8 | | -import autosolutionsImage from '@/assets/images/autosolutions.mx.png' |
9 | | -import enerlinqImage from '@/assets/images/enerlinq.com.png' |
10 | | -import gerardoAncerImage from '@/assets/images/gerardoancer.com.png' |
11 | | -import hackcuuImage from '@/assets/images/hackcuu.com.png' |
12 | | -import profilePicture from '@/assets/images/profile.png' |
13 | | -
|
14 | | -const projects = [ |
15 | | - { |
16 | | - name: 'Enerlinq', |
17 | | - url: 'https://enerlinq.com', |
18 | | - description: 'Technology and innovation consulting company.', |
19 | | - image: await getImage({ src: enerlinqImage }), |
20 | | - }, |
21 | | - { |
22 | | - name: 'Autosolutions', |
23 | | - url: 'https://autosolutions.mx', |
24 | | - description: 'On-demand auto parts for your vehicle & more.', |
25 | | - image: await getImage({ src: autosolutionsImage }), |
26 | | - }, |
27 | | - { |
28 | | - name: 'Sorteos Click', |
29 | | - url: 'https://sorteos.click', |
30 | | - description: 'Create and manage your own raffles for free.', |
31 | | - image: await getImage({ src: sorteosClickImage }), |
32 | | - }, |
33 | | - { |
34 | | - name: 'Gerardo Ancer', |
35 | | - url: 'https://gerardoancer.com', |
36 | | - description: 'Portfolio website for graphic designer Gerardo Ancer.', |
37 | | - image: await getImage({ src: gerardoAncerImage }), |
38 | | - }, |
39 | | - { |
40 | | - name: 'HackCUU 2017', |
41 | | - url: 'https://facebook.com/hackcuu2', |
42 | | - description: 'HackCUU 2017 MLH hackathon lead organizer.', |
43 | | - image: await getImage({ src: hackcuuImage }), |
44 | | - }, |
45 | | -] |
46 | | -
|
| 3 | +import HomeSection from '@/components/HomeSection.astro' |
| 4 | +import BioSection from '@/components/BioSection.astro' |
| 5 | +import SkillsSection from '@/components/SkillsSection.astro' |
| 6 | +import ProjectsSection from '@/components/ProjectsSection.astro' |
| 7 | +import ContactSection from '@/components/ContactSection.astro' |
47 | 8 | --- |
48 | 9 |
|
49 | 10 | <Layout title="Jonas Perusquia Morales"> |
50 | 11 | <main class="max-w-7xl mx-auto px-6 pt-14 xs:pt-20"> |
51 | 12 | <div class="flex flex-col gap-y-20"> |
52 | | - <!-- HOME SECTION --> |
53 | | - <section id="home" class="py-8 scroll-mt-20"> |
54 | | - <div class="flex flex-col items-center lg:flex-row lg:justify-between"> |
55 | | - <div class="mb-8 text-center lg:mb-0 lg:text-left lg:w-1/2"> |
56 | | - <h1 class="mb-4 text-5xl font-medium animate-fade-up animate-delay-300">Jonas Perusquia Morales</h1> |
57 | | - <h2 class="mb-6 text-2xl font-light text-blue-300 animate-fade-up animate-delay-600">Chief Technology Officer</h2> |
58 | | - <p class="max-w-2xl text-xl text-grayblue-300 animate-fade-up animate-delay-900"> |
59 | | - Innovative tech leader with a passion for building scalable solutions and fostering high-performing teams. |
60 | | - </p> |
61 | | - <div class="flex gap-4 mt-6 justify-center lg:justify-start animate-fade-up animate-delay-1200"> |
62 | | - { |
63 | | - socialNetworks.map(socialNetwork => ( |
64 | | - <a aria-label={socialNetwork.name} href={socialNetwork.url} class="text-grayblue-300 hover:text-blue-300 transition-transform hover:scale-110"> |
65 | | - <div class="h-6 w-6"> |
66 | | - <Fragment set:html={socialNetwork.image} /> |
67 | | - </div> |
68 | | - </a> |
69 | | - )) |
70 | | - } |
71 | | - </div> |
72 | | - </div> |
73 | | - <div class="relative h-64 w-64 overflow-hidden rounded-full border-4 border-blue-300 lg:h-80 lg:w-80 animate-fade-up animate-delay-1600"> |
74 | | - <Image |
75 | | - src={profilePicture} |
76 | | - alt="Jonas Perusquia Morales" |
77 | | - width={320} |
78 | | - height={320} |
79 | | - class="rounded-full object-cover" |
80 | | - loading="eager" |
81 | | - /> |
82 | | - </div> |
83 | | - </div> |
84 | | - <div class="mt-12 animate-bounce text-center"> |
85 | | - <span class="material-symbols-rounded mx-auto text-5xl! text-blue-300 rotate-90">chevron_right</span> |
86 | | - </div> |
87 | | - </section> |
88 | | - |
89 | | - <!-- BIO SECTION --> |
90 | | - <section id="bio" class="py-8 scroll-mt-20"> |
91 | | - <h2 class="mb-12 text-center text-3xl font-medium">About Me</h2> |
92 | | - <div class="mx-auto bg-grayblue-800 p-8 rounded-lg shadow-lg"> |
93 | | - <p class="text-lg leading-relaxed text-grayblue-300"> |
94 | | - With a passion for technology and over eight years of experience in web development, I've dedicated myself to adopting and implementing the latest industry trends and tools. My portfolio includes a diverse range of cloud projects spanning websites, mobile applications, and desktop software. |
95 | | - </p> |
96 | | - <p class="text-lg leading-relaxed text-grayblue-300 mt-4"> |
97 | | - As a self-taught perfectionist and natural leader, I bring strong problem-solving abilities to every project I undertake. My consistently positive, motivating, and inclusive approach enables me to thrive in collaborative environments where knowledge sharing is valued. |
98 | | - </p> |
99 | | - <p class="text-lg leading-relaxed text-grayblue-300 mt-4"> |
100 | | - Beyond the professional realm, I find balance through music, sports, and quality time with family. |
101 | | - </p> |
102 | | - </div> |
103 | | - </section> |
104 | | - |
105 | | - <section id="skills" class="py-8 scroll-mt-20"> |
106 | | - <h2 class="mb-12 text-center text-3xl font-medium">Skills & Expertise</h2> |
107 | | - <div class="grid grid-cols-2 gap-8 md:grid-cols-4"> |
108 | | - {skills.map((skill) => ( |
109 | | - <div class="rounded-lg bg-grayblue-800 p-6 text-center shadow-lg transition-all duration-300 hover:bg-slate-700 hover:scale-110 flex items-center justify-center"> |
110 | | - <p class="text-lg text-center break-words hyphens-auto font-medium">{skill}</p> |
111 | | - </div> |
112 | | - ))} |
113 | | - </div> |
114 | | - </section> |
115 | | - |
116 | | - <section id="projects" class="py-8 scroll-mt-20"> |
117 | | - <h2 class="mb-12 text-center text-3xl font-medium">Featured Projects</h2> |
118 | | - <div class="grid gap-8 md:grid-cols-2"> |
119 | | - { |
120 | | - projects.map(project => |
121 | | - <a href={project.url} class="rounded-lg bg-grayblue-800 p-6 shadow-lg scale-image grid md:grid-cols-2 gap-4"> |
122 | | - <div id="project-info" class="flex flex-col gap-3"> |
123 | | - <h3 class="text-xl font-semibold text-blue-300">{ project.name }</h3> |
124 | | - <p class="text-grayblue-300">{ project.description }</p> |
125 | | - </div> |
126 | | - <div class="project-image self-center"> |
127 | | - <div class="overflow-hidden aspect-video rounded-lg"> |
128 | | - <img loading="lazy" class="duration-300 transition-all aspect-video " src={ project.image.src } alt={ project.name }></img> |
129 | | - </div> |
130 | | - </div> |
131 | | - </a> |
132 | | - ) |
133 | | - } |
134 | | - </div> |
135 | | - </section> |
136 | | - |
137 | | - <!-- GET IN TOUCH SECTION --> |
138 | | - <section id="contact" class="py-8 scroll-mt-20"> |
139 | | - <h2 class="mb-12 text-center text-3xl text-grayblue-100 font-medium">Get in Touch</h2> |
140 | | - <div class="flex justify-center"> |
141 | | - <div class="tidycal-embed" data-path="jperusm/15-minute-meeting"></div><script src="https://asset-tidycal.b-cdn.net/js/embed.js" async></script> |
142 | | - </div> |
143 | | - </section> |
| 13 | + <HomeSection /> |
| 14 | + <BioSection /> |
| 15 | + <SkillsSection /> |
| 16 | + <ProjectsSection /> |
| 17 | + <ContactSection /> |
144 | 18 | </div> |
145 | 19 | </main> |
146 | | - |
147 | 20 | <footer class="bg-grayblue-800 py-6 text-center text-sm text-grayblue-400"> |
148 | 21 | <p>Made with ♥️ from Chihuahua, Mexico.</p> |
149 | 22 | </footer> |
| 23 | + <script type="module" src="/src/scripts/fade-in-observer.js"></script> |
150 | 24 | </Layout> |
0 commit comments