Files

218 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
```powershell
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:
```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:
1. Copy `mataba-static/` contents to host root.
2. Point `https://mataba.ir` to that root; enforce HTTPS and `www → apex` redirect.
3. Verify `https://mataba.ir/sitemap.xml` and `https://mataba.ir/robots.txt` are reachable (robots references `https://mataba.ir/sitemap.xml`).
4. Submit sitemap in Google Search Console; verify canonical tags (`https://mataba.ir/`, `/about/`, `/contact/`).
5. Enable gzip/brotli, HTTP/2, and image caching.
6. 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>` (RTL `lang="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`, drawer `left:61%`, backdrop `bg-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, star `star.png`, hand `dast.png`, avatars).
- `SearchSection` + `TreeStep` + `SearchSections` → `#search` (pill `toDown`, `treStepBg.svg`, 3 steps, search form + 6 domain pills).
- `Samples` → `#samples` (4 cards `card.svg` + stars + `samplePage/1-4.png` + overlay).
- `Facilities` → `#facilities` (`facilitiesBg.svg`, 6 white squares, `circle.png` deco).
- `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: `Button` variants → `.btn*`, `Icon` (25 SVGs) → inline SVGs, `NavLink` → `a.nav-link.active`.
- Context/modal: `layoutContext` + `Modal/provider+sign-in+confirm` → `js/main.js` modal 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 `مطبا / Mataba` and `https://mataba.ir`.
- Visible UI: header brand aria-label, hero kicker/H1, footer paragraph & copyright `تمامی حقوق مادی و معنوی این وب‌سایت متعلق به «مطبا» است`, footer nav, about/contact headings.
- `sabahealth.ir` retained ONLY in `contact/index.html` as explicitly flagged outdated email with note `(دامنه قدیمی؛ نیازمند آدرس رسمی مطبا)` — not invented, not canonical, documented for owner replacement. Docs mention `Saba Health` only for migration provenance.
- `navLogo.png`/`FooterLogo.png` kept 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`, one `H1` per page, `H2`/`H3` hierarchy, 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: `@graph` with `Organization` (`@id https://mataba.ir/#org`, logo `https://mataba.ir/assets/images/navLogo.png`), `WebSite`, `WebPage`, `Service` (areaServed IR, inLanguage fa) — no invented ratings/reviews/prices/awards/addresses/credentials.
- Images: descriptive `alt` for meaningful images (sample cards, person.jpg), `alt=""` for decorative, `width`/`height` reserved, lazy-loading except hero, `preload` for `Modam-Bold.ttf`.
- Internal linking: descriptive Persian anchor text, HTML links (not JS-only), no broken links (anchors `#home #facilities #samples #packages #contact #search`, pages `about/ 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: `+۱,۲۰۰ سایت پزشکان`, `٪۹۸ رضایت`, `۷-۱۰ دقیقه تحویل`, `تحویل کمتر از ۵ روز`, `۱۰ سال سابقه`, `+۸۰۰ همکاری/بررسی‌کنندگان` — from `greeBoxDetail`/`FirstSectionDrPhotos`/`StarTemplateGreenBox`. Flagged inline with `TODO`/`note`.
- Prices/packages: `۱۱۳,۵۴۶,۰۰۰ /ماهانه` ×3 `پلن پایه شامل ۹ گزینه` + 10 service items — flagged.
- Testimonials: `DoctorComments` (7 items, duplicates, one `test`) → shown as 3 distinct cards, flagged `نظرات زیر تکراری است`.
- About: original `aboutus/page.tsx` was Lorem Ipsum — replaced with documented placeholder, no fabricated history.
- Contact: `08733212565`, `www.sabahealth.ir` (old domain), `استان کردستان... مرکز رشد` , `آقای آرش صادقی` — from `contactUs` constant, flagged `نیازمند تایید`.
- Brand images: `navLogo.png`/`FooterLogo.png` temporary.
---
## 10) Backend integrations still required
- **Login/OTP**: phone `^09\d{9}$` validates client-side; `loginForm` shows demo notice `پیامکی ارسال نمی‌شود. یکپارچه‌سازی بک‌اند لازم است.` — no endpoint. Original `features/auth/login.schema.ts` regex preserved.
- **Lead/contact forms**: `leadForm`/`leadFormPage`/`contactFormPage` validate (required name, mobile regex, textarea), then show `ارسال نهایی نیازمند اتصال بک‌اند است و هنوز ثبت نشده.` — no `POST` endpoint invented.
- **Domain search**: `domainForm` + `.domain` pills 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.css` 16KB, `main.js` 6KB, no deps), optimized images, `width`/`height` reserved,.lazy except hero, `font-display:swap`, no third-party scripts, CLS avoided.
- Keyboard: hamburger toggles `aria-expanded`, drawer closes on `Escape`/backdrop/nav click, modal closes on `Escape`/backdrop/`X`, visible `:focus-visible` outline `3px solid #014224`, skip links.
- `prefers-reduced-motion:reduce` disables 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/fonts `200`.
- Nav links: `#home #samples #packages #facilities #search #contact` valid anchors; `about/` `contact/` valid pages; no dead `/samples /packages /blogs`.
- Mobile menu: opens/closes via hamburger, backdrop, nav link, `Escape`.
- Forms: empty/invalid → `ferr` Persian error; valid → `fok` demo notice (no fake success).
- Domain: empty → error; with value → demo notice; pill clicks append TLD.
- Carousel: `tPrev/tNext` scroll, autoplay 3s, hover pauses.
- Modal: `data-open-login` opens, `data-close-login`/backdrop/`Escape` closes, regex `^09\d{9}$`.
- Headings: 1× `H1` per page, no skipped levels.
- Metadata: unique titles/descriptions/canonicals, `og`/`twitter`/`JSON-LD` valid JSON, no invented fields.
- `sitemap.xml` valid (3 URLs), `robots.txt` valid, does not block assets, `manifest.webmanifest` valid (`dir rtl lang fa theme #9EB185`).
- No `next`/`react`/`jsx` runtime deps; `node -c js/main.js` pass.
- `grep` brand audit: no public `Saba` except flagged email (documented).
- Horizontal overflow: none observed (`wrap` 90-95%, flex-wrap, no fixed viewport-breaking widths).
- Next.js source intact (`sabaHealth-develop/app/layout.tsx` LastWrite 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
- [x] Static Mataba site implemented, visually faithful to Saba Health source.
- [x] HTML5/CSS3/vanilla JS only; Next.js/React not required to run.
- [x] Persian RTL + Modam preserved; responsive.
- [x] Mataba branding consistent; outdated public references removed/flagged.
- [x] Homepage + About + Contact work; navigation valid; no 404 thin pages.
- [x] Technical SEO foundations (semantics, RTL, metadata, canonical, sitemap, robots, JSON-LD, alt/dimensions, linking).
- [x] Important content as HTML text, not image-only.
- [x] No unsupported business claims published as fact; unverified flagged.
- [x] Run locally and tested; issues fixed/documented.
- [x] Original Next.js app intact; `docs/component-migration-map.md` present.
---
## 15) Next steps for owner
1. Confirm/Replace: stats, prices, testimonials, about copy, contact phone/email/address/management, social URLs, brand logos (`navLogo.png`/`FooterLogo.png`).
2. Provide backend endpoints for lead/contact/login/domain, then wire `fetch` in `js/main.js` (replace demo notices).
3. Replace `sabahealth.ir` email with `mataba.ir` official, update `sitemap.xml` `lastmod` after content freeze.
4. Add `404.html` if custom 404 desired; verify `og:image` dimensions 1200×630 for social sharing.