From 39d85512c5c8e718ce75339d11dbc257c709e15e Mon Sep 17 00:00:00 2001 From: Alireza Hassani Date: Thu, 13 Aug 2026 14:18:47 +0330 Subject: [PATCH] Add replaceable images, category mega menu, and contact pages. Give every placeholder a real img src, add FAQ and contact sections, and put categories first in the header. Co-authored-by: Cursor --- prompt.txt | 7 +- public/images/about.png | Bin 0 -> 1244 bytes public/images/banner-dual-1.png | Bin 0 -> 963 bytes public/images/banner-dual-2.png | Bin 0 -> 963 bytes public/images/banner-triple-1.png | Bin 0 -> 684 bytes public/images/banner-triple-2.png | Bin 0 -> 684 bytes public/images/banner-triple-3.png | Bin 0 -> 684 bytes public/images/blog-1.png | Bin 0 -> 597 bytes public/images/blog-2.png | Bin 0 -> 597 bytes public/images/blog-3.png | Bin 0 -> 597 bytes public/images/blog-4.png | Bin 0 -> 597 bytes public/images/category-1.png | Bin 0 -> 322 bytes public/images/category-2.png | Bin 0 -> 323 bytes public/images/category-3.png | Bin 0 -> 323 bytes public/images/category-4.png | Bin 0 -> 322 bytes public/images/category-5.png | Bin 0 -> 323 bytes public/images/category-6.png | Bin 0 -> 323 bytes public/images/category-7.png | Bin 0 -> 322 bytes public/images/category-8.png | Bin 0 -> 323 bytes public/images/enamad.png | Bin 0 -> 161 bytes public/images/sale-1.png | Bin 0 -> 752 bytes public/images/sale-2.png | Bin 0 -> 752 bytes public/images/sale-3.png | Bin 0 -> 753 bytes public/images/sale-4.png | Bin 0 -> 752 bytes public/images/sale-5.png | Bin 0 -> 753 bytes public/images/sale-6.png | Bin 0 -> 752 bytes public/images/sale-7.png | Bin 0 -> 752 bytes public/images/sale-8.png | Bin 0 -> 753 bytes public/images/sale-banner.png | Bin 0 -> 822 bytes public/images/samandehi.png | Bin 0 -> 161 bytes public/images/side-banner-1.png | Bin 0 -> 551 bytes public/images/side-banner-2.png | Bin 0 -> 550 bytes public/images/slider-1.png | Bin 0 -> 1907 bytes public/images/slider-2.png | Bin 0 -> 1907 bytes public/images/slider-3.png | Bin 0 -> 1908 bytes public/images/top-1.png | Bin 0 -> 752 bytes public/images/top-2.png | Bin 0 -> 753 bytes public/images/top-3.png | Bin 0 -> 752 bytes public/images/top-4.png | Bin 0 -> 752 bytes public/images/top-5.png | Bin 0 -> 753 bytes public/images/top-6.png | Bin 0 -> 752 bytes public/images/top-7.png | Bin 0 -> 752 bytes public/images/top-8.png | Bin 0 -> 753 bytes public/images/yeganeh-1.png | Bin 0 -> 752 bytes public/images/yeganeh-2.png | Bin 0 -> 752 bytes public/images/yeganeh-3.png | Bin 0 -> 753 bytes public/images/yeganeh-4.png | Bin 0 -> 752 bytes public/images/yeganeh-5.png | Bin 0 -> 752 bytes public/images/yeganeh-6.png | Bin 0 -> 753 bytes scripts/make-placeholders.py | 87 ++++++++++++++++++++++++ src/app/page.tsx | 4 ++ src/components/About.tsx | 5 +- src/components/Banners.tsx | 16 ++++- src/components/BlogCarousel.tsx | 2 +- src/components/Contact.tsx | 53 +++++++++++++++ src/components/Faq.tsx | 21 ++++++ src/components/FeaturedCategories.tsx | 3 +- src/components/Footer.tsx | 4 +- src/components/Header.tsx | 94 ++++++++++++++++++++++++-- src/components/Hero.tsx | 11 ++- src/components/Icons.tsx | 8 +++ src/components/Placeholder.tsx | 34 +++------- src/components/ProductCard.tsx | 3 +- src/components/ProductCarousel.tsx | 4 +- src/data/content.ts | 82 ++++++++++++++++++---- 65 files changed, 382 insertions(+), 56 deletions(-) create mode 100644 public/images/about.png create mode 100644 public/images/banner-dual-1.png create mode 100644 public/images/banner-dual-2.png create mode 100644 public/images/banner-triple-1.png create mode 100644 public/images/banner-triple-2.png create mode 100644 public/images/banner-triple-3.png create mode 100644 public/images/blog-1.png create mode 100644 public/images/blog-2.png create mode 100644 public/images/blog-3.png create mode 100644 public/images/blog-4.png create mode 100644 public/images/category-1.png create mode 100644 public/images/category-2.png create mode 100644 public/images/category-3.png create mode 100644 public/images/category-4.png create mode 100644 public/images/category-5.png create mode 100644 public/images/category-6.png create mode 100644 public/images/category-7.png create mode 100644 public/images/category-8.png create mode 100644 public/images/enamad.png create mode 100644 public/images/sale-1.png create mode 100644 public/images/sale-2.png create mode 100644 public/images/sale-3.png create mode 100644 public/images/sale-4.png create mode 100644 public/images/sale-5.png create mode 100644 public/images/sale-6.png create mode 100644 public/images/sale-7.png create mode 100644 public/images/sale-8.png create mode 100644 public/images/sale-banner.png create mode 100644 public/images/samandehi.png create mode 100644 public/images/side-banner-1.png create mode 100644 public/images/side-banner-2.png create mode 100644 public/images/slider-1.png create mode 100644 public/images/slider-2.png create mode 100644 public/images/slider-3.png create mode 100644 public/images/top-1.png create mode 100644 public/images/top-2.png create mode 100644 public/images/top-3.png create mode 100644 public/images/top-4.png create mode 100644 public/images/top-5.png create mode 100644 public/images/top-6.png create mode 100644 public/images/top-7.png create mode 100644 public/images/top-8.png create mode 100644 public/images/yeganeh-1.png create mode 100644 public/images/yeganeh-2.png create mode 100644 public/images/yeganeh-3.png create mode 100644 public/images/yeganeh-4.png create mode 100644 public/images/yeganeh-5.png create mode 100644 public/images/yeganeh-6.png create mode 100644 scripts/make-placeholders.py create mode 100644 src/components/Contact.tsx create mode 100644 src/components/Faq.tsx diff --git a/prompt.txt b/prompt.txt index ed5a22d..7773dac 100644 --- a/prompt.txt +++ b/prompt.txt @@ -9,7 +9,7 @@ Color palette is purple cyan red - light theme Design only homepage Use Persian font like iran-yekan or kalameh or iran sans and some cool kids like English font -Do not use images - show only placeholders with sizes +Do not use images - show only placeholders images - use empty image file so they can be replace easily Do not use text over the images or banners - even slider Sections are: @@ -30,4 +30,7 @@ Sections are: 10. Yeganeh brand product carousel 11. About nini Naderi 12. Latest blog carousel -13. footer \ No newline at end of file +13. footer + +For header, as first item add a categories, show a mega menu for categories +Other link are: special sale - about us - faq - contact us \ No newline at end of file diff --git a/public/images/about.png b/public/images/about.png new file mode 100644 index 0000000000000000000000000000000000000000..5603f3e42fda6c9130e4bba7d0bbdc7f58d66523 GIT binary patch literal 1244 zcmeAS@N?(olHy`uVBq!ia0y~yU@~A}V4T3g1QfAPKkLoFz_QrW#WAGf*4wL&oD2*c zEC*l9pW)edQ9_Bwr|ECbE;fd9u1pL(oFL@P1VjfWFaVK(3J6g}m|Eswaf~Q6-HBm7 zb%TMP#)p8SkY>)OMIu289U2-xiGfCG9O8T+Nt-Oh+MxTUIqpZ zmW|)_d3bj)iW-=%Y>L*4WoEGHW?@J;074Cn%s|Az#sfkU1|S5H82)lvxIGUE73={s zoa9zBV2OE%2cZ&ZsbXZw=`f;X2^7ym@(Mh=V3#Y%WK_!7u9F}TzZ;l289ZJ6T-G@y GGywod;iMn{ literal 0 HcmV?d00001 diff --git a/public/images/banner-dual-2.png b/public/images/banner-dual-2.png new file mode 100644 index 0000000000000000000000000000000000000000..eeba1c634f1eabe29aa0f37cc64b32a4510e04c6 GIT binary patch literal 963 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV3gos0*W{nT{zCbz})5O;uunK>+MxTUIqpZ zmW|)vGq~)y<*7Az`((> z@%#H;PJ0&4H%mN4?-b0;YWS|im{7)$#*RkJkZrihh(Vw!f^xB`1d3sp3096_CRjI( x3{G3lgw15Sx?zSaHYX&MQ5~)y<*7Az`((> z@%ww`)-^mH3F^M99<+IXW!NLm$*`H(z#5G>@P^?GA0~lCB~T+am1p=c%miD3X(m`V pZ45TB7De+H{oMfc@W}Gq4&8&~)y<*7Az`((> z@w+|`?+!-JH%mN4?-ab0YWS|im{7)$#*RkJkZrihh(Vw!f^xB`1d3sp3096_CRjI( w3{G3lgw15Sx?zSaHYX&MQ5f literal 0 HcmV?d00001 diff --git a/public/images/blog-2.png b/public/images/blog-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b531bf71fc1f48d323255ec38d5489aea1079083 GIT binary patch literal 597 zcmeAS@N?(olHy`uVBq!ia0y~yV9Wrr?{F{y$xEx(gfcKN$#}XrhE&{odqq)@fq{eN z;QRZ{EfFk|1s!v5vZ(7_WiAlnWO&Tb!)(BJzyipCQXoDKVW2X&>KznJROdh8^-3UxB44$rjF6*2U FngB67uDbvL literal 0 HcmV?d00001 diff --git a/public/images/blog-3.png b/public/images/blog-3.png new file mode 100644 index 0000000000000000000000000000000000000000..d551ef2ab888520a78f01e7ccbbf8b8d0f7f1aed GIT binary patch literal 597 zcmeAS@N?(olHy`uVBq!ia0y~yV9Wrr?{F{y$xEx(gfcKN$#}XrhE&{od&Q8Kfq{c% zi{bijh)F+&ft0UwY7r9gZf!UlW@)sGp#njpGy2oq%} zvR%X&ifk87m!cRNz)0AsB%6v9S~Lk313pn?Hxc#$DS`bXi}9e+gB5pfuG9b~7Y0vP KKbLh*2~7Z?Pp&}# literal 0 HcmV?d00001 diff --git a/public/images/blog-4.png b/public/images/blog-4.png new file mode 100644 index 0000000000000000000000000000000000000000..31e88080faef074d34d652298e04259defff7553 GIT binary patch literal 597 zcmeAS@N?(olHy`uVBq!ia0y~yV9Wrr?{F{y$xEx(gfcKN$#}XrhE&{od&Q8Kfq{c% z<9B@?-W`m*IXu3r9<+I1XPD!{bijh)F+&ft0UwY7r9gZf!UlW@)sGp#njpGy2oq%} zvR%X&ifk87m!cRNz)0AsB%6v9S~Lk313pn?Hxc#$DS`bXi?KXrwdF#o&%c4mg~8L+ K&t;ucLK6V%J*?>f literal 0 HcmV?d00001 diff --git a/public/images/category-1.png b/public/images/category-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb753e8e2e816cf90455d271662f3950c3d3f3b7 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I2}rW6{ZPfgz{u(8;uunK>+MBHUIqq^BO5;J z^YHFq6u0r1tQm3Hv?@l2LFWJy1o1>PutJc;1_o{zVirqagdjF7DkB;gv8jB+1k)sz z05e|a0L*xxB?ub~u&HFi<`#nlas19gwgKH)cee$uNW8wO8TKbLh*2~7Zm C%2F`^ literal 0 HcmV?d00001 diff --git a/public/images/category-2.png b/public/images/category-2.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1b46076723c7a7626e154ab552e1e754be9940 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I2}rW6{ZPfgz{ut4;uunK>+MBDUIqpZmW|)v z_j1~^i1REtsktL<)z=*n3=s{i5G1jIfg6Gh5*Wo`h)w4J69n;KQMrME8Jo%*tT0VF z2VllWG%!Mq2U>z;12&bcSlx0!j{%!yaAzUgfbOhaxr}^=kNZ4yu(<>b90pHUKbLh* G2~7a9pj00K literal 0 HcmV?d00001 diff --git a/public/images/category-3.png b/public/images/category-3.png new file mode 100644 index 0000000000000000000000000000000000000000..10c46c82c749c181f8fcffd3d14f88659215f085 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I2}rW6{ZPfgz{ut4;uunK>+MBDUIqpZmW|)v zGqvz!f>f+-^nGP`NKv4s01QaoHZ(x8Tg9Jt~D8iFVdQ&MBb@ E0ACVTMF0Q* literal 0 HcmV?d00001 diff --git a/public/images/category-4.png b/public/images/category-4.png new file mode 100644 index 0000000000000000000000000000000000000000..fb753e8e2e816cf90455d271662f3950c3d3f3b7 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I2}rW6{ZPfgz{u(8;uunK>+MBHUIqq^BO5;J z^YHFq6u0r1tQm3Hv?@l2LFWJy1o1>PutJc;1_o{zVirqagdjF7DkB;gv8jB+1k)sz z05e|a0L*xxB?ub~u&HFi<`#nlas19gwgKH)cee$uNW8wO8TKbLh*2~7Zm C%2F`^ literal 0 HcmV?d00001 diff --git a/public/images/category-5.png b/public/images/category-5.png new file mode 100644 index 0000000000000000000000000000000000000000..10c46c82c749c181f8fcffd3d14f88659215f085 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I2}rW6{ZPfgz{ut4;uunK>+MBDUIqpZmW|)v zGqvz!f>f+-^nGP`NKv4s01QaoHZ(x8Tg9Jt~D8iFVdQ&MBb@ E0ACVTMF0Q* literal 0 HcmV?d00001 diff --git a/public/images/category-6.png b/public/images/category-6.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1b46076723c7a7626e154ab552e1e754be9940 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I2}rW6{ZPfgz{ut4;uunK>+MBDUIqpZmW|)v z_j1~^i1REtsktL<)z=*n3=s{i5G1jIfg6Gh5*Wo`h)w4J69n;KQMrME8Jo%*tT0VF z2VllWG%!Mq2U>z;12&bcSlx0!j{%!yaAzUgfbOhaxr}^=kNZ4yu(<>b90pHUKbLh* G2~7a9pj00K literal 0 HcmV?d00001 diff --git a/public/images/category-7.png b/public/images/category-7.png new file mode 100644 index 0000000000000000000000000000000000000000..fb753e8e2e816cf90455d271662f3950c3d3f3b7 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I2}rW6{ZPfgz{u(8;uunK>+MBHUIqq^BO5;J z^YHFq6u0r1tQm3Hv?@l2LFWJy1o1>PutJc;1_o{zVirqagdjF7DkB;gv8jB+1k)sz z05e|a0L*xxB?ub~u&HFi<`#nlas19gwgKH)cee$uNW8wO8TKbLh*2~7Zm C%2F`^ literal 0 HcmV?d00001 diff --git a/public/images/category-8.png b/public/images/category-8.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1b46076723c7a7626e154ab552e1e754be9940 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I2}rW6{ZPfgz{ut4;uunK>+MBDUIqpZmW|)v z_j1~^i1REtsktL<)z=*n3=s{i5G1jIfg6Gh5*Wo`h)w4J69n;KQMrME8Jo%*tT0VF z2VllWG%!Mq2U>z;12&bcSlx0!j{%!yaAzUgfbOhaxr}^=kNZ4yu(<>b90pHUKbLh* G2~7a9pj00K literal 0 HcmV?d00001 diff --git a/public/images/enamad.png b/public/images/enamad.png new file mode 100644 index 0000000000000000000000000000000000000000..6b082b2854d7dec19035bae1a337307d53d9e440 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51SA=YQ-1-e3{MxwkcwMx&olBeFmNz0_|Bik pb~}SVbuq)sS>Z}LR01_8nTlRVTsWh$@&nLL22WQ%mvv4FO#mqMCK~_% literal 0 HcmV?d00001 diff --git a/public/images/sale-1.png b/public/images/sale-1.png new file mode 100644 index 0000000000000000000000000000000000000000..350329abb1708ee6fdbe96866c3fcd252bc75804 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&+dW+zLn>~)y==(Kz`((> z@w+|`?~X=J)-}GX9!&DS&fq_hp@+qdNtqFd8z&y{XaM2_6$2p~)y}Xf=fq{c% zKk}dnwn3CF#Atr=wWeVQf36=#)$_!8h|)K#XtyzB{+LnKo~e08GgYp00i_>zopr02fQe;{X5v literal 0 HcmV?d00001 diff --git a/public/images/sale-3.png b/public/images/sale-3.png new file mode 100644 index 0000000000000000000000000000000000000000..395e6ac8f3be8c8afd33eb5b74bf15753804dda5 GIT binary patch literal 753 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&J3L(+Ln>~)y==(Kz`((> z@%ww`)-^mn8VR{UtkYvwu~&4lB&Zk&NpOO24~rWU2rD;EWB}p=9tkQSj3LbkR&v0j z0j$J82%@Bi1!96Sc4<;9Xq*@VaR3c%Aj5*5B}~Kz5-bc!@&YUjiHQZ61+YjWDi&ZC wD0?yxj%UhjfFuLF2?^Z-2~So?GMU5LKK<+Bm~g{XU{YrAboFyt=akR{05&qi%K!iX literal 0 HcmV?d00001 diff --git a/public/images/sale-4.png b/public/images/sale-4.png new file mode 100644 index 0000000000000000000000000000000000000000..350329abb1708ee6fdbe96866c3fcd252bc75804 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&+dW+zLn>~)y==(Kz`((> z@w+|`?~X=J)-}GX9!&DS&fq_hp@+qdNtqFd8z&y{XaM2_6$2p~)y==(Kz`((> z@%ww`)-^mn8VR{UtkYvwu~&4lB&Zk&NpOO24~rWU2rD;EWB}p=9tkQSj3LbkR&v0j z0j$J82%@Bi1!96Sc4<;9Xq*@VaR3c%Aj5*5B}~Kz5-bc!@&YUjiHQZ61+YjWDi&ZC wD0?yxj%UhjfFuLF2?^Z-2~So?GMU5LKK<+Bm~g{XU{YrAboFyt=akR{05&qi%K!iX literal 0 HcmV?d00001 diff --git a/public/images/sale-6.png b/public/images/sale-6.png new file mode 100644 index 0000000000000000000000000000000000000000..fd379725762089ad4158c2a02568ed0a7b113b62 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&+dW+zLn>~)y}Xf=fq{c% zKk}dnwn3CF#Atr=wWeVQf36=#)$_!8h|)K#XtyzB{+LnKo~e08GgYp00i_>zopr02fQe;{X5v literal 0 HcmV?d00001 diff --git a/public/images/sale-7.png b/public/images/sale-7.png new file mode 100644 index 0000000000000000000000000000000000000000..350329abb1708ee6fdbe96866c3fcd252bc75804 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&+dW+zLn>~)y==(Kz`((> z@w+|`?~X=J)-}GX9!&DS&fq_hp@+qdNtqFd8z&y{XaM2_6$2p~)y==(Kz`((> z@%ww`)-^mn8VR{UtkYvwu~&4lB&Zk&NpOO24~rWU2rD;EWB}p=9tkQSj3LbkR&v0j z0j$J82%@Bi1!96Sc4<;9Xq*@VaR3c%Aj5*5B}~Kz5-bc!@&YUjiHQZ61+YjWDi&ZC wD0?yxj%UhjfFuLF2?^Z-2~So?GMU5LKK<+Bm~g{XU{YrAboFyt=akR{05&qi%K!iX literal 0 HcmV?d00001 diff --git a/public/images/sale-banner.png b/public/images/sale-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..ea259c1ed614bdc7a5671f1095b16653caaac445 GIT binary patch literal 822 zcmeAS@N?(olHy`uVBq!ia0vp^9~c-ICvY$US@K(|v>6zf{(8DNhE&{od&!ZLfq{eN z;OqNmr`H~tu9}h{q%(VEo4FEW8=G_U!h;tiq#BPM{EnH+c9j+Z72Bdf#n{H9!!wpk=^Fn9@5E1Hlbqf)UG(6hboS}h$ yJIaaC&D#d^1$u%ZQTOTwXwrkGH=?wsGdl3Eu6c9HRSlRQ7(8A5T-G@yGywpQ%oV%< literal 0 HcmV?d00001 diff --git a/public/images/samandehi.png b/public/images/samandehi.png new file mode 100644 index 0000000000000000000000000000000000000000..6640e13075ae31d53d2aa58b84915991adabaf61 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51SA=YQ-1-e3{MxwkcwMx&l~bGFmNz$`1!rj pDUPqkVX{=ls^?QVxTyrmUxQZDVUknFxi7af;~Z|p^)JiqXavY0`qYQA7g~8PLKg>g7R?)6J;op zT|^m*WEarMNV;)&AVEfp2&a;2DzarX36^6EnULH>&zopr0Q}I9TmS$7 literal 0 HcmV?d00001 diff --git a/public/images/slider-1.png b/public/images/slider-1.png new file mode 100644 index 0000000000000000000000000000000000000000..23222494990d8f4aa1bf118d85d8c4c61b782bad GIT binary patch literal 1907 zcmeAS@N?(olHy`uVBq!ia0y~yU_QXWz_^5i2`EzNcY7rR1G|-{i(^Q|t+&?W`r7#bScfSQ3S*nlEDCJYP`84L^t7e-}9!(cQW njOK;W@?f+~9BK8!pDj*CcXU_2xGo8-Oc^{~{an^LB{Ts5W7F=) literal 0 HcmV?d00001 diff --git a/public/images/slider-2.png b/public/images/slider-2.png new file mode 100644 index 0000000000000000000000000000000000000000..463727714ac87820167a1f6ccca9755f116391ba GIT binary patch literal 1907 zcmeAS@N?(olHy`uVBq!ia0y~yU_QXWz_^5i2`EzNcY7rR1G|-{i(^Q|t+&?W`r7#bScfSQ3S*rXU3cuW`=Br+Hn3@(hyjE2Ez nIvC9hqvgS9nK;twg+E&w1(>HD4A*G^R;CP|u6{1-oD!M<^%?Gi literal 0 HcmV?d00001 diff --git a/public/images/slider-3.png b/public/images/slider-3.png new file mode 100644 index 0000000000000000000000000000000000000000..d62ba2a3df63e22feb227c98a1bfb0408deb1077 GIT binary patch literal 1908 zcmeAS@N?(olHy`uVBq!ia0y~yU_QXWz_^5i2`EzNcY7rR1G}}Si(^Q|t+&?p2(K2y_)e8@nvnmTze$kb`x)oRpGI+ZBxvX~)y==(Kz`((> z@w+|`?~X=J)-}GX9!&DS&fq_hp@+qdNtqFd8z&y{XaM2_6$2p~)y==(Kz`((> z@%ww`)-^mn8VR{UtkYvwu~&4lB&Zk&NpOO24~rWU2rD;EWB}p=9tkQSj3LbkR&v0j z0j$J82%@Bi1!96Sc4<;9Xq*@VaR3c%Aj5*5B}~Kz5-bc!@&YUjiHQZ61+YjWDi&ZC wD0?yxj%UhjfFuLF2?^Z-2~So?GMU5LKK<+Bm~g{XU{YrAboFyt=akR{05&qi%K!iX literal 0 HcmV?d00001 diff --git a/public/images/top-3.png b/public/images/top-3.png new file mode 100644 index 0000000000000000000000000000000000000000..fd379725762089ad4158c2a02568ed0a7b113b62 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&+dW+zLn>~)y}Xf=fq{c% zKk}dnwn3CF#Atr=wWeVQf36=#)$_!8h|)K#XtyzB{+LnKo~e08GgYp00i_>zopr02fQe;{X5v literal 0 HcmV?d00001 diff --git a/public/images/top-4.png b/public/images/top-4.png new file mode 100644 index 0000000000000000000000000000000000000000..350329abb1708ee6fdbe96866c3fcd252bc75804 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&+dW+zLn>~)y==(Kz`((> z@w+|`?~X=J)-}GX9!&DS&fq_hp@+qdNtqFd8z&y{XaM2_6$2p~)y==(Kz`((> z@%ww`)-^mn8VR{UtkYvwu~&4lB&Zk&NpOO24~rWU2rD;EWB}p=9tkQSj3LbkR&v0j z0j$J82%@Bi1!96Sc4<;9Xq*@VaR3c%Aj5*5B}~Kz5-bc!@&YUjiHQZ61+YjWDi&ZC wD0?yxj%UhjfFuLF2?^Z-2~So?GMU5LKK<+Bm~g{XU{YrAboFyt=akR{05&qi%K!iX literal 0 HcmV?d00001 diff --git a/public/images/top-6.png b/public/images/top-6.png new file mode 100644 index 0000000000000000000000000000000000000000..fd379725762089ad4158c2a02568ed0a7b113b62 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&+dW+zLn>~)y}Xf=fq{c% zKk}dnwn3CF#Atr=wWeVQf36=#)$_!8h|)K#XtyzB{+LnKo~e08GgYp00i_>zopr02fQe;{X5v literal 0 HcmV?d00001 diff --git a/public/images/top-7.png b/public/images/top-7.png new file mode 100644 index 0000000000000000000000000000000000000000..350329abb1708ee6fdbe96866c3fcd252bc75804 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&+dW+zLn>~)y==(Kz`((> z@w+|`?~X=J)-}GX9!&DS&fq_hp@+qdNtqFd8z&y{XaM2_6$2p~)y==(Kz`((> z@%ww`)-^mn8VR{UtkYvwu~&4lB&Zk&NpOO24~rWU2rD;EWB}p=9tkQSj3LbkR&v0j z0j$J82%@Bi1!96Sc4<;9Xq*@VaR3c%Aj5*5B}~Kz5-bc!@&YUjiHQZ61+YjWDi&ZC wD0?yxj%UhjfFuLF2?^Z-2~So?GMU5LKK<+Bm~g{XU{YrAboFyt=akR{05&qi%K!iX literal 0 HcmV?d00001 diff --git a/public/images/yeganeh-1.png b/public/images/yeganeh-1.png new file mode 100644 index 0000000000000000000000000000000000000000..350329abb1708ee6fdbe96866c3fcd252bc75804 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&+dW+zLn>~)y==(Kz`((> z@w+|`?~X=J)-}GX9!&DS&fq_hp@+qdNtqFd8z&y{XaM2_6$2p~)y}Xf=fq{c% zKk}dnwn3CF#Atr=wWeVQf36=#)$_!8h|)K#XtyzB{+LnKo~e08GgYp00i_>zopr02fQe;{X5v literal 0 HcmV?d00001 diff --git a/public/images/yeganeh-3.png b/public/images/yeganeh-3.png new file mode 100644 index 0000000000000000000000000000000000000000..395e6ac8f3be8c8afd33eb5b74bf15753804dda5 GIT binary patch literal 753 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&J3L(+Ln>~)y==(Kz`((> z@%ww`)-^mn8VR{UtkYvwu~&4lB&Zk&NpOO24~rWU2rD;EWB}p=9tkQSj3LbkR&v0j z0j$J82%@Bi1!96Sc4<;9Xq*@VaR3c%Aj5*5B}~Kz5-bc!@&YUjiHQZ61+YjWDi&ZC wD0?yxj%UhjfFuLF2?^Z-2~So?GMU5LKK<+Bm~g{XU{YrAboFyt=akR{05&qi%K!iX literal 0 HcmV?d00001 diff --git a/public/images/yeganeh-4.png b/public/images/yeganeh-4.png new file mode 100644 index 0000000000000000000000000000000000000000..350329abb1708ee6fdbe96866c3fcd252bc75804 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&+dW+zLn>~)y==(Kz`((> z@w+|`?~X=J)-}GX9!&DS&fq_hp@+qdNtqFd8z&y{XaM2_6$2p~)y}Xf=fq{c% zKk}dnwn3CF#Atr=wWeVQf36=#)$_!8h|)K#XtyzB{+LnKo~e08GgYp00i_>zopr02fQe;{X5v literal 0 HcmV?d00001 diff --git a/public/images/yeganeh-6.png b/public/images/yeganeh-6.png new file mode 100644 index 0000000000000000000000000000000000000000..395e6ac8f3be8c8afd33eb5b74bf15753804dda5 GIT binary patch literal 753 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yvj5Dq4wNI}__GYkw&J3L(+Ln>~)y==(Kz`((> z@%ww`)-^mn8VR{UtkYvwu~&4lB&Zk&NpOO24~rWU2rD;EWB}p=9tkQSj3LbkR&v0j z0j$J82%@Bi1!96Sc4<;9Xq*@VaR3c%Aj5*5B}~Kz5-bc!@&YUjiHQZ61+YjWDi&ZC wD0?yxj%UhjfFuLF2?^Z-2~So?GMU5LKK<+Bm~g{XU{YrAboFyt=akR{05&qi%K!iX literal 0 HcmV?d00001 diff --git a/scripts/make-placeholders.py b/scripts/make-placeholders.py new file mode 100644 index 0000000..eda230c --- /dev/null +++ b/scripts/make-placeholders.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +import struct +import zlib +from pathlib import Path + +COLORS = { + "purple": (216, 198, 255), + "cyan": (165, 243, 252), + "rose": (254, 205, 211), +} + +IMAGES = [ + ("slider-1.png", 960, 420, "purple"), + ("slider-2.png", 960, 420, "rose"), + ("slider-3.png", 960, 420, "cyan"), + ("side-banner-1.png", 360, 200, "cyan"), + ("side-banner-2.png", 360, 200, "rose"), + ("category-1.png", 160, 160, "purple"), + ("category-2.png", 160, 160, "rose"), + ("category-3.png", 160, 160, "cyan"), + ("category-4.png", 160, 160, "purple"), + ("category-5.png", 160, 160, "cyan"), + ("category-6.png", 160, 160, "rose"), + ("category-7.png", 160, 160, "purple"), + ("category-8.png", 160, 160, "rose"), + ("sale-banner.png", 240, 400, "rose"), + ("sale-1.png", 280, 340, "purple"), + ("sale-2.png", 280, 340, "rose"), + ("sale-3.png", 280, 340, "cyan"), + ("sale-4.png", 280, 340, "purple"), + ("sale-5.png", 280, 340, "cyan"), + ("sale-6.png", 280, 340, "rose"), + ("sale-7.png", 280, 340, "purple"), + ("sale-8.png", 280, 340, "cyan"), + ("banner-dual-1.png", 640, 280, "purple"), + ("banner-dual-2.png", 640, 280, "cyan"), + ("top-1.png", 280, 340, "purple"), + ("top-2.png", 280, 340, "cyan"), + ("top-3.png", 280, 340, "rose"), + ("top-4.png", 280, 340, "purple"), + ("top-5.png", 280, 340, "cyan"), + ("top-6.png", 280, 340, "rose"), + ("top-7.png", 280, 340, "purple"), + ("top-8.png", 280, 340, "cyan"), + ("banner-triple-1.png", 420, 240, "rose"), + ("banner-triple-2.png", 420, 240, "cyan"), + ("banner-triple-3.png", 420, 240, "purple"), + ("yeganeh-1.png", 280, 340, "purple"), + ("yeganeh-2.png", 280, 340, "rose"), + ("yeganeh-3.png", 280, 340, "cyan"), + ("yeganeh-4.png", 280, 340, "purple"), + ("yeganeh-5.png", 280, 340, "rose"), + ("yeganeh-6.png", 280, 340, "cyan"), + ("about.png", 560, 400, "purple"), + ("blog-1.png", 360, 220, "purple"), + ("blog-2.png", 360, 220, "cyan"), + ("blog-3.png", 360, 220, "rose"), + ("blog-4.png", 360, 220, "purple"), + ("enamad.png", 80, 80, "purple"), + ("samandehi.png", 80, 80, "cyan"), +] + + +def chunk(tag: bytes, data: bytes) -> bytes: + return struct.pack(">I", len(data)) + tag + data + struct.pack(">I", zlib.crc32(tag + data) & 0xFFFFFFFF) + + +def write_png(path: Path, width: int, height: int, rgb: tuple[int, int, int]) -> None: + row = b"\x00" + bytes(rgb) * width + raw = row * height + with path.open("wb") as handle: + handle.write(b"\x89PNG\r\n\x1a\n") + handle.write(chunk(b"IHDR", struct.pack(">IIBBBBB", width, height, 8, 2, 0, 0, 0))) + handle.write(chunk(b"IDAT", zlib.compress(raw, 9))) + handle.write(chunk(b"IEND", b"")) + + +def main() -> None: + out = Path(__file__).resolve().parents[1] / "public" / "images" + out.mkdir(parents=True, exist_ok=True) + for name, width, height, tone in IMAGES: + write_png(out / name, width, height, COLORS[tone]) + print(name) + + +if __name__ == "__main__": + main() diff --git a/src/app/page.tsx b/src/app/page.tsx index 420f456..834b474 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,6 +1,8 @@ import { About } from "@/components/About"; import { DualBanners, TripleBanners } from "@/components/Banners"; import { BlogCarousel } from "@/components/BlogCarousel"; +import { Contact } from "@/components/Contact"; +import { Faq } from "@/components/Faq"; import { FeaturedCategories } from "@/components/FeaturedCategories"; import { Features } from "@/components/Features"; import { Footer } from "@/components/Footer"; @@ -42,6 +44,8 @@ export default function Home() { /> + +