From 8a1a9546032804aa9e50d9630ffe9f18d7b3efea Mon Sep 17 00:00:00 2001
From: tockawaffle <98602240+tockawaffle@users.noreply.github.com>
Date: Tue, 10 Dec 2024 16:52:53 +0000
Subject: [PATCH] Initial commit
Created from https://vercel.com/new
---
.env.example | 4 +
.gitignore | 37 ++++
README.md | 96 +++++++++
app/(auth-pages)/forgot-password/page.tsx | 37 ++++
app/(auth-pages)/layout.tsx | 9 +
app/(auth-pages)/sign-in/page.tsx | 44 ++++
app/(auth-pages)/sign-up/page.tsx | 51 +++++
app/(auth-pages)/smtp-message.tsx | 25 +++
app/actions.ts | 134 ++++++++++++
app/auth/callback/route.ts | 24 +++
app/favicon.ico | Bin 0 -> 25931 bytes
app/globals.css | 69 ++++++
app/layout.tsx | 72 +++++++
app/opengraph-image.png | Bin 0 -> 289886 bytes
app/page.tsx | 16 ++
app/protected/page.tsx | 38 ++++
app/protected/reset-password/page.tsx | 37 ++++
app/twitter-image.png | Bin 0 -> 289886 bytes
components.json | 17 ++
components/deploy-button.tsx | 25 +++
components/env-var-warning.tsx | 33 +++
components/form-message.tsx | 24 +++
components/header-auth.tsx | 70 ++++++
components/hero.tsx | 44 ++++
components/next-logo.tsx | 46 ++++
components/submit-button.tsx | 23 ++
components/supabase-logo.tsx | 102 +++++++++
components/theme-switcher.tsx | 78 +++++++
components/tutorial/code-block.tsx | 61 ++++++
.../tutorial/connect-supabase-steps.tsx | 62 ++++++
components/tutorial/fetch-data-steps.tsx | 96 +++++++++
components/tutorial/sign-up-user-steps.tsx | 88 ++++++++
components/tutorial/tutorial-step.tsx | 30 +++
components/typography/inline-code.tsx | 7 +
components/ui/badge.tsx | 36 ++++
components/ui/button.tsx | 56 +++++
components/ui/checkbox.tsx | 30 +++
components/ui/dropdown-menu.tsx | 200 ++++++++++++++++++
components/ui/input.tsx | 25 +++
components/ui/label.tsx | 26 +++
lib/utils.ts | 6 +
middleware.ts | 20 ++
next.config.js | 4 +
package.json | 36 ++++
postcss.config.js | 6 +
tailwind.config.ts | 80 +++++++
tsconfig.json | 28 +++
utils/cn.ts | 6 +
utils/supabase/check-env-vars.ts | 6 +
utils/supabase/client.ts | 7 +
utils/supabase/middleware.ts | 62 ++++++
utils/supabase/server.ts | 29 +++
utils/utils.ts | 16 ++
53 files changed, 2178 insertions(+)
create mode 100644 .env.example
create mode 100644 .gitignore
create mode 100644 README.md
create mode 100644 app/(auth-pages)/forgot-password/page.tsx
create mode 100644 app/(auth-pages)/layout.tsx
create mode 100644 app/(auth-pages)/sign-in/page.tsx
create mode 100644 app/(auth-pages)/sign-up/page.tsx
create mode 100644 app/(auth-pages)/smtp-message.tsx
create mode 100644 app/actions.ts
create mode 100644 app/auth/callback/route.ts
create mode 100644 app/favicon.ico
create mode 100644 app/globals.css
create mode 100644 app/layout.tsx
create mode 100644 app/opengraph-image.png
create mode 100644 app/page.tsx
create mode 100644 app/protected/page.tsx
create mode 100644 app/protected/reset-password/page.tsx
create mode 100644 app/twitter-image.png
create mode 100644 components.json
create mode 100644 components/deploy-button.tsx
create mode 100644 components/env-var-warning.tsx
create mode 100644 components/form-message.tsx
create mode 100644 components/header-auth.tsx
create mode 100644 components/hero.tsx
create mode 100644 components/next-logo.tsx
create mode 100644 components/submit-button.tsx
create mode 100644 components/supabase-logo.tsx
create mode 100644 components/theme-switcher.tsx
create mode 100644 components/tutorial/code-block.tsx
create mode 100644 components/tutorial/connect-supabase-steps.tsx
create mode 100644 components/tutorial/fetch-data-steps.tsx
create mode 100644 components/tutorial/sign-up-user-steps.tsx
create mode 100644 components/tutorial/tutorial-step.tsx
create mode 100644 components/typography/inline-code.tsx
create mode 100644 components/ui/badge.tsx
create mode 100644 components/ui/button.tsx
create mode 100644 components/ui/checkbox.tsx
create mode 100644 components/ui/dropdown-menu.tsx
create mode 100644 components/ui/input.tsx
create mode 100644 components/ui/label.tsx
create mode 100644 lib/utils.ts
create mode 100644 middleware.ts
create mode 100644 next.config.js
create mode 100644 package.json
create mode 100644 postcss.config.js
create mode 100644 tailwind.config.ts
create mode 100644 tsconfig.json
create mode 100644 utils/cn.ts
create mode 100644 utils/supabase/check-env-vars.ts
create mode 100644 utils/supabase/client.ts
create mode 100644 utils/supabase/middleware.ts
create mode 100644 utils/supabase/server.ts
create mode 100644 utils/utils.ts
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..6937031
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,4 @@
+# Update these with your Supabase details from your project settings > API
+# https://app.supabase.com/project/_/settings/api
+NEXT_PUBLIC_SUPABASE_URL=your-project-url
+NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..00bba9b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,37 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# 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
+.env
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..53c555a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,96 @@
+
+
+ Next.js and Supabase Starter Kit
+
+
+
+ The fastest way to build apps with Next.js and Supabase
+
+
+
+ Features ·
+ Demo ·
+ Deploy to Vercel ·
+ Clone and run locally ·
+ Feedback and issues
+ More Examples
+
+
+
+## Features
+
+- Works across the entire [Next.js](https://nextjs.org) stack
+ - App Router
+ - Pages Router
+ - Middleware
+ - Client
+ - Server
+ - It just works!
+- supabase-ssr. A package to configure Supabase Auth to use cookies
+- Styling with [Tailwind CSS](https://tailwindcss.com)
+- Components with [shadcn/ui](https://ui.shadcn.com/)
+- Optional deployment with [Supabase Vercel Integration and Vercel deploy](#deploy-your-own)
+ - Environment variables automatically assigned to Vercel project
+
+## Demo
+
+You can view a fully working demo at [demo-nextjs-with-supabase.vercel.app](https://demo-nextjs-with-supabase.vercel.app/).
+
+## Deploy to Vercel
+
+Vercel deployment will guide you through creating a Supabase account and project.
+
+After installation of the Supabase integration, all relevant environment variables will be assigned to the project so the deployment is fully functioning.
+
+[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fnext.js%2Ftree%2Fcanary%2Fexamples%2Fwith-supabase&project-name=nextjs-with-supabase&repository-name=nextjs-with-supabase&demo-title=nextjs-with-supabase&demo-description=This+starter+configures+Supabase+Auth+to+use+cookies%2C+making+the+user%27s+session+available+throughout+the+entire+Next.js+app+-+Client+Components%2C+Server+Components%2C+Route+Handlers%2C+Server+Actions+and+Middleware.&demo-url=https%3A%2F%2Fdemo-nextjs-with-supabase.vercel.app%2F&external-id=https%3A%2F%2Fgithub.com%2Fvercel%2Fnext.js%2Ftree%2Fcanary%2Fexamples%2Fwith-supabase&demo-image=https%3A%2F%2Fdemo-nextjs-with-supabase.vercel.app%2Fopengraph-image.png)
+
+The above will also clone the Starter kit to your GitHub, you can clone that locally and develop locally.
+
+If you wish to just develop locally and not deploy to Vercel, [follow the steps below](#clone-and-run-locally).
+
+## Clone and run locally
+
+1. You'll first need a Supabase project which can be made [via the Supabase dashboard](https://database.new)
+
+2. Create a Next.js app using the Supabase Starter template npx command
+
+ ```bash
+ npx create-next-app -e with-supabase
+ ```
+
+3. Use `cd` to change into the app's directory
+
+ ```bash
+ cd name-of-new-app
+ ```
+
+4. Rename `.env.example` to `.env.local` and update the following:
+
+ ```
+ NEXT_PUBLIC_SUPABASE_URL=[INSERT SUPABASE PROJECT URL]
+ NEXT_PUBLIC_SUPABASE_ANON_KEY=[INSERT SUPABASE PROJECT API ANON KEY]
+ ```
+
+ Both `NEXT_PUBLIC_SUPABASE_URL` and `NEXT_PUBLIC_SUPABASE_ANON_KEY` can be found in [your Supabase project's API settings](https://app.supabase.com/project/_/settings/api)
+
+5. You can now run the Next.js local development server:
+
+ ```bash
+ npm run dev
+ ```
+
+ The starter kit should now be running on [localhost:3000](http://localhost:3000/).
+
+6. This template comes with the default shadcn/ui style initialized. If you instead want other ui.shadcn styles, delete `components.json` and [re-install shadcn/ui](https://ui.shadcn.com/docs/installation/next)
+
+> Check out [the docs for Local Development](https://supabase.com/docs/guides/getting-started/local-development) to also run Supabase locally.
+
+## Feedback and issues
+
+Please file feedback and issues over on the [Supabase GitHub org](https://github.com/supabase/supabase/issues/new/choose).
+
+## More Supabase examples
+
+- [Next.js Subscription Payments Starter](https://github.com/vercel/nextjs-subscription-payments)
+- [Cookie-based Auth and the Next.js 13 App Router (free course)](https://youtube.com/playlist?list=PL5S4mPUpp4OtMhpnp93EFSo42iQ40XjbF)
+- [Supabase Auth and the Next.js App Router](https://github.com/supabase/supabase/tree/master/examples/auth/nextjs)
diff --git a/app/(auth-pages)/forgot-password/page.tsx b/app/(auth-pages)/forgot-password/page.tsx
new file mode 100644
index 0000000..bcf9725
--- /dev/null
+++ b/app/(auth-pages)/forgot-password/page.tsx
@@ -0,0 +1,37 @@
+import { forgotPasswordAction } from "@/app/actions";
+import { FormMessage, Message } from "@/components/form-message";
+import { SubmitButton } from "@/components/submit-button";
+import { Input } from "@/components/ui/input";
+import { Label } from "@/components/ui/label";
+import Link from "next/link";
+import { SmtpMessage } from "../smtp-message";
+
+export default async function ForgotPassword(props: {
+ searchParams: Promise;
+}) {
+ const searchParams = await props.searchParams;
+ return (
+ <>
+
+
+ >
+ );
+}
diff --git a/app/(auth-pages)/layout.tsx b/app/(auth-pages)/layout.tsx
new file mode 100644
index 0000000..e038de1
--- /dev/null
+++ b/app/(auth-pages)/layout.tsx
@@ -0,0 +1,9 @@
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ {children}
+ );
+}
diff --git a/app/(auth-pages)/sign-in/page.tsx b/app/(auth-pages)/sign-in/page.tsx
new file mode 100644
index 0000000..7628cc7
--- /dev/null
+++ b/app/(auth-pages)/sign-in/page.tsx
@@ -0,0 +1,44 @@
+import { signInAction } from "@/app/actions";
+import { FormMessage, Message } from "@/components/form-message";
+import { SubmitButton } from "@/components/submit-button";
+import { Input } from "@/components/ui/input";
+import { Label } from "@/components/ui/label";
+import Link from "next/link";
+
+export default async function Login(props: { searchParams: Promise }) {
+ const searchParams = await props.searchParams;
+ return (
+
+ );
+}
diff --git a/app/(auth-pages)/sign-up/page.tsx b/app/(auth-pages)/sign-up/page.tsx
new file mode 100644
index 0000000..31b5a6d
--- /dev/null
+++ b/app/(auth-pages)/sign-up/page.tsx
@@ -0,0 +1,51 @@
+import { signUpAction } from "@/app/actions";
+import { FormMessage, Message } from "@/components/form-message";
+import { SubmitButton } from "@/components/submit-button";
+import { Input } from "@/components/ui/input";
+import { Label } from "@/components/ui/label";
+import Link from "next/link";
+import { SmtpMessage } from "../smtp-message";
+
+export default async function Signup(props: {
+ searchParams: Promise;
+}) {
+ const searchParams = await props.searchParams;
+ if ("message" in searchParams) {
+ return (
+
+
+
+ );
+ }
+
+ return (
+ <>
+
+
+ >
+ );
+}
diff --git a/app/(auth-pages)/smtp-message.tsx b/app/(auth-pages)/smtp-message.tsx
new file mode 100644
index 0000000..84c21fc
--- /dev/null
+++ b/app/(auth-pages)/smtp-message.tsx
@@ -0,0 +1,25 @@
+import { ArrowUpRight, InfoIcon } from "lucide-react";
+import Link from "next/link";
+
+export function SmtpMessage() {
+ return (
+
+
+
+
+ Note: Emails are rate limited. Enable Custom SMTP to
+ increase the rate limit.
+
+
+
+
+ );
+}
diff --git a/app/actions.ts b/app/actions.ts
new file mode 100644
index 0000000..dbf8a26
--- /dev/null
+++ b/app/actions.ts
@@ -0,0 +1,134 @@
+"use server";
+
+import { encodedRedirect } from "@/utils/utils";
+import { createClient } from "@/utils/supabase/server";
+import { headers } from "next/headers";
+import { redirect } from "next/navigation";
+
+export const signUpAction = async (formData: FormData) => {
+ const email = formData.get("email")?.toString();
+ const password = formData.get("password")?.toString();
+ const supabase = await createClient();
+ const origin = (await headers()).get("origin");
+
+ if (!email || !password) {
+ return encodedRedirect(
+ "error",
+ "/sign-up",
+ "Email and password are required",
+ );
+ }
+
+ const { error } = await supabase.auth.signUp({
+ email,
+ password,
+ options: {
+ emailRedirectTo: `${origin}/auth/callback`,
+ },
+ });
+
+ if (error) {
+ console.error(error.code + " " + error.message);
+ return encodedRedirect("error", "/sign-up", error.message);
+ } else {
+ return encodedRedirect(
+ "success",
+ "/sign-up",
+ "Thanks for signing up! Please check your email for a verification link.",
+ );
+ }
+};
+
+export const signInAction = async (formData: FormData) => {
+ const email = formData.get("email") as string;
+ const password = formData.get("password") as string;
+ const supabase = await createClient();
+
+ const { error } = await supabase.auth.signInWithPassword({
+ email,
+ password,
+ });
+
+ if (error) {
+ return encodedRedirect("error", "/sign-in", error.message);
+ }
+
+ return redirect("/protected");
+};
+
+export const forgotPasswordAction = async (formData: FormData) => {
+ const email = formData.get("email")?.toString();
+ const supabase = await createClient();
+ const origin = (await headers()).get("origin");
+ const callbackUrl = formData.get("callbackUrl")?.toString();
+
+ if (!email) {
+ return encodedRedirect("error", "/forgot-password", "Email is required");
+ }
+
+ const { error } = await supabase.auth.resetPasswordForEmail(email, {
+ redirectTo: `${origin}/auth/callback?redirect_to=/protected/reset-password`,
+ });
+
+ if (error) {
+ console.error(error.message);
+ return encodedRedirect(
+ "error",
+ "/forgot-password",
+ "Could not reset password",
+ );
+ }
+
+ if (callbackUrl) {
+ return redirect(callbackUrl);
+ }
+
+ return encodedRedirect(
+ "success",
+ "/forgot-password",
+ "Check your email for a link to reset your password.",
+ );
+};
+
+export const resetPasswordAction = async (formData: FormData) => {
+ const supabase = await createClient();
+
+ const password = formData.get("password") as string;
+ const confirmPassword = formData.get("confirmPassword") as string;
+
+ if (!password || !confirmPassword) {
+ encodedRedirect(
+ "error",
+ "/protected/reset-password",
+ "Password and confirm password are required",
+ );
+ }
+
+ if (password !== confirmPassword) {
+ encodedRedirect(
+ "error",
+ "/protected/reset-password",
+ "Passwords do not match",
+ );
+ }
+
+ const { error } = await supabase.auth.updateUser({
+ password: password,
+ });
+
+ if (error) {
+ encodedRedirect(
+ "error",
+ "/protected/reset-password",
+ "Password update failed",
+ );
+ }
+
+ encodedRedirect("success", "/protected/reset-password", "Password updated");
+};
+
+export const signOutAction = async () => {
+ const supabase = await createClient();
+ await supabase.auth.signOut();
+ return redirect("/sign-in");
+};
diff --git a/app/auth/callback/route.ts b/app/auth/callback/route.ts
new file mode 100644
index 0000000..dd415a4
--- /dev/null
+++ b/app/auth/callback/route.ts
@@ -0,0 +1,24 @@
+import { createClient } from "@/utils/supabase/server";
+import { NextResponse } from "next/server";
+
+export async function GET(request: Request) {
+ // The `/auth/callback` route is required for the server-side auth flow implemented
+ // by the SSR package. It exchanges an auth code for the user's session.
+ // https://supabase.com/docs/guides/auth/server-side/nextjs
+ const requestUrl = new URL(request.url);
+ const code = requestUrl.searchParams.get("code");
+ const origin = requestUrl.origin;
+ const redirectTo = requestUrl.searchParams.get("redirect_to")?.toString();
+
+ if (code) {
+ const supabase = await createClient();
+ await supabase.auth.exchangeCodeForSession(code);
+ }
+
+ if (redirectTo) {
+ return NextResponse.redirect(`${origin}${redirectTo}`);
+ }
+
+ // URL to redirect to after sign up process completes
+ return NextResponse.redirect(`${origin}/protected`);
+}
diff --git a/app/favicon.ico b/app/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c
GIT binary patch
literal 25931
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
LrJugUA?W`A8`#=m
literal 0
HcmV?d00001
diff --git a/app/globals.css b/app/globals.css
new file mode 100644
index 0000000..f450d1e
--- /dev/null
+++ b/app/globals.css
@@ -0,0 +1,69 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer base {
+ :root {
+ --background: 0 0% 100%;
+ --foreground: 0 0% 3.9%;
+ --card: 0 0% 100%;
+ --card-foreground: 0 0% 3.9%;
+ --popover: 0 0% 100%;
+ --popover-foreground: 0 0% 3.9%;
+ --primary: 0 0% 9%;
+ --primary-foreground: 0 0% 98%;
+ --secondary: 0 0% 96.1%;
+ --secondary-foreground: 0 0% 9%;
+ --muted: 0 0% 96.1%;
+ --muted-foreground: 0 0% 45.1%;
+ --accent: 0 0% 96.1%;
+ --accent-foreground: 0 0% 9%;
+ --destructive: 0 84.2% 60.2%;
+ --destructive-foreground: 0 0% 98%;
+ --border: 0 0% 89.8%;
+ --input: 0 0% 89.8%;
+ --ring: 0 0% 3.9%;
+ --radius: 0.5rem;
+ --chart-1: 12 76% 61%;
+ --chart-2: 173 58% 39%;
+ --chart-3: 197 37% 24%;
+ --chart-4: 43 74% 66%;
+ --chart-5: 27 87% 67%;
+ }
+
+ .dark {
+ --background: 0 0% 3.9%;
+ --foreground: 0 0% 98%;
+ --card: 0 0% 3.9%;
+ --card-foreground: 0 0% 98%;
+ --popover: 0 0% 3.9%;
+ --popover-foreground: 0 0% 98%;
+ --primary: 0 0% 98%;
+ --primary-foreground: 0 0% 9%;
+ --secondary: 0 0% 14.9%;
+ --secondary-foreground: 0 0% 98%;
+ --muted: 0 0% 14.9%;
+ --muted-foreground: 0 0% 63.9%;
+ --accent: 0 0% 14.9%;
+ --accent-foreground: 0 0% 98%;
+ --destructive: 0 62.8% 30.6%;
+ --destructive-foreground: 0 0% 98%;
+ --border: 0 0% 14.9%;
+ --input: 0 0% 14.9%;
+ --ring: 0 0% 83.1%;
+ --chart-1: 220 70% 50%;
+ --chart-2: 160 60% 45%;
+ --chart-3: 30 80% 55%;
+ --chart-4: 280 65% 60%;
+ --chart-5: 340 75% 55%;
+ }
+}
+
+@layer base {
+ * {
+ @apply border-border;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+}
diff --git a/app/layout.tsx b/app/layout.tsx
new file mode 100644
index 0000000..8d80488
--- /dev/null
+++ b/app/layout.tsx
@@ -0,0 +1,72 @@
+import DeployButton from "@/components/deploy-button";
+import { EnvVarWarning } from "@/components/env-var-warning";
+import HeaderAuth from "@/components/header-auth";
+import { ThemeSwitcher } from "@/components/theme-switcher";
+import { hasEnvVars } from "@/utils/supabase/check-env-vars";
+import { GeistSans } from "geist/font/sans";
+import { ThemeProvider } from "next-themes";
+import Link from "next/link";
+import "./globals.css";
+
+const defaultUrl = process.env.VERCEL_URL
+ ? `https://${process.env.VERCEL_URL}`
+ : "http://localhost:3000";
+
+export const metadata = {
+ metadataBase: new URL(defaultUrl),
+ title: "Next.js and Supabase Starter Kit",
+ description: "The fastest way to build apps with Next.js and Supabase",
+};
+
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+
+
+
+
+
+
+
+
Next.js Supabase Starter
+
+
+
+
+ {!hasEnvVars ?
:
}
+
+
+
+ {children}
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/app/opengraph-image.png b/app/opengraph-image.png
new file mode 100644
index 0000000000000000000000000000000000000000..57595e662c3b56c9a1e6ff5e9b6bf43d5316e1a8
GIT binary patch
literal 289886
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