site: ui/ux refresh, seo pass, find/lists indexes, 25 new finds

- newspaper-style masthead (stats | "Unique" | About/Blog) on every page
  with per-page italic subheader + last-updated date on listing pages;
  sitewide 42rem reading width
- pinterest home (hero + masonry, "load more"); old list view at /index3/
- new pages: /about, /blog, /legal, /find/, /finds/, custom 404
- footer collection links now clickable; "founded" stat replaces "updated"
  in the masthead
- centralised SEO component with per-page json-ld (Review, BlogPosting,
  Product, Article, CollectionPage, ItemList, BreadcrumbList, etc.);
  @astrojs/sitemap + @astrojs/rss; robots.txt; promoted finds canonical
  to their review
- memoize getSiteStats() so the masthead/footer counts don't multiply
  per-page build cost
- 25 new daily-finds captures
This commit is contained in:
2026-05-03 16:58:23 -04:00
parent c184f3f50a
commit c8095d2766
54 changed files with 2337 additions and 95 deletions
+14
View File
@@ -2,6 +2,20 @@
## May 2026
- Comprehensive SEO pass: new `<SEO>` component centralising every head-level tag (canonical, Open Graph, Twitter Card, theme-color, RSS alternate, JSON-LD); page-aware structured data — `Review` + `BreadcrumbList` on review pages, `BlogPosting` on posts, `Product` + `BreadcrumbList` on finds, `Article` + `ItemList` on finds superposts, `CollectionPage` + `ItemList` on category/tag/sources/blog pages, `WebSite` + `Organization` + `ItemList` on the home page, `AboutPage` on /about
- Add `@astrojs/sitemap` (auto sitemap-index.xml excluding `/grid/`, `/index3/`, `/404/`) and `@astrojs/rss` (feed at `/rss.xml` covering reviews + posts + finds superposts); add `public/robots.txt` pointing at the sitemap
- Add custom 404 page with recent reviews + nav fallback (noindex)
- Wire promoted finds to canonical to their review (via `promotedTo`); other finds self-canonical
- Noindex `/grid/` and `/index3/` (kept linked but absent from sitemap and search)
- Per-page descriptions + OG image alt text for every page; count-bearing titles and descriptions on category/tag pages (`{category} ({n})`); hero image upgraded with real alt text, `fetchpriority="high"`, `loading="eager"`, `decoding="sync"`; static OG fallback tiers in `/public/og/` (default/reviews/finds/posts — PNGs to be supplied)
- Set `trailingSlash: 'always'` and `build.format: 'directory'` explicitly to keep canonical URLs stable
- Memoize `getSiteStats()` so per-page SEO additions don't multiply build cost
- Site-wide UI/UX refresh: newspaper-style masthead on every page (entry-count + last-updated on the left, large serif "Unique" wordmark centered between thin rules, About · Blog nav on the right), per-page italic subheader with last-updated date on listing pages, and an SEO-friendly footer with Browse / Collections / About link columns
- Home page swapped to a Pinterest-style hero + masonry grid; the plain chronological list view moves to `/index3/`
- New `/about` stub and `/blog` index (Astro page over the `posts` collection with an empty-state when no posts exist)
- Single 76rem page width across the entire site (replaces the 42rem default + `wide` prop split); article prose is constrained to a 42rem reading measure inside the wider layout so reviews/finds stay readable
- New `getSiteStats()` helper in `src/lib/entries.ts` powers the masthead counts and footer Collections column live
- Amazon affiliate handling: outbound links to `amazon.com`, `amzn.to`, `a.co`, and `smile.amazon.com` get the configured tracking ID appended at render time, are marked with `rel="sponsored noopener noreferrer"`, and display a clearly-signposted "Affiliate" badge plus a one-line FTC-style disclosure on review and find pages. Tracking IDs live in `src/lib/affiliate.ts` keyed by marketplace; non-US Amazon hostnames are recognized but left untagged until a marketplace-specific ID is added
- Restructure into a four-collection content pipeline: `find` (captured items, hidden from indexes), `finds` (editorial superposts that reference find slugs in a Pinterest-style grid), `reviews` (existing — gains optional `source` and `fromFind` fields for graduations), and `posts` (existing, generic essays)
- New routes `/find/<slug>/` (direct URL only — finds don't appear on home, tag, or category pages) and `/finds/<slug>/` (superpost detail with intro + grid)
- New components: `FindCard`, `FindsGrid`, `Backlinks`, `SourceBadge`