5.4 KiB
5.4 KiB
Learning Feed — Reels-Style Visual Redesign
Goal
Transform the Learning Feed from a traditional card-based feed into an Instagram Reels / TikTok-style visual experience with full-bleed images and bold text overlays.
Reference Style (from D J's examples)
- Hero/Title cards: Full-bleed background image, large bold white text at bottom with dark gradient overlay, topic badge or author info subtle
- Content cards: Dark solid background (#0a0a0a), clean white serif-ish text, numbered listicle format, generous line spacing
- Carousel/pagination: Dots at bottom, slide counter badge top-right (e.g., "1/11")
- Mobile-first: Cards should feel like full-viewport-height items on phone (not literal 100vh, but tall — aspect ratio ~4:5 or 9:16)
Project Location
/home/wdjones/.openclaw/workspace/projects/learning-feed
Stack
- Next.js 16 (App Router), Tailwind CSS v4, Framer Motion, ShadCN UI, Lucide Icons, TypeScript
- SQLite via better-sqlite3 (in
serverExternalPackages) - Database at
data/learning-feed.db
Current State
- 21 posts, 1 topic (Private Pilot License), 14 posts have Unsplash image URLs
- Post types:
quick_fact,quiz,deep_dive - Feed is a vertical scroll of traditional
Cardcomponents (gray border, small image, text below) - Interactions: save, got_it, more_like_this, expand, view
What to Build
1. Redesign PostCard component (components/post-card.tsx)
For posts WITH images (image_url is not null):
- Full-width card, tall aspect ratio (min-height ~400px, or aspect-[4/5])
- Background image covers entire card (
object-cover,absolute inset-0) - Dark gradient overlay from bottom (~60% of card height,
bg-gradient-to-t from-black/90 via-black/50 to-transparent) - Title in large, bold, uppercase white text at the bottom over the gradient
- Topic badge (small pill) top-left
- Author avatar + name bottom-left (small, subtle, over gradient)
- Post type indicator subtle (icon or small badge)
- Rounded corners (
rounded-2xl), overflow hidden
For posts WITHOUT images (text-only content cards):
- Same card dimensions
- Solid dark background (
bg-gray-950orbg-[#0a0a0a]) - Content text: white, serif-style font (use
font-serifor a Google Font like Playfair Display), larger size (~text-lg or text-xl), generous leading (leading-relaxedorleading-8) - Numbered items if content has multiple points
- Clean, minimal — no borders, no badges cluttering
Both card types:
- Rounded corners (
rounded-2xl) - No visible card border
- Subtle shadow or none
- Tap/click to expand (for deep_dive and quiz types)
2. Interaction overlay (bottom of card)
- Floating action buttons on right side (vertical stack, like Instagram Reels):
- ⭐ Save (star icon, fills yellow when active)
- ✅ Got it (check icon, turns green)
- 🔄 More like this
- Semi-transparent, only visible on hover/tap or always subtle
- Remove the old horizontal action bar at the bottom
3. Feed layout changes (components/feed-page.tsx)
- Remove the
max-w-2xlconstraint — cards should be wider on mobile (full width with small paddingpx-3) - On desktop, keep
max-w-lgcentered (phone-width experience even on desktop) - Reduce gap between cards (
space-y-4instead ofspace-y-6) - Keep infinite scroll behavior
- Keep the sticky header but make it more minimal (just "Learning Feed" text, no border, transparent bg with blur)
4. Image handling
- Unsplash
source.unsplash.comURLs are being deprecated. For now they work — keep using them. - Add error fallback: if image fails to load, render as a text-only card instead (gradient background with topic-colored tint)
- Posts without images should NOT look broken — they should look intentionally text-only (like slides 2/3 in the reference)
5. Quiz post type special treatment
- Show question on the card face
- "Tap to reveal" hint text
- Tap flips/expands to show the answer (use Framer Motion)
6. Typography
- Title text on image cards: bold, possibly uppercase, large (text-2xl or text-3xl), tight leading
- Content text on text cards: slightly serif, comfortable reading size, generous spacing
- Use CSS
text-shadow: 0 2px 4px rgba(0,0,0,0.8)on text over images for readability
Files to Modify
components/post-card.tsx— Complete redesign (main work)components/feed-page.tsx— Layout adjustmentsapp/globals.css— Any custom CSS needed (text-shadow utility, font imports)tailwind.config.ts— If adding custom fonts
Files NOT to Touch
lib/database.ts— No schema changesapp/api/*— No API changesscripts/*— No seed changes
Build & Test
cd /home/wdjones/.openclaw/workspace/projects/learning-feed
npm run build
# Must succeed with 0 errors
# Start: PORT=3001 npm start
Quality Bar
- Cards must look like Instagram/TikTok content — not like a blog or documentation
- Dark mode only
- Mobile-first (test at 390px width mentally)
- Images must have gradient overlays so text is always readable
- Text-only cards must look intentional, not like broken image cards
- Smooth animations (Framer Motion) on card entry and interactions
- No layout shift when images load
DO NOT
- Change the database schema
- Add new dependencies unless truly necessary (prefer Tailwind + Framer Motion)
- Add carousel/swipe between slides (that's Phase 3 — each post is still one card for now)
- Add audio/video elements