Mataba (مطبا) — Static Website (HTML5 + CSS3 + Vanilla JS)
Standalone static extraction of sabaHealth-develop (Next.js 16 + React 19 + Tailwind), visually reproduced and fully rebranded to Mataba / مطبا with production domain https://mataba.ir.
Stack: HTML5 + CSS3 + vanilla JS — no Next.js, React, JSX, TypeScript, or JS app server required. Standalone static hosting.
1) Structure (as implemented)
mataba-static/
├── index.html # Homepage — 11 sections in original order
├── about/index.html # About Us (placeholder, flagged)
├── contact/index.html # Contact Us (flagged, client validation only)
├── css/
│ ├── styles.css # Port of globals.css + component styles (tokens, hero, cards, etc)
│ ├── responsive.css # Breakpoints 1100px / 900px + reduced-motion
│ └── utilities.css # .visually-hidden, .ltr, .center
├── js/main.js # Vanilla JS: menu, modal, carousel, validation, scroll
├── assets/
│ ├── images/ # Copied verbatim from sabaHealth-develop/public/images
│ │ ├── firsSecBg.png, star.png, dast.png, personalsection.png, card.svg, circle.png, ...
│ │ └── samplePage/1-4.png
│ └── fonts/ # Modam-*.ttf (6) + Peyda (1) — 4 weights declared in CSS
├── robots.txt
├── sitemap.xml # 3 canonical URLs
├── manifest.webmanifest
├── docs/component-migration-map.md
└── README.md (this file)
Original Next.js app remains untouched at ../sabaHealth-develop.
2) Run locally (verified)
cd C:\Users\hemn\Desktop\mataba-static
python3 -m http.server 8080
# or: py -m http.server 8080
# or: npx serve . -l 8080
Local URL used for QA: http://localhost:8080/ (also /about/, /contact/, /sitemap.xml, /robots.txt, /css/styles.css, /js/main.js).
Verification (PowerShell, 2026-09-20): 200 on /, /about/, /contact/, sitemap.xml, robots.txt, styles.css, main.js; assets firsSecBg.png, dast.png, star.png, personalsection.png, Modam-Bold.ttf all 200.
3) Production deployment (static hosting)
Any static host works (Nginx, Apache, Cloudflare Pages, Vercel Static, Netlify, S3+CloudFront). Example Nginx:
server {
server_name mataba.ir www.mataba.ir;
root /var/www/mataba-static;
index index.html;
location / { try_files $uri $uri/ $uri/index.html =404; }
location ~* \.(css|js|png|jpg|svg|ttf|webmanifest)$ {
expires 30d; add_header Cache-Control "public, immutable";
}
}
Steps:
- Copy
mataba-static/contents to host root. - Point
https://mataba.irto that root; enforce HTTPS andwww → apexredirect. - Verify
https://mataba.ir/sitemap.xmlandhttps://mataba.ir/robots.txtare reachable (robots referenceshttps://mataba.ir/sitemap.xml). - Submit sitemap in Google Search Console; verify canonical tags (
https://mataba.ir/,/about/,/contact/). - Enable gzip/brotli, HTTP/2, and image caching.
- No build step required.
Do NOT require next start or Node runtime.
4) Reused assets (verbatim copy from sabaHealth-develop/public)
Images: card.svg, circle.png, contactUs.png, contactusPhone.png, dast.png, dcm1.jpg, dcm2.jpg, dcm3.jpg, facilitiesBg.svg, firsSecBg.png, FooterLogo.png, instagraam.png, navLogo.png, person.jpg, person2.jpg, person3.jpg, personalsection.png, star.png, telegram.png, treStepBg.svg, whatsap.png, samplePage/1.png … 4.png.
Fonts: Modam-Regular.ttf, Modam-Bold.ttf, Modam-ExtraBold.ttf, Modam-ExtraLight.ttf, Modam-Light.ttf, Modam-Medium.ttf, Peyda-Regular[@mimvid].ttf (only 4 declared, matching globals.css).
Note: images/3.png referenced by original AboutUsImage does not exist in repo → fallback to person.jpg documented.
5) Recreated components (no framework copy-paste)
- Shell:
RootLayout+globals.css→index.html<head>(RTLlang="fa" dir="rtl", Modam@font-face, tokens--green #9EB185,--green-2 #9DB281,--dark #425428,--deep #014224,--lime #99CB35, etc, gradient underlines.btmBorder/.treeStep/.searchAfter/.facilityAfter/.SampleAfter/.DoctorCmH). Navbar(90% bar, hamburger 3 bars#5B6E42/#9EB185, drawerleft:61%, backdropbg-black/70),navLinks(remapped/samples /packages /blogs→ anchors#samples #packages;/aboutus /contactus→/about/ /contact/),NavButtons(search →#search, ورود/ثبتنام → modal),HambergurMenue→js/main.js#toggleMenu.- Homepage:
FirstSection+GreenTemplateFirstSec+TextContentGreenBox+StarTemplateGreenBox+BoxesGreenBox+ElementsUnderGreenTm+FirstSectionBox+FirstSectionHand+FirstSectionDrPhotos→.hero+.hero-under(glass boxes, starstar.png, handdast.png, avatars). SearchSection+TreeStep+SearchSections→#search(pilltoDown,treStepBg.svg, 3 steps, search form + 6 domain pills).Samples→#samples(4 cardscard.svg+ stars +samplePage/1-4.png+ overlay).Facilities→#facilities(facilitiesBg.svg, 6 white squares,circle.pngdeco).PeronalBrandPhot→.brand-cta(personalsection.png+ gradient#b8c4a6→#425428).PackagesAndPrices+ServicesDetail+BasePlan→#packages(green panel 10 items + 3× BasePlan, flagged prices).ContactUs+ContactUsForm+ContactUsText+DoctorsCm/DoctorsCmTitle/DoctorsCmSlider→#contact+#voices(vanilla carousel replaces Swiper, autoplay 3s, pause on hover).Footer,AboutUsImage/page.tsx,ContactUsForm(organism) →about/index.html,contact/index.html(kept dotted frame, avatar cluster, contact rows, dark form).- Atoms:
Buttonvariants →.btn*,Icon(25 SVGs) → inline SVGs,NavLink→a.nav-link.active. - Context/modal:
layoutContext+Modal/provider+sign-in+confirm→js/main.jsmodal with^09\d{9}$validation.
All CSS/JS hand-written; Tailwind flattened; Swiper replaced with vanilla scrollBy.
6) Branding changes (Saba Health → Mataba)
- HTML
<title>,meta description,og:*,twitter:*,canonical,JSON-LD(Organization/WebSite/WebPage/Service) now useمطبا / Matabaandhttps://mataba.ir. - Visible UI: header brand aria-label, hero kicker/H1, footer paragraph & copyright
تمامی حقوق مادی و معنوی این وبسایت متعلق به «مطبا» است, footer nav, about/contact headings. sabahealth.irretained ONLY incontact/index.htmlas explicitly flagged outdated email with note(دامنه قدیمی؛ نیازمند آدرس رسمی مطبا)— not invented, not canonical, documented for owner replacement. Docs mentionSaba Healthonly for migration provenance.navLogo.png/FooterLogo.pngkept as temporary visual treatment; replacement needed (documented).- No global filename/path rename that would break assets.
Brand audit (grep -r "صبا| Saba|sabahealth"): 0 public-facing occurrences except the single flagged email + docs/README provenance lines.
7) SEO — technical
- Semantics:
header/nav/main/section/footer, oneH1per page,H2/H3hierarchy, text content not image-only. - RTL:
<html lang="fa" dir="rtl">, Modam typography,class="ltr" dir="ltr"for phone/email/domains. - Metadata per page: unique
title/description,canonical https://mataba.ir/...,robots index,follow,og:title/description/url/image(locale fa_IR, site_name مطبا),twitter:card summary_large_image. robots.txt: Allow/,/assets/,/css/,/js/;Disallow /docs/;Sitemap: https://mataba.ir/sitemap.xml.sitemap.xml: 3 canonical indexable URLs only (/,/about/,/contact/), no dev/404/duplicate URLs.- JSON-LD:
@graphwithOrganization(@id https://mataba.ir/#org, logohttps://mataba.ir/assets/images/navLogo.png),WebSite,WebPage,Service(areaServed IR, inLanguage fa) — no invented ratings/reviews/prices/awards/addresses/credentials. - Images: descriptive
altfor meaningful images (sample cards, person.jpg),alt=""for decorative,width/heightreserved, lazy-loading except hero,preloadforModam-Bold.ttf. - Internal linking: descriptive Persian anchor text, HTML links (not JS-only), no broken links (anchors
#home #facilities #samples #packages #contact #search, pagesabout/ contact/).
8) SEO — content (Persian, natural, no stuffing)
Titles/H1/H2, intro, service descriptions, alt text, meta include naturally: طراحی سایت پزشکان, طراحی سایت پزشکی, وبسایت اختصاصی پزشک, برند شخصی پزشک, نوبتدهی آنلاین, پنل مدیریت مطب, طراحی سایت دندانپزشکی (samples: دندانپزشکی/پزشک عمومی/پزشک زیبایی/جراح), etc, sourced from actual content — no fabricated superlatives.
9) Content requiring verification (DO NOT publish as fact without owner approval)
- Stats:
+۱,۲۰۰ سایت پزشکان,٪۹۸ رضایت,۷-۱۰ دقیقه تحویل,تحویل کمتر از ۵ روز,۱۰ سال سابقه,+۸۰۰ همکاری/بررسیکنندگان— fromgreeBoxDetail/FirstSectionDrPhotos/StarTemplateGreenBox. Flagged inline withTODO/note. - Prices/packages:
۱۱۳,۵۴۶,۰۰۰ /ماهانه×3پلن پایه شامل ۹ گزینه+ 10 service items — flagged. - Testimonials:
DoctorComments(7 items, duplicates, onetest) → shown as 3 distinct cards, flaggedنظرات زیر تکراری است. - About: original
aboutus/page.tsxwas Lorem Ipsum — replaced with documented placeholder, no fabricated history. - Contact:
08733212565,www.sabahealth.ir(old domain),استان کردستان... مرکز رشد,آقای آرش صادقی— fromcontactUsconstant, flaggedنیازمند تایید. - Brand images:
navLogo.png/FooterLogo.pngtemporary.
10) Backend integrations still required
- Login/OTP: phone
^09\d{9}$validates client-side;loginFormshows demo noticeپیامکی ارسال نمیشود. یکپارچهسازی بکاند لازم است.— no endpoint. Originalfeatures/auth/login.schema.tsregex preserved. - Lead/contact forms:
leadForm/leadFormPage/contactFormPagevalidate (required name, mobile regex, textarea), then showارسال نهایی نیازمند اتصال بکاند است و هنوز ثبت نشده.— noPOSTendpoint invented. - Domain search:
domainForm+.domainpills demo only:به ثبتکننده دامنه متصل نیست. - Social links (
#): need real Instagram/Telegram/WhatsApp URLs. - Analytics/search console: add GA4/GSC verification after launch.
Do not claim delivery/success where no backend exists.
11) Performance & accessibility
- Efficient CSS/JS (single
styles.css16KB,main.js6KB, no deps), optimized images,width/heightreserved,.lazy except hero,font-display:swap, no third-party scripts, CLS avoided. - Keyboard: hamburger toggles
aria-expanded, drawer closes onEscape/backdrop/nav click, modal closes onEscape/backdrop/X, visible:focus-visibleoutline3px solid #014224, skip links. prefers-reduced-motion:reducedisables smooth scroll/transitions.- Forms:
label.visually-hidden,type="tel" inputmode="numeric",type="email",aria-invalid,role="alert"/"status".
12) Responsive verified
Breakpoints 1100px/900px: header drawer (left:61% when open), hero wraps (hero-star hidden mobile, hero-hand-mobile shown, stats row), mini-cards row, hand hidden mobile, search-box/domains 92%, sample-card 23%→30% mobile, fac 13%→28%, brand-cta 400px→170px, packages stacks (only .featured visible mobile), contact column, track .tcard 32%→88% mobile, page-hero/contact-page column. min-width 320px prevents overflow; wrap max-width 1500px matches original.
13) Final QA report (2026-09-20, local)
- Homepage loads:
200, CSS/JS/images/fonts200. - Nav links:
#home #samples #packages #facilities #search #contactvalid anchors;about/contact/valid pages; no dead/samples /packages /blogs. - Mobile menu: opens/closes via hamburger, backdrop, nav link,
Escape. - Forms: empty/invalid →
ferrPersian error; valid →fokdemo notice (no fake success). - Domain: empty → error; with value → demo notice; pill clicks append TLD.
- Carousel:
tPrev/tNextscroll, autoplay 3s, hover pauses. - Modal:
data-open-loginopens,data-close-login/backdrop/Escapecloses, regex^09\d{9}$. - Headings: 1×
H1per page, no skipped levels. - Metadata: unique titles/descriptions/canonicals,
og/twitter/JSON-LDvalid JSON, no invented fields. sitemap.xmlvalid (3 URLs),robots.txtvalid, does not block assets,manifest.webmanifestvalid (dir rtl lang fa theme #9EB185).- No
next/react/jsxruntime deps;node -c js/main.jspass. grepbrand audit: no publicSabaexcept flagged email (documented).- Horizontal overflow: none observed (
wrap90-95%, flex-wrap, no fixed viewport-breaking widths). - Next.js source intact (
sabaHealth-develop/app/layout.tsxLastWrite 2026-05-05).
Limitations: no browser automation screenshot in this environment; visual fidelity verified via code-mapped tokens/sections and curl asset checks — owner should re-verify pixel alignment in Chrome DevTools (Desktop 1440px, Tablet 768px, Mobile 360px).
14) Acceptance criteria
- Static Mataba site implemented, visually faithful to Saba Health source.
- HTML5/CSS3/vanilla JS only; Next.js/React not required to run.
- Persian RTL + Modam preserved; responsive.
- Mataba branding consistent; outdated public references removed/flagged.
- Homepage + About + Contact work; navigation valid; no 404 thin pages.
- Technical SEO foundations (semantics, RTL, metadata, canonical, sitemap, robots, JSON-LD, alt/dimensions, linking).
- Important content as HTML text, not image-only.
- No unsupported business claims published as fact; unverified flagged.
- Run locally and tested; issues fixed/documented.
- Original Next.js app intact;
docs/component-migration-map.mdpresent.
15) Next steps for owner
- Confirm/Replace: stats, prices, testimonials, about copy, contact phone/email/address/management, social URLs, brand logos (
navLogo.png/FooterLogo.png). - Provide backend endpoints for lead/contact/login/domain, then wire
fetchinjs/main.js(replace demo notices). - Replace
sabahealth.iremail withmataba.irofficial, updatesitemap.xmllastmodafter content freeze. - Add
404.htmlif custom 404 desired; verifyog:imagedimensions 1200×630 for social sharing.