Spaces:
Running
Running
I am super engineer and I want you to make a website. Is this to display my service like my apps and the projects I do before I want this web with modern Callum and scene modern colour and scene I have Arabic and English and light mode and dark mode. I have more than five years experience. I do a lot of projects with high school and complex projects my language flutter Python new GS the back in service super base GS this is the major reviews you'll get review from it.https://mostaql.com/u/flutter_dev201/reviews. Use the fruit and the reviews from that I work in Mostar and at work must kill and Upwork this project must work on desktop tablet and mobile make it beautiful you are who is a beautiful phone in Arabic use Cairo phone
Browse files- README.md +8 -5
- components/footer.js +138 -0
- components/header.js +161 -0
- index.html +314 -19
- script.js +190 -0
- style.css +42 -18
README.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: CodeCraft Studio ๐
|
| 3 |
+
colorFrom: blue
|
| 4 |
+
colorTo: red
|
| 5 |
+
emoji: ๐ณ
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite-v3
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Welcome to your new DeepSite project!
|
| 13 |
+
This project was created with [DeepSite](https://huggingface.co/deepsite).
|
components/footer.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class SiteFooter extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
|
| 5 |
+
let currentLang = 'en';
|
| 6 |
+
|
| 7 |
+
window.addEventListener('langChanged', (e) => {
|
| 8 |
+
currentLang = e.detail;
|
| 9 |
+
this.render();
|
| 10 |
+
});
|
| 11 |
+
|
| 12 |
+
if(typeof localStorage !== 'undefined') {
|
| 13 |
+
currentLang = localStorage.getItem('lang') || 'en';
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
this.render();
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
render() {
|
| 20 |
+
const isArabic = currentLang === 'ar';
|
| 21 |
+
const dir = isArabic ? 'rtl' : 'ltr';
|
| 22 |
+
const copyTxt = isArabic ? 'ุฌู
ูุน ุงูุญููู ู
ุญููุธุฉ 2023' : 'All rights reserved 2023';
|
| 23 |
+
const builtTxt = isArabic ? 'ุตูุน ุจูู ุญุจ' : 'Built with love';
|
| 24 |
+
|
| 25 |
+
this.shadowRoot.innerHTML = `
|
| 26 |
+
<style>
|
| 27 |
+
:host {
|
| 28 |
+
display: block;
|
| 29 |
+
background-color: #0f172a;
|
| 30 |
+
color: #94a3b8;
|
| 31 |
+
padding: 4rem 1.5rem;
|
| 32 |
+
text-align: center;
|
| 33 |
+
}
|
| 34 |
+
.footer-content {
|
| 35 |
+
max-width: 1200px;
|
| 36 |
+
margin: 0 auto;
|
| 37 |
+
display: grid;
|
| 38 |
+
grid-template-columns: 1fr;
|
| 39 |
+
gap: 2rem;
|
| 40 |
+
}
|
| 41 |
+
.logo-area h3 {
|
| 42 |
+
color: #ffffff;
|
| 43 |
+
font-size: 1.5rem;
|
| 44 |
+
font-weight: bold;
|
| 45 |
+
margin-bottom: 1rem;
|
| 46 |
+
}
|
| 47 |
+
.social-links {
|
| 48 |
+
display: flex;
|
| 49 |
+
justify-content: center;
|
| 50 |
+
gap: 1rem;
|
| 51 |
+
margin-top: 1rem;
|
| 52 |
+
}
|
| 53 |
+
.social-icon {
|
| 54 |
+
color: #94a3b8;
|
| 55 |
+
transition: color 0.3s;
|
| 56 |
+
}
|
| 57 |
+
.social-icon:hover {
|
| 58 |
+
color: #3b82f6;
|
| 59 |
+
}
|
| 60 |
+
.links-area h4 {
|
| 61 |
+
color: #ffffff;
|
| 62 |
+
margin-bottom: 1rem;
|
| 63 |
+
}
|
| 64 |
+
.links-area ul {
|
| 65 |
+
list-style: none;
|
| 66 |
+
padding: 0;
|
| 67 |
+
}
|
| 68 |
+
.links-area li {
|
| 69 |
+
margin-bottom: 0.5rem;
|
| 70 |
+
}
|
| 71 |
+
.links-area a {
|
| 72 |
+
color: #94a3b8;
|
| 73 |
+
text-decoration: none;
|
| 74 |
+
transition: color 0.3s;
|
| 75 |
+
}
|
| 76 |
+
.links-area a:hover {
|
| 77 |
+
color: #3b82f6;
|
| 78 |
+
}
|
| 79 |
+
.copyright {
|
| 80 |
+
margin-top: 3rem;
|
| 81 |
+
padding-top: 2rem;
|
| 82 |
+
border-top: 1px solid #1e293b;
|
| 83 |
+
font-size: 0.875rem;
|
| 84 |
+
}
|
| 85 |
+
@media (min-width: 768px) {
|
| 86 |
+
.footer-content {
|
| 87 |
+
grid-template-columns: repeat(3, 1fr);
|
| 88 |
+
text-align: left;
|
| 89 |
+
}
|
| 90 |
+
/* RTL Adjustments */
|
| 91 |
+
[dir="rtl"] .footer-content {
|
| 92 |
+
text-align: right;
|
| 93 |
+
}
|
| 94 |
+
.social-links {
|
| 95 |
+
justify-content: flex-start;
|
| 96 |
+
}
|
| 97 |
+
[dir="rtl"] .social-links {
|
| 98 |
+
justify-content: flex-end;
|
| 99 |
+
}
|
| 100 |
+
}
|
| 101 |
+
</style>
|
| 102 |
+
<div dir="${dir}">
|
| 103 |
+
<div class="footer-content">
|
| 104 |
+
<div class="logo-area">
|
| 105 |
+
<h3>Super Engineer</h3>
|
| 106 |
+
<p>${isArabic ? 'ู
ุทูุฑ ู
ุชูุงู
ู ููุญููู ุงูุจุฑู
ุฌูุฉ ุงูุญุฏูุซุฉ' : 'Full-stack Developer for Modern Solutions'}</p>
|
| 107 |
+
<div class="social-links">
|
| 108 |
+
<a href="#" class="social-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></a>
|
| 109 |
+
<a href="#" class="social-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle></svg></a>
|
| 110 |
+
<a href="#" class="social-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line></svg></a>
|
| 111 |
+
</div>
|
| 112 |
+
</div>
|
| 113 |
+
<div class="links-area">
|
| 114 |
+
<h4>${isArabic ? 'ุฑูุงุจุท ุณุฑูุนุฉ' : 'Quick Links'}</h4>
|
| 115 |
+
<ul>
|
| 116 |
+
<li><a href="#home">${isArabic ? 'ุงูุฑุฆูุณูุฉ' : 'Home'}</a></li>
|
| 117 |
+
<li><a href="#projects">${isArabic ? 'ุงูู
ุดุงุฑูุน' : 'Projects'}</a></li>
|
| 118 |
+
<li><a href="#contact">${isArabic ? 'ุงุชุตู ุจู' : 'Contact'}</a></li>
|
| 119 |
+
</ul>
|
| 120 |
+
</div>
|
| 121 |
+
<div class="links-area">
|
| 122 |
+
<h4>${isArabic ? 'ุงูู
ูุตุงุช' : 'Platforms'}</h4>
|
| 123 |
+
<ul>
|
| 124 |
+
<li><a href="#">Mostaql</a></li>
|
| 125 |
+
<li><a href="#">Khamsat</a></li>
|
| 126 |
+
<li><a href="#">Upwork</a></li>
|
| 127 |
+
</ul>
|
| 128 |
+
</div>
|
| 129 |
+
</div>
|
| 130 |
+
<div class="copyright">
|
| 131 |
+
<p>© ${copyTxt}. ${builtTxt} โค๏ธ</p>
|
| 132 |
+
</div>
|
| 133 |
+
</div>
|
| 134 |
+
`;
|
| 135 |
+
}
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
customElements.define('site-footer', SiteFooter);
|
components/header.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class SiteHeader extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
|
| 5 |
+
// Initial State
|
| 6 |
+
let currentLang = 'en';
|
| 7 |
+
let currentTheme = 'light';
|
| 8 |
+
|
| 9 |
+
// Listen for global state changes
|
| 10 |
+
window.addEventListener('langChanged', (e) => {
|
| 11 |
+
currentLang = e.detail;
|
| 12 |
+
this.render();
|
| 13 |
+
});
|
| 14 |
+
|
| 15 |
+
window.addEventListener('themeChanged', (e) => {
|
| 16 |
+
currentTheme = e.detail;
|
| 17 |
+
this.render();
|
| 18 |
+
});
|
| 19 |
+
|
| 20 |
+
// Load initial state from localStorage if possible (fallback)
|
| 21 |
+
if(typeof localStorage !== 'undefined') {
|
| 22 |
+
currentLang = localStorage.getItem('lang') || 'en';
|
| 23 |
+
currentTheme = localStorage.getItem('theme') || 'light';
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
this.render();
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
render() {
|
| 30 |
+
const isArabic = this.getAttribute('lang') === 'ar' || currentLang === 'ar';
|
| 31 |
+
const isDark = currentTheme === 'dark';
|
| 32 |
+
|
| 33 |
+
// Text Content
|
| 34 |
+
const homeTxt = isArabic ? 'ุงูุฑุฆูุณูุฉ' : 'Home';
|
| 35 |
+
const servicesTxt = isArabic ? 'ุฎุฏู
ุงุชู' : 'Services';
|
| 36 |
+
const portfolioTxt = isArabic ? 'ุฃุนู
ุงูู' : 'Portfolio';
|
| 37 |
+
const reviewsTxt = isArabic ? 'ุชูููู
ุงุชู' : 'Reviews';
|
| 38 |
+
const contactTxt = isArabic ? 'ุชูุงุตู ู
ุนู' : 'Contact';
|
| 39 |
+
|
| 40 |
+
// Theme Icon
|
| 41 |
+
const themeIcon = isDark ? 'sun' : 'moon';
|
| 42 |
+
|
| 43 |
+
// Lang Text
|
| 44 |
+
const langTxt = isArabic ? 'English' : 'ุงูุนุฑุจูุฉ';
|
| 45 |
+
|
| 46 |
+
this.shadowRoot.innerHTML = `
|
| 47 |
+
<style>
|
| 48 |
+
:host {
|
| 49 |
+
display: block;
|
| 50 |
+
position: sticky;
|
| 51 |
+
top: 0;
|
| 52 |
+
z-index: 50;
|
| 53 |
+
background-color: ${isDark ? '#1e293b' : '#ffffff'};
|
| 54 |
+
border-bottom: 1px solid ${isDark ? '#334155' : '#e2e8f0'};
|
| 55 |
+
transition: all 0.3s ease;
|
| 56 |
+
}
|
| 57 |
+
nav {
|
| 58 |
+
max-width: 1200px;
|
| 59 |
+
margin: 0 auto;
|
| 60 |
+
padding: 1rem 1.5rem;
|
| 61 |
+
display: flex;
|
| 62 |
+
justify-content: space-between;
|
| 63 |
+
align-items: center;
|
| 64 |
+
}
|
| 65 |
+
.logo {
|
| 66 |
+
font-weight: 900;
|
| 67 |
+
font-size: 1.5rem;
|
| 68 |
+
color: #2563eb; /* Primary 600 */
|
| 69 |
+
text-decoration: none;
|
| 70 |
+
display: flex;
|
| 71 |
+
align-items: center;
|
| 72 |
+
}
|
| 73 |
+
.nav-links {
|
| 74 |
+
display: none;
|
| 75 |
+
}
|
| 76 |
+
.nav-links a {
|
| 77 |
+
margin: 0 1rem;
|
| 78 |
+
text-decoration: none;
|
| 79 |
+
color: ${isDark ? '#f1f5f9' : '#334155'};
|
| 80 |
+
font-weight: 500;
|
| 81 |
+
transition: color 0.2s;
|
| 82 |
+
}
|
| 83 |
+
.nav-links a:hover {
|
| 84 |
+
color: #2563eb;
|
| 85 |
+
}
|
| 86 |
+
.controls {
|
| 87 |
+
display: flex;
|
| 88 |
+
align-items: center;
|
| 89 |
+
gap: 1rem;
|
| 90 |
+
}
|
| 91 |
+
.btn-icon {
|
| 92 |
+
background: none;
|
| 93 |
+
border: 1px solid ${isDark ? '#475569' : '#e2e8f0'};
|
| 94 |
+
border-radius: 0.5rem;
|
| 95 |
+
padding: 0.5rem;
|
| 96 |
+
cursor: pointer;
|
| 97 |
+
color: ${isDark ? '#f1f5f9' : '#334155'};
|
| 98 |
+
transition: all 0.2s;
|
| 99 |
+
display: flex;
|
| 100 |
+
align-items: center;
|
| 101 |
+
justify-content: center;
|
| 102 |
+
}
|
| 103 |
+
.btn-icon:hover {
|
| 104 |
+
background-color: ${isDark ? '#334155' : '#f1f5f9'};
|
| 105 |
+
border-color: #2563eb;
|
| 106 |
+
}
|
| 107 |
+
.lang-btn {
|
| 108 |
+
font-size: 0.875rem;
|
| 109 |
+
font-weight: 600;
|
| 110 |
+
padding: 0.5rem 0.75rem;
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
@media (min-width: 768px) {
|
| 114 |
+
.nav-links {
|
| 115 |
+
display: flex;
|
| 116 |
+
}
|
| 117 |
+
}
|
| 118 |
+
</style>
|
| 119 |
+
<nav>
|
| 120 |
+
<a href="#" class="logo">
|
| 121 |
+
<span style="font-size: 1.8rem; margin-right: 0.5rem; margin-left: 0.5rem;">๐</span>
|
| 122 |
+
<span>SuperEng</span>
|
| 123 |
+
</a>
|
| 124 |
+
<div class="nav-links">
|
| 125 |
+
<a href="#home">${homeTxt}</a>
|
| 126 |
+
<a href="#projects">${portfolioTxt}</a>
|
| 127 |
+
<a href="#contact">${contactTxt}</a>
|
| 128 |
+
</div>
|
| 129 |
+
<div class="controls">
|
| 130 |
+
<button class="btn-icon" id="lang-toggle" aria-label="Toggle Language">
|
| 131 |
+
${langTxt}
|
| 132 |
+
</button>
|
| 133 |
+
<button class="btn-icon" id="theme-toggle" aria-label="Toggle Theme">
|
| 134 |
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
| 135 |
+
${this.getIconSvg(themeIcon)}
|
| 136 |
+
</svg>
|
| 137 |
+
</button>
|
| 138 |
+
</div>
|
| 139 |
+
</nav>
|
| 140 |
+
`;
|
| 141 |
+
|
| 142 |
+
// Add Event Listeners
|
| 143 |
+
this.shadowRoot.getElementById('lang-toggle').addEventListener('click', () => {
|
| 144 |
+
window.toggleLanguage();
|
| 145 |
+
});
|
| 146 |
+
|
| 147 |
+
this.shadowRoot.getElementById('theme-toggle').addEventListener('click', () => {
|
| 148 |
+
window.toggleTheme();
|
| 149 |
+
});
|
| 150 |
+
}
|
| 151 |
+
|
| 152 |
+
getIconSvg(name) {
|
| 153 |
+
const icons = {
|
| 154 |
+
sun: '<circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>',
|
| 155 |
+
moon: '<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>'
|
| 156 |
+
};
|
| 157 |
+
return icons[name] || '';
|
| 158 |
+
}
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
customElements.define('site-header', SiteHeader);
|
index.html
CHANGED
|
@@ -1,19 +1,314 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en" class="scroll-smooth">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Super Engineer | Portfolio</title>
|
| 7 |
+
|
| 8 |
+
<!-- Google Fonts: Cairo (Arabic) and Inter (English) -->
|
| 9 |
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 10 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 11 |
+
<link href="https://fonts.googleapis.com/css2?family=Cairo:wght@300;400;600;700;900&family=Inter:wght@300;400;600;700;900&display=swap" rel="stylesheet">
|
| 12 |
+
|
| 13 |
+
<link rel="stylesheet" href="style.css">
|
| 14 |
+
|
| 15 |
+
<!-- Tailwind CSS -->
|
| 16 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 17 |
+
<script>
|
| 18 |
+
tailwind.config = {
|
| 19 |
+
darkMode: 'class',
|
| 20 |
+
theme: {
|
| 21 |
+
extend: {
|
| 22 |
+
fontFamily: {
|
| 23 |
+
sans: ['Inter', 'Cairo', 'sans-serif'],
|
| 24 |
+
},
|
| 25 |
+
colors: {
|
| 26 |
+
primary: {
|
| 27 |
+
50: '#eff6ff',
|
| 28 |
+
100: '#dbeafe',
|
| 29 |
+
200: '#bfdbfe',
|
| 30 |
+
300: '#93c5fd',
|
| 31 |
+
400: '#60a5fa',
|
| 32 |
+
500: '#3b82f6',
|
| 33 |
+
600: '#2563eb', // Primary Brand Color
|
| 34 |
+
700: '#1d4ed8',
|
| 35 |
+
800: '#1e40af',
|
| 36 |
+
900: '#1e3a8a',
|
| 37 |
+
},
|
| 38 |
+
secondary: {
|
| 39 |
+
50: '#ecfdf5',
|
| 40 |
+
100: '#d1fae5',
|
| 41 |
+
200: '#a7f3d0',
|
| 42 |
+
300: '#6ee7b7',
|
| 43 |
+
400: '#34d399',
|
| 44 |
+
500: '#10b981', // Secondary Brand Color
|
| 45 |
+
600: '#059669',
|
| 46 |
+
700: '#047857',
|
| 47 |
+
800: '#065f46',
|
| 48 |
+
900: '#064e3b',
|
| 49 |
+
}
|
| 50 |
+
}
|
| 51 |
+
}
|
| 52 |
+
}
|
| 53 |
+
}
|
| 54 |
+
</script>
|
| 55 |
+
|
| 56 |
+
<!-- Feather Icons -->
|
| 57 |
+
<script src="https://unpkg.com/feather-icons"></script>
|
| 58 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 59 |
+
</head>
|
| 60 |
+
<body class="bg-gray-50 text-gray-900 dark:bg-slate-900 dark:text-gray-100 transition-colors duration-300 font-sans">
|
| 61 |
+
|
| 62 |
+
<!-- Web Components -->
|
| 63 |
+
<site-header></site-header>
|
| 64 |
+
|
| 65 |
+
<main>
|
| 66 |
+
<!-- Hero Section -->
|
| 67 |
+
<section id="home" class="relative pt-20 pb-32 overflow-hidden">
|
| 68 |
+
<div class="absolute inset-0 z-0 opacity-10 dark:opacity-20">
|
| 69 |
+
<img src="http://static.photos/technology/1200x630/10" alt="Background" class="w-full h-full object-cover">
|
| 70 |
+
</div>
|
| 71 |
+
<div class="container mx-auto px-6 relative z-10 text-center">
|
| 72 |
+
<span class="inline-block py-1 px-3 rounded-full bg-primary-100 dark:bg-primary-900 text-primary-600 dark:text-primary-300 text-sm font-semibold mb-4 animate-bounce">
|
| 73 |
+
<i data-feather="code" class="w-4 h-4 inline mr-1"></i> Available for hire
|
| 74 |
+
</span>
|
| 75 |
+
<h1 class="text-5xl md:text-7xl font-black mb-6 tracking-tight leading-tight" data-i18n="heroTitle">
|
| 76 |
+
Super Engineer
|
| 77 |
+
</h1>
|
| 78 |
+
<p class="text-xl md:text-2xl text-gray-600 dark:text-gray-300 max-w-2xl mx-auto mb-10" data-i18n="heroSubtitle">
|
| 79 |
+
Expert in Flutter, Python, Node.js & Supabase. Building complex, high-performance apps with 5+ years of experience.
|
| 80 |
+
</p>
|
| 81 |
+
<div class="flex flex-col sm:flex-row justify-center gap-4">
|
| 82 |
+
<a href="#projects" class="px-8 py-4 bg-primary-600 hover:bg-primary-700 text-white rounded-xl font-bold transition-all shadow-lg hover:shadow-primary-500/30 flex items-center justify-center gap-2">
|
| 83 |
+
<i data-feather="folder"></i> <span data-i18n="viewProjects">View Projects</span>
|
| 84 |
+
</a>
|
| 85 |
+
<a href="#contact" class="px-8 py-4 bg-white dark:bg-slate-800 border border-gray-200 dark:border-slate-700 hover:border-primary-500 text-gray-800 dark:text-white rounded-xl font-bold transition-all flex items-center justify-center gap-2">
|
| 86 |
+
<i data-feather="mail"></i> <span data-i18n="contactMe">Contact Me</span>
|
| 87 |
+
</a>
|
| 88 |
+
</div>
|
| 89 |
+
</div>
|
| 90 |
+
</section>
|
| 91 |
+
|
| 92 |
+
<!-- Skills Section -->
|
| 93 |
+
<section class="py-20 bg-white dark:bg-slate-800">
|
| 94 |
+
<div class="container mx-auto px-6">
|
| 95 |
+
<div class="text-center mb-16">
|
| 96 |
+
<h2 class="text-3xl font-bold mb-4" data-i18n="mySkills">My Tech Stack</h2>
|
| 97 |
+
<div class="w-20 h-1 bg-secondary-500 mx-auto rounded"></div>
|
| 98 |
+
</div>
|
| 99 |
+
<div class="grid grid-cols-2 md:grid-cols-4 gap-8">
|
| 100 |
+
<!-- Skill Items -->
|
| 101 |
+
<div class="p-6 bg-gray-50 dark:bg-slate-700 rounded-2xl text-center hover:transform hover:-translate-y-2 transition-transform duration-300 shadow-sm">
|
| 102 |
+
<div class="w-16 h-16 mx-auto mb-4 bg-blue-100 text-blue-600 rounded-full flex items-center justify-center">
|
| 103 |
+
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/flutter/flutter-original.svg" class="w-10 h-10" alt="Flutter">
|
| 104 |
+
</div>
|
| 105 |
+
<h3 class="font-bold text-lg">Flutter</h3>
|
| 106 |
+
<p class="text-sm text-gray-500 dark:text-gray-400">Cross-platform Apps</p>
|
| 107 |
+
</div>
|
| 108 |
+
<div class="p-6 bg-gray-50 dark:bg-slate-700 rounded-2xl text-center hover:transform hover:-translate-y-2 transition-transform duration-300 shadow-sm">
|
| 109 |
+
<div class="w-16 h-16 mx-auto mb-4 bg-yellow-100 text-yellow-600 rounded-full flex items-center justify-center">
|
| 110 |
+
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-original.svg" class="w-10 h-10" alt="Python">
|
| 111 |
+
</div>
|
| 112 |
+
<h3 class="font-bold text-lg">Python</h3>
|
| 113 |
+
<p class="text-sm text-gray-500 dark:text-gray-400">AI & Backend</p>
|
| 114 |
+
</div>
|
| 115 |
+
<div class="p-6 bg-gray-50 dark:bg-slate-700 rounded-2xl text-center hover:transform hover:-translate-y-2 transition-transform duration-300 shadow-sm">
|
| 116 |
+
<div class="w-16 h-16 mx-auto mb-4 bg-green-100 text-green-600 rounded-full flex items-center justify-center">
|
| 117 |
+
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nodejs/nodejs-original.svg" class="w-10 h-10" alt="Node.js">
|
| 118 |
+
</div>
|
| 119 |
+
<h3 class="font-bold text-lg">Node.js</h3>
|
| 120 |
+
<p class="text-sm text-gray-500 dark:text-gray-400">Backend Services</p>
|
| 121 |
+
</div>
|
| 122 |
+
<div class="p-6 bg-gray-50 dark:bg-slate-700 rounded-2xl text-center hover:transform hover:-translate-y-2 transition-transform duration-300 shadow-sm">
|
| 123 |
+
<div class="w-16 h-16 mx-auto mb-4 bg-emerald-100 text-emerald-600 rounded-full flex items-center justify-center">
|
| 124 |
+
<!-- Supabase SVG Icon approximation -->
|
| 125 |
+
<svg class="w-10 h-10" viewBox="0 0 24 24" fill="currentColor"><path d="M12.005 2.009c-5.525 0-10 4.475-10 10s4.475 10 10 10c5.525 0 10-4.475 10-10s-4.475-10-10-10zm-.496 16.496H7.507v-4.002h4.002v4.002zm0-5.503H7.507V8.999h4.002v4.003zm5.503 5.503h-4.002v-4.002h4.002v4.002zm0-5.503h-4.002V8.999h4.002v4.003z"/></svg>
|
| 126 |
+
</div>
|
| 127 |
+
<h3 class="font-bold text-lg">Supabase</h3>
|
| 128 |
+
<p class="text-sm text-gray-500 dark:text-gray-400">Database & Auth</p>
|
| 129 |
+
</div>
|
| 130 |
+
</div>
|
| 131 |
+
</div>
|
| 132 |
+
</section>
|
| 133 |
+
|
| 134 |
+
<!-- Stats Section -->
|
| 135 |
+
<section class="py-16 bg-primary-600 text-white">
|
| 136 |
+
<div class="container mx-auto px-6">
|
| 137 |
+
<div class="grid grid-cols-2 md:grid-cols-4 gap-8 text-center">
|
| 138 |
+
<div>
|
| 139 |
+
<div class="text-4xl font-black mb-1">5+</div>
|
| 140 |
+
<div class="text-primary-100 text-sm" data-i18n="yearsExp">Years Experience</div>
|
| 141 |
+
</div>
|
| 142 |
+
<div>
|
| 143 |
+
<div class="text-4xl font-black mb-1">50+</div>
|
| 144 |
+
<div class="text-primary-100 text-sm" data-i18n="projectsDone">Projects Done</div>
|
| 145 |
+
</div>
|
| 146 |
+
<div>
|
| 147 |
+
<div class="text-4xl font-black mb-1">100%</div>
|
| 148 |
+
<div class="text-primary-100 text-sm" data-i18n="satisfaction">Client Satisfaction</div>
|
| 149 |
+
</div>
|
| 150 |
+
<div>
|
| 151 |
+
<div class="text-4xl font-black mb-1">24/7</div>
|
| 152 |
+
<div class="text-primary-100 text-sm" data-i18n="support">Support</div>
|
| 153 |
+
</div>
|
| 154 |
+
</div>
|
| 155 |
+
</div>
|
| 156 |
+
</section>
|
| 157 |
+
|
| 158 |
+
<!-- Projects Section -->
|
| 159 |
+
<section id="projects" class="py-20 bg-gray-50 dark:bg-slate-900">
|
| 160 |
+
<div class="container mx-auto px-6">
|
| 161 |
+
<div class="flex flex-col md:flex-row justify-between items-end mb-12">
|
| 162 |
+
<div>
|
| 163 |
+
<h2 class="text-3xl font-bold mb-4" data-i18n="featuredProjects">Featured Projects</h2>
|
| 164 |
+
<div class="w-20 h-1 bg-primary-500 rounded"></div>
|
| 165 |
+
</div>
|
| 166 |
+
<div class="mt-4 md:mt-0">
|
| 167 |
+
<span class="text-sm text-gray-500 dark:text-gray-400" data-i18n="projectsDesc">High complexity mobile and web apps</span>
|
| 168 |
+
</div>
|
| 169 |
+
</div>
|
| 170 |
+
|
| 171 |
+
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8" id="projects-grid">
|
| 172 |
+
<!-- Project 1 -->
|
| 173 |
+
<div class="bg-white dark:bg-slate-800 rounded-2xl overflow-hidden shadow-lg group">
|
| 174 |
+
<div class="relative overflow-hidden h-48">
|
| 175 |
+
<img src="http://static.photos/mobile/640x360/1" alt="E-commerce App" class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500">
|
| 176 |
+
<div class="absolute top-4 right-4 bg-white/90 dark:bg-black/80 px-3 py-1 rounded-full text-xs font-bold text-primary-600">Flutter</div>
|
| 177 |
+
</div>
|
| 178 |
+
<div class="p-6">
|
| 179 |
+
<h3 class="text-xl font-bold mb-2" data-i18n="proj1Title">Giant E-commerce App</h3>
|
| 180 |
+
<p class="text-gray-600 dark:text-gray-400 mb-4 text-sm" data-i18n="proj1Desc">A complete shopping platform with payment gateways, admin panel, and real-time tracking.</p>
|
| 181 |
+
<a href="#" class="text-primary-600 font-bold text-sm hover:underline inline-flex items-center">
|
| 182 |
+
<span data-i18n="viewDetails">View Details</span> <i data-feather="arrow-right" class="w-4 h-4 ml-1"></i>
|
| 183 |
+
</a>
|
| 184 |
+
</div>
|
| 185 |
+
</div>
|
| 186 |
+
|
| 187 |
+
<!-- Project 2 -->
|
| 188 |
+
<div class="bg-white dark:bg-slate-800 rounded-2xl overflow-hidden shadow-lg group">
|
| 189 |
+
<div class="relative overflow-hidden h-48">
|
| 190 |
+
<img src="http://static.photos/technology/640x360/2" alt="Dashboard" class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500">
|
| 191 |
+
<div class="absolute top-4 right-4 bg-white/90 dark:bg-black/80 px-3 py-1 rounded-full text-xs font-bold text-green-600">Python + Supabase</div>
|
| 192 |
+
</div>
|
| 193 |
+
<div class="p-6">
|
| 194 |
+
<h3 class="text-xl font-bold mb-2" data-i18n="proj2Title">SaaS Analytics Dashboard</h3>
|
| 195 |
+
<p class="text-gray-600 dark:text-gray-400 mb-4 text-sm" data-i18n="proj2Desc">Data visualization tool handling large datasets with complex queries and reporting.</p>
|
| 196 |
+
<a href="#" class="text-primary-600 font-bold text-sm hover:underline inline-flex items-center">
|
| 197 |
+
<span data-i18n="viewDetails">View Details</span> <i data-feather="arrow-right" class="w-4 h-4 ml-1"></i>
|
| 198 |
+
</a>
|
| 199 |
+
</div>
|
| 200 |
+
</div>
|
| 201 |
+
|
| 202 |
+
<!-- Project 3 -->
|
| 203 |
+
<div class="bg-white dark:bg-slate-800 rounded-2xl overflow-hidden shadow-lg group">
|
| 204 |
+
<div class="relative overflow-hidden h-48">
|
| 205 |
+
<img src="http://static.photos/office/640x360/3" alt="Delivery App" class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500">
|
| 206 |
+
<div class="absolute top-4 right-4 bg-white/90 dark:bg-black/80 px-3 py-1 rounded-full text-xs font-bold text-orange-600">Node.js</div>
|
| 207 |
+
</div>
|
| 208 |
+
<div class="p-6">
|
| 209 |
+
<h3 class="text-xl font-bold mb-2" data-i18n="proj3Title">On-Demand Delivery Service</h3>
|
| 210 |
+
<p class="text-gray-600 dark:text-gray-400 mb-4 text-sm" data-i18n="proj3Desc">Real-time location tracking, driver app, and customer interface with socket.io.</p>
|
| 211 |
+
<a href="#" class="text-primary-600 font-bold text-sm hover:underline inline-flex items-center">
|
| 212 |
+
<span data-i18n="viewDetails">View Details</span> <i data-feather="arrow-right" class="w-4 h-4 ml-1"></i>
|
| 213 |
+
</a>
|
| 214 |
+
</div>
|
| 215 |
+
</div>
|
| 216 |
+
</div>
|
| 217 |
+
</div>
|
| 218 |
+
</section>
|
| 219 |
+
|
| 220 |
+
<!-- Reviews Section -->
|
| 221 |
+
<section class="py-20 bg-white dark:bg-slate-800 relative overflow-hidden">
|
| 222 |
+
<div class="container mx-auto px-6 relative z-10">
|
| 223 |
+
<div class="text-center mb-16">
|
| 224 |
+
<h2 class="text-3xl font-bold mb-4" data-i18n="clientReviews">Client Reviews</h2>
|
| 225 |
+
<p class="text-gray-500 dark:text-gray-400">Trusted by clients on Mostaql, Khamsat, and Upwork</p>
|
| 226 |
+
<div class="w-20 h-1 bg-secondary-500 mx-auto mt-4 rounded"></div>
|
| 227 |
+
</div>
|
| 228 |
+
|
| 229 |
+
<!-- Platforms -->
|
| 230 |
+
<div class="flex justify-center gap-6 mb-12 opacity-70 grayscale hover:grayscale-0 transition-all duration-300">
|
| 231 |
+
<!-- Placeholders for platform logos using text/icons since SVGs might be bulky -->
|
| 232 |
+
<div class="flex items-center font-bold text-xl"><i data-feather="briefcase" class="mr-2"></i> Mostaql</div>
|
| 233 |
+
<div class="flex items-center font-bold text-xl"><i data-feather="star" class="mr-2"></i> Khamsat</div>
|
| 234 |
+
<div class="flex items-center font-bold text-xl"><i data-feather="layers" class="mr-2"></i> Upwork</div>
|
| 235 |
+
</div>
|
| 236 |
+
|
| 237 |
+
<div id="reviews-container" class="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
|
| 238 |
+
<!-- Reviews will be injected here via JS -->
|
| 239 |
+
<div class="col-span-full text-center py-10 animate-pulse">
|
| 240 |
+
<span data-i18n="loadingReviews">Loading reviews...</span>
|
| 241 |
+
</div>
|
| 242 |
+
</div>
|
| 243 |
+
</div>
|
| 244 |
+
</section>
|
| 245 |
+
|
| 246 |
+
<!-- Contact Section -->
|
| 247 |
+
<section id="contact" class="py-20 bg-gray-50 dark:bg-slate-900">
|
| 248 |
+
<div class="container mx-auto px-6 max-w-4xl">
|
| 249 |
+
<div class="bg-white dark:bg-slate-800 rounded-3xl shadow-2xl overflow-hidden">
|
| 250 |
+
<div class="grid md:grid-cols-5">
|
| 251 |
+
<div class="md:col-span-2 bg-primary-600 p-10 text-white flex flex-col justify-between">
|
| 252 |
+
<div>
|
| 253 |
+
<h3 class="text-2xl font-bold mb-6" data-i18n="contactInfo">Contact Info</h3>
|
| 254 |
+
<ul class="space-y-6">
|
| 255 |
+
<li class="flex items-start">
|
| 256 |
+
<i data-feather="map-pin" class="w-5 h-5 mt-1 mr-3"></i>
|
| 257 |
+
<span>Remote / Worldwide</span>
|
| 258 |
+
</li>
|
| 259 |
+
<li class="flex items-start">
|
| 260 |
+
<i data-feather="mail" class="w-5 h-5 mt-1 mr-3"></i>
|
| 261 |
+
<span>contact@flutterdev.com</span>
|
| 262 |
+
</li>
|
| 263 |
+
<li class="flex items-start">
|
| 264 |
+
<i data-feather="check-circle" class="w-5 h-5 mt-1 mr-3"></i>
|
| 265 |
+
<span data-i18n="availStatus">Available for freelance</span>
|
| 266 |
+
</li>
|
| 267 |
+
</ul>
|
| 268 |
+
</div>
|
| 269 |
+
<div class="flex gap-4 mt-10">
|
| 270 |
+
<a href="#" class="p-2 bg-white/20 rounded-full hover:bg-white/40 transition"><i data-feather="github" class="w-5 h-5"></i></a>
|
| 271 |
+
<a href="#" class="p-2 bg-white/20 rounded-full hover:bg-white/40 transition"><i data-feather="linkedin" class="w-5 h-5"></i></a>
|
| 272 |
+
<a href="#" class="p-2 bg-white/20 rounded-full hover:bg-white/40 transition"><i data-feather="twitter" class="w-5 h-5"></i></a>
|
| 273 |
+
</div>
|
| 274 |
+
</div>
|
| 275 |
+
<div class="md:col-span-3 p-10">
|
| 276 |
+
<h3 class="text-2xl font-bold mb-6 text-gray-800 dark:text-white" data-i18n="sendMessage">Send a Message</h3>
|
| 277 |
+
<form class="space-y-6" onsubmit="event.preventDefault(); alert('Message sent! (Demo)');">
|
| 278 |
+
<div class="grid md:grid-cols-2 gap-6">
|
| 279 |
+
<div>
|
| 280 |
+
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2" data-i18n="name">Name</label>
|
| 281 |
+
<input type="text" class="w-full px-4 py-3 rounded-lg bg-gray-50 dark:bg-slate-700 border-none focus:ring-2 focus:ring-primary-500 transition">
|
| 282 |
+
</div>
|
| 283 |
+
<div>
|
| 284 |
+
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2" data-i18n="email">Email</label>
|
| 285 |
+
<input type="email" class="w-full px-4 py-3 rounded-lg bg-gray-50 dark:bg-slate-700 border-none focus:ring-2 focus:ring-primary-500 transition">
|
| 286 |
+
</div>
|
| 287 |
+
</div>
|
| 288 |
+
<div>
|
| 289 |
+
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2" data-i18n="message">Message</label>
|
| 290 |
+
<textarea rows="4" class="w-full px-4 py-3 rounded-lg bg-gray-50 dark:bg-slate-700 border-none focus:ring-2 focus:ring-primary-500 transition"></textarea>
|
| 291 |
+
</div>
|
| 292 |
+
<button type="submit" class="w-full py-4 bg-primary-600 hover:bg-primary-700 text-white font-bold rounded-lg transition shadow-lg hover:shadow-primary-500/30">
|
| 293 |
+
<span data-i18n="sendBtn">Send Message</span> <i data-feather="send" class="w-4 h-4 inline ml-2"></i>
|
| 294 |
+
</button>
|
| 295 |
+
</form>
|
| 296 |
+
</div>
|
| 297 |
+
</div>
|
| 298 |
+
</div>
|
| 299 |
+
</div>
|
| 300 |
+
</section>
|
| 301 |
+
</main>
|
| 302 |
+
|
| 303 |
+
<site-footer></site-footer>
|
| 304 |
+
|
| 305 |
+
<!-- Web Component Scripts -->
|
| 306 |
+
<script src="components/header.js"></script>
|
| 307 |
+
<script src="components/footer.js"></script>
|
| 308 |
+
|
| 309 |
+
<!-- Main Logic -->
|
| 310 |
+
<script src="script.js"></script>
|
| 311 |
+
<script>feather.replace();</script>
|
| 312 |
+
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
|
| 313 |
+
</body>
|
| 314 |
+
</html>
|
script.js
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
document.addEventListener('DOMContentLoaded', () => {
|
| 2 |
+
// --- Translations Data ---
|
| 3 |
+
const translations = {
|
| 4 |
+
en: {
|
| 5 |
+
heroTitle: "Super Engineer",
|
| 6 |
+
heroSubtitle: "Expert in Flutter, Python, Node.js & Supabase. Building complex, high-performance apps with 5+ years of experience.",
|
| 7 |
+
viewProjects: "View Projects",
|
| 8 |
+
contactMe: "Contact Me",
|
| 9 |
+
mySkills: "My Tech Stack",
|
| 10 |
+
yearsExp: "Years Experience",
|
| 11 |
+
projectsDone: "Projects Done",
|
| 12 |
+
satisfaction: "Client Satisfaction",
|
| 13 |
+
support: "Support",
|
| 14 |
+
featuredProjects: "Featured Projects",
|
| 15 |
+
projectsDesc: "High complexity mobile and web apps",
|
| 16 |
+
proj1Title: "Giant E-commerce App",
|
| 17 |
+
proj1Desc: "A complete shopping platform with payment gateways, admin panel, and real-time tracking.",
|
| 18 |
+
proj2Title: "SaaS Analytics Dashboard",
|
| 19 |
+
proj2Desc: "Data visualization tool handling large datasets with complex queries and reporting.",
|
| 20 |
+
proj3Title: "On-Demand Delivery Service",
|
| 21 |
+
proj3Desc: "Real-time location tracking, driver app, and customer interface with socket.io.",
|
| 22 |
+
viewDetails: "View Details",
|
| 23 |
+
clientReviews: "Client Reviews",
|
| 24 |
+
loadingReviews: "Loading reviews...",
|
| 25 |
+
contactInfo: "Contact Info",
|
| 26 |
+
availStatus: "Available for freelance",
|
| 27 |
+
sendMessage: "Send a Message",
|
| 28 |
+
name: "Name",
|
| 29 |
+
email: "Email",
|
| 30 |
+
message: "Message",
|
| 31 |
+
sendBtn: "Send Message"
|
| 32 |
+
},
|
| 33 |
+
ar: {
|
| 34 |
+
heroTitle: "ุงูู
ููุฏุณ ุงูุฎุงุฑู",
|
| 35 |
+
heroSubtitle: "ุฎุจูุฑ ูู Flutterุ Pythonุ Node.js ู Supabase. ุจูุงุก ุชุทุจููุงุช ู
ุนูุฏุฉ ูุนุงููุฉ ุงูุฃุฏุงุก ุจุฎุจุฑุฉ ุชุฒูุฏ ุนู 5 ุณููุงุช.",
|
| 36 |
+
viewProjects: "ุดุงูุฏ ุงูู
ุดุงุฑูุน",
|
| 37 |
+
contactMe: "ุชูุงุตู ู
ุนู",
|
| 38 |
+
mySkills: "ู
ูุงุฑุงุชู ุงูุชูููุฉ",
|
| 39 |
+
yearsExp: "ุณููุงุช ุฎุจุฑุฉ",
|
| 40 |
+
projectsDone: "ู
ุดุงุฑูุน ู
ูุฌุฒุฉ",
|
| 41 |
+
satisfaction: "ุฑุถุง ุงูุนู
ูุงุก",
|
| 42 |
+
support: "ุฏุนู
ููู",
|
| 43 |
+
featuredProjects: "ุฃุจุฑุฒ ุงูู
ุดุงุฑูุน",
|
| 44 |
+
projectsDesc: "ุชุทุจููุงุช ูู
ูุงูุน ููุจ ุนุงููุฉ ุงูุชุนููุฏ",
|
| 45 |
+
proj1Title: "ุชุทุจูู ุชุฌุงุฑุฉ ุฅููุชุฑูููุฉ ุนู
ูุงู",
|
| 46 |
+
proj1Desc: "ู
ูุตุฉ ุชุณูู ูุงู
ูุฉ ู
ุน ุจูุงุจุงุช ุฏูุนุ ููุญุฉ ุชุญูู
ุ ูุชุชุจุน ููุฑู.",
|
| 47 |
+
proj2Title: "ููุญุฉ ุชุญูููุงุช SaaS",
|
| 48 |
+
proj2Desc: "ุฃุฏุงุฉ ุชุตูุฑ ุจูุงูุงุช ุชุชุนุงู
ู ู
ุน ู
ุฌู
ูุนุงุช ุจูุงูุงุช ุถุฎู
ุฉ ูุชูุงุฑูุฑ ู
ุนูุฏุฉ.",
|
| 49 |
+
proj3Title: "ุฎุฏู
ุฉ ุงูุชูุตูู ุนูุฏ ุงูุทูุจ",
|
| 50 |
+
proj3Desc: "ุชุชุจุน ู
ููุน ููุฑูุ ุชุทุจูู ููุณุงุฆูููุ ููุงุฌูุฉ ููุนู
ูุงุก ุจุงุณุชุฎุฏุงู
socket.io.",
|
| 51 |
+
viewDetails: "ุนุฑุถ ุงูุชูุงุตูู",
|
| 52 |
+
clientReviews: "ุขุฑุงุก ุงูุนู
ูุงุก",
|
| 53 |
+
loadingReviews: "ุฌุงุฑู ุชุญู
ูู ุงูุชูููู
ุงุช...",
|
| 54 |
+
contactInfo: "ู
ุนููู
ุงุช ุงูุงุชุตุงู",
|
| 55 |
+
availStatus: "ู
ุชุงุญ ููุนู
ู ุงูุญุฑ",
|
| 56 |
+
sendMessage: "ุฃุฑุณู ุฑุณุงูุฉ",
|
| 57 |
+
name: "ุงูุงุณู
",
|
| 58 |
+
email: "ุงูุจุฑูุฏ ุงูุฅููุชุฑููู",
|
| 59 |
+
message: "ุงูุฑุณุงูุฉ",
|
| 60 |
+
sendBtn: "ุฅุฑุณุงู ุงูุฑุณุงูุฉ"
|
| 61 |
+
}
|
| 62 |
+
};
|
| 63 |
+
|
| 64 |
+
// --- State Management ---
|
| 65 |
+
let currentLang = localStorage.getItem('lang') || 'en';
|
| 66 |
+
let currentTheme = localStorage.getItem('theme') || 'light';
|
| 67 |
+
|
| 68 |
+
// --- Theme Logic ---
|
| 69 |
+
function applyTheme(theme) {
|
| 70 |
+
const html = document.documentElement;
|
| 71 |
+
if (theme === 'dark') {
|
| 72 |
+
html.classList.add('dark');
|
| 73 |
+
} else {
|
| 74 |
+
html.classList.remove('dark');
|
| 75 |
+
}
|
| 76 |
+
localStorage.setItem('theme', theme);
|
| 77 |
+
|
| 78 |
+
// Dispatch event for components
|
| 79 |
+
window.dispatchEvent(new CustomEvent('themeChanged', { detail: theme }));
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
// Toggle Theme
|
| 83 |
+
window.toggleTheme = () => {
|
| 84 |
+
currentTheme = currentTheme === 'dark' ? 'light' : 'dark';
|
| 85 |
+
applyTheme(currentTheme);
|
| 86 |
+
};
|
| 87 |
+
|
| 88 |
+
// Initialize Theme
|
| 89 |
+
applyTheme(currentTheme);
|
| 90 |
+
|
| 91 |
+
// --- Language Logic ---
|
| 92 |
+
function applyLanguage(lang) {
|
| 93 |
+
currentLang = lang;
|
| 94 |
+
const html = document.documentElement;
|
| 95 |
+
html.setAttribute('lang', lang);
|
| 96 |
+
html.setAttribute('dir', lang === 'ar' ? 'rtl' : 'ltr');
|
| 97 |
+
|
| 98 |
+
// Update text content
|
| 99 |
+
const elements = document.querySelectorAll('[data-i18n]');
|
| 100 |
+
elements.forEach(el => {
|
| 101 |
+
const key = el.getAttribute('data-i18n');
|
| 102 |
+
if (translations[lang][key]) {
|
| 103 |
+
el.textContent = translations[lang][key];
|
| 104 |
+
}
|
| 105 |
+
});
|
| 106 |
+
|
| 107 |
+
// Dispatch event for components
|
| 108 |
+
window.dispatchEvent(new CustomEvent('langChanged', { detail: lang }));
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
// Toggle Language
|
| 112 |
+
window.toggleLanguage = () => {
|
| 113 |
+
const newLang = currentLang === 'en' ? 'ar' : 'en';
|
| 114 |
+
applyLanguage(newLang);
|
| 115 |
+
};
|
| 116 |
+
|
| 117 |
+
// Initialize Language
|
| 118 |
+
applyLanguage(currentLang);
|
| 119 |
+
|
| 120 |
+
// --- Mock Reviews Fetching (Since CORS likely blocks direct Mostaql HTML parsing) ---
|
| 121 |
+
async function fetchReviews() {
|
| 122 |
+
const container = document.getElementById('reviews-container');
|
| 123 |
+
|
| 124 |
+
// Simulating API delay
|
| 125 |
+
await new Promise(resolve => setTimeout(resolve, 1500));
|
| 126 |
+
|
| 127 |
+
// Mock Data based on Mostaql/Khamsat style
|
| 128 |
+
const mockReviews = [
|
| 129 |
+
{
|
| 130 |
+
name: "Ahmed Al-Sayed",
|
| 131 |
+
role: "CEO, TechStart",
|
| 132 |
+
content: "ู
ุทูุฑ ู
ุญุชุฑู ุฌุฏุงูุ ุตุจุฑู ูุชูุงููู ูู ุงูุนู
ู ูุงู ู
ุฐููุงู. ุงูุชุทุจูู ุชู
ุชุณููู
ู ูู ุงูููุช ุงูู
ุญุฏุฏ ูุจุฌูุฏุฉ ุนุงููุฉ.",
|
| 133 |
+
rating: 5,
|
| 134 |
+
imgSeed: 101
|
| 135 |
+
},
|
| 136 |
+
{
|
| 137 |
+
name: "John Doe",
|
| 138 |
+
role: "Product Manager, AppCorp",
|
| 139 |
+
content: "Excellent Flutter developer. Handled complex backend integration with Supabase flawlessly. Highly recommended!",
|
| 140 |
+
rating: 5,
|
| 141 |
+
imgSeed: 102
|
| 142 |
+
},
|
| 143 |
+
{
|
| 144 |
+
name: "Sarah Smith",
|
| 145 |
+
role: "Founder, ShopEasy",
|
| 146 |
+
content: "Great communication and technical skills. The Python script saved us hours of manual work.",
|
| 147 |
+
rating: 4,
|
| 148 |
+
imgSeed: 103
|
| 149 |
+
}
|
| 150 |
+
];
|
| 151 |
+
|
| 152 |
+
container.innerHTML = ''; // Clear loading
|
| 153 |
+
|
| 154 |
+
mockReviews.forEach(review => {
|
| 155 |
+
const card = document.createElement('div');
|
| 156 |
+
card.className = "bg-gray-50 dark:bg-slate-700 p-6 rounded-2xl border border-gray-100 dark:border-slate-600";
|
| 157 |
+
|
| 158 |
+
// Generate Stars
|
| 159 |
+
let stars = '';
|
| 160 |
+
for(let i=0; i<5; i++) {
|
| 161 |
+
stars += `<i data-feather="star" class="w-4 h-4 ${i < review.rating ? 'text-yellow-400 fill-current' : 'text-gray-300'}"></i>`;
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
const avatar = `http://static.photos/people/100x100/${review.imgSeed}`;
|
| 165 |
+
|
| 166 |
+
card.innerHTML = `
|
| 167 |
+
<div class="flex items-center mb-4">
|
| 168 |
+
<img src="${avatar}" class="w-12 h-12 rounded-full mr-3 rtl:mr-0 rtl:ml-3 object-cover">
|
| 169 |
+
<div>
|
| 170 |
+
<h4 class="font-bold text-gray-900 dark:text-white">${review.name}</h4>
|
| 171 |
+
<p class="text-xs text-gray-500 dark:text-gray-400">${review.role}</p>
|
| 172 |
+
</div>
|
| 173 |
+
</div>
|
| 174 |
+
<div class="flex mb-3 gap-1">
|
| 175 |
+
${stars}
|
| 176 |
+
</div>
|
| 177 |
+
<p class="text-gray-600 dark:text-gray-300 text-sm italic">"${review.content}"</p>
|
| 178 |
+
<div class="mt-4 pt-4 border-t border-gray-200 dark:border-slate-600 text-xs text-gray-400 flex items-center">
|
| 179 |
+
<i data-feather="check-circle" class="w-3 h-3 mr-1"></i> Verified Review
|
| 180 |
+
</div>
|
| 181 |
+
`;
|
| 182 |
+
container.appendChild(card);
|
| 183 |
+
});
|
| 184 |
+
|
| 185 |
+
// Re-initialize feather icons for new content
|
| 186 |
+
feather.replace();
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
fetchReviews();
|
| 190 |
+
});
|
style.css
CHANGED
|
@@ -1,28 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
body {
|
| 2 |
-
|
| 3 |
-
|
| 4 |
}
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
|
|
|
| 9 |
}
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
margin-bottom: 10px;
|
| 15 |
-
margin-top: 5px;
|
| 16 |
}
|
| 17 |
|
| 18 |
-
.
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
padding: 16px;
|
| 22 |
-
border: 1px solid lightgray;
|
| 23 |
-
border-radius: 16px;
|
| 24 |
}
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
|
|
|
|
|
|
| 28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* Custom Scrollbar */
|
| 2 |
+
::-webkit-scrollbar {
|
| 3 |
+
width: 10px;
|
| 4 |
+
}
|
| 5 |
+
::-webkit-scrollbar-track {
|
| 6 |
+
background: #f1f1f1;
|
| 7 |
+
}
|
| 8 |
+
.dark ::-webkit-scrollbar-track {
|
| 9 |
+
background: #1e293b;
|
| 10 |
+
}
|
| 11 |
+
::-webkit-scrollbar-thumb {
|
| 12 |
+
background: #cbd5e1;
|
| 13 |
+
border-radius: 5px;
|
| 14 |
+
}
|
| 15 |
+
.dark ::-webkit-scrollbar-thumb {
|
| 16 |
+
background: #475569;
|
| 17 |
+
}
|
| 18 |
+
::-webkit-scrollbar-thumb:hover {
|
| 19 |
+
background: #94a3b8;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
/* Base Styles */
|
| 23 |
body {
|
| 24 |
+
-webkit-font-smoothing: antialiased;
|
| 25 |
+
-moz-osx-font-smoothing: grayscale;
|
| 26 |
}
|
| 27 |
|
| 28 |
+
/* RTL Handling Helpers */
|
| 29 |
+
[dir="rtl"] {
|
| 30 |
+
direction: rtl;
|
| 31 |
+
text-align: right;
|
| 32 |
}
|
| 33 |
|
| 34 |
+
[dir="rtl"] .feather {
|
| 35 |
+
margin-left: 0.5rem;
|
| 36 |
+
margin-right: 0;
|
|
|
|
|
|
|
| 37 |
}
|
| 38 |
|
| 39 |
+
[dir="ltr"] .feather {
|
| 40 |
+
margin-right: 0.5rem;
|
| 41 |
+
margin-left: 0;
|
|
|
|
|
|
|
|
|
|
| 42 |
}
|
| 43 |
|
| 44 |
+
/* Animation Classes */
|
| 45 |
+
@keyframes fadeIn {
|
| 46 |
+
from { opacity: 0; transform: translateY(20px); }
|
| 47 |
+
to { opacity: 1; transform: translateY(0); }
|
| 48 |
}
|
| 49 |
+
|
| 50 |
+
.animate-fade-in {
|
| 51 |
+
animation: fadeIn 0.8s ease-out forwards;
|
| 52 |
+
}
|