{"slug": "pulse-wall-i-let-sanity-run-my-repost-marketplace-s-content", "title": "Pulse Wall: I Let Sanity Run My Repost Marketplace's Content", "summary": "A developer built Pulse Wall, a Sanity-powered showcase of repost campaigns and promoter spotlights, by reusing the Next.js UI from their separate Pulse social promotion marketplace and replacing its Go/MongoDB/Paystack backend with a Sanity content layer editable in Studio. The build, done with Claude Code, hit CORS errors that required explicitly allowlisting localhost and the Render URL, and a stale-content bug caused by placing Next.js route segment config in a component instead of page.tsx, which silently forced static prerendering until export const dynamic = \"force-dynamic\" was moved. The project is deployed on Render via a render.yaml blueprint, with a GitHub Actions workflow pinging the free-tier instance every five minutes to prevent spin-down.", "body_md": "*This is a submission for the [Sanity Challenge, Path Two: Vibe-Code Something Strange](https://dev.to/challenges/sanity-2026-09-16)*\n\nPulse Wall, a Sanity-powered showcase of repost campaigns and promoter spotlights. It's a spin-off of Pulse, a community-powered social promotion marketplace I'm building separately (businesses run repost campaigns, promoters earn money sharing them). Instead of reimplementing Pulse's full backend (Go, MongoDB, Paystack), I reused Pulse's Next.js UI and turned the campaign marketplace into pure content. Every campaign and promoter spotlight lives in Sanity and is editable in Studio, no redeploy needed for new content to go live.\n\n[https://pulse-sanity.onrender.com](https://pulse-sanity.onrender.com)\n\n[https://github.com/siyanbolagiggs1/pulse-sanity](https://github.com/siyanbolagiggs1/pulse-sanity)\n\nI used Claude Code as my AI-native IDE for this build. I started by pointing it at my existing Pulse repo and asking it to reuse the Next.js UI (Tailwind theme, shadcn/ui components, marketing shell) rather than starting from scratch, then strip out everything backend-coupled (auth, wallet, Paystack, the Go API) and replace the campaign marketplace with a Sanity content layer.\n\nWhat worked well: defining two schemas (campaign with a playful vibeScore field, spotlight) and embedding Sanity Studio directly into the Next.js app at /studio using next-sanity, so there's one deployable app instead of two.\n\nWhere it got stuck: CORS. Sanity blocks Studio API calls from origins it doesn't recognize, so both localhost and the deployed Render URL had to be explicitly added as CORS origins with credentials allowed before Studio would even load, not obvious until we hit a CorsOriginError in the browser console.\n\nThe bigger one: after publishing new campaigns in Studio, they weren't showing up on the live site. Turned out Next.js route segment config (revalidate/dynamic) only takes effect in page.tsx/layout.tsx files, not in an arbitrary component I'd put it in. It was silently ignored, so the homepage got fully statically prerendered at build time and never picked up new Sanity content, directly undercutting the \"live from Sanity, no rebuild\" pitch. Moving export const dynamic = \"force-dynamic\" into page.tsx fixed it.\n\nI deployed to Render instead of Vercel, using a render.yaml blueprint for one-click deploy, and added a GitHub Actions workflow to ping the free-tier instance every 5 minutes so it doesn't spin down between judge visits.\n\nI didn't reach into the App SDK or Workflows for this one, kept scope to the Content Lake, Studio, and GROQ queries.\n\nProject ID: b2izifpg, dataset: production", "url": "https://wpnews.pro/news/pulse-wall-i-let-sanity-run-my-repost-marketplace-s-content", "canonical_source": "https://dev.to/khalid_siyanbola_36d2ca51/pulse-wall-i-let-sanity-run-my-repost-marketplaces-content-4741", "published_at": "2026-09-19 01:42:38+00:00", "updated_at": "2026-09-19 01:54:30.759317+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools"], "entities": ["Sanity", "Claude Code", "Next.js", "Render", "GitHub Actions", "Pulse", "Pulse Wall", "Vercel"], "alternates": {"html": "https://wpnews.pro/news/pulse-wall-i-let-sanity-run-my-repost-marketplace-s-content", "markdown": "https://wpnews.pro/news/pulse-wall-i-let-sanity-run-my-repost-marketplace-s-content.md", "text": "https://wpnews.pro/news/pulse-wall-i-let-sanity-run-my-repost-marketplace-s-content.txt", "jsonld": "https://wpnews.pro/news/pulse-wall-i-let-sanity-run-my-repost-marketplace-s-content.jsonld"}}