Initial Next.js site covering home, about, and contact, matching the live studio layout. Co-authored-by: Cursor <cursoragent@cursor.com>
3.8 KiB
3.8 KiB
Khiyal Studio Website Context
Project
- English LTR architecture studio site for Khiyal Architecture Studio (Mostafa Heydarhoseini).
- Next.js 16 App Router, React 19, TypeScript, Tailwind 4,
src/app. - Apex domain:
khiyalstudio.com. - Language:
en, direction:ltr. - Local images live in
public/images; local fonts live inpublic/fonts(Antonio + Plus Jakarta Sans, matching the source site). - Public routes in this clone:
/,/about-us,/contact-us. - Portfolio and blog listing/detail pages are not implemented yet; homepage cards use current site data as local placeholders until Meshkee portfolio/blog endpoints are wired.
Source clone
- Visual language cloned from
https://khiyalstudio.com/(Crafto Architecture theme: dark gray#191919, accent#efff02, Antonio headings, Plus Jakarta Sans body). - Logo, banners, project photos, about/contact heroes, and partner marks were downloaded from the live theme/storage.
- Color tokens:
--base-color: #efff02,--dark-gray: #191919,--nero-grey: #1F1F1F,--medium-gray: #737373,--charcoal-grey: #3E3E3E. - Footer bottom credit row matches
https://safeteb.com/(Meshkee animated frame + white logo + “Designed And Developed By Meshkee E-Commerce Team”).
Meshkee API
- Canonical docs:
https://api.meshkee.com/docs/website - API base:
https://api.meshkee.com/api/v1 - Tenant domain:
khiyalstudio.com(SITE_DOMAINinsrc/lib/site.ts) - All public fetches go through
src/lib/meshkee.ts. Do not call the API from components. - Empty or failed static-image slots keep local placeholders.
- Do not invent dashboard/CMS/upload endpoints.
- Do not add
public/sitemap.xml,public/robots.txt,app/sitemap.ts, orapp/robots.ts; nginx proxies these URLs to Meshkee.
Homepage static-image slots
Dashboard import catalog: GET /meshkee/static-image-slots.
| Key | Kind | itemCount | Aspect | Width | Used on |
|---|---|---|---|---|---|
slider |
list | null | 16:9 | 1920 | Hero (HeroSlider) |
signature |
single | 1 | 16:5 | 480 | Intro signature |
partners |
list | 4 | 3:2 | 320 | Partner / video logos |
video-cover |
single | 1 | 16:9 | 1200 | Watch-video cover |
recent-projects |
list | 3 | 16:8 | 1600 | Recent projects slider |
news |
list | 3 | 4:5 | 800 | Projects under construction |
about-hero |
single | 1 | 16:6 | 1920 | About header |
about-gallery |
list | 3 | 3:4 | 720 | About photos |
about-owner |
single | 1 | 16:9 | 1400 | Founder portrait |
contact-hero |
single | 1 | 16:6 | 1920 | Contact header |
If a rendered image size or crop ratio changes, update the catalog in src/app/meshkee/static-image-slots/route.ts (and STATIC_IMAGE_SLOT_CATALOG).
Sitemap and SEO
GET /meshkee/sitemap-config.jsonis generated by scanning public staticsrc/app/**/page.*routes.- Auth, admin, and Meshkee integration routes are excluded.
- Sitemap base URL uses
NEXT_PUBLIC_SITE_URL, thenSITE_URL, withhttps://khiyalstudio.comas the fallback. - Future portfolio/blog details must use Meshkee canonical
{id}/{slug}URLs when those routes are added. - Every crawlable page must have unique metadata, exactly one H1, structured headings, and meaningful image alt text.
Contact
- Phone:
0912 252 50 08(09122525008) - Email:
Mostafa.eng@live.com - Instagram:
mostafa_heydar_hoseini - WhatsApp / Telegram / Bale links live in
src/lib/site.ts - Contact form is client-side (success state only) until a Meshkee contact endpoint is connected.
Verification
- Run
npm run lintandnpm run build. - Verify
/meshkee/static-image-slotsreturns the slot catalog. - Verify
/meshkee/sitemap-config.jsonlists/,/about-us, and/contact-us. - Check homepage, about, and contact on desktop and mobile; hamburger menu, hero slider, and footer Meshkee credit should match the source palette.