Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions docs/projects/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ description: "Practical projects you can build with Python — installing it for
---

import ProjectChooser from '@site/src/components/ProjectChooser';
import ProjectsListingJsonLd from '@site/src/components/ProjectsListingJsonLd';
import {mergeProjectMeta} from '@site/src/data/projects';

# 🌍 Real-World Projects
Expand Down Expand Up @@ -193,3 +194,5 @@ They're optional and ungraded. Browse them any time — each project's intro say
},
])}
/>

<ProjectsListingJsonLd />
88 changes: 73 additions & 15 deletions docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ const config: Config = {

future: {
v4: true,
// Git-backed "last updated" timestamps — feeds the sitemap's per-page
// <lastmod> (a real freshness signal for crawlers) and a "Last updated"
// line on docs pages.
experimental_vcs: true,
},

url: 'https://pyda-course.online',
Expand All @@ -26,26 +30,75 @@ const config: Config = {
tagName: 'meta',
attributes: {name: 'author', content: 'Abderrahim Adrabi'},
},
{
tagName: 'meta',
attributes: {property: 'og:site_name', content: 'Python & Data Analysis Course'},
},
{
tagName: 'script',
attributes: {type: 'application/ld+json'},
innerHTML: JSON.stringify({
'@context': 'https://schema.org',
'@type': 'Course',
name: 'Python & Data Analysis Course',
description:
'A free, browser-based Python and data analysis course covering Python fundamentals and pandas/EDA across two 5-week sections, each with Normal and Hard tracks.',
author: {
'@type': 'Person',
name: 'Abderrahim Adrabi',
},
provider: {
'@type': 'Organization',
name: 'Python & Data Analysis Course',
sameAs: 'https://github.com/abderrahim-lectures/python-data-analysis-course',
},
isAccessibleForFree: true,
inLanguage: ['en', 'ar', 'es', 'fr'],
'@graph': [
{
'@type': 'WebSite',
'@id': 'https://pyda-course.online/#website',
url: 'https://pyda-course.online/',
name: 'Python & Data Analysis Course',
description:
'A free, browser-based Python and data analysis course — no installs required.',
inLanguage: ['en', 'ar', 'es', 'fr'],
publisher: {'@id': 'https://pyda-course.online/#organization'},
},
{
'@type': 'Organization',
'@id': 'https://pyda-course.online/#organization',
name: 'Python & Data Analysis Course',
url: 'https://pyda-course.online/',
logo: {
'@type': 'ImageObject',
url: 'https://pyda-course.online/img/logo.svg',
},
sameAs: ['https://github.com/abderrahim-lectures/python-data-analysis-course'],
},
{
'@type': 'Course',
'@id': 'https://pyda-course.online/#course',
name: 'Python & Data Analysis Course',
description:
'A free, browser-based Python and data analysis course covering Python fundamentals and pandas/EDA across two 5-week sections, each with Normal and Hard tracks, plus a growing library of real-world projects to build after you graduate from the playground.',
url: 'https://pyda-course.online/',
isAccessibleForFree: true,
inLanguage: ['en', 'ar', 'es', 'fr'],
learningResourceType: 'Course',
educationalLevel: 'Beginner',
coursePrerequisites: 'None — no prior programming experience needed.',
teaches: [
'Python fundamentals',
'Pandas and data analysis',
'Exploratory data analysis',
'Building real-world Python projects',
],
offers: {
'@type': 'Offer',
category: 'Free',
price: '0',
priceCurrency: 'USD',
},
provider: {'@id': 'https://pyda-course.online/#organization'},
author: {
'@type': 'Person',
name: 'Abderrahim Adrabi',
},
hasCourseInstance: {
'@type': 'CourseInstance',
courseMode: 'Online',
courseWorkload: 'PT20H',
inLanguage: ['en', 'ar', 'es', 'fr'],
isAccessibleForFree: true,
},
},
],
}),
},
],
Expand Down Expand Up @@ -77,6 +130,9 @@ const config: Config = {
sidebarPath: './sidebars.ts',
editUrl:
'https://github.com/abderrahim-lectures/python-data-analysis-course/tree/main/',
// Git-backed "Last updated" line on docs pages + the data that feeds
// the sitemap's per-page <lastmod> (see future.experimental_vcs).
showLastUpdateTime: true,
remarkPlugins: [require('remark-math')],
rehypePlugins: [require('rehype-katex')],
},
Expand All @@ -91,6 +147,8 @@ const config: Config = {
ignorePatterns: ['/share'],
changefreq: 'weekly',
priority: 0.5,
// Include a per-page lastmod so crawlers see when each doc changes.
lastmod: 'datetime',
},
gtag: {
trackingID: 'G-FTR585C5BX',
Expand Down
91 changes: 91 additions & 0 deletions i18n/ar/code.json
Original file line number Diff line number Diff line change
Expand Up @@ -965,5 +965,96 @@
"homepage.projects.wordleClone.summary": {
"message": "ابنِ لعبة Wordle حقيقية في الطرفية من الصفر: تغذية راجعة صحيحة بالتخمين، وقائمة كلمات مخصصة، وتتبّع إحصائيات دائم عبر الجلسات.",
"description": "Homepage project card summary"
},
"homepage.hero.statWeeks": {
"message": "أسابيع",
"description": "Homepage hero stat: weeks"
},
"homepage.hero.statProjects": {
"message": "مشاريع من العالم الحقيقي",
"description": "Homepage hero stat: projects"
},
"homepage.hero.statInstalls": {
"message": "تثبيتات للبدء",
"description": "Homepage hero stat: installs"
},
"homepage.projects.completed": {
"message": "مكتمل",
"description": "Homepage project card completed label"
},
"homepage.projects.filterAll": {
"message": "الكل",
"description": "Project filter chip: all projects"
},
"capstoneChooser.filterAll": {
"message": "الكل"
},
"progressPage.overall.heading": {
"message": "التقدم العام"
},
"progressPage.overall.detail": {
"message": "{weeks} مكتملة و{projects} مبنية"
},
"progressPage.overall.weeks": {
"message": "أسابيع"
},
"progressPage.overall.projects": {
"message": "مشاريع"
},
"progressPage.overall.empty": {
"message": "اختر مسارًا في بايثون 101 أو تحليل البيانات لبدء تتبع تقدمك."
},
"projectGallery.filtersLabel": {
"message": "تصفية المشاريع"
},
"projectGallery.filterAll": {
"message": "الكل",
"description": "Project filter chip: all projects"
},
"projectGallery.favoritesFilter": {
"message": "المفضلة",
"description": "Project filter chip: favorites only"
},
"projectGallery.favorite.add": {
"message": "أضف إلى المفضلة"
},
"projectGallery.favorite.remove": {
"message": "أزل من المفضلة"
},
"projectGallery.showing": {
"message": "عرض {shown} من {total}",
"description": "Result counter: how many of the total are currently rendered"
},
"projectGallery.empty": {
"message": "لا توجد مشاريع تطابق عوامل التصفية.",
"description": "Empty state when no projects match the active filters"
},
"projectGallery.end": {
"message": "لقد شاهدت جميع المشاريع الـ{total}.",
"description": "End of list message with the total project count"
},
"projectGallery.completed": {
"message": "مكتمل",
"description": "Project card completed label"
},
"projectLevel.beginner": {
"message": "مبتدئ",
"description": "Project level label"
},
"projectLevel.intermediate": {
"message": "متوسط",
"description": "Project level label"
},
"projectLevel.advanced": {
"message": "متقدم",
"description": "Project level label"
},
"projectGallery.toolsLabel": {
"message": "الأدوات",
"description": "Project card tools row aria-label"
},
"homepage.hero.runChip": {
"message": "شغّل في متصفحك",
"description": "Homepage hero floating chip"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ description: "مشاريع عملية يمكنك بناؤها باستخدام P
---

import ProjectChooser from '@site/src/components/ProjectChooser';
import ProjectsListingJsonLd from '@site/src/components/ProjectsListingJsonLd';
import {mergeProjectMeta} from '@site/src/data/projects';

# 🌍 مشاريع من العالم الحقيقي
Expand Down Expand Up @@ -193,3 +194,5 @@ import {mergeProjectMeta} from '@site/src/data/projects';
},
])}
/>

<ProjectsListingJsonLd />
91 changes: 91 additions & 0 deletions i18n/es/code.json
Original file line number Diff line number Diff line change
Expand Up @@ -965,5 +965,96 @@
"homepage.projects.wordleClone.summary": {
"message": "Construye un juego Wordle real de terminal desde cero: retroalimentación correcta de acierto, una lista de palabras personalizada, y seguimiento persistente de estadísticas entre sesiones.",
"description": "Homepage project card summary"
},
"homepage.hero.statWeeks": {
"message": "semanas",
"description": "Homepage hero stat: weeks"
},
"homepage.hero.statProjects": {
"message": "proyectos del mundo real",
"description": "Homepage hero stat: projects"
},
"homepage.hero.statInstalls": {
"message": "instalaciones para empezar",
"description": "Homepage hero stat: installs"
},
"homepage.projects.completed": {
"message": "Completado",
"description": "Homepage project card completed label"
},
"homepage.projects.filterAll": {
"message": "Todos",
"description": "Project filter chip: all projects"
},
"capstoneChooser.filterAll": {
"message": "Todos"
},
"progressPage.overall.heading": {
"message": "Progreso general"
},
"progressPage.overall.detail": {
"message": "{weeks} completadas y {projects} construidos"
},
"progressPage.overall.weeks": {
"message": "semanas"
},
"progressPage.overall.projects": {
"message": "proyectos"
},
"progressPage.overall.empty": {
"message": "Elige un track en Python 101 o Análisis de Datos para empezar a registrar tu progreso."
},
"projectGallery.filtersLabel": {
"message": "Filtrar proyectos"
},
"projectGallery.filterAll": {
"message": "Todos",
"description": "Project filter chip: all projects"
},
"projectGallery.favoritesFilter": {
"message": "Favoritos",
"description": "Project filter chip: favorites only"
},
"projectGallery.favorite.add": {
"message": "Añadir a favoritos"
},
"projectGallery.favorite.remove": {
"message": "Quitar de favoritos"
},
"projectGallery.showing": {
"message": "Mostrando {shown} de {total}",
"description": "Result counter: how many of the total are currently rendered"
},
"projectGallery.empty": {
"message": "Ningún proyecto coincide con tus filtros.",
"description": "Empty state when no projects match the active filters"
},
"projectGallery.end": {
"message": "Has visto los {total} proyectos.",
"description": "End of list message with the total project count"
},
"projectGallery.completed": {
"message": "Completado",
"description": "Project card completed label"
},
"projectLevel.beginner": {
"message": "Principiante",
"description": "Project level label"
},
"projectLevel.intermediate": {
"message": "Intermedio",
"description": "Project level label"
},
"projectLevel.advanced": {
"message": "Avanzado",
"description": "Project level label"
},
"projectGallery.toolsLabel": {
"message": "Herramientas",
"description": "Project card tools row aria-label"
},
"homepage.hero.runChip": {
"message": "Ejecuta en tu navegador",
"description": "Homepage hero floating chip"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ description: "Proyectos prácticos que puedes construir con Python — instálal
---

import ProjectChooser from '@site/src/components/ProjectChooser';
import ProjectsListingJsonLd from '@site/src/components/ProjectsListingJsonLd';
import {mergeProjectMeta} from '@site/src/data/projects';

# 🌍 Proyectos del mundo real
Expand Down Expand Up @@ -193,3 +194,5 @@ Son opcionales y no calificados. Explóralos en cualquier momento — la introdu
},
])}
/>

<ProjectsListingJsonLd />
Loading
Loading