create-next-mdx-blog-app 2.1.10 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +8 -2
  2. package/package.json +89 -87
package/README.md CHANGED
@@ -61,7 +61,7 @@ npx create-next-mdx-blog-app .
61
61
  ### Package Information
62
62
 
63
63
  - **Package Name**: `create-next-mdx-blog-app`
64
- - **Version**: `2.1.10`
64
+ - **Version**: `2.2.1`
65
65
  - **License**: MIT
66
66
  - **Homepage**: [https://www.npmjs.com/package/create-next-mdx-blog-app](https://www.npmjs.com/package/create-next-mdx-blog-app/)
67
67
 
@@ -81,7 +81,7 @@ npx create-next-mdx-blog-app .
81
81
  - **react-syntax-highlighter**: A library for syntax highlighting in React applications, making code snippets more readable.
82
82
  - **tsx**: Run TypeScript code without worrying about configuration! Run the `article-manager.ts` for manually working with published articles.
83
83
  - **@codesandbox/sandpack-react**: Powers the in-browser JavaScript/TypeScript code execution environment, running code entirely client-side with no server required.
84
- - **ai** (Vercel AI SDK): Provides streaming AI response primitives and transport utilities (`TextStreamChatTransport`, `streamText`, tool support) for building the interactive chatbot.
84
+ - **ai** (Vercel AI SDK): Provides streaming AI response primitives and transport utilities (`TextStreamChatTransport`, `streamText`, tool support) used by both the interactive chatbot and the AI article summarizer.
85
85
  - **@ai-sdk/anthropic**: Anthropic provider for the Vercel AI SDK, used to connect to Claude models.
86
86
  - **@ai-sdk/react**: React hooks (`useChat`) for building streaming AI chat interfaces.
87
87
  - **zod**: TypeScript-first schema validation library used to define and validate AI tool parameters.
@@ -219,6 +219,12 @@ The project includes an interactive AI-powered chatbot optimised for readers of
219
219
  ### API Route
220
220
  `src/app/api/chat/route.ts` — Next.js edge route. Accepts the `UIMessages` array, converts it to `CoreMessages` via `convertToModelMessages`, streams a response using `streamText` with the three blog tools, and returns `result.toTextStreamResponse()`.
221
221
 
222
+ ## ✨ AI Article Summarizer
223
+ A **Generate TL;DR** button above every dynamic article streams a short Claude Haiku summary into a collapsible green panel. The slug is the only thing sent over the wire — `src/app/api/summarize/[slug]/route.ts` (edge) fetches the article server-side, applies an origin allow-list (`NEXT_PUBLIC_SITE_URL`) + per-IP rate limit (10/min) + 1-hour in-memory cache, then calls `streamText` and writes the final text to cache via `after()`. The client (`src/components/ArticleSummarizer.tsx`) uses `AbortController` to cancel in-flight requests on close/unmount. Model and prompt live in `src/utils/constants/AiSummaryConfig.ts`.
224
+
225
+ ## 👥 Author Profile Pages
226
+ A `/authors` index lists every distinct contributor pulled from the Supabase `Article` table, with per-author profile routes at `/authors/[slug]` showing their bio, avatar, and every article they've published.
227
+
222
228
  ## 📬 Newsletter Subscription
223
229
  The project ships with an integrated **newsletter signup form** powered by [Resend](https://resend.com). Visitors can subscribe from the home page or from the bottom of any article; new subscribers are added to a Resend **Audience** and immediately receive a welcome email.
224
230
 
package/package.json CHANGED
@@ -1,87 +1,89 @@
1
- {
2
- "name": "create-next-mdx-blog-app",
3
- "version": "2.1.10",
4
- "description": "A production-ready technical blog starter kit built with Next.js, MDX, Supabase, and TypeScript.",
5
- "author": {
6
- "name": "Abdullah Muhammad",
7
- "url": "https://github.com/CodingAbdullah"
8
- },
9
- "files": [
10
- "bin/"
11
- ],
12
- "bin": {
13
- "create-next-mdx-blog-app": "./bin/create.js"
14
- },
15
- "engines": {
16
- "node": ">=18.17.0"
17
- },
18
- "homepage": "https://next-mdx-blog-starter-sigma.vercel.app/",
19
- "repository": {
20
- "type": "git",
21
- "url": "git+https://github.com/CodingAbdullah/Next-MDX-Blog-Starter.git"
22
- },
23
- "keywords": [
24
- "aws",
25
- "docker",
26
- "javascript",
27
- "jsx",
28
- "mdx",
29
- "next",
30
- "react",
31
- "sql",
32
- "supabase",
33
- "typescript"
34
- ],
35
- "license": "MIT",
36
- "scripts": {
37
- "dev": "next dev",
38
- "build": "next build",
39
- "start": "next start",
40
- "lint": "next lint"
41
- },
42
- "dependencies": {
43
- "@inquirer/prompts": "^8.3.2",
44
- "degit": "^2.8.4",
45
- "execa": "^9.6.1"
46
- },
47
- "devDependencies": {
48
- "@ai-sdk/anthropic": "^3.0.64",
49
- "@ai-sdk/react": "^3.0.143",
50
- "@codesandbox/sandpack-react": "^2.20.0",
51
- "@eslint/eslintrc": "^3",
52
- "@mdx-js/loader": "^3.1.1",
53
- "@mdx-js/react": "^3.1.1",
54
- "@next/mdx": "^16.2.1",
55
- "@radix-ui/react-avatar": "^1.1.11",
56
- "@radix-ui/react-slot": "^1.2.4",
57
- "@supabase/supabase-js": "^2.101.0",
58
- "@tailwindcss/postcss": "^4",
59
- "@types/mdx": "^2.0.13",
60
- "@types/node": "^25.5.0",
61
- "@types/react": "^19",
62
- "@types/react-dom": "^19",
63
- "@types/react-syntax-highlighter": "^15.5.13",
64
- "@vercel/analytics": "^2.0.1",
65
- "ai": "^6.0.141",
66
- "class-variance-authority": "^0.7.1",
67
- "clsx": "^2.1.1",
68
- "eslint": "^10",
69
- "eslint-config-next": "16.2.1",
70
- "gray-matter": "^4.0.3",
71
- "lucide-react": "^1.7.0",
72
- "next": "^16.2.1",
73
- "next-mdx-remote": "^6.0.0",
74
- "next-themes": "^0.4.6",
75
- "react": "^19.2.4",
76
- "react-dom": "^19.2.4",
77
- "react-syntax-highlighter": "^16.1.1",
78
- "resend": "^6.12.2",
79
- "sonner": "^2.0.7",
80
- "tailwind-merge": "^3.5.0",
81
- "tailwindcss": "^4",
82
- "tsx": "^4.21.0",
83
- "tw-animate-css": "^1.4.0",
84
- "typescript": "6.0.2",
85
- "zod": "^4.3.6"
86
- }
87
- }
1
+ {
2
+ "name": "create-next-mdx-blog-app",
3
+ "version": "2.2.1",
4
+ "description": "A production-ready technical blog starter kit built with Next.js, MDX, Supabase, and TypeScript.",
5
+ "author": {
6
+ "name": "Abdullah Muhammad",
7
+ "url": "https://github.com/CodingAbdullah"
8
+ },
9
+ "files": [
10
+ "bin/"
11
+ ],
12
+ "bin": {
13
+ "create-next-mdx-blog-app": "./bin/create.js"
14
+ },
15
+ "engines": {
16
+ "node": ">=18.17.0"
17
+ },
18
+ "homepage": "https://next-mdx-blog-starter-sigma.vercel.app/",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/CodingAbdullah/Next-MDX-Blog-Starter.git"
22
+ },
23
+ "keywords": [
24
+ "aws",
25
+ "docker",
26
+ "javascript",
27
+ "jsx",
28
+ "mdx",
29
+ "next",
30
+ "react",
31
+ "sql",
32
+ "supabase",
33
+ "typescript"
34
+ ],
35
+ "license": "MIT",
36
+ "scripts": {
37
+ "dev": "next dev",
38
+ "build": "next build",
39
+ "start": "next start",
40
+ "lint": "next lint",
41
+ "doctor": "npx react-doctor@latest"
42
+ },
43
+ "dependencies": {
44
+ "@inquirer/prompts": "^8.4.3",
45
+ "degit": "^3.0.0",
46
+ "execa": "^9.6.1"
47
+ },
48
+ "devDependencies": {
49
+ "@ai-sdk/anthropic": "^3.0.78",
50
+ "@ai-sdk/react": "^3.0.192",
51
+ "@codesandbox/sandpack-react": "^2.20.0",
52
+ "@eslint/eslintrc": "^3",
53
+ "@mdx-js/loader": "^3.1.1",
54
+ "@mdx-js/react": "^3.1.1",
55
+ "@next/mdx": "^16.2.6",
56
+ "@radix-ui/react-avatar": "^1.1.11",
57
+ "@radix-ui/react-slot": "^1.2.4",
58
+ "@supabase/supabase-js": "^2.106.1",
59
+ "@tailwindcss/postcss": "^4",
60
+ "@types/mdx": "^2.0.13",
61
+ "@types/node": "^25.9.1",
62
+ "@types/react": "^19",
63
+ "@types/react-dom": "^19",
64
+ "@types/react-syntax-highlighter": "^15.5.13",
65
+ "@vercel/analytics": "^2.0.1",
66
+ "ai": "^6.0.190",
67
+ "class-variance-authority": "^0.7.1",
68
+ "clsx": "^2.1.1",
69
+ "eslint": "^10",
70
+ "eslint-config-next": "16.2.6",
71
+ "gray-matter": "^4.0.3",
72
+ "lucide-react": "^1.16.0",
73
+ "next": "^16.2.6",
74
+ "next-mdx-remote": "^6.0.0",
75
+ "next-themes": "^0.4.6",
76
+ "react": "^19.2.6",
77
+ "react-doctor": "^0.2.14",
78
+ "react-dom": "^19.2.6",
79
+ "react-syntax-highlighter": "^16.1.1",
80
+ "resend": "^6.12.3",
81
+ "sonner": "^2.0.7",
82
+ "tailwind-merge": "^3.6.0",
83
+ "tailwindcss": "^4",
84
+ "tsx": "^4.22.3",
85
+ "tw-animate-css": "^1.4.0",
86
+ "typescript": "6.0.3",
87
+ "zod": "^4.4.3"
88
+ }
89
+ }