Make blog cards square + clickable, add fallback article detail pages

- Blog card thumbnails (homepage magazine carousel, /blog listing, and
  the "more posts" carousel) are now square instead of 16:9.
- Fallback blog cards (src/data/fallbackBlogs.ts) were previously
  plain, non-clickable divs since /blogs is still empty on this
  tenant and no real detail page existed for them. They now link to a
  real local /blog/{id}/{slug} page via getFallbackBlogById() — image
  and title are both inside the link. That page shows the real
  title/image/category we have plus a "coming soon" note instead of
  fabricating article body content.
- Homepage magazine section's fallback posts now link to their own
  detail page instead of generically to /blog.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
amirhosein.ashourloo
2026-09-06 14:55:58 +03:30
co-authored by Claude Sonnet 5
parent 4ffdf03727
commit e44fc90d96
6 changed files with 70 additions and 9 deletions
+1 -1
View File
@@ -40,7 +40,7 @@ fallbacks should update it.
| Gap | Fallback | Remove when |
|---|---|---|
| No prices | `src/lib/demoPricing.ts`, gated by `NEXT_PUBLIC_DEMO_PRICING=1` — deterministic price per product id | store-items exist |
| No blog posts | `src/data/fallbackBlogs.ts` — the real posts from moalem.shop/articles, shown on the homepage and `/blog` as non-clickable cards (no real detail page exists for them) | `/blogs` returns items |
| No blog posts | `src/data/fallbackBlogs.ts` — the real posts from moalem.shop/articles, shown on the homepage and `/blog` as square-thumbnail cards that link to a real local `/blog/{id}/{slug}` page (`getFallbackBlogById()`); that page shows title/category/image plus a "coming soon" note since only those three fields are real, no scraped body content | `/blogs` returns items |
| No category art past slot position 8 | placeholder SVGs in `public/images/categories/{id}.svg`, generated by `scripts/gen-category-placeholders.mjs` for every category at every level, not just level-2 | the `categories` slot has an image for that position |
| Wrong logo/favicon in API | `getFavicon()` is wired live (see "Brand") but the uploaded asset itself is wrong; no code fallback needed once the dashboard upload is fixed | the correct asset is uploaded |