Initial commit: Clinic Samen Next.js site.

Clone of clinicsamen.com with Meshkee backend integration for blog, workshops, auth, static image slots, and SEO sitemap config.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-26 00:40:31 +03:30
co-authored by Cursor
commit f19d09c27d
129 changed files with 17838 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
Domain: brb-store.com
Documentation for backend is:https://api.meshkee.com/docs/website
Login or user icon should go to customer.{domainName}.com
When logged in, show user name + عزیز
Show a drop down for it with this item >> پروفایل من - خروج and if admin مدیریت وبسایت
Create workshops page and details >> connect to workshops
Details page:
- use light box gallery
- zoom image on hover
- has two tabs in bottom, description and comments. Comment is for authenticated user if not show a login link button or box
- and a registration row
Create blog page and details >> connect to blog
update context md for better use in other Ai and systems - update it on every prompt (If required)
+18
View File
@@ -0,0 +1,18 @@
Wire this page to clinicsamen.com, static-image slots.
Read http://meshkee.com/docs/website (static-images). Env is already set.
Fetch slots, match by key:
- slider > duplicatable
- 4 people image > 4 slot
- our-services-icon > 4 slot
- two-banner-bg > 2 slot
Use slot.images (all of them if kind=list, first if kind=single).
url → <img src>. linkUrl → wrap in <a>. Empty or fail → keep current placeholder.
Use slot.aspectRatio from the API. Do not invent upload APIs.
If image size or aspect ratio has changed during development, please update it for statics image reader. Add this as rule
update context md for better use in other Ai and systems - update it on every prompt (If required)
+18
View File
@@ -0,0 +1,18 @@
### Sitemap + robots.txt
- Do NOT ship public/sitemap.xml or public/robots.txt (nginx proxies both to Meshkee API).
- Live sitemap is an index: /sitemap.xml → /sitemap-main.xml + /sitemap-products.xml.
- Publish GET /meshkee/sitemap-config.json generated at build time from app routes.
- Include public static routes automatically; exclude auth/checkout/cart/admin paths.
- Canonical detail URLs (Meshkee defaults — omit templates unless customized):
- Product: /products/{id}/{nameFaSlug} → GET /tenants/{domain}/products/by-id/{id}
- Category: /products/category/{id}/{nameFaSlug} → GET /tenants/{domain}/categories/by-id/{id} (then list products with categoryId)
- Blog: /blog/{id}/{titleSlug} → GET /tenants/{domain}/blogs/by-id/{id}
- Portfolio: /portfolios/{id}/{titleFaSlug} → GET /tenants/{domain}/portfolios/by-id/{id}
- Slugify: Farsi letters kept, spaces → -, strip other punctuation. Do not use legacy DB slug in public URLs.
- After deploy: business dashboard → Website → Settings → Sync sitemap config (optional for CMS URLs; needed for static pages).
### On-page SEO (every public page)
- Unique <title> and meta description on every crawlable page
- Exactly one H1; H2/H3 for real sections
- All content images must have meaningful alt (CMS title when available)
- Prefer CMS fields for titles/descriptions; never leave Next defaults
+18
View File
@@ -0,0 +1,18 @@
Clone this website clinicsamen.com
Download and use banners,images and fonts from main website, icon and color Pallete from main website
Logo from main website either
Pick data from current website - all data is valid
Lang:fa
Directions: rtl
Use next js
Color palette like website
Clone only homepage, about us, contact us and درمانگاران
we will read workshops and blog from backend later
Footer Botton row (meshkee link) should be like https://safeteb.com/
update context md for better use in other Ai and systems - update it on every prompt (If required)
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+36
View File
@@ -0,0 +1,36 @@
@font-face {
font-family: "iran-sans";
src: url('https://cdn.meshkee.com/web-builder/fonts/iran-sans/iran-sans-regular.ttf');
}
@font-face {
font-family: "iran-sans-light";
src: url('https://cdn.meshkee.com/web-builder/fonts/iran-sans/iran-sans-light.ttf');
}
@font-face {
font-family: "iran-sans-medium";
src:url('https://cdn.meshkee.com/web-builder/fonts/iran-sans/iran-sans-medium.ttf');
}
@font-face {
font-family: "iran-sans-ultralight";
src: url('https://cdn.meshkee.com/web-builder/fonts/iran-sans/iran-sans-ultralight.ttf');
}
@font-face {
font-family: "iran-sans-bold";
src: url('https://cdn.meshkee.com/web-builder/fonts/iran-sans/iran-sans-bold.ttf');
}
@font-face {
font-family: "iran-sans-semibold";
src: url('https://cdn.meshkee.com/web-builder/fonts/iran-sans/iran-sans-semibold.ttf');
}
@font-face {
font-family: "iran-sans-extrabold";
src: url('https://cdn.meshkee.com/web-builder/fonts/iran-sans/iran-sans-extrabold.ttf');
}
@font-face {
font-family: "iran-sans-thin";
src: url('https://cdn.meshkee.com/web-builder/fonts/iran-sans/iran-sans-thin.ttf');
}
@font-face {
font-family: "iran-sans-black";
src: url('https://cdn.meshkee.com/web-builder/fonts/iran-sans/iran-sans-black.ttf');
}
+1
View File
@@ -0,0 +1 @@
.wb-primary-color {color: var(--wb-primary-color);}.wb-primary-bg-color {background-color: var(--wb-primary-color);}.wb-secondary-color {color: var(--wb-secondary-color);}.wb-secondary-bg-color {background-color: var(--wb-secondary-color);}.wb-tertiary-color {color: var(--wb-tertiary-color);}.wb-tertiary-bg-color {background-color: var(--wb-tertiary-color);}
+59
View File
@@ -0,0 +1,59 @@
@font-face {
font-family: "montserrat";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/montserrat-regular.ttf');
}
@font-face {
font-family: "montserrat-medium";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/montserrat-medium.ttf');
}
@font-face {
font-family: "montserrat-light";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/montserrat-light.ttf');
}
@font-face {
font-family: "montserrat-extralight";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/montserrat-extralight.ttf');
}
@font-face {
font-family: "montserrat-bold";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/montserrat-bold.ttf');
}
@font-face {
font-family: "montserrat-semibold";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/montserrat-semibold.ttf');
}
@font-face {
font-family: "montserrat-extrabold";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/montserrat-extrabold.ttf');
}
@font-face {
font-family: "montserrat-thin";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/montserrat-thin.ttf');
}
@font-face {
font-family: "montserrat-black";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/montserrat-black.ttf');
}
@font-face {
font-family: "montserrat-alternates-regular";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/MontserratAlternates-Regular.ttf');
}
@font-face {
font-family: "montserrat-alternates-light";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/MontserratAlternates-Light.ttf');
}
@font-face {
font-family: "montserrat-alternates-extrabold";
src: url('https://cdn.meshkee.com/web-builder/fonts/montserrat/MontserratAlternates-ExtraBold.ttf');
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long