Upload !DOCTYPE html.txt
Browse files- !DOCTYPE html.txt +110 -0
!DOCTYPE html.txt
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
+
<title>Magnus The Handyman | Maintenance & Repairs</title>
|
| 7 |
+
<meta name="description" content="Magnus The Handyman - reliable home and property maintenance, repairs, installations and handyman services.">
|
| 8 |
+
<style>
|
| 9 |
+
:root{--gold:#f5b400;--dark:#0b0d10;--panel:#15191f;--light:#f5f5f5;--muted:#b8bec7}
|
| 10 |
+
*{box-sizing:border-box;scroll-behavior:smooth}body{margin:0;font-family:Arial,Helvetica,sans-serif;background:#090a0c;color:var(--light);line-height:1.6}
|
| 11 |
+
header{position:sticky;top:0;z-index:10;background:rgba(9,10,12,.96);border-bottom:1px solid #292d33}
|
| 12 |
+
.nav{max-width:1180px;margin:auto;display:flex;align-items:center;justify-content:space-between;padding:12px 20px}
|
| 13 |
+
.brand{display:flex;align-items:center;gap:10px;font-weight:800}.brand img{width:48px;height:48px;object-fit:cover;border-radius:50%}.brand span{color:var(--gold)}
|
| 14 |
+
nav a{color:white;text-decoration:none;margin-left:20px;font-weight:700}nav a:hover{color:var(--gold)}
|
| 15 |
+
.lang{margin-left:18px;background:#20252c;color:white;border:1px solid #444;padding:7px;border-radius:6px}
|
| 16 |
+
.hero{min-height:720px;display:grid;place-items:center;text-align:center;padding:70px 20px;background:radial-gradient(circle at 50% 20%,#30353c 0,#111419 38%,#08090b 75%)}
|
| 17 |
+
.hero-inner{max-width:900px}.hero-logo{width:min(520px,80vw);max-height:420px;object-fit:contain;filter:drop-shadow(0 18px 30px #000)}
|
| 18 |
+
h1{font-size:clamp(2.4rem,6vw,5rem);margin:10px 0;color:white}.gold{color:var(--gold)}
|
| 19 |
+
.btn{display:inline-block;background:var(--gold);color:#111;text-decoration:none;font-weight:900;padding:14px 24px;border-radius:8px;margin:8px;border:0;cursor:pointer}.btn.secondary{background:transparent;color:white;border:1px solid #666}
|
| 20 |
+
section{padding:80px 20px}.wrap{max-width:1180px;margin:auto}h2{text-align:center;font-size:2.4rem;margin-top:0}.lead{text-align:center;color:var(--muted);max-width:760px;margin:0 auto 40px}
|
| 21 |
+
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px}.card{background:var(--panel);border:1px solid #2c3138;border-radius:14px;padding:26px;box-shadow:0 10px 30px #0005}.icon{font-size:2rem;color:var(--gold)}
|
| 22 |
+
.alt{background:#11151a}.booking{display:grid;grid-template-columns:1fr 1fr;gap:30px}
|
| 23 |
+
form{background:var(--panel);padding:28px;border-radius:14px;border:1px solid #30353b}label{display:block;margin-top:14px;font-weight:bold}input,select,textarea{width:100%;padding:12px;margin-top:6px;background:#0c0f13;color:white;border:1px solid #444;border-radius:7px}textarea{min-height:110px}
|
| 24 |
+
.notice{padding:12px;background:#201b0c;border-left:4px solid var(--gold);color:#eee;margin-top:15px}.price{font-size:1.6rem;font-weight:bold;color:var(--gold)}
|
| 25 |
+
.review-form{max-width:700px;margin:30px auto}.review{margin-top:20px}.stars{color:var(--gold);font-size:1.2rem}
|
| 26 |
+
footer{background:#050608;padding:45px 20px;text-align:center;color:var(--muted)}footer img{width:80px;border-radius:50%}
|
| 27 |
+
@media(max-width:760px){nav a{display:none}.booking{grid-template-columns:1fr}.hero{min-height:650px}}
|
| 28 |
+
</style>
|
| 29 |
+
</head>
|
| 30 |
+
<body>
|
| 31 |
+
<header><div class="nav">
|
| 32 |
+
<div class="brand"><img src="assets/magnus-logo.png" alt="Magnus The Handyman logo"><div>MAGNUS <span>THE HANDYMAN</span></div></div>
|
| 33 |
+
<nav><a href="#home">Home</a><a href="#services">Services</a><a href="#booking">Book</a><a href="#reviews">Reviews</a><a href="#contact">Contact</a><select class="lang" onchange="changeLang(this.value)"><option value="en">English</option><option value="af">Afrikaans</option><option value="ar">العربية</option></select></nav>
|
| 34 |
+
</div></header>
|
| 35 |
+
|
| 36 |
+
<main id="home">
|
| 37 |
+
<section class="hero"><div class="hero-inner">
|
| 38 |
+
<img class="hero-logo" src="assets/magnus-logo.png" alt="Magnus The Handyman">
|
| 39 |
+
<h1 data-en="Reliable Repairs. Quality Work. Done Right." data-af="Betroubare Herstelwerk. Kwaliteit. Reg gedoen." data-ar="إصلاحات موثوقة. جودة عالية. إنجاز متقن.">Reliable Repairs. Quality Work. Done Right.</h1>
|
| 40 |
+
<p class="lead" data-en="Professional handyman and property maintenance services for homes, offices and small businesses." data-af="Professionele handyman- en eiendomsinstandhoudingsdienste vir huise, kantore en klein besighede." data-ar="خدمات صيانة وإصلاح احترافية للمنازل والمكاتب والشركات الصغيرة.">Professional handyman and property maintenance services for homes, offices and small businesses.</p>
|
| 41 |
+
<a class="btn" href="#booking">BOOK A SERVICE</a><a class="btn secondary" href="#services">VIEW SERVICES</a>
|
| 42 |
+
</div></section>
|
| 43 |
+
|
| 44 |
+
<section id="services"><div class="wrap"><h2>Our <span class="gold">Services</span></h2><p class="lead">From small repairs to general property maintenance, Magnus The Handyman helps keep your property safe, functional and looking its best.</p>
|
| 45 |
+
<div class="cards">
|
| 46 |
+
<div class="card"><div class="icon">🔧</div><h3>General Repairs</h3><p>Doors, locks, fittings, fixtures and everyday household repairs.</p></div>
|
| 47 |
+
<div class="card"><div class="icon">🛠️</div><h3>Maintenance</h3><p>Preventative and routine maintenance for homes, offices and properties.</p></div>
|
| 48 |
+
<div class="card"><div class="icon">🎨</div><h3>Painting & Touch-Ups</h3><p>Interior touch-ups, feature walls and small painting projects.</p></div>
|
| 49 |
+
<div class="card"><div class="icon">🚿</div><h3>Plumbing Assistance</h3><p>Minor leaks, taps, fittings and basic plumbing maintenance.</p></div>
|
| 50 |
+
<div class="card"><div class="icon">💡</div><h3>Installation</h3><p>Fixtures, shelves, curtain rails, mirrors and other installations.</p></div>
|
| 51 |
+
<div class="card"><div class="icon">🏠</div><h3>Property Care</h3><p>Reliable handyman support to keep your property in good condition.</p></div>
|
| 52 |
+
</div></div></section>
|
| 53 |
+
|
| 54 |
+
<section id="booking" class="alt"><div class="wrap"><h2>Book <span class="gold">Magnus</span></h2><p class="lead">Choose a service and request a convenient appointment. This demo is ready to connect to your preferred booking and payment provider.</p>
|
| 55 |
+
<div class="booking">
|
| 56 |
+
<form onsubmit="submitBooking(event)">
|
| 57 |
+
<h3>Request a Booking</h3>
|
| 58 |
+
<label>Name<input id="name" required></label>
|
| 59 |
+
<label>Phone / WhatsApp<input id="phone" required></label>
|
| 60 |
+
<label>Email<input id="email" type="email"></label>
|
| 61 |
+
<label>Service<select id="service" required><option value="">Select a service</option><option>General Repairs</option><option>Maintenance</option><option>Painting & Touch-Ups</option><option>Plumbing Assistance</option><option>Installation</option><option>Property Care</option></select></label>
|
| 62 |
+
<label>Preferred Date<input id="date" type="date" required></label>
|
| 63 |
+
<label>Preferred Time<select id="time"><option>Morning</option><option>Afternoon</option><option>Evening</option></select></label>
|
| 64 |
+
<label>Job Description<textarea id="details" placeholder="Tell us what needs to be done..."></textarea></label>
|
| 65 |
+
<button class="btn" type="submit">SEND BOOKING REQUEST</button>
|
| 66 |
+
<div id="bookingMsg" class="notice" style="display:none"></div>
|
| 67 |
+
</form>
|
| 68 |
+
<div class="card"><h3>Simple & Transparent</h3><p class="price">Request a Quote</p><p>Every job is different. Send your request and Magnus can confirm availability and provide a quotation before work begins.</p><h3>Payments</h3><p>This website includes a payment-ready section. For live payments, connect a secure provider such as Stripe, PayPal or a UAE payment gateway. Never collect raw card details directly in this HTML page.</p><div class="notice">For a live website, booking storage, confirmations and payment processing need a secure backend or trusted third-party integration.</div></div>
|
| 69 |
+
</div></div></section>
|
| 70 |
+
|
| 71 |
+
<section id="reviews"><div class="wrap"><h2>Customer <span class="gold">Reviews</span></h2><p class="lead">Share your experience and help future customers choose Magnus The Handyman.</p>
|
| 72 |
+
<div id="reviewList" class="cards"></div>
|
| 73 |
+
<form class="review-form" onsubmit="submitReview(event)"><h3>Leave a Review</h3><label>Your Name<input id="reviewName" required></label><label>Rating<select id="rating"><option>5</option><option>4</option><option>3</option><option>2</option><option>1</option></select></label><label>Your Review<textarea id="reviewText" required></textarea></label><button class="btn" type="submit">POST REVIEW</button></form>
|
| 74 |
+
</div></section>
|
| 75 |
+
|
| 76 |
+
<section id="contact" class="alt"><div class="wrap"><h2>Contact <span class="gold">Magnus</span></h2><p class="lead">Ready to get the job done? Send a booking request or contact us directly.</p><div class="cards">
|
| 77 |
+
<div class="card"><h3>📞 Phone / WhatsApp</h3><p><a href="tel:+971585591476" style="color:white">+971 58 559 1476</a></p><p>Replace this number with your business number.</p></div>
|
| 78 |
+
<div class="card"><h3>✉️ Email</h3><p><a href="mailto:magnusthehandyman@gmail.com" style="color:white">magnusthehandyman@gmail.com</a></p></div>
|
| 79 |
+
<div class="card"><h3>📍 Service Area</h3><p>Dubai / Your Local Service Area</p><p>Edit this text to your actual coverage area.</p></div>
|
| 80 |
+
</div></div></section>
|
| 81 |
+
</main>
|
| 82 |
+
|
| 83 |
+
<footer><img src="assets/magnus-logo.png" alt="Magnus logo"><p><strong>MAGNUS THE HANDYMAN</strong></p><p>Reliable repairs. Quality work. Done right.</p><p>© <span id="year"></span> Magnus The Handyman. All rights reserved.</p></footer>
|
| 84 |
+
|
| 85 |
+
<script>
|
| 86 |
+
const translations={en:{},af:{},ar:{}};
|
| 87 |
+
function changeLang(lang){
|
| 88 |
+
document.documentElement.lang=lang;
|
| 89 |
+
document.querySelectorAll('[data-'+lang+']').forEach(el=>el.textContent=el.getAttribute('data-'+lang));
|
| 90 |
+
if(lang==='ar'){document.body.dir='rtl'}else{document.body.dir='ltr'}
|
| 91 |
+
}
|
| 92 |
+
function submitBooking(e){
|
| 93 |
+
e.preventDefault();
|
| 94 |
+
const data={name:name.value,phone:phone.value,email:email.value,service:service.value,date:date.value,time:time.value,details:details.value};
|
| 95 |
+
localStorage.setItem('latestBooking',JSON.stringify(data));
|
| 96 |
+
bookingMsg.style.display='block';bookingMsg.textContent='Thank you! Your booking request has been saved in this demo. Connect the form to your email/backend to receive live bookings.';
|
| 97 |
+
e.target.reset();
|
| 98 |
+
}
|
| 99 |
+
function loadReviews(){
|
| 100 |
+
const reviews=JSON.parse(localStorage.getItem('magnusReviews')||'[]');
|
| 101 |
+
reviewList.innerHTML=reviews.map(r=>`<div class="card review"><h3>${escapeHtml(r.name)}</h3><div class="stars">${'★'.repeat(Number(r.rating))}${'☆'.repeat(5-Number(r.rating))}</div><p>${escapeHtml(r.text)}</p></div>`).join('')||'<div class="card"><h3>Be our first reviewer!</h3><p>Your customer reviews will appear here.</p></div>';
|
| 102 |
+
}
|
| 103 |
+
function submitReview(e){
|
| 104 |
+
e.preventDefault();const reviews=JSON.parse(localStorage.getItem('magnusReviews')||'[]');
|
| 105 |
+
reviews.unshift({name:reviewName.value,rating:rating.value,text:reviewText.value});localStorage.setItem('magnusReviews',JSON.stringify(reviews));e.target.reset();loadReviews();
|
| 106 |
+
}
|
| 107 |
+
function escapeHtml(s){return s.replace(/[&<>"']/g,m=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[m]))}
|
| 108 |
+
document.getElementById('year').textContent=new Date().getFullYear();loadReviews();
|
| 109 |
+
</script>
|
| 110 |
+
</body></html>
|