Footer: curved top edge with scroll-to-top button
- SVG curved top notch matching the Figma (page color shows through the dip)
- Centered scroll-to-top button (ChevronsUp) with smooth scroll, gold hover
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
three-globe globe (hex polygons + arcs), navbar chevron cleanup
- Globe: real three-globe World via r3f <primitive> (no JSX augmentation),
hex-polygon countries + animated steel-trade arcs, bundled Natural Earth data
- Header: type nav Section.Icon as LucideIcon (fixes r3f JSX type clash);
remove chevron from non-dropdown items (only radar/media dropdowns keep it)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
Podcast polish: taller videocast, redesigned player + episode list
- Videocast featured height 200 -> 440px, rounded
- Podcast: full-width navy player card (cover, progress, controls) + clean
episode list with active highlight; RTL-correct prev/next + play direction
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
Home polish: brand copy, footer, section reorg, smaller reports, split casts
- Tab title -> "اندیشکده فولاد آینده"; header/footer subtitle -> The Steel Futures Institute
- Footer: brand description, social links (LinkedIn/Twitter/Aparat/Telegram), drop nav links
- Remove de-zoom HeroSection; SpreadFeatures is now the hero
- Comment out InternalNewsSection + RiskSection (restorable)
- Move IntegrationsSection under RadarTechSection
- FactoryReportsScroll: compact 4-up row instead of large masonry
- Split Videocast and Podcast into separate full-width sections (only prop)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
Security fixes:
- JWT_SECRET/ADMIN_PASSWORD fail-fast on missing/weak values
- Switch admin auth from localStorage to httpOnly cookie
- Rate limiting on login (10/15min) and contact form (3/10min)
- CORS whitelist via ALLOWED_ORIGINS env var
- Helmet with CSP, frameguard
- Escape HTML in contact email and admin panel innerHTML
- Remove SVG from upload whitelist
- err.message no longer leaked in API responses
- MAIL_TO moved to env var
- JWT expiry 7d → 24h
Navbar:
- Rename: رادار آینده → آیندهپژوهی و رصد هوشمند
- Rename: مرز فناوری → فناوری و نوآوری
- Rename: نبض صنعت → بازار و زنجیره فولاد
- Add: پایداری و فولاد سبز (/sustainability)
- Add: ژئوپلیتیک و اقتصاد جهانی (/geopolitics)
- Remove: رویدادها
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Previous rename dropped the file: public/hero-bg.mp4 was listed in
.gitignore, so the move deleted it from git without re-adding.
Remove the ignore rule and commit the video as LFS so the hero
background plays.
- Move hero-bg.mp4 to public/ so Vite serves it at /hero-bg.mp4
(was at repo root => 404 in built site, video never loaded)
- Download 20 Unsplash images to public/news/ (LFS) and rewrite all
34 refs to same-origin paths (images.unsplash.com blocked in Iran)
- Replace 2 globally-dead photo IDs with fitting industrial/tech images