diff --git a/.gitignore b/.gitignore index fa974b1..7841221 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,12 @@ secrets/ /[0-9]*.png brand_pages/ /موکاپ*.jpg + +# Dev screenshots & scratch artifacts (website assets live in public/) +/*.jpeg +.playwright-mcp/ +*.old +*.docx + +# State file written by scripts/fetch-competitor-news.mjs +scripts/news-history.json diff --git a/.liaraignore b/.liaraignore new file mode 100644 index 0000000..484b244 --- /dev/null +++ b/.liaraignore @@ -0,0 +1,15 @@ +node_modules +panel +dist +dist-ssr +.git +.github +.env +.env.* +*.log +*.pem +*.key +.vscode +.idea +.DS_Store +Thumbs.db diff --git a/.playwright-mcp/page-2026-06-09T07-11-59-434Z.yml b/.playwright-mcp/page-2026-06-09T07-11-59-434Z.yml deleted file mode 100644 index 3f59b3d..0000000 --- a/.playwright-mcp/page-2026-06-09T07-11-59-434Z.yml +++ /dev/null @@ -1,249 +0,0 @@ -- generic [active] [ref=e1]: - - generic: - - img "Spread" - - generic: "100" - - navigation [ref=e2]: - - img "Spread" [ref=e4] - - list [ref=e5]: - - listitem [ref=e6]: - - link "How it works" [ref=e7] [cursor=pointer]: - - /url: "#how" - - listitem [ref=e8]: - - link "See a deal" [ref=e9] [cursor=pointer]: - - /url: "#deal" - - listitem [ref=e10]: - - link "Niches" [ref=e11] [cursor=pointer]: - - /url: "#niches" - - listitem [ref=e12]: - - link "Pricing" [ref=e13] [cursor=pointer]: - - /url: "#pricing" - - link "Get early access" [ref=e14] [cursor=pointer]: - - /url: /signup - - button "Get early access" [ref=e15] - - generic [ref=e26]: - - iframe [ref=e27]: - - region "Video Player" [ref=f2e2]: - - application [ref=f2e3] - - text:   - - generic [ref=e29]: - - heading "Find what's underpriced. Sell it for what it's worth." [level=1] [ref=e30]: - - generic [ref=e32]: Find - - generic [ref=e34]: what's - - generic [ref=e36]: underpriced. - - generic [ref=e38]: Sell - - generic [ref=e40]: it - - generic [ref=e42]: for - - generic [ref=e44]: what - - generic [ref=e46]: it's - - generic [ref=e48]: worth. - - paragraph [ref=e49]: AI that scans every marketplace, scores every deal, and helps you relist in one tap. Stop scrolling. Start flipping. - - generic [ref=e50]: - - link "Join the waitlist" [ref=e51] [cursor=pointer]: - - /url: /signup - - button "Join the waitlist" [ref=e52]: - - generic: Join the waitlist - - link "See it work →" [ref=e53] [cursor=pointer]: - - /url: "#deal" - - link "↗" [ref=e54] [cursor=pointer]: - - /url: /signup - - img [ref=e55]: - - generic [ref=e57]: CAPTURE THE SPREAD • FLIP SMARTER • CAPTURE THE SPREAD • FLIP SMARTER • - - generic: ↗ - - generic [ref=e59]: - - generic [ref=e60]: How it works - - heading "The AI finds deals you'd never see in time." [level=2] [ref=e61] - - paragraph [ref=e62]: Spread scans thousands of listings across Facebook Marketplace, Craigslist, OfferUp, eBay, and more — alerting you the second something surfaces 30–60% below market value in your niches. - - generic [ref=e63]: - - strong [ref=e64]: 6 platforms. - - text: Scanned 24/7. Alerts in under 12 seconds. - - generic [ref=e67]: - - generic [ref=e68]: Score & relist - - heading "Know exactly what to offer. List it before you leave." [level=2] [ref=e69] - - paragraph [ref=e70]: Every deal gets an AI score — estimated resale value, projected margin, time-to-sell, and the best platform to relist on. One tap generates an optimized listing with AI-written descriptions. - - generic [ref=e71]: - - generic [ref=e74]: Spread AI · Deal Analysis - - generic [ref=e75]: - - generic [ref=e76]: - - text: Found a - - strong [ref=e77]: Breville Oracle Touch - - text: listed at $1,200 - - generic [ref=e78]: "Market value: $1,800–$2,100 on eBay" - - generic [ref=e79]: "Suggested offer: $750 · Projected profit: +$500" - - generic [ref=e80]: Generate opener message ↗ - - generic [ref=e81]: "\"Hi — is this still available? I can pick up today. Would you take $750 cash?\"" - - generic [ref=e82]: Opener copied · eBay listing drafted - - generic [ref=e86]: - - generic [ref=e87]: - - heading "Stop scrolling. Start flipping." [level=2] [ref=e88] - - paragraph [ref=e89]: Other flippers spend 20 hours a week refreshing marketplace feeds. You spend 20 minutes reviewing deals the AI already found. - - generic [ref=e90]: - - generic [ref=e91]: - - generic [ref=e92]: "0" - - generic [ref=e93]: Marketplaces scanned 24/7 - - generic [ref=e94]: - - generic [ref=e95]: 0% - - generic [ref=e96]: Average margin per deal - - generic [ref=e97]: - - generic [ref=e98]: 0hrs - - generic [ref=e99]: Saved per week vs. manual - - generic [ref=e100]: - - generic [ref=e101]: 0s - - generic [ref=e102]: Avg. alert speed on new listings - - generic [ref=e104]: - - generic [ref=e105]: Live opportunities - - heading "This is what the AI surfaces every day." [level=2] [ref=e106] - - paragraph [ref=e107]: Real arbitrage opportunities — scored, analyzed, and ready for you to act on. This is what your feed looks like. - - generic [ref=e112]: - - generic: “ - - generic [ref=e113]: - - text: I used to spend 3 hours a day refreshing Marketplace. Now Spread sends me the good stuff and I just act on it. Made $1,200 my first month. - - generic [ref=e114]: The deal scoring is scary accurate. It told me to offer $380 on an Aeron listed at $520. I sold it for $710 on Apt Deco two days later. - - generic [ref=e115]: One-click cross-listing changed everything. I find it on Craigslist, hit relist, and the eBay listing writes itself. My volume tripled. - - generic [ref=e116]: Set up my espresso machine niche on a Sunday. Had three scored deals by Monday morning. Closed my first flip by Wednesday. - - generic [ref=e117]: - - text: Operator plan · Austin, TX - - generic [ref=e118]: Scout plan · Portland, OR - - generic [ref=e119]: Operator plan · Nashville, TN - - generic [ref=e120]: Scout plan · Denver, CO - - generic [ref=e121]: - - button "Sarah K." [ref=e122] [cursor=pointer]: - - generic [ref=e123]: Sarah K. - - button "Marcus T." [ref=e124] [cursor=pointer]: - - generic: Marcus T. - - button "David L." [ref=e125] [cursor=pointer]: - - generic: David L. - - button "Amy R." [ref=e126] [cursor=pointer]: - - generic: Amy R. - - generic [ref=e127]: - - generic [ref=e128]: Built for flippers - - generic [ref=e130]: Every marketplace has a pricing gap. - - generic [ref=e132]: The AI finds it. You capture it. - - generic [ref=e134]: - - generic [ref=e135]: Where we're headed - - heading "Your money. Your rules. Choose how hands-on you want to be." [level=2] [ref=e136] - - paragraph [ref=e137]: Today, you control every deal. Soon, the AI handles more — negotiation, auto-buy within your thresholds, and fully autonomous operation. You decide when to let go. - - generic [ref=e138]: - - generic [ref=e139]: - - button "Manual" [ref=e140] [cursor=pointer] - - button "Assisted SOON" [ref=e141] [cursor=pointer] - - button "Autopilot SOON" [ref=e142] [cursor=pointer] - - paragraph [ref=e144]: Available now. The AI finds deals, scores them, and drafts your relist. You decide what to buy, what to offer, and when to sell. Full control, full visibility, full profit tracking. - - generic [ref=e145]: - - generic [ref=e146]: - - generic [ref=e147]: "01" - - generic [ref=e148]: Deal found - - generic [ref=e149]: AI scans 6 platforms - - generic [ref=e150]: - - generic [ref=e151]: "02" - - generic [ref=e152]: Scored - - generic [ref=e153]: Profit + risk analysis - - generic [ref=e154]: - - generic [ref=e155]: "03" - - generic [ref=e156]: You act - - generic [ref=e157]: Message, offer, buy - - generic [ref=e158]: - - generic [ref=e159]: "04" - - generic [ref=e160]: Relist - - generic [ref=e161]: One-tap cross-listing - - generic [ref=e164]: - - generic [ref=e165]: - - generic [ref=e166]: Your niches - - heading "Pick the markets you know." [level=2] [ref=e167] - - paragraph [ref=e168]: Choose the categories you understand. The AI handles scanning, scoring, and listing across every marketplace. - - generic [ref=e169]: - - button "Espresso Machines $280" [ref=e170] [cursor=pointer] - - button "Camera Gear $320" [ref=e171] [cursor=pointer] - - button "Mid-Century Furniture $450" [ref=e172] [cursor=pointer] - - button "Power Tools $175" [ref=e173] [cursor=pointer] - - button "Commercial Kitchen $520" [ref=e174] [cursor=pointer] - - button "Audiophile Gear $210" [ref=e175] [cursor=pointer] - - button "Outdoor Gear $140" [ref=e176] [cursor=pointer] - - button "Vintage Watches $380" [ref=e177] [cursor=pointer] - - button "Sneakers $95" [ref=e178] [cursor=pointer] - - button "Vinyl Records $85" [ref=e179] [cursor=pointer] - - button "Mechanical Keyboards $120" [ref=e180] [cursor=pointer] - - button "Designer Handbags $340" [ref=e181] [cursor=pointer] - - generic [ref=e183]: - - paragraph [ref=e184]: Or search your own - - generic [ref=e185]: - - textbox "Search a niche — vintage watches, vinyl records..." [ref=e186] - - button [ref=e187] [cursor=pointer]: - - img [ref=e188] - - generic [ref=e193]: - - heading "Opportunities land while you sleep." [level=2] [ref=e194] - - paragraph [ref=e195]: The AI never stops scanning. Wake up to scored deals ready for your review. - - generic [ref=e196]: - - generic [ref=e197]: - - generic [ref=e198]: - - generic [ref=e199]: Pricing - - heading "One good flip pays for a year." [level=2] [ref=e200] - - generic [ref=e201]: No speed throttling, no alert delays. Every plan gets the same fast scanning. Upgrade for more niches and advanced tools. - - generic [ref=e202]: - - generic [ref=e203]: - - generic [ref=e204]: Starter - - generic [ref=e205]: Scout - - generic [ref=e206]: Find your first flips - - generic [ref=e207]: - - generic [ref=e208]: $29 - - generic [ref=e209]: /mo - - generic [ref=e210]: Cancel anytime - - list [ref=e212]: - - listitem [ref=e213]: 2 active niches - - listitem [ref=e214]: Real-time deal alerts - - listitem [ref=e215]: AI deal scoring - - listitem [ref=e216]: Profit tracking dashboard - - link "Start free trial" [ref=e217] [cursor=pointer]: - - /url: /signup - - button "Start free trial" [ref=e218] - - generic [ref=e219]: - - generic [ref=e220]: Most popular - - generic [ref=e221]: Operator - - generic [ref=e222]: Scale your operation - - generic [ref=e223]: - - generic [ref=e224]: $49 - - generic [ref=e225]: /mo - - generic [ref=e226]: Pays for itself in one flip - - list [ref=e228]: - - listitem [ref=e229]: 8 active niches - - listitem [ref=e230]: One-click cross-listing - - listitem [ref=e231]: AI opener messages - - listitem [ref=e232]: Niche trend intelligence - - link "Start free trial" [ref=e233] [cursor=pointer]: - - /url: /signup - - button "Start free trial" [ref=e234] - - generic [ref=e235]: - - generic [ref=e236]: Pro - - generic [ref=e237]: Syndicate - - generic [ref=e238]: For full-time flippers - - generic [ref=e239]: - - generic [ref=e240]: $99 - - generic [ref=e241]: /mo - - generic [ref=e242]: Priority access to Autopilot - - list [ref=e244]: - - listitem [ref=e245]: Unlimited niches - - listitem [ref=e246]: Multi-platform analytics - - listitem [ref=e247]: Team seats + shared deals - - listitem [ref=e248]: "Early access: Assisted + Autopilot" - - link "Start free trial" [ref=e249] [cursor=pointer]: - - /url: /signup - - button "Start free trial" [ref=e250] - - generic [ref=e252]: - - heading "Built for the way you actually flip." [level=2] [ref=e253] - - paragraph [ref=e254]: Deals surface in the background. Your life stays in the foreground. - - generic [ref=e270]: - - heading "Every marketplace has a spread. Start capturing yours." [level=2] [ref=e271]: - - text: Every marketplace has a spread. - - text: Start capturing yours. - - paragraph [ref=e272]: Same item. Different platforms. Different prices. The AI finds the gap — you keep what's left. - - link "Start free trial" [ref=e273] [cursor=pointer]: - - /url: /signup - - button "Start free trial" [ref=e274]: - - generic: Start free trial - - contentinfo [ref=e275]: - - img "Spread" [ref=e277] - - generic [ref=e278]: - - link "Terms" [ref=e279] [cursor=pointer]: - - /url: /terms - - link "Privacy" [ref=e280] [cursor=pointer]: - - /url: /privacy - - generic [ref=e281]: © 2026 Spread \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-13T05-35-07-683Z.yml b/.playwright-mcp/page-2026-06-13T05-35-07-683Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-13T05-35-10-421Z.png b/.playwright-mcp/page-2026-06-13T05-35-10-421Z.png deleted file mode 100644 index 8d96ed0..0000000 Binary files a/.playwright-mcp/page-2026-06-13T05-35-10-421Z.png and /dev/null differ diff --git a/.playwright-mcp/page-2026-06-13T06-44-17-636Z.yml b/.playwright-mcp/page-2026-06-13T06-44-17-636Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-13T06-44-21-687Z.png b/.playwright-mcp/page-2026-06-13T06-44-21-687Z.png deleted file mode 100644 index e59db3d..0000000 Binary files a/.playwright-mcp/page-2026-06-13T06-44-21-687Z.png and /dev/null differ diff --git a/.playwright-mcp/page-2026-06-13T06-49-59-240Z.yml b/.playwright-mcp/page-2026-06-13T06-49-59-240Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-13T06-50-23-700Z.yml b/.playwright-mcp/page-2026-06-13T06-50-23-700Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-13T06-50-29-064Z.yml b/.playwright-mcp/page-2026-06-13T06-50-29-064Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-13T06-50-53-440Z.yml b/.playwright-mcp/page-2026-06-13T06-50-53-440Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-13T06-50-58-800Z.png b/.playwright-mcp/page-2026-06-13T06-50-58-800Z.png deleted file mode 100644 index 760aaab..0000000 Binary files a/.playwright-mcp/page-2026-06-13T06-50-58-800Z.png and /dev/null differ diff --git a/.playwright-mcp/page-2026-06-13T06-51-06-462Z.yml b/.playwright-mcp/page-2026-06-13T06-51-06-462Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-13T06-51-11-956Z.png b/.playwright-mcp/page-2026-06-13T06-51-11-956Z.png deleted file mode 100644 index f21df44..0000000 Binary files a/.playwright-mcp/page-2026-06-13T06-51-11-956Z.png and /dev/null differ diff --git a/.playwright-mcp/page-2026-06-13T06-55-02-146Z.yml b/.playwright-mcp/page-2026-06-13T06-55-02-146Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-13T06-55-08-279Z.png b/.playwright-mcp/page-2026-06-13T06-55-08-279Z.png deleted file mode 100644 index 28ca555..0000000 Binary files a/.playwright-mcp/page-2026-06-13T06-55-08-279Z.png and /dev/null differ diff --git a/.playwright-mcp/page-2026-06-13T06-56-24-525Z.yml b/.playwright-mcp/page-2026-06-13T06-56-24-525Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-13T06-56-35-515Z.png b/.playwright-mcp/page-2026-06-13T06-56-35-515Z.png deleted file mode 100644 index 8ee4e6b..0000000 Binary files a/.playwright-mcp/page-2026-06-13T06-56-35-515Z.png and /dev/null differ diff --git a/.playwright-mcp/page-2026-06-13T13-31-50-514Z.yml b/.playwright-mcp/page-2026-06-13T13-31-50-514Z.yml deleted file mode 100644 index 7577671..0000000 --- a/.playwright-mcp/page-2026-06-13T13-31-50-514Z.yml +++ /dev/null @@ -1,390 +0,0 @@ -- generic [ref=e3]: - - banner [ref=e4]: - - generic [ref=e6]: - - link "اندیشکده فولاد آینده The Steel Futures Institute" [ref=e7] [cursor=pointer]: - - /url: / - - img [ref=e8] - - generic [ref=e9]: - - generic [ref=e10]: اندیشکده فولاد آینده - - generic [ref=e11]: The Steel Futures Institute - - navigation "ناوبری اصلی" [ref=e12]: - - button "رادار آینده" [ref=e14] [cursor=pointer]: - - text: رادار آینده - - img [ref=e15] - - link "آمار و داده" [ref=e17] [cursor=pointer]: - - /url: /pulse - - link "در یک نگاه" [ref=e18] [cursor=pointer]: - - /url: /at-a-glance - - button "رسانه و رویداد" [ref=e20] [cursor=pointer]: - - text: رسانه و رویداد - - img [ref=e21] - - link "شبکه خبرگان" [ref=e23] [cursor=pointer]: - - /url: /experts - - button "درباره ما" [ref=e25] [cursor=pointer]: - - text: درباره ما - - img [ref=e26] - - generic [ref=e28]: - - button "جستجو" [ref=e29] [cursor=pointer]: - - img [ref=e30] - - button "ورود / ثبت‌نام" [ref=e33] [cursor=pointer] - - button "EN" [ref=e34] [cursor=pointer] - - main [ref=e35]: - - generic [ref=e36]: - - generic [ref=e44]: - - img [ref=e47] - - heading "بینشی نو برای توسعه‌ی صنعتی" [level=2] [ref=e53] - - generic: - - paragraph - - link "آشنایی با چشم‌انداز ما" [ref=e55] [cursor=pointer]: - - /url: /about - - img [ref=e56] - - generic [ref=e58]: آشنایی با چشم‌انداز ما - - generic [ref=e65]: - - generic [ref=e66]: - - generic [ref=e67]: - - generic [ref=e68]: FUTURE RADAR - - heading "رادار آینده" [level=2] [ref=e69] - - paragraph [ref=e70]: تحلیل چندوجهی آینده صنعت فولاد - - link "همه سیگنال‌ها ←" [ref=e71] [cursor=pointer]: - - /url: /radar - - generic [ref=e72]: - - article [ref=e73] [cursor=pointer]: - - generic [ref=e75]: - - img [ref=e77] - - generic [ref=e80]: - - generic [ref=e81]: پیش‌بینی بازار با هوش مصنوعی - - generic [ref=e82]: ۱۴ اردیبهشت ۱۴۰۵ - - article [ref=e83] [cursor=pointer]: - - generic [ref=e85]: - - img [ref=e87] - - generic [ref=e90]: - - generic [ref=e91]: پیش‌بینی بازار با هوش مصنوعی - - generic [ref=e92]: ۱۴ اردیبهشت ۱۴۰۵ - - article [ref=e93] [cursor=pointer]: - - generic [ref=e95]: - - img [ref=e97] - - generic [ref=e99]: - - generic [ref=e100]: پیش‌بینی بازار با هوش مصنوعی - - generic [ref=e101]: ۱۴ اردیبهشت ۱۴۰۵ - - article [ref=e102] [cursor=pointer]: - - generic [ref=e104]: - - img [ref=e106] - - generic [ref=e109]: - - generic [ref=e110]: پیش‌بینی بازار با هوش مصنوعی - - generic [ref=e111]: ۱۴ اردیبهشت ۱۴۰۵ - - generic [ref=e113]: - - generic [ref=e114]: - - generic [ref=e117]: - - generic [ref=e118]: At a Glance - - heading "در یک نگاه" [level=2] [ref=e119] - - link "مشاهده همه" [ref=e120] [cursor=pointer]: - - /url: /at-a-glance - - img [ref=e122] - - generic [ref=e124]: مشاهده همه - - generic [ref=e130]: - - generic [ref=e131]: - - heading "شوک هیدروژنی به بازار جهانی؛ آغاز رسمی عصر فولادسازی بدون کربن" [level=3] [ref=e132] - - generic [ref=e133]: - - generic [ref=e134]: Financial Times - - generic [ref=e135]: - - img [ref=e136] - - text: اردیبهشت ۱۴۰۵ - - paragraph [ref=e138]: پروژه عظیم «فولاد سبز H2» در سوئد با جذب بی‌سابقه ۶.۵ میلیارد یورو سرمایه، رسماً وارد فاز اجرایی شد تا نخستین کارخانه فولادسازی در مقیاس تجاری بر پایه هیدروژن سبز (بدون نیاز به زغال‌سنگ) در جهان متولد شود. این تأسیسات با هدف کاهش ۹۵ درصدی انتشار CO₂، قواعد رقابت در زنجیره ارزش اروپا را برای همیشه بازتعریف می‌کند. - - generic [ref=e139]: - - button "prev" [ref=e140] [cursor=pointer]: ‹ - - button "next" [ref=e141] [cursor=pointer]: › - - generic [ref=e144]: - - generic [ref=e146]: - - generic [ref=e147]: OUR FRAMEWORK - - heading "چارچوب اندیشه ما" [level=2] [ref=e148] - - paragraph [ref=e149]: ترکیب داده، تحلیل، آینده‌نگاری و خرد جمعی برای فهم تحولات صنعت فولاد. - - generic [ref=e150]: - - generic [ref=e151]: - - img [ref=e153] - - generic [ref=e157]: - - heading "تحلیل داده‌محور" [level=3] [ref=e158] - - paragraph [ref=e159]: استفاده از داده‌های بازار، اقتصاد، فناوری و زنجیره ارزش فولاد برای استخراج بینش‌های قابل اتکا. - - generic [ref=e160]: - - img [ref=e162] - - generic [ref=e167]: - - heading "نگاه نظام‌مند" [level=3] [ref=e168] - - paragraph [ref=e169]: تحلیل صنعت فولاد در تعامل با اقتصاد، انرژی، فناوری، محیط زیست و سیاست‌های جهانی. - - generic [ref=e170]: - - img [ref=e172] - - generic [ref=e177]: - - heading "هم‌اندیشی خبرگان" [level=3] [ref=e178] - - paragraph [ref=e179]: بهره‌گیری مستمر از شبکه‌ای از خبرگان صنعت، دانشگاه و فناوری. - - generic [ref=e180]: - - img [ref=e182] - - generic [ref=e190]: - - heading "آینده‌نگاری علمی" [level=3] [ref=e191] - - paragraph [ref=e192]: تحلیل روندها، شناسایی عدم‌قطعیت‌ها و طراحی سناریوها. - - generic [ref=e193]: - - img [ref=e195] - - generic [ref=e197]: - - heading "از تحلیل تا اقدام" [level=3] [ref=e198] - - paragraph [ref=e199]: تبدیل تحلیل‌ها به توصیه‌ها و تجویزهای استراتژیک. - - generic [ref=e200]: - - img [ref=e202] - - generic [ref=e206]: - - heading "بی‌طرفی و استقلال" [level=3] [ref=e207] - - paragraph [ref=e208]: اندیشه‌های مستقل و متکی بر شواهد، داده‌ها و نگاه بلندمدت. - - generic [ref=e214]: - - generic [ref=e215]: - - generic [ref=e216]: ماهنامه شماره ۱۲ منتشر شد… - - heading "دیپلماسی معدنی در عصر انسدادهای ژئوپلیتیک" [level=2] [ref=e217] - - generic [ref=e218]: Mineral Diplomacy in the Era of Geopolitical Blockades - - button "دانلود گزارش" [ref=e220] [cursor=pointer]: - - img [ref=e221] - - text: دانلود گزارش - - img "دیپلماسی معدنی در عصر انسدادهای ژئوپلیتیک" [ref=e225] - - generic [ref=e228]: - - generic [ref=e230]: - - generic [ref=e231]: DATA SOURCES - - heading "نبض صنعت" [level=2] [ref=e232] - - paragraph [ref=e233]: پنجره‌ای واحد به جهان داده‌های فولاد؛ دسترسی به شاخص‌ها، قیمت‌ها، تجارت جهانی و داده‌های کلیدی از معدن تا محصول نهایی. - - link "مشاهده منابع داده" [ref=e234] [cursor=pointer]: - - /url: /pulse - - text: مشاهده منابع داده - - img [ref=e235] - - generic [ref=e238]: - - generic "London Metal Exchange" [ref=e244] [cursor=pointer]: - - img [ref=e246] - - generic "Shanghai Futures Exchange" [ref=e256] [cursor=pointer]: - - img [ref=e258] - - generic "S&P Global Platts" [ref=e262] [cursor=pointer]: - - img [ref=e264] - - generic "Reuters" [ref=e271] [cursor=pointer]: - - img [ref=e273] - - generic "Fastmarkets" [ref=e279] [cursor=pointer]: - - img [ref=e281] - - generic "World Steel Association" [ref=e287] [cursor=pointer]: - - img [ref=e289] - - generic "Mysteel" [ref=e296] [cursor=pointer]: - - img [ref=e298] - - generic "Dalian Commodity Exchange" [ref=e304] [cursor=pointer]: - - img [ref=e306] - - generic "CME Group" [ref=e311] [cursor=pointer]: - - img [ref=e313] - - generic [ref=e323]: - - generic [ref=e324]: - - heading "دیده‌بان رویداد‌ها" [level=2] [ref=e327] - - link "مشاهده همه" [ref=e328] [cursor=pointer]: - - /url: /events - - img [ref=e330] - - generic [ref=e332]: مشاهده همه - - generic [ref=e333]: - - generic [ref=e334]: - - button "اجلاس جهانی فولاد سبز | استکهلم، سوئد" [ref=e335] [cursor=pointer]: - - generic [ref=e336]: اجلاس جهانی فولاد سبز | استکهلم، سوئد - - img [ref=e337] - - paragraph [ref=e340]: - - text: بررسی آخرین تکنولوژی‌های احیای مستقیم بر پایه هیدروژن و جذب سرمایه برای پروژه‌های بدون کربن. حضور در این رویداد برای درک آینده مقررات زیست‌محیطی اروپا حیاتی است. - - generic [ref=e341]: "(زمان: مهر ۱۴۰۵)" - - generic [ref=e342]: - - button "نشست سالانه انجمن جهانی فولاد (worldsteel) | شانگهای، چین" [ref=e343] [cursor=pointer]: - - generic [ref=e344]: نشست سالانه انجمن جهانی فولاد (worldsteel) | شانگهای، چین - - img [ref=e345] - - paragraph [ref=e347]: - - text: "گردهمایی بزرگ‌ترین رهبران صنعت. محور اصلی امسال: پیش‌بینی تقاضای جهانی در سایه رکود بخش مسکن چین و تغییر مسیر زنجیره تامین به سمت هند و خاورمیانه." - - generic [ref=e348]: "(زمان: آبان ۱۴۰۵)" - - generic [ref=e349]: - - button "مجمع بین‌المللی هوش مصنوعی در تولید | برلین، آلمان" [ref=e350] [cursor=pointer]: - - generic [ref=e351]: مجمع بین‌المللی هوش مصنوعی در تولید | برلین، آلمان - - img [ref=e352] - - paragraph [ref=e354]: - - text: رونمایی از جدیدترین نسل دوقلوهای دیجیتال (Digital Twins) و الگوریتم‌های پیش‌بینی تعمیرات. فرصتی برای آشنایی با راهکارهای کاهش هزینه و افزایش بهره‌وری خطوط نورد. - - generic [ref=e355]: "(زمان: آذر ۱۴۰۵)" - - generic [ref=e362]: - - generic [ref=e363]: - - generic [ref=e364]: - - generic [ref=e365]: Monthly Industry Report - - heading "ماهنامه تحلیلی کارخانه" [level=2] [ref=e366] - - link "مشاهده همه" [ref=e367] [cursor=pointer]: - - /url: https://www.msc.ir/fa-IR/Portal/8029/page/%D9%85%D8%A7%D9%87%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%AD%D9%84%DB%8C%D9%84%DB%8C-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%DB%8C-%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87 - - generic [ref=e368]: - - article [ref=e370] [cursor=pointer]: - - generic [ref=e373]: تولید و صادرات - - generic [ref=e374]: - - generic [ref=e375]: بهمن ۱۴۰۳ - - heading "تحلیل عملکرد تولید و صادرات" [level=3] [ref=e376] - - paragraph [ref=e377]: بررسی آمار تولید ماهانه، مقایسه با بودجه سالانه و روند صادرات فولاد تخت در بازارهای منطقه‌ای. - - link "دریافت گزارش" [ref=e379]: - - /url: https://www.msc.ir/fa-IR/Portal/8029/page/%D9%85%D8%A7%D9%87%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%AD%D9%84%DB%8C%D9%84%DB%8C-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%DB%8C-%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87 - - img [ref=e380] - - generic [ref=e383]: دریافت گزارش - - article [ref=e385] [cursor=pointer]: - - generic [ref=e388]: بازار و قیمت - - generic [ref=e389]: - - generic [ref=e390]: دی ۱۴۰۳ - - heading "وضعیت بازار و قیمت‌گذاری" [level=3] [ref=e391] - - paragraph [ref=e392]: تحلیل نوسانات قیمت فولاد تخت در بازار داخلی و اثر نرخ ارز بر چشم‌انداز زمستان. - - link "دریافت گزارش" [ref=e394]: - - /url: https://www.msc.ir/fa-IR/Portal/8029/page/%D9%85%D8%A7%D9%87%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%AD%D9%84%DB%8C%D9%84%DB%8C-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%DB%8C-%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87 - - img [ref=e395] - - generic [ref=e398]: دریافت گزارش - - article [ref=e400] [cursor=pointer]: - - generic [ref=e403]: فناوری - - generic [ref=e404]: - - generic [ref=e405]: آذر ۱۴۰۳ - - heading "دیجیتال‌سازی خطوط تولید" [level=3] [ref=e406] - - paragraph [ref=e407]: گزارشی از پیاده‌سازی سامانه‌های کنترل هوشمند و اثر آن بر بهره‌وری خطوط نورد. - - link "دریافت گزارش" [ref=e409]: - - /url: https://www.msc.ir/fa-IR/Portal/8029/page/%D9%85%D8%A7%D9%87%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%AD%D9%84%DB%8C%D9%84%DB%8C-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%DB%8C-%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87 - - img [ref=e410] - - generic [ref=e413]: دریافت گزارش - - article [ref=e415] [cursor=pointer]: - - generic [ref=e418]: نیروی انسانی - - generic [ref=e419]: - - generic [ref=e420]: آبان ۱۴۰۳ - - heading "تحلیل نیروی انسانی و بهره‌وری" [level=3] [ref=e421] - - paragraph [ref=e422]: شاخص‌های بهره‌وری نیروی کار، آموزش‌های ماهانه و آمار ایمنی شغلی. - - link "دریافت گزارش" [ref=e424]: - - /url: https://www.msc.ir/fa-IR/Portal/8029/page/%D9%85%D8%A7%D9%87%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%AD%D9%84%DB%8C%D9%84%DB%8C-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%DB%8C-%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87 - - img [ref=e425] - - generic [ref=e428]: دریافت گزارش - - generic [ref=e432]: - - generic [ref=e433]: - - heading "ویدیوکست" [level=2] [ref=e436] - - button "مشاهده همه" [ref=e437] [cursor=pointer]: - - img [ref=e439] - - generic [ref=e441]: مشاهده همه - - generic [ref=e442]: - - button "play" [ref=e444] [cursor=pointer] - - generic [ref=e450]: - - generic [ref=e451]: - - generic [ref=e452]: ⏸ - - generic [ref=e453]: ⏭ - - generic [ref=e454]: 🔊 - - generic [ref=e455]: ۰۹:۲۷ / ۴۲ دقیقه - - generic [ref=e456]: - - generic [ref=e457]: ⤴ - - generic [ref=e458]: ⛶ - - generic [ref=e459]: - - generic [ref=e460]: - - generic [ref=e461]: 🎙 - - heading "نگاهی به آن سوی مرزهای تولید" [level=3] [ref=e462] - - paragraph [ref=e463]: در ویدیوکست «Steel Horizon»، ما فراتر از داده‌های خام قیمت و تناژ، به سراغ مهندسی تغییر و معماری آینده صنعت می‌رویم. اینجا محل تلاقی استراتژی‌های کلان، تکنولوژی‌های برهم‌زننده و رهبرانی است که فولاد فردا را نه با کوره‌ها، که با «بینش» می‌سازند. ما طوفان‌های بازار را تحلیل می‌کنیم تا شما با اطمینان، مسیر آینده را ترسیم کنید. صنعت فولاد در حال ورود به پیچیده‌ترین چرخه حیات خود است؛ جایی که هوش مصنوعی، مقررات کربنی و ژئواکونومی، قواعد بازی را بازنویسی کرده‌اند. در «Steel Logic» با تحلیل‌گران ارشد و استراتژیست‌های تراز اول، به گفتگو می‌نشینیم تا لایه‌های پنهان این پیچیدگی‌ها را آشکار کنیم. اینجا خبری از هیجان‌زدگی نیست؛ فقط تحلیل‌های داده‌محور و تصمیم‌ساز. - - generic [ref=e468]: - - generic [ref=e469]: - - heading "پادکست‌ها" [level=2] [ref=e472] - - button "مشاهده همه" [ref=e473] [cursor=pointer]: - - generic [ref=e474]: مشاهده همه - - img [ref=e476] - - generic [ref=e478]: - - generic [ref=e480]: - - generic [ref=e481]: ★★★★★ - - generic [ref=e482]: ۴/۵ - - generic [ref=e483]: - - generic [ref=e484]: - - generic [ref=e485]: - - button [ref=e486] [cursor=pointer]: - - img [ref=e487] - - button [ref=e490] [cursor=pointer]: - - img [ref=e491] - - generic [ref=e493]: اپیزود ۷۷ - - heading "کالبدشکافی عقلانی پیچیدگی‌های صنعتی" [level=3] [ref=e495] - - generic [ref=e497]: - - img [ref=e498] - - generic [ref=e500]: ۲۵ / خرداد / ۱۴۰۵ - - generic [ref=e502]: - - button "play" [ref=e503] [cursor=pointer]: - - img [ref=e504] - - generic [ref=e506]: - - generic [ref=e507]: ۰۲:۳۱ - - generic [ref=e589]: ۱۰:۵۶ - - generic [ref=e590]: - - generic [ref=e591]: - - button "آزمایشگاه کوره ۱:۴۰:۱۸ «The Foundry Lab» محلی برای کالبدشکافی دقیق تحولات فناورانه و مدل‌های نوین فولادسازی است. ما در این پادکست با نگاهی موشکافانه، چالش‌های فنی را بررسی می‌کنیم." [ref=e592] [cursor=pointer]: - - generic [ref=e593]: - - generic [ref=e594]: - - generic [ref=e595]: آزمایشگاه کوره - - generic [ref=e596]: - - img [ref=e597] - - generic [ref=e600]: ۱:۴۰:۱۸ - - generic [ref=e601]: «The Foundry Lab» محلی برای کالبدشکافی دقیق تحولات فناورانه و مدل‌های نوین فولادسازی است. ما در این پادکست با نگاهی موشکافانه، چالش‌های فنی را بررسی می‌کنیم. - - button "معمار فولاد ۱:۴۰:۱۸ در «Steel Architect»، ما به سراغ داستان ساختن فولاد فردا می‌رویم؛ روایتی که رهبرانی که از مدل‌های سنتی کسب‌وکار به چالش کشیده‌اند را به تصویر می‌کشد." [ref=e602] [cursor=pointer]: - - generic [ref=e603]: - - generic [ref=e604]: - - generic [ref=e605]: معمار فولاد - - generic [ref=e606]: - - img [ref=e607] - - generic [ref=e610]: ۱:۴۰:۱۸ - - generic [ref=e611]: در «Steel Architect»، ما به سراغ داستان ساختن فولاد فردا می‌رویم؛ روایتی که رهبرانی که از مدل‌های سنتی کسب‌وکار به چالش کشیده‌اند را به تصویر می‌کشد. - - generic [ref=e612]: - - generic [ref=e613]: - - heading "کالبدشکافی عقلانی پیچیدگی‌های صنعتی" [level=3] [ref=e614] - - img [ref=e616] - - paragraph [ref=e621]: «صنعت فولاد در عصر حاضر، در پیچیده‌ترین چرخه حیات خود قرار گرفته است؛ جایی که همگرایی هوش مصنوعی، الزامات زیست‌محیطی و تنش‌های ژئواکونومیک، قواعد کلاسیک تولید و تجارت را به‌کلی بازنویسی کرده‌اند. در پادکست «نام انتخابی»، ما با عبور از هیاهوی رسانه‌ای و تحلیل‌های سطحی، به کالبدشکافی عقلانی این پیچیدگی‌ها می‌پردازیم. ما با دعوت از استراتژیست‌های تراز اول و خبرگان این حوزه، لایه‌های پنهان چالش‌های صنعتی را می‌شکافیم تا بینشی شفاف، داده‌محور و تصمیم‌ساز را در اختیار رهبری قرار دهیم که برای عبور از طوفان‌های تغییر، به قطب‌نمای دقیق‌تر از عرف‌های بازار نیاز دارند.» - - generic [ref=e622]: "مهمان برنامه: مهندس سیامک شجاعی" - - contentinfo [ref=e623]: - - generic [ref=e624]: - - img [ref=e625] - - button "بازگشت به بالا" [ref=e627] [cursor=pointer]: - - img [ref=e628] - - generic [ref=e633]: - - generic [ref=e634]: - - img "اندیشکده فولاد آینده" [ref=e635] - - generic [ref=e638]: اندیشکده فولاد آینده - - generic [ref=e640]: The Steel Futures Institute - - paragraph [ref=e641]: فضایی همدلانه برای اندیشیدن به فردای صنعت؛ جایی که دانش، آینده‌پژوهی و نوآوری به بینش‌هایی برای توسعه صنعتی تبدیل می‌شوند. - - generic [ref=e642]: ما را در شبکه‌های اجتماعی دنبال کنید. - - generic [ref=e643]: - - link "آپارات" [ref=e644] [cursor=pointer]: - - /url: "#" - - img [ref=e645] - - link "X" [ref=e647] [cursor=pointer]: - - /url: "#" - - img [ref=e648] - - link "لینکداین" [ref=e650] [cursor=pointer]: - - /url: "#" - - img [ref=e651] - - link "تلگرام" [ref=e653] [cursor=pointer]: - - /url: "#" - - img [ref=e654] - - navigation "پیوندهای پایین" [ref=e656]: - - link "رادار آینده" [ref=e657] [cursor=pointer]: - - /url: /radar - - text: رادار آینده - - link "آمار و داده" [ref=e659] [cursor=pointer]: - - /url: "#" - - text: آمار و داده - - link "رسانه و رویداد" [ref=e661] [cursor=pointer]: - - /url: "#" - - text: رسانه و رویداد - - link "در یک نگاه" [ref=e663] [cursor=pointer]: - - /url: /at-a-glance - - text: در یک نگاه - - link "شبکه خبرگان" [ref=e665] [cursor=pointer]: - - /url: "#" - - text: شبکه خبرگان - - link "درباره ما" [ref=e667] [cursor=pointer]: - - /url: "#" - - text: درباره ما - - generic [ref=e669]: - - generic [ref=e670]: اطلاعات تماس - - generic [ref=e671]: - - generic [ref=e672]: - - img [ref=e673] - - generic [ref=e676]: "نشانی:" - - generic [ref=e677]: اصفهان، خیابان سعادت‌آباد - - generic [ref=e678]: - - img [ref=e679] - - generic [ref=e681]: "شماره تماس:" - - generic [ref=e682]: ۰۳۱ - ۳۸۸۸۴۵۳۹ - - generic [ref=e683]: - - img [ref=e684] - - generic [ref=e687]: "پست الکترونیک:" - - generic [ref=e688]: info@steelforesight.com - - generic [ref=e689]: - - generic [ref=e691]: نشان - - generic [ref=e693]: نشان - - generic [ref=e695]: نشان - - generic [ref=e696]: - - generic [ref=e697]: عضویت در خبرنامه اندیشکده - - generic [ref=e698]: - - textbox "ایمیل خود را وارد کنید..." [ref=e699] - - button "ثبت" [ref=e700] [cursor=pointer] - - generic [ref=e702]: - - generic [ref=e703]: تمامی حقوق مادی و معنوی این وب‌سایت متعلق به شرکت فولاد مبارکه می‌باشد. - - generic [ref=e704]: طراح و پشتیبان؛ شرکت دانش‌بنیان نواندیشان آتی نگار فرتاک \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-13T13-34-48-550Z.yml b/.playwright-mcp/page-2026-06-13T13-34-48-550Z.yml deleted file mode 100644 index 7577671..0000000 --- a/.playwright-mcp/page-2026-06-13T13-34-48-550Z.yml +++ /dev/null @@ -1,390 +0,0 @@ -- generic [ref=e3]: - - banner [ref=e4]: - - generic [ref=e6]: - - link "اندیشکده فولاد آینده The Steel Futures Institute" [ref=e7] [cursor=pointer]: - - /url: / - - img [ref=e8] - - generic [ref=e9]: - - generic [ref=e10]: اندیشکده فولاد آینده - - generic [ref=e11]: The Steel Futures Institute - - navigation "ناوبری اصلی" [ref=e12]: - - button "رادار آینده" [ref=e14] [cursor=pointer]: - - text: رادار آینده - - img [ref=e15] - - link "آمار و داده" [ref=e17] [cursor=pointer]: - - /url: /pulse - - link "در یک نگاه" [ref=e18] [cursor=pointer]: - - /url: /at-a-glance - - button "رسانه و رویداد" [ref=e20] [cursor=pointer]: - - text: رسانه و رویداد - - img [ref=e21] - - link "شبکه خبرگان" [ref=e23] [cursor=pointer]: - - /url: /experts - - button "درباره ما" [ref=e25] [cursor=pointer]: - - text: درباره ما - - img [ref=e26] - - generic [ref=e28]: - - button "جستجو" [ref=e29] [cursor=pointer]: - - img [ref=e30] - - button "ورود / ثبت‌نام" [ref=e33] [cursor=pointer] - - button "EN" [ref=e34] [cursor=pointer] - - main [ref=e35]: - - generic [ref=e36]: - - generic [ref=e44]: - - img [ref=e47] - - heading "بینشی نو برای توسعه‌ی صنعتی" [level=2] [ref=e53] - - generic: - - paragraph - - link "آشنایی با چشم‌انداز ما" [ref=e55] [cursor=pointer]: - - /url: /about - - img [ref=e56] - - generic [ref=e58]: آشنایی با چشم‌انداز ما - - generic [ref=e65]: - - generic [ref=e66]: - - generic [ref=e67]: - - generic [ref=e68]: FUTURE RADAR - - heading "رادار آینده" [level=2] [ref=e69] - - paragraph [ref=e70]: تحلیل چندوجهی آینده صنعت فولاد - - link "همه سیگنال‌ها ←" [ref=e71] [cursor=pointer]: - - /url: /radar - - generic [ref=e72]: - - article [ref=e73] [cursor=pointer]: - - generic [ref=e75]: - - img [ref=e77] - - generic [ref=e80]: - - generic [ref=e81]: پیش‌بینی بازار با هوش مصنوعی - - generic [ref=e82]: ۱۴ اردیبهشت ۱۴۰۵ - - article [ref=e83] [cursor=pointer]: - - generic [ref=e85]: - - img [ref=e87] - - generic [ref=e90]: - - generic [ref=e91]: پیش‌بینی بازار با هوش مصنوعی - - generic [ref=e92]: ۱۴ اردیبهشت ۱۴۰۵ - - article [ref=e93] [cursor=pointer]: - - generic [ref=e95]: - - img [ref=e97] - - generic [ref=e99]: - - generic [ref=e100]: پیش‌بینی بازار با هوش مصنوعی - - generic [ref=e101]: ۱۴ اردیبهشت ۱۴۰۵ - - article [ref=e102] [cursor=pointer]: - - generic [ref=e104]: - - img [ref=e106] - - generic [ref=e109]: - - generic [ref=e110]: پیش‌بینی بازار با هوش مصنوعی - - generic [ref=e111]: ۱۴ اردیبهشت ۱۴۰۵ - - generic [ref=e113]: - - generic [ref=e114]: - - generic [ref=e117]: - - generic [ref=e118]: At a Glance - - heading "در یک نگاه" [level=2] [ref=e119] - - link "مشاهده همه" [ref=e120] [cursor=pointer]: - - /url: /at-a-glance - - img [ref=e122] - - generic [ref=e124]: مشاهده همه - - generic [ref=e130]: - - generic [ref=e131]: - - heading "شوک هیدروژنی به بازار جهانی؛ آغاز رسمی عصر فولادسازی بدون کربن" [level=3] [ref=e132] - - generic [ref=e133]: - - generic [ref=e134]: Financial Times - - generic [ref=e135]: - - img [ref=e136] - - text: اردیبهشت ۱۴۰۵ - - paragraph [ref=e138]: پروژه عظیم «فولاد سبز H2» در سوئد با جذب بی‌سابقه ۶.۵ میلیارد یورو سرمایه، رسماً وارد فاز اجرایی شد تا نخستین کارخانه فولادسازی در مقیاس تجاری بر پایه هیدروژن سبز (بدون نیاز به زغال‌سنگ) در جهان متولد شود. این تأسیسات با هدف کاهش ۹۵ درصدی انتشار CO₂، قواعد رقابت در زنجیره ارزش اروپا را برای همیشه بازتعریف می‌کند. - - generic [ref=e139]: - - button "prev" [ref=e140] [cursor=pointer]: ‹ - - button "next" [ref=e141] [cursor=pointer]: › - - generic [ref=e144]: - - generic [ref=e146]: - - generic [ref=e147]: OUR FRAMEWORK - - heading "چارچوب اندیشه ما" [level=2] [ref=e148] - - paragraph [ref=e149]: ترکیب داده، تحلیل، آینده‌نگاری و خرد جمعی برای فهم تحولات صنعت فولاد. - - generic [ref=e150]: - - generic [ref=e151]: - - img [ref=e153] - - generic [ref=e157]: - - heading "تحلیل داده‌محور" [level=3] [ref=e158] - - paragraph [ref=e159]: استفاده از داده‌های بازار، اقتصاد، فناوری و زنجیره ارزش فولاد برای استخراج بینش‌های قابل اتکا. - - generic [ref=e160]: - - img [ref=e162] - - generic [ref=e167]: - - heading "نگاه نظام‌مند" [level=3] [ref=e168] - - paragraph [ref=e169]: تحلیل صنعت فولاد در تعامل با اقتصاد، انرژی، فناوری، محیط زیست و سیاست‌های جهانی. - - generic [ref=e170]: - - img [ref=e172] - - generic [ref=e177]: - - heading "هم‌اندیشی خبرگان" [level=3] [ref=e178] - - paragraph [ref=e179]: بهره‌گیری مستمر از شبکه‌ای از خبرگان صنعت، دانشگاه و فناوری. - - generic [ref=e180]: - - img [ref=e182] - - generic [ref=e190]: - - heading "آینده‌نگاری علمی" [level=3] [ref=e191] - - paragraph [ref=e192]: تحلیل روندها، شناسایی عدم‌قطعیت‌ها و طراحی سناریوها. - - generic [ref=e193]: - - img [ref=e195] - - generic [ref=e197]: - - heading "از تحلیل تا اقدام" [level=3] [ref=e198] - - paragraph [ref=e199]: تبدیل تحلیل‌ها به توصیه‌ها و تجویزهای استراتژیک. - - generic [ref=e200]: - - img [ref=e202] - - generic [ref=e206]: - - heading "بی‌طرفی و استقلال" [level=3] [ref=e207] - - paragraph [ref=e208]: اندیشه‌های مستقل و متکی بر شواهد، داده‌ها و نگاه بلندمدت. - - generic [ref=e214]: - - generic [ref=e215]: - - generic [ref=e216]: ماهنامه شماره ۱۲ منتشر شد… - - heading "دیپلماسی معدنی در عصر انسدادهای ژئوپلیتیک" [level=2] [ref=e217] - - generic [ref=e218]: Mineral Diplomacy in the Era of Geopolitical Blockades - - button "دانلود گزارش" [ref=e220] [cursor=pointer]: - - img [ref=e221] - - text: دانلود گزارش - - img "دیپلماسی معدنی در عصر انسدادهای ژئوپلیتیک" [ref=e225] - - generic [ref=e228]: - - generic [ref=e230]: - - generic [ref=e231]: DATA SOURCES - - heading "نبض صنعت" [level=2] [ref=e232] - - paragraph [ref=e233]: پنجره‌ای واحد به جهان داده‌های فولاد؛ دسترسی به شاخص‌ها، قیمت‌ها، تجارت جهانی و داده‌های کلیدی از معدن تا محصول نهایی. - - link "مشاهده منابع داده" [ref=e234] [cursor=pointer]: - - /url: /pulse - - text: مشاهده منابع داده - - img [ref=e235] - - generic [ref=e238]: - - generic "London Metal Exchange" [ref=e244] [cursor=pointer]: - - img [ref=e246] - - generic "Shanghai Futures Exchange" [ref=e256] [cursor=pointer]: - - img [ref=e258] - - generic "S&P Global Platts" [ref=e262] [cursor=pointer]: - - img [ref=e264] - - generic "Reuters" [ref=e271] [cursor=pointer]: - - img [ref=e273] - - generic "Fastmarkets" [ref=e279] [cursor=pointer]: - - img [ref=e281] - - generic "World Steel Association" [ref=e287] [cursor=pointer]: - - img [ref=e289] - - generic "Mysteel" [ref=e296] [cursor=pointer]: - - img [ref=e298] - - generic "Dalian Commodity Exchange" [ref=e304] [cursor=pointer]: - - img [ref=e306] - - generic "CME Group" [ref=e311] [cursor=pointer]: - - img [ref=e313] - - generic [ref=e323]: - - generic [ref=e324]: - - heading "دیده‌بان رویداد‌ها" [level=2] [ref=e327] - - link "مشاهده همه" [ref=e328] [cursor=pointer]: - - /url: /events - - img [ref=e330] - - generic [ref=e332]: مشاهده همه - - generic [ref=e333]: - - generic [ref=e334]: - - button "اجلاس جهانی فولاد سبز | استکهلم، سوئد" [ref=e335] [cursor=pointer]: - - generic [ref=e336]: اجلاس جهانی فولاد سبز | استکهلم، سوئد - - img [ref=e337] - - paragraph [ref=e340]: - - text: بررسی آخرین تکنولوژی‌های احیای مستقیم بر پایه هیدروژن و جذب سرمایه برای پروژه‌های بدون کربن. حضور در این رویداد برای درک آینده مقررات زیست‌محیطی اروپا حیاتی است. - - generic [ref=e341]: "(زمان: مهر ۱۴۰۵)" - - generic [ref=e342]: - - button "نشست سالانه انجمن جهانی فولاد (worldsteel) | شانگهای، چین" [ref=e343] [cursor=pointer]: - - generic [ref=e344]: نشست سالانه انجمن جهانی فولاد (worldsteel) | شانگهای، چین - - img [ref=e345] - - paragraph [ref=e347]: - - text: "گردهمایی بزرگ‌ترین رهبران صنعت. محور اصلی امسال: پیش‌بینی تقاضای جهانی در سایه رکود بخش مسکن چین و تغییر مسیر زنجیره تامین به سمت هند و خاورمیانه." - - generic [ref=e348]: "(زمان: آبان ۱۴۰۵)" - - generic [ref=e349]: - - button "مجمع بین‌المللی هوش مصنوعی در تولید | برلین، آلمان" [ref=e350] [cursor=pointer]: - - generic [ref=e351]: مجمع بین‌المللی هوش مصنوعی در تولید | برلین، آلمان - - img [ref=e352] - - paragraph [ref=e354]: - - text: رونمایی از جدیدترین نسل دوقلوهای دیجیتال (Digital Twins) و الگوریتم‌های پیش‌بینی تعمیرات. فرصتی برای آشنایی با راهکارهای کاهش هزینه و افزایش بهره‌وری خطوط نورد. - - generic [ref=e355]: "(زمان: آذر ۱۴۰۵)" - - generic [ref=e362]: - - generic [ref=e363]: - - generic [ref=e364]: - - generic [ref=e365]: Monthly Industry Report - - heading "ماهنامه تحلیلی کارخانه" [level=2] [ref=e366] - - link "مشاهده همه" [ref=e367] [cursor=pointer]: - - /url: https://www.msc.ir/fa-IR/Portal/8029/page/%D9%85%D8%A7%D9%87%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%AD%D9%84%DB%8C%D9%84%DB%8C-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%DB%8C-%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87 - - generic [ref=e368]: - - article [ref=e370] [cursor=pointer]: - - generic [ref=e373]: تولید و صادرات - - generic [ref=e374]: - - generic [ref=e375]: بهمن ۱۴۰۳ - - heading "تحلیل عملکرد تولید و صادرات" [level=3] [ref=e376] - - paragraph [ref=e377]: بررسی آمار تولید ماهانه، مقایسه با بودجه سالانه و روند صادرات فولاد تخت در بازارهای منطقه‌ای. - - link "دریافت گزارش" [ref=e379]: - - /url: https://www.msc.ir/fa-IR/Portal/8029/page/%D9%85%D8%A7%D9%87%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%AD%D9%84%DB%8C%D9%84%DB%8C-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%DB%8C-%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87 - - img [ref=e380] - - generic [ref=e383]: دریافت گزارش - - article [ref=e385] [cursor=pointer]: - - generic [ref=e388]: بازار و قیمت - - generic [ref=e389]: - - generic [ref=e390]: دی ۱۴۰۳ - - heading "وضعیت بازار و قیمت‌گذاری" [level=3] [ref=e391] - - paragraph [ref=e392]: تحلیل نوسانات قیمت فولاد تخت در بازار داخلی و اثر نرخ ارز بر چشم‌انداز زمستان. - - link "دریافت گزارش" [ref=e394]: - - /url: https://www.msc.ir/fa-IR/Portal/8029/page/%D9%85%D8%A7%D9%87%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%AD%D9%84%DB%8C%D9%84%DB%8C-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%DB%8C-%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87 - - img [ref=e395] - - generic [ref=e398]: دریافت گزارش - - article [ref=e400] [cursor=pointer]: - - generic [ref=e403]: فناوری - - generic [ref=e404]: - - generic [ref=e405]: آذر ۱۴۰۳ - - heading "دیجیتال‌سازی خطوط تولید" [level=3] [ref=e406] - - paragraph [ref=e407]: گزارشی از پیاده‌سازی سامانه‌های کنترل هوشمند و اثر آن بر بهره‌وری خطوط نورد. - - link "دریافت گزارش" [ref=e409]: - - /url: https://www.msc.ir/fa-IR/Portal/8029/page/%D9%85%D8%A7%D9%87%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%AD%D9%84%DB%8C%D9%84%DB%8C-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%DB%8C-%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87 - - img [ref=e410] - - generic [ref=e413]: دریافت گزارش - - article [ref=e415] [cursor=pointer]: - - generic [ref=e418]: نیروی انسانی - - generic [ref=e419]: - - generic [ref=e420]: آبان ۱۴۰۳ - - heading "تحلیل نیروی انسانی و بهره‌وری" [level=3] [ref=e421] - - paragraph [ref=e422]: شاخص‌های بهره‌وری نیروی کار، آموزش‌های ماهانه و آمار ایمنی شغلی. - - link "دریافت گزارش" [ref=e424]: - - /url: https://www.msc.ir/fa-IR/Portal/8029/page/%D9%85%D8%A7%D9%87%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%AD%D9%84%DB%8C%D9%84%DB%8C-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%DB%8C-%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87 - - img [ref=e425] - - generic [ref=e428]: دریافت گزارش - - generic [ref=e432]: - - generic [ref=e433]: - - heading "ویدیوکست" [level=2] [ref=e436] - - button "مشاهده همه" [ref=e437] [cursor=pointer]: - - img [ref=e439] - - generic [ref=e441]: مشاهده همه - - generic [ref=e442]: - - button "play" [ref=e444] [cursor=pointer] - - generic [ref=e450]: - - generic [ref=e451]: - - generic [ref=e452]: ⏸ - - generic [ref=e453]: ⏭ - - generic [ref=e454]: 🔊 - - generic [ref=e455]: ۰۹:۲۷ / ۴۲ دقیقه - - generic [ref=e456]: - - generic [ref=e457]: ⤴ - - generic [ref=e458]: ⛶ - - generic [ref=e459]: - - generic [ref=e460]: - - generic [ref=e461]: 🎙 - - heading "نگاهی به آن سوی مرزهای تولید" [level=3] [ref=e462] - - paragraph [ref=e463]: در ویدیوکست «Steel Horizon»، ما فراتر از داده‌های خام قیمت و تناژ، به سراغ مهندسی تغییر و معماری آینده صنعت می‌رویم. اینجا محل تلاقی استراتژی‌های کلان، تکنولوژی‌های برهم‌زننده و رهبرانی است که فولاد فردا را نه با کوره‌ها، که با «بینش» می‌سازند. ما طوفان‌های بازار را تحلیل می‌کنیم تا شما با اطمینان، مسیر آینده را ترسیم کنید. صنعت فولاد در حال ورود به پیچیده‌ترین چرخه حیات خود است؛ جایی که هوش مصنوعی، مقررات کربنی و ژئواکونومی، قواعد بازی را بازنویسی کرده‌اند. در «Steel Logic» با تحلیل‌گران ارشد و استراتژیست‌های تراز اول، به گفتگو می‌نشینیم تا لایه‌های پنهان این پیچیدگی‌ها را آشکار کنیم. اینجا خبری از هیجان‌زدگی نیست؛ فقط تحلیل‌های داده‌محور و تصمیم‌ساز. - - generic [ref=e468]: - - generic [ref=e469]: - - heading "پادکست‌ها" [level=2] [ref=e472] - - button "مشاهده همه" [ref=e473] [cursor=pointer]: - - generic [ref=e474]: مشاهده همه - - img [ref=e476] - - generic [ref=e478]: - - generic [ref=e480]: - - generic [ref=e481]: ★★★★★ - - generic [ref=e482]: ۴/۵ - - generic [ref=e483]: - - generic [ref=e484]: - - generic [ref=e485]: - - button [ref=e486] [cursor=pointer]: - - img [ref=e487] - - button [ref=e490] [cursor=pointer]: - - img [ref=e491] - - generic [ref=e493]: اپیزود ۷۷ - - heading "کالبدشکافی عقلانی پیچیدگی‌های صنعتی" [level=3] [ref=e495] - - generic [ref=e497]: - - img [ref=e498] - - generic [ref=e500]: ۲۵ / خرداد / ۱۴۰۵ - - generic [ref=e502]: - - button "play" [ref=e503] [cursor=pointer]: - - img [ref=e504] - - generic [ref=e506]: - - generic [ref=e507]: ۰۲:۳۱ - - generic [ref=e589]: ۱۰:۵۶ - - generic [ref=e590]: - - generic [ref=e591]: - - button "آزمایشگاه کوره ۱:۴۰:۱۸ «The Foundry Lab» محلی برای کالبدشکافی دقیق تحولات فناورانه و مدل‌های نوین فولادسازی است. ما در این پادکست با نگاهی موشکافانه، چالش‌های فنی را بررسی می‌کنیم." [ref=e592] [cursor=pointer]: - - generic [ref=e593]: - - generic [ref=e594]: - - generic [ref=e595]: آزمایشگاه کوره - - generic [ref=e596]: - - img [ref=e597] - - generic [ref=e600]: ۱:۴۰:۱۸ - - generic [ref=e601]: «The Foundry Lab» محلی برای کالبدشکافی دقیق تحولات فناورانه و مدل‌های نوین فولادسازی است. ما در این پادکست با نگاهی موشکافانه، چالش‌های فنی را بررسی می‌کنیم. - - button "معمار فولاد ۱:۴۰:۱۸ در «Steel Architect»، ما به سراغ داستان ساختن فولاد فردا می‌رویم؛ روایتی که رهبرانی که از مدل‌های سنتی کسب‌وکار به چالش کشیده‌اند را به تصویر می‌کشد." [ref=e602] [cursor=pointer]: - - generic [ref=e603]: - - generic [ref=e604]: - - generic [ref=e605]: معمار فولاد - - generic [ref=e606]: - - img [ref=e607] - - generic [ref=e610]: ۱:۴۰:۱۸ - - generic [ref=e611]: در «Steel Architect»، ما به سراغ داستان ساختن فولاد فردا می‌رویم؛ روایتی که رهبرانی که از مدل‌های سنتی کسب‌وکار به چالش کشیده‌اند را به تصویر می‌کشد. - - generic [ref=e612]: - - generic [ref=e613]: - - heading "کالبدشکافی عقلانی پیچیدگی‌های صنعتی" [level=3] [ref=e614] - - img [ref=e616] - - paragraph [ref=e621]: «صنعت فولاد در عصر حاضر، در پیچیده‌ترین چرخه حیات خود قرار گرفته است؛ جایی که همگرایی هوش مصنوعی، الزامات زیست‌محیطی و تنش‌های ژئواکونومیک، قواعد کلاسیک تولید و تجارت را به‌کلی بازنویسی کرده‌اند. در پادکست «نام انتخابی»، ما با عبور از هیاهوی رسانه‌ای و تحلیل‌های سطحی، به کالبدشکافی عقلانی این پیچیدگی‌ها می‌پردازیم. ما با دعوت از استراتژیست‌های تراز اول و خبرگان این حوزه، لایه‌های پنهان چالش‌های صنعتی را می‌شکافیم تا بینشی شفاف، داده‌محور و تصمیم‌ساز را در اختیار رهبری قرار دهیم که برای عبور از طوفان‌های تغییر، به قطب‌نمای دقیق‌تر از عرف‌های بازار نیاز دارند.» - - generic [ref=e622]: "مهمان برنامه: مهندس سیامک شجاعی" - - contentinfo [ref=e623]: - - generic [ref=e624]: - - img [ref=e625] - - button "بازگشت به بالا" [ref=e627] [cursor=pointer]: - - img [ref=e628] - - generic [ref=e633]: - - generic [ref=e634]: - - img "اندیشکده فولاد آینده" [ref=e635] - - generic [ref=e638]: اندیشکده فولاد آینده - - generic [ref=e640]: The Steel Futures Institute - - paragraph [ref=e641]: فضایی همدلانه برای اندیشیدن به فردای صنعت؛ جایی که دانش، آینده‌پژوهی و نوآوری به بینش‌هایی برای توسعه صنعتی تبدیل می‌شوند. - - generic [ref=e642]: ما را در شبکه‌های اجتماعی دنبال کنید. - - generic [ref=e643]: - - link "آپارات" [ref=e644] [cursor=pointer]: - - /url: "#" - - img [ref=e645] - - link "X" [ref=e647] [cursor=pointer]: - - /url: "#" - - img [ref=e648] - - link "لینکداین" [ref=e650] [cursor=pointer]: - - /url: "#" - - img [ref=e651] - - link "تلگرام" [ref=e653] [cursor=pointer]: - - /url: "#" - - img [ref=e654] - - navigation "پیوندهای پایین" [ref=e656]: - - link "رادار آینده" [ref=e657] [cursor=pointer]: - - /url: /radar - - text: رادار آینده - - link "آمار و داده" [ref=e659] [cursor=pointer]: - - /url: "#" - - text: آمار و داده - - link "رسانه و رویداد" [ref=e661] [cursor=pointer]: - - /url: "#" - - text: رسانه و رویداد - - link "در یک نگاه" [ref=e663] [cursor=pointer]: - - /url: /at-a-glance - - text: در یک نگاه - - link "شبکه خبرگان" [ref=e665] [cursor=pointer]: - - /url: "#" - - text: شبکه خبرگان - - link "درباره ما" [ref=e667] [cursor=pointer]: - - /url: "#" - - text: درباره ما - - generic [ref=e669]: - - generic [ref=e670]: اطلاعات تماس - - generic [ref=e671]: - - generic [ref=e672]: - - img [ref=e673] - - generic [ref=e676]: "نشانی:" - - generic [ref=e677]: اصفهان، خیابان سعادت‌آباد - - generic [ref=e678]: - - img [ref=e679] - - generic [ref=e681]: "شماره تماس:" - - generic [ref=e682]: ۰۳۱ - ۳۸۸۸۴۵۳۹ - - generic [ref=e683]: - - img [ref=e684] - - generic [ref=e687]: "پست الکترونیک:" - - generic [ref=e688]: info@steelforesight.com - - generic [ref=e689]: - - generic [ref=e691]: نشان - - generic [ref=e693]: نشان - - generic [ref=e695]: نشان - - generic [ref=e696]: - - generic [ref=e697]: عضویت در خبرنامه اندیشکده - - generic [ref=e698]: - - textbox "ایمیل خود را وارد کنید..." [ref=e699] - - button "ثبت" [ref=e700] [cursor=pointer] - - generic [ref=e702]: - - generic [ref=e703]: تمامی حقوق مادی و معنوی این وب‌سایت متعلق به شرکت فولاد مبارکه می‌باشد. - - generic [ref=e704]: طراح و پشتیبان؛ شرکت دانش‌بنیان نواندیشان آتی نگار فرتاک \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-14T05-12-09-456Z.yml b/.playwright-mcp/page-2026-06-14T05-12-09-456Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-14T05-13-22-496Z.yml b/.playwright-mcp/page-2026-06-14T05-13-22-496Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-14T05-13-48-058Z.yml b/.playwright-mcp/page-2026-06-14T05-13-48-058Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-14T05-14-24-103Z.yml b/.playwright-mcp/page-2026-06-14T05-14-24-103Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-14T05-15-36-745Z.yml b/.playwright-mcp/page-2026-06-14T05-15-36-745Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.playwright-mcp/page-2026-06-15T06-13-53-790Z.yml b/.playwright-mcp/page-2026-06-15T06-13-53-790Z.yml deleted file mode 100644 index 9fe6dde..0000000 --- a/.playwright-mcp/page-2026-06-15T06-13-53-790Z.yml +++ /dev/null @@ -1,121 +0,0 @@ -- generic [ref=e3]: - - banner [ref=e4]: - - generic [ref=e6]: - - link "اندیشکده فولاد آینده The Steel Futures Institute" [ref=e7] [cursor=pointer]: - - /url: / - - img [ref=e8] - - generic [ref=e9]: - - generic [ref=e10]: اندیشکده فولاد آینده - - generic [ref=e11]: The Steel Futures Institute - - navigation "ناوبری اصلی" [ref=e12]: - - button "رادار آینده" [ref=e14] [cursor=pointer]: - - text: رادار آینده - - img [ref=e15] - - link "آمار و داده" [ref=e17] [cursor=pointer]: - - /url: /pulse - - link "در یک نگاه" [ref=e18] [cursor=pointer]: - - /url: /at-a-glance - - button "رسانه و رویداد" [ref=e20] [cursor=pointer]: - - text: رسانه و رویداد - - img [ref=e21] - - link "شبکه خبرگان" [ref=e23] [cursor=pointer]: - - /url: /experts - - button "درباره ما" [ref=e25] [cursor=pointer]: - - text: درباره ما - - img [ref=e26] - - generic [ref=e28]: - - button "جستجو" [ref=e29] [cursor=pointer]: - - img [ref=e30] - - link "alire" [ref=e33] [cursor=pointer]: - - /url: /profile - - img [ref=e34] - - text: alire - - button "Switch to English" [ref=e37] [cursor=pointer]: 🇺🇸 - - main [ref=e38]: - - generic [ref=e40]: - - generic [ref=e41]: - - img [ref=e43] - - heading "ورود به حساب" [level=1] [ref=e46] - - generic [ref=e47]: - - generic [ref=e48]: - - generic [ref=e49]: ایمیل - - textbox "example@email.com" [ref=e50] - - generic [ref=e51]: - - generic [ref=e52]: رمز عبور - - textbox [ref=e53] - - button "ورود" [ref=e54] [cursor=pointer] - - paragraph [ref=e55]: - - text: حساب ندارید؟ - - link "ثبت‌نام کنید" [ref=e56] [cursor=pointer]: - - /url: /register - - contentinfo [ref=e57]: - - generic [ref=e58]: - - img [ref=e59] - - button "بازگشت به بالا" [ref=e61] [cursor=pointer]: - - img [ref=e62] - - generic [ref=e67]: - - generic [ref=e68]: - - img "اندیشکده فولاد آینده" [ref=e69] - - generic [ref=e72]: اندیشکده فولاد آینده - - generic [ref=e74]: The Steel Futures Institute - - paragraph [ref=e75]: فضایی همدلانه برای اندیشیدن به فردای صنعت؛ جایی که دانش، آینده‌پژوهی و نوآوری به بینش‌هایی برای توسعه صنعتی تبدیل می‌شوند. - - generic [ref=e76]: ما را در شبکه‌های اجتماعی دنبال کنید. - - generic [ref=e77]: - - link "آپارات" [ref=e78] [cursor=pointer]: - - /url: "#" - - img [ref=e79] - - link "X" [ref=e81] [cursor=pointer]: - - /url: "#" - - img [ref=e82] - - link "لینکداین" [ref=e84] [cursor=pointer]: - - /url: "#" - - img [ref=e85] - - link "تلگرام" [ref=e87] [cursor=pointer]: - - /url: "#" - - img [ref=e88] - - navigation "پیوندهای پایین" [ref=e90]: - - link "رادار آینده" [ref=e91] [cursor=pointer]: - - /url: /radar - - text: رادار آینده - - link "آمار و داده" [ref=e93] [cursor=pointer]: - - /url: "#" - - text: آمار و داده - - link "رسانه و رویداد" [ref=e95] [cursor=pointer]: - - /url: "#" - - text: رسانه و رویداد - - link "در یک نگاه" [ref=e97] [cursor=pointer]: - - /url: /at-a-glance - - text: در یک نگاه - - link "شبکه خبرگان" [ref=e99] [cursor=pointer]: - - /url: "#" - - text: شبکه خبرگان - - link "درباره ما" [ref=e101] [cursor=pointer]: - - /url: "#" - - text: درباره ما - - generic [ref=e103]: - - generic [ref=e104]: اطلاعات تماس - - generic [ref=e105]: - - generic [ref=e106]: - - img [ref=e107] - - generic [ref=e110]: "نشانی:" - - generic [ref=e111]: اصفهان، خیابان سعادت‌آباد - - generic [ref=e112]: - - img [ref=e113] - - generic [ref=e115]: "شماره تماس:" - - generic [ref=e116]: ۰۳۱ - ۳۸۸۸۴۵۳۹ - - generic [ref=e117]: - - img [ref=e118] - - generic [ref=e121]: "پست الکترونیک:" - - generic [ref=e122]: info@steelforesight.com - - generic [ref=e123]: - - generic [ref=e125]: نشان - - generic [ref=e127]: نشان - - generic [ref=e129]: نشان - - generic [ref=e130]: - - generic [ref=e131]: عضویت در خبرنامه اندیشکده - - generic [ref=e132]: - - textbox "ایمیل خود را وارد کنید..." [ref=e133] - - button "ثبت" [ref=e134] [cursor=pointer] - - generic [ref=e136]: - - generic [ref=e137]: تمامی حقوق مادی و معنوی این وب‌سایت متعلق به شرکت فولاد مبارکه می‌باشد. - - generic [ref=e138]: طراح و پشتیبان؛ شرکت دانش‌بنیان نواندیشان آتی نگار فرتاک \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-15T06-13-57-002Z.png b/.playwright-mcp/page-2026-06-15T06-13-57-002Z.png deleted file mode 100644 index f034287..0000000 Binary files a/.playwright-mcp/page-2026-06-15T06-13-57-002Z.png and /dev/null differ diff --git a/.playwright-mcp/page-2026-06-15T06-16-32-391Z.yml b/.playwright-mcp/page-2026-06-15T06-16-32-391Z.yml deleted file mode 100644 index fce8be6..0000000 --- a/.playwright-mcp/page-2026-06-15T06-16-32-391Z.yml +++ /dev/null @@ -1,154 +0,0 @@ -- generic [ref=e3]: - - banner [ref=e4]: - - generic [ref=e6]: - - link "اندیشکده فولاد آینده The Steel Futures Institute" [ref=e7] [cursor=pointer]: - - /url: / - - img [ref=e8] - - generic [ref=e9]: - - generic [ref=e10]: اندیشکده فولاد آینده - - generic [ref=e11]: The Steel Futures Institute - - navigation "ناوبری اصلی" [ref=e12]: - - button "رادار آینده" [ref=e14] [cursor=pointer]: - - text: رادار آینده - - img [ref=e15] - - link "آمار و داده" [ref=e17] [cursor=pointer]: - - /url: /pulse - - link "در یک نگاه" [ref=e18] [cursor=pointer]: - - /url: /at-a-glance - - button "رسانه و رویداد" [ref=e20] [cursor=pointer]: - - text: رسانه و رویداد - - img [ref=e21] - - link "شبکه خبرگان" [ref=e23] [cursor=pointer]: - - /url: /experts - - button "درباره ما" [ref=e25] [cursor=pointer]: - - text: درباره ما - - img [ref=e26] - - generic [ref=e28]: - - button "جستجو" [ref=e29] [cursor=pointer]: - - img [ref=e30] - - link "ورود / ثبت‌نام" [ref=e33] [cursor=pointer]: - - /url: /login - - button "Switch to English" [ref=e34] [cursor=pointer]: 🇺🇸 - - main [ref=e35]: - - generic [ref=e36]: - - generic [ref=e37]: - - img [ref=e38] - - img [ref=e40] - - link "اندیشکده فولاد آینده The Steel Futures Institute" [ref=e48] [cursor=pointer]: - - /url: / - - generic [ref=e49]: - - generic [ref=e50]: اندیشکده فولاد آینده - - generic [ref=e51]: The Steel Futures Institute - - generic [ref=e52]: - - generic [ref=e53]: عضویت در اندیشکده - - heading "دسترسی به تحلیل‌های تخصصی صنعت فولاد ایران" [level=1] [ref=e54]: - - text: دسترسی به تحلیل‌های تخصصی - - text: صنعت فولاد ایران - - paragraph [ref=e55]: گزارش‌های بازار، رصد فناوری، و تحلیل ژئوپلیتیک — همه در یک پلتفرم - - generic [ref=e56]: - - generic [ref=e57]: - - generic [ref=e58]: +۲۰۰ - - generic [ref=e59]: گزارش تخصصی - - generic [ref=e60]: - - generic [ref=e61]: ۵۰+ - - generic [ref=e62]: کارشناس - - generic [ref=e63]: - - generic [ref=e64]: ۳ سال - - generic [ref=e65]: سابقه - - generic [ref=e67]: - - generic [ref=e68]: - - heading "خوش آمدید" [level=2] [ref=e69] - - paragraph [ref=e70]: برای ادامه وارد حساب خود شوید - - generic [ref=e71]: - - generic [ref=e72]: - - generic [ref=e73]: ایمیل - - generic [ref=e74]: - - textbox "example@email.com" [ref=e75] - - img [ref=e76] - - generic [ref=e79]: - - generic [ref=e80]: رمز عبور - - generic [ref=e81]: - - textbox [ref=e82] - - img [ref=e83] - - button [ref=e86] [cursor=pointer]: - - img [ref=e87] - - button "ورود به حساب" [ref=e90] [cursor=pointer] - - generic [ref=e91]: - - text: حساب ندارید؟ - - link "ثبت‌نام کنید" [ref=e92] [cursor=pointer]: - - /url: /register - - link "بازگشت به سایت" [ref=e94] [cursor=pointer]: - - /url: / - - img [ref=e95] - - text: بازگشت به سایت - - contentinfo [ref=e97]: - - generic [ref=e98]: - - img [ref=e99] - - button "بازگشت به بالا" [ref=e101] [cursor=pointer]: - - img [ref=e102] - - generic [ref=e107]: - - generic [ref=e108]: - - img "اندیشکده فولاد آینده" [ref=e109] - - generic [ref=e112]: اندیشکده فولاد آینده - - generic [ref=e114]: The Steel Futures Institute - - paragraph [ref=e115]: فضایی همدلانه برای اندیشیدن به فردای صنعت؛ جایی که دانش، آینده‌پژوهی و نوآوری به بینش‌هایی برای توسعه صنعتی تبدیل می‌شوند. - - generic [ref=e116]: ما را در شبکه‌های اجتماعی دنبال کنید. - - generic [ref=e117]: - - link "آپارات" [ref=e118] [cursor=pointer]: - - /url: "#" - - img [ref=e119] - - link "X" [ref=e121] [cursor=pointer]: - - /url: "#" - - img [ref=e122] - - link "لینکداین" [ref=e124] [cursor=pointer]: - - /url: "#" - - img [ref=e125] - - link "تلگرام" [ref=e127] [cursor=pointer]: - - /url: "#" - - img [ref=e128] - - navigation "پیوندهای پایین" [ref=e130]: - - link "رادار آینده" [ref=e131] [cursor=pointer]: - - /url: /radar - - text: رادار آینده - - link "آمار و داده" [ref=e133] [cursor=pointer]: - - /url: "#" - - text: آمار و داده - - link "رسانه و رویداد" [ref=e135] [cursor=pointer]: - - /url: "#" - - text: رسانه و رویداد - - link "در یک نگاه" [ref=e137] [cursor=pointer]: - - /url: /at-a-glance - - text: در یک نگاه - - link "شبکه خبرگان" [ref=e139] [cursor=pointer]: - - /url: "#" - - text: شبکه خبرگان - - link "درباره ما" [ref=e141] [cursor=pointer]: - - /url: "#" - - text: درباره ما - - generic [ref=e143]: - - generic [ref=e144]: اطلاعات تماس - - generic [ref=e145]: - - generic [ref=e146]: - - img [ref=e147] - - generic [ref=e150]: "نشانی:" - - generic [ref=e151]: اصفهان، خیابان سعادت‌آباد - - generic [ref=e152]: - - img [ref=e153] - - generic [ref=e155]: "شماره تماس:" - - generic [ref=e156]: ۰۳۱ - ۳۸۸۸۴۵۳۹ - - generic [ref=e157]: - - img [ref=e158] - - generic [ref=e161]: "پست الکترونیک:" - - generic [ref=e162]: info@steelforesight.com - - generic [ref=e163]: - - generic [ref=e165]: نشان - - generic [ref=e167]: نشان - - generic [ref=e169]: نشان - - generic [ref=e170]: - - generic [ref=e171]: عضویت در خبرنامه اندیشکده - - generic [ref=e172]: - - textbox "ایمیل خود را وارد کنید..." [ref=e173] - - button "ثبت" [ref=e174] [cursor=pointer] - - generic [ref=e176]: - - generic [ref=e177]: تمامی حقوق مادی و معنوی این وب‌سایت متعلق به شرکت فولاد مبارکه می‌باشد. - - generic [ref=e178]: طراح و پشتیبان؛ شرکت دانش‌بنیان نواندیشان آتی نگار فرتاک \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-15T06-17-14-936Z.yml b/.playwright-mcp/page-2026-06-15T06-17-14-936Z.yml deleted file mode 100644 index e584ae4..0000000 --- a/.playwright-mcp/page-2026-06-15T06-17-14-936Z.yml +++ /dev/null @@ -1,119 +0,0 @@ -- generic [ref=e3]: - - banner [ref=e4]: - - generic [ref=e6]: - - link "اندیشکده فولاد آینده The Steel Futures Institute" [ref=e7] [cursor=pointer]: - - /url: / - - img [ref=e8] - - generic [ref=e9]: - - generic [ref=e10]: اندیشکده فولاد آینده - - generic [ref=e11]: The Steel Futures Institute - - navigation "ناوبری اصلی" [ref=e12]: - - button "رادار آینده" [ref=e14] [cursor=pointer]: - - text: رادار آینده - - img [ref=e15] - - link "آمار و داده" [ref=e17] [cursor=pointer]: - - /url: /pulse - - link "در یک نگاه" [ref=e18] [cursor=pointer]: - - /url: /at-a-glance - - button "رسانه و رویداد" [ref=e20] [cursor=pointer]: - - text: رسانه و رویداد - - img [ref=e21] - - link "شبکه خبرگان" [ref=e23] [cursor=pointer]: - - /url: /experts - - button "درباره ما" [ref=e25] [cursor=pointer]: - - text: درباره ما - - img [ref=e26] - - generic [ref=e28]: - - button "جستجو" [ref=e29] [cursor=pointer]: - - img [ref=e30] - - link "ورود / ثبت‌نام" [ref=e33] [cursor=pointer]: - - /url: /login - - button "Switch to English" [ref=e34] [cursor=pointer]: 🇺🇸 - - main [ref=e35]: - - generic [ref=e37]: - - generic [ref=e38]: - - img [ref=e40] - - heading "ورود به حساب" [level=1] [ref=e43] - - generic [ref=e44]: - - generic [ref=e45]: - - generic [ref=e46]: ایمیل - - textbox "example@email.com" [ref=e47] - - generic [ref=e48]: - - generic [ref=e49]: رمز عبور - - textbox [ref=e50] - - button "ورود" [ref=e51] [cursor=pointer] - - paragraph [ref=e52]: - - text: حساب ندارید؟ - - link "ثبت‌نام کنید" [ref=e53] [cursor=pointer]: - - /url: /register - - contentinfo [ref=e54]: - - generic [ref=e55]: - - img [ref=e56] - - button "بازگشت به بالا" [ref=e58] [cursor=pointer]: - - img [ref=e59] - - generic [ref=e64]: - - generic [ref=e65]: - - img "اندیشکده فولاد آینده" [ref=e66] - - generic [ref=e69]: اندیشکده فولاد آینده - - generic [ref=e71]: The Steel Futures Institute - - paragraph [ref=e72]: فضایی همدلانه برای اندیشیدن به فردای صنعت؛ جایی که دانش، آینده‌پژوهی و نوآوری به بینش‌هایی برای توسعه صنعتی تبدیل می‌شوند. - - generic [ref=e73]: ما را در شبکه‌های اجتماعی دنبال کنید. - - generic [ref=e74]: - - link "آپارات" [ref=e75] [cursor=pointer]: - - /url: "#" - - img [ref=e76] - - link "X" [ref=e78] [cursor=pointer]: - - /url: "#" - - img [ref=e79] - - link "لینکداین" [ref=e81] [cursor=pointer]: - - /url: "#" - - img [ref=e82] - - link "تلگرام" [ref=e84] [cursor=pointer]: - - /url: "#" - - img [ref=e85] - - navigation "پیوندهای پایین" [ref=e87]: - - link "رادار آینده" [ref=e88] [cursor=pointer]: - - /url: /radar - - text: رادار آینده - - link "آمار و داده" [ref=e90] [cursor=pointer]: - - /url: "#" - - text: آمار و داده - - link "رسانه و رویداد" [ref=e92] [cursor=pointer]: - - /url: "#" - - text: رسانه و رویداد - - link "در یک نگاه" [ref=e94] [cursor=pointer]: - - /url: /at-a-glance - - text: در یک نگاه - - link "شبکه خبرگان" [ref=e96] [cursor=pointer]: - - /url: "#" - - text: شبکه خبرگان - - link "درباره ما" [ref=e98] [cursor=pointer]: - - /url: "#" - - text: درباره ما - - generic [ref=e100]: - - generic [ref=e101]: اطلاعات تماس - - generic [ref=e102]: - - generic [ref=e103]: - - img [ref=e104] - - generic [ref=e107]: "نشانی:" - - generic [ref=e108]: اصفهان، خیابان سعادت‌آباد - - generic [ref=e109]: - - img [ref=e110] - - generic [ref=e112]: "شماره تماس:" - - generic [ref=e113]: ۰۳۱ - ۳۸۸۸۴۵۳۹ - - generic [ref=e114]: - - img [ref=e115] - - generic [ref=e118]: "پست الکترونیک:" - - generic [ref=e119]: info@steelforesight.com - - generic [ref=e120]: - - generic [ref=e122]: نشان - - generic [ref=e124]: نشان - - generic [ref=e126]: نشان - - generic [ref=e127]: - - generic [ref=e128]: عضویت در خبرنامه اندیشکده - - generic [ref=e129]: - - textbox "ایمیل خود را وارد کنید..." [ref=e130] - - button "ثبت" [ref=e131] [cursor=pointer] - - generic [ref=e133]: - - generic [ref=e134]: تمامی حقوق مادی و معنوی این وب‌سایت متعلق به شرکت فولاد مبارکه می‌باشد. - - generic [ref=e135]: طراح و پشتیبان؛ شرکت دانش‌بنیان نواندیشان آتی نگار فرتاک \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-15T06-19-19-729Z.yml b/.playwright-mcp/page-2026-06-15T06-19-19-729Z.yml deleted file mode 100644 index 67718d7..0000000 --- a/.playwright-mcp/page-2026-06-15T06-19-19-729Z.yml +++ /dev/null @@ -1,121 +0,0 @@ -- generic [ref=e3]: - - banner [ref=e4]: - - generic [ref=e6]: - - link "اندیشکده فولاد آینده The Steel Futures Institute" [ref=e7] [cursor=pointer]: - - /url: / - - img [ref=e8] - - generic [ref=e9]: - - generic [ref=e10]: اندیشکده فولاد آینده - - generic [ref=e11]: The Steel Futures Institute - - navigation "ناوبری اصلی" [ref=e12]: - - button "رادار آینده" [ref=e14] [cursor=pointer]: - - text: رادار آینده - - img [ref=e15] - - link "آمار و داده" [ref=e17] [cursor=pointer]: - - /url: /pulse - - link "در یک نگاه" [ref=e18] [cursor=pointer]: - - /url: /at-a-glance - - button "رسانه و رویداد" [ref=e20] [cursor=pointer]: - - text: رسانه و رویداد - - img [ref=e21] - - link "شبکه خبرگان" [ref=e23] [cursor=pointer]: - - /url: /experts - - button "درباره ما" [ref=e25] [cursor=pointer]: - - text: درباره ما - - img [ref=e26] - - generic [ref=e28]: - - button "جستجو" [ref=e29] [cursor=pointer]: - - img [ref=e30] - - link "علیرضا" [ref=e33] [cursor=pointer]: - - /url: /profile - - img [ref=e34] - - text: علیرضا - - button "Switch to English" [ref=e37] [cursor=pointer]: 🇺🇸 - - main [ref=e38]: - - generic [ref=e40]: - - generic [ref=e41]: - - img [ref=e43] - - heading "ورود به حساب" [level=1] [ref=e46] - - generic [ref=e47]: - - generic [ref=e48]: - - generic [ref=e49]: ایمیل - - textbox "example@email.com" [ref=e50] - - generic [ref=e51]: - - generic [ref=e52]: رمز عبور - - textbox [ref=e53] - - button "ورود" [ref=e54] [cursor=pointer] - - paragraph [ref=e55]: - - text: حساب ندارید؟ - - link "ثبت‌نام کنید" [ref=e56] [cursor=pointer]: - - /url: /register - - contentinfo [ref=e57]: - - generic [ref=e58]: - - img [ref=e59] - - button "بازگشت به بالا" [ref=e61] [cursor=pointer]: - - img [ref=e62] - - generic [ref=e67]: - - generic [ref=e68]: - - img "اندیشکده فولاد آینده" [ref=e69] - - generic [ref=e72]: اندیشکده فولاد آینده - - generic [ref=e74]: The Steel Futures Institute - - paragraph [ref=e75]: فضایی همدلانه برای اندیشیدن به فردای صنعت؛ جایی که دانش، آینده‌پژوهی و نوآوری به بینش‌هایی برای توسعه صنعتی تبدیل می‌شوند. - - generic [ref=e76]: ما را در شبکه‌های اجتماعی دنبال کنید. - - generic [ref=e77]: - - link "آپارات" [ref=e78] [cursor=pointer]: - - /url: "#" - - img [ref=e79] - - link "X" [ref=e81] [cursor=pointer]: - - /url: "#" - - img [ref=e82] - - link "لینکداین" [ref=e84] [cursor=pointer]: - - /url: "#" - - img [ref=e85] - - link "تلگرام" [ref=e87] [cursor=pointer]: - - /url: "#" - - img [ref=e88] - - navigation "پیوندهای پایین" [ref=e90]: - - link "رادار آینده" [ref=e91] [cursor=pointer]: - - /url: /radar - - text: رادار آینده - - link "آمار و داده" [ref=e93] [cursor=pointer]: - - /url: "#" - - text: آمار و داده - - link "رسانه و رویداد" [ref=e95] [cursor=pointer]: - - /url: "#" - - text: رسانه و رویداد - - link "در یک نگاه" [ref=e97] [cursor=pointer]: - - /url: /at-a-glance - - text: در یک نگاه - - link "شبکه خبرگان" [ref=e99] [cursor=pointer]: - - /url: "#" - - text: شبکه خبرگان - - link "درباره ما" [ref=e101] [cursor=pointer]: - - /url: "#" - - text: درباره ما - - generic [ref=e103]: - - generic [ref=e104]: اطلاعات تماس - - generic [ref=e105]: - - generic [ref=e106]: - - img [ref=e107] - - generic [ref=e110]: "نشانی:" - - generic [ref=e111]: اصفهان، خیابان سعادت‌آباد - - generic [ref=e112]: - - img [ref=e113] - - generic [ref=e115]: "شماره تماس:" - - generic [ref=e116]: ۰۳۱ - ۳۸۸۸۴۵۳۹ - - generic [ref=e117]: - - img [ref=e118] - - generic [ref=e121]: "پست الکترونیک:" - - generic [ref=e122]: info@steelforesight.com - - generic [ref=e123]: - - generic [ref=e125]: نشان - - generic [ref=e127]: نشان - - generic [ref=e129]: نشان - - generic [ref=e130]: - - generic [ref=e131]: عضویت در خبرنامه اندیشکده - - generic [ref=e132]: - - textbox "ایمیل خود را وارد کنید..." [ref=e133] - - button "ثبت" [ref=e134] [cursor=pointer] - - generic [ref=e136]: - - generic [ref=e137]: تمامی حقوق مادی و معنوی این وب‌سایت متعلق به شرکت فولاد مبارکه می‌باشد. - - generic [ref=e138]: طراح و پشتیبان؛ شرکت دانش‌بنیان نواندیشان آتی نگار فرتاک \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-15T06-19-38-287Z.yml b/.playwright-mcp/page-2026-06-15T06-19-38-287Z.yml deleted file mode 100644 index e584ae4..0000000 --- a/.playwright-mcp/page-2026-06-15T06-19-38-287Z.yml +++ /dev/null @@ -1,119 +0,0 @@ -- generic [ref=e3]: - - banner [ref=e4]: - - generic [ref=e6]: - - link "اندیشکده فولاد آینده The Steel Futures Institute" [ref=e7] [cursor=pointer]: - - /url: / - - img [ref=e8] - - generic [ref=e9]: - - generic [ref=e10]: اندیشکده فولاد آینده - - generic [ref=e11]: The Steel Futures Institute - - navigation "ناوبری اصلی" [ref=e12]: - - button "رادار آینده" [ref=e14] [cursor=pointer]: - - text: رادار آینده - - img [ref=e15] - - link "آمار و داده" [ref=e17] [cursor=pointer]: - - /url: /pulse - - link "در یک نگاه" [ref=e18] [cursor=pointer]: - - /url: /at-a-glance - - button "رسانه و رویداد" [ref=e20] [cursor=pointer]: - - text: رسانه و رویداد - - img [ref=e21] - - link "شبکه خبرگان" [ref=e23] [cursor=pointer]: - - /url: /experts - - button "درباره ما" [ref=e25] [cursor=pointer]: - - text: درباره ما - - img [ref=e26] - - generic [ref=e28]: - - button "جستجو" [ref=e29] [cursor=pointer]: - - img [ref=e30] - - link "ورود / ثبت‌نام" [ref=e33] [cursor=pointer]: - - /url: /login - - button "Switch to English" [ref=e34] [cursor=pointer]: 🇺🇸 - - main [ref=e35]: - - generic [ref=e37]: - - generic [ref=e38]: - - img [ref=e40] - - heading "ورود به حساب" [level=1] [ref=e43] - - generic [ref=e44]: - - generic [ref=e45]: - - generic [ref=e46]: ایمیل - - textbox "example@email.com" [ref=e47] - - generic [ref=e48]: - - generic [ref=e49]: رمز عبور - - textbox [ref=e50] - - button "ورود" [ref=e51] [cursor=pointer] - - paragraph [ref=e52]: - - text: حساب ندارید؟ - - link "ثبت‌نام کنید" [ref=e53] [cursor=pointer]: - - /url: /register - - contentinfo [ref=e54]: - - generic [ref=e55]: - - img [ref=e56] - - button "بازگشت به بالا" [ref=e58] [cursor=pointer]: - - img [ref=e59] - - generic [ref=e64]: - - generic [ref=e65]: - - img "اندیشکده فولاد آینده" [ref=e66] - - generic [ref=e69]: اندیشکده فولاد آینده - - generic [ref=e71]: The Steel Futures Institute - - paragraph [ref=e72]: فضایی همدلانه برای اندیشیدن به فردای صنعت؛ جایی که دانش، آینده‌پژوهی و نوآوری به بینش‌هایی برای توسعه صنعتی تبدیل می‌شوند. - - generic [ref=e73]: ما را در شبکه‌های اجتماعی دنبال کنید. - - generic [ref=e74]: - - link "آپارات" [ref=e75] [cursor=pointer]: - - /url: "#" - - img [ref=e76] - - link "X" [ref=e78] [cursor=pointer]: - - /url: "#" - - img [ref=e79] - - link "لینکداین" [ref=e81] [cursor=pointer]: - - /url: "#" - - img [ref=e82] - - link "تلگرام" [ref=e84] [cursor=pointer]: - - /url: "#" - - img [ref=e85] - - navigation "پیوندهای پایین" [ref=e87]: - - link "رادار آینده" [ref=e88] [cursor=pointer]: - - /url: /radar - - text: رادار آینده - - link "آمار و داده" [ref=e90] [cursor=pointer]: - - /url: "#" - - text: آمار و داده - - link "رسانه و رویداد" [ref=e92] [cursor=pointer]: - - /url: "#" - - text: رسانه و رویداد - - link "در یک نگاه" [ref=e94] [cursor=pointer]: - - /url: /at-a-glance - - text: در یک نگاه - - link "شبکه خبرگان" [ref=e96] [cursor=pointer]: - - /url: "#" - - text: شبکه خبرگان - - link "درباره ما" [ref=e98] [cursor=pointer]: - - /url: "#" - - text: درباره ما - - generic [ref=e100]: - - generic [ref=e101]: اطلاعات تماس - - generic [ref=e102]: - - generic [ref=e103]: - - img [ref=e104] - - generic [ref=e107]: "نشانی:" - - generic [ref=e108]: اصفهان، خیابان سعادت‌آباد - - generic [ref=e109]: - - img [ref=e110] - - generic [ref=e112]: "شماره تماس:" - - generic [ref=e113]: ۰۳۱ - ۳۸۸۸۴۵۳۹ - - generic [ref=e114]: - - img [ref=e115] - - generic [ref=e118]: "پست الکترونیک:" - - generic [ref=e119]: info@steelforesight.com - - generic [ref=e120]: - - generic [ref=e122]: نشان - - generic [ref=e124]: نشان - - generic [ref=e126]: نشان - - generic [ref=e127]: - - generic [ref=e128]: عضویت در خبرنامه اندیشکده - - generic [ref=e129]: - - textbox "ایمیل خود را وارد کنید..." [ref=e130] - - button "ثبت" [ref=e131] [cursor=pointer] - - generic [ref=e133]: - - generic [ref=e134]: تمامی حقوق مادی و معنوی این وب‌سایت متعلق به شرکت فولاد مبارکه می‌باشد. - - generic [ref=e135]: طراح و پشتیبان؛ شرکت دانش‌بنیان نواندیشان آتی نگار فرتاک \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-15T06-22-47-646Z.yml b/.playwright-mcp/page-2026-06-15T06-22-47-646Z.yml deleted file mode 100644 index d04c531..0000000 --- a/.playwright-mcp/page-2026-06-15T06-22-47-646Z.yml +++ /dev/null @@ -1,174 +0,0 @@ -- generic [ref=e3]: - - banner [ref=e4]: - - generic [ref=e6]: - - link "اندیشکده فولاد آینده The Steel Futures Institute" [ref=e7] [cursor=pointer]: - - /url: / - - img [ref=e8] - - generic [ref=e9]: - - generic [ref=e10]: اندیشکده فولاد آینده - - generic [ref=e11]: The Steel Futures Institute - - navigation "ناوبری اصلی" [ref=e12]: - - button "رادار آینده" [ref=e14] [cursor=pointer]: - - text: رادار آینده - - img [ref=e15] - - link "آمار و داده" [ref=e17] [cursor=pointer]: - - /url: /pulse - - link "در یک نگاه" [ref=e18] [cursor=pointer]: - - /url: /at-a-glance - - button "رسانه و رویداد" [ref=e20] [cursor=pointer]: - - text: رسانه و رویداد - - img [ref=e21] - - link "شبکه خبرگان" [ref=e23] [cursor=pointer]: - - /url: /experts - - button "درباره ما" [ref=e25] [cursor=pointer]: - - text: درباره ما - - img [ref=e26] - - generic [ref=e28]: - - button "جستجو" [ref=e29] [cursor=pointer]: - - img [ref=e30] - - link "ورود / ثبت‌نام" [ref=e33] [cursor=pointer]: - - /url: /login - - button "Switch to English" [ref=e34] [cursor=pointer]: 🇺🇸 - - main [ref=e35]: - - generic [ref=e36]: - - generic [ref=e37]: - - img [ref=e38] - - img - - link "اندیشکده فولاد آینده The Steel Futures Institute" [ref=e41] [cursor=pointer]: - - /url: / - - generic [ref=e42]: - - generic [ref=e43]: اندیشکده فولاد آینده - - generic [ref=e44]: The Steel Futures Institute - - generic [ref=e45]: - - generic [ref=e46]: عضویت رایگان - - heading "عضو اندیشکده شوید و به تحلیل‌ها دسترسی داشته باشید" [level=1] [ref=e47]: - - text: عضو اندیشکده شوید - - text: و به تحلیل‌ها دسترسی داشته باشید - - paragraph [ref=e48]: گزارش‌های بازار، رصد فناوری، و تحلیل ژئوپلیتیک — همه در یک پلتفرم - - generic [ref=e50]: - - generic [ref=e51]: - - img [ref=e53] - - text: دسترسی به گزارش‌های تخصصی - - generic [ref=e55]: - - img [ref=e57] - - text: رصد بازار و قیمت‌ها - - generic [ref=e59]: - - img [ref=e61] - - text: شبکه خبرگان صنعت - - generic [ref=e64]: - - generic [ref=e65]: - - button "ورود" [ref=e66] [cursor=pointer] - - button "ثبت‌نام" [ref=e67] [cursor=pointer] - - generic [ref=e68]: - - generic [ref=e69]: - - heading "ثبت‌نام" [level=2] [ref=e70] - - paragraph [ref=e71]: یک حساب کاربری جدید بسازید - - generic [ref=e72]: - - generic [ref=e73]: نام و نام خانوادگی - - generic [ref=e74]: - - textbox "علی محمدی" [ref=e75] - - generic: - - img - - generic [ref=e76]: - - generic [ref=e77]: ایمیل - - generic [ref=e78]: - - textbox "example@email.com" [ref=e79] - - generic: - - img - - generic [ref=e80]: - - generic [ref=e81]: شماره تماس* - - generic [ref=e82]: - - textbox "09123456789" [ref=e83] - - generic: - - img - - generic [ref=e84]: - - generic [ref=e85]: نام سازمان / شرکت (اختیاری) - - generic [ref=e86]: - - textbox "شرکت فولاد..." [ref=e87] - - generic: - - img - - generic [ref=e88]: - - generic [ref=e89]: رمز عبور - - generic [ref=e90]: - - textbox [ref=e91] - - generic: - - img - - button [ref=e93] [cursor=pointer]: - - img [ref=e94] - - paragraph [ref=e97]: حداقل ۶ کاراکتر - - button "ساخت حساب کاربری" [ref=e98] [cursor=pointer] - - link "بازگشت به سایت" [ref=e100] [cursor=pointer]: - - /url: / - - img [ref=e101] - - text: بازگشت به سایت - - contentinfo [ref=e103]: - - generic [ref=e104]: - - img [ref=e105] - - button "بازگشت به بالا" [ref=e107] [cursor=pointer]: - - img [ref=e108] - - generic [ref=e113]: - - generic [ref=e114]: - - img "اندیشکده فولاد آینده" [ref=e115] - - generic [ref=e118]: اندیشکده فولاد آینده - - generic [ref=e120]: The Steel Futures Institute - - paragraph [ref=e121]: فضایی همدلانه برای اندیشیدن به فردای صنعت؛ جایی که دانش، آینده‌پژوهی و نوآوری به بینش‌هایی برای توسعه صنعتی تبدیل می‌شوند. - - generic [ref=e122]: ما را در شبکه‌های اجتماعی دنبال کنید. - - generic [ref=e123]: - - link "آپارات" [ref=e124] [cursor=pointer]: - - /url: "#" - - img [ref=e125] - - link "X" [ref=e127] [cursor=pointer]: - - /url: "#" - - img [ref=e128] - - link "لینکداین" [ref=e130] [cursor=pointer]: - - /url: "#" - - img [ref=e131] - - link "تلگرام" [ref=e133] [cursor=pointer]: - - /url: "#" - - img [ref=e134] - - navigation "پیوندهای پایین" [ref=e136]: - - link "رادار آینده" [ref=e137] [cursor=pointer]: - - /url: /radar - - text: رادار آینده - - link "آمار و داده" [ref=e139] [cursor=pointer]: - - /url: "#" - - text: آمار و داده - - link "رسانه و رویداد" [ref=e141] [cursor=pointer]: - - /url: "#" - - text: رسانه و رویداد - - link "در یک نگاه" [ref=e143] [cursor=pointer]: - - /url: /at-a-glance - - text: در یک نگاه - - link "شبکه خبرگان" [ref=e145] [cursor=pointer]: - - /url: "#" - - text: شبکه خبرگان - - link "درباره ما" [ref=e147] [cursor=pointer]: - - /url: "#" - - text: درباره ما - - generic [ref=e149]: - - generic [ref=e150]: اطلاعات تماس - - generic [ref=e151]: - - generic [ref=e152]: - - img [ref=e153] - - generic [ref=e156]: "نشانی:" - - generic [ref=e157]: اصفهان، خیابان سعادت‌آباد - - generic [ref=e158]: - - img [ref=e159] - - generic [ref=e161]: "شماره تماس:" - - generic [ref=e162]: ۰۳۱ - ۳۸۸۸۴۵۳۹ - - generic [ref=e163]: - - img [ref=e164] - - generic [ref=e167]: "پست الکترونیک:" - - generic [ref=e168]: info@steelforesight.com - - generic [ref=e169]: - - generic [ref=e171]: نشان - - generic [ref=e173]: نشان - - generic [ref=e175]: نشان - - generic [ref=e176]: - - generic [ref=e177]: عضویت در خبرنامه اندیشکده - - generic [ref=e178]: - - textbox "ایمیل خود را وارد کنید..." [ref=e179] - - button "ثبت" [ref=e180] [cursor=pointer] - - generic [ref=e182]: - - generic [ref=e183]: تمامی حقوق مادی و معنوی این وب‌سایت متعلق به شرکت فولاد مبارکه می‌باشد. - - generic [ref=e184]: طراح و پشتیبان؛ شرکت دانش‌بنیان نواندیشان آتی نگار فرتاک \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-15T06-22-53-335Z.png b/.playwright-mcp/page-2026-06-15T06-22-53-335Z.png deleted file mode 100644 index 6018ca9..0000000 Binary files a/.playwright-mcp/page-2026-06-15T06-22-53-335Z.png and /dev/null differ diff --git a/.playwright-mcp/page-2026-06-15T06-24-00-379Z.png b/.playwright-mcp/page-2026-06-15T06-24-00-379Z.png deleted file mode 100644 index 9d15d98..0000000 Binary files a/.playwright-mcp/page-2026-06-15T06-24-00-379Z.png and /dev/null differ diff --git a/.playwright-mcp/page-2026-06-15T06-25-16-228Z.yml b/.playwright-mcp/page-2026-06-15T06-25-16-228Z.yml deleted file mode 100644 index 96662eb..0000000 --- a/.playwright-mcp/page-2026-06-15T06-25-16-228Z.yml +++ /dev/null @@ -1,135 +0,0 @@ -- generic [ref=e3]: - - banner [ref=e4]: - - generic [ref=e6]: - - link "اندیشکده فولاد آینده" [ref=e7] [cursor=pointer]: - - /url: / - - img [ref=e8] - - generic [ref=e10]: اندیشکده فولاد آینده - - generic [ref=e11]: - - button "جستجو" [ref=e12] [cursor=pointer]: - - img [ref=e13] - - button "باز کردن منو" [ref=e16] [cursor=pointer]: - - img [ref=e17] - - main: - - generic [ref=e19]: - - generic [ref=e20]: - - link "اندیشکده فولاد آینده" [ref=e21] [cursor=pointer]: - - /url: / - - generic [ref=e22]: اندیشکده فولاد آینده - - link "بازگشت" [ref=e23] [cursor=pointer]: - - /url: / - - img [ref=e24] - - text: بازگشت - - generic [ref=e26]: - - generic [ref=e27]: - - button "ورود" [ref=e28] [cursor=pointer] - - button "ثبت‌نام" [ref=e29] [cursor=pointer] - - generic [ref=e30]: - - generic [ref=e31]: - - heading "ثبت‌نام" [level=2] [ref=e32] - - paragraph [ref=e33]: یک حساب کاربری جدید بسازید - - generic [ref=e34]: - - generic [ref=e35]: نام و نام خانوادگی - - generic [ref=e36]: - - textbox "علی محمدی" [ref=e37] - - generic: - - img - - generic [ref=e38]: - - generic [ref=e39]: ایمیل - - generic [ref=e40]: - - textbox "example@email.com" [ref=e41] - - generic: - - img - - generic [ref=e42]: - - generic [ref=e43]: شماره تماس* - - generic [ref=e44]: - - textbox "09123456789" [ref=e45] - - generic: - - img - - generic [ref=e46]: - - generic [ref=e47]: نام سازمان / شرکت (اختیاری) - - generic [ref=e48]: - - textbox "شرکت فولاد..." [ref=e49] - - generic: - - img - - generic [ref=e50]: - - generic [ref=e51]: رمز عبور - - generic [ref=e52]: - - textbox [ref=e53] - - generic: - - img - - button [ref=e55] [cursor=pointer]: - - img [ref=e56] - - paragraph [ref=e59]: حداقل ۶ کاراکتر - - button "ساخت حساب کاربری" [ref=e60] [cursor=pointer] - - contentinfo [ref=e61]: - - generic [ref=e62]: - - img [ref=e63] - - button "بازگشت به بالا" [ref=e65] [cursor=pointer]: - - img [ref=e66] - - generic [ref=e71]: - - generic [ref=e72]: - - img "اندیشکده فولاد آینده" [ref=e73] - - generic [ref=e76]: اندیشکده فولاد آینده - - generic [ref=e78]: The Steel Futures Institute - - paragraph [ref=e79]: فضایی همدلانه برای اندیشیدن به فردای صنعت؛ جایی که دانش، آینده‌پژوهی و نوآوری به بینش‌هایی برای توسعه صنعتی تبدیل می‌شوند. - - generic [ref=e80]: ما را در شبکه‌های اجتماعی دنبال کنید. - - generic [ref=e81]: - - link "آپارات" [ref=e82] [cursor=pointer]: - - /url: "#" - - img [ref=e83] - - link "X" [ref=e85] [cursor=pointer]: - - /url: "#" - - img [ref=e86] - - link "لینکداین" [ref=e88] [cursor=pointer]: - - /url: "#" - - img [ref=e89] - - link "تلگرام" [ref=e91] [cursor=pointer]: - - /url: "#" - - img [ref=e92] - - navigation "پیوندهای پایین" [ref=e94]: - - link "رادار آینده" [ref=e95] [cursor=pointer]: - - /url: /radar - - text: رادار آینده - - link "آمار و داده" [ref=e97] [cursor=pointer]: - - /url: "#" - - text: آمار و داده - - link "رسانه و رویداد" [ref=e99] [cursor=pointer]: - - /url: "#" - - text: رسانه و رویداد - - link "در یک نگاه" [ref=e101] [cursor=pointer]: - - /url: /at-a-glance - - text: در یک نگاه - - link "شبکه خبرگان" [ref=e103] [cursor=pointer]: - - /url: "#" - - text: شبکه خبرگان - - link "درباره ما" [ref=e105] [cursor=pointer]: - - /url: "#" - - text: درباره ما - - generic [ref=e107]: - - generic [ref=e108]: اطلاعات تماس - - generic [ref=e109]: - - generic [ref=e110]: - - img [ref=e111] - - generic [ref=e114]: "نشانی:" - - generic [ref=e115]: اصفهان، خیابان سعادت‌آباد - - generic [ref=e116]: - - img [ref=e117] - - generic [ref=e119]: "شماره تماس:" - - generic [ref=e120]: ۰۳۱ - ۳۸۸۸۴۵۳۹ - - generic [ref=e121]: - - img [ref=e122] - - generic [ref=e125]: "پست الکترونیک:" - - generic [ref=e126]: info@steelforesight.com - - generic [ref=e127]: - - generic [ref=e129]: نشان - - generic [ref=e131]: نشان - - generic [ref=e133]: نشان - - generic [ref=e134]: - - generic [ref=e135]: عضویت در خبرنامه اندیشکده - - generic [ref=e136]: - - textbox "ایمیل خود را وارد کنید..." [ref=e137] - - button "ثبت" [ref=e138] [cursor=pointer] - - generic [ref=e140]: - - generic [ref=e141]: تمامی حقوق مادی و معنوی این وب‌سایت متعلق به شرکت فولاد مبارکه می‌باشد. - - generic [ref=e142]: طراح و پشتیبان؛ شرکت دانش‌بنیان نواندیشان آتی نگار فرتاک \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-15T06-25-23-244Z.png b/.playwright-mcp/page-2026-06-15T06-25-23-244Z.png deleted file mode 100644 index 6105917..0000000 Binary files a/.playwright-mcp/page-2026-06-15T06-25-23-244Z.png and /dev/null differ diff --git a/.playwright-mcp/page-2026-06-15T06-25-43-852Z.png b/.playwright-mcp/page-2026-06-15T06-25-43-852Z.png deleted file mode 100644 index 9850bdc..0000000 Binary files a/.playwright-mcp/page-2026-06-15T06-25-43-852Z.png and /dev/null differ diff --git a/.playwright-mcp/page-2026-06-15T08-21-48-656Z.yml b/.playwright-mcp/page-2026-06-15T08-21-48-656Z.yml deleted file mode 100644 index 49a267e..0000000 --- a/.playwright-mcp/page-2026-06-15T08-21-48-656Z.yml +++ /dev/null @@ -1,10 +0,0 @@ -- generic [ref=e4]: - - img [ref=e5]: - - generic: - - generic: "403" - - generic [ref=e11]: شما به این محتوا دسترسی ندارید! - - link [ref=e12] [cursor=pointer]: - - /url: https://www.aspaco.org - - img [ref=e13] - - link "تماس با پشتیبان" [ref=e15] [cursor=pointer]: - - /url: https://www.aspaco.org/?_=/fa#contact \ No newline at end of file diff --git a/.playwright-mcp/page-2026-06-17T09-01-35-435Z.yml b/.playwright-mcp/page-2026-06-17T09-01-35-435Z.yml deleted file mode 100644 index 70a42a4..0000000 --- a/.playwright-mcp/page-2026-06-17T09-01-35-435Z.yml +++ /dev/null @@ -1,14 +0,0 @@ -- iframe [ref=e2]: - - generic [active] [ref=f3e1]: - - generic [ref=f3e5]: "502" - - generic [ref=f3e6]: - - list [ref=f3e7]: - - listitem [ref=f3e8]: شاید پورتی که برنامه‌ی شما به آن listen می‌کند را اشتباه وارد کرده‌اید. - - listitem [ref=f3e9]: لازم است که برنامه‌ی شما حتما روی آدرس 0.0.0.0 اجرا شود. - - listitem [ref=f3e10]: از صفحه‌ی برنامک‌ها، وضعیت آخرین استقرار خود را بررسی کنید. - - listitem [ref=f3e11]: و یا ممکن است هیچ مشکلی وجود نداشته باشد و صرفا باید کمی صبر کنید تا سرویس‌تان آماده شود. - - link "مشاهده‌ی لاگ‌ها" [ref=f3e13] [cursor=pointer]: - - /url: https://console.liara.ir/apps - - contentinfo [ref=f3e14]: - - link [ref=f3e15] [cursor=pointer]: - - /url: https://liara.ir \ No newline at end of file diff --git a/.playwright-mcp/radar-lower.png b/.playwright-mcp/radar-lower.png deleted file mode 100644 index 2c473ba..0000000 Binary files a/.playwright-mcp/radar-lower.png and /dev/null differ diff --git a/Dockerfile b/Dockerfile index 035ac0f..9328a4b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,11 @@ WORKDIR /app # --legacy-peer-deps avoids ERESOLVE failures on bleeding-edge peer ranges # (React 19 / Vite 8 / TS 6 / ESLint 10). COPY package.json package-lock.json ./ -RUN npm ci --no-audit --no-fund --legacy-peer-deps +# The Liara build env has flaky access to registry.npmjs.org (EAI_AGAIN / dropped +# sockets → npm's "Exit handler never called!"). Use Liara's npm mirror, which is +# reliable from inside Iran, and lower --maxsockets to reduce the peak load. +RUN npm config set registry https://package-mirror.liara.ir/repository/npm/ \ + && npm ci --no-audit --no-fund --legacy-peer-deps --maxsockets 2 # Build the static bundle. # VITE_PANEL_API is inlined into the bundle at build time (Vite reads it during diff --git a/README_FA.md b/README_FA.md new file mode 100644 index 0000000..914d8d7 --- /dev/null +++ b/README_FA.md @@ -0,0 +1,249 @@ +# راهنمای جامع پروژه اندیشکده فولاد آینده (Andishkade Foolad) + +این سند راهنمای فنی و معماری پروژه **اندیشکده فولاد آینده** است که شامل جزئیات ساختار فرانت‌اند، پنل مدیریت بک‌اند، پایگاه داده، پشته فناوری‌ها و نحوه راه‌اندازی و توسعه پروژه می‌باشد. + +--- + +## فهرست مطالب +- [۱. ساختار کلی پروژه](#۱-ساختار-کلی-پروژه) +- [۲. فرانت‌اند (Frontend)](#۲-فرانت‌اند-frontend) + - [پشته فناوری فرانت‌اند](#پشته-فناوری-فرانت‌اند) + - [ویژگی‌ها و قابلیت‌های بصری فرانت‌اند](#ویژگی‌ها-و-قابلیت‌های-بصری-فرانت‌اند) + - [دستورات بخش فرانت‌اند](#دستورات-بخش-فرانت‌اند) +- [۳. پنل مدیریت (Backend / Admin Panel)](#۳-پنل-مدیریت-backend--admin-panel) + - [پشته فناوری بک‌اند](#پشته-فناوری-بک‌اند) + - [ساختار و معماری پایگاه داده](#ساختار-و-معماری-پایگاه-داده) + - [سرویس‌های ویژه پنل مدیریت](#سرویس‌های-ویژه-پنل-مدیریت) + - [دستورات بخش پنل مدیریت](#دستورات-بخش-پنل-مدیریت) + - [لیست APIهای پنل مدیریت](#لیست-apiهای-پنل-مدیریت) +- [۴. نحوه اتصال فرانت‌اند به پنل مدیریت (Wiring)](#۴-نحوه-اتصال-فرانت‌اند-به-پنل-مدیریت-wiring) +- [۵. استقرار و دگرگونی‌ها (Deployment)](#۵-استقرار-و-دگرگونی‌ها-deployment) + +--- + +## ۱. ساختار کلی پروژه + +پروژه به صورت یک ساختار تک‌مخزنی (Monorepo) طراحی شده است که شامل دو اپلیکیشن مستقل و بدون وابستگی اشتراکی در زمان ساخت (Build) است: + +1. **فرانت‌اند (Frontend - ریشه پروژه)**: یک وب‌سایت بازاریابی و محتوایی تعاملی، مدرن و با اولویت زبان فارسی (Persian-first) و دو زبانه (فارسی / انگلیسی) که با React 19 و Vite توسعه یافته است. +2. **پنل مدیریت (Admin Panel - پوشه `panel/`)**: یک وب‌اپلیکیشن مستقل SPA با معماری Node.js/Express و پایگاه داده PostgreSQL که محتوای پویا وب‌سایت را مدیریت می‌کند. + +``` +andishkade-foolad/ +├── panel/ # پروژه بک‌اند و پنل مدیریت +│ ├── public/ # فایل‌های استاتیک و رابط کاربری پنل (Vanilla JS) +│ ├── uploads/ # فایل‌های آپلود شده محلی (در صورت عدم استفاده از S3) +│ ├── server.js # سرور اصلی Express +│ ├── db.js # پیکربندی پایگاه داده PostgreSQL و کوئری‌ها +│ └── package.json # وابستگی‌های بک‌اند +├── src/ # کدهای منبع فرانت‌اند (React 19) +│ ├── app/ # مسیریابی و قالب اصلی (Layout) +│ ├── components/ # کامپوننت‌های اشتراکی و UI +│ ├── context/ # کانتکست‌های ری‌اکت (مانند زبان سیستم) +│ ├── data/ # داده‌های اولیه و ماک (Mock Data) +│ └── pages/ # صفحات مختلف وب‌سایت +├── package.json # وابستگی‌های فرانت‌اند +├── Dockerfile # داکرفایل اجرای فرانت‌اند به عنوان سرور استاتیک Nginx +└── docker-compose.yml # تنظیمات داکر کامپوز برای اجرای لوکال فرانت‌اند +``` + +--- + +## ۲. فرانت‌اند (Frontend) + +بخش کاربری وب‌سایت اندیشکده فولاد آینده یک پورتال محتوایی بسیار پیشرفته و پویا با انیمیشن‌های غنی است. + +### پشته فناوری فرانت‌اند + +* **هسته اصلی:** React 19 همراه با TypeScript برای ایمنی کدها و مدل‌سازی داده‌ها. +* **سیستم بیلد:** Vite جهت بارگذاری سریع در زمان توسعه (HMR) و خروجی بهینه در زمان پروداکشن. +* **استایل‌دهی:** Tailwind CSS v4 (با پیکربندی جدید مبتنی بر پلاگین Vite) به همراه متغیرهای سفارشی CSS در `src/index.css` برای رنگ‌بندی سازمانی طلایی (`#CD9E53`) و سورمه‌ای (`#032340`). +* **مسیریابی:** React Router DOM v7 با استفاده از ساختار شیءگرا (`createBrowserRouter`). +* **انیمیشن‌ها و اسکرول:** + * **GSAP (GreenSock) & ScrollTrigger:** برای پیاده‌سازی انیمیشن‌های پیچیده مبتنی بر اسکرول (مانند بخش Hero تعاملی). + * **Lenis Smooth Scroll:** موتور اسکرول بسیار نرم هماهنگ شده با تیکر GSAP (مخصوص دسکتاپ). + * **Framer Motion:** برای انیمیشن‌های خرد (Micro-animations)، پاپ‌آپ‌ها و ترنزیشن کامپوننت‌ها. +* **کامپوننت‌های سه‌بعدی:** + * **Three.js & React Three Fiber (R3F):** برای رندر کردن اشیاء سه‌بعدی در وب. + * **Three Globe & Cobe:** جهت نمایش کره زمین سه‌بعدی تعاملی و زیبا در بخش ژئوپلیتیک و ارتباطات بین‌الملل. +* **نمودارها:** React ApexCharts جهت نمایش نوسانات بازار فولاد و قیمت‌ها. +* **مدیریت وضعیت:** Zustand جهت مدیریت وضعیت‌های سراسری وب‌سایت. + +### ویژگی‌ها و قابلیت‌های بصری فرانت‌اند + +1. **بومی‌سازی و پشتیبانی دو زبانه (Localization):** + * پیاده‌سازی شده با استفاده از `useLang()` در `src/context/LangContext`. + * تغییر خودکار چیدمان صفحه به RTL برای زبان فارسی و LTR برای زبان انگلیسی با هدایت ویژگی `dir`. + * ترجمه درون‌برنامه‌ای کامپوننت‌ها با ساختار دیکشنری‌های محلی درون هر ماژول. +2. **تقویم رویدادهای جلالی بومی (`EventCalendar.tsx`):** + * طراحی شده به صورت کاملاً اختصاصی و بدون استفاده از کتابخانه‌های سنگین خارجی. + * استفاده از موتور بومی مرورگر با متد `Intl.DateTimeFormat('en-US-u-ca-persian')` برای ساخت گرید روزها و ماه‌های هجری شمسی. +3. **مدیریت عملکرد و اسکرول:** + * غیرفعال‌سازی Lenis در مرورگرهای موبایل و تبلت جهت جلوگیری از لگ یا تاخیر لمسی و سپردن اسکرول به سیستم‌عامل بومی دستگاه. + * بهینه‌سازی تصاویر با فرمت مدرن WebP. + +### دستورات بخش فرانت‌اند + +این دستورات را در پوشه ریشه (Root) پروژه اجرا کنید: + +```bash +# نصب پکیج‌ها +npm install + +# اجرای سرور توسعه محلی ری‌اکت +npm run dev + +# بررسی خطاهای تایپ‌اسکریپت (سریع‌ترین ابزار اعتبارسنجی لوپ توسعه) +npx tsc -b --noEmit + +# بررسی و رفع کدهای غیراستاندارد با ESLint +npm run lint + +# ایجاد پکیج خروجی نهایی (Production Build) +npm run build + +# پیش‌نمایش نسخه نهایی بیلد شده روی سیستم محلی +npm run preview +``` + +--- + +## ۳. پنل مدیریت (Backend / Admin Panel) + +پنل مدیریت در پوشه `panel/` قرار دارد و وظیفه ذخیره‌سازی داده‌های ساختاریافته وب‌سایت و مدیریت کاربران ادمین را بر عهده دارد. + +### پشته فناوری بک‌اند + +* **فریم‌ورک سرور:** Express.js 4 مبتنی بر Node.js (نسخه ۲۰ به بالا). +* **پایگاه داده:** PostgreSQL (سیستم میزبانی ابری لیارا) به همراه ماژول `pg`. برای تسهیل مهاجرت از SQLite قبلی، یک نمای هماهنگ شبیه به متدهای `better-sqlite3` در فایل `db.js` ایجاد شده است. +* **امنیت و احراز هویت:** + * `bcryptjs` برای رمزنگاری امن گذرواژه‌ها. + * `jsonwebtoken` (JWT) برای احراز هویت کاربران ادمین و اعضا. کوکی‌های امن با ویژگی‌های `HttpOnly` و `Secure/SameSite` به مرورگر فرستاده می‌شوند تا از حملات XSS جلوگیری شود. + * `helmet` جهت اضافه کردن هدرهای امنیتی HTTP. + * `express-rate-limit` برای محدود کردن تعداد درخواست‌ها به اندپوینت‌های حساس نظیر فرم ورود و فرم تماس با ما. +* **پردازش تصاویر و فایل‌ها:** + * `multer` برای مدیریت آپلود فایل‌های چندرسانه‌ای به صورت بافر حافظه. + * `sharp` جهت پردازش خودکار تصاویر آپلود شده (فشرده‌سازی داینامیک، چرخش صحیح بر اساس EXIF، ریسایز تا سقف ۲۰۰۰ پیکسل و خروجی با فرمت فوق‌العاده بهینه WebP). + * `pdf-parse` برای خواندن و استخراج متون داخل اسناد PDF گزارش‌ها جهت تحلیل توسط هوش مصنوعی. +* **ذخیره‌سازی فایل (Storage):** + * پشتیبانی از پروتکل **S3-compatible Object Storage** (مانند فضای ذخیره‌سازی ابری لیارا). در صورت تنظیم متغیرهای محیطی S3، فایل‌ها مستقیماً آپلود شده و آدرس مستقیم CDN دریافت می‌شود. در غیر این صورت، پروژه به صورت خودکار به حالت آپلود روی دیسک محلی (`panel/uploads/`) تغییر مسیر می‌دهد. +* **یکپارچه‌سازی هوش مصنوعی (AI Integration):** + * استفاده از SDKهای رسمی **OpenAI** و **Anthropic (Claude)** برای ایجاد خلاصه‌ها، استخراج داده‌های کلیدی از اسناد آپلود شده و کمک به آماده‌سازی مطالب برای ادمین. + +### ساختار و معماری پایگاه داده + +پایگاه داده در زمان استارت آپ اپلیکیشن به صورت خودکار با جداول زیر مقداردهی اولیه (ایجاد ایندکس‌ها و جداول در صورت عدم وجود) می‌شود: + +1. **`users`**: ذخیره ادمین‌ها با نقش‌های `admin` یا `owner` (صاحب پنل که دسترسی ویرایش سایر ادمین‌ها را دارد). +2. **`articles`**: مقالات و گزارش‌های تحلیلی. شامل فیلدهای عنوان، دسته‌بندی، نویسنده، مشخصات صفحات، قیمت، تگ‌ها و متن اصلی. +3. **`risk_signals`**: سیگنال‌های ریسک ژئوپلیتیک و صنعتی با سطوح بحرانی متفاوت (`critical`, `high`, `medium`, `low`, `opportunity`). +4. **`events`**: رویدادهای تقویم اندیشکده (سمینارها، همایش‌ها، نمایشگاه‌ها). +5. **`team_members`**: اعضای تیم پژوهشی، تخصص‌ها، راه‌های ارتباطی و شمارش گزارش‌های منتشر شده. +6. **`radar_items`**: گزارش‌های رادار بازار در ۵ دسته‌بندی اصلی: بازار (Market)، فناوری (Tech)، کالا (Commodity)، ژئوپلیتیک (Geo) و انرژی (Energy). +7. **`prices`**: قیمت‌های ثبت شده و شاخص‌های مرتبط. +8. **`members` & `purchases`**: مدیریت خرید اعضا و دسترسی به فایل‌های گزارشات غیر رایگان. + +### سرویس‌های ویژه پنل مدیریت + +* **واردکننده خودکار داده (Import API):** + امکان وارد کردن فایل‌های JSON تولید شده توسط هوش مصنوعی Gemini که شامل خلاصه‌سازی‌ها، تگ‌ها و آیتم‌های رادار است با قابلیت پاک‌سازی خودکار کاراکترهای اضافی ارجاع دهی هوش مصنوعی (`[cite: ...]`). +* **مبدل خودکار تصاویر به WebP:** + تبدیل و بهینه‌سازی حجم تصاویر آپلود شده به صورت بی‌درنگ جهت بهبود سرعت لود کلاینت. + +### دستورات بخش پنل مدیریت + +ابتدا به پوشه پنل بروید: `cd panel` + +```bash +# نصب وابستگی‌های بک‌اند +npm install + +# ساخت حساب کاربری ادمین اولیه با استفاده از مقادیر .env +npm run seed + +# اجرای سرور در حالت پروداکشن +npm start + +# اجرای سرور در حالت توسعه با قابلیت راه‌اندازی مجدد خودکار هنگام تغییر کدها (Watch mode) +npm run dev + +# بازسازی ماژول پایگاه داده در صورت تغییر نسخه Node.js سیستم +npm rebuild better-sqlite3 +``` + +### لیست APIهای پنل مدیریت + +تمامی متدهای ویرایشی (POST/PUT/DELETE) نیازمند ارسال توکن JWT در کوکی مرورگر یا هدر درخواست (`Authorization: Bearer `) هستند. + +| متد | مسیر | نیاز به احراز هویت | توضیحات | +| :--- | :--- | :--- | :--- | +| **POST** | `/api/auth/login` | خیر | ورود ادمین و ثبت کوکی نشست امن | +| **POST** | `/api/auth/logout` | خیر | خروج از حساب کاربری و پاک کردن کوکی | +| **GET** | `/api/auth/me` | بله | دریافت مشخصات کاربر جاری | +| **GET** | `/api/articles` | خیر | لیست مقالات و گزارش‌ها (دارای فیلتر دسته‌بندی و نوع) | +| **POST** | `/api/articles` | بله (ادمین) | ایجاد مقاله جدید | +| **PUT** | `/api/articles/:id` | بله (ادمین) | ویرایش مقاله موجود | +| **DELETE** | `/api/articles/:id` | بله (ادمین) | حذف مقاله | +| **POST** | `/api/uploads` | bله (ادمین) | آپلود تصویر و تبدیل خودکار به WebP بهینه | +| **POST** | `/api/uploads/raw` | بله (ادمین) | آپلود ویدیو و اسناد PDF به فضای ابری S3 | +| **GET** | `/api/events` | خیر | لیست کل رویدادهای تقویم | +| **GET** | `/api/radar` | خیر | لیست تحلیل‌های رادار بازار | +| **POST** | `/api/admin/import` | بله (ادمین) | ایمپورت مستقیم داده‌های تحلیلی هوش مصنوعی | +| **GET** | `/api/health` | خیر | بررسی سلامت سرور | + +--- + +## ۴. نحوه اتصال فرانت‌اند به پنل مدیریت (Wiring) + +در حال حاضر بخش زیادی از اطلاعات فرانت‌اند به صورت ایستا (Static / Mock Data) از پوشه `src/data/` یا `src/content/` لود می‌شود تا فرانت‌بخش بدون وابستگی به سرور قابل نمایش باشد. + +برای داینامیک کردن داده‌ها و اتصال فرانت‌اند به پنل مدیریت مراحل زیر پیشنهاد می‌شود: + +1. در ریشه پروژه، متغیر محیطی آدرس بک‌اند را در فایل `.env.local` تعریف کنید: + ```env + VITE_PANEL_API=http://localhost:3001 + ``` +2. یک سرویس کلاینت (مثلا `src/lib/api.ts`) برای واکشی داده‌ها بسازید: + ```typescript + const API_URL = import.meta.env.VITE_PANEL_API || 'http://localhost:3001'; + + export async function getArticles(category?: string) { + const url = category ? `${API_URL}/api/articles?category=${encodeURIComponent(category)}` : `${API_URL}/api/articles`; + const res = await fetch(url); + if (!res.ok) throw new Error('خطا در دریافت اطلاعات از سرور'); + return res.json(); + } + ``` +3. در کامپوننت‌های فرانت‌اند (مانند بخش نمایش گزارش‌های صفحه اصلی)، از React Query (که پکیج آن در پروژه نصب است) یا هوک `useEffect` برای دریافت پویای داده‌ها به شکل زیر استفاده کنید: + ```typescript + import { useQuery } from '@tanstack/react-query'; + import { getArticles } from '@/lib/api'; + + // در داخل کامپوننت ری‌اکت + const { data: reports, isLoading } = useQuery({ + queryKey: ['articles', category], + queryFn: () => getArticles(category), + placeholderData: fallbackMockData // استفاده از داده‌های ماک قبلی در زمان لودینگ یا خطا + }); + ``` + +--- + +## ۵. استقرار و دگرگونی‌ها (Deployment) + +### فرانت‌اند +فرانت‌اند پروژه به دلیل ایستا (Static) بودن خروجی نهایی، به راحتی به کمک **Dockerfile** موجود استقرار می‌یابد. +* داکرفایل از ساختار دو مرحله‌ای (Multi-stage build) استفاده می‌کند: + 1. مرحله اول: استفاده از ایمیج Node جهت نصب پکیج‌ها و ایجاد خروجی نهایی بیلد در پوشه `dist`. + 2. مرحله دوم: استفاده از سرور بسیار سبک Nginx جهت کپی و سرو کردن فایل‌های پوشه `dist` روی پورت `7860`. +* این پورت برای آپلود مستقیم در پلتفرم‌هایی مانند **Hugging Face Spaces** بهینه شده است (تنظیمات متا دیتا در بالای فایل `README.md` ریشه قید شده است). + +### پنل مدیریت (بک‌اند) +* پنل مدیریت به پایگاه داده و در صورت تمایل سیستم فایل نیاز دارد. +* برای دیپلوی روی **لیارا (Liara)**، فایل‌های کانفیگ نظیر `liara.json` و فایل نادیده‌گیری `.liaraignore` تعبیه شده‌اند. +* حتما باید متغیرهای محیطی زیر در کنترل پنل هاست تعریف شوند: + * `PORT`: پورت سرور (به عنوان مثال ۳۰۰۱). + * `JWT_SECRET`: یک رشته هگزادسیمل تصادفی طولانی (حداقل ۳۲ کاراکتر). + * `DATABASE_URL`: آدرس اتصال به پایگاه داده PostgreSQL ابری شما. + * `ALLOWED_ORIGINS`: آدرس دامنه فرانت‌اند جهت عبور از گیت CORS. + * متغیرهای سرویس فایل ابری در صورت نیاز (`LIARA_ENDPOINT`, `LIARA_BUCKET`, `LIARA_ACCESS_KEY`, `LIARA_SECRET_KEY`). diff --git a/fig-profile.png b/fig-profile.png new file mode 100644 index 0000000..97bda40 Binary files /dev/null and b/fig-profile.png differ diff --git a/hero-bg.original.mp4 b/hero-bg.original.mp4 new file mode 100644 index 0000000..f90c69a --- /dev/null +++ b/hero-bg.original.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e22f4390856dd4995a930e22c5026008b333d6b5429d4201ae71d6b3a397c41 +size 43690639 diff --git a/index.html b/index.html index 8043cd7..6307580 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,11 @@ - + + + + + diff --git a/package-lock.json b/package-lock.json index 539ca1c..a65670c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,11 +8,13 @@ "name": "andishkade-foolad", "version": "0.0.0", "dependencies": { + "@radix-ui/react-slot": "^1.3.0", "@react-three/drei": "^10.7.7", "@react-three/fiber": "^9.6.1", "@tabler/icons-react": "^3.44.0", "@tanstack/react-query": "^5.100.14", "apexcharts": "^5.13.0", + "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cobe": "^2.0.1", "dotted-map": "^3.1.0", @@ -24,6 +26,7 @@ "react": "^19.2.6", "react-apexcharts": "^2.1.0", "react-dom": "^19.2.6", + "react-globe.gl": "^2.38.0", "react-router-dom": "^7.15.1", "tailwind-merge": "^3.6.0", "three": "^0.184.0", @@ -629,6 +632,39 @@ "url": "https://github.com/sponsors/Boshen" } }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.3.tgz", + "integrity": "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.0.tgz", + "integrity": "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@react-three/drei": { "version": "10.7.7", "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-10.7.7.tgz", @@ -1974,6 +2010,18 @@ ], "license": "CC-BY-4.0" }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -2163,6 +2211,15 @@ "node": ">=12" } }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/d3-time": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", @@ -2612,6 +2669,20 @@ "dev": true, "license": "ISC" }, + "node_modules/float-tooltip": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/float-tooltip/-/float-tooltip-1.7.5.tgz", + "integrity": "sha512-/kXzuDnnBqyyWyhDMH7+PfP8J/oXiAavGzcRxASOMRHFuReDtofizLLJsf7nnDLAfEaMW4pVWaXrAjtnglpEkg==", + "license": "MIT", + "dependencies": { + "d3-selection": "2 - 3", + "kapsule": "^1.16", + "preact": "10" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/frame-ticker": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/frame-ticker/-/frame-ticker-1.0.3.tgz", @@ -2699,6 +2770,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globe.gl": { + "version": "2.46.1", + "resolved": "https://registry.npmjs.org/globe.gl/-/globe.gl-2.46.1.tgz", + "integrity": "sha512-h+OvX52EBIPLtM0/2JkM+JZ9gPAhPJ4y3+hxUwD5Ey/O0Zk2ockuTiJ71bZbnNBGmNiIZzA5Vr3TMT0b3d35IQ==", + "license": "MIT", + "dependencies": { + "@tweenjs/tween.js": "18 - 25", + "accessor-fn": "1", + "kapsule": "^1.16", + "three": ">=0.179 <1", + "three-globe": "^2.45", + "three-render-objects": "^1.41" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/glsl-noise": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/glsl-noise/-/glsl-noise-0.0.0.tgz", @@ -2869,6 +2957,15 @@ "integrity": "sha512-Jl/EwY84JwjW2wsWqeU4pNd22VNQ7EkjI36bDuLw31wH98WQW4fPjD0+mG7cdCK+Y8D6s9R3zLiQ3LaKu6bD8A==", "license": "MIT" }, + "node_modules/jerrypick": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/jerrypick/-/jerrypick-1.1.2.tgz", + "integrity": "sha512-YKnxXEekXKzhpf7CLYA0A+oDP8V0OhICNCr5lv96FvSsDEmrb0GKM776JgQvHTMjr7DTTPEVv/1Ciaw0uEWzBA==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/jiti": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", @@ -3544,6 +3641,18 @@ "robust-predicates": "^3.0.2" } }, + "node_modules/polished": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", + "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/postcss": { "version": "8.5.15", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", @@ -3579,6 +3688,16 @@ "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", "license": "ISC" }, + "node_modules/preact": { + "version": "10.29.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.2.tgz", + "integrity": "sha512-7tNmwg/7mzzAoB/8kSg6Hl37JraAZw3Z3A0JSY7VXlZwo82Xn0G7wKbNNs2qoF4ZEEsQGTwDAroNdqKs1ofJxQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3667,12 +3786,44 @@ "react": "^19.2.6" } }, + "node_modules/react-globe.gl": { + "version": "2.38.0", + "resolved": "https://registry.npmjs.org/react-globe.gl/-/react-globe.gl-2.38.0.tgz", + "integrity": "sha512-NQkMy5BGD269lkdjm9BJ2PEK81++y9H82+j4/QuWVlfXPJPTVfzaxnkC3MvaiGmpus8P6czq58OfMeYvn/4Xqg==", + "license": "MIT", + "dependencies": { + "globe.gl": "^2.46", + "prop-types": "15", + "react-kapsule": "^2.5" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, + "node_modules/react-kapsule": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-kapsule/-/react-kapsule-2.6.0.tgz", + "integrity": "sha512-HzLJoYb1n1kfwjXbqFFcRR0EA6oPsJ64tNdDmCSaL/bz2o9wUZRSb0cMe//grLFeF9EVoL4CD/e6ozLyzEv+PQ==", + "license": "MIT", + "dependencies": { + "jerrypick": "^1.1.2" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": ">=16.13.1" + } + }, "node_modules/react-router": { "version": "7.15.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.15.1.tgz", @@ -3984,6 +4135,25 @@ "three": ">= 0.159.0" } }, + "node_modules/three-render-objects": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/three-render-objects/-/three-render-objects-1.42.0.tgz", + "integrity": "sha512-KYfkPrYGEbIK8ChFocWqOF1aAN80FBUBWVYB8mB2oBpVuVN+52FvvngVYB5ieFANQu7Rt21rPYZ/xKaAgVWWRQ==", + "license": "MIT", + "dependencies": { + "@tweenjs/tween.js": "18 - 25", + "accessor-fn": "1", + "float-tooltip": "^1.7", + "kapsule": "^1.16", + "polished": "4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "three": ">=0.179" + } + }, "node_modules/three-slippy-map-globe": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/three-slippy-map-globe/-/three-slippy-map-globe-1.0.6.tgz", diff --git a/package.json b/package.json index bbaccaf..4cf56c8 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,13 @@ "preview": "vite preview" }, "dependencies": { + "@radix-ui/react-slot": "^1.3.0", "@react-three/drei": "^10.7.7", "@react-three/fiber": "^9.6.1", "@tabler/icons-react": "^3.44.0", "@tanstack/react-query": "^5.100.14", "apexcharts": "^5.13.0", + "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cobe": "^2.0.1", "dotted-map": "^3.1.0", @@ -26,6 +28,7 @@ "react": "^19.2.6", "react-apexcharts": "^2.1.0", "react-dom": "^19.2.6", + "react-globe.gl": "^2.38.0", "react-router-dom": "^7.15.1", "tailwind-merge": "^3.6.0", "three": "^0.184.0", diff --git a/panel/db.js b/panel/db.js index f8abfc7..32e7598 100644 --- a/panel/db.js +++ b/panel/db.js @@ -413,6 +413,10 @@ for (const sql of [ 'ALTER TABLE banners ADD COLUMN IF NOT EXISTS overline_fa TEXT', 'ALTER TABLE banners ADD COLUMN IF NOT EXISTS overline_en TEXT', "ALTER TABLE users ADD COLUMN IF NOT EXISTS role TEXT NOT NULL DEFAULT 'admin'", + 'ALTER TABLE articles ADD COLUMN IF NOT EXISTS blocks TEXT', + 'ALTER TABLE articles ADD COLUMN IF NOT EXISTS sources TEXT', + 'ALTER TABLE radar_items ADD COLUMN IF NOT EXISTS tags TEXT', + 'ALTER TABLE radar_items ADD COLUMN IF NOT EXISTS source TEXT', ]) { await pool.query(sql); } @@ -671,6 +675,8 @@ export function rowToRadarItem(row) { excerptFa: row.excerpt_fa, bodyFa: row.body_fa || null, analysisFa: row.analysis_fa || null, + tags: row.tags ? JSON.parse(row.tags) : [], + source: row.source || null, titleEn: row.title_en, dateEn: row.date_en, excerptEn: row.excerpt_en, @@ -748,6 +754,8 @@ export function rowToArticle(row) { summary: row.summary, body: row.body, coverImage: row.cover_image, + blocks: row.blocks ? JSON.parse(row.blocks) : [], + sources: row.sources ? JSON.parse(row.sources) : [], tags: row.tags ? JSON.parse(row.tags) : [], featured: !!row.featured, createdAt: row.created_at, diff --git a/panel/public/app.js b/panel/public/app.js index f45d143..a6001b5 100644 --- a/panel/public/app.js +++ b/panel/public/app.js @@ -2,18 +2,11 @@ const $ = (sel, root = document) => root.querySelector(sel); const root = $('#app'); const TAB_GROUPS = [ - { label: 'محتوا', tabs: ['articles', 'events', 'radar', 'radarPages', 'factoryReports'] }, - { label: 'داده', tabs: ['risks', 'mprices', 'stats', 'charts', 'integrations'] }, - { label: 'سایت', tabs: ['vision', 'advisory', 'team', 'experts', 'plans', 'banners'] }, - { label: 'ابزار', tabs: ['pdfAnalyze', 'import', 'users'] }, + { label: 'محتوا', tabs: ['glance', 'radarFuture', 'media', 'events', 'banners'] }, ]; const TAB_LABELS = { - articles: 'مطالب', risks: 'ریسک‌ها', events: 'رویدادها', - radar: 'رادار', radarPages: 'صفحات رادار', factoryReports: 'گزارش کارخانه', - integrations: 'منابع داده', stats: 'آمار', mprices: 'قیمت‌ها', - charts: 'نمودارها', vision: 'چشم‌انداز', advisory: 'شورای مشورتی', - team: 'تیم', experts: 'خبرگان', plans: 'پلان‌ها', banners: 'بنرها', - pdfAnalyze: '📄 PDF', import: '⬇️ ایمپورت', users: 'کاربران', + glance: 'در یک نگاه', radarFuture: 'رادار آینده', media: 'ویدیوکست و پادکست', + events: 'رویدادها', banners: 'بنرها', }; @@ -39,14 +32,23 @@ const CONTENT_TYPES = [ { key: 'video', label: 'ویدیوکست', icon: '🎬', desc: 'ویدیوی تحلیلی یا مصاحبه', defaultType: 'video', defaultCategory: '' }, { key: 'podcast', label: 'پادکست', icon: '🎙️', desc: 'اپیزود پادکست صوتی', defaultType: 'podcast', defaultCategory: '' }, { key: 'factory', label: 'گزارش کارخانه', icon: '🏭', desc: 'گزارش تولید و عملیات کارخانه', defaultType: 'factoryReport', defaultCategory: 'گزارش کارخانه' }, - { key: 'radar', label: 'رادار آینده', icon: '🔭', desc: 'از تب «رادار» در منوی بالا مدیریت می‌شود', defaultType: '', defaultCategory: '', externalTab: 'radar' }, + { key: 'radarFuture', label: 'رادار آینده', icon: '🔭', desc: 'مقالهٔ بلوکی (متن/عکس) برای ۵ زیرمنوی رادار آینده', defaultType: 'radarfuture', defaultCategory: '' }, +]; + +// the 5 رادار آینده sub-sections (block-article categories) +const RADAR_FUTURE_CATEGORIES = [ + 'آینده‌پژوهی و رصد هوشمند', + 'پایداری و فولاد سبز', + 'ژئوپلیتیک و اقتصاد جهانی', + 'فناوری و نوآوری', + 'بازار و زنجیره فولاد', ]; function inferContentType(a) { if (!a) return 'report'; if (a.type === 'video') return 'video'; if (a.type === 'podcast') return 'podcast'; - if (a.type === 'radar') return 'radar'; + if (a.type === 'radarfuture') return 'radarFuture'; if (a.type === 'factoryReport' || a.category === 'گزارش کارخانه') return 'factory'; if (a.type === 'news') return 'news'; return 'report'; @@ -60,11 +62,11 @@ const EVENT_TYPES = [ ]; const RADAR_CATEGORIES = [ - { value: 'market', label: 'بازار' }, - { value: 'tech', label: 'فناوری' }, - { value: 'commodity', label: 'مواد اولیه' }, - { value: 'geo', label: 'ژئوپلیتیک' }, - { value: 'energy', label: 'انرژی' }, + { value: 'market', label: 'بازارهای جهانی و اقتصادِ کلان' }, + { value: 'tech', label: 'نوآوری و فناوری‌هایِ تحول‌آفرین' }, + { value: 'commodity', label: 'مواد معدنیِ حیاتی و زنجیره‌ی تامین' }, + { value: 'geo', label: 'ژئوپلیتیک و امنیتِ اقتصادی' }, + { value: 'energy', label: 'تجارت و کسب‌وکارِ بین‌الملل' }, ]; const SCROLL_DIRS = [ @@ -145,7 +147,7 @@ function renderLogin(errorMsg = '') { method: 'POST', body: { username: fd.get('username'), password: fd.get('password') }, }); - renderList(); + renderRadarList(); } catch { renderLogin('نام کاربری یا رمز عبور اشتباه است'); } @@ -178,25 +180,11 @@ function wireTabs() { document.querySelectorAll('.tabs button').forEach(btn => { btn.addEventListener('click', () => { const t = btn.dataset.tab; - if (t === 'articles') renderList(); - else if (t === 'risks') renderRisksList(); - else if (t === 'events') renderEventsList(); - else if (t === 'radar') renderRadarList(); - else if (t === 'radarPages') renderRadarPagesList(); - else if (t === 'factoryReports') renderFactoryReportsList(); - else if (t === 'integrations') renderIntegrationsList(); - else if (t === 'stats') renderStatsList(); - else if (t === 'mprices') renderMarketPricesList(); - else if (t === 'charts') renderChartPointsList(); - else if (t === 'vision') renderVisionList(); - else if (t === 'advisory') renderAdvisoryList(); - else if (t === 'team') renderTeamList(false); - else if (t === 'experts') renderTeamList(true); - else if (t === 'plans') renderPlansList(); - else if (t === 'banners') renderBannersList(); - else if (t === 'pdfAnalyze') renderPdfAnalyze(); - else if (t === 'import') renderImport(); - else if (t === 'users') renderUsersList(); + if (t === 'glance') renderRadarList(); + else if (t === 'radarFuture') renderRadarFutureList(); + else if (t === 'media') renderMediaList(); + else if (t === 'events') renderEventsList(); + else if (t === 'banners') renderBannersList(); }); }); $('#logoutBtn').addEventListener('click', async () => { @@ -287,6 +275,86 @@ async function renderList() { } } +async function renderRadarFutureList() { + root.innerHTML = ` + ${topbarHtml('radarFuture', '+ رادار آینده جدید')} +
+

رادار آینده

+

محتوای صفحات «رادار آینده» سایت (‎/radar/*‎) — مقالهٔ بلوکی به تفکیک ۵ زیرمنو.

+
+ + ${RADAR_FUTURE_CATEGORIES.map(c => ``).join('')} +
+

در حال بارگذاری…

+
`; + wireTabs(); + $('#newBtn').addEventListener('click', () => renderEditor(null, { contentType: 'radarFuture', type: 'radarfuture', category: '' })); + let allItems = [], activeCat = ''; + function renderItems() { + const filtered = activeCat ? allItems.filter(a => a.category === activeCat) : allItems; + if (!filtered.length) { $('#list').innerHTML = `

مطلبی در این بخش یافت نشد.

`; return; } + $('#list').innerHTML = filtered.map(a => ` +
+
+
+
${a.category?`${escapeHtml(a.category)}`:''}${a.publishDate?`${escapeHtml(a.publishDate)}`:''}
+

${escapeHtml(a.title)}

+

${escapeHtml(a.summary||'')}

+
+
+
`).join(''); + } + $('#cat-bar').addEventListener('click', e => { const b = e.target.closest('.cat-btn'); if (!b) return; activeCat = b.dataset.cat; document.querySelectorAll('.cat-btn').forEach(x => x.classList.toggle('active', x === b)); renderItems(); }); + $('#list').addEventListener('click', async e => { + const btn = e.target.closest('button[data-action]'); if (!btn) return; + const id = btn.closest('.row').dataset.id; + if (btn.dataset.action === 'edit') renderEditor(await api(`/api/articles/${id}`)); + else if (btn.dataset.action === 'delete') { if (!confirm('این مطلب حذف شود؟')) return; await api(`/api/articles/${id}`, { method: 'DELETE' }); renderRadarFutureList(); } + }); + try { + const all = await api('/api/articles?limit=500'); + allItems = all.filter(a => a.type === 'radarfuture'); + if (!allItems.length) { $('#list').innerHTML = `

هنوز مطلبی ثبت نشده — با «+ رادار آینده جدید» شروع کن.

`; return; } + renderItems(); + } catch (err) { $('#list').innerHTML = `

خطا در بارگذاری.

`; } +} + +async function renderMediaList() { + root.innerHTML = ` + ${topbarHtml('media', '+ ویدیوکست جدید')} +
+
+

ویدیوکست و پادکست

+ +
+

در حال بارگذاری…

+
`; + wireTabs(); + $('#newBtn').addEventListener('click', () => renderEditor(null, { contentType: 'video', type: 'video', category: '' })); + $('#newPod').addEventListener('click', () => renderEditor(null, { contentType: 'podcast', type: 'podcast', category: '' })); + $('#list').addEventListener('click', async e => { + const btn = e.target.closest('button[data-action]'); if (!btn) return; + const id = btn.closest('.row').dataset.id; + if (btn.dataset.action === 'edit') renderEditor(await api(`/api/articles/${id}`)); + else if (btn.dataset.action === 'delete') { if (!confirm('این مورد حذف شود؟')) return; await api(`/api/articles/${id}`, { method: 'DELETE' }); renderMediaList(); } + }); + try { + const all = await api('/api/articles?limit=500'); + const items = all.filter(a => a.type === 'video' || a.type === 'podcast'); + if (!items.length) { $('#list').innerHTML = `

هنوز موردی ثبت نشده.

`; return; } + $('#list').innerHTML = items.map(a => ` +
+
+
+
${a.type==='video'?'ویدیوکست':'پادکست'}${a.publishDate?`${escapeHtml(a.publishDate)}`:''}
+

${escapeHtml(a.title)}

+

${escapeHtml(a.summary||'')}

+
+
+
`).join(''); + } catch (err) { $('#list').innerHTML = `

خطا در بارگذاری.

`; } +} + function renderTypeSelector() { root.innerHTML = `
@@ -339,15 +407,23 @@ function renderEditor(article, draft = {}) { summary: '', body: '', coverImage: '', tags: [], featured: false, }; + // content blocks (interleaved text + chart/image) and citation sources + let blocks = (Array.isArray(a.blocks) && a.blocks.length) + ? a.blocks.map(b => ({ ...b })) + : (a.body ? [{ type: 'text', value: a.body }] : []); + let sources = Array.isArray(a.sources) ? a.sources.map(s => ({ ...s })) : []; + const REPORT_TYPES = TYPES.filter(t => ['quarterly','flash','special','risk','free'].includes(t.value)); - const hasCover = ['report','news','video','podcast','factory'].includes(contentType); - const hasCategory = ['report','news'].includes(contentType); + const isRadarFuture = contentType === 'radarFuture'; + const hasCover = ['report','news','video','podcast','factory','radarFuture'].includes(contentType); + const hasCategory = ['report','news','radarFuture'].includes(contentType); const hasAuthor = ['report','video','podcast'].includes(contentType); const hasPages = ['report','factory'].includes(contentType); const hasPrice = contentType === 'report'; - const hasBody = ['report','news','factory'].includes(contentType); + const hasBody = ['report','news','factory','radarFuture'].includes(contentType); const hasMediaLink = ['video','podcast'].includes(contentType); const hasReportType = contentType === 'report'; + const categoryOptions = isRadarFuture ? RADAR_FUTURE_CATEGORIES : CATEGORIES; root.innerHTML = `
@@ -370,10 +446,10 @@ function renderEditor(article, draft = {}) { ${hasCategory ? ` -