├── .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 | {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 |
32 |
33 |
34 |
47 |
48 |
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 |
--------------------------------------------------------------------------------
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 |