chore(templates): deprecate vercel-postgres, superceded by with-vercel-postgres

This commit is contained in:
Elliot DeNolf
2024-11-16 15:24:10 -05:00
parent aacc4745b6
commit 67ff23a6e2
41 changed files with 0 additions and 1378 deletions

View File

@@ -1,3 +0,0 @@
POSTGRES_URL=postgres://127.0.0.1:5432/payload
PAYLOAD_SECRET=
BLOB_READ_WRITE_TOKEN=vercel_blob_rw_examplestoreid_somethingelse

View File

@@ -1,10 +0,0 @@
.tmp
**/.git
**/.hg
**/.pnp.*
**/.svn
**/.yarn/**
**/build
**/dist/**
**/node_modules
**/temp

View File

@@ -1,3 +0,0 @@
{
"extends": "next/core-web-vitals"
}

View File

@@ -1,38 +0,0 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
.env
# dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env*.local
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts

View File

@@ -1,6 +0,0 @@
{
"singleQuote": true,
"trailingComma": "all",
"printWidth": 100,
"semi": false
}

View File

@@ -1,7 +0,0 @@
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fpayloadcms%2Fpayload%2Ftemplates%2Fvercel-postgres&project-name=payload-project&env=PAYLOAD_SECRET&build-command=pnpm%20run%20ci&stores=%5B%7B%22type%22%3A%22postgres%22%7D%2C%7B%22type%22%3A%22blob%22%7D%5D)
> One-click deployment template of Payload on Vercel
- [Payload](https://github.com/payloadcms/payload) already installed into Next.js
- PostgreSQL adapter configured for Neon
- Cloud Storage plugin configured for [Vercel Blob Storage](https://vercel.com/docs/storage/vercel-blob)

View File

@@ -1,5 +0,0 @@
import { withPayload } from '@payloadcms/next/withPayload'
/** @type {import('next').NextConfig} */
const nextConfig = {}
export default withPayload(nextConfig)

View File

@@ -1,51 +0,0 @@
{
"name": "vercel-deploy-payload-postgres",
"version": "0.1.0",
"private": true,
"scripts": {
"build": "next build",
"ci": "payload migrate && pnpm build",
"dev": "next dev",
"generate:types": "payload generate:types",
"lint": "next lint",
"payload": "cross-env NODE_OPTIONS=--no-deprecation payload",
"start": "next start"
},
"dependencies": {
"@payloadcms/db-postgres": "beta",
"@payloadcms/next": "beta",
"@payloadcms/richtext-lexical": "beta",
"@payloadcms/storage-vercel-blob": "beta",
"@vercel/blob": "^0.22.3",
"cross-env": "^7.0.3",
"next": "15.0.0",
"payload": "beta",
"react": "19.0.0-rc-65a56d0e-20241020",
"react-dom": "19.0.0-rc-65a56d0e-20241020",
"sharp": "0.32.6"
},
"devDependencies": {
"@types/node": "^22.5.4",
"@types/react": "npm:types-react@19.0.0-rc.1",
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
"autoprefixer": "^10.0.1",
"eslint": "^8",
"eslint-config-next": "15.0.0",
"postcss": "^8",
"tailwindcss": "^3.3.0",
"typescript": "5.6.3"
},
"engines": {
"node": "^18.20.2 || >=20.9.0"
},
"pnpm": {
"overrides": {
"@types/react": "npm:types-react@19.0.0-rc.1",
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1"
}
},
"overrides": {
"@types/react": "npm:types-react@19.0.0-rc.1",
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1"
}
}

View File

@@ -1,6 +0,0 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

View File

@@ -1,4 +0,0 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.44141 1L13.0017 1V11.56" stroke="white"/>
<path d="M1 13L13.0004 1" stroke="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

View File

@@ -1,3 +0,0 @@
<svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10 0H9V9H0V10H9V19H10V10H19V9H10V0Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 165 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#fff" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#fff" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,15 +0,0 @@
<svg width="206" height="51" viewBox="0 0 206 51" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M59.3813 40.2546H64.1598V28.3616H72.3267C78.1912 28.3616 82.4918 25.819 82.4918 19.6675C82.4918 13.5159 78.1912 10.9323 72.3267 10.9323H59.3813V40.2546ZM64.1598 24.4657V14.8283H72.1095C75.7151 14.8283 77.5396 16.3456 77.5396 19.6675C77.5396 22.9483 75.7151 24.4657 72.1095 24.4657H64.1598ZM90.7741 40.8287C94.3797 40.8287 96.8992 39.4754 98.3328 37.3018H98.4197C98.6803 39.6804 99.8098 40.4596 101.938 40.4596C102.633 40.4596 103.372 40.3776 104.11 40.2136V37.753C103.85 37.794 103.719 37.794 103.589 37.794C102.764 37.794 102.547 37.0148 102.547 35.4974V25.901C102.547 20.4877 98.8975 18.6832 94.3362 18.6832C87.5595 18.6832 84.7793 21.841 84.5621 25.86H88.9061C89.1233 23.0713 90.2962 21.923 94.1625 21.923C97.4205 21.923 98.3762 23.1943 98.3762 24.7117C98.3762 26.7622 96.2476 27.1723 92.7724 27.7875C87.2554 28.7717 83.5195 30.1661 83.5195 34.8412C83.5195 38.4091 86.3431 40.8287 90.7741 40.8287ZM87.9504 34.5542C87.9504 32.3806 89.6012 31.3554 93.5109 30.6172C95.7698 30.1661 97.6812 29.715 98.3762 29.0998V32.0935C98.3762 35.7435 95.5526 37.5889 91.7298 37.5889C89.0799 37.5889 87.9504 36.5227 87.9504 34.5542ZM109.915 47.5954C113.347 47.5954 115.476 45.914 117.604 40.7467L126.379 19.3394H121.905L115.823 35.3334H115.736L109.264 19.3394H104.615L113.564 40.0495C112.695 43.3303 110.697 44.1505 109.003 44.1505C108.308 44.1505 107.917 44.1095 107.178 44.0275V47.3083C108.308 47.5134 108.96 47.5954 109.915 47.5954ZM128.981 40.2546H133.238V10.9323H128.981V40.2546ZM147.921 40.8697C154.828 40.8697 158.998 36.3176 158.998 29.756C158.998 23.2353 154.828 18.6832 147.964 18.6832C141.014 18.6832 136.844 23.2764 136.844 29.797C136.844 36.3586 141.014 40.8697 147.921 40.8697ZM141.275 29.797C141.275 25.4089 143.36 22.046 147.964 22.046C152.482 22.046 154.567 25.4089 154.567 29.797C154.567 34.1441 152.482 37.5479 147.964 37.5479C143.36 37.5479 141.275 34.1441 141.275 29.797ZM168.747 40.8287C172.352 40.8287 174.872 39.4754 176.305 37.3018H176.392C176.653 39.6804 177.782 40.4596 179.911 40.4596C180.606 40.4596 181.345 40.3776 182.083 40.2136V37.753C181.822 37.794 181.692 37.794 181.562 37.794C180.736 37.794 180.519 37.0148 180.519 35.4974V25.901C180.519 20.4877 176.87 18.6832 172.309 18.6832C165.532 18.6832 162.752 21.841 162.535 25.86H166.879C167.096 23.0713 168.269 21.923 172.135 21.923C175.393 21.923 176.349 23.1943 176.349 24.7117C176.349 26.7622 174.22 27.1723 170.745 27.7875C165.228 28.7717 161.492 30.1661 161.492 34.8412C161.492 38.4091 164.316 40.8287 168.747 40.8287ZM165.923 34.5542C165.923 32.3806 167.574 31.3554 171.484 30.6172C173.742 30.1661 175.654 29.715 176.349 29.0998V32.0935C176.349 35.7435 173.525 37.5889 169.703 37.5889C167.053 37.5889 165.923 36.5227 165.923 34.5542ZM194.306 40.8287C197.781 40.8287 199.91 39.2703 201.126 37.794H201.213V40.2546H205.47V10.9323H201.213V21.882H201.126C199.91 20.2416 197.781 18.7242 194.306 18.7242C188.659 18.7242 184.358 22.9073 184.358 29.797C184.358 36.6867 188.659 40.8287 194.306 40.8287ZM188.789 29.797C188.789 25.696 190.831 22.0871 195.001 22.0871C198.824 22.0871 201.17 25.0398 201.17 29.797C201.17 34.5132 198.824 37.5069 195.001 37.5069C190.831 37.5069 188.789 33.898 188.789 29.797Z" fill="white"/>
<mask id="mask0_286_398" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="50" height="51">
<path d="M49.1069 0.467075H0V50.3925H49.1069V0.467075Z" fill="white"/>
</mask>
<g mask="url(#mask0_286_398)">
<mask id="mask1_286_398" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="7" y="0" width="35" height="46">
<path d="M41.7407 0.46706H7.36584V45.4H41.7407V0.46706Z" fill="white"/>
</mask>
<g mask="url(#mask1_286_398)">
<path d="M23.1296 3.41435L42.0938 15.0037V37.0013L27.8139 45.4V23.4025L8.82703 11.8283L23.1296 3.41435Z" fill="white"/>
<path d="M21.676 44.1804V27.015L7.36584 35.429L21.676 44.1804Z" fill="white"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 B

View File

@@ -1,56 +0,0 @@
* {
box-sizing: border-box;
}
:root {
--gutter: calc(50vw - 720px);
--gridline: linear-gradient(
rgba(255, 255, 255, 0.1),
rgba(255, 255, 255, 0.025),
rgba(255, 255, 255, 0.025),
rgba(255, 255, 255, 0.1),
rgba(255, 255, 255, 0.1)
);
@media screen and (max-width: 1600px) {
--gutter: 80px;
}
@media screen and (max-width: 1200px) {
--gutter: 40px;
--gridline: rgba(255, 255, 255, 0.1);
}
@media screen and (max-width: 600px) {
--gutter: 20px;
}
}
html {
width: 100%;
height: 100%;
background-color: #000000;
}
body {
color: #ffffff;
margin: 0;
width: 100%;
padding: 0;
overflow-x: hidden;
}
main {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
width: 100%;
height: 100vh;
pointer-events: none;
padding: 80px var(--gutter);
@media screen and (max-width: 1200px) {
height: auto;
}
}

View File

@@ -1,14 +0,0 @@
<svg width="48" height="50" viewBox="0 0 48 50" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_340_25" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="48" height="50">
<path d="M47.7995 0.467041H0V49.0633H47.7995V0.467041Z" fill="white"/>
</mask>
<g mask="url(#mask0_340_25)">
<mask id="mask1_340_25" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="7" y="0" width="34" height="45">
<path d="M40.6294 0.467041H7.16974V44.2036H40.6294V0.467041Z" fill="white"/>
</mask>
<g mask="url(#mask1_340_25)">
<path d="M22.514 3.33582L40.9732 14.6166V36.0285L27.0735 44.2036V22.7917L8.59213 11.5258L22.514 3.33582Z" fill="white"/>
<path d="M21.099 43.0165V26.3081L7.16986 34.4981L21.099 43.0165Z" fill="white"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 769 B

View File

@@ -1,25 +0,0 @@
import type { Metadata } from 'next'
import { Inter } from 'next/font/google'
import React from 'react'
import './globals.scss'
const inter = Inter({ subsets: ['latin'] })
export const metadata: Metadata = {
description: 'A Payload starter project with Next.js, Vercel Postgres, and Vercel Blob Storage.',
title: 'Payload Vercel Starter',
}
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode
}>) {
return (
<html lang="en">
<body className={inter.className}>{children}</body>
</html>
)
}

View File

@@ -1,14 +0,0 @@
import { Background } from '@/components/Background'
import { Links } from '@/components/Links'
import { Logos } from '@/components/Logos'
import React from 'react'
export default function Home() {
return (
<main>
<Logos />
<Links />
<Background />
</main>
)
}

View File

@@ -1,22 +0,0 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import type { Metadata } from 'next'
import config from '@payload-config'
import { NotFoundPage, generatePageMetadata } from '@payloadcms/next/views'
type Args = {
params: {
segments: string[]
}
searchParams: {
[key: string]: string | string[]
}
}
export const generateMetadata = ({ params, searchParams }: Args): Promise<Metadata> =>
generatePageMetadata({ config, params, searchParams })
const NotFound = ({ params, searchParams }: Args) => NotFoundPage({ config, params, searchParams })
export default NotFound

View File

@@ -1,22 +0,0 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import type { Metadata } from 'next'
import config from '@payload-config'
import { RootPage, generatePageMetadata } from '@payloadcms/next/views'
type Args = {
params: Promise<{
segments: string[]
}>
searchParams: Promise<{
[key: string]: string | string[]
}>
}
export const generateMetadata = ({ params, searchParams }: Args): Promise<Metadata> =>
generatePageMetadata({ config, params, searchParams })
const Page = ({ params, searchParams }: Args) => RootPage({ config, params, searchParams })
export default Page

View File

@@ -1,19 +0,0 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import config from '@payload-config'
import '@payloadcms/next/css'
import {
REST_DELETE,
REST_GET,
REST_OPTIONS,
REST_PATCH,
REST_POST,
REST_PUT,
} from '@payloadcms/next/routes'
export const GET = REST_GET(config)
export const POST = REST_POST(config)
export const DELETE = REST_DELETE(config)
export const PATCH = REST_PATCH(config)
export const PUT = REST_PUT(config)
export const OPTIONS = REST_OPTIONS(config)

View File

@@ -1,7 +0,0 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import config from '@payload-config'
import '@payloadcms/next/css'
import { GRAPHQL_PLAYGROUND_GET } from '@payloadcms/next/routes'
export const GET = GRAPHQL_PLAYGROUND_GET(config)

View File

@@ -1,8 +0,0 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import config from '@payload-config'
import { GRAPHQL_POST, REST_OPTIONS } from '@payloadcms/next/routes'
export const POST = GRAPHQL_POST(config)
export const OPTIONS = REST_OPTIONS(config)

View File

@@ -1,31 +0,0 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import config from '@payload-config'
import '@payloadcms/next/css'
import type { ServerFunctionClient } from 'payload'
import { handleServerFunctions, RootLayout } from '@payloadcms/next/layouts'
import React from 'react'
import { importMap } from './admin/importMap.js'
import './custom.scss'
type Args = {
children: React.ReactNode
}
const serverFunction: ServerFunctionClient = async function (args) {
'use server'
return handleServerFunctions({
...args,
config,
importMap,
})
}
const Layout = ({ children }: Args) => (
<RootLayout config={config} importMap={importMap} serverFunction={serverFunction}>
{children}
</RootLayout>
)
export default Layout

View File

@@ -1,16 +0,0 @@
import type { CollectionConfig } from 'payload'
export const Media: CollectionConfig = {
slug: 'media',
access: {
read: () => true,
},
fields: [
{
name: 'alt',
type: 'text',
required: true,
},
],
upload: true,
}

View File

@@ -1,13 +0,0 @@
import type { CollectionConfig } from 'payload'
export const Users: CollectionConfig = {
slug: 'users',
admin: {
useAsTitle: 'email',
},
auth: true,
fields: [
// Email added by default
// Add more fields as needed
],
}

View File

@@ -1,18 +0,0 @@
import React from 'react'
import styles from './styles.module.scss'
export const Background = () => {
return (
<div className={styles.background}>
<div className={styles.gridlineContainer}>
<div className={styles.hideMed} />
<div className={styles.hideMed} />
<div className={styles.hideSmall} />
<div />
</div>
<div className={styles.blur} />
<div className={styles.gradient} />
</div>
)
}

View File

@@ -1,84 +0,0 @@
.background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -2;
}
.blur {
display: block;
position: absolute;
width: 100%;
height: 100%;
background: url('/blur.png');
background-repeat: repeat;
background-size: 400px 400px;
background-blend-mode: soft-light, normal;
backdrop-filter: blur(60px);
z-index: -1;
}
.gradient {
display: block;
position: absolute;
width: 100%;
height: 100%;
background: url('/gradient.webp');
background-size: cover;
background-position: center;
z-index: -3;
}
.gridlineContainer {
position: fixed;
top: 0;
left: 0;
padding: 0 var(--gutter);
width: 100vw;
height: 100vh;
display: flex;
align-items: center;
z-index: 0;
& div {
position: relative;
display: block;
width: 100%;
height: 100%;
&::before {
content: '';
display: block;
position: absolute;
width: 1px;
height: 100%;
left: 0;
top: 0;
background: var(--gridline);
}
&:last-of-type::after {
content: '';
display: block;
position: absolute;
width: 1px;
height: 100%;
right: 0;
top: 0;
background: var(--gridline);
}
&.hideMed {
@media screen and (max-width: 1200px) {
display: none;
}
}
&.hideSmall {
@media screen and (max-width: 600px) {
display: none;
}
}
}
}

View File

@@ -1,31 +0,0 @@
import Link from 'next/link'
import React from 'react'
import styles from './styles.module.scss'
export const Links = () => {
return (
<div className={styles.links}>
<Link href="/admin">
<h6>Admin Panel</h6>
<span>Manage your site&apos;s content from the admin panel.</span>
<div className={styles.scanlines} />
</Link>
<Link href="https://payloadcms.com/docs">
<h6>Payload Docs</h6>
<span>Learn about how to build your backend with Payload.</span>
<div className={styles.scanlines} />
</Link>
<Link href="https://nextjs.org/docs">
<h6>Next.js Docs</h6>
<span>Find in-depth information about Next.js features and API.</span>
<div className={styles.scanlines} />
</Link>
<Link href="https://discord.gg/payload">
<h6>Need help?</h6>
<span>Join our Discord to ask questions and get help from the community.</span>
<div className={styles.scanlines} />
</Link>
</div>
)
}

View File

@@ -1,105 +0,0 @@
.links {
display: grid;
grid-template-columns: repeat(4, 1fr);
width: 100%;
margin: 0 var(--gutter);
border-block: 1px solid rgba(255, 255, 255, 0.1);
gap: 1px;
pointer-events: all;
@media screen and (max-width: 1200px) {
grid-template-columns: repeat(2, 1fr);
border-bottom: none;
}
@media screen and (max-width: 600px) {
grid-template-columns: 1fr;
}
a {
position: relative;
display: flex;
width: 100%;
padding: 24px;
padding-right: 48px;
flex-direction: column;
align-items: flex-start;
gap: 12px;
text-decoration: none;
color: rgba(255, 255, 255, 0.75);
@media screen and (max-width: 1200px) {
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
h6 {
margin: 0;
color: #fff;
font-size: 20px;
font-style: normal;
font-weight: 600;
line-height: normal;
letter-spacing: -0.02em;
@media screen and (max-width: 1200px) {
font-size: 16px;
}
}
span {
line-height: 1.5;
}
&::before {
display: block;
position: absolute;
content: url('/arrow.svg');
width: 12px;
height: 12px;
top: 24px;
right: 24px;
opacity: 0.25;
transition-property: top, right, opacity;
transition-duration: 0.3s;
}
&::after {
position: absolute;
left: 0;
bottom: 0;
content: ('');
display: block;
width: 0;
height: 2px;
background-color: #fff;
transition: width 0.3s;
}
&:hover {
&::before {
top: 20px;
right: 20px;
opacity: 1;
}
&::after {
width: 100%;
}
.scanlines {
opacity: 0.1;
}
}
}
}
.scanlines {
position: absolute;
top: 0px;
left: 0px;
right: 0px;
bottom: 0px;
background: url('/scanline-light.png');
opacity: 0;
transition: opacity 0.3s;
}

View File

@@ -1,28 +0,0 @@
import Image from 'next/image'
import React from 'react'
import styles from './styles.module.scss'
export const Logos = () => {
return (
<div className={styles.logos}>
<Image
alt="Payload Logo"
className={styles.payloadLogo}
height={100}
priority
src="/payload.svg"
width={200}
/>
<Image alt="" height={20} src="/crosshair.svg" width={20} />
<Image
alt="Next.js Logo"
className={styles.nextLogo}
height={80}
priority
src="/next.svg"
width={394}
/>
</div>
)
}

View File

@@ -1,48 +0,0 @@
.logos {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
height: 100%;
min-height: 50vh;
width: 100%;
gap: 80px;
@media screen and (max-width: 600px) {
gap: 40px;
flex-direction: column;
}
}
.payloadLogo {
width: 100%;
height: auto;
max-width: 320px;
display: flex;
justify-content: flex-end;
align-items: center;
}
.nextLogo {
width: 100%;
height: auto;
max-width: 320px;
display: flex;
justify-content: flex-start;
align-items: center;
color: #fff;
}
.payloadLogo,
.nextLogo {
@media screen and (max-width: 1200px) {
width: 25vw;
height: auto;
}
@media screen and (max-width: 600px) {
width: 50vw;
justify-content: center;
align-items: center;
}
}

View File

@@ -1,375 +0,0 @@
{
"id": "8146d795-d1a9-49be-857d-4320898b38fb",
"prevId": "00000000-0000-0000-0000-000000000000",
"version": "5",
"dialect": "pg",
"tables": {
"users": {
"name": "users",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"updated_at": {
"name": "updated_at",
"type": "timestamp(3) with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"created_at": {
"name": "created_at",
"type": "timestamp(3) with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"email": {
"name": "email",
"type": "varchar",
"primaryKey": false,
"notNull": true
},
"reset_password_token": {
"name": "reset_password_token",
"type": "varchar",
"primaryKey": false,
"notNull": false
},
"reset_password_expiration": {
"name": "reset_password_expiration",
"type": "timestamp(3) with time zone",
"primaryKey": false,
"notNull": false
},
"salt": {
"name": "salt",
"type": "varchar",
"primaryKey": false,
"notNull": false
},
"hash": {
"name": "hash",
"type": "varchar",
"primaryKey": false,
"notNull": false
},
"login_attempts": {
"name": "login_attempts",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"lock_until": {
"name": "lock_until",
"type": "timestamp(3) with time zone",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"users_created_at_idx": {
"name": "users_created_at_idx",
"columns": ["created_at"],
"isUnique": false
},
"users_email_idx": {
"name": "users_email_idx",
"columns": ["email"],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"media": {
"name": "media",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"alt": {
"name": "alt",
"type": "varchar",
"primaryKey": false,
"notNull": true
},
"updated_at": {
"name": "updated_at",
"type": "timestamp(3) with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"created_at": {
"name": "created_at",
"type": "timestamp(3) with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"url": {
"name": "url",
"type": "varchar",
"primaryKey": false,
"notNull": false
},
"thumbnail_u_r_l": {
"name": "thumbnail_u_r_l",
"type": "varchar",
"primaryKey": false,
"notNull": false
},
"filename": {
"name": "filename",
"type": "varchar",
"primaryKey": false,
"notNull": false
},
"mime_type": {
"name": "mime_type",
"type": "varchar",
"primaryKey": false,
"notNull": false
},
"filesize": {
"name": "filesize",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"width": {
"name": "width",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"height": {
"name": "height",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"focal_x": {
"name": "focal_x",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"focal_y": {
"name": "focal_y",
"type": "numeric",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"media_created_at_idx": {
"name": "media_created_at_idx",
"columns": ["created_at"],
"isUnique": false
},
"media_filename_idx": {
"name": "media_filename_idx",
"columns": ["filename"],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"payload_preferences": {
"name": "payload_preferences",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"key": {
"name": "key",
"type": "varchar",
"primaryKey": false,
"notNull": false
},
"value": {
"name": "value",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"updated_at": {
"name": "updated_at",
"type": "timestamp(3) with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"created_at": {
"name": "created_at",
"type": "timestamp(3) with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"payload_preferences_key_idx": {
"name": "payload_preferences_key_idx",
"columns": ["key"],
"isUnique": false
},
"payload_preferences_created_at_idx": {
"name": "payload_preferences_created_at_idx",
"columns": ["created_at"],
"isUnique": false
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"payload_preferences_rels": {
"name": "payload_preferences_rels",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"order": {
"name": "order",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"parent_id": {
"name": "parent_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"path": {
"name": "path",
"type": "varchar",
"primaryKey": false,
"notNull": true
},
"users_id": {
"name": "users_id",
"type": "integer",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"payload_preferences_rels_order_idx": {
"name": "payload_preferences_rels_order_idx",
"columns": ["order"],
"isUnique": false
},
"payload_preferences_rels_parent_idx": {
"name": "payload_preferences_rels_parent_idx",
"columns": ["parent_id"],
"isUnique": false
},
"payload_preferences_rels_path_idx": {
"name": "payload_preferences_rels_path_idx",
"columns": ["path"],
"isUnique": false
}
},
"foreignKeys": {
"payload_preferences_rels_parent_fk": {
"name": "payload_preferences_rels_parent_fk",
"tableFrom": "payload_preferences_rels",
"tableTo": "payload_preferences",
"columnsFrom": ["parent_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"payload_preferences_rels_users_fk": {
"name": "payload_preferences_rels_users_fk",
"tableFrom": "payload_preferences_rels",
"tableTo": "users",
"columnsFrom": ["users_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"payload_migrations": {
"name": "payload_migrations",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "varchar",
"primaryKey": false,
"notNull": false
},
"batch": {
"name": "batch",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"updated_at": {
"name": "updated_at",
"type": "timestamp(3) with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"created_at": {
"name": "created_at",
"type": "timestamp(3) with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"payload_migrations_created_at_idx": {
"name": "payload_migrations_created_at_idx",
"columns": ["created_at"],
"isUnique": false
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
}
},
"enums": {},
"schemas": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
}
}

View File

@@ -1,93 +0,0 @@
import type { MigrateDownArgs, MigrateUpArgs } from '@payloadcms/db-postgres'
import { sql } from '@payloadcms/db-postgres'
export async function up({ payload }: MigrateUpArgs): Promise<void> {
await payload.db.drizzle.execute(sql`
CREATE TABLE IF NOT EXISTS "users" (
"id" serial PRIMARY KEY NOT NULL,
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
"email" varchar NOT NULL,
"reset_password_token" varchar,
"reset_password_expiration" timestamp(3) with time zone,
"salt" varchar,
"hash" varchar,
"login_attempts" numeric,
"lock_until" timestamp(3) with time zone
);
CREATE TABLE IF NOT EXISTS "media" (
"id" serial PRIMARY KEY NOT NULL,
"alt" varchar NOT NULL,
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
"url" varchar,
"thumbnail_u_r_l" varchar,
"filename" varchar,
"mime_type" varchar,
"filesize" numeric,
"width" numeric,
"height" numeric,
"focal_x" numeric,
"focal_y" numeric
);
CREATE TABLE IF NOT EXISTS "payload_preferences" (
"id" serial PRIMARY KEY NOT NULL,
"key" varchar,
"value" jsonb,
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
);
CREATE TABLE IF NOT EXISTS "payload_preferences_rels" (
"id" serial PRIMARY KEY NOT NULL,
"order" integer,
"parent_id" integer NOT NULL,
"path" varchar NOT NULL,
"users_id" integer
);
CREATE TABLE IF NOT EXISTS "payload_migrations" (
"id" serial PRIMARY KEY NOT NULL,
"name" varchar,
"batch" numeric,
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
);
CREATE INDEX IF NOT EXISTS "users_created_at_idx" ON "users" ("created_at");
CREATE UNIQUE INDEX IF NOT EXISTS "users_email_idx" ON "users" ("email");
CREATE INDEX IF NOT EXISTS "media_created_at_idx" ON "media" ("created_at");
CREATE UNIQUE INDEX IF NOT EXISTS "media_filename_idx" ON "media" ("filename");
CREATE INDEX IF NOT EXISTS "payload_preferences_key_idx" ON "payload_preferences" ("key");
CREATE INDEX IF NOT EXISTS "payload_preferences_created_at_idx" ON "payload_preferences" ("created_at");
CREATE INDEX IF NOT EXISTS "payload_preferences_rels_order_idx" ON "payload_preferences_rels" ("order");
CREATE INDEX IF NOT EXISTS "payload_preferences_rels_parent_idx" ON "payload_preferences_rels" ("parent_id");
CREATE INDEX IF NOT EXISTS "payload_preferences_rels_path_idx" ON "payload_preferences_rels" ("path");
CREATE INDEX IF NOT EXISTS "payload_migrations_created_at_idx" ON "payload_migrations" ("created_at");
DO $$ BEGIN
ALTER TABLE "payload_preferences_rels" ADD CONSTRAINT "payload_preferences_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "payload_preferences"("id") ON DELETE cascade ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
DO $$ BEGIN
ALTER TABLE "payload_preferences_rels" ADD CONSTRAINT "payload_preferences_rels_users_fk" FOREIGN KEY ("users_id") REFERENCES "users"("id") ON DELETE cascade ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
`)
}
export async function down({ payload }: MigrateDownArgs): Promise<void> {
await payload.db.drizzle.execute(sql`
DROP TABLE "users";
DROP TABLE "media";
DROP TABLE "payload_preferences";
DROP TABLE "payload_preferences_rels";
DROP TABLE "payload_migrations";`)
}

View File

@@ -1,94 +0,0 @@
/* tslint:disable */
/* eslint-disable */
/**
* This file was automatically generated by Payload.
* DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config,
* and re-run `payload generate:types` to regenerate this file.
*/
export interface Config {
collections: {
users: User;
media: Media;
'payload-preferences': PayloadPreference;
'payload-migrations': PayloadMigration;
};
globals: {};
locale: null;
user: User & {
collection: 'users';
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "users".
*/
export interface User {
id: number;
updatedAt: string;
createdAt: string;
email: string;
resetPasswordToken?: string | null;
resetPasswordExpiration?: string | null;
salt?: string | null;
hash?: string | null;
loginAttempts?: number | null;
lockUntil?: string | null;
password?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "media".
*/
export interface Media {
id: number;
alt: string;
updatedAt: string;
createdAt: string;
url?: string | null;
thumbnailURL?: string | null;
filename?: string | null;
mimeType?: string | null;
filesize?: number | null;
width?: number | null;
height?: number | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-preferences".
*/
export interface PayloadPreference {
id: number;
user: {
relationTo: 'users';
value: number | User;
};
key?: string | null;
value?:
| {
[k: string]: unknown;
}
| unknown[]
| string
| number
| boolean
| null;
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-migrations".
*/
export interface PayloadMigration {
id: number;
name?: string | null;
batch?: number | null;
updatedAt: string;
createdAt: string;
}
declare module 'payload' {
export interface GeneratedTypes extends Config {}
}

View File

@@ -1,41 +0,0 @@
import { postgresAdapter } from '@payloadcms/db-postgres'
import { lexicalEditor } from '@payloadcms/richtext-lexical'
import { vercelBlobStorage } from '@payloadcms/storage-vercel-blob'
import path from 'path'
import { buildConfig } from 'payload'
import sharp from 'sharp'
import { fileURLToPath } from 'url'
import { Media } from './collections/Media'
import { Users } from './collections/Users'
const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename)
export default buildConfig({
admin: {
user: Users.slug,
},
collections: [Users, Media],
db: postgresAdapter({
pool: {
connectionString: process.env.POSTGRES_URL,
},
}),
editor: lexicalEditor({}),
plugins: [
vercelBlobStorage({
collections: {
media: true,
},
token: process.env.BLOB_READ_WRITE_TOKEN || '',
}),
],
secret: process.env.PAYLOAD_SECRET || '',
sharp,
typescript: {
outputFile: path.resolve(dirname, 'payload-types.ts'),
},
})

View File

@@ -1,19 +0,0 @@
import type { Config } from 'tailwindcss'
const config: Config = {
content: [
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
],
theme: {
extend: {
backgroundImage: {
'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
'gradient-conic': 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
},
},
},
plugins: [],
}
export default config

View File

@@ -1,43 +0,0 @@
{
"compilerOptions": {
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": [
"./src/*"
],
"@payload-config": [
"./src/payload.config.ts"
]
},
"target": "ES2017"
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts"
],
"exclude": [
"node_modules"
]
}