Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Next.js personal portfolio/blog site with an embedded Sanity CMS for content editing.
Portfolio / Blog is a Next.js 16 personal portfolio and blog template that pairs the App Router with an embedded Sanity Studio v6 CMS and Tailwind CSS 4, letting a site owner showcase projects and write posts from one codebase.
Portfolio / Blog is a statically generated template for a personal website that includes a portfolio of projects and a blog. It takes content from Sanity documents — post for blog posts, project for portfolio items, plus singletons such as home, about, postList, projectList, and settings — and produces a live site with visual editing. The template runs on Next.js 16 with the App Router, Turbopack, Cache Components / PPR, and the Sanity Studio lives at the /studio route. Content changes are revalidated through SanityLive, so published edits appear without a rebuild.
bun run typegen generates sanity.types.ts from the Sanity schema and GROQ queries in sanity/lib/queries.ts.vercel env pull, with SANITY_API_READ_TOKEN used for draft mode and visual editing.Install dependencies with bun install, copy .env.local.example to .env.local, fill in the Sanity project ID, dataset, and API read token, then run bun dev to start the dev server (which runs Sanity typegen first). Edit content by opening /studio; SanityLive revalidates the static pages so published edits appear without a rebuild. The build command bun run build also extracts the Studio manifest.
Copy .env.local.example to .env.local and fill in NEXT_PUBLIC_SANITY_PROJECT_ID, NEXT_PUBLIC_SANITY_DATASET, SANITY_API_READ_TOKEN, and NEXT_PUBLIC_BASE_URL. You can pull real values from Vercel with vercel env pull .env.local. GOOGLE_ANALYTICS_ID is optional.
No. SanityLive revalidation means published changes in Sanity Studio appear on the site without rebuilding. The dev server supports draft mode via the SANITY_API_READ_TOKEN.
Sanity TypeGen regenerates sanity.types.ts from the Sanity schema and GROQ queries. Running bun run typegen keeps content types in sync; the template runs it automatically on bun dev and bun run build.
Yes, the template is Vercel-ready. The repository includes Vercel integration commands like vercel env pull, and the stack (Next.js, Sanity, Tailwind) is a standard Vercel deployment.
Use bun run lint for oxlint, bun run format for oxfmt, and bun run lint:fix to auto-fix. The template uses oxlint and oxfmt instead of ESLint and Prettier.
