diff --git a/starter/hyv-guarded-blog/.eslintrc.json b/starter/hyv-guarded-blog/.eslintrc.json
new file mode 100644
index 0000000000..bffb357a71
--- /dev/null
+++ b/starter/hyv-guarded-blog/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": "next/core-web-vitals"
+}
diff --git a/starter/hyv-guarded-blog/.gitignore b/starter/hyv-guarded-blog/.gitignore
new file mode 100644
index 0000000000..8777267507
--- /dev/null
+++ b/starter/hyv-guarded-blog/.gitignore
@@ -0,0 +1,40 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.*
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/versions
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/starter/hyv-guarded-blog/README.md b/starter/hyv-guarded-blog/README.md
new file mode 100644
index 0000000000..14ff929d94
--- /dev/null
+++ b/starter/hyv-guarded-blog/README.md
@@ -0,0 +1,54 @@
+---
+name: AI Voice Gate Blog Starter
+slug: hyv-guarded-blog
+description: A Next.js blog that fails its own build if posts sound like ChatGPT wrote them. Runs 100% locally, zero API calls.
+framework: Next.js
+useCase: Blog
+css: Tailwind
+publisher: Hold Your Voice
+deployUrl: https://vercel.com/new/clone?repository-url=https://github.com/shashank-sn/hold-your-voice
+demoUrl: https://hold-your-voice-vercel.vercel.app
+relatedTemplates:
+ - blog-starter-kit
+---
+
+# a next.js blog that fails its own build if it sounds like chatgpt wrote it
+
+```
+hyv scan _posts/ai-slop-example.md
+
+ ● line 16: ai.holistic — describe the actual approach
+ ● line 16: ai.fast-paced — cut this — every industry says this
+ ● line 16: ai.cut[t]?ing-edge — name the specific technology
+ ● line 20: ai.paradigm — describe the actual shift
+ ○ line 20: formula.firstly — just start — "firstly" is filler
+ ○ line 24: ai.foster — use: build, grow, encourage, support
+ ● line 32: ai.delve — use a specific verb: dig, explore, look at
+ ● line 36: ai.ever-evolving — cut this — it says nothing
+ ● line 36: formula.in-conclusion — just end. readers know it's the end.
+
+ 34 issues (14 red, 20 yellow)
+ score: 0/100
+
+ exit code 2 -- build refused
+```
+
+prebuild runs `hyv scan` on every post with `--fail-on-hit`. exits 2 on any hit. vercel refuses the deploy.
+
+## Demo
+
+https://hold-your-voice-vercel.vercel.app
+
+## Deploy your own
+
+[](https://vercel.com/new/clone?repository-url=https://github.com/shashank-sn/hold-your-voice)
+
+## How to use
+
+```bash
+npx create-next-app --example https://github.com/shashank-sn/hold-your-voice hyv-guarded-blog
+```
+
+install it once: `npm i -g @holdyourvoice/hyv@latest`. runs 100% locally. zero api calls. free forever.
+
+$1 first month → [holdyourvoice.com](https://holdyourvoice.com)
diff --git a/starter/hyv-guarded-blog/_posts/ai-slop-example.md b/starter/hyv-guarded-blog/_posts/ai-slop-example.md
new file mode 100644
index 0000000000..af82931cac
--- /dev/null
+++ b/starter/hyv-guarded-blog/_posts/ai-slop-example.md
@@ -0,0 +1,38 @@
+---
+title: "leveraging innovation for sustainable business growth"
+excerpt: "explore key strategies for driving sustainable growth through innovation in the modern digital landscape"
+description: "a comprehensive guide to implementing robust innovation frameworks that foster meaningful transformation and deliver tangible business results"
+coverImage: "/assets/blog/hello-world/cover.jpg"
+date: "2026-07-02T00:00:00.000Z"
+author:
+ name: hold your voice
+ picture: "/assets/blog/authors/tim.jpeg"
+ogImage:
+ url: "/assets/blog/hello-world/cover.jpg"
+---
+
+# Leveraging Innovation for Sustainable Business Growth
+
+In today's fast-paced digital landscape, businesses must harness the power of innovation to stay ahead of the curve. The modern marketplace demands a holistic approach that seamlessly integrates cutting-edge technology with robust strategic frameworks.
+
+## The Paradigm Shift
+
+Firstly, it is important to note that the business environment has undergone a profound paradigm shift. Organizations that fail to adapt risk being left behind in an increasingly competitive ecosystem. Moreover, the convergence of artificial intelligence, data-driven decision making, and agile methodologies has created unprecedented opportunities for growth.
+
+## Key Strategies for Success
+
+To foster meaningful innovation, companies must embrace a multifaceted approach. This involves leveraging synergies across departments, optimizing workflows, and creating a culture of continuous improvement.
+
+It is crucial to understand that innovation is not just about implementing new technologies. Rather, it encompasses a comprehensive transformation of organizational mindsets and processes. By empowering teams and encouraging cross-functional collaboration, businesses can unlock hidden potential.
+
+## Driving Tangible Results
+
+The implementation of robust innovation frameworks yields tangible outcomes. Organizations that prioritize digital transformation report significant improvements in efficiency, customer satisfaction, and bottom-line performance. These results underscore the importance of taking a proactive stance.
+
+Let's delve into the specific ways innovation drives growth. Enhanced data analytics capabilities enable more informed decision-making. Streamlined operations reduce costs while improving quality. And perhaps most importantly, a forward-thinking approach helps businesses anticipate market shifts before they occur.
+
+## Conclusion
+
+In conclusion, the path to sustainable growth lies in embracing innovation as a core business function. By fostering a culture of creativity, investing in the right tools, and maintaining a relentless focus on execution, organizations can position themselves for long-term success in an ever-evolving landscape.
+
+The future belongs to those who are willing to challenge conventional wisdom and push the boundaries of what is possible. Are you ready to take the first step?
diff --git a/starter/hyv-guarded-blog/_posts/clean-example.md b/starter/hyv-guarded-blog/_posts/clean-example.md
new file mode 100644
index 0000000000..0fdc4bb446
--- /dev/null
+++ b/starter/hyv-guarded-blog/_posts/clean-example.md
@@ -0,0 +1,28 @@
+---
+title: "ship the ugly version first"
+date: "2026-07-01T00:00:00.000Z"
+excerpt: "stop rewriting and start publishing your work before it feels ready for anyone else to see"
+description: "six months polishing a landing page that nobody saw taught me that volume beats perfection and the version you never ship always costs far more than the one you send out too early"
+coverImage: "/assets/blog/hello-world/cover.jpg"
+ogImage:
+ url: "/assets/blog/hello-world/cover.jpg"
+author:
+ name: hold your voice
+ picture: "/assets/blog/authors/tim.jpeg"
+---
+
+# ship the ugly version first
+
+I spent six months rewriting a landing page nobody ever saw.
+
+The copy was fine. The design worked. I just convinced myself it needed to be cleaner, sharper, more "on brand." So the tab stayed open and I tweaked sentences instead of shipping.
+
+Nobody remembers the version you shipped too early. Everyone remembers the thing you never shipped at all.
+
+A first draft is a negotiation between your taste and what you can actually produce. Your taste is sharp. Your output, at the start, is not. Volume closes the gap. More writing, more shipping, more cringing at the old stuff.
+
+"If you are embarrassed by the thing you built six months ago, you are moving at the right pace." A friend told me that. It stuck.
+
+I follow a simple rule now. Ship when the thing works. Polish when someone complains. When nobody complains, you were already good enough.
+
+Some projects deserve a three month rebrand. Others just need to exist. Ship accordingly.
diff --git a/starter/hyv-guarded-blog/package.json b/starter/hyv-guarded-blog/package.json
new file mode 100644
index 0000000000..74dfad7a49
--- /dev/null
+++ b/starter/hyv-guarded-blog/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "hyv-guarded-blog",
+ "repository": "https://github.com/shashank-sn/hold-your-voice",
+ "license": "MIT",
+ "private": true,
+ "scripts": {
+ "dev": "next dev --turbopack",
+ "prebuild": "bash -c 'set -e; for f in _posts/*.md; do npx @holdyourvoice/hyv@latest scan \"$f\" --fail-on-hit --ignore voice.staccato-triplet; done'",
+ "build": "next build",
+ "start": "next start"
+ },
+ "dependencies": {
+ "classnames": "^2.5.1",
+ "date-fns": "^3.6.0",
+ "gray-matter": "^4.0.3",
+ "next": "^16.2.10",
+ "react": "^19",
+ "react-dom": "^19",
+ "remark": "^15.0.1",
+ "remark-html": "^16.0.1"
+ },
+ "devDependencies": {
+ "@types/node": "^20",
+ "@types/react": "^19",
+ "@types/react-dom": "^19",
+ "autoprefixer": "^10.4.19",
+ "postcss": "^8.4.38",
+ "tailwindcss": "^3.4.4",
+ "typescript": "^5.5.2"
+ }
+}
diff --git a/starter/hyv-guarded-blog/postcss.config.js b/starter/hyv-guarded-blog/postcss.config.js
new file mode 100644
index 0000000000..12a703d900
--- /dev/null
+++ b/starter/hyv-guarded-blog/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/starter/hyv-guarded-blog/public/assets/blog/authors/hyv.jpeg b/starter/hyv-guarded-blog/public/assets/blog/authors/hyv.jpeg
new file mode 100644
index 0000000000..e3d521436a
Binary files /dev/null and b/starter/hyv-guarded-blog/public/assets/blog/authors/hyv.jpeg differ
diff --git a/starter/hyv-guarded-blog/public/assets/blog/authors/jj.jpeg b/starter/hyv-guarded-blog/public/assets/blog/authors/jj.jpeg
new file mode 100644
index 0000000000..e3d521436a
Binary files /dev/null and b/starter/hyv-guarded-blog/public/assets/blog/authors/jj.jpeg differ
diff --git a/starter/hyv-guarded-blog/public/assets/blog/authors/joe.jpeg b/starter/hyv-guarded-blog/public/assets/blog/authors/joe.jpeg
new file mode 100644
index 0000000000..d9677ad61c
Binary files /dev/null and b/starter/hyv-guarded-blog/public/assets/blog/authors/joe.jpeg differ
diff --git a/starter/hyv-guarded-blog/public/assets/blog/authors/tim.jpeg b/starter/hyv-guarded-blog/public/assets/blog/authors/tim.jpeg
new file mode 100644
index 0000000000..cc49257b82
Binary files /dev/null and b/starter/hyv-guarded-blog/public/assets/blog/authors/tim.jpeg differ
diff --git a/starter/hyv-guarded-blog/public/assets/blog/dynamic-routing/cover.jpg b/starter/hyv-guarded-blog/public/assets/blog/dynamic-routing/cover.jpg
new file mode 100644
index 0000000000..c660c92679
Binary files /dev/null and b/starter/hyv-guarded-blog/public/assets/blog/dynamic-routing/cover.jpg differ
diff --git a/starter/hyv-guarded-blog/public/assets/blog/hello-world/cover.jpg b/starter/hyv-guarded-blog/public/assets/blog/hello-world/cover.jpg
new file mode 100644
index 0000000000..33b7dc4b73
Binary files /dev/null and b/starter/hyv-guarded-blog/public/assets/blog/hello-world/cover.jpg differ
diff --git a/starter/hyv-guarded-blog/public/assets/blog/preview/cover.jpg b/starter/hyv-guarded-blog/public/assets/blog/preview/cover.jpg
new file mode 100644
index 0000000000..6a975fb36d
Binary files /dev/null and b/starter/hyv-guarded-blog/public/assets/blog/preview/cover.jpg differ
diff --git a/starter/hyv-guarded-blog/public/favicon/android-chrome-192x192.png b/starter/hyv-guarded-blog/public/favicon/android-chrome-192x192.png
new file mode 100644
index 0000000000..2f07282a59
Binary files /dev/null and b/starter/hyv-guarded-blog/public/favicon/android-chrome-192x192.png differ
diff --git a/starter/hyv-guarded-blog/public/favicon/android-chrome-512x512.png b/starter/hyv-guarded-blog/public/favicon/android-chrome-512x512.png
new file mode 100644
index 0000000000..dbb0faea84
Binary files /dev/null and b/starter/hyv-guarded-blog/public/favicon/android-chrome-512x512.png differ
diff --git a/starter/hyv-guarded-blog/public/favicon/apple-touch-icon.png b/starter/hyv-guarded-blog/public/favicon/apple-touch-icon.png
new file mode 100644
index 0000000000..8f4033b2a8
Binary files /dev/null and b/starter/hyv-guarded-blog/public/favicon/apple-touch-icon.png differ
diff --git a/starter/hyv-guarded-blog/public/favicon/browserconfig.xml b/starter/hyv-guarded-blog/public/favicon/browserconfig.xml
new file mode 100644
index 0000000000..9824d87b11
--- /dev/null
+++ b/starter/hyv-guarded-blog/public/favicon/browserconfig.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+ #000000
+
+
+
diff --git a/starter/hyv-guarded-blog/public/favicon/favicon-16x16.png b/starter/hyv-guarded-blog/public/favicon/favicon-16x16.png
new file mode 100644
index 0000000000..29deaf6716
Binary files /dev/null and b/starter/hyv-guarded-blog/public/favicon/favicon-16x16.png differ
diff --git a/starter/hyv-guarded-blog/public/favicon/favicon-32x32.png b/starter/hyv-guarded-blog/public/favicon/favicon-32x32.png
new file mode 100644
index 0000000000..e3b4277bf0
Binary files /dev/null and b/starter/hyv-guarded-blog/public/favicon/favicon-32x32.png differ
diff --git a/starter/hyv-guarded-blog/public/favicon/favicon.ico b/starter/hyv-guarded-blog/public/favicon/favicon.ico
new file mode 100644
index 0000000000..ea2f437d9d
Binary files /dev/null and b/starter/hyv-guarded-blog/public/favicon/favicon.ico differ
diff --git a/starter/hyv-guarded-blog/public/favicon/mstile-150x150.png b/starter/hyv-guarded-blog/public/favicon/mstile-150x150.png
new file mode 100644
index 0000000000..f2dfd904bf
Binary files /dev/null and b/starter/hyv-guarded-blog/public/favicon/mstile-150x150.png differ
diff --git a/starter/hyv-guarded-blog/public/favicon/safari-pinned-tab.svg b/starter/hyv-guarded-blog/public/favicon/safari-pinned-tab.svg
new file mode 100644
index 0000000000..72ab6e050c
--- /dev/null
+++ b/starter/hyv-guarded-blog/public/favicon/safari-pinned-tab.svg
@@ -0,0 +1,33 @@
+
+
+
diff --git a/starter/hyv-guarded-blog/public/favicon/site.webmanifest b/starter/hyv-guarded-blog/public/favicon/site.webmanifest
new file mode 100644
index 0000000000..a672d9a233
--- /dev/null
+++ b/starter/hyv-guarded-blog/public/favicon/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "Next.js",
+ "short_name": "Next.js",
+ "icons": [
+ {
+ "src": "/favicons/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/favicons/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#000000",
+ "background_color": "#000000",
+ "display": "standalone"
+}
diff --git a/starter/hyv-guarded-blog/src/app/_components/alert.tsx b/starter/hyv-guarded-blog/src/app/_components/alert.tsx
new file mode 100644
index 0000000000..d758ba016e
--- /dev/null
+++ b/starter/hyv-guarded-blog/src/app/_components/alert.tsx
@@ -0,0 +1,48 @@
+import Container from "@/app/_components/container";
+import { EXAMPLE_PATH } from "@/lib/constants";
+import cn from "classnames";
+
+type Props = {
+ preview?: boolean;
+};
+
+const Alert = ({ preview }: Props) => {
+ return (
+
+
+
+ {preview ? (
+ <>
+ This page is a preview.{" "}
+
+ Click here
+ {" "}
+ to exit preview mode.
+ >
+ ) : (
+ <>
+ The source code for this blog is{" "}
+
+ available on GitHub
+
+ .
+ >
+ )}
+