Next.js Assistant
Build for Production. Designed for Developers.

Project just started. Will take some time to get it to a good place. Please be patient.
Links
Introduction
Welcome to the Next.js Assistant, your ultimate resource for Next.js development. This project offers a curated collection of snippets, templates, and resources designed to streamline your Next.js application development process.
Contributing
This is a contribution first project. Therefore I made it as easy as possible to contribute.
We welcome contributions from everyone. Adding snippets to this project is straightforward—just edit the MAIN.md file. Simply add amazing snippets to the relevant section and submit a pull request.
Getting Started
To begin, simply install the extension from the Visual Studio Code Marketplace. You can access it here. Once installed, you can immediately start utilizing the provided snippets to enhance your development workflow.
Table of Contents
| Directives | |
use-cache | 🔥 use cache 🔥 |
use-client | 🔥 use client 🔥 |
use-server | 🔥 use server 🔥 |
| Components | |
| Image | |
import-image | 🔥 Image Import 🔥 |
image | 🔥 Image 🔥 |
| Link | |
import-link | 🔥 Link Import 🔥 |
link | 🔥 Link 🔥 |
link-with-target-blank | 🔥 Link with Target Blank 🔥 |
| Script | |
import-script | 🔥 Script Import 🔥 |
script | 🔥 Script 🔥 |
| File Conventions | |
| error.tsx | |
export-error | 🔥 Error 🔥 |
| layout.tsx | |
export-layout | 🔥 Layout 🔥 |
export-root-layout | 🔥 Root Layout 🔥 |
| page.tsx | |
export-page | 🔥 Page 🔥 |
export-page-with-params | 🔥 Page with Params 🔥 |
export-page-with-searchParams | 🔥 Page with Search Params 🔥 |
export-page-with-client-params | 🔥 Page with Client Params 🔥 |
export-page-with-client-searchParams | 🔥 Page with Client Search Params 🔥 |
| route.ts | |
export-async-get | 🔥 GET Request 🔥 |
export-async-post | 🔥 POST Request 🔥 |
export-async-put | 🔥 PUT Request 🔥 |
export-async-patch | 🔥 PATCH Request 🔥 |
export-async-delete | 🔥 DELETE Request 🔥 |
export-async-get-with-cookies | 🔥 GET Request with Cookies 🔥 |
export-async-post-with-cookies | 🔥 POST Request with Cookies 🔥 |
export-async-put-with-cookies | 🔥 PUT Request with Cookies 🔥 |
export-async-patch-with-cookies | 🔥 PATCH Request with Cookies 🔥 |
export-async-delete-with-cookies | 🔥 DELETE Request with Cookies 🔥 |
export-async-get-with-headers | 🔥 GET Request with Headers 🔥 |
export-async-post-with-headers | 🔥 POST Request with Headers 🔥 |
export-async-put-with-headers | 🔥 PUT Request with Headers 🔥 |
export-async-patch-with-headers | 🔥 PATCH Request with Headers 🔥 |
export-async-delete-with-headers | 🔥 DELETE Request with Headers 🔥 |
| Configuration | |
next-config-ts | 🔥 Next Config 🔥 |
| Drizzle | |
drizzle-config | 🔥 Drizzle Config 🔥 |
drizzle-schema | 🔥 Drizzle Schema 🔥 |
Roadmap
"use cache"
"use client"
"use server"
import Image from "next/image"
<Image src="/nrjdalal.png" width={500} height={500} alt="Author Photo" />
import Link from "next/link"
<Link href="/">Home</Link>
-
Link Component with Target Blank
<Link href="/" target="_blank">
Home
</Link>
import Script from "next/script"
<Script src="https://example.com/script.js" />
"use client"
import { useEffect } from "react"
export default function Error({
error,
reset,
}: {
error: Error & { digest?: string }
reset: () => void
}) {
useEffect(() => {
console.error(error)
}, [error])
return (
<div
style={{
minHeight: "100dvh",
display: "flex",
flexDirection: "column",
alignItems: "center",
justifyContent: "center",
}}
>
<h2>Something went wrong!</h2>
<button
onClick={
// Attempt to recover by trying to re-render the segment
() => reset()
}
>
Try again
</button>
</div>
)
}
export default function Layout({ children }: { children: React.ReactNode }) {
return <>{children}</>
}
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body>{children}</body>
</html>
)
}
export default function Page() {
return <>x.com/nrjdalal_com</>
}
export default async function Page({
params,
}: {
params: Promise<{ slug: string }>
}) {
const slug = (await params).slug
return <>{slug}</>
}
export default async function Page({
searchParams,
}: {
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
const { query } = await searchParams
return <>{query}</>
}
"use client"
import { use } from "react"
export default function Page({
params,
}: {
params: Promise<{ slug: string }>
}) {
const { slug } = use(params)
return <>{slug}</>
}
-
Page with Client Search Params
"use client"
import { use } from "react"
export default function Page({
searchParams,
}: {
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
const { query } = use(searchParams)
return <>{query}</>
}
export async function GET(request: Request) {
try {
const query = Object.fromEntries(new URL(request.url).searchParams)
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
export async function POST(request: Request) {
try {
const body = await request.json()
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
export async function PUT(request: Request) {
try {
const body = await request.json()
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
export async function PATCH(request: Request) {
try {
const body = await request.json()
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
export async function DELETE(request: Request) {
try {
const query = Object.fromEntries(new URL(request.url).searchParams)
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
import { cookies } from "next/headers"
export async function GET(request: Request) {
try {
const query = Object.fromEntries(new URL(request.url).searchParams)
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
-
POST Request with Cookies
import { cookies } from "next/headers"
export async function POST(request: Request) {
try {
const body = await request.json()
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
import { cookies } from "next/headers"
export async function PUT(request: Request) {
try {
const body = await request.json()
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
-
PATCH Request with Cookies
import { cookies } from "next/headers"
export async function PATCH(request: Request) {
try {
const body = await request.json()
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
-
DELETE Request with Cookies
import { cookies } from "next/headers"
export async function DELETE(request: Request) {
try {
const query = Object.fromEntries(new URL(request.url).searchParams)
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
import { headers } from "next/headers"
export async function GET(request: Request) {
try {
const query = Object.fromEntries(new URL(request.url).searchParams)
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
import { headers } from "next/headers"
export async function POST(request: Request) {
try {
const body = await request.json()
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
import { headers } from "next/headers"
export async function PUT(request: Request) {
try {
const body = await request.json()
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
import { headers } from "next/headers"
export async function PATCH(request: Request) {
try {
const body = await request.json()
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
import { headers } from "next/headers"
export async function DELETE(request: Request) {
try {
const query = Object.fromEntries(new URL(request.url).searchParams)
return Response.json({ message: "OK" }, { status: 200 })
} catch (error: unknown) {
console.log(error)
if (error instanceof Error) {
return Response.json({ message: error.message }, { status: 404 })
} else {
return Response.json({ message: "404" }, { status: 404 })
}
}
}
import type { NextConfig } from "next"
const nextConfig: NextConfig = {
}
export default nextConfig
Drizzle
import { defineConfig } from "drizzle-kit"
export default defineConfig({
dialect: "postgresql",
dbCredentials: {
url: process.env.POSTGRES_URL!,
},
schema: "./src/db",
out: "./src/db/drizzle",
})
import { drizzle, type PostgresJsDatabase } from "drizzle-orm/postgres-js"
import postgres from "postgres"
declare global {
var db: PostgresJsDatabase
}
let db: PostgresJsDatabase
if (process.env.NODE_ENV === "production") {
db = drizzle({
client: postgres(process.env.POSTGRES_URL!, {
connect_timeout: 10000,
idle_timeout: 30000,
ssl: {
rejectUnauthorized: true,
},
}),
})
} else {
if (!global.db) {
global.db = drizzle({
client: postgres(process.env.POSTGRES_URL!, {
connect_timeout: 10000,
idle_timeout: 30000,
}),
})
}
db = global.db
}
export { db }