Skip to content

Commit e64c945

Browse files
cozyartzclaude
andcommitted
πŸš€ Major SEO & Performance Optimization + GitHub Contributions
## New Features - ✨ GitHub Contributions Graph component with real-time data - 🧭 Sticky Navigation Header with smooth scrolling - πŸ“Š Web Vitals monitoring and performance tracking - πŸ” Advanced SEO optimization with structured data ## SEO Improvements - 🎯 Enhanced meta tags with location and technology keywords - πŸ“ Local SEO optimization for Battle Creek, Michigan - 🏷️ Rich structured data (JSON-LD) with detailed person schema - πŸ“± Improved Open Graph and Twitter Card optimization - πŸ—ΊοΈ Updated sitemap.xml with image metadata and priorities - πŸ€– Enhanced robots.txt with social bot permissions ## Performance Enhancements - ⚑ Lazy loading for below-the-fold components - πŸ“¦ Code splitting with React.lazy() for better bundles - πŸ”§ Vite build optimization with Terser minification - πŸš€ Resource preconnection for faster loading - πŸ“ˆ Real-time Core Web Vitals monitoring ## Technical Improvements - 🧱 Semantic HTML structure with proper ARIA labels - β™Ώ Enhanced accessibility and screen reader support - πŸ“± Mobile-first responsive navigation - 🎨 Glass morphism UI consistency - πŸ”— Dynamic meta tag management system ## GitHub Integration - πŸ“Š Extended Cloudflare Worker for contributions API - 🎯 GraphQL integration for contribution graph data - πŸ“ˆ Cached contribution data with 4-hour refresh cycle - 🎨 GitHub-style contribution visualization πŸ€– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent b1d7b9e commit e64c945

12 files changed

Lines changed: 994 additions & 113 deletions

File tree

β€Žindex.htmlβ€Ž

Lines changed: 102 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,42 @@
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
66

77
<!-- Primary Meta Tags -->
8-
<title>Andrea Cozart-Lundin | Full Stack Developer & Creative Technologist</title>
9-
<meta name="title" content="Andrea Cozart-Lundin | Full Stack Developer & Creative Technologist" />
10-
<meta name="description" content="Full Stack Developer & Creative Technologist specializing in React, TypeScript, hardware hacking, and drone building. Bridging digital and physical worlds through innovative solutions." />
11-
<meta name="keywords" content="Andrea Cozart-Lundin, Full Stack Developer, Creative Technologist, React Developer, TypeScript, Hardware Hacker, Drone Builder, Web Development, Software Engineer, Cozyartz Media Group, Battle Creek Michigan" />
8+
<title>Andrea Cozart-Lundin | Full Stack Developer & Creative Technologist Portfolio</title>
9+
<meta name="title" content="Andrea Cozart-Lundin | Full Stack Developer & Creative Technologist Portfolio" />
10+
<meta name="description" content="Experienced Full Stack Developer & Creative Technologist from Battle Creek, Michigan. Specializing in React, TypeScript, Next.js, Astro, hardware hacking, and drone building. Creating innovative web applications, SaaS platforms, and AI-powered solutions that bridge digital and physical worlds." />
11+
<meta name="keywords" content="Andrea Cozart-Lundin, Full Stack Developer, Creative Technologist, React Developer, TypeScript Developer, Next.js, Astro, Hardware Hacker, Drone Builder, Web Development, Software Engineer, AI Integration, SaaS Development, Cozyartz Media Group, Battle Creek Michigan, Portfolio, GitHub" />
1212
<meta name="author" content="Andrea Cozart-Lundin" />
13-
<meta name="robots" content="index, follow" />
13+
<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
14+
<meta name="googlebot" content="index, follow" />
15+
<meta name="bingbot" content="index, follow" />
16+
<link rel="author" href="https://github.com/cozyartz" />
17+
<meta name="geo.region" content="US-MI" />
18+
<meta name="geo.placename" content="Battle Creek, Michigan" />
19+
<meta name="ICBM" content="42.3211, -85.1797" />
20+
<meta name="geo.position" content="42.3211;-85.1797" />
1421

1522
<!-- Open Graph / Facebook -->
16-
<meta property="og:type" content="website" />
23+
<meta property="og:type" content="profile" />
1724
<meta property="og:url" content="https://andreacozart.me/" />
18-
<meta property="og:title" content="Andrea Cozart-Lundin | Full Stack Developer & Creative Technologist" />
19-
<meta property="og:description" content="Full Stack Developer & Creative Technologist specializing in React, TypeScript, hardware hacking, and drone building. Bridging digital and physical worlds through innovative solutions." />
20-
<meta property="og:image" content="https://andreacozart.me/og-image.jpg" />
21-
<meta property="og:image:width" content="1200" />
22-
<meta property="og:image:height" content="630" />
23-
<meta property="og:image:alt" content="Andrea Cozart-Lundin - Full Stack Developer & Creative Technologist Portfolio" />
25+
<meta property="og:title" content="Andrea Cozart-Lundin | Full Stack Developer & Creative Technologist Portfolio" />
26+
<meta property="og:description" content="Experienced Full Stack Developer & Creative Technologist from Battle Creek, Michigan. Specializing in React, TypeScript, Next.js, Astro, hardware hacking, and drone building. Creating innovative web applications, SaaS platforms, and AI-powered solutions." />
27+
<meta property="og:image" content="https://andreacozart.me/Cozy1.png" />
28+
<meta property="og:image:width" content="400" />
29+
<meta property="og:image:height" content="400" />
30+
<meta property="og:image:alt" content="Andrea Cozart-Lundin - Full Stack Developer & Creative Technologist Profile Photo" />
2431
<meta property="og:site_name" content="Andrea Cozart-Lundin Portfolio" />
2532
<meta property="og:locale" content="en_US" />
33+
<meta property="profile:first_name" content="Andrea" />
34+
<meta property="profile:last_name" content="Cozart-Lundin" />
35+
<meta property="profile:username" content="cozyartz" />
2636

2737
<!-- Twitter -->
28-
<meta property="twitter:card" content="summary_large_image" />
38+
<meta property="twitter:card" content="summary" />
2939
<meta property="twitter:url" content="https://andreacozart.me/" />
30-
<meta property="twitter:title" content="Andrea Cozart-Lundin | Full Stack Developer & Creative Technologist" />
31-
<meta property="twitter:description" content="Full Stack Developer & Creative Technologist specializing in React, TypeScript, hardware hacking, and drone building. Bridging digital and physical worlds through innovative solutions." />
32-
<meta property="twitter:image" content="https://andreacozart.me/og-image.jpg" />
33-
<meta property="twitter:image:alt" content="Andrea Cozart-Lundin - Full Stack Developer & Creative Technologist Portfolio" />
40+
<meta property="twitter:title" content="Andrea Cozart-Lundin | Full Stack Developer & Creative Technologist Portfolio" />
41+
<meta property="twitter:description" content="Experienced Full Stack Developer & Creative Technologist from Battle Creek, Michigan. Specializing in React, TypeScript, Next.js, Astro, hardware hacking, and drone building." />
42+
<meta property="twitter:image" content="https://andreacozart.me/Cozy1.png" />
43+
<meta property="twitter:image:alt" content="Andrea Cozart-Lundin - Full Stack Developer & Creative Technologist Profile Photo" />
3444
<meta property="twitter:creator" content="@cozyartz" />
3545
<meta property="twitter:site" content="@cozyartz" />
3646

@@ -52,24 +62,58 @@
5262
<link rel="preconnect" href="https://fonts.googleapis.com" />
5363
<link rel="preconnect" href="https://github.com" />
5464
<link rel="preconnect" href="https://stats.andreacozart.me" />
65+
<link rel="dns-prefetch" href="//www.googletagmanager.com" />
66+
<link rel="dns-prefetch" href="//fonts.gstatic.com" />
67+
68+
<!-- Additional SEO Meta Tags -->
69+
<meta name="format-detection" content="telephone=no" />
70+
<meta name="mobile-web-app-capable" content="yes" />
71+
<meta name="apple-mobile-web-app-capable" content="yes" />
72+
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
73+
<meta name="apple-mobile-web-app-title" content="Andrea Portfolio" />
74+
<meta name="application-name" content="Andrea Cozart-Lundin Portfolio" />
75+
<meta name="msapplication-tooltip" content="Full Stack Developer & Creative Technologist Portfolio" />
76+
<meta name="msapplication-starturl" content="/" />
77+
78+
<!-- Verification Tags (add when available) -->
79+
<!-- <meta name="google-site-verification" content="your-verification-code" /> -->
80+
<!-- <meta name="msvalidate.01" content="your-bing-verification-code" /> -->
81+
82+
<!-- Language and Content Declarations -->
83+
<meta http-equiv="content-language" content="en-US" />
84+
<meta name="rating" content="general" />
85+
<meta name="distribution" content="global" />
86+
<meta name="revisit-after" content="7 days" />
5587

5688
<!-- Structured Data (JSON-LD) -->
5789
<script type="application/ld+json">
5890
{
5991
"@context": "https://schema.org",
6092
"@type": "Person",
6193
"name": "Andrea Cozart-Lundin",
94+
"alternateName": "cozyartz",
6295
"jobTitle": "Full Stack Developer & Creative Technologist",
63-
"description": "Full Stack Developer & Creative Technologist specializing in React, TypeScript, hardware hacking, and drone building. Bridging digital and physical worlds through innovative solutions.",
96+
"description": "Experienced Full Stack Developer & Creative Technologist from Battle Creek, Michigan. Specializing in React, TypeScript, Next.js, Astro, hardware hacking, and drone building. Creating innovative web applications, SaaS platforms, and AI-powered solutions that bridge digital and physical worlds.",
6497
"url": "https://andreacozart.me",
98+
"image": "https://andreacozart.me/Cozy1.png",
99+
"gender": "Female",
100+
"nationality": "American",
101+
"address": {
102+
"@type": "PostalAddress",
103+
"addressLocality": "Battle Creek",
104+
"addressRegion": "MI",
105+
"addressCountry": "US"
106+
},
65107
"sameAs": [
66108
"https://github.com/cozyartz",
67109
"https://link.andreacozart.me",
68-
"https://linkedin.com/in/andrea-cozart-lundin"
110+
"https://linkedin.com/in/andrea-cozart-lundin",
111+
"https://twitter.com/cozyartz"
69112
],
70113
"worksFor": {
71114
"@type": "Organization",
72115
"name": "Cozyartz Media Group",
116+
"url": "https://cozyartz.com",
73117
"address": {
74118
"@type": "PostalAddress",
75119
"addressLocality": "Battle Creek",
@@ -82,35 +126,60 @@
82126
"knowsAbout": [
83127
"React",
84128
"TypeScript",
129+
"JavaScript",
130+
"Next.js",
131+
"Astro",
85132
"Full Stack Development",
133+
"Frontend Development",
134+
"Backend Development",
86135
"Hardware Hacking",
87136
"Drone Building",
88137
"Web Development",
89138
"Software Engineering",
90139
"Creative Technology",
91-
"JavaScript",
92140
"Node.js",
93141
"Git",
94142
"GitHub",
95143
"Vite",
96-
"Tailwind CSS"
144+
"Tailwind CSS",
145+
"AI Integration",
146+
"SaaS Development",
147+
"Cloudflare Workers",
148+
"Database Design",
149+
"API Development"
97150
],
98-
"hasOccupation": {
99-
"@type": "Occupation",
100-
"name": "Full Stack Developer",
101-
"occupationLocation": {
102-
"@type": "Place",
103-
"address": {
104-
"@type": "PostalAddress",
105-
"addressLocality": "Battle Creek",
106-
"addressRegion": "Michigan",
107-
"addressCountry": "US"
151+
"hasOccupation": [
152+
{
153+
"@type": "Occupation",
154+
"name": "Full Stack Developer",
155+
"description": "Develops complete web applications from frontend to backend",
156+
"occupationLocation": {
157+
"@type": "Place",
158+
"address": {
159+
"@type": "PostalAddress",
160+
"addressLocality": "Battle Creek",
161+
"addressRegion": "Michigan",
162+
"addressCountry": "US"
163+
}
108164
}
165+
},
166+
{
167+
"@type": "Occupation",
168+
"name": "Creative Technologist",
169+
"description": "Bridges creative design with technical implementation in innovative solutions"
109170
}
110-
},
171+
],
111172
"alumniOf": {
112173
"@type": "EducationalOrganization",
113-
"name": "Various Technology Bootcamps and Self-Directed Learning"
174+
"name": "Self-Directed Technology Learning & Professional Development"
175+
},
176+
"makesOffer": {
177+
"@type": "Offer",
178+
"itemOffered": {
179+
"@type": "Service",
180+
"name": "Full Stack Web Development Services",
181+
"description": "Custom web applications, SaaS platforms, and AI-powered solutions"
182+
}
114183
}
115184
}
116185
</script>

β€Žpublic/robots.txtβ€Ž

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,48 @@
11
User-agent: *
22
Allow: /
33

4-
Sitemap: https://portfolio.andreacozart.me/sitemap.xml
4+
Sitemap: https://andreacozart.me/sitemap.xml
55

66
# Specific crawling rules for search engines
77
User-agent: Googlebot
88
Allow: /
9+
Crawl-delay: 1
910

1011
User-agent: Bingbot
1112
Allow: /
13+
Crawl-delay: 1
1214

1315
User-agent: Slurp
1416
Allow: /
17+
Crawl-delay: 2
1518

16-
# Block access to development files
19+
User-agent: DuckDuckBot
20+
Allow: /
21+
Crawl-delay: 1
22+
23+
User-agent: facebookexternalhit
24+
Allow: /
25+
26+
User-agent: Twitterbot
27+
Allow: /
28+
29+
User-agent: LinkedInBot
30+
Allow: /
31+
32+
# Block access to development and system files
1733
User-agent: *
1834
Disallow: /src/
1935
Disallow: /node_modules/
2036
Disallow: /.git/
2137
Disallow: /dist/
22-
Disallow: /build/
38+
Disallow: /build/
39+
Disallow: /*.json$
40+
Disallow: /*.map$
41+
Disallow: /worker/
42+
Disallow: /api/
43+
44+
# Performance optimization - allow important assets
45+
User-agent: *
46+
Allow: /favicon.png
47+
Allow: /Cozy1.png
48+
Allow: /site.webmanifest

β€Žpublic/sitemap.xmlβ€Ž

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,42 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
33
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
45
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
56
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
67
<url>
7-
<loc>https://portfolio.andreacozart.me/</loc>
8-
<lastmod>2025-07-13</lastmod>
8+
<loc>https://andreacozart.me/</loc>
9+
<lastmod>2025-07-21</lastmod>
910
<changefreq>weekly</changefreq>
1011
<priority>1.0</priority>
12+
<image:image>
13+
<image:loc>https://andreacozart.me/Cozy1.png</image:loc>
14+
<image:title>Andrea Cozart-Lundin Profile Photo</image:title>
15+
<image:caption>Andrea Cozart-Lundin, Full Stack Developer and Creative Technologist from Battle Creek, Michigan</image:caption>
16+
</image:image>
1117
</url>
1218
<url>
13-
<loc>https://portfolio.andreacozart.me/#projects</loc>
14-
<lastmod>2025-07-13</lastmod>
19+
<loc>https://andreacozart.me/#education</loc>
20+
<lastmod>2025-07-21</lastmod>
1521
<changefreq>monthly</changefreq>
16-
<priority>0.8</priority>
22+
<priority>0.9</priority>
1723
</url>
1824
<url>
19-
<loc>https://portfolio.andreacozart.me/#skills</loc>
20-
<lastmod>2025-07-13</lastmod>
25+
<loc>https://andreacozart.me/#projects</loc>
26+
<lastmod>2025-07-21</lastmod>
27+
<changefreq>weekly</changefreq>
28+
<priority>0.9</priority>
29+
</url>
30+
<url>
31+
<loc>https://andreacozart.me/#skills</loc>
32+
<lastmod>2025-07-21</lastmod>
2133
<changefreq>monthly</changefreq>
2234
<priority>0.8</priority>
2335
</url>
2436
<url>
25-
<loc>https://portfolio.andreacozart.me/#contact</loc>
26-
<lastmod>2025-07-13</lastmod>
37+
<loc>https://andreacozart.me/#contact</loc>
38+
<lastmod>2025-07-21</lastmod>
2739
<changefreq>monthly</changefreq>
28-
<priority>0.7</priority>
40+
<priority>0.8</priority>
2941
</url>
3042
</urlset>

β€Žsrc/App.tsxβ€Ž

Lines changed: 56 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,64 @@
1-
import React from 'react';
1+
import React, { lazy, Suspense } from 'react';
2+
import Header from './components/Header';
23
import Hero from './components/Hero';
3-
import EducationSection from './components/EducationSection';
4-
import ProjectsSection from './components/ProjectsSection';
5-
import SkillsSection from './components/SkillsSection';
6-
import ToolsSection from './components/ToolsSection';
7-
import GitHubStats from './components/GitHubStats';
8-
import ContactSection from './components/ContactSection';
4+
import SEOHead from './components/SEOHead';
5+
6+
// Lazy load components that are below the fold
7+
const EducationSection = lazy(() => import('./components/EducationSection'));
8+
const ProjectsSection = lazy(() => import('./components/ProjectsSection'));
9+
const SkillsSection = lazy(() => import('./components/SkillsSection'));
10+
const ToolsSection = lazy(() => import('./components/ToolsSection'));
11+
const GitHubStats = lazy(() => import('./components/GitHubStats'));
12+
const ContactSection = lazy(() => import('./components/ContactSection'));
13+
14+
// Loading component
15+
const SectionLoader = () => (
16+
<div className="min-h-[200px] flex items-center justify-center">
17+
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-400"></div>
18+
</div>
19+
);
920

1021
function App() {
1122
return (
1223
<div className="min-h-screen bg-slate-900">
13-
<Hero />
14-
<EducationSection />
15-
<ProjectsSection />
16-
<SkillsSection />
17-
<ToolsSection />
18-
<section className="py-20 px-6">
19-
<div className="max-w-4xl mx-auto">
20-
<h2 className="text-3xl font-bold text-white mb-8 text-center">
21-
GitHub Activity
22-
</h2>
23-
<GitHubStats username="cozyartz" theme="dark" />
24-
</div>
25-
</section>
26-
<ContactSection />
24+
<SEOHead />
25+
<Header />
26+
<main>
27+
<section id="hero" aria-label="Hero Section">
28+
<Hero />
29+
</section>
30+
<Suspense fallback={<SectionLoader />}>
31+
<section id="education" aria-label="About and Education">
32+
<EducationSection />
33+
</section>
34+
</Suspense>
35+
<Suspense fallback={<SectionLoader />}>
36+
<section id="projects" aria-label="Projects Showcase">
37+
<ProjectsSection />
38+
</section>
39+
</Suspense>
40+
<Suspense fallback={<SectionLoader />}>
41+
<section id="skills" aria-label="Skills and Technologies">
42+
<SkillsSection />
43+
<ToolsSection />
44+
</section>
45+
</Suspense>
46+
<Suspense fallback={<SectionLoader />}>
47+
<section className="py-20 px-6" aria-label="GitHub Activity">
48+
<div className="max-w-4xl mx-auto">
49+
<h2 className="text-3xl font-bold text-white mb-8 text-center">
50+
GitHub Activity
51+
</h2>
52+
<GitHubStats username="cozyartz" theme="dark" />
53+
</div>
54+
</section>
55+
</Suspense>
56+
<Suspense fallback={<SectionLoader />}>
57+
<section id="contact" aria-label="Contact Information">
58+
<ContactSection />
59+
</section>
60+
</Suspense>
61+
</main>
2762
</div>
2863
);
2964
}

0 commit comments

Comments
Β (0)