Next.js 블로그 키트: 작성자·카테고리·태그·시리즈 글, 피드, 검토 댓글, 뉴스레터
설치
genpm add @core/kit-blog포함 내용
- src/app/(blog)/에 소스 코드, 파일 32개. (36.2kB)
- src/app/(blog)/AGENTS.md에 AI 규칙, 그리고 IDE 규칙 파일.
- .env.example에 추가되는 환경 변수: NEWSLETTER_FROM, NEWSLETTER_POSTAL_ADDRESS, NEWSLETTER_SECRET.
- @core/blog, @core/comments, @core/kit-cms, @core/newsletter을(를) 자동으로 해결합니다.
README
이 패키지에는 README가 없습니다.
이것이 AI가 src/app/(blog)에서 작업할 때 읽는 내용 그대로입니다. 그 외에는 컨텍스트에 아무것도 추가되지 않습니다.
@core/kit-blog — rules for AI agents
Purpose
A complete blog on top of @core/kit-cms, edited in the same /admin: posts with rich text and cover images, author
profiles, categories, tags and series, scheduling, RSS/Atom/JSON feeds, site search, moderated comments, newsletter
with double opt-in and one-click unsubscribe, share links without third-party scripts and full SEO (BlogPosting
JSON-LD, sitemap, Open Graph). Glue and templates only: logic lives in @core/blog, comments and newsletter.
Map
_templates/genpm.md— the exact lines this kit adds to the project'ssrc/genpm/*.ts(generated, always current).blog/page.tsx— index (featured first,?page=).blog/[slug]/page.tsx— post.blog/{category,tag,author,series}/[slug]/page.tsx— archives (shared_lib/archive.tsx).blog/archive/[year]/[month].blog/feed.xml,blog/atom.xml,blog/feed.json— feeds.api/comments/[type]/[id]— comments (typepost).newsletter/{subscribe,confirm,unsubscribe}— routes;newsletter/{confirmed,unsubscribed,invalid}— pages._components/—PostList,PostCard,Comments,SubscribeForm,ShareLinks,blog.css(the visual template)._blocks/latest-posts.tsx— "Latest posts" block for CMS pages._lib/campaign.ts— "Create newsletter campaign" action.
Integration
- @core/kit-cms must be integrated first (follow its AGENTS.md if it was installed with this kit).
- Env:
NEWSLETTER_FROM,NEWSLETTER_POSTAL_ADDRESS,NEWSLETTER_SECRET(≥ 32 chars) and, in production,RESEND_API_KEY(see src/lib/newsletter/AGENTS.md). Explain to the person how to verify their sending domain (SPF, DKIM, DMARC) with their email provider; do not change their DNS yourself. - Migrations for @core/comments and @core/newsletter (src/lib/db/AGENTS.md).
- Add the lines of
_templates/genpm.mdto the project'ssrc/genpm/*.ts(it says which file and where): the blog collections, sitemap and search sources, thelatestPostsblock, and the admin resources (posts with "Create newsletter campaign", taxonomies, comments, newsletter) plus the pending-comments widget. - Add "Blog" to the header menu in Admin → Menus, and link the feeds from the site footer if wanted.
- Verify: create an author and a post, schedule it, check it is absent from
/blog, the feed and the sitemap until its time; comment as a guest (goes to moderation) and approve it; subscribe, confirm from the email and unsubscribe. Without an OAuth app nobody can sign in to the admin: an agent can create the author and posts withseedEntry/createEntry+publish(@core/content) from a script. WithoutRESEND_API_KEY, emails are printed to the console only undernext dev(next startis production and refuses to send without a provider).
Conventions
- Posts reference authors, categories, tags and series by slug; renaming a slug breaks links, so prefer editing names.
membersOnlyposts show only the excerpt here; with @core/billing, decide access withhasEntitlementinblog/[slug]/page.tsx.- The templates in
_componentsbelong to the project after installation: adapt markup andblog.cssfreely.
Don't
- Don't add third-party share or comment widgets (scripts and cookies without consent); keep plain links.
- Don't import subscriber lists without demonstrable consent, and never remove the unsubscribe link or postal address.
- Don't publish comments from guests without moderation unless the owner asks for it (
moderation: 'guests').
# @core/kit-blog — rules for AI agents
## Purpose
A complete blog on top of @core/kit-cms, edited in the same `/admin`: posts with rich text and cover images, author
profiles, categories, tags and series, scheduling, RSS/Atom/JSON feeds, site search, moderated comments, newsletter
with double opt-in and one-click unsubscribe, share links without third-party scripts and full SEO (BlogPosting
JSON-LD, sitemap, Open Graph). Glue and templates only: logic lives in @core/blog, comments and newsletter.
## Map
- `_templates/genpm.md` — the exact lines this kit adds to the project's `src/genpm/*.ts` (generated, always current).
- `blog/page.tsx` — index (featured first, `?page=`). `blog/[slug]/page.tsx` — post.
- `blog/{category,tag,author,series}/[slug]/page.tsx` — archives (shared `_lib/archive.tsx`). `blog/archive/[year]/[month]`.
- `blog/feed.xml`, `blog/atom.xml`, `blog/feed.json` — feeds. `api/comments/[type]/[id]` — comments (type `post`).
- `newsletter/{subscribe,confirm,unsubscribe}` — routes; `newsletter/{confirmed,unsubscribed,invalid}` — pages.
- `_components/` — `PostList`, `PostCard`, `Comments`, `SubscribeForm`, `ShareLinks`, `blog.css` (the visual template).
- `_blocks/latest-posts.tsx` — "Latest posts" block for CMS pages. `_lib/campaign.ts` — "Create newsletter campaign" action.
## Integration
1. @core/kit-cms must be integrated first (follow its AGENTS.md if it was installed with this kit).
2. Env: `NEWSLETTER_FROM`, `NEWSLETTER_POSTAL_ADDRESS`, `NEWSLETTER_SECRET` (≥ 32 chars) and, in production,
`RESEND_API_KEY` (see src/lib/newsletter/AGENTS.md). Explain to the person how to verify their sending domain
(SPF, DKIM, DMARC) with their email provider; do not change their DNS yourself.
3. Migrations for @core/comments and @core/newsletter (src/lib/db/AGENTS.md).
4. Add the lines of `_templates/genpm.md` to the project's `src/genpm/*.ts` (it says which file and where): the blog
collections, sitemap and search sources, the `latestPosts` block, and the admin resources (posts with "Create
newsletter campaign", taxonomies, comments, newsletter) plus the pending-comments widget.
5. Add "Blog" to the header menu in Admin → Menus, and link the feeds from the site footer if wanted.
6. Verify: create an author and a post, schedule it, check it is absent from `/blog`, the feed and the sitemap until
its time; comment as a guest (goes to moderation) and approve it; subscribe, confirm from the email and unsubscribe.
Without an OAuth app nobody can sign in to the admin: an agent can create the author and posts with `seedEntry` /
`createEntry` + `publish` (@core/content) from a script. Without `RESEND_API_KEY`, emails are printed to the console
only under `next dev` (`next start` is production and refuses to send without a provider).
## Conventions
- Posts reference authors, categories, tags and series by slug; renaming a slug breaks links, so prefer editing names.
- `membersOnly` posts show only the excerpt here; with @core/billing, decide access with `hasEntitlement` in `blog/[slug]/page.tsx`.
- The templates in `_components` belong to the project after installation: adapt markup and `blog.css` freely.
## Don't
- Don't add third-party share or comment widgets (scripts and cookies without consent); keep plain links.
- Don't import subscriber lists without demonstrable consent, and never remove the unsubscribe link or postal address.
- Don't publish comments from guests without moderation unless the owner asks for it (`moderation: 'guests'`).
.genpmignore 적용 후 주입될 정확한 트리입니다. 고정 대상:
<!-- Generado por catalog/scripts/kit-snippets.mjs desde el proyecto de ejemplo: no editar a mano. -->
# @core/kit-blog: lines for `src/genpm/*.ts`
Add each line below to the project's registration files (created by @core/kit-cms from its `_templates/genpm`).
Skip a line that is already there (another kit may have added it), keep the trailing `// kit-…` comment so later
kits and removals can find it, and keep the project's own lines.
## `src/genpm/admin.ts`
In imports (top of the file):
```ts
import { withSendAsCampaign } from '@/app/(blog)/_lib/campaign'; // kit-blog
import { pendingCommentsWidget } from '@/app/(blog)/_lib/widgets'; // kit-blog
import { blogAdminResources } from '@/lib/blog'; // kit-blog
import { commentsAdminResource } from '@/lib/comments'; // kit-blog kit-store
import { newsletterAdminResources } from '@/lib/newsletter'; // kit-blog
```
In top level (after the imports):
```ts
const [postsResource, ...blogTaxonomies] = blogAdminResources(); // kit-blog
```
In `widgets` (inside its list):
```ts
pendingCommentsWidget, // kit-blog
```
In `admin` → `resources` array:
```ts
withSendAsCampaign(postsResource!), // kit-blog
...blogTaxonomies, // kit-blog
commentsAdminResource, // kit-blog kit-store
...newsletterAdminResources(), // kit-blog
```
## `src/genpm/blocks.ts`
In imports (top of the file):
```ts
import { latestPosts } from '@/app/(blog)/_blocks/latest-posts'; // kit-blog
```
In `blocks` (inside its list):
```ts
latestPosts, // kit-blog
```
## `src/genpm/content.ts`
In imports (top of the file):
```ts
import '@/lib/blog'; // kit-blog: posts, authors, categories, tags, series
```
## `src/genpm/search.ts`
In imports (top of the file):
```ts
import { blogSearchSource } from '@/lib/blog'; // kit-blog
```
In top level (after the imports):
```ts
registerSearchSource(blogSearchSource()); // kit-blog
```
## `src/genpm/seo.ts`
In imports (top of the file):
```ts
import { blogSitemapSource } from '@/lib/blog'; // kit-blog
```
In top level (after the imports):
```ts
registerSitemapSource(blogSitemapSource()); // kit-blog
```
이 패키지는 MCP 서버를 선언하지 않습니다.
| 버전 | 커밋 | 게시일 | 검사 |
|---|---|---|---|
| 1.0.1 | fa952a4 | 3시간 전 | 검사 통과 |
- 제안됨
- GenPM은 npm 명령을 제안하고, 동의한 경우에만 실행합니다.
- 사용하는 패키지 (0)
- 아직 이 패키지에 의존하는 공개 패키지가 없습니다.
- 검사
- 검사 통과 · 문제 0건
- 커밋
- v1.0.1 → fa952a4b7c71340c947de8bef049f8d9c18f7871 · 가져온 뒤 검증됨
- 스크립트
- 없음. GenPM은 패키지 코드를 절대 실행하지 않습니다.
- 라이선스
- MIT
- 품질
- 100/100
- 인정된 라이선스충족
- AGENTS.md에 목적 설명충족
- AGENTS.md에 통합 단계충족
- AGENTS.md에 규칙 또는 금지 사항충족
- 테스트 포함충족
- 보안 검사 통과충족
- 최근 6개월 내 게시충족
- 인증된 게시자충족
- 요약과 키워드충족
- 신고
- 문제가 있나요?