├── .env ├── .gitignore ├── .vscode └── settings.json ├── README.md ├── app ├── globals.css ├── head.tsx ├── layout.tsx ├── page.module.css └── page.tsx ├── next.config.js ├── package-lock.json ├── package.json ├── pages └── api │ └── hello.ts ├── prisma └── schema.prisma ├── public ├── favicon.ico ├── next.svg ├── thirteen.svg └── vercel.svg └── tsconfig.json /.env: -------------------------------------------------------------------------------- 1 | # Environment variables declared in this file are automatically made available to Prisma. 2 | # See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema 3 | 4 | # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. 5 | # See the documentation for all the connection string options: https://pris.ly/d/connection-strings 6 | 7 | DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules\\typescript\\lib", 3 | "typescript.enablePromptUseWorkspaceTsdk": true 4 | } 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | # or 12 | pnpm dev 13 | ``` 14 | 15 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 16 | 17 | You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. 18 | 19 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. 20 | 21 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 22 | 23 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. 24 | 25 | ## Learn More 26 | 27 | To learn more about Next.js, take a look at the following resources: 28 | 29 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 30 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 31 | 32 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 33 | 34 | ## Deploy on Vercel 35 | 36 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 37 | 38 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 39 | -------------------------------------------------------------------------------- /app/globals.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --max-width: 1100px; 3 | --border-radius: 12px; 4 | --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono', 5 | 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro', 6 | 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace; 7 | 8 | --foreground-rgb: 0, 0, 0; 9 | --background-start-rgb: 214, 219, 220; 10 | --background-end-rgb: 255, 255, 255; 11 | 12 | --primary-glow: conic-gradient( 13 | from 180deg at 50% 50%, 14 | #16abff33 0deg, 15 | #0885ff33 55deg, 16 | #54d6ff33 120deg, 17 | #0071ff33 160deg, 18 | transparent 360deg 19 | ); 20 | --secondary-glow: radial-gradient( 21 | rgba(255, 255, 255, 1), 22 | rgba(255, 255, 255, 0) 23 | ); 24 | 25 | --tile-start-rgb: 239, 245, 249; 26 | --tile-end-rgb: 228, 232, 233; 27 | --tile-border: conic-gradient( 28 | #00000080, 29 | #00000040, 30 | #00000030, 31 | #00000020, 32 | #00000010, 33 | #00000010, 34 | #00000080 35 | ); 36 | 37 | --callout-rgb: 238, 240, 241; 38 | --callout-border-rgb: 172, 175, 176; 39 | --card-rgb: 180, 185, 188; 40 | --card-border-rgb: 131, 134, 135; 41 | } 42 | 43 | @media (prefers-color-scheme: dark) { 44 | :root { 45 | --foreground-rgb: 255, 255, 255; 46 | --background-start-rgb: 0, 0, 0; 47 | --background-end-rgb: 0, 0, 0; 48 | 49 | --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); 50 | --secondary-glow: linear-gradient( 51 | to bottom right, 52 | rgba(1, 65, 255, 0), 53 | rgba(1, 65, 255, 0), 54 | rgba(1, 65, 255, 0.3) 55 | ); 56 | 57 | --tile-start-rgb: 2, 13, 46; 58 | --tile-end-rgb: 2, 5, 19; 59 | --tile-border: conic-gradient( 60 | #ffffff80, 61 | #ffffff40, 62 | #ffffff30, 63 | #ffffff20, 64 | #ffffff10, 65 | #ffffff10, 66 | #ffffff80 67 | ); 68 | 69 | --callout-rgb: 20, 20, 20; 70 | --callout-border-rgb: 108, 108, 108; 71 | --card-rgb: 100, 100, 100; 72 | --card-border-rgb: 200, 200, 200; 73 | } 74 | } 75 | 76 | * { 77 | box-sizing: border-box; 78 | padding: 0; 79 | margin: 0; 80 | } 81 | 82 | html, 83 | body { 84 | max-width: 100vw; 85 | overflow-x: hidden; 86 | } 87 | 88 | body { 89 | color: rgb(var(--foreground-rgb)); 90 | background: linear-gradient( 91 | to bottom, 92 | transparent, 93 | rgb(var(--background-end-rgb)) 94 | ) 95 | rgb(var(--background-start-rgb)); 96 | } 97 | 98 | a { 99 | color: inherit; 100 | text-decoration: none; 101 | } 102 | 103 | @media (prefers-color-scheme: dark) { 104 | html { 105 | color-scheme: dark; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /app/head.tsx: -------------------------------------------------------------------------------- 1 | export default function Head() { 2 | return ( 3 | <> 4 | Create Next App 5 | 6 | 7 | 8 | 9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /app/layout.tsx: -------------------------------------------------------------------------------- 1 | import './globals.css' 2 | 3 | export default function RootLayout({ 4 | children, 5 | }: { 6 | children: React.ReactNode 7 | }) { 8 | return ( 9 | 10 | {/* 11 | will contain the components returned by the nearest parent 12 | head.tsx. Find out more at https://beta.nextjs.org/docs/api-reference/file-conventions/head 13 | */} 14 | 15 | {children} 16 | 17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /app/page.module.css: -------------------------------------------------------------------------------- 1 | .main { 2 | display: flex; 3 | flex-direction: column; 4 | justify-content: space-between; 5 | align-items: center; 6 | padding: 6rem; 7 | min-height: 100vh; 8 | } 9 | 10 | .description { 11 | display: inherit; 12 | justify-content: inherit; 13 | align-items: inherit; 14 | font-size: 0.85rem; 15 | max-width: var(--max-width); 16 | width: 100%; 17 | z-index: 2; 18 | font-family: var(--font-mono); 19 | } 20 | 21 | .description a { 22 | display: flex; 23 | align-items: center; 24 | justify-content: center; 25 | gap: 0.5rem; 26 | } 27 | 28 | .description p { 29 | position: relative; 30 | margin: 0; 31 | padding: 1rem; 32 | background-color: rgba(var(--callout-rgb), 0.5); 33 | border: 1px solid rgba(var(--callout-border-rgb), 0.3); 34 | border-radius: var(--border-radius); 35 | } 36 | 37 | .code { 38 | font-weight: 700; 39 | font-family: var(--font-mono); 40 | } 41 | 42 | .grid { 43 | display: grid; 44 | grid-template-columns: repeat(3, minmax(33%, auto)); 45 | width: var(--max-width); 46 | max-width: 100%; 47 | } 48 | 49 | .card { 50 | padding: 1rem 1.2rem; 51 | border-radius: var(--border-radius); 52 | background: rgba(var(--card-rgb), 0); 53 | border: 1px solid rgba(var(--card-border-rgb), 0); 54 | transition: background 200ms, border 200ms; 55 | } 56 | 57 | .card span { 58 | display: inline-block; 59 | transition: transform 200ms; 60 | } 61 | 62 | .card h2 { 63 | font-weight: 600; 64 | margin-bottom: 0.7rem; 65 | } 66 | 67 | .card p { 68 | margin: 0; 69 | opacity: 0.6; 70 | font-size: 0.9rem; 71 | line-height: 1.5; 72 | max-width: 34ch; 73 | } 74 | 75 | .center { 76 | display: flex; 77 | justify-content: center; 78 | align-items: center; 79 | position: relative; 80 | padding: 4rem 0; 81 | } 82 | 83 | .center::before { 84 | background: var(--secondary-glow); 85 | border-radius: 50%; 86 | width: 480px; 87 | height: 360px; 88 | margin-left: -400px; 89 | } 90 | 91 | .center::after { 92 | background: var(--primary-glow); 93 | width: 240px; 94 | height: 180px; 95 | z-index: -1; 96 | } 97 | 98 | .center::before, 99 | .center::after { 100 | content: ''; 101 | left: 50%; 102 | position: absolute; 103 | filter: blur(45px); 104 | transform: translateZ(0); 105 | } 106 | 107 | .logo, 108 | .thirteen { 109 | position: relative; 110 | } 111 | 112 | .thirteen { 113 | display: flex; 114 | justify-content: center; 115 | align-items: center; 116 | width: 75px; 117 | height: 75px; 118 | padding: 25px 10px; 119 | margin-left: 16px; 120 | transform: translateZ(0); 121 | border-radius: var(--border-radius); 122 | overflow: hidden; 123 | box-shadow: 0px 2px 8px -1px #0000001a; 124 | } 125 | 126 | .thirteen::before, 127 | .thirteen::after { 128 | content: ''; 129 | position: absolute; 130 | z-index: -1; 131 | } 132 | 133 | /* Conic Gradient Animation */ 134 | .thirteen::before { 135 | animation: 6s rotate linear infinite; 136 | width: 200%; 137 | height: 200%; 138 | background: var(--tile-border); 139 | } 140 | 141 | /* Inner Square */ 142 | .thirteen::after { 143 | inset: 0; 144 | padding: 1px; 145 | border-radius: var(--border-radius); 146 | background: linear-gradient( 147 | to bottom right, 148 | rgba(var(--tile-start-rgb), 1), 149 | rgba(var(--tile-end-rgb), 1) 150 | ); 151 | background-clip: content-box; 152 | } 153 | 154 | /* Enable hover only on non-touch devices */ 155 | @media (hover: hover) and (pointer: fine) { 156 | .card:hover { 157 | background: rgba(var(--card-rgb), 0.1); 158 | border: 1px solid rgba(var(--card-border-rgb), 0.15); 159 | } 160 | 161 | .card:hover span { 162 | transform: translateX(4px); 163 | } 164 | } 165 | 166 | @media (prefers-reduced-motion) { 167 | .thirteen::before { 168 | animation: none; 169 | } 170 | 171 | .card:hover span { 172 | transform: none; 173 | } 174 | } 175 | 176 | /* Mobile and Tablet */ 177 | @media (max-width: 1023px) { 178 | .content { 179 | padding: 4rem; 180 | } 181 | 182 | .grid { 183 | grid-template-columns: 1fr; 184 | margin-bottom: 120px; 185 | max-width: 320px; 186 | text-align: center; 187 | } 188 | 189 | .card { 190 | padding: 1rem 2.5rem; 191 | } 192 | 193 | .card h2 { 194 | margin-bottom: 0.5rem; 195 | } 196 | 197 | .center { 198 | padding: 8rem 0 6rem; 199 | } 200 | 201 | .center::before { 202 | transform: none; 203 | height: 300px; 204 | } 205 | 206 | .description { 207 | font-size: 0.8rem; 208 | } 209 | 210 | .description a { 211 | padding: 1rem; 212 | } 213 | 214 | .description p, 215 | .description div { 216 | display: flex; 217 | justify-content: center; 218 | position: fixed; 219 | width: 100%; 220 | } 221 | 222 | .description p { 223 | align-items: center; 224 | inset: 0 0 auto; 225 | padding: 2rem 1rem 1.4rem; 226 | border-radius: 0; 227 | border: none; 228 | border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); 229 | background: linear-gradient( 230 | to bottom, 231 | rgba(var(--background-start-rgb), 1), 232 | rgba(var(--callout-rgb), 0.5) 233 | ); 234 | background-clip: padding-box; 235 | backdrop-filter: blur(24px); 236 | } 237 | 238 | .description div { 239 | align-items: flex-end; 240 | pointer-events: none; 241 | inset: auto 0 0; 242 | padding: 2rem; 243 | height: 200px; 244 | background: linear-gradient( 245 | to bottom, 246 | transparent 0%, 247 | rgb(var(--background-end-rgb)) 40% 248 | ); 249 | z-index: 1; 250 | } 251 | } 252 | 253 | @media (prefers-color-scheme: dark) { 254 | .vercelLogo { 255 | filter: invert(1); 256 | } 257 | 258 | .logo, 259 | .thirteen img { 260 | filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); 261 | } 262 | } 263 | 264 | @keyframes rotate { 265 | from { 266 | transform: rotate(360deg); 267 | } 268 | to { 269 | transform: rotate(0deg); 270 | } 271 | } 272 | -------------------------------------------------------------------------------- /app/page.tsx: -------------------------------------------------------------------------------- 1 | import Image from 'next/image' 2 | import { Inter } from '@next/font/google' 3 | import styles from './page.module.css' 4 | 5 | const inter = Inter({ subsets: ['latin'] }) 6 | 7 | export default function Home() { 8 | return ( 9 |
10 |
11 |

12 | Get started by editing  13 | app/page.tsx 14 |

15 |
16 | 21 | By{' '} 22 | Vercel Logo 30 | 31 |
32 |
33 | 34 |
35 | Next.js Logo 43 |
44 | 13 45 |
46 |
47 | 48 |
49 | 55 |

56 | Docs -> 57 |

58 |

59 | Find in-depth information about Next.js features and API. 60 |

61 |
62 | 63 | 69 |

70 | Templates -> 71 |

72 |

Explore the Next.js 13 playground.

73 |
74 | 75 | 81 |

82 | Deploy -> 83 |

84 |

85 | Instantly deploy your Next.js site to a shareable URL with Vercel. 86 |

87 |
88 |
89 |
90 | ) 91 | } 92 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | experimental: { 4 | appDir: true, 5 | }, 6 | } 7 | 8 | module.exports = nextConfig 9 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-next13", 3 | "version": "0.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "typescript-next13", 9 | "version": "0.1.0", 10 | "dependencies": { 11 | "@next/font": "13.1.6", 12 | "@types/node": "18.11.18", 13 | "@types/react": "18.0.27", 14 | "@types/react-dom": "18.0.10", 15 | "next": "13.1.6", 16 | "react": "18.2.0", 17 | "react-dom": "18.2.0", 18 | "typescript": "4.9.4" 19 | }, 20 | "devDependencies": { 21 | "prisma": "^4.9.0" 22 | } 23 | }, 24 | "node_modules/@next/env": { 25 | "version": "13.1.6", 26 | "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.6.tgz", 27 | "integrity": "sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==" 28 | }, 29 | "node_modules/@next/font": { 30 | "version": "13.1.6", 31 | "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.6.tgz", 32 | "integrity": "sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ==" 33 | }, 34 | "node_modules/@next/swc-android-arm-eabi": { 35 | "version": "13.1.6", 36 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz", 37 | "integrity": "sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==", 38 | "cpu": [ 39 | "arm" 40 | ], 41 | "optional": true, 42 | "os": [ 43 | "android" 44 | ], 45 | "engines": { 46 | "node": ">= 10" 47 | } 48 | }, 49 | "node_modules/@next/swc-android-arm64": { 50 | "version": "13.1.6", 51 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz", 52 | "integrity": "sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==", 53 | "cpu": [ 54 | "arm64" 55 | ], 56 | "optional": true, 57 | "os": [ 58 | "android" 59 | ], 60 | "engines": { 61 | "node": ">= 10" 62 | } 63 | }, 64 | "node_modules/@next/swc-darwin-arm64": { 65 | "version": "13.1.6", 66 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz", 67 | "integrity": "sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==", 68 | "cpu": [ 69 | "arm64" 70 | ], 71 | "optional": true, 72 | "os": [ 73 | "darwin" 74 | ], 75 | "engines": { 76 | "node": ">= 10" 77 | } 78 | }, 79 | "node_modules/@next/swc-darwin-x64": { 80 | "version": "13.1.6", 81 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz", 82 | "integrity": "sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==", 83 | "cpu": [ 84 | "x64" 85 | ], 86 | "optional": true, 87 | "os": [ 88 | "darwin" 89 | ], 90 | "engines": { 91 | "node": ">= 10" 92 | } 93 | }, 94 | "node_modules/@next/swc-freebsd-x64": { 95 | "version": "13.1.6", 96 | "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz", 97 | "integrity": "sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==", 98 | "cpu": [ 99 | "x64" 100 | ], 101 | "optional": true, 102 | "os": [ 103 | "freebsd" 104 | ], 105 | "engines": { 106 | "node": ">= 10" 107 | } 108 | }, 109 | "node_modules/@next/swc-linux-arm-gnueabihf": { 110 | "version": "13.1.6", 111 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz", 112 | "integrity": "sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==", 113 | "cpu": [ 114 | "arm" 115 | ], 116 | "optional": true, 117 | "os": [ 118 | "linux" 119 | ], 120 | "engines": { 121 | "node": ">= 10" 122 | } 123 | }, 124 | "node_modules/@next/swc-linux-arm64-gnu": { 125 | "version": "13.1.6", 126 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz", 127 | "integrity": "sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==", 128 | "cpu": [ 129 | "arm64" 130 | ], 131 | "optional": true, 132 | "os": [ 133 | "linux" 134 | ], 135 | "engines": { 136 | "node": ">= 10" 137 | } 138 | }, 139 | "node_modules/@next/swc-linux-arm64-musl": { 140 | "version": "13.1.6", 141 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz", 142 | "integrity": "sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==", 143 | "cpu": [ 144 | "arm64" 145 | ], 146 | "optional": true, 147 | "os": [ 148 | "linux" 149 | ], 150 | "engines": { 151 | "node": ">= 10" 152 | } 153 | }, 154 | "node_modules/@next/swc-linux-x64-gnu": { 155 | "version": "13.1.6", 156 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz", 157 | "integrity": "sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==", 158 | "cpu": [ 159 | "x64" 160 | ], 161 | "optional": true, 162 | "os": [ 163 | "linux" 164 | ], 165 | "engines": { 166 | "node": ">= 10" 167 | } 168 | }, 169 | "node_modules/@next/swc-linux-x64-musl": { 170 | "version": "13.1.6", 171 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz", 172 | "integrity": "sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==", 173 | "cpu": [ 174 | "x64" 175 | ], 176 | "optional": true, 177 | "os": [ 178 | "linux" 179 | ], 180 | "engines": { 181 | "node": ">= 10" 182 | } 183 | }, 184 | "node_modules/@next/swc-win32-arm64-msvc": { 185 | "version": "13.1.6", 186 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz", 187 | "integrity": "sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==", 188 | "cpu": [ 189 | "arm64" 190 | ], 191 | "optional": true, 192 | "os": [ 193 | "win32" 194 | ], 195 | "engines": { 196 | "node": ">= 10" 197 | } 198 | }, 199 | "node_modules/@next/swc-win32-ia32-msvc": { 200 | "version": "13.1.6", 201 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz", 202 | "integrity": "sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==", 203 | "cpu": [ 204 | "ia32" 205 | ], 206 | "optional": true, 207 | "os": [ 208 | "win32" 209 | ], 210 | "engines": { 211 | "node": ">= 10" 212 | } 213 | }, 214 | "node_modules/@next/swc-win32-x64-msvc": { 215 | "version": "13.1.6", 216 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz", 217 | "integrity": "sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==", 218 | "cpu": [ 219 | "x64" 220 | ], 221 | "optional": true, 222 | "os": [ 223 | "win32" 224 | ], 225 | "engines": { 226 | "node": ">= 10" 227 | } 228 | }, 229 | "node_modules/@prisma/engines": { 230 | "version": "4.9.0", 231 | "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.9.0.tgz", 232 | "integrity": "sha512-t1pt0Gsp+HcgPJrHFc+d/ZSAaKKWar2G/iakrE07yeKPNavDP3iVKPpfXP22OTCHZUWf7OelwKJxQgKAm5hkgw==", 233 | "dev": true, 234 | "hasInstallScript": true 235 | }, 236 | "node_modules/@swc/helpers": { 237 | "version": "0.4.14", 238 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", 239 | "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", 240 | "dependencies": { 241 | "tslib": "^2.4.0" 242 | } 243 | }, 244 | "node_modules/@types/node": { 245 | "version": "18.11.18", 246 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", 247 | "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" 248 | }, 249 | "node_modules/@types/prop-types": { 250 | "version": "15.7.5", 251 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", 252 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" 253 | }, 254 | "node_modules/@types/react": { 255 | "version": "18.0.27", 256 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz", 257 | "integrity": "sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==", 258 | "dependencies": { 259 | "@types/prop-types": "*", 260 | "@types/scheduler": "*", 261 | "csstype": "^3.0.2" 262 | } 263 | }, 264 | "node_modules/@types/react-dom": { 265 | "version": "18.0.10", 266 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", 267 | "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", 268 | "dependencies": { 269 | "@types/react": "*" 270 | } 271 | }, 272 | "node_modules/@types/scheduler": { 273 | "version": "0.16.2", 274 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", 275 | "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" 276 | }, 277 | "node_modules/caniuse-lite": { 278 | "version": "1.0.30001449", 279 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz", 280 | "integrity": "sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw==", 281 | "funding": [ 282 | { 283 | "type": "opencollective", 284 | "url": "https://opencollective.com/browserslist" 285 | }, 286 | { 287 | "type": "tidelift", 288 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 289 | } 290 | ] 291 | }, 292 | "node_modules/client-only": { 293 | "version": "0.0.1", 294 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", 295 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" 296 | }, 297 | "node_modules/csstype": { 298 | "version": "3.1.1", 299 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", 300 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" 301 | }, 302 | "node_modules/js-tokens": { 303 | "version": "4.0.0", 304 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 305 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 306 | }, 307 | "node_modules/loose-envify": { 308 | "version": "1.4.0", 309 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 310 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 311 | "dependencies": { 312 | "js-tokens": "^3.0.0 || ^4.0.0" 313 | }, 314 | "bin": { 315 | "loose-envify": "cli.js" 316 | } 317 | }, 318 | "node_modules/nanoid": { 319 | "version": "3.3.4", 320 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 321 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 322 | "bin": { 323 | "nanoid": "bin/nanoid.cjs" 324 | }, 325 | "engines": { 326 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 327 | } 328 | }, 329 | "node_modules/next": { 330 | "version": "13.1.6", 331 | "resolved": "https://registry.npmjs.org/next/-/next-13.1.6.tgz", 332 | "integrity": "sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==", 333 | "dependencies": { 334 | "@next/env": "13.1.6", 335 | "@swc/helpers": "0.4.14", 336 | "caniuse-lite": "^1.0.30001406", 337 | "postcss": "8.4.14", 338 | "styled-jsx": "5.1.1" 339 | }, 340 | "bin": { 341 | "next": "dist/bin/next" 342 | }, 343 | "engines": { 344 | "node": ">=14.6.0" 345 | }, 346 | "optionalDependencies": { 347 | "@next/swc-android-arm-eabi": "13.1.6", 348 | "@next/swc-android-arm64": "13.1.6", 349 | "@next/swc-darwin-arm64": "13.1.6", 350 | "@next/swc-darwin-x64": "13.1.6", 351 | "@next/swc-freebsd-x64": "13.1.6", 352 | "@next/swc-linux-arm-gnueabihf": "13.1.6", 353 | "@next/swc-linux-arm64-gnu": "13.1.6", 354 | "@next/swc-linux-arm64-musl": "13.1.6", 355 | "@next/swc-linux-x64-gnu": "13.1.6", 356 | "@next/swc-linux-x64-musl": "13.1.6", 357 | "@next/swc-win32-arm64-msvc": "13.1.6", 358 | "@next/swc-win32-ia32-msvc": "13.1.6", 359 | "@next/swc-win32-x64-msvc": "13.1.6" 360 | }, 361 | "peerDependencies": { 362 | "fibers": ">= 3.1.0", 363 | "node-sass": "^6.0.0 || ^7.0.0", 364 | "react": "^18.2.0", 365 | "react-dom": "^18.2.0", 366 | "sass": "^1.3.0" 367 | }, 368 | "peerDependenciesMeta": { 369 | "fibers": { 370 | "optional": true 371 | }, 372 | "node-sass": { 373 | "optional": true 374 | }, 375 | "sass": { 376 | "optional": true 377 | } 378 | } 379 | }, 380 | "node_modules/picocolors": { 381 | "version": "1.0.0", 382 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 383 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 384 | }, 385 | "node_modules/postcss": { 386 | "version": "8.4.14", 387 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 388 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 389 | "funding": [ 390 | { 391 | "type": "opencollective", 392 | "url": "https://opencollective.com/postcss/" 393 | }, 394 | { 395 | "type": "tidelift", 396 | "url": "https://tidelift.com/funding/github/npm/postcss" 397 | } 398 | ], 399 | "dependencies": { 400 | "nanoid": "^3.3.4", 401 | "picocolors": "^1.0.0", 402 | "source-map-js": "^1.0.2" 403 | }, 404 | "engines": { 405 | "node": "^10 || ^12 || >=14" 406 | } 407 | }, 408 | "node_modules/prisma": { 409 | "version": "4.9.0", 410 | "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.9.0.tgz", 411 | "integrity": "sha512-bS96oZ5oDFXYgoF2l7PJ3Mp1wWWfLOo8B/jAfbA2Pn0Wm5Z/owBHzaMQKS3i1CzVBDWWPVnOohmbJmjvkcHS5w==", 412 | "dev": true, 413 | "hasInstallScript": true, 414 | "dependencies": { 415 | "@prisma/engines": "4.9.0" 416 | }, 417 | "bin": { 418 | "prisma": "build/index.js", 419 | "prisma2": "build/index.js" 420 | }, 421 | "engines": { 422 | "node": ">=14.17" 423 | } 424 | }, 425 | "node_modules/react": { 426 | "version": "18.2.0", 427 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 428 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 429 | "dependencies": { 430 | "loose-envify": "^1.1.0" 431 | }, 432 | "engines": { 433 | "node": ">=0.10.0" 434 | } 435 | }, 436 | "node_modules/react-dom": { 437 | "version": "18.2.0", 438 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 439 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 440 | "dependencies": { 441 | "loose-envify": "^1.1.0", 442 | "scheduler": "^0.23.0" 443 | }, 444 | "peerDependencies": { 445 | "react": "^18.2.0" 446 | } 447 | }, 448 | "node_modules/scheduler": { 449 | "version": "0.23.0", 450 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 451 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 452 | "dependencies": { 453 | "loose-envify": "^1.1.0" 454 | } 455 | }, 456 | "node_modules/source-map-js": { 457 | "version": "1.0.2", 458 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 459 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 460 | "engines": { 461 | "node": ">=0.10.0" 462 | } 463 | }, 464 | "node_modules/styled-jsx": { 465 | "version": "5.1.1", 466 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", 467 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", 468 | "dependencies": { 469 | "client-only": "0.0.1" 470 | }, 471 | "engines": { 472 | "node": ">= 12.0.0" 473 | }, 474 | "peerDependencies": { 475 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" 476 | }, 477 | "peerDependenciesMeta": { 478 | "@babel/core": { 479 | "optional": true 480 | }, 481 | "babel-plugin-macros": { 482 | "optional": true 483 | } 484 | } 485 | }, 486 | "node_modules/tslib": { 487 | "version": "2.5.0", 488 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", 489 | "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" 490 | }, 491 | "node_modules/typescript": { 492 | "version": "4.9.4", 493 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", 494 | "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", 495 | "bin": { 496 | "tsc": "bin/tsc", 497 | "tsserver": "bin/tsserver" 498 | }, 499 | "engines": { 500 | "node": ">=4.2.0" 501 | } 502 | } 503 | } 504 | } 505 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-next13", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@next/font": "13.1.6", 13 | "@types/node": "18.11.18", 14 | "@types/react": "18.0.27", 15 | "@types/react-dom": "18.0.10", 16 | "next": "13.1.6", 17 | "react": "18.2.0", 18 | "react-dom": "18.2.0", 19 | "typescript": "4.9.4" 20 | }, 21 | "devDependencies": { 22 | "prisma": "^4.9.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | import type { NextApiRequest, NextApiResponse } from 'next' 3 | 4 | type Data = { 5 | name: string 6 | } 7 | 8 | export default function handler( 9 | req: NextApiRequest, 10 | res: NextApiResponse 11 | ) { 12 | res.status(200).json({ name: 'John Doe' }) 13 | } 14 | -------------------------------------------------------------------------------- /prisma/schema.prisma: -------------------------------------------------------------------------------- 1 | // This is your Prisma schema file, 2 | // learn more about it in the docs: https://pris.ly/d/prisma-schema 3 | 4 | generator client { 5 | provider = "prisma-client-js" 6 | } 7 | 8 | datasource db { 9 | provider = "postgresql" 10 | url = env("DATABASE_URL") 11 | } 12 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developedbyed/typescript-next13/b83445a8c51311fb04f62fd252eea3becfc478bf/public/favicon.ico -------------------------------------------------------------------------------- /public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/thirteen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true, 17 | "plugins": [ 18 | { 19 | "name": "next" 20 | } 21 | ], 22 | "baseUrl": ".", 23 | "paths": { 24 | "@/*": ["./*"] 25 | } 26 | }, 27 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 28 | "exclude": ["node_modules"] 29 | } 30 | --------------------------------------------------------------------------------