Repository navigation
Expand file tree
/
Copy pathindex.html
More file actions
174 lines (163 loc) · 7.01 KB
/
Copy pathindex.html
File metadata and controls
174 lines (163 loc) · 7.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<!DOCTYPE html>
<html lang="en" class="dark">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/svg+xml" href="/assets/logo.svg" />
<link rel="apple-touch-icon" href="/assets/logo.svg" />
<link rel="manifest" href="/manifest.json" />
<link rel="icon" type="image/png" sizes="32x32" href="/assets/logo.svg" />
<link rel="icon" type="image/png" sizes="16x16" href="/assets/logo.svg" />
<!-- Primary Meta Tags -->
<title>
Code2Coder - Learn Python Online with AI Coding Tutor | Free Pyodide IDE
</title>
<meta
name="title"
content="Code2Coder - Learn Python Online with AI Coding Tutor | Free Pyodide IDE"
/>
<meta
name="description"
content="Master Python programming with our free AI-powered coding tutor. Run Python instantly in your browser with Pyodide. Zero setup, instant feedback, and personalized learning powered by Google Gemini AI."
/>
<meta
name="keywords"
content="learn python online, AI coding tutor, Pyodide IDE, Python in browser, free coding education, interactive Python tutorial, WebAssembly Python, AI programming mentor, learn to code, Python for beginners"
/>
<meta name="author" content="Code2Coder Team" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://code2coder.org/" />
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website" />
<meta property="og:url" content="https://code2coder.org/" />
<meta
property="og:title"
content="Code2Coder - Learn Python Online with AI Coding Tutor"
/>
<meta
property="og:description"
content="Master Python programming with our free AI-powered coding tutor. Run Python instantly in your browser with Pyodide. Zero setup, instant feedback, and personalized learning."
/>
<meta
property="og:image"
content="https://code2coder.org/assets/og-image.png"
/>
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:site_name" content="Code2Coder" />
<meta property="og:locale" content="en_US" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:url" content="https://code2coder.org/" />
<meta
name="twitter:title"
content="Code2Coder - Learn Python Online with AI Coding Tutor"
/>
<meta
name="twitter:description"
content="Master Python programming with our free AI-powered coding tutor. Run Python instantly in your browser with Pyodide. Zero setup, instant feedback."
/>
<meta
name="twitter:image"
content="https://code2coder.org/assets/twitter-card.png"
/>
<meta name="twitter:creator" content="@code2coder" />
<!-- Additional SEO -->
<meta name="theme-color" content="#06b6d4" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta
name="apple-mobile-web-app-status-bar-style"
content="black-translucent"
/>
<meta name="apple-mobile-web-app-title" content="Code2Coder" />
<!-- Schema.org Structured Data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "EducationalApplication",
"name": "Code2Coder",
"applicationCategory": "EducationalApplication",
"operatingSystem": "Web Browser",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"description": "Free AI-powered Python learning platform with instant browser-based code execution using Pyodide and personalized tutoring powered by Google Gemini AI.",
"url": "https://code2coder.org",
"image": "https://code2coder.org/assets/logo.svg",
"publisher": {
"@type": "Organization",
"name": "Code2Coder",
"logo": {
"@type": "ImageObject",
"url": "https://code2coder.org/assets/logo.svg"
}
},
"educationalLevel": "Beginner to Intermediate",
"teaches": "Python Programming",
"audience": {
"@type": "EducationalAudience",
"educationalRole": "student"
},
"featureList": [
"AI-powered coding tutor using Google Gemini",
"Zero-latency Python execution with Pyodide WebAssembly",
"Interactive lessons and practice problems",
"Real-time code feedback and hints",
"Browser-based IDE with no setup required",
"Privacy-focused client-side execution"
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"ratingCount": "1250"
}
}
</script>
<!-- Firebase config (public key) — generated at runtime in production by scripts/env.sh -->
<script src="/env-config.js"></script>
<!-- Preconnect to CDNs we still depend on (fonts + deferred scripts) -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&family=Outfit:wght@300;400;500;600;700;800;900&display=swap"
rel="stylesheet"
/>
<!-- Non-critical: load async/defer so they don't block first paint. -->
<script defer src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.2/dist/confetti.browser.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-python.min.js"></script>
<link rel="stylesheet" href="./index.css" />
</head>
<body>
<div id="root"></div>
<script>
if ("serviceWorker" in navigator) {
window.addEventListener("load", () => {
navigator.serviceWorker
.register("/input-serviceworker.js")
.then((reg) =>
console.log("Input Service Worker Registered", reg.scope)
)
.catch((err) =>
console.error("Service Worker Registration Failed", err)
);
// Listen for messages from the service worker (for input requests)
navigator.serviceWorker.addEventListener("message", (event) => {
// We dispatch a custom event so pyodideService can listen to it
if (event.data && event.data.type === "PYODIDE_INPUT_REQUEST") {
window.dispatchEvent(
new CustomEvent("pyodide-input-request", { detail: event.data })
);
}
});
});
}
</script>
<script type="module" src="./index.tsx"></script>
</body>
</html>