Mark-Lasfar commited on
Commit
754ac2c
·
1 Parent(s): fe86d96

Update backend and server frontend for OAuth JSON response, client-side navigation, and add .gitignore

Browse files
main.py CHANGED
@@ -13,7 +13,7 @@ from starlette.middleware.sessions import SessionMiddleware
13
  from fastapi.openapi.docs import get_swagger_ui_html
14
  from fastapi.middleware.cors import CORSMiddleware
15
  from api.endpoints import router as api_router
16
- from api.auth import fastapi_users, auth_backend, current_active_user, get_auth_router # أزل أي ذكر لـ google_oauth_router, github_oauth_router
17
  from api.database import User, Conversation, get_db, init_db
18
  from api.models import UserRead, UserCreate, UserUpdate
19
  from motor.motor_asyncio import AsyncIOMotorClient
@@ -29,6 +29,8 @@ from datetime import datetime
29
  from httpx_oauth.exceptions import GetIdEmailError
30
  import re
31
  import anyio
 
 
32
 
33
  # Setup logging
34
  logging.basicConfig(level=logging.DEBUG)
@@ -93,6 +95,25 @@ QUEUE_SIZE = int(os.getenv("QUEUE_SIZE", 80))
93
  CONCURRENCY_LIMIT = int(os.getenv("CONCURRENCY_LIMIT", 20))
94
  logger.debug(f"Application settings: QUEUE_SIZE={QUEUE_SIZE}, CONCURRENCY_LIMIT={CONCURRENCY_LIMIT}")
95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  # Initialize FastAPI app
97
  @asynccontextmanager
98
  async def lifespan(app: FastAPI):
@@ -105,8 +126,8 @@ async def lifespan(app: FastAPI):
105
  app = FastAPI(
106
  title="MGZon Chatbot API",
107
  lifespan=lifespan,
108
- docs_url=None, # تعطيل Swagger UI الافتراضي على /docs
109
- redoc_url=None # تعطيل ReDoc الافتراضي لو مش عايزه
110
  )
111
 
112
  # Add SessionMiddleware
@@ -123,25 +144,26 @@ app.add_middleware(
123
  CORSMiddleware,
124
  allow_origins=[
125
  "https://mgzon-mgzon-app.hf.space",
 
126
  "http://localhost:7860",
127
  "http://localhost:8000",
128
- "http://localhost", # إضافة لدعم Capacitor على Android/iOS
129
- "https://localhost", # إضافة لدعم HTTPS المحلي
130
- "capacitor://localhost", # دعم Capacitor native apps
131
- "file://", # دعم الملفات المحلية في offline mode
132
  "https://hager-zon.vercel.app",
133
  "https://mgzon-mgzon-app.hf.space/auth/google/callback",
134
  "https://mgzon-mgzon-app.hf.space/auth/github/callback",
135
  ],
136
  allow_credentials=True,
137
- allow_methods=["*"], # سمح بكل الـ methods
138
- allow_headers=["*"], # سمح بكل الـ headers
139
  )
140
  logger.debug("CORS middleware configured with allowed origins")
141
 
142
  # Include routers
143
  app.include_router(api_router)
144
- get_auth_router(app) # يضيف الـ custom OAuth endpoints + JWT + register
145
  logger.debug("API and auth routers included")
146
 
147
  # Add logout endpoint
@@ -293,9 +315,13 @@ async def about(request: Request, user: User = Depends(current_active_user)):
293
  return templates.TemplateResponse("about.html", {"request": request, "user": user})
294
 
295
  @app.get("/profile", response_class=HTMLResponse)
296
- async def about(request: Request, user: User = Depends(current_active_user)):
297
- logger.debug(f"About page accessed by user: {user.email if user else 'Anonymous'}")
298
  return templates.TemplateResponse("profile.html", {"request": request, "user": user})
 
 
 
 
299
 
300
  # Serve static files
301
  @app.get("/static/{path:path}")
@@ -363,13 +389,13 @@ async def sitemap():
363
  xml += ' <loc>https://mgzon-mgzon-app.hf.space/chat</loc>\n'
364
  xml += f' <lastmod>{current_date}</lastmod>\n'
365
  xml += ' <changefreq>daily</changefreq>\n'
366
- xml += ' <priority>0.8</priority>\n'
367
  xml += ' </url>\n'
368
  xml += ' <url>\n'
369
  xml += ' <loc>https://mgzon-mgzon-app.hf.space/about</loc>\n'
370
  xml += f' <lastmod>{current_date}</lastmod>\n'
371
  xml += ' <changefreq>weekly</changefreq>\n'
372
- xml += ' <priority>0.7</priority>\n'
373
  xml += ' </url>\n'
374
  xml += ' <url>\n'
375
  xml += ' <loc>https://mgzon-mgzon-app.hf.space/login</loc>\n'
@@ -390,12 +416,18 @@ async def sitemap():
390
  xml += ' <priority>0.9</priority>\n'
391
  xml += ' </url>\n'
392
  xml += ' <url>\n'
393
- xml += ' <loc>https://mgzon-mgzon-app.hf.space/profile</loc>\n'
394
  xml += f' <lastmod>{current_date}</lastmod>\n'
395
  xml += ' <changefreq>weekly</changefreq>\n'
396
  xml += ' <priority>0.9</priority>\n'
397
  xml += ' </url>\n'
398
  xml += ' <url>\n'
 
 
 
 
 
 
399
  xml += ' <loc>https://mgzon-mgzon-app.hf.space/blog</loc>\n'
400
  xml += f' <lastmod>{current_date}</lastmod>\n'
401
  xml += ' <changefreq>daily</changefreq>\n'
@@ -423,6 +455,55 @@ async def health_check():
423
  logger.debug("Health check endpoint accessed")
424
  return "OK"
425
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
426
  if __name__ == "__main__":
427
  logger.info(f"Starting uvicorn server on port {os.getenv('PORT', 7860)}")
428
  uvicorn.run(app, host="0.0.0.0", port=int(os.getenv("PORT", 7860)))
 
13
  from fastapi.openapi.docs import get_swagger_ui_html
14
  from fastapi.middleware.cors import CORSMiddleware
15
  from api.endpoints import router as api_router
16
+ from api.auth import fastapi_users, auth_backend, current_active_user, get_auth_router
17
  from api.database import User, Conversation, get_db, init_db
18
  from api.models import UserRead, UserCreate, UserUpdate
19
  from motor.motor_asyncio import AsyncIOMotorClient
 
29
  from httpx_oauth.exceptions import GetIdEmailError
30
  import re
31
  import anyio
32
+ import requests
33
+ from bs4 import BeautifulSoup
34
 
35
  # Setup logging
36
  logging.basicConfig(level=logging.DEBUG)
 
95
  CONCURRENCY_LIMIT = int(os.getenv("CONCURRENCY_LIMIT", 20))
96
  logger.debug(f"Application settings: QUEUE_SIZE={QUEUE_SIZE}, CONCURRENCY_LIMIT={CONCURRENCY_LIMIT}")
97
 
98
+ # SearXNG instances
99
+ searx_instances = [
100
+ "https://search.ononoki.org/", # JP
101
+ "https://search.mdosch.de/", # DE
102
+ "https://searx.prvcy.eu/", # EU
103
+ "https://searxng.biz/", # US
104
+ "https://searx.tuxcloud.net/", # DE
105
+ "https://search.bus-hit.me/", # RU
106
+ "https://searx.tiekoetter.com/", # DE
107
+ "https://searx.be/", # BE
108
+ "https://searx.me/", # NL
109
+ "https://searx.eu/", # EU
110
+ "https://kheru.lavabit.com/searx/", # US
111
+ "https://search.disroot.org/", # NL
112
+ "https://searx.ninja/", # US
113
+ "https://searx.mastodontech.de/", # DE
114
+ "https://searx.ablatednation.com/" # US
115
+ ]
116
+
117
  # Initialize FastAPI app
118
  @asynccontextmanager
119
  async def lifespan(app: FastAPI):
 
126
  app = FastAPI(
127
  title="MGZon Chatbot API",
128
  lifespan=lifespan,
129
+ docs_url=None,
130
+ redoc_url=None
131
  )
132
 
133
  # Add SessionMiddleware
 
144
  CORSMiddleware,
145
  allow_origins=[
146
  "https://mgzon-mgzon-app.hf.space",
147
+ "https://mgzonai.vercel.app"
148
  "http://localhost:7860",
149
  "http://localhost:8000",
150
+ "http://localhost",
151
+ "https://localhost",
152
+ "capacitor://localhost",
153
+ "file://",
154
  "https://hager-zon.vercel.app",
155
  "https://mgzon-mgzon-app.hf.space/auth/google/callback",
156
  "https://mgzon-mgzon-app.hf.space/auth/github/callback",
157
  ],
158
  allow_credentials=True,
159
+ allow_methods=["*"],
160
+ allow_headers=["*"],
161
  )
162
  logger.debug("CORS middleware configured with allowed origins")
163
 
164
  # Include routers
165
  app.include_router(api_router)
166
+ get_auth_router(app)
167
  logger.debug("API and auth routers included")
168
 
169
  # Add logout endpoint
 
315
  return templates.TemplateResponse("about.html", {"request": request, "user": user})
316
 
317
  @app.get("/profile", response_class=HTMLResponse)
318
+ async def profile(request: Request, user: User = Depends(current_active_user)):
319
+ logger.debug(f"Profile page accessed by user: {user.email if user else 'Anonymous'}")
320
  return templates.TemplateResponse("profile.html", {"request": request, "user": user})
321
+
322
+ @app.get("/download", response_class=HTMLResponse)
323
+ async def download_page(request: Request):
324
+ return templates.TemplateResponse("download.html", {"request": request})
325
 
326
  # Serve static files
327
  @app.get("/static/{path:path}")
 
389
  xml += ' <loc>https://mgzon-mgzon-app.hf.space/chat</loc>\n'
390
  xml += f' <lastmod>{current_date}</lastmod>\n'
391
  xml += ' <changefreq>daily</changefreq>\n'
392
+ xml += ' <priority>0.9</priority>\n'
393
  xml += ' </url>\n'
394
  xml += ' <url>\n'
395
  xml += ' <loc>https://mgzon-mgzon-app.hf.space/about</loc>\n'
396
  xml += f' <lastmod>{current_date}</lastmod>\n'
397
  xml += ' <changefreq>weekly</changefreq>\n'
398
+ xml += ' <priority>0.9</priority>\n'
399
  xml += ' </url>\n'
400
  xml += ' <url>\n'
401
  xml += ' <loc>https://mgzon-mgzon-app.hf.space/login</loc>\n'
 
416
  xml += ' <priority>0.9</priority>\n'
417
  xml += ' </url>\n'
418
  xml += ' <url>\n'
419
+ xml += ' <loc>https://mgzon-mgzon-app.hf.space/download</loc>\n'
420
  xml += f' <lastmod>{current_date}</lastmod>\n'
421
  xml += ' <changefreq>weekly</changefreq>\n'
422
  xml += ' <priority>0.9</priority>\n'
423
  xml += ' </url>\n'
424
  xml += ' <url>\n'
425
+ xml += ' <loc>https://mgzon-mgzon-app.hf.space/profile</loc>\n'
426
+ xml += f' <lastmod>{current_date}</lastmod>\n'
427
+ xml += ' <changefreq>weekly</changefreq>\n'
428
+ xml += ' <priority>1.0</priority>\n'
429
+ xml += ' </url>\n'
430
+ xml += ' <url>\n'
431
  xml += ' <loc>https://mgzon-mgzon-app.hf.space/blog</loc>\n'
432
  xml += f' <lastmod>{current_date}</lastmod>\n'
433
  xml += ' <changefreq>daily</changefreq>\n'
 
455
  logger.debug("Health check endpoint accessed")
456
  return "OK"
457
 
458
+
459
+ @app.get("/search")
460
+ async def search_web(q: str):
461
+ """
462
+ يبحث في الويب باستخدام SearXNG instances متعددة ويجلب محتوى أعمق من الصفحات.
463
+ """
464
+ try:
465
+ for instance in searx_instances:
466
+ try:
467
+ url = f"{instance}search?format=json&q={requests.utils.quote(q)}&categories=general"
468
+ response = requests.get(url, timeout=10)
469
+ response.raise_for_status()
470
+ data = response.json()
471
+ results = data.get("results", [])
472
+ if not results:
473
+ continue
474
+
475
+ search_results = []
476
+ for i, item in enumerate(results[:7]): # More results (7 instead of 5)
477
+ title = item.get("title", "No title")
478
+ content = item.get("content", "No content")
479
+ link = item.get("url", "No link")
480
+ # Fetch deeper page content
481
+ try:
482
+ page_response = requests.get(link, timeout=7, headers={'User-Agent': 'Mozilla/5.0'})
483
+ page_response.raise_for_status()
484
+ soup = BeautifulSoup(page_response.text, "html.parser")
485
+ paragraphs = soup.find_all("p")
486
+ # Extract more paragraphs for depth
487
+ page_content = " ".join([p.get_text(strip=True) for p in paragraphs[:15]]) # More paras
488
+ except Exception as e:
489
+ logger.warning(f"Failed to fetch page content for {link}: {e}")
490
+ page_content = content
491
+ search_results.append({
492
+ "title": title,
493
+ "link": link,
494
+ "content": page_content[:3000] # Deeper limit
495
+ })
496
+ if search_results: # Return if any results
497
+ return {"success": True, "results": search_results}
498
+ except Exception as e:
499
+ logger.warning(f"Instance {instance} failed: {e}")
500
+ continue
501
+ return {"success": False, "message": "No web results found."}
502
+ except Exception as e:
503
+ logger.exception("Web search failed")
504
+ raise HTTPException(status_code=500, detail=f"Web search error: {str(e)}")
505
+
506
+
507
  if __name__ == "__main__":
508
  logger.info(f"Starting uvicorn server on port {os.getenv('PORT', 7860)}")
509
  uvicorn.run(app, host="0.0.0.0", port=int(os.getenv("PORT", 7860)))
static/favicon.ico CHANGED
static/images/Leonardo.jpeg ADDED
static/images/favicon.ico ADDED
static/images/mg-temp.png ADDED

Git LFS Details

  • SHA256: b086e34ee8bf6b72f2e91a635fb0c88f78fe082be0af9b333614f5d9589762e0
  • Pointer size: 130 Bytes
  • Size of remote file: 11.2 kB
static/images/qr-code.png ADDED

Git LFS Details

  • SHA256: d4d7ef57362dc63fd2b773d170230e6efd6606087b48242474826393879f3462
  • Pointer size: 129 Bytes
  • Size of remote file: 5.94 kB
static/js/3.4.17.es ADDED
The diff for this file is too large to render. See raw diff
 
static/js/about.js ADDED
@@ -0,0 +1,559 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // about.js
2
+
3
+ // Translations - Updated with project & AI details
4
+ const translations = {
5
+ en: {
6
+ title: "About MGZon AI – Adaptive Horizons",
7
+ heroTitle: "About MGZon AI",
8
+ heroDesc: "An AI-powered platform revolutionizing e-commerce and code generation – Empowering creators and businesses with adaptive intelligence.",
9
+ arHint: "Tap for AR View",
10
+ storyTitle: "Our Journey",
11
+ story1Title: "2023: Ignition in Alexandria",
12
+ story1Desc: "MGZon AI sparks to life in Alexandria, Egypt, leveraging DeepSeek & FastAPI to launch the core chatbot – Empowering developers and e-commerce innovators globally.",
13
+ story2Title: "2024: Global Expansion",
14
+ story2Desc: "Seamless integrations with warehouses in USA, Canada, China; 5G/6G tech accelerates e-commerce automation and code generation for thousands.",
15
+ story3Title: "2025-2026: Quantum Evolution",
16
+ story3Desc: "Recognized by TechCrunch as MENA's AI leader; Pushing ethical AI boundaries in commerce and coding for a smarter future.",
17
+ visionTitle: "Our Vision",
18
+ visionDesc: "Adaptive Intelligence for Tomorrow",
19
+ visionDetails: "MGZon AI fuses cutting-edge tech with real-world utility, democratizing AI for seamless e-commerce and effortless code creation.",
20
+ visionBtn: "Explore Features",
21
+ projectTitle: "Project & AI Insights",
22
+ aiTechTitle: "Core AI Technologies",
23
+ projectHowTitle: "How It Works",
24
+ projectHowDesc: "AI analyzes user queries to generate code snippets or optimize e-commerce flows – Ethical, adaptive, and future-proof.",
25
+ teamTitle: "Core Constellation",
26
+ team1Name: "Sarah Dayan",
27
+ team1Desc: "Lead AI Architect – Sculpting ML & chatbot symphonies for MGZon.",
28
+ team2Name: "Leonardo Cuco",
29
+ team2Desc: "E-Commerce Oracle – Orchestrating digital commerce evolutions for MGZon.",
30
+ achievementsTitle: "Milestones",
31
+ ach1Title: "Global Reach",
32
+ ach1Desc: "Serving 10K+ users across 50 countries, powered by AI-driven constellations.",
33
+ ach2Title: "Industry Acclaim",
34
+ ach2Desc: "Featured as TechCrunch's top MENA AI innovator – Leading 2024's breakthroughs.",
35
+ missionTitle: "Our North Star",
36
+ missionDesc: "Democratizing AI for creators & enterprises – Streamlining codecraft and amplifying e-commerce realms with ethical innovation and ingenuity.",
37
+ footerCrafted: "Powered by MGZon AI | Innovating in the MENA region",
38
+ contact1Title: "Nexus Mail",
39
+ contact1Details: "Transmit queries into the void – Responses warp in swiftly.",
40
+ contact2Title: "Voice Link",
41
+ contact2Details: "Instant quantum sync for urgent transmissions.",
42
+ contact3Title: "Collective",
43
+ contact3Btn: "Assemble",
44
+ contact3Details: "Converge in the hive – Ideas ignite, collaborations supernova.",
45
+ contact4Title: "Codex",
46
+ contact4Btn: "Decrypt",
47
+ contact4Details: "Unlock the arcane APIs – Seamless fusion awaits.",
48
+ collapseBtn: "Collapse",
49
+ copyright: "© 2026 MGZon AI. Eternal in the codeverse.",
50
+ searchPlaceholder: "Search here... (e.g., AI trends 2026)",
51
+ voiceTitle: "Press to speak",
52
+ themeTitle: "Toggle Theme",
53
+ chatPlaceholder: "Type your message...",
54
+ sendBtn: "Send",
55
+ voiceStatus: "Listening...",
56
+ navLogo: "MGZon AI",
57
+ navHome: "Home",
58
+ navAbout: "About",
59
+ navContact: "Contact",
60
+ you: "You",
61
+ error: "Hmm, I couldn't process that. Try asking about AI, team, or search something!",
62
+ searchPrefix: "Here's what I found on the web:",
63
+ searchError: "Sorry, search failed right now – try rephrasing or check your connection!",
64
+ voicePrompt: "Voice enabled! Speak now."
65
+ },
66
+ ar: {
67
+ title: "عن MGZon AI – آفاق متكيفة",
68
+ heroTitle: "عن MGZon AI",
69
+ heroDesc: "منصة مدعومة بالذكاء الاصطناعي ثورية في التجارة الإلكترونية وتوليد الكود – تمكين الخالقين والأعمال بالذكاء المتكيف.",
70
+ arHint: "اضغط لعرض AR",
71
+ storyTitle: "رحلتنا",
72
+ story1Title: "2023: الإشعال في الإسكندرية",
73
+ story1Desc: "MGZon AI يشتعل بالحياة في الإسكندرية، مصر، مستفيدًا من DeepSeek وFastAPI لإطلاق الشاتبوت الأساسي – تمكين المطورين ومبتكري التجارة الإلكترونية عالميًا.",
74
+ story2Title: "2024: التوسع العالمي",
75
+ story2Desc: "تكاملات سلسة مع مستودعات في الولايات المتحدة، كندا، الصين؛ تقنية 5G/6G تسرع أتمتة التجارة الإلكترونية وتوليد الكود لآلاف.",
76
+ story3Title: "2025-2026: التطور الكمي",
77
+ story3Desc: "معترف بها من TechCrunch كقائد AI في الشرق الأوسط؛ دفع حدود AI الأخلاقي في التجارة والكود لمستقبل أذكى.",
78
+ visionTitle: "رؤيتنا",
79
+ visionDesc: "ذكاء متكيف للغد",
80
+ visionDetails: "MGZon AI يدمج التقنية المتقدمة مع المنفعة الواقعية، ديمقراطية AI لتجارة إلكترونية سلسة وإنشاء كود سهل.",
81
+ visionBtn: "استكشف الميزات",
82
+ projectTitle: "رؤى المشروع والذكاء الاصطناعي",
83
+ aiTechTitle: "التقنيات الأساسية للذكاء الاصطناعي",
84
+ projectHowTitle: "كيف يعمل",
85
+ projectHowDesc: "الذكاء الاصطناعي يحلل استفسارات المستخدم لتوليد مقتطفات كود أو تحسين تدفقات التجارة الإلكترونية – أخلاقي، متكيف، ومستعد للمستقبل.",
86
+ teamTitle: "الكوكبة الأساسية",
87
+ team1Name: "سارة دايان",
88
+ team1Desc: "مهندس AI رئيسي – نحت سيمفونيات ML وchatbot لـ MGZon.",
89
+ team2Name: "ليوناردو كوكو",
90
+ team2Desc: "خبير التجارة الإلكترونية – تنسيق تطورات التجارة الرقمية لـ MGZon.",
91
+ achievementsTitle: "المعالم",
92
+ ach1Title: "الوصول العالمي",
93
+ ach1Desc: "خدمة 10K+ مستخدمين عبر 50 دولة، مدعومة بكوكبات مدفوعة بالذكاء الاصطناعي.",
94
+ ach2Title: "الإعجاب الصناعي",
95
+ ach2Desc: "مميزة كأفضل مبتكر AI في الشرق الأوسط من TechCrunch – قائدة اختراقات 2024.",
96
+ missionTitle: "نجمنا الشمالي",
97
+ missionDesc: "ديمقراطية AI للخالقين والمؤسسات – تبسيط صناعة الكود وتضخيم عوالم التجارة الإلكترونية بالابتكار الأخلاقي والإبداع.",
98
+ footerCrafted: "مدعوم بـ MGZon AI | الابتكار في منطقة الشرق الأوسط",
99
+ contact1Title: "بريد النيكسوس",
100
+ contact1Details: "أرسل استفساراتك إلى الفراغ – الردود تتسارع بسرعة الضوء.",
101
+ contact2Title: "رابط الصوت",
102
+ contact2Details: "مزامنة كمية فورية للنقلات العاجلة.",
103
+ contact3Title: "الجماعة",
104
+ contact3Btn: "اجتمع",
105
+ contact3Details: "اجتمع في النخلة – الأفكار تشعل، التعاونات سوبرنوفا.",
106
+ contact4Title: "الكوديكس",
107
+ contact4Btn: "فك الشفرة",
108
+ contact4Details: "افتح APIs الغامضة – اندماج سلس ينتظر.",
109
+ collapseBtn: "طي",
110
+ copyright: "© 2026 MGZon AI. أبدي في عالم الكود.",
111
+ searchPlaceholder: "ابحث هنا... (مثال: اتجاهات AI 2026)",
112
+ voiceTitle: "اضغط للكلام",
113
+ themeTitle: "تبديل الثيم",
114
+ chatPlaceholder: "اكتب رسالتك...",
115
+ sendBtn: "إرسال",
116
+ voiceStatus: "يستمع...",
117
+ navLogo: "MGZon AI",
118
+ navHome: "الرئيسية",
119
+ navAbout: "عننا",
120
+ navContact: "اتصل",
121
+ you: "أنت",
122
+ error: "همم، مش قدرت أفهم ده. جرب تسأل عن AI أو الفريق أو ابحث في حاجة!",
123
+ searchPrefix: "ده اللي لقيته على الويب:",
124
+ searchError: "آسف، البحث فشل دلوقتي – جرب تعيد الصياغة أو تأكد من الإنترنت!",
125
+ voicePrompt: "الصوت مفعل! اتكلم دلوقتي."
126
+ },
127
+ fr: {
128
+ title: "À propos de MGZon AI – Horizons Adaptatifs",
129
+ heroTitle: "À propos de MGZon AI",
130
+ heroDesc: "Plateforme alimentée par l'IA révolutionnant le e-commerce et la génération de code – Empowerant les créateurs et entreprises avec une intelligence adaptative.",
131
+ arHint: "Appuyez pour la vue AR",
132
+ storyTitle: "Notre Voyage",
133
+ story1Title: "2023: Allumage à Alexandrie",
134
+ story1Desc: "MGZon AI s'allume à Alexandrie, Égypte, exploitant DeepSeek & FastAPI pour lancer le chatbot central – Empowerant les développeurs et innovateurs e-commerce globalement.",
135
+ story2Title: "2024: Expansion Globale",
136
+ story2Desc: "Intégrations fluides avec des entrepôts aux USA, Canada, Chine ; La tech 5G/6G accélère l'automatisation e-commerce et la génération de code pour des milliers.",
137
+ story3Title: "2025-2026: Évolution Quantique",
138
+ story3Desc: "Reconnue par TechCrunch comme leader AI MENA ; Poussant les frontières éthiques de l'AI en commerce et codage pour un avenir plus intelligent.",
139
+ visionTitle: "Notre Vision",
140
+ visionDesc: "Intelligence Adaptative pour Demain",
141
+ visionDetails: "MGZon AI fusionne tech de pointe avec utilité réelle, démocratisant l'AI pour e-commerce fluide et création de code sans effort.",
142
+ visionBtn: "Explorer les Fonctionnalités",
143
+ projectTitle: "Perspectives du Projet & IA",
144
+ aiTechTitle: "Technologies IA de Base",
145
+ projectHowTitle: "Comment Ça Marche",
146
+ projectHowDesc: "L'IA analyse les requêtes des utilisateurs pour générer des extraits de code ou optimiser les flux e-commerce – Éthique, adaptatif et prêt pour l'avenir.",
147
+ teamTitle: "Constellation Centrale",
148
+ team1Name: "Sarah Dayan",
149
+ team1Desc: "Architecte AI Principal – Sculptant symphonies ML & chatbot pour MGZon.",
150
+ team2Name: "Leonardo Cuco",
151
+ team2Desc: "Oracle E-Commerce – Orchestrant évolutions commerce numérique pour MGZon.",
152
+ achievementsTitle: "Jalons",
153
+ ach1Title: "Portée Globale",
154
+ ach1Desc: "Servant 10K+ utilisateurs dans 50 pays, alimenté par constellations AI.",
155
+ ach2Title: "Acclamation Industrielle",
156
+ ach2Desc: "Mise en avant comme top innovateur AI MENA par TechCrunch – Menant les percées 2024.",
157
+ missionTitle: "Notre Étoile Polaire",
158
+ missionDesc: "Démocratiser l'AI pour créateurs & entreprises – Rationalisant l'art du code et amplifiant les royaumes e-commerce avec innovation éthique et ingéniosité.",
159
+ footerCrafted: "Alimenté par MGZon AI | Innovant dans la région MENA",
160
+ contact1Title: "Courrier Nexus",
161
+ contact1Details: "Transmettez les requêtes dans le vide – Les réponses se déforment rapidement.",
162
+ contact2Title: "Lien Vocal",
163
+ contact2Details: "Synchronisation quantique instantanée pour transmissions urgentes.",
164
+ contact3Title: "Collectif",
165
+ contact3Btn: "Assembler",
166
+ contact3Details: "Converger dans la ruche – Idées s'allument, collaborations supernova.",
167
+ contact4Title: "Codex",
168
+ contact4Btn: "Décrypter",
169
+ contact4Details: "Déverrouillez les APIs arcanes – Fusion seamless attend.",
170
+ collapseBtn: "Réduire",
171
+ copyright: "© 2026 MGZon AI. Éternel dans le codeverse.",
172
+ searchPlaceholder: "Rechercher ici... (ex: tendances AI 2026)",
173
+ voiceTitle: "Appuyez pour parler",
174
+ themeTitle: "Changer le thème",
175
+ chatPlaceholder: "Tapez votre message...",
176
+ sendBtn: "Envoyer",
177
+ voiceStatus: "Écoute...",
178
+ navLogo: "MGZon AI",
179
+ navHome: "Accueil",
180
+ navAbout: "À propos",
181
+ navContact: "Contact",
182
+ you: "Vous",
183
+ error: "Hmm, je n'ai pas pu traiter cela. Essayez de demander sur l'AI, l'équipe ou recherchez quelque chose !",
184
+ searchPrefix: "Voici ce que j'ai trouvé sur le web:",
185
+ searchError: "Désolé, la recherche a échoué pour le moment – essayez de reformuler ou vérifiez votre connexion !",
186
+ voicePrompt: "Voix activée ! Parlez maintenant."
187
+ },
188
+ de: {
189
+ title: "Über MGZon AI – Adaptive Horizonte",
190
+ heroTitle: "Über MGZon AI",
191
+ heroDesc: "AI-gestützte Plattform, die E-Commerce und Code-Generierung revolutioniert – Ermächtigt Schöpfer und Unternehmen mit adaptiver Intelligenz.",
192
+ arHint: "Tippen Sie für AR-Ansicht",
193
+ storyTitle: "Unsere Reise",
194
+ story1Title: "2023: Zündung in Alexandria",
195
+ story1Desc: "MGZon AI entzündet sich in Alexandria, Ägypten, nutzt DeepSeek & FastAPI, um den Kern-Chatbot zu starten – Ermächtigt Entwickler und E-Commerce-Innovatoren global.",
196
+ story2Title: "2024: Globale Expansion",
197
+ story2Desc: "Nahtlose Integrationen mit Lagern in USA, Kanada, China; 5G/6G-Tech beschleunigt E-Commerce-Automatisierung und Code-Generierung für Tausende.",
198
+ story3Title: "2025-2026: Quantenevolution",
199
+ story3Desc: "Von TechCrunch als MENA AI-Führer anerkannt; Drängt ethische AI-Grenzen in Handel und Codierung für eine intelligentere Zukunft.",
200
+ visionTitle: "Unsere Vision",
201
+ visionDesc: "Adaptive Intelligenz für Morgen",
202
+ visionDetails: "MGZon AI fusioniert Spitzen-Tech mit realer Nützlichkeit, demokratisiert AI für nahtloses E-Commerce und mühelose Code-Erstellung.",
203
+ visionBtn: "Funktionen Erkunden",
204
+ projectTitle: "Projekt- & KI-Einblicke",
205
+ aiTechTitle: "Kern-KI-Technologien",
206
+ projectHowTitle: "Wie Es Funktioniert",
207
+ projectHowDesc: "KI analysiert Nutzeranfragen, um Codeschnipsel zu generieren oder E-Commerce-Flüsse zu optimieren – Ethisch, adaptiv und zukunftssicher.",
208
+ teamTitle: "Kernkonstellation",
209
+ team1Name: "Sarah Dayan",
210
+ team1Desc: "Lead AI-Architekt – Modelliert ML & Chatbot-Symphonien für MGZon.",
211
+ team2Name: "Leonardo Cuco",
212
+ team2Desc: "E-Commerce-Oracle – Dirigiert digitale Commerce-Evolutionen für MGZon.",
213
+ achievementsTitle: "Meilensteine",
214
+ ach1Title: "Globale Reichweite",
215
+ ach1Desc: "Bedient 10K+ Nutzer in 50 Ländern, angetrieben von AI-Konstellationen.",
216
+ ach2Title: "Branchen-Anerkennung",
217
+ ach2Desc: "Vorgestellt als Top MENA AI-Innovator von TechCrunch – Führend 2024s Durchbrüche.",
218
+ missionTitle: "Unser Nordstern",
219
+ missionDesc: "Demokratisierung von AI für Schöpfer & Unternehmen – Vereinfacht Codekunst und verstärkt E-Commerce-Reiche mit ethischer Innovation und Erfindungsgabe.",
220
+ footerCrafted: "Angetrieben von MGZon AI | Innovierend in der MENA-Region",
221
+ contact1Title: "Nexus-Mail",
222
+ contact1Details: "Übermitteln Sie Anfragen ins Leere – Antworten verbiegen sich schnell.",
223
+ contact2Title: "Sprachlink",
224
+ contact2Details: "Sofortige Quantensynchronisation für dringende Übertragungen.",
225
+ contact3Title: "Kollektiv",
226
+ contact3Btn: "Versammeln",
227
+ contact3Details: "Konvergieren im Stock – Ideen entzünden, Kollaborationen Supernova.",
228
+ contact4Title: "Codex",
229
+ contact4Btn: "Entschlüsseln",
230
+ contact4Details: "Entsperren Sie die arkane APIs – Nahtlose Fusion wartet.",
231
+ collapseBtn: "Zusammenklappen",
232
+ copyright: "© 2026 MGZon AI. Ewig im Codeversum.",
233
+ searchPlaceholder: "Suchen Sie hier... (z.B. AI-Trends 2026)",
234
+ voiceTitle: "Drücken zum Sprechen",
235
+ themeTitle: "Thema wechseln",
236
+ chatPlaceholder: "Geben Sie Ihre Nachricht ein...",
237
+ sendBtn: "Senden",
238
+ voiceStatus: "Hört zu...",
239
+ navLogo: "MGZon AI",
240
+ navHome: "Home",
241
+ navAbout: "Über uns",
242
+ navContact: "Kontakt",
243
+ you: "Sie",
244
+ error: "Hmm, ich konnte das nicht verarbeiten. Versuchen Sie, nach AI, Team oder etwas zu suchen!",
245
+ searchPrefix: "Hier ist, was ich im Web gefunden habe:",
246
+ searchError: "Entschuldigung, die Suche ist gerade fehlgeschlagen – versuchen Sie, umzuformulieren oder überprüfen Sie Ihre Verbindung!",
247
+ voicePrompt: "Sprache aktiviert! Sprechen Sie jetzt."
248
+ }
249
+ };
250
+
251
+ // Language and Theme Management
252
+ let currentLang = navigator.language.split('-')[0] || 'en';
253
+ if (!translations[currentLang]) currentLang = 'en';
254
+
255
+ function switchLanguage(lang) {
256
+ currentLang = lang;
257
+ document.querySelectorAll('[data-translate]').forEach(el => {
258
+ const key = el.dataset.translate;
259
+ if (translations[lang][key]) {
260
+ el.textContent = translations[lang][key];
261
+ }
262
+ });
263
+ document.querySelectorAll('[data-translate-placeholder]').forEach(el => {
264
+ const key = el.dataset.translatePlaceholder;
265
+ if (translations[lang][key]) {
266
+ el.placeholder = translations[lang][key];
267
+ }
268
+ });
269
+ document.querySelectorAll('[data-title-translate]').forEach(el => {
270
+ const key = el.dataset.titleTranslate;
271
+ if (translations[lang][key]) {
272
+ el.title = translations[lang][key];
273
+ }
274
+ });
275
+ const titleKey = document.title.dataset.translate || 'title';
276
+ if (translations[lang][titleKey]) {
277
+ document.title = translations[lang][titleKey];
278
+ }
279
+ document.querySelector('meta[property="og:title"]').setAttribute('content', translations[lang].title || document.title);
280
+ document.documentElement.lang = lang;
281
+ document.documentElement.dir = lang === 'ar' ? 'rtl' : 'ltr';
282
+ document.body.classList.toggle('rtl', lang === 'ar');
283
+ if (recognition) recognition.lang = lang === 'ar' ? 'ar-SA' : lang === 'fr' ? 'fr-FR' : lang === 'de' ? 'de-DE' : 'en-US';
284
+ }
285
+
286
+ // Theme Toggle
287
+ document.getElementById('theme-toggle').addEventListener('click', () => {
288
+ document.body.dataset.theme = document.body.dataset.theme === 'light' ? 'dark' : 'light';
289
+ const icon = document.querySelector('#theme-toggle i');
290
+ icon.classList.toggle('bx-sun');
291
+ icon.classList.toggle('bx-moon');
292
+ });
293
+
294
+ // Language Toggle
295
+ document.getElementById('lang-toggle').addEventListener('change', (e) => {
296
+ switchLanguage(e.target.value);
297
+ });
298
+
299
+ // GSAP Animations
300
+ gsap.registerPlugin(ScrollTrigger);
301
+ gsap.from(".timeline-node", {
302
+ scrollTrigger: { trigger: ".timeline-container", start: "top 80%" },
303
+ y: 60,
304
+ opacity: 0,
305
+ duration: 1.2,
306
+ stagger: 0.3,
307
+ ease: "power3.out"
308
+ });
309
+ gsap.from(".neon-gradient", {
310
+ scrollTrigger: { trigger: "section" },
311
+ scale: 0.8,
312
+ opacity: 0,
313
+ duration: 1,
314
+ ease: "back.out(1.7)"
315
+ });
316
+
317
+ // Three.js Orb
318
+ const orbScene = new THREE.Scene();
319
+ const orbCamera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);
320
+ const orbRenderer = new THREE.WebGLRenderer({ canvas: document.getElementById('hero-orb') || document.createElement('canvas'), alpha: true });
321
+ orbRenderer.setSize(300, 300);
322
+ const orbGeometry = new THREE.SphereGeometry(1, 32, 32);
323
+ const orbMaterial = new THREE.MeshBasicMaterial({ color: 0x00f0ff, wireframe: true });
324
+ const orb = new THREE.Mesh(orbGeometry, orbMaterial);
325
+ orbScene.add(orb);
326
+ orbCamera.position.z = 5;
327
+ function rotateOrb() {
328
+ requestAnimationFrame(rotateOrb);
329
+ orb.rotation.x += 0.005;
330
+ orb.rotation.y += 0.01;
331
+ orbRenderer.render(orbScene, orbCamera);
332
+ }
333
+ rotateOrb();
334
+
335
+ // Particles.js (Optimized for performance)
336
+ particlesJS('particles-js', {
337
+ particles: {
338
+ number: { value: 20, density: { enable: true, value_area: 800 } },
339
+ color: { value: ['#00f0ff', '#ff007a', '#6b21a8'] },
340
+ shape: { type: 'star' },
341
+ opacity: { value: 0.3, random: true },
342
+ size: { value: 2, random: true },
343
+ line_linked: { enable: false },
344
+ move: { enable: true, speed: 2, direction: 'none', random: true, out_mode: 'out' }
345
+ },
346
+ interactivity: { events: { onhover: { enable: true, mode: 'bubble' } } }
347
+ });
348
+
349
+ // 3D Ambient (Optimized)
350
+ const scene = new THREE.Scene();
351
+ const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
352
+ const renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('3d-canvas'), alpha: true });
353
+ renderer.setSize(window.innerWidth, window.innerHeight);
354
+ renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
355
+ const geometry = new THREE.BoxGeometry();
356
+ const material = new THREE.MeshBasicMaterial({ color: 0x00f0ff, wireframe: true });
357
+ for (let i = 0; i < 15; i++) {
358
+ const cube = new THREE.Mesh(geometry, material);
359
+ cube.position.set((Math.random() - 0.6) * 100, (Math.random() - 0.6) * 100, (Math.random() - 0.6) * 100);
360
+ scene.add(cube);
361
+ }
362
+ camera.position.z = 50;
363
+ function animate3D() {
364
+ requestAnimationFrame(animate3D);
365
+ scene.children.forEach(child => {
366
+ child.rotation.x += 0.005;
367
+ child.rotation.y += 0.01;
368
+ });
369
+ renderer.render(scene, camera);
370
+ }
371
+ animate3D();
372
+
373
+ // AR Toggle
374
+ document.querySelector('.ar-hint').addEventListener('click', () => {
375
+ const arScene = document.getElementById('ar-scene');
376
+ arScene.style.display = arScene.style.display === 'none' ? 'block' : 'none';
377
+ });
378
+
379
+ // Chat and Search
380
+ let conversationHistory = [];
381
+
382
+ // TTS function
383
+ function speakText(text) {
384
+ if ('speechSynthesis' in window) {
385
+ const utterance = new SpeechSynthesisUtterance(text);
386
+ utterance.lang = currentLang === 'ar' ? 'ar-SA' : currentLang === 'fr' ? 'fr-FR' : currentLang === 'de' ? 'de-DE' : 'en-US';
387
+ utterance.rate = 0.9;
388
+ utterance.pitch = 1;
389
+ speechSynthesis.speak(utterance);
390
+ } else {
391
+ console.log('TTS not supported');
392
+ }
393
+ }
394
+
395
+ // Enhanced search function (محدث للاتصال بالخادم الخلفي /search)
396
+ async function searxSearch(query) {
397
+ const lowerQuery = query.toLowerCase();
398
+ if (lowerQuery.includes('hello') || lowerQuery.includes('hi') || lowerQuery.includes('how are you') || lowerQuery.includes('ازيك') || lowerQuery.includes('مرحبا')) {
399
+ query = `funny or friendly response to "${query}"`;
400
+ }
401
+
402
+ try {
403
+ // الاتصال بالخادم الخلفي (بدون CORS مشكلة لأنه من نفس الدومين)
404
+ const backendUrl = '/search'; // أو 'https://mgzon-mgzon-app.hf.space/search' لو على HF
405
+ const response = await fetch(`${backendUrl}?q=${encodeURIComponent(query)}`, {
406
+ headers: { 'Accept': 'application/json' }
407
+ });
408
+ if (!response.ok) throw new Error(`HTTP ${response.status}`);
409
+ const data = await response.json();
410
+ if (data.success && data.results && data.results.length > 0) {
411
+ const resultsText = data.results.map((result, i) =>
412
+ `Result ${i + 1}:\nTitle: ${result.title}\nLink: ${result.link}\nContent: ${result.content.substring(0, 200)}...`
413
+ ).join('\n\n');
414
+ return { success: true, text: translations[currentLang].searchPrefix + '\n\n' + resultsText };
415
+ }
416
+ return { success: false, text: translations[currentLang].searchError };
417
+ } catch (err) {
418
+ console.log(`Search failed: ${err.message}`);
419
+ return { success: false, text: translations[currentLang].searchError };
420
+ }
421
+ }
422
+
423
+ // Bot response function
424
+ async function getBotResponse(userText) {
425
+ const searchResult = await searxSearch(userText);
426
+ const reply = searchResult.success ? searchResult.text : searchResult.text;
427
+ speakText(reply);
428
+ return reply;
429
+ }
430
+
431
+ // Enhanced chat display
432
+ function updateChatDisplay(userText, botText) {
433
+ const userDiv = document.createElement('div');
434
+ userDiv.className = 'chat-message user';
435
+ userDiv.innerHTML = `<strong>${translations[currentLang].you}:</strong> ${userText}`;
436
+
437
+ const botDiv = document.createElement('div');
438
+ botDiv.className = 'chat-message';
439
+ const formattedText = botText.split('\n\n').map(line => `<p>${line.replace(/\n/g, '<br>')}</p>`).join('');
440
+ botDiv.innerHTML = `<strong>MGZon AI:</strong><div>${formattedText}</div>`;
441
+
442
+ const popupContent = document.getElementById('popup-content');
443
+ popupContent.appendChild(userDiv);
444
+ popupContent.appendChild(botDiv);
445
+ const popup = document.getElementById('gemini-popup');
446
+ popup.style.display = 'block';
447
+ popupContent.scrollTop = popupContent.scrollHeight;
448
+ gsap.from(popup, { scale: 0.8, opacity: 0, duration: 0.5 });
449
+ }
450
+
451
+ // Search Input
452
+ document.getElementById('search-input').addEventListener('keypress', async (e) => {
453
+ if (e.key === 'Enter') {
454
+ const query = e.target.value;
455
+ if (query) {
456
+ conversationHistory.push({ role: 'user', text: query });
457
+ const reply = await getBotResponse(query);
458
+ conversationHistory.push({ role: 'assistant', text: reply });
459
+ updateChatDisplay(query, reply);
460
+ e.target.value = '';
461
+ }
462
+ }
463
+ });
464
+
465
+ // Chat Send
466
+ document.getElementById('send-chat').addEventListener('click', async () => {
467
+ const query = document.getElementById('chat-input').value;
468
+ if (query) {
469
+ conversationHistory.push({ role: 'user', text: query });
470
+ const reply = await getBotResponse(query);
471
+ conversationHistory.push({ role: 'assistant', text: reply });
472
+ updateChatDisplay(query, reply);
473
+ document.getElementById('chat-input').value = '';
474
+ }
475
+ });
476
+
477
+ document.getElementById('chat-input').addEventListener('keypress', (e) => {
478
+ if (e.key === 'Enter') document.getElementById('send-chat').click();
479
+ });
480
+
481
+ function closePopup() {
482
+ document.getElementById('gemini-popup').style.display = 'none';
483
+ }
484
+
485
+ function togglePanel(id) {
486
+ const panel = document.getElementById(id + '-panel');
487
+ panel.style.display = panel.style.display === 'block' ? 'none' : 'block';
488
+ }
489
+
490
+ window.addEventListener('resize', () => {
491
+ camera.aspect = window.innerWidth / window.innerHeight;
492
+ camera.updateProjectionMatrix();
493
+ renderer.setSize(window.innerWidth, window.innerHeight);
494
+ });
495
+
496
+ // Enhanced Voice Recognition (Non-continuous, with repeat filter)
497
+ const voiceBtn = document.getElementById('voice-toggle');
498
+ const statusDiv = document.getElementById('voice-status');
499
+ let recognition;
500
+ let isListening = false;
501
+ let lastTranscript = '';
502
+ const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
503
+
504
+ if (SpeechRecognition) {
505
+ recognition = new SpeechRecognition();
506
+ recognition.lang = currentLang === 'ar' ? 'ar-SA' : currentLang === 'fr' ? 'fr-FR' : currentLang === 'de' ? 'de-DE' : 'en-US';
507
+ recognition.continuous = false;
508
+ recognition.interimResults = false;
509
+
510
+ recognition.onstart = () => {
511
+ isListening = true;
512
+ voiceBtn.classList.add('listening');
513
+ statusDiv.style.display = 'block';
514
+ statusDiv.textContent = translations[currentLang].voiceStatus || 'Listening...';
515
+ };
516
+
517
+ recognition.onresult = async (event) => {
518
+ const transcript = event.results[0][0].transcript;
519
+ if (transcript === lastTranscript) return; // Prevent duplicates
520
+ lastTranscript = transcript;
521
+ statusDiv.textContent = `Heard: ${transcript}`;
522
+ conversationHistory.push({ role: 'user', text: transcript });
523
+ const reply = await getBotResponse(transcript);
524
+ conversationHistory.push({ role: 'assistant', text: reply });
525
+ updateChatDisplay(transcript, reply);
526
+ };
527
+
528
+ recognition.onerror = (event) => {
529
+ statusDiv.textContent = `Error: ${event.error}. Try again!`;
530
+ isListening = false;
531
+ voiceBtn.classList.remove('listening');
532
+ setTimeout(() => statusDiv.style.display = 'none', 3000);
533
+ };
534
+
535
+ recognition.onend = () => {
536
+ isListening = false;
537
+ voiceBtn.classList.remove('listening');
538
+ setTimeout(() => statusDiv.style.display = 'none', 2000);
539
+ };
540
+
541
+ voiceBtn.addEventListener('click', () => {
542
+ if (speechSynthesis.speaking) speechSynthesis.cancel();
543
+ if (isListening) {
544
+ recognition.stop();
545
+ } else {
546
+ recognition.start();
547
+ }
548
+ });
549
+
550
+ voiceBtn.title = translations[currentLang].voiceTitle || 'Press to speak';
551
+ } else {
552
+ voiceBtn.disabled = true;
553
+ voiceBtn.title = 'Voice not supported. Use Chrome!';
554
+ statusDiv.style.display = 'block';
555
+ statusDiv.textContent = 'Voice not supported – Use Chrome!';
556
+ }
557
+
558
+ // Initialize
559
+ switchLanguage(currentLang);
static/js/index.js ADDED
@@ -0,0 +1,352 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * @typedef {import('trigram-utils').TrigramTuple} TrigramTuple
3
+ *
4
+ * @typedef Options
5
+ * @property {Array<string>} [only]
6
+ * Languages to allow.
7
+ * @property {Array<string>} [ignore]
8
+ * Languages to ignore.
9
+ * @property {number} [minLength=10]
10
+ * Minimum length to accept.
11
+ */
12
+
13
+ /* Load `trigram-utils`. */
14
+ import {asTuples} from 'trigram-utils'
15
+
16
+ /* Load `expressions` (regular expressions matching
17
+ * scripts). */
18
+ import {expressions} from './expressions.js'
19
+
20
+ /* Load `data` (trigram information per language,
21
+ * per script). */
22
+ import {data} from './data.js'
23
+
24
+ /* Maximum sample length. */
25
+ const MAX_LENGTH = 2048
26
+
27
+ /* Minimum sample length. */
28
+ const MIN_LENGTH = 10
29
+
30
+ /* The maximum distance to add when a given trigram does
31
+ * not exist in a trigram dictionary. */
32
+ const MAX_DIFFERENCE = 300
33
+
34
+ const own = {}.hasOwnProperty
35
+
36
+ /* Construct trigram dictionaries. */
37
+
38
+ /** @type {string} */
39
+ let script
40
+
41
+ /** @type {Record<string, Record<string, Record<string, number>>>} */
42
+ const numericData = {}
43
+
44
+ for (script in data) {
45
+ if (own.call(data, script)) {
46
+ const languages = data[script]
47
+ /** @type {string} */
48
+ let name
49
+
50
+ numericData[script] = {}
51
+
52
+ for (name in languages) {
53
+ if (own.call(languages, name)) {
54
+ const model = languages[name].split('|')
55
+ /** @type {Record<string, number>} */
56
+ const trigrams = {}
57
+ let weight = model.length
58
+
59
+ while (weight--) {
60
+ trigrams[model[weight]] = weight
61
+ }
62
+
63
+ numericData[script][name] = trigrams
64
+ }
65
+ }
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Get the most probable language for the given value.
71
+ *
72
+ * @param {string} [value]
73
+ * The value to test.
74
+ * @param {Options} [options]
75
+ * Configuration.
76
+ * @return {string}
77
+ * The most probable language.
78
+ */
79
+ export function franc(value, options) {
80
+ return francAll(value, options)[0][0]
81
+ }
82
+
83
+ /**
84
+ * Get a list of probable languages the given value is
85
+ * written in.
86
+ *
87
+ * @param {string} [value]
88
+ * The value to test.
89
+ * @param {Options} [options]
90
+ * Configuration.
91
+ * @return {Array<TrigramTuple>}
92
+ * An array containing language—distance tuples.
93
+ */
94
+ export function francAll(value, options = {}) {
95
+ /** @type {Array<string>} */
96
+ // @ts-expect-error: `whitelist` is from long ago.
97
+ const only = [...(options.whitelist || []), ...(options.only || [])]
98
+ /** @type {Array<string>} */
99
+ // @ts-expect-error: `blacklist` is from long ago.
100
+ const ignore = [...(options.blacklist || []), ...(options.ignore || [])]
101
+ const minLength =
102
+ options.minLength !== null && options.minLength !== undefined
103
+ ? options.minLength
104
+ : MIN_LENGTH
105
+
106
+ if (!value || value.length < minLength) {
107
+ return und()
108
+ }
109
+
110
+ value = value.slice(0, MAX_LENGTH)
111
+
112
+ /* Get the script which characters occur the most
113
+ * in `value`. */
114
+ const script = getTopScript(value, expressions)
115
+
116
+ /* One languages exists for the most-used script. */
117
+ if (!script[0] || !(script[0] in numericData)) {
118
+ /* If no matches occured, such as a digit only string,
119
+ * or because the language is ignored, exit with `und`. */
120
+ if (!script[0] || script[1] === 0 || !allow(script[0], only, ignore)) {
121
+ return und()
122
+ }
123
+
124
+ return singleLanguageTuples(script[0])
125
+ }
126
+
127
+ /* Get all distances for a given script, and
128
+ * normalize the distance values. */
129
+ return normalize(
130
+ value,
131
+ getDistances(asTuples(value), numericData[script[0]], only, ignore)
132
+ )
133
+ }
134
+
135
+ /**
136
+ * Normalize the difference for each tuple in
137
+ * `distances`.
138
+ *
139
+ * @param {string} value
140
+ * Value to normalize.
141
+ * @param {Array<TrigramTuple>} distances
142
+ * List of distances.
143
+ * @return {Array<TrigramTuple>}
144
+ * Normalized distances.
145
+ */
146
+ function normalize(value, distances) {
147
+ const min = distances[0][1]
148
+ const max = value.length * MAX_DIFFERENCE - min
149
+ let index = -1
150
+
151
+ while (++index < distances.length) {
152
+ distances[index][1] = 1 - (distances[index][1] - min) / max || 0
153
+ }
154
+
155
+ return distances
156
+ }
157
+
158
+ /**
159
+ * From `scripts`, get the most occurring expression for
160
+ * `value`.
161
+ *
162
+ * @param {string} value
163
+ * Value to check.
164
+ * @param {Record<string, RegExp>} scripts
165
+ * Top-Scripts.
166
+ * @return {[string|undefined, number]}
167
+ * Top script and its occurrence percentage.
168
+ */
169
+ function getTopScript(value, scripts) {
170
+ let topCount = -1
171
+ /** @type {string|undefined} */
172
+ let topScript
173
+ /** @type {string} */
174
+ let script
175
+
176
+ for (script in scripts) {
177
+ if (own.call(scripts, script)) {
178
+ const count = getOccurrence(value, scripts[script])
179
+
180
+ if (count > topCount) {
181
+ topCount = count
182
+ topScript = script
183
+ }
184
+ }
185
+ }
186
+
187
+ return [topScript, topCount]
188
+ }
189
+
190
+ /**
191
+ * Get the occurrence ratio of `expression` for `value`.
192
+ *
193
+ * @param {string} value
194
+ * Value to check.
195
+ * @param {RegExp} expression
196
+ * Code-point expression.
197
+ * @return {number}
198
+ * Float between 0 and 1.
199
+ */
200
+ function getOccurrence(value, expression) {
201
+ const count = value.match(expression)
202
+
203
+ return (count ? count.length : 0) / value.length || 0
204
+ }
205
+
206
+ /**
207
+ * Get the distance between an array of trigram—count
208
+ * tuples, and multiple trigram dictionaries.
209
+ *
210
+ * @param {Array<TrigramTuple>} trigrams
211
+ * An array containing trigram—count tuples.
212
+ * @param {Record<string, Record<string, number>>} languages
213
+ * Multiple trigrams to test against.
214
+ * @param {Array<string>} only
215
+ * Allowed languages; if non-empty, only included languages are kept.
216
+ * @param {Array<string>} ignore
217
+ * Disallowed languages; included languages are ignored.
218
+ * @return {Array<TrigramTuple>} An array
219
+ * containing language—distance tuples.
220
+ */
221
+ function getDistances(trigrams, languages, only, ignore) {
222
+ languages = filterLanguages(languages, only, ignore)
223
+
224
+ /** @type {Array<TrigramTuple>} */
225
+ const distances = []
226
+ /** @type {string} */
227
+ let language
228
+
229
+ if (languages) {
230
+ for (language in languages) {
231
+ if (own.call(languages, language)) {
232
+ distances.push([language, getDistance(trigrams, languages[language])])
233
+ }
234
+ }
235
+ }
236
+
237
+ return distances.length === 0 ? und() : distances.sort(sort)
238
+ }
239
+
240
+ /**
241
+ * Get the distance between an array of trigram—count
242
+ * tuples, and a language dictionary.
243
+ *
244
+ * @param {Array<TrigramTuple>} trigrams
245
+ * An array containing trigram—count tuples.
246
+ * @param {Record<string, number>} model
247
+ * Object containing weighted trigrams.
248
+ * @return {number}
249
+ * The distance between the two.
250
+ */
251
+ function getDistance(trigrams, model) {
252
+ let distance = 0
253
+ let index = -1
254
+
255
+ while (++index < trigrams.length) {
256
+ const trigram = trigrams[index]
257
+ let difference = MAX_DIFFERENCE
258
+
259
+ if (trigram[0] in model) {
260
+ difference = trigram[1] - model[trigram[0]] - 1
261
+
262
+ if (difference < 0) {
263
+ difference = -difference
264
+ }
265
+ }
266
+
267
+ distance += difference
268
+ }
269
+
270
+ return distance
271
+ }
272
+
273
+ /**
274
+ * Filter `languages` by removing languages in
275
+ * `ignore`, or including languages in `only`.
276
+ *
277
+ * @param {Record<string, Record<string, number>>} languages
278
+ * Languages to filter
279
+ * @param {Array<string>} only
280
+ * Allowed languages; if non-empty, only included languages are kept.
281
+ * @param {Array<string>} ignore
282
+ * Disallowed languages; included languages are ignored.
283
+ * @return {Record<string, Record<string, number>>}
284
+ * Filtered array of languages.
285
+ */
286
+ function filterLanguages(languages, only, ignore) {
287
+ if (only.length === 0 && ignore.length === 0) {
288
+ return languages
289
+ }
290
+
291
+ /** @type {Record<string, Record<string, number>>} */
292
+ const filteredLanguages = {}
293
+ /** @type {string} */
294
+ let language
295
+
296
+ for (language in languages) {
297
+ if (allow(language, only, ignore)) {
298
+ filteredLanguages[language] = languages[language]
299
+ }
300
+ }
301
+
302
+ return filteredLanguages
303
+ }
304
+
305
+ /**
306
+ * Check if `language` can match according to settings.
307
+ *
308
+ * @param {string} language
309
+ * Languages to filter
310
+ * @param {Array<string>} only
311
+ * Allowed languages; if non-empty, only included languages are kept.
312
+ * @param {Array<string>} ignore
313
+ * Disallowed languages; included languages are ignored.
314
+ * @return {boolean}
315
+ * Whether `language` can match
316
+ */
317
+ function allow(language, only, ignore) {
318
+ if (only.length === 0 && ignore.length === 0) {
319
+ return true
320
+ }
321
+
322
+ return (
323
+ (only.length === 0 || only.includes(language)) && !ignore.includes(language)
324
+ )
325
+ }
326
+
327
+ /**
328
+ * Create a single `und` tuple.
329
+ */
330
+ function und() {
331
+ return singleLanguageTuples('und')
332
+ }
333
+
334
+ /**
335
+ * Create a single tuple as a list of tuples from a given language code.
336
+ *
337
+ * @param {string} language
338
+ * @returns {Array<TrigramTuple>}
339
+ */
340
+ function singleLanguageTuples(language) {
341
+ return [[language, 1]]
342
+ }
343
+
344
+ /**
345
+ * Deep regular sort on the number at `1` in both objects.
346
+ *
347
+ * @param {TrigramTuple} a
348
+ * @param {TrigramTuple} b
349
+ */
350
+ function sort(a, b) {
351
+ return a[1] - b[1]
352
+ }
static/robots.txt CHANGED
@@ -13,5 +13,8 @@ Allow: /static/sitemap.xml
13
  Allow: /static/google97468ef1f6b6e804.html
14
  Allow: /static/favicon.ico
15
  Allow: /static/css/
 
16
  Allow: /static/js/
 
 
17
  Sitemap: https://mgzon-mgzon-app.hf.space/static/sitemap.xml
 
13
  Allow: /static/google97468ef1f6b6e804.html
14
  Allow: /static/favicon.ico
15
  Allow: /static/css/
16
+ Allow: /static/images/
17
  Allow: /static/js/
18
+
19
+
20
  Sitemap: https://mgzon-mgzon-app.hf.space/static/sitemap.xml
static/sitemap.xml CHANGED
@@ -10,13 +10,13 @@
10
  <loc>https://mgzon-mgzon-app.hf.space/chat</loc>
11
  <lastmod>2025-09-01</lastmod>
12
  <changefreq>daily</changefreq>
13
- <priority>0.8</priority>
14
  </url>
15
  <url>
16
  <loc>https://mgzon-mgzon-app.hf.space/about</loc>
17
- <lastmod>2025-09-30</lastmod>
18
  <changefreq>weekly</changefreq>
19
- <priority>0.7</priority>
20
  </url>
21
  <url>
22
  <loc>https://mgzon-mgzon-app.hf.space/login</loc>
@@ -46,6 +46,12 @@
46
  <loc>https://mgzon-mgzon-app.hf.space/profile</loc>
47
  <lastmod>2025-10-01</lastmod>
48
  <changefreq>weekly</changefreq>
 
 
 
 
 
 
49
  <priority>0.9</priority>
50
  </url>
51
  <url>
 
10
  <loc>https://mgzon-mgzon-app.hf.space/chat</loc>
11
  <lastmod>2025-09-01</lastmod>
12
  <changefreq>daily</changefreq>
13
+ <priority>0.9</priority>
14
  </url>
15
  <url>
16
  <loc>https://mgzon-mgzon-app.hf.space/about</loc>
17
+ <lastmod>2025-10-2</lastmod>
18
  <changefreq>weekly</changefreq>
19
+ <priority>1.0</priority>
20
  </url>
21
  <url>
22
  <loc>https://mgzon-mgzon-app.hf.space/login</loc>
 
46
  <loc>https://mgzon-mgzon-app.hf.space/profile</loc>
47
  <lastmod>2025-10-01</lastmod>
48
  <changefreq>weekly</changefreq>
49
+ <priority>1.0</priority>
50
+ </url>
51
+ <url>
52
+ <loc>https://mgzon-mgzon-app.hf.space/download</loc>
53
+ <lastmod>2025-10-02</lastmod>
54
+ <changefreq>weekly</changefreq>
55
  <priority>0.9</priority>
56
  </url>
57
  <url>
templates/about.html CHANGED
@@ -1,278 +1,707 @@
1
  <!DOCTYPE html>
2
- <html lang="en">
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <meta name="description" content="Learn about MGZon AI, founded by Mark Al-Asfar in Alexandria, Egypt. Discover our mission, team, and achievements in AI and e-commerce.">
7
- <meta name="keywords" content="MGZon AI, Mark Al-Asfar, AI chatbot, e-commerce, code generation, Alexandria, technology, team, achievements">
8
- <meta name="author" content="Mark Al-Asfar">
 
 
9
  <meta name="robots" content="index, follow">
10
- <title>About MGZon AI – Our Story</title>
11
- <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
12
- <link rel="apple-touch-icon" href="/static/images/mg.svg">
 
 
 
 
 
13
  <!-- Open Graph -->
14
- <meta property="og:title" content="About MGZon AI – Our Story">
15
- <meta property="og:description" content="Learn about MGZon AI, its founder Mark Al-Asfar, and our mission to innovate in AI and e-commerce.">
16
- <meta property="og:image" content="/static/images/mg.svg">
17
  <meta property="og:url" content="https://mgzon-mgzon-app.hf.space/about">
18
  <meta property="og:type" content="website">
19
  <!-- Twitter Card -->
20
  <meta name="twitter:card" content="summary_large_image">
21
- <meta name="twitter:title" content="About MGZon AI – Our Story">
22
- <meta name="twitter:description" content="Learn about MGZon AI, its founder Mark Al-Asfar, and our mission to innovate in AI and e-commerce.">
23
- <meta name="twitter:image" content="/static/images/mg.svg">
24
- <!-- JSON-LD -->
25
- <script type="application/ld+json">
26
- {
27
- "@context": "https://schema.org",
28
- "@type": "Organization",
29
- "name": "MGZon AI",
30
- "url": "https://mgzon-mgzon-app.hf.space",
31
- "logo": "/static/images/mg.svg",
32
- "founder": {
33
- "@type": "Person",
34
- "name": "Mark Al-Asfar",
35
- "sameAs": "https://mark-elasfar.web.app/"
36
- },
37
- "description": "MGZon AI develops AI-powered solutions for e-commerce and coding, founded by Mark Al-Asfar from Alexandria, Egypt.",
38
- "keywords": ["MGZon AI", "Mark Al-Asfar", "AI chatbot", "e-commerce", "code generation", "Alexandria", "technology", "team", "MGZon", "MGZon chatbot", "E-commerce chatbot", "5G", "6G", "2025 AI trends"],
39
- "address": {
40
- "@type": "PostalAddress",
41
- "addressLocality": "Alexandria",
42
- "addressCountry": "Egypt"
43
- }
44
- }
45
- </script>
46
- <!-- Tailwind (v3) -->
47
- <script src="https://cdn.tailwindcss.com"></script>
48
  <!-- Boxicons -->
49
- <link href="https://cdn.jsdelivr.net/npm/[email protected]/css/boxicons.min.css" rel="stylesheet">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  <style>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  @keyframes gradientShift {
52
- 0% { background-position: 0% 50%; }
53
  50% { background-position: 100% 50%; }
54
- 100% { background-position: 0% 50%; }
55
  }
56
- body {
57
- background: linear-gradient(135deg, #0f172a, #0e7490, #065f46, #064e3b);
58
- background-size: 400% 400%;
59
- animation: gradientShift 15s ease infinite;
60
- font-family: system-ui, sans-serif;
61
- }
62
- .glass {
63
- background: rgba(255, 255, 255, 0.07);
64
- border-radius: 1rem;
65
- border: 1px solid rgba(255, 255, 255, 0.12);
66
- backdrop-filter: blur(12px);
67
- -webkit-backdrop-filter: blur(12px);
68
- }
69
- .sidebar {
70
- transition: transform 0.3s ease-in-out;
71
- }
72
- .sidebar.collapsed .logo {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  opacity: 0;
74
- transition: opacity 0.2s ease;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  }
76
- .main-content {
77
- min-height: calc(100vh - 4rem);
 
 
 
 
 
78
  }
79
- .glass:hover {
80
- transform: scale(1.05);
81
- box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
82
- background: rgba(255, 255, 255, 0.15);
 
 
 
 
 
 
 
 
 
 
 
83
  }
84
  @media (max-width: 768px) {
85
- .sidebar {
86
- transform: translateX(-100%);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  }
88
- .sidebar.active {
89
- transform: translateX(0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  }
91
  }
92
  </style>
93
  </head>
94
- <body class="text-white flex flex-col min-h-screen">
95
- <!-- Mobile toggle button -->
96
- <button id="sidebarToggle" class="md:hidden fixed top-4 left-4 z-50 p-2 text-2xl text-white rounded bg-gray-800/60 hover:bg-gray-700/80 transition" aria-label="Toggle navigation">
97
- <i class="bx bx-menu"></i>
98
- </button>
99
- <!-- Sidebar -->
100
- <aside id="sidebar" class="sidebar fixed inset-y-0 left-0 w-64 bg-gradient-to-b from-teal-800 to-emerald-900 p-6 flex flex-col overflow-y-auto z-40">
101
- <button id="closeSidebar" class="md:hidden text-white text-2xl absolute top-4 right-4" aria-label="Close sidebar">✕</button>
102
- <img src="/static/images/mg.svg" alt="MGZon Logo" class="logo w-20 h-20 mx-auto mb-8 animate-pulse">
103
- <nav class="flex flex-col gap-3">
104
- <a href="/" class="px-4 py-2 rounded-lg hover:bg-emerald-600 transition">Home</a>
105
- <a href="/docs" class="px-4 py-2 rounded-lg hover:bg-emerald-600 transition">API Documentation</a>
106
- <a href="/about" class="px-4 py-2 rounded-lg bg-emerald-600">About MGZon</a>
107
- <a href="/login" class="px-4 py-2 rounded-lg hover:bg-emerald-600 transition">Login</a>
108
- <a href="/register" class="px-4 py-2 rounded-lg hover:bg-emerald-600 transition">Register</a>
109
- <a href="https://hager-zon.vercel.app/community" class="px-4 py-2 rounded-lg hover:bg-emerald-600 transition">Community</a>
110
- <a href="https://mark-elasfar.web.app/" target="_blank" class="px-4 py-2 rounded-lg hover:bg-emerald-600 transition">Mark Al-Asfar</a>
111
- </nav>
112
- </aside>
113
- <!-- Main content -->
114
- <main class="flex-1 md:ml-64 p-6 main-content">
115
- <section class="container max-w-6xl mx-auto">
116
- <div class="text-center py-12">
117
- <img src="/static/images/mg.svg" alt="MGZon Logo" class="w-32 h-32 mx-auto mb-6 animate-bounce">
118
- <h1 class="text-5xl font-bold mb-4 bg-clip-text text-transparent bg-gradient-to-r from-teal-300 to-emerald-400">About MGZon AI</h1>
119
- <p class="text-lg max-w-2xl mx-auto mb-8">Founded by Mark Al-Asfar in Alexandria, Egypt, MGZon AI is revolutionizing e-commerce and coding with AI-driven solutions.</p>
 
 
 
120
  </div>
121
- <!-- Story Section -->
122
- <section class="my-12">
123
- <h2 class="text-3xl font-bold text-center mb-8">Our Story</h2>
124
- <div class="glass p-6">
125
- <p class="mb-4">MGZon AI was founded in 2023 in Alexandria, Egypt, by Mark Al-Asfar with a vision to empower developers and businesses through AI-driven solutions like MGZon Chatbot. We leverage technologies like DeepSeek, FastAPI, and 5G/6G innovations to deliver cutting-edge e-commerce and code generation tools.</p>
126
- <p>From a small startup to a global player, we now operate warehouses in the USA, Canada, and China, serving thousands of users worldwide.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  </div>
128
- </section>
129
- <!-- Founder Section -->
130
- <section class="my-12">
131
- <h2 class="text-3xl font-bold text-center mb-8">Meet Our Founder</h2>
132
- <div class="glass p-6 text-center">
133
- <img src="/static/images/mg.svg" alt="Mark Al-Asfar" class="w-24 h-24 mx-auto mb-4 rounded-full">
134
- <h3 class="text-xl font-semibold mb-2">Mark Al-Asfar</h3>
135
- <p class="mb-4">A visionary developer from Alexandria, Mark Al-Asfar founded MGZon AI to bridge the gap between AI innovation and practical applications in coding and e-commerce.</p>
136
- <a href="https://mark-elasfar.web.app/" target="_blank" class="text-emerald-300 hover:underline">Learn More About Mark</a>
137
  </div>
138
- </section>
139
- <!-- Team Section -->
140
- <section class="my-12">
141
- <h2 class="text-3xl font-bold text-center mb-8">Our Team</h2>
142
- <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
143
- <div class="glass p-6 text-center">
144
- <img src="https://via.placeholder.com/96" alt="Team Member" class="w-24 h-24 mx-auto mb-4 rounded-full">
145
- <h3 class="text-xl font-semibold mb-2">Hager Mohamed</h3>
146
- <p class="mb-4">Lead AI Engineer, specializing in machine learning and chatbot development.</p>
147
- </div>
148
- <div class="glass p-6 text-center">
149
- <img src="https://via.placeholder.com/96" alt="Team Member" class="w-24 h-24 mx-auto mb-4 rounded-full">
150
- <h3 class="text-xl font-semibold mb-2">Ahmed Khaled</h3>
151
- <p class="mb-4">E-commerce Specialist, driving innovative solutions for online businesses.</p>
152
- </div>
153
  </div>
154
- </section>
155
- <!-- Achievements Section -->
156
- <section class="my-12">
157
- <h2 class="text-3xl font-bold text-center mb-8">Our Achievements</h2>
158
- <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
159
- <div class="glass p-6">
160
- <h3 class="text-xl font-semibold mb-2">Global Reach</h3>
161
- <p>Serving over 10,000 users across 50 countries with our AI tools.</p>
162
- </div>
163
- <div class="glass p-6">
164
- <h3 class="text-xl font-semibold mb-2">Award-Winning Innovation</h3>
165
- <p>Recognized as a top AI startup in MENA by TechCrunch in 2024.</p>
166
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  </div>
168
- </section>
169
- <!-- Mission Section -->
170
- <section class="my-12">
171
- <h2 class="text-3xl font-bold text-center mb-8">Our Mission</h2>
172
- <div class="glass p-6">
173
- <p>At MGZon AI, we aim to make AI accessible to developers and businesses, simplifying coding and enhancing e-commerce with cutting-edge technology.</p>
174
  </div>
175
- </section>
176
- </section>
177
- </main>
178
- <!-- Footer -->
179
- <footer class="bg-gradient-to-r from-teal-900 to-emerald-900 py-12 mt-8">
180
- <div class="container max-w-6xl mx-auto text-center">
181
- <img src="/static/images/mg.svg" alt="MGZon Logo" class="w-24 h-24 mx-auto mb-6 animate-pulse">
182
- <p class="mb-4">
183
- Developed by <a href="https://mark-elasfar.web.app/" target="_blank" class="text-emerald-300 hover:underline">Mark Al-Asfar</a>
184
- | Powered by <a href="https://hager-zon.vercel.app/" target="_blank" class="text-emerald-300 hover:underline">MGZon AI</a>
185
- </p>
186
- <div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-6">
187
- <div class="glass p-4 cursor-pointer" onclick="showCardDetails('email')">
188
- <i class="bx bx-mail-send text-3xl text-emerald-300 mb-2"></i>
189
- <h4 class="font-semibold mb-1">Email Us</h4>
190
- <p><a href="mailto:[email protected]" class="text-emerald-300 hover:underline">[email protected]</a></p>
191
- <div id="email-details" class="hidden mt-4 p-4 bg-gray-700/80 rounded-lg">
192
- <p>Reach out to our support team for any inquiries or assistance.</p>
193
- <button onclick="closeCardDetails('email')" class="bg-emerald-500 text-white px-4 py-2 rounded-lg mt-2">Close</button>
194
- </div>
195
  </div>
196
- <div class="glass p-4 cursor-pointer" onclick="showCardDetails('phone')">
197
- <i class="bx bx-phone text-3xl text-emerald-300 mb-2"></i>
198
- <h4 class="font-semibold mb-1">Phone Support</h4>
199
- <p>+1-800-123-4567</p>
200
- <div id="phone-details" class="hidden mt-4 p-4 bg-gray-700/80 rounded-lg">
201
- <p>Contact our support team via phone for immediate assistance.</p>
202
- <button onclick="closeCardDetails('phone')" class="bg-emerald-500 text-white px-4 py-2 rounded-lg mt-2">Close</button>
203
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  </div>
205
- <div class="glass p-4 cursor-pointer" onclick="showCardDetails('community')">
206
- <i class="bx bx-group text-3xl text-emerald-300 mb-2"></i>
207
- <h4 class="font-semibold mb-1">Community</h4>
208
- <p><a href="https://hager-zon.vercel.app/community" class="text-emerald-300 hover:underline">Join us</a></p>
209
- <div id="community-details" class="hidden mt-4 p-4 bg-gray-700/80 rounded-lg">
210
- <p>Join our vibrant community to share ideas and collaborate.</p>
211
- <button onclick="closeCardDetails('community')" class="bg-emerald-500 text-white px-4 py-2 rounded-lg mt-2">Close</button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
212
  </div>
213
  </div>
214
- <div class="glass p-4 cursor-pointer" onclick="showCardDetails('api-docs')">
215
- <i class="bx bx-code-alt text-3xl text-emerald-300 mb-2"></i>
216
- <h4 class="font-semibold mb-1">API Docs</h4>
217
- <p><a href="/docs" class="text-emerald-300 hover:underline">Explore Docs</a></p>
218
- <div id="api-docs-details" class="hidden mt-4 p-4 bg-gray-700/80 rounded-lg">
219
- <p>Explore our API documentation for seamless integration.</p>
220
- <button onclick="closeCardDetails('api-docs')" class="bg-emerald-500 text-white px-4 py-2 rounded-lg mt-2">Close</button>
221
  </div>
222
  </div>
223
- <div class="glass p-4 cursor-pointer" onclick="showCardDetails('faq')">
224
- <i class="bx bx-help-circle text-3xl text-emerald-300 mb-2"></i>
225
- <h4 class="font-semibold mb-1">FAQ</h4>
226
- <p><a href="https://hager-zon.vercel.app/faq" target="_blank" class="text-emerald-300 hover:underline">Read FAQ</a></p>
227
- <div id="faq-details" class="hidden mt-4 p-4 bg-gray-700/80 rounded-lg">
228
- <p>Find answers to common questions in our FAQ section.</p>
229
- <button onclick="closeCardDetails('faq')" class="bg-emerald-500 text-white px-4 py-2 rounded-lg mt-2">Close</button>
230
  </div>
231
  </div>
232
- <div class="glass p-4 cursor-pointer" onclick="showCardDetails('docs')">
233
- <i class="bx bx-book text-3xl text-emerald-300 mb-2"></i>
234
- <h4 class="font-semibold mb-1">Documentation</h4>
235
- <p><a href="/docs" class="text-emerald-300 hover:underline">Full Docs</a></p>
236
- <div id="docs-details" class="hidden mt-4 p-4 bg-gray-700/80 rounded-lg">
237
- <p>Access comprehensive documentation for MGZon Chatbot.</p>
238
- <button onclick="closeCardDetails('docs')" class="bg-emerald-500 text-white px-4 py-2 rounded-lg mt-2">Close</button>
239
  </div>
240
  </div>
241
  </div>
242
- <div class="flex justify-center gap-6 mt-6">
243
- <a href="https://github.com/Mark-Lasfar/MGZon" class="text-2xl text-white hover:text-emerald-300 transition"><i class="bx bxl-github"></i></a>
244
- <a href="https://x.com/MGZon" class="text-2xl text-white hover:text-emerald-300 transition"><i class="bx bxl-twitter"></i></a>
245
- <a href="https://www.facebook.com/people/Mark-Al-Asfar/pfbid02GMisUQ8AqWkNZjoKtWFHH1tbdHuVscN1cjcFnZWy9HkRaAsmanBfT6mhySAyqpg4l/" class="text-2xl text-white hover:text-emerald-300 transition"><i class="bx bxl-facebook"></i></a>
246
  </div>
247
- <p class="mt-6" 2025 Mark Al-Asfar & MGZon AI. All rights reserved.</p>
248
  </div>
249
  </footer>
 
 
250
  <script>
251
- const sidebar = document.getElementById('sidebar');
252
- const toggleBtn = document.getElementById('sidebarToggle');
253
- const closeSidebarBtn = document.getElementById('closeSidebar');
254
- toggleBtn.addEventListener('click', () => {
255
- sidebar.classList.toggle('active');
256
- sidebar.classList.toggle('-translate-x-full');
257
- sidebar.classList.toggle('translate-x-0');
258
- });
259
- closeSidebarBtn.addEventListener('click', () => {
260
- sidebar.classList.remove('active');
261
- sidebar.classList.add('-translate-x-full');
262
- sidebar.classList.remove('translate-x-0');
263
- });
264
- document.addEventListener('click', (e) => {
265
- if (!sidebar.contains(e.target) && !toggleBtn.contains(e.target) && window.innerWidth < 768) {
266
- sidebar.classList.remove('active');
267
- sidebar.classList.add('-translate-x-full');
268
- sidebar.classList.remove('translate-x-0');
269
  }
 
 
 
270
  });
271
- function showCardDetails(cardId) {
272
- document.getElementById(`${cardId}-details`).classList.remove('hidden');
273
- }
274
- function closeCardDetails(cardId) {
275
- document.getElementById(`${cardId}-details`).classList.add('hidden');
 
 
 
 
 
 
 
 
 
 
 
276
  }
277
  </script>
278
  </body>
 
1
  <!DOCTYPE html>
2
+ <html lang="en" dir="ltr">
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <link rel="icon" href="/static/favicon.ico" type="image/x-icon" />
7
+ <link rel="sitemap" type="application/xml" title="Sitemap" href="/sitemap.xml" />
8
+ <meta name="description" content="Learn about MGZon AI, an innovative AI-powered platform for e-commerce and code generation. Discover our mission, technologies, and achievements.">
9
+ <meta name="keywords" content="MGZon AI, AI chatbot, e-commerce, code generation, technology, achievements, MGZon, E-commerce chatbot, 5G, 6G, 2025 AI trends, 2026 trends, adaptive UI">
10
+ <meta name="author" content="MGZon AI Team">
11
  <meta name="robots" content="index, follow">
12
+ <title data-translate="title">About MGZon AI – Adaptive Horizons</title>
13
+ <link rel="canonical" href="https://mgzon-mgzon-app.hf.space/about" />
14
+ <link rel="icon" type="image/x-icon" href="https://mgzon-mgzon-app.hf.space/static/images/mg.svg">
15
+ <link rel="apple-touch-icon" href="https://mgzon-mgzon-app.hf.space/static/images/mg.svg">
16
+ <meta name="apple-mobile-web-app-capable" content="yes">
17
+ <meta name="apple-mobile-web-app-title" content="MGZon">
18
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
19
+ <meta name="theme-color" content="#00f0ff">
20
  <!-- Open Graph -->
21
+ <meta property="og:title" content="About MGZon AI – Adaptive Horizons">
22
+ <meta property="og:description" content="Immerse in MGZon AI's adaptive story, powering 2026 AI frontiers for e-commerce and code generation.">
23
+ <meta property="og:image" content="https://mgzon-mgzon-app.hf.space/static/images/mg.svg">
24
  <meta property="og:url" content="https://mgzon-mgzon-app.hf.space/about">
25
  <meta property="og:type" content="website">
26
  <!-- Twitter Card -->
27
  <meta name="twitter:card" content="summary_large_image">
28
+ <meta name="twitter:title" content="About MGZon AI – Adaptive Horizons">
29
+ <meta name="twitter:description" content="Immerse in MGZon AI's adaptive story, powering 2026 AI frontiers for e-commerce and code generation.">
30
+ <meta name="twitter:image" content="https://mgzon-mgzon-app.hf.space/static/images/mg.svg">
31
+ <!-- Google Fonts -->
32
+ <link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700;900&family=Inter:wght@300;400;600;700&family=Cairo:wght@400;700&family=Roboto:wght@300;400;700&display=swap" rel="stylesheet">
33
+ <!-- Tailwind CSS -->
34
+ <script src="https://cdn.tailwindcss.com/3.4.17"></script>
35
+ <!-- GSAP for animations -->
36
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
37
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/ScrollTrigger.min.js"></script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  <!-- Boxicons -->
39
+ <link href="https://unpkg.com/[email protected]/css/boxicons.min.css" rel="stylesheet">
40
+ <!-- External JavaScript -->
41
+ <script src="/static/js/about.js" defer></script>
42
+ <!-- تحميل مشروط لـ Three.js و Particles.js -->
43
+ <script>
44
+ if (window.innerWidth > 768) {
45
+ const threeScript = document.createElement('script');
46
+ threeScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js';
47
+ document.head.appendChild(threeScript);
48
+ const particlesScript = document.createElement('script');
49
+ particlesScript.src = 'https://cdn.jsdelivr.net/npm/[email protected]/particles.min.js';
50
+ document.head.appendChild(particlesScript);
51
+ }
52
+ </script>
53
+ <!-- A-Frame for AR -->
54
+ <script src="https://aframe.io/releases/1.5.0/aframe.min.js" defer></script>
55
+
56
  <style>
57
+ :root {
58
+ --primary: #00f0ff;
59
+ --secondary: #ff007a;
60
+ --accent: #6b21a8;
61
+ --background: #000;
62
+ --foreground: #f8f9fa;
63
+ --card-bg: rgba(10, 10, 10, 0.9);
64
+ --glow-primary: 0 0 25px #00f0ff;
65
+ --glow-secondary: 0 0 25px #ff007a;
66
+ }
67
+ [data-theme="light"] {
68
+ --background: #f8f9fa;
69
+ --foreground: #000;
70
+ --card-bg: rgba(248, 249, 250, 0.9);
71
+ }
72
+ body {
73
+ background: var(--background);
74
+ color: var(--foreground);
75
+ font-family: 'Inter', sans-serif;
76
+ overflow-x: hidden;
77
+ position: relative;
78
+ transition: background 0.3s, color 0.3s;
79
+ }
80
+ .rtl {
81
+ direction: rtl;
82
+ font-family: 'Cairo', sans-serif;
83
+ }
84
+ #particles-js, #3d-canvas {
85
+ position: fixed;
86
+ width: 100%;
87
+ height: 100%;
88
+ z-index: -1;
89
+ opacity: 0.3;
90
+ will-change: transform;
91
+ display: none;
92
+ }
93
+ @media (min-width: 769px) {
94
+ #particles-js, #3d-canvas { display: block; }
95
+ }
96
+ #hero-orb {
97
+ position: fixed;
98
+ top: 50%;
99
+ left: 50%;
100
+ width: 200px;
101
+ height: 200px;
102
+ transform: translate(-50%, -50%);
103
+ z-index: -1;
104
+ opacity: 0.1;
105
+ display: none;
106
+ }
107
+ @media (min-width: 769px) {
108
+ #hero-orb { display: block; }
109
+ }
110
+ .neon-gradient {
111
+ background: linear-gradient(135deg, var(--primary), var(--secondary), var(--accent));
112
+ background-size: 300% 300%;
113
+ animation: gradientShift 5s ease infinite;
114
+ -webkit-background-clip: text;
115
+ -webkit-text-fill-color: transparent;
116
+ background-clip: text;
117
+ }
118
  @keyframes gradientShift {
119
+ 0%, 100% { background-position: 0% 50%; }
120
  50% { background-position: 100% 50%; }
 
121
  }
122
+ .glass-morphism {
123
+ background: rgba(255, 255, 255, 0.02);
124
+ backdrop-filter: blur(30px);
125
+ border: 1px solid rgba(255, 255, 255, 0.05);
126
+ border-radius: 16px;
127
+ box-shadow: 0 15px 30px rgba(0, 0, 0, 0.3);
128
+ transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
129
+ }
130
+ .glass-morphism:hover {
131
+ transform: translateY(-5px) scale(1.02);
132
+ box-shadow: 0 15px 30px rgba(0, 120, 255, 0.3);
133
+ border-color: var(--primary);
134
+ }
135
+ .hero-section {
136
+ background: radial-gradient(ellipse at center, rgba(0, 240, 255, 0.1) 0%, transparent 70%);
137
+ min-height: 80vh;
138
+ display: flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ position: relative;
142
+ }
143
+ .timeline-container {
144
+ position: relative;
145
+ max-width: 900px;
146
+ margin: 0 auto;
147
+ }
148
+ .timeline-line {
149
+ position: absolute;
150
+ left: 50%;
151
+ top: 0;
152
+ bottom: 0;
153
+ width: 3px;
154
+ background: linear-gradient(to bottom, var(--primary), var(--accent));
155
+ transform: translateX(-50%);
156
+ z-index: 1;
157
+ }
158
+ .timeline-node {
159
+ position: relative;
160
+ width: 48%;
161
+ margin: 2rem 0;
162
+ padding: 1.5rem;
163
+ }
164
+ .timeline-node.left {
165
+ left: 0;
166
+ text-align: right;
167
+ }
168
+ .timeline-node.right {
169
+ left: 52%;
170
+ }
171
+ .timeline-node::before {
172
+ content: '';
173
+ position: absolute;
174
+ top: 1.5rem;
175
+ width: 16px;
176
+ height: 16px;
177
+ background: var(--primary);
178
+ border-radius: 50%;
179
+ box-shadow: var(--glow-primary);
180
+ z-index: 2;
181
+ }
182
+ .timeline-node.left::before {
183
+ right: -8px;
184
+ }
185
+ .timeline-node.right::before {
186
+ left: -8px;
187
+ }
188
+ .nav-morph {
189
+ background: rgba(0, 0, 0, 0.5);
190
+ backdrop-filter: blur(20px);
191
+ border-bottom: 1px solid rgba(0, 240, 255, 0.2);
192
+ }
193
+ .theme-btn {
194
+ background: rgba(0, 240, 255, 0.1);
195
+ border: 1px solid var(--primary);
196
+ color: var(--primary);
197
+ border-radius: 50%;
198
+ width: 36px;
199
+ height: 36px;
200
+ transition: all 0.3s ease;
201
+ }
202
+ .theme-btn:hover {
203
+ background: var(--primary);
204
+ color: #000;
205
+ box-shadow: var(--glow-primary);
206
+ transform: rotate(180deg);
207
+ }
208
+ .voice-btn {
209
+ background: rgba(0, 240, 255, 0.1);
210
+ border: 1px solid var(--primary);
211
+ color: var(--primary);
212
+ border-radius: 50%;
213
+ width: 36px;
214
+ height: 36px;
215
+ transition: all 0.3s ease;
216
+ }
217
+ .voice-btn:hover {
218
+ background: var(--primary);
219
+ color: #000;
220
+ box-shadow: var(--glow-primary);
221
+ }
222
+ .contact-hub {
223
+ display: grid;
224
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
225
+ gap: 1rem;
226
+ max-width: 800px;
227
+ margin: 0 auto;
228
+ }
229
+ .contact-pod {
230
+ background: var(--card-bg);
231
+ border: 1px solid rgba(0, 240, 255, 0.2);
232
+ border-radius: 12px;
233
+ padding: 1rem;
234
+ text-align: center;
235
+ cursor: pointer;
236
+ transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
237
+ position: relative;
238
+ }
239
+ .contact-pod::after {
240
+ content: '';
241
+ position: absolute;
242
+ inset: 0;
243
+ background: linear-gradient(45deg, transparent 30%, rgba(0, 240, 255, 0.1) 50%, transparent 70%);
244
  opacity: 0;
245
+ transition: opacity 0.5s;
246
+ pointer-events: none;
247
+ }
248
+ .contact-pod:hover::after {
249
+ opacity: 1;
250
+ animation: shimmer 0.5s ease;
251
+ }
252
+ @keyframes shimmer {
253
+ 0% { transform: translateX(-100%); }
254
+ 100% { transform: translateX(100%); }
255
+ }
256
+ .contact-pod:hover {
257
+ transform: translateY(-5px) rotate(2deg);
258
+ box-shadow: var(--glow-primary);
259
+ }
260
+ .contact-icon {
261
+ font-size: 1.5rem;
262
+ color: var(--primary);
263
+ margin-bottom: 0.5rem;
264
+ display: block;
265
+ transition: transform 0.3s ease;
266
+ }
267
+ .contact-pod:hover .contact-icon {
268
+ transform: scale(1.2) rotate(360deg);
269
+ }
270
+ .details-panel {
271
+ display: none;
272
+ margin-top: 1rem;
273
+ padding: 1rem;
274
+ background: rgba(0, 240, 255, 0.05);
275
+ border-radius: 12px;
276
+ border-left: 3px solid var(--primary);
277
+ }
278
+ .logo-pulse {
279
+ animation: pulseLogo 2s infinite;
280
+ }
281
+ @keyframes pulseLogo {
282
+ 0%, 100% { transform: scale(1); }
283
+ 50% { transform: scale(1.05); }
284
+ }
285
+ .search-bar {
286
+ background: rgba(255,255,255,0.1);
287
+ border: 1px solid var(--primary);
288
+ color: var(--foreground);
289
+ padding: 6px 12px;
290
+ border-radius: 20px;
291
+ width: 100%;
292
+ max-width: 200px;
293
+ }
294
+ .voice-status {
295
+ position: fixed;
296
+ top: 80px;
297
+ right: 10px;
298
+ background: rgba(0,0,0,0.8);
299
+ color: var(--primary);
300
+ padding: 6px 12px;
301
+ border-radius: 20px;
302
+ display: none;
303
+ z-index: 1000;
304
+ }
305
+ .gemini-popup {
306
+ position: fixed;
307
+ bottom: 10px;
308
+ left: 50%;
309
+ transform: translateX(-50%);
310
+ background: var(--card-bg);
311
+ color: var(--foreground);
312
+ padding: 15px;
313
+ border-radius: 16px;
314
+ width: 90vw;
315
+ max-width: 400px;
316
+ max-height: 60vh;
317
+ overflow-y: auto;
318
+ display: none;
319
+ z-index: 1000;
320
+ border: 1px solid var(--primary);
321
+ box-shadow: var(--glow-primary);
322
+ }
323
+ .close-popup {
324
+ cursor: pointer;
325
+ float: right;
326
+ font-size: 20px;
327
+ color: var(--primary);
328
+ }
329
+ .chat-message {
330
+ margin-bottom: 1rem;
331
+ padding: 1rem;
332
+ border-radius: 12px;
333
+ background: rgba(0, 240, 255, 0.1);
334
+ word-wrap: break-word;
335
+ line-height: 1.5;
336
+ }
337
+ .chat-message.user {
338
+ background: rgba(255, 0, 122, 0.1);
339
+ text-align: right;
340
+ }
341
+ #voice-toggle.listening {
342
+ background: rgba(255, 0, 0, 0.5);
343
+ animation: pulse 1s infinite;
344
+ }
345
+ @keyframes pulse {
346
+ 0% { transform: scale(1); }
347
+ 50% { transform: scale(1.1); }
348
+ 100% { transform: scale(1); }
349
  }
350
+ /* تحسينات الـ Navbar */
351
+ .nav-container {
352
+ display: flex;
353
+ align-items: center;
354
+ justify-content: space-between;
355
+ max-width: 100%;
356
+ overflow-x: hidden;
357
  }
358
+ .nav-links {
359
+ display: flex;
360
+ align-items: center;
361
+ space-x-4;
362
+ }
363
+ .hamburger {
364
+ display: none;
365
+ font-size: 24px;
366
+ color: var(--primary);
367
+ cursor: pointer;
368
+ }
369
+ .search-container {
370
+ display: flex;
371
+ align-items: center;
372
+ gap: 8px;
373
  }
374
  @media (max-width: 768px) {
375
+ .nav-container {
376
+ flex-wrap: wrap;
377
+ padding: 0.5rem 1rem;
378
+ }
379
+ .nav-links {
380
+ flex-direction: column;
381
+ position: absolute;
382
+ top: 60px;
383
+ right: 0;
384
+ background: var(--card-bg);
385
+ width: 100%;
386
+ padding: 1rem;
387
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
388
+ z-index: 40;
389
+ display: flex; /* مفتوح افتراضيًا */
390
+ opacity: 0;
391
+ transform: translateY(-10px);
392
+ transition: opacity 0.3s ease, transform 0.3s ease;
393
+ }
394
+ .nav-links.active {
395
+ opacity: 1;
396
+ transform: translateY(0);
397
+ }
398
+ .hamburger {
399
+ display: block;
400
+ }
401
+ .search-container {
402
+ margin-top: 0.5rem;
403
+ width: 100%;
404
+ justify-content: flex-end;
405
+ }
406
+ .search-bar {
407
+ max-width: 150px;
408
+ }
409
+ .theme-btn, .voice-btn {
410
+ width: 32px;
411
+ height: 32px;
412
+ }
413
+ .timeline-node {
414
+ width: 100%;
415
+ left: 0 !important;
416
+ text-align: center;
417
+ padding: 1rem;
418
+ }
419
+ .timeline-line {
420
+ left: 20px;
421
+ }
422
+ .timeline-node::before {
423
+ left: 12px !important;
424
+ right: auto !important;
425
+ }
426
+ .hero-section {
427
+ min-height: 60vh;
428
  }
429
+ .hero-section h1 {
430
+ font-size: 2.5rem;
431
+ }
432
+ .hero-section p {
433
+ font-size: 1rem;
434
+ }
435
+ .hero-section img {
436
+ width: 100px;
437
+ height: 100px;
438
+ }
439
+ .contact-hub {
440
+ grid-template-columns: 1fr;
441
+ }
442
+ .glass-morphism {
443
+ padding: 1rem;
444
+ border-radius: 12px;
445
  }
446
  }
447
  </style>
448
  </head>
449
+ <body>
450
+ <!-- 3D Ambient -->
451
+ <canvas id="3d-canvas"></canvas>
452
+ <canvas id="hero-orb"></canvas>
453
+ <!-- Particles -->
454
+ <div id="particles-js"></div>
455
+ <!-- Voice Status -->
456
+ <div id="voice-status" class="voice-status" data-translate="voiceStatus">Listening...</div>
457
+ <!-- Gemini Chat Popup -->
458
+ <div id="gemini-popup" class="gemini-popup">
459
+ <span class="close-popup" onclick="closePopup()">&times;</span>
460
+ <div id="popup-content"></div>
461
+ <div class="mt-4">
462
+ <input type="text" id="chat-input" class="search-bar w-full" data-translate-placeholder="chatPlaceholder" placeholder="Type your message...">
463
+ <button id="send-chat" class="mt-2 bg-[var(--primary)] text-black px-4 py-2 rounded-full w-full" data-translate="sendBtn">Send</button>
464
+ </div>
465
+ </div>
466
+
467
+ <!-- Navigation -->
468
+ <nav class="fixed top-0 w-full nav-morph z-50 py-3">
469
+ <div class="container mx-auto px-4 nav-container">
470
+ <div class="flex items-center gap-4">
471
+ <a href="/" class="text-xl font-bold font-orbitron neon-gradient" data-translate="navLogo">
472
+ <img src="https://mgzon-mgzon-app.hf.space/static/images/mg.svg" alt="MGZon Logo" class="inline w-6 h-6 logo-pulse mr-2" loading="lazy">
473
+ MGZon AI
474
+ </a>
475
+ <div class="hamburger">
476
+ <i class='bx bx-menu'></i>
477
+ </div>
478
  </div>
479
+ <div class="nav-links flex items-center space-x-4">
480
+ <a href="/" class="text-white hover:text-[var(--primary)] transition-all duration-300 ease-out" data-translate="navHome">Home</a>
481
+ <a href="/download" download class="link-button text-white hover:text-[var(--primary)]">
482
+ Download APP <i class="bx bx-download ml-1"></i>
483
+ </a>
484
+ <a href="/chat" class="text-white hover:text-[var(--primary)] transition-all duration-300 ease-out" data-translate="navContact">Launch Chatbot</a>
485
+ <select id="lang-toggle" class="bg-transparent text-white border-[var(--primary)] rounded-md px-2 py-1">
486
+ <option value="en">English</option>
487
+ <option value="ar">العربية</option>
488
+ <option value="fr">Français</option>
489
+ <option value="de">Deutsch</option>
490
+ </select>
491
+ <button id="theme-toggle" class="theme-btn" data-title-translate="themeTitle">
492
+ <i class='bx bx-sun'></i>
493
+ </button>
494
+ </div>
495
+ <div class="search-container">
496
+ <input type="text" id="search-input" class="search-bar" data-translate-placeholder="searchPlaceholder" placeholder="Search...">
497
+ <button id="voice-toggle" class="voice-btn" data-title-translate="voiceTitle">
498
+ <i class='bx bx-microphone'></i>
499
+ </button>
500
+ </div>
501
+ </div>
502
+ </nav>
503
+
504
+ <!-- Hero Section -->
505
+ <section class="hero-section relative min-h-screen flex items-center justify-center text-center pt-16">
506
+ <div class="container mx-auto px-4">
507
+ <img src="https://mgzon-mgzon-app.hf.space/static/images/mg.svg" alt="MGZon Logo" class="w-48 h-48 mx-auto mb-6 logo-pulse" loading="lazy">
508
+ <h1 class="text-5xl md:text-7xl font-bold font-orbitron neon-gradient mb-6" data-translate="heroTitle">About MGZon AI</h1>
509
+ <p class="text-lg md:text-2xl max-w-3xl mx-auto opacity-80" data-translate="heroDesc">An AI-powered platform revolutionizing e-commerce and code generation – Empowering creators and businesses with adaptive intelligence.</p>
510
+ <div class="ar-hint mt-8" data-translate="arHint">
511
+ <i class='bx bx-vr' style="font-size: 1.5rem;"></i> Tap for AR View
512
+ </div>
513
+ </div>
514
+ <a-scene embedded arjs="trackingMethod: best;" style="display: none;" id="ar-scene">
515
+ <a-marker preset="hiro">
516
+ <a-box position="0 0.5 0" material="color: #00f0ff;"></a-box>
517
+ </a-marker>
518
+ <a-entity camera></a-entity>
519
+ </a-scene>
520
+ </section>
521
+
522
+ <!-- Our Story Section - Timeline Style -->
523
+ <section class="py-16 bg-[var(--card-bg)]" id="story-sec">
524
+ <div class="container mx-auto px-4">
525
+ <h2 class="text-3xl md:text-4xl font-bold font-orbitron text-[var(--primary)] mb-8 text-center" data-translate="storyTitle">Our Journey</h2>
526
+ <div class="timeline-container">
527
+ <div class="timeline-line"></div>
528
+ <div class="timeline-node left glass-morphism">
529
+ <h3 class="text-2xl font-bold mb-3" data-translate="story1Title">2023: Ignition in Alexandria</h3>
530
+ <p data-translate="story1Desc">MGZon AI sparks to life in Alexandria, Egypt, leveraging DeepSeek & FastAPI to launch the core chatbot – Empowering developers and e-commerce innovators globally.</p>
531
  </div>
532
+ <div class="timeline-node right glass-morphism">
533
+ <h3 class="text-2xl font-bold mb-3" data-translate="story2Title">2024: Global Expansion</h3>
534
+ <p data-translate="story2Desc">Seamless integrations with warehouses in USA, Canada, China; 5G/6G tech accelerates e-commerce automation and code generation for thousands.</p>
 
 
 
 
 
 
535
  </div>
536
+ <div class="timeline-node left glass-morphism">
537
+ <h3 class="text-2xl font-bold mb-3" data-translate="story3Title">2025-2026: Quantum Evolution</h3>
538
+ <p data-translate="story3Desc">Recognized by TechCrunch as MENA's AI leader; Pushing ethical AI boundaries in commerce and coding for a smarter future.</p>
 
 
 
 
 
 
 
 
 
 
 
 
539
  </div>
540
+ </div>
541
+ </div>
542
+ </section>
543
+
544
+ <!-- Our Vision Section -->
545
+ <section class="py-16">
546
+ <div class="container mx-auto px-4 text-center">
547
+ <h2 class="text-4xl md:text-6xl font-bold font-orbitron mb-12 neon-gradient" data-translate="visionTitle">Our Vision</h2>
548
+ <div class="glass-morphism max-w-3xl mx-auto p-8">
549
+ <img src="https://mgzon-mgzon-app.hf.space/static/images/Mark_Al-Asfar.png" alt="MGZon Vision" class="w-32 h-32 mx-auto mb-6 rounded-full ring-4 ring-[var(--primary)]" loading="lazy">
550
+ <h3 class="text-3xl font-bold mb-4" data-translate="visionDesc">Adaptive Intelligence for Tomorrow</h3>
551
+ <p class="text-lg mb-8" data-translate="visionDetails">MGZon AI fuses cutting-edge tech with real-world utility, democratizing AI for seamless e-commerce and effortless code creation.</p>
552
+ <a href="/profile" target="_blank" class="inline-flex items-center bg-gradient-to-r from-[var(--primary)] to-[var(--secondary)] text-black px-8 py-3 rounded-full font-semibold transition-all duration-300 hover:shadow-[var(--glow-primary)] hover:scale-105" data-translate="visionBtn">Explore Features <i class='bx bx-rocket ml-2'></i></a>
553
+ </div>
554
+ </div>
555
+ </section>
556
+
557
+ <!-- Project & AI Details Section -->
558
+ <section class="py-16 bg-[var(--card-bg)]">
559
+ <div class="container mx-auto px-4">
560
+ <h2 class="text-3xl md:text-4xl font-bold font-orbitron text-[var(--primary)] mb-8 text-center" data-translate="projectTitle">Project & AI Insights</h2>
561
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6 max-w-4xl mx-auto">
562
+ <div class="glass-morphism p-6">
563
+ <h3 class="text-xl font-bold mb-3" data-translate="aiTechTitle">Core AI Technologies</h3>
564
+ <ul class="text-base space-y-2">
565
+ <li>• DeepSeek for advanced NLP in chatbots</li>
566
+ <li>• FastAPI for scalable backend</li>
567
+ <li>• ML models for predictive e-commerce</li>
568
+ </ul>
569
  </div>
570
+ <div class="glass-morphism p-6">
571
+ <h3 class="text-xl font-bold mb-3" data-translate="projectHowTitle">How It Works</h3>
572
+ <p class="text-base" data-translate="projectHowDesc">AI analyzes user queries to generate code snippets or optimize e-commerce flows – Ethical, adaptive, and future-proof.</p>
 
 
 
573
  </div>
574
+ </div>
575
+ </div>
576
+ </section>
577
+
578
+ <!-- Our Team Section -->
579
+ <section class="py-16 bg-[var(--card-bg)]">
580
+ <div class="container mx-auto px-4">
581
+ <h2 class="text-4xl md:text-6xl font-bold font-orbitron text-center mb-12 neon-gradient" data-translate="teamTitle">Core Constellation</h2>
582
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-8 max-w-4xl mx-auto">
583
+ <div class="glass-morphism p-6 text-center">
584
+ <img src="https://mgzon-mgzon-app.hf.space/static/images/Sarah_D.jpeg" alt="Sarah Dayan" class="w-32 h-32 mx-auto mb-4 rounded-full ring-4 ring-[var(--secondary)]" loading="lazy">
585
+ <h3 class="text-2xl font-bold mb-3" data-translate="team1Name">Sarah Dayan</h3>
586
+ <p class="text-base opacity-90" data-translate="team1Desc">Lead AI Architect – Sculpting ML & chatbot symphonies for MGZon.</p>
 
 
 
 
 
 
 
587
  </div>
588
+ <div class="glass-morphism p-6 text-center">
589
+ <img src="https://mgzon-mgzon-app.hf.space/static/images/Leonardo.jpeg" alt="Leonardo Cuco" class="w-32 h-32 mx-auto mb-4 rounded-full ring-4 ring-[var(--accent)]" loading="lazy">
590
+ <h3 class="text-2xl font-bold mb-3" data-translate="team2Name">Leonardo Cuco</h3>
591
+ <p class="text-base opacity-90" data-translate="team2Desc">E-Commerce Oracle – Orchestrating digital commerce evolutions for MGZon.</p>
592
+ </div>
593
+ </div>
594
+ </div>
595
+ </section>
596
+
597
+ <!-- Achievements Section -->
598
+ <section class="py-16">
599
+ <div class="container mx-auto px-4">
600
+ <h2 class="text-4xl md:text-6xl font-bold font-orbitron text-center mb-12 neon-gradient" data-translate="achievementsTitle">Milestones</h2>
601
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-8 max-w-4xl mx-auto">
602
+ <div class="glass-morphism p-6">
603
+ <h3 class="text-2xl font-bold mb-4" data-translate="ach1Title">Global Reach</h3>
604
+ <p class="text-base opacity-90" data-translate="ach1Desc">Serving 10K+ users across 50 countries, powered by AI-driven constellations.</p>
605
+ </div>
606
+ <div class="glass-morphism p-6">
607
+ <h3 class="text-2xl font-bold mb-4" data-translate="ach2Title">Industry Acclaim</h3>
608
+ <p class="text-base opacity-90" data-translate="ach2Desc">Featured as TechCrunch's top MENA AI innovator – Leading 2024's breakthroughs.</p>
609
  </div>
610
+ </div>
611
+ </div>
612
+ </section>
613
+
614
+ <!-- Our Mission Section -->
615
+ <section class="py-16 bg-[var(--card-bg)]">
616
+ <div class="container mx-auto px-4 text-center">
617
+ <h2 class="text-4xl md:text-6xl font-bold font-orbitron mb-8 neon-gradient" data-translate="missionTitle">Our North Star</h2>
618
+ <div class="glass-morphism p-8 max-w-3xl mx-auto">
619
+ <p class="text-lg opacity-90" data-translate="missionDesc">Democratizing AI for creators & enterprises – Streamlining codecraft and amplifying e-commerce realms with ethical innovation and ingenuity.</p>
620
+ </div>
621
+ </div>
622
+ </section>
623
+
624
+ <!-- Contact Nexus -->
625
+ <footer class="py-16 relative overflow-hidden">
626
+ <div class="container mx-auto px-4 text-center">
627
+ <img src="https://mgzon-mgzon-app.hf.space/static/images/mg.svg" alt="MGZon Core" class="w-24 h-24 mx-auto mb-8 logo-pulse" loading="lazy">
628
+ <p class="mb-8 text-lg opacity-80" data-translate="footerCrafted">Powered by MGZon AI | Innovating in the MENA region</p>
629
+ <div class="contact-hub mb-8">
630
+ <div class="contact-pod" onclick="togglePanel('email')">
631
+ <i class="bx bx-mail-send contact-icon"></i>
632
+ <h4 class="font-bold mt-2" data-translate="contact1Title">Nexus Mail</h4>
633
+ <p><a href="mailto:[email protected]" class="hover:underline">[email protected]</a></p>
634
+ <div id="email-panel" class="details-panel">
635
+ <p data-translate="contact1Details">Transmit queries into the void – Responses warp in swiftly.</p>
636
+ <button onclick="togglePanel('email')" class="text-[var(--primary)] mt-2 text-sm underline" data-translate="collapseBtn">Collapse</button>
637
  </div>
638
  </div>
639
+ <div class="contact-pod" onclick="togglePanel('phone')">
640
+ <i class="bx bx-phone contact-icon"></i>
641
+ <h4 class="font-bold mt-2" data-translate="contact2Title">Voice Link</h4>
642
+ <p>+20 1212444617</p>
643
+ <div id="phone-panel" class="details-panel">
644
+ <p data-translate="contact2Details">Instant quantum sync for urgent transmissions.</p>
645
+ <button onclick="togglePanel('phone')" class="text-[var(--primary)] mt-2 text-sm underline" data-translate="collapseBtn">Collapse</button>
646
  </div>
647
  </div>
648
+ <div class="contact-pod" onclick="togglePanel('community')">
649
+ <i class="bx bx-group contact-icon"></i>
650
+ <h4 class="font-bold mt-2" data-translate="contact3Title">Collective</h4>
651
+ <p><a href="https://mgzon-mgzon-app.hf.space/community" class="hover:underline" data-translate="contact3Btn">Assemble</a></p>
652
+ <div id="community-panel" class="details-panel">
653
+ <p data-translate="contact3Details">Converge in the hive Ideas ignite, collaborations supernova.</p>
654
+ <button onclick="togglePanel('community')" class="text-[var(--primary)] mt-2 text-sm underline" data-translate="collapseBtn">Collapse</button>
655
  </div>
656
  </div>
657
+ <div class="contact-pod" onclick="togglePanel('docs')">
658
+ <i class="bx bx-code-alt contact-icon"></i>
659
+ <h4 class="font-bold mt-2" data-translate="contact4Title">Codex</h4>
660
+ <p><a href="/docs" class="hover:underline" data-translate="contact4Btn">Decrypt</a></p>
661
+ <div id="docs-panel" class="details-panel">
662
+ <p data-translate="contact4Details">Unlock the arcane APIs Seamless fusion awaits.</p>
663
+ <button onclick="togglePanel('docs')" class="text-[var(--primary)] mt-2 text-sm underline" data-translate="collapseBtn">Collapse</button>
664
  </div>
665
  </div>
666
  </div>
667
+ <div class="flex justify-center space-x-6 mb-8">
668
+ <a href="https://github.com/Mark-Lasfar/MGZon" class="text-2xl text-white hover:text-[var(--primary)] transition-all duration-300"><i class='bx bxl-github'></i></a>
669
+ <a href="https://x.com/MGZon" class="text-2xl text-white hover:text-[var(--primary)] transition-all duration-300"><i class='bx bxl-twitter'></i></a>
670
+ <a href="https://www.facebook.com/people/Mark-Al-Asfar/pfbid02GMisUQ8AqWkNZjoKtWFHH1tbdHuVscN1cjcFnZWy9HkRaAsmanBfT6mhySAyqpg4l/" class="text-2xl text-white hover:text-[var(--primary)] transition-all duration-300"><i class='bx bxl-facebook'></i></a>
671
  </div>
672
+ <p class="opacity-70 text-sm" data-translate="copyright">© 2026 MGZon AI. Eternal in the codeverse.</p>
673
  </div>
674
  </footer>
675
+
676
+ <!-- JavaScript للـ Hamburger Menu -->
677
  <script>
678
+ document.addEventListener('DOMContentLoaded', () => {
679
+ const hamburger = document.querySelector('.hamburger');
680
+ const navLinks = document.querySelector('.nav-links');
681
+ // إضافة كلاس active افتراضيًا على الموبايل
682
+ if (window.innerWidth <= 768) {
683
+ navLinks.classList.add('active');
 
 
 
 
 
 
 
 
 
 
 
 
684
  }
685
+ hamburger.addEventListener('click', () => {
686
+ navLinks.classList.toggle('active');
687
+ });
688
  });
689
+ </script>
690
+
691
+ <!-- JSON-LD -->
692
+ <script type="application/ld+json">
693
+ {
694
+ "@context": "https://schema.org",
695
+ "@type": "WebPage",
696
+ "name": "About MGZon AI",
697
+ "url": "https://mgzon-mgzon-app.hf.space/about",
698
+ "description": "Learn about MGZon AI's mission, technologies, and achievements in AI-powered e-commerce and code generation.",
699
+ "publisher": {
700
+ "@type": "Organization",
701
+ "name": "MGZon AI",
702
+ "logo": "https://mgzon-mgzon-app.hf.space/static/images/mg.svg"
703
+ },
704
+ "inLanguage": "en"
705
  }
706
  </script>
707
  </body>
templates/download.html ADDED
@@ -0,0 +1,409 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" dir="ltr">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-device-width, initial-scale=1.0">
6
+ <link rel="icon" href="/static/favicon.ico" type="image/x-icon" />
7
+ <link rel="sitemap" type="application/xml" title="Sitemap" href="/sitemap.xml" />
8
+ <meta name="description" content="Download the MGZon AI app to revolutionize your e-commerce and code generation experience with cutting-edge AI technology.">
9
+ <meta name="keywords" content="MGZon AI, download app, e-commerce, code generation, AI chatbot, mobile app, 2025 AI trends, 2026 trends">
10
+ <meta name="author" content="MGZon AI Team">
11
+ <meta name="robots" content="index, follow">
12
+ <title data-translate="title">Download MGZon AI App</title>
13
+ <link rel="canonical" href="https://mgzon-mgzon-app.hf.space/download" />
14
+ <link rel="icon" type="image/x-icon" href="https://mgzon-mgzon-app.hf.space/static/images/mg.svg">
15
+ <link rel="apple-touch-icon" href="https://mgzon-mgzon-app.hf.space/static/images/mg.svg">
16
+ <meta name="apple-mobile-web-app-capable" content="yes">
17
+ <meta name="apple-mobile-web-app-title" content="MGZon">
18
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
19
+ <meta name="theme-color" content="#00f0ff">
20
+ <!-- Open Graph -->
21
+ <meta property="og:title" content="Download MGZon AI App">
22
+ <meta property="og:description" content="Get the MGZon AI app to empower your e-commerce and coding with adaptive intelligence.">
23
+ <meta property="og:image" content="https://mgzon-mgzon-app.hf.space/static/images/mg.svg">
24
+ <meta property="og:url" content="https://mgzon-mgzon-app.hf.space/download">
25
+ <meta property="og:type" content="website">
26
+ <!-- Twitter Card -->
27
+ <meta name="twitter:card" content="summary_large_image">
28
+ <meta name="twitter:title" content="Download MGZon AI App">
29
+ <meta name="twitter:description" content="Get the MGZon AI app to empower your e-commerce and coding with adaptive intelligence.">
30
+ <meta name="twitter:image" content="https://mgzon-mgzon-app.hf.space/static/images/mg.svg">
31
+ <!-- Google Fonts -->
32
+ <link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700;900&family=Inter:wght@300;400;600;700&family=Cairo:wght@400;700&family=Roboto:wght@300;400;700&display=swap" rel="stylesheet">
33
+ <!-- Tailwind CSS -->
34
+ <script src="https://cdn.tailwindcss.com/3.4.17"></script>
35
+ <!-- GSAP for animations -->
36
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
37
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/ScrollTrigger.min.js"></script>
38
+ <!-- Boxicons -->
39
+ <link href="https://unpkg.com/[email protected]/css/boxicons.min.css" rel="stylesheet">
40
+
41
+ <script>
42
+ if (window.innerWidth > 768) {
43
+ const threeScript = document.createElement('script');
44
+ threeScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js';
45
+ document.head.appendChild(threeScript);
46
+ const particlesScript = document.createElement('script');
47
+ particlesScript.src = 'https://cdn.jsdelivr.net/npm/[email protected]/particles.min.js';
48
+ document.head.appendChild(particlesScript);
49
+ }
50
+ </script>
51
+
52
+ <style>
53
+ :root {
54
+ --primary: #00f0ff;
55
+ --secondary: #ff007a;
56
+ --accent: #6b21a8;
57
+ --background: #000;
58
+ --foreground: #f8f9fa;
59
+ --card-bg: rgba(10, 10, 10, 0.9);
60
+ --glow-primary: 0 0 25px #00f0ff;
61
+ --glow-secondary: 0 0 25px #ff007a;
62
+ }
63
+ [data-theme="light"] {
64
+ --background: #f8f9fa;
65
+ --foreground: #000;
66
+ --card-bg: rgba(248, 249, 250, 0.9);
67
+ }
68
+ body {
69
+ background: var(--background);
70
+ color: var(--foreground);
71
+ font-family: 'Inter', sans-serif;
72
+ overflow-x: hidden;
73
+ position: relative;
74
+ transition: background 0.3s, color 0.3s;
75
+ }
76
+ .rtl {
77
+ direction: rtl;
78
+ font-family: 'Cairo', sans-serif;
79
+ }
80
+ #particles-js, #3d-canvas {
81
+ position: fixed;
82
+ width: 100%;
83
+ height: 100%;
84
+ z-index: -1;
85
+ opacity: 0.3;
86
+ will-change: transform;
87
+ display: none;
88
+ }
89
+ @media (min-width: 769px) {
90
+ #particles-js, #3d-canvas { display: block; }
91
+ }
92
+ .neon-gradient {
93
+ background: linear-gradient(135deg, var(--primary), var(--secondary), var(--accent));
94
+ background-size: 300% 300%;
95
+ animation: gradientShift 5s ease infinite;
96
+ -webkit-background-clip: text;
97
+ -webkit-text-fill-color: transparent;
98
+ background-clip: text;
99
+ }
100
+ @keyframes gradientShift {
101
+ 0%, 100% { background-position: 0% 50%; }
102
+ 50% { background-position: 100% 50%; }
103
+ }
104
+ .glass-morphism {
105
+ background: rgba(255, 255, 255, 0.02);
106
+ backdrop-filter: blur(30px);
107
+ border: 1px solid rgba(255, 255, 255, 0.05);
108
+ border-radius: 16px;
109
+ box-shadow: 0 15px 30px rgba(0, 0, 0, 0.3);
110
+ transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
111
+ }
112
+ .glass-morphism:hover {
113
+ transform: translateY(-5px) scale(1.02);
114
+ box-shadow: 0 15px 30px rgba(0, 120, 255, 0.3);
115
+ border-color: var(--primary);
116
+ }
117
+ .hero-section {
118
+ background: radial-gradient(ellipse at center, rgba(0, 240, 255, 0.1) 0%, transparent 70%);
119
+ min-height: 80vh;
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: center;
123
+ position: relative;
124
+ }
125
+ .download-btn {
126
+ background: linear-gradient(to right, var(--primary), var(--secondary));
127
+ padding: 16px 32px;
128
+ border-radius: 50px;
129
+ font-size: 1.25rem;
130
+ font-weight: bold;
131
+ color: #000;
132
+ transition: all 0.3s ease;
133
+ }
134
+ .download-btn:hover {
135
+ transform: scale(1.05);
136
+ box-shadow: var(--glow-primary);
137
+ }
138
+ .nav-morph {
139
+ background: rgba(0, 0, 0, 0.5);
140
+ backdrop-filter: blur(20px);
141
+ border-bottom: 1px solid rgba(0, 240, 255, 0.2);
142
+ }
143
+ .theme-btn {
144
+ background: rgba(0, 240, 255, 0.1);
145
+ border: 1px solid var(--primary);
146
+ color: var(--primary);
147
+ border-radius: 50%;
148
+ width: 36px;
149
+ height: 36px;
150
+ transition: all 0.3s ease;
151
+ }
152
+ .theme-btn:hover {
153
+ background: var(--primary);
154
+ color: #000;
155
+ box-shadow: var(--glow-primary);
156
+ transform: rotate(180deg);
157
+ }
158
+ .voice-btn {
159
+ background: rgba(0, 240, 255, 0.1);
160
+ border: 1px solid var(--primary);
161
+ color: var(--primary);
162
+ border-radius: 50%;
163
+ width: 36px;
164
+ height: 36px;
165
+ transition: all 0.3s ease;
166
+ }
167
+ .voice-btn:hover {
168
+ background: var(--primary);
169
+ color: #000;
170
+ box-shadow: var(--glow-primary);
171
+ }
172
+ .logo-pulse {
173
+ animation: pulseLogo 2s infinite;
174
+ }
175
+ @keyframes pulseLogo {
176
+ 0%, 100% { transform: scale(1); }
177
+ 50% { transform: scale(1.05); }
178
+ }
179
+ .search-bar {
180
+ background: rgba(255,255,255,0.1);
181
+ border: 1px solid var(--primary);
182
+ color: var(--foreground);
183
+ padding: 6px 12px;
184
+ border-radius: 20px;
185
+ width: 100%;
186
+ max-width: 200px;
187
+ }
188
+ .voice-status {
189
+ position: fixed;
190
+ top: 80px;
191
+ right: 10px;
192
+ background: rgba(0,0,0,0.8);
193
+ color: var(--primary);
194
+ padding: 6px 12px;
195
+ border-radius: 20px;
196
+ display: none;
197
+ z-index: 1000;
198
+ }
199
+ /* تحسينات الـ Navbar */
200
+ .nav-container {
201
+ display: flex;
202
+ align-items: center;
203
+ justify-content: space-between;
204
+ max-width: 100%;
205
+ overflow-x: hidden;
206
+ }
207
+ .nav-links {
208
+ display: flex;
209
+ align-items: center;
210
+ space-x-4;
211
+ }
212
+ .hamburger {
213
+ display: none;
214
+ font-size: 24px;
215
+ color: var(--primary);
216
+ cursor: pointer;
217
+ }
218
+ .search-container {
219
+ display: flex;
220
+ align-items: center;
221
+ gap: 8px;
222
+ }
223
+ @media (max-width: 768px) {
224
+ .nav-container {
225
+ flex-wrap: wrap;
226
+ padding: 0.5rem 1rem;
227
+ }
228
+ .nav-links {
229
+ flex-direction: column;
230
+ position: absolute;
231
+ top: 60px;
232
+ right: 0;
233
+ background: var(--card-bg);
234
+ width: 100%;
235
+ padding: 1rem;
236
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
237
+ z-index: 40;
238
+ display: flex;
239
+ opacity: 0;
240
+ transform: translateY(-10px);
241
+ transition: opacity 0.3s ease, transform 0.3s ease;
242
+ }
243
+ .nav-links.active {
244
+ opacity: 1;
245
+ transform: translateY(0);
246
+ }
247
+ .hamburger {
248
+ display: block;
249
+ }
250
+ .search-container {
251
+ margin-top: 0.5rem;
252
+ width: 100%;
253
+ justify-content: flex-end;
254
+ }
255
+ .search-bar {
256
+ max-width: 150px;
257
+ }
258
+ .theme-btn, .voice-btn {
259
+ width: 32px;
260
+ height: 32px;
261
+ }
262
+ .hero-section {
263
+ min-height: 60vh;
264
+ }
265
+ .hero-section h1 {
266
+ font-size: 2.5rem;
267
+ }
268
+ .hero-section p {
269
+ font-size: 1rem;
270
+ }
271
+ .hero-section img {
272
+ width: 100px;
273
+ height: 100px;
274
+ }
275
+ .download-btn {
276
+ padding: 12px 24px;
277
+ font-size: 1rem;
278
+ }
279
+ }
280
+ </style>
281
+ </head>
282
+ <body>
283
+ <!-- 3D Ambient -->
284
+ <canvas id="3d-canvas"></canvas>
285
+ <!-- Particles -->
286
+ <div id="particles-js"></div>
287
+ <!-- Voice Status -->
288
+ <div id="voice-status" class="voice-status" data-translate="voiceStatus">Listening...</div>
289
+
290
+ <!-- Navigation -->
291
+ <nav class="fixed top-0 w-full nav-morph z-50 py-3">
292
+ <div class="container mx-auto px-4 nav-container">
293
+ <div class="flex items-center gap-4">
294
+ <a href="/" class="text-xl font-bold font-orbitron neon-gradient" data-translate="navLogo">
295
+ <img src="https://mgzon-mgzon-app.hf.space/static/images/mg.svg" alt="MGZon Logo" class="inline w-6 h-6 logo-pulse mr-2" loading="lazy">
296
+ MGZon AI
297
+ </a>
298
+ <div class="hamburger">
299
+ <i class='bx bx-menu'></i>
300
+ </div>
301
+ </div>
302
+ <div class="nav-links flex items-center space-x-4">
303
+ <a href="/" class="text-white hover:text-[var(--primary)] transition-all duration-300 ease-out" data-translate="navHome">Home</a>
304
+ <a href="/about" class="text-white hover:text-[var(--primary)] transition-all duration-300 ease-out" data-translate="navAbout">About</a>
305
+ <a href="/chat" class="text-white hover:text-[var(--primary)] transition-all duration-300 ease-out" data-translate="navContact">Launch Chatbot</a>
306
+ <select id="lang-toggle" class="bg-transparent text-white border-[var(--primary)] rounded-md px-2 py-1">
307
+ <option value="en">English</option>
308
+ <option value="ar">العربية</option>
309
+ <option value="fr">Français</option>
310
+ <option value="de">Deutsch</option>
311
+ </select>
312
+ <button id="theme-toggle" class="theme-btn" data-title-translate="themeTitle">
313
+ <i class='bx bx-sun'></i>
314
+ </button>
315
+ </div>
316
+ <div class="search-container">
317
+ <input type="text" id="search-input" class="search-bar" data-translate-placeholder="searchPlaceholder" placeholder="Search...">
318
+ <button id="voice-toggle" class="voice-btn" data-title-translate="voiceTitle">
319
+ <i class='bx bx-microphone'></i>
320
+ </button>
321
+ </div>
322
+ </div>
323
+ </nav>
324
+
325
+ <!-- Hero Section -->
326
+ <section class="hero-section relative min-h-screen flex items-center justify-center text-center pt-16">
327
+ <div class="container mx-auto px-4">
328
+ <img src="https://mgzon-mgzon-app.hf.space/static/images/mg.svg" alt="MGZon App" class="w-48 h-48 mx-auto mb-6 logo-pulse" loading="lazy">
329
+ <h1 class="text-5xl md:text-7xl font-bold font-orbitron neon-gradient mb-6" data-translate="heroTitle">Download MGZon AI</h1>
330
+ <p class="text-lg md:text-2xl max-w-3xl mx-auto opacity-80 mb-8" data-translate="heroDesc">Get the MGZon AI app to revolutionize your e-commerce and code generation experience with adaptive intelligence.</p>
331
+ <a href="https://drive.google.com/file/d/1-gtlJpAQI5ztA1s0EtQAP-RLxkfw2jG_/view?usp=sharing" download class="download-btn inline-flex items-center">
332
+ Download Now <i class="bx bx-download ml-2"></i>
333
+
334
+ </a>
335
+
336
+ </div>
337
+ </section>
338
+
339
+ <!-- Features Section -->
340
+ <section class="py-16 bg-[var(--card-bg)]">
341
+ <div class="container mx-auto px-4">
342
+ <h2 class="text-3xl md:text-4xl font-bold font-orbitron text-[var(--primary)] mb-8 text-center" data-translate="featuresTitle">Why MGZon AI?</h2>
343
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-6 max-w-4xl mx-auto">
344
+ <div class="glass-morphism p-6 text-center">
345
+ <i class="bx bx-rocket text-4xl text-[var(--primary)] mb-4"></i>
346
+ <h3 class="text-xl font-bold mb-3" data-translate="feature1Title">Fast & Efficient</h3>
347
+ <p class="text-base opacity-90" data-translate="feature1Desc">Streamline your e-commerce and coding tasks with lightning-fast AI.</p>
348
+ </div>
349
+ <div class="glass-morphism p-6 text-center">
350
+ <i class="bx bx-brain text-4xl text-[var(--primary)] mb-4"></i>
351
+ <h3 class="text-xl font-bold mb-3" data-translate="feature2Title">Smart Chatbot</h3>
352
+ <p class="text-base opacity-90" data-translate="feature2Desc">Powered by DeepSeek for intelligent, context-aware interactions.</p>
353
+ </div>
354
+ <div class="glass-morphism p-6 text-center">
355
+ <i class="bx bx-globe text-4xl text-[var(--primary)] mb-4"></i>
356
+ <h3 class="text-xl font-bold mb-3" data-translate="feature3Title">Global Reach</h3>
357
+ <p class="text-base opacity-90" data-translate="feature3Desc">Seamlessly connect with markets worldwide.</p>
358
+ </div>
359
+ </div>
360
+ </div>
361
+ </section>
362
+
363
+ <!-- Footer -->
364
+ <footer class="py-16 relative overflow-hidden">
365
+ <div class="container mx-auto px-4 text-center">
366
+ <img src="https://mgzon-mgzon-app.hf.space/static/images/mg.svg" alt="MGZon Core" class="w-24 h-24 mx-auto mb-8 logo-pulse" loading="lazy">
367
+ <p class="mb-8 text-lg opacity-80" data-translate="footerCrafted">Powered by MGZon AI | Innovating in the MENA region</p>
368
+ <div class="flex justify-center space-x-6 mb-8">
369
+ <a href="https://github.com/Mark-Lasfar/MGZon" class="text-2xl text-white hover:text-[var(--primary)] transition-all duration-300"><i class='bx bxl-github'></i></a>
370
+ <a href="https://x.com/MGZon" class="text-2xl text-white hover:text-[var(--primary)] transition-all duration-300"><i class='bx bxl-twitter'></i></a>
371
+ <a href="https://www.facebook.com/people/Mark-Al-Asfar/pfbid02GMisUQ8AqWkNZjoKtWFHH1tbdHuVscN1cjcFnZWy9HkRaAsmanBfT6mhySAyqpg4l/" class="text-2xl text-white hover:text-[var(--primary)] transition-all duration-300"><i class='bx bxl-facebook'></i></a>
372
+ </div>
373
+ <p class="opacity-70 text-sm" data-translate="copyright">© 2026 MGZon AI. Eternal in the codeverse.</p>
374
+ </div>
375
+ </footer>
376
+
377
+ <!-- JavaScript للـ Hamburger Menu -->
378
+ <script>
379
+ document.addEventListener('DOMContentLoaded', () => {
380
+ const hamburger = document.querySelector('.hamburger');
381
+ const navLinks = document.querySelector('.nav-links');
382
+ if (window.innerWidth <= 768) {
383
+ navLinks.classList.add('active');
384
+ }
385
+ hamburger.addEventListener('click', () => {
386
+ navLinks.classList.toggle('active');
387
+ });
388
+ });
389
+ </script>
390
+
391
+ <!-- JSON-LD -->
392
+ <script type="application/ld+json">
393
+ {
394
+ "@context": "https://schema.org",
395
+ "@type": "WebPage",
396
+ "name": "Download MGZon AI App",
397
+ "url": "https://mgzon-mgzon-app.hf.space/download",
398
+ "description": "Download the MGZon AI app to revolutionize your e-commerce and code generation experience with cutting-edge AI technology.",
399
+ "publisher": {
400
+ "@type": "Organization",
401
+ "name": "MGZon AI",
402
+ "logo": "https://mgzon-mgzon-app.hf.space/static/images/mg.svg"
403
+ },
404
+ "inLanguage": "en"
405
+ }
406
+ </script>
407
+ <script src="/static/js/about.js" defer></script>
408
+ </body>
409
+ </html>
templates/profile.html CHANGED
@@ -5,9 +5,11 @@
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <meta name="description" content="Profile of Mark Al-Asfar, AI Developer and Founder of MGZon Chatbot.">
7
  <meta name="keywords" content="Mark Al-Asfar, AI Developer, MGZon, Chatbot Developer, Full Stack Developer">
8
-
 
9
  <meta name="author" content="Mark Al-Asfar">
10
  <title>Mark Al-Asfar - AI Developer</title>
 
11
  <link rel="manifest" href="https://mgzon-mgzon-app.hf.space/static/manifest.json">
12
  <link rel="apple-touch-icon" sizes="180x180" href="https://mgzon-mgzon-app.hf.space/static/images/mg.svg">
13
  <meta name="apple-mobile-web-app-capable" content="yes">
@@ -32,7 +34,7 @@
32
  "@type": "Person",
33
  "name": "Mark Elasfar",
34
  "url": "https://mark-elasfar.web.app/",
35
- "image": "https://mark-elasfar.web.app/profile.jpg",
36
  "jobTitle": "AI Developer and Founder of MGZon",
37
  "description": "Mark Al-Asfar is a developer specializing in AI, web development, and e-commerce solutions. He is the founder of MGZon, an AI-powered chatbot platform.",
38
  "sameAs": [
@@ -43,7 +45,7 @@
43
  "worksFor": {
44
  "@type": "Organization",
45
  "name": "MGZon",
46
- "url": "https://mgzon-mgzon-app.hf.space/"
47
  },
48
  "inLanguage": "en"
49
  },
@@ -51,7 +53,7 @@
51
  "@context": "https://schema.org",
52
  "@type": "WebSite",
53
  "name": "MGZon Chatbot",
54
- "url": "https://mgzon-mgzon-app.hf.space/",
55
  "description": "MGZon is an AI-powered chatbot for code generation, web search, and e-commerce solutions, developed by Mark Al-Asfar.",
56
  "keywords": "AI chatbot, code generation, e-commerce AI, offline AI, TTS Arabic",
57
  "potentialAction": {
@@ -63,7 +65,8 @@
63
  }
64
  ]
65
  </script>
66
- <script src="https://cdn.tailwindcss.com"></script>
 
67
  <link href="https://cdn.jsdelivr.net/npm/[email protected]/css/boxicons.min.css" rel="stylesheet">
68
  <link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;700&family=Poppins:wght@300;400;600&display=swap" rel="stylesheet">
69
  <script src="https://cdnjs.cloudflare.com/ajax/libs/particles.js/2.0.0/particles.min.js"></script>
@@ -615,8 +618,8 @@
615
  </div>
616
  </div>
617
  <div class="flex justify-center gap-6 mt-6">
618
- <a href="https://github.com/Mark-Lasfar/MGZon" class="text-2xl text-[hsl(var(--foreground))] hover:text-[hsl(var(--primary))] transition"><i class="bx bxl-github"></i></a>
619
- <a href="https://x.com/MGZon" class="text-2xl text-[hsl(var(--foreground))] hover:text-[hsl(var(--primary))] transition"><i class="bx bxl-twitter"></i></a>
620
  <a href="https://www.facebook.com/people/Mark-Al-Asfar/pfbid02GMisUQ8AqWkNZjoKtWFHH1tbdHuVscN1cjcFnZWy9HkRaAsmanBfT6mhySAyqpg4l/" class="text-2xl text-[hsl(var(--foreground))] hover:text-[hsl(var(--primary))] transition"><i class="bx bxl-facebook"></i></a>
621
  </div>
622
  <p class="mt-6 text-center">© 2025 Mark Al-Asfar & MGZon AI. All rights reserved.</p>
 
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <meta name="description" content="Profile of Mark Al-Asfar, AI Developer and Founder of MGZon Chatbot.">
7
  <meta name="keywords" content="Mark Al-Asfar, AI Developer, MGZon, Chatbot Developer, Full Stack Developer">
8
+ <link rel="sitemap" type="application/xml" title="Sitemap" href="/sitemap.xml" />
9
+ <link rel="icon" href="/static/favicon.ico" type="image/x-icon" />
10
  <meta name="author" content="Mark Al-Asfar">
11
  <title>Mark Al-Asfar - AI Developer</title>
12
+ <link rel="canonical" href="https://mgzon-mgzon-app.hf.space/profile" />
13
  <link rel="manifest" href="https://mgzon-mgzon-app.hf.space/static/manifest.json">
14
  <link rel="apple-touch-icon" sizes="180x180" href="https://mgzon-mgzon-app.hf.space/static/images/mg.svg">
15
  <meta name="apple-mobile-web-app-capable" content="yes">
 
34
  "@type": "Person",
35
  "name": "Mark Elasfar",
36
  "url": "https://mark-elasfar.web.app/",
37
+ "image": "https://mark-elasfar.web.app/assets/img/mac.png",
38
  "jobTitle": "AI Developer and Founder of MGZon",
39
  "description": "Mark Al-Asfar is a developer specializing in AI, web development, and e-commerce solutions. He is the founder of MGZon, an AI-powered chatbot platform.",
40
  "sameAs": [
 
45
  "worksFor": {
46
  "@type": "Organization",
47
  "name": "MGZon",
48
+ "url": "https://mgzon-mgzon-app.hf.space/profile"
49
  },
50
  "inLanguage": "en"
51
  },
 
53
  "@context": "https://schema.org",
54
  "@type": "WebSite",
55
  "name": "MGZon Chatbot",
56
+ "url": "https://mgzon-mgzon-app.hf.space/profile",
57
  "description": "MGZon is an AI-powered chatbot for code generation, web search, and e-commerce solutions, developed by Mark Al-Asfar.",
58
  "keywords": "AI chatbot, code generation, e-commerce AI, offline AI, TTS Arabic",
59
  "potentialAction": {
 
65
  }
66
  ]
67
  </script>
68
+ <script src="https://cdn.tailwindcss.com/3.4.17"></script>
69
+
70
  <link href="https://cdn.jsdelivr.net/npm/[email protected]/css/boxicons.min.css" rel="stylesheet">
71
  <link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;700&family=Poppins:wght@300;400;600&display=swap" rel="stylesheet">
72
  <script src="https://cdnjs.cloudflare.com/ajax/libs/particles.js/2.0.0/particles.min.js"></script>
 
618
  </div>
619
  </div>
620
  <div class="flex justify-center gap-6 mt-6">
621
+ <a href="https://github.com/Mark-Lasfar" class="text-2xl text-[hsl(var(--foreground))] hover:text-[hsl(var(--primary))] transition"><i class="bx bxl-github"></i></a>
622
+ <a href="https://x.com/mgz0n" class="text-2xl text-[hsl(var(--foreground))] hover:text-[hsl(var(--primary))] transition"><i class="bx bxl-twitter"></i></a>
623
  <a href="https://www.facebook.com/people/Mark-Al-Asfar/pfbid02GMisUQ8AqWkNZjoKtWFHH1tbdHuVscN1cjcFnZWy9HkRaAsmanBfT6mhySAyqpg4l/" class="text-2xl text-[hsl(var(--foreground))] hover:text-[hsl(var(--primary))] transition"><i class="bx bxl-facebook"></i></a>
624
  </div>
625
  <p class="mt-6 text-center">© 2025 Mark Al-Asfar & MGZon AI. All rights reserved.</p>