From dd9fa6a832031d886d17acec1f52289a84fe3a40 Mon Sep 17 00:00:00 2001 From: Bradley Shellnut Date: Wed, 22 Nov 2023 17:19:05 -0800 Subject: [PATCH] Rename all old folders, create new folders and files for the app directory, setting up header/footer/layout, and getting prisma lucia auth working to create a user. --- .eslintrc.json | 3 + .gitignore | 19 +- .nvmrc | 1 + .vscode copy/launch.json | 28 + README.md | 69 +- __tests__/Home.test.js | 8 - __tests__/Nav.test.js | 15 - __tests__/__snapshots__/Nav.test.js.snap | 46 - __tests__/buildBase64Data.test.js | 22 - __tests__/index.test.js | 8 - app.d.ts | 9 + app/actions/signUpAction.ts | 5 + app/api/login/route.ts | 82 + app/api/signup/route.ts | 122 + app/layout.tsx | 35 + app/login/page.tsx | 29 + app/not-found.tsx | 17 + app/page.tsx | 7 + app/signup/page.tsx | 26 + auth/lucia.ts | 32 + components/Footer.tsx | 38 + components/Header.tsx | 34 + components/Nav.tsx | 16 + components/NavLink.js | 14 - components/NavLink.tsx | 19 + components/WeddingStart.tsx | 12 + components/form.tsx | 40 + .../CustomNextCloudinaryImage.js | 0 .../CustomNextImage.js | 0 {components => components_old}/Event.js | 0 {components => components_old}/Footer.js | 0 {components => components_old}/Form.js | 0 {components => components_old}/GuestRSVP.js | 0 {components => components_old}/Header.js | 4 +- {components => components_old}/HomeContent.js | 0 {components => components_old}/Layout.js | 0 {components => components_old}/Login.js | 0 {components => components_old}/Modal.js | 0 {components => components_old}/Nav.js | 0 components_old/NavLink.tsx | 19 + {components => components_old}/Page.js | 0 {components => components_old}/PlusOneRSVP.js | 0 {components => components_old}/Timeline.js | 0 {components => components_old}/Typography.js | 0 .../WeddingStart.js | 2 +- {components => components_old}/styles/Form.js | 0 .../styles/LayoutStyles.js | 0 .../styles/NavStyles.js | 0 .../styles/nprogress.css | 0 jest.setup.js | 3 - {utils => lib}/buildBase64Data.js | 0 lib/db.ts | 19 + {utils => lib}/handleUmamiEvent.js | 0 {utils => lib}/imageData.js | 0 lib/registry.tsx | 29 + lib/roles.ts | 32 + {utils => lib}/useInterval.js | 0 lib/useWeddingStart.js | 2 +- lib_old/events.json | 69 + lib_old/fetchJson.js | 24 + lib_old/session.js | 15 + lib_old/svgs.js | 35 + lib_old/useForm.js | 71 + lib_old/useModal.js | 16 + lib_old/useUser.js | 27 + lib_old/useWeddingStart.js | 17 + lib_old/utils.js | 7 + models/Group.js | 20 - models/Guest.js | 26 - models/User.js | 15 - next.config.js | 35 +- package-lock.json | 23248 ---------------- package.json | 213 +- {pages => pages_old}/404.js | 0 {pages => pages_old}/_app.js | 0 {pages => pages_old}/_document.js | 0 {pages => pages_old}/api/group.js | 0 {pages => pages_old}/api/guest.js | 0 {pages => pages_old}/api/login.js | 0 {pages => pages_old}/api/logout.js | 0 {pages => pages_old}/api/permissions.js | 0 {pages => pages_old}/api/register.js | 0 {pages => pages_old}/api/rsvp.js | 0 {pages => pages_old}/api/user.js | 0 {pages => pages_old}/home.js | 0 {pages => pages_old}/index.js | 0 {pages => pages_old}/login.js | 0 {pages => pages_old}/logout.js | 0 {pages => pages_old}/party.js | 0 {pages => pages_old}/photos.js | 0 {pages => pages_old}/qanda.js | 0 {pages => pages_old}/register.js | 0 {pages => pages_old}/rsvp/[id].js | 4 +- {pages => pages_old}/rsvp/index.js | 0 {pages => pages_old}/story.js | 0 {pages => pages_old}/travelstay.js | 0 pnpm-lock.yaml | 5648 ++++ postcss.config.cjs | 4 + prisma/role-permissions.ts | 13 + prisma/schema.prisma | 130 + prisma/seed.ts | 33 + public_old/assets/css/noscript.css | 189 + public_old/assets/images/Background.jpeg | Bin 0 -> 178395 bytes public_old/assets/images/Background.png | Bin 0 -> 1819921 bytes public_old/assets/images/js-logo.png | Bin 0 -> 87118 bytes public_old/assets/images/wedding-ring.png | Bin 0 -> 25024 bytes public_old/favicon.ico | Bin 0 -> 10462 bytes public_old/fonts/Istok_Web/IstokWeb-Bold.ttf | Bin 0 -> 221656 bytes .../fonts/Istok_Web/IstokWeb-BoldItalic.ttf | Bin 0 -> 215400 bytes .../fonts/Istok_Web/IstokWeb-Italic.ttf | Bin 0 -> 215376 bytes .../fonts/Istok_Web/IstokWeb-Regular.ttf | Bin 0 -> 312120 bytes public_old/fonts/Istok_Web/OFL.txt | 94 + .../JosefinSans-Italic-VariableFont_wght.ttf | Bin 0 -> 124224 bytes .../JosefinSans-VariableFont_wght.ttf | Bin 0 -> 115664 bytes public_old/fonts/Josefin_Sans/OFL.txt | 93 + public_old/fonts/Josefin_Sans/README.txt | 77 + .../Josefin_Sans/static/JosefinSans-Bold.ttf | Bin 0 -> 58416 bytes .../static/JosefinSans-BoldItalic.ttf | Bin 0 -> 62568 bytes .../static/JosefinSans-ExtraLight.ttf | Bin 0 -> 58568 bytes .../static/JosefinSans-ExtraLightItalic.ttf | Bin 0 -> 62708 bytes .../static/JosefinSans-Italic.ttf | Bin 0 -> 62660 bytes .../Josefin_Sans/static/JosefinSans-Light.ttf | Bin 0 -> 58584 bytes .../static/JosefinSans-LightItalic.ttf | Bin 0 -> 62676 bytes .../static/JosefinSans-Medium.ttf | Bin 0 -> 58560 bytes .../static/JosefinSans-MediumItalic.ttf | Bin 0 -> 62792 bytes .../static/JosefinSans-Regular.ttf | Bin 0 -> 58548 bytes .../static/JosefinSans-SemiBold.ttf | Bin 0 -> 58580 bytes .../static/JosefinSans-SemiBoldItalic.ttf | Bin 0 -> 62820 bytes .../Josefin_Sans/static/JosefinSans-Thin.ttf | Bin 0 -> 58400 bytes .../static/JosefinSans-ThinItalic.ttf | Bin 0 -> 62460 bytes public_old/fonts/Kanit/Kanit-Black.ttf | Bin 0 -> 173492 bytes public_old/fonts/Kanit/Kanit-BlackItalic.ttf | Bin 0 -> 182076 bytes public_old/fonts/Kanit/Kanit-Bold.ttf | Bin 0 -> 172876 bytes public_old/fonts/Kanit/Kanit-BoldItalic.ttf | Bin 0 -> 180308 bytes public_old/fonts/Kanit/Kanit-ExtraBold.ttf | Bin 0 -> 174464 bytes .../fonts/Kanit/Kanit-ExtraBoldItalic.ttf | Bin 0 -> 184928 bytes public_old/fonts/Kanit/Kanit-ExtraLight.ttf | Bin 0 -> 160796 bytes .../fonts/Kanit/Kanit-ExtraLightItalic.ttf | Bin 0 -> 164908 bytes public_old/fonts/Kanit/Kanit-Italic.ttf | Bin 0 -> 171876 bytes public_old/fonts/Kanit/Kanit-Light.ttf | Bin 0 -> 168036 bytes public_old/fonts/Kanit/Kanit-LightItalic.ttf | Bin 0 -> 171596 bytes public_old/fonts/Kanit/Kanit-Medium.ttf | Bin 0 -> 171336 bytes public_old/fonts/Kanit/Kanit-MediumItalic.ttf | Bin 0 -> 172360 bytes public_old/fonts/Kanit/Kanit-Regular.ttf | Bin 0 -> 169744 bytes public_old/fonts/Kanit/Kanit-SemiBold.ttf | Bin 0 -> 171548 bytes .../fonts/Kanit/Kanit-SemiBoldItalic.ttf | Bin 0 -> 172244 bytes public_old/fonts/Kanit/Kanit-Thin.ttf | Bin 0 -> 155788 bytes public_old/fonts/Kanit/Kanit-ThinItalic.ttf | Bin 0 -> 161688 bytes public_old/fonts/Kanit/OFL.txt | 93 + public_old/fonts/Parisienne/OFL.txt | 94 + .../fonts/Parisienne/Parisienne-Regular.ttf | Bin 0 -> 58268 bytes public_old/myevents.ics | 41 + public_old/pattern.svg | 1 + public_old/penguin.svg | 14 + sample.env | 6 - styles/globals.css | 309 + styles/layout.module.scss | 82 + styles/typeography.scss | 71 + {styles => styles_old}/Home.module.css | 0 styles_old/globals.css | 16 + tsconfig.json | 75 + types/User.ts | 5 + utils_old/buildBase64Data.js | 43 + {utils => utils_old}/db.js | 0 utils_old/handleUmamiEvent.js | 7 + utils_old/imageData.js | 77 + utils_old/useInterval.js | 21 + 167 files changed, 8309 insertions(+), 23635 deletions(-) create mode 100644 .eslintrc.json create mode 100644 .nvmrc create mode 100644 .vscode copy/launch.json delete mode 100644 __tests__/Home.test.js delete mode 100644 __tests__/Nav.test.js delete mode 100644 __tests__/__snapshots__/Nav.test.js.snap delete mode 100644 __tests__/buildBase64Data.test.js delete mode 100644 __tests__/index.test.js create mode 100644 app.d.ts create mode 100644 app/actions/signUpAction.ts create mode 100644 app/api/login/route.ts create mode 100644 app/api/signup/route.ts create mode 100644 app/layout.tsx create mode 100644 app/login/page.tsx create mode 100644 app/not-found.tsx create mode 100644 app/page.tsx create mode 100644 app/signup/page.tsx create mode 100644 auth/lucia.ts create mode 100644 components/Footer.tsx create mode 100644 components/Header.tsx create mode 100644 components/Nav.tsx delete mode 100644 components/NavLink.js create mode 100644 components/NavLink.tsx create mode 100644 components/WeddingStart.tsx create mode 100644 components/form.tsx rename {components => components_old}/CustomNextCloudinaryImage.js (100%) rename {components => components_old}/CustomNextImage.js (100%) rename {components => components_old}/Event.js (100%) rename {components => components_old}/Footer.js (100%) rename {components => components_old}/Form.js (100%) rename {components => components_old}/GuestRSVP.js (100%) rename {components => components_old}/Header.js (91%) rename {components => components_old}/HomeContent.js (100%) rename {components => components_old}/Layout.js (100%) rename {components => components_old}/Login.js (100%) rename {components => components_old}/Modal.js (100%) rename {components => components_old}/Nav.js (100%) create mode 100644 components_old/NavLink.tsx rename {components => components_old}/Page.js (100%) rename {components => components_old}/PlusOneRSVP.js (100%) rename {components => components_old}/Timeline.js (100%) rename {components => components_old}/Typography.js (100%) rename {components => components_old}/WeddingStart.js (78%) rename {components => components_old}/styles/Form.js (100%) rename {components => components_old}/styles/LayoutStyles.js (100%) rename {components => components_old}/styles/NavStyles.js (100%) rename {components => components_old}/styles/nprogress.css (100%) delete mode 100644 jest.setup.js rename {utils => lib}/buildBase64Data.js (100%) create mode 100644 lib/db.ts rename {utils => lib}/handleUmamiEvent.js (100%) rename {utils => lib}/imageData.js (100%) create mode 100644 lib/registry.tsx create mode 100644 lib/roles.ts rename {utils => lib}/useInterval.js (100%) create mode 100644 lib_old/events.json create mode 100644 lib_old/fetchJson.js create mode 100644 lib_old/session.js create mode 100644 lib_old/svgs.js create mode 100644 lib_old/useForm.js create mode 100644 lib_old/useModal.js create mode 100644 lib_old/useUser.js create mode 100644 lib_old/useWeddingStart.js create mode 100644 lib_old/utils.js delete mode 100644 models/Group.js delete mode 100644 models/Guest.js delete mode 100644 models/User.js delete mode 100644 package-lock.json rename {pages => pages_old}/404.js (100%) rename {pages => pages_old}/_app.js (100%) rename {pages => pages_old}/_document.js (100%) rename {pages => pages_old}/api/group.js (100%) rename {pages => pages_old}/api/guest.js (100%) rename {pages => pages_old}/api/login.js (100%) rename {pages => pages_old}/api/logout.js (100%) rename {pages => pages_old}/api/permissions.js (100%) rename {pages => pages_old}/api/register.js (100%) rename {pages => pages_old}/api/rsvp.js (100%) rename {pages => pages_old}/api/user.js (100%) rename {pages => pages_old}/home.js (100%) rename {pages => pages_old}/index.js (100%) rename {pages => pages_old}/login.js (100%) rename {pages => pages_old}/logout.js (100%) rename {pages => pages_old}/party.js (100%) rename {pages => pages_old}/photos.js (100%) rename {pages => pages_old}/qanda.js (100%) rename {pages => pages_old}/register.js (100%) rename {pages => pages_old}/rsvp/[id].js (99%) rename {pages => pages_old}/rsvp/index.js (100%) rename {pages => pages_old}/story.js (100%) rename {pages => pages_old}/travelstay.js (100%) create mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.cjs create mode 100644 prisma/role-permissions.ts create mode 100644 prisma/schema.prisma create mode 100644 prisma/seed.ts create mode 100644 public_old/assets/css/noscript.css create mode 100644 public_old/assets/images/Background.jpeg create mode 100644 public_old/assets/images/Background.png create mode 100644 public_old/assets/images/js-logo.png create mode 100644 public_old/assets/images/wedding-ring.png create mode 100644 public_old/favicon.ico create mode 100644 public_old/fonts/Istok_Web/IstokWeb-Bold.ttf create mode 100644 public_old/fonts/Istok_Web/IstokWeb-BoldItalic.ttf create mode 100644 public_old/fonts/Istok_Web/IstokWeb-Italic.ttf create mode 100644 public_old/fonts/Istok_Web/IstokWeb-Regular.ttf create mode 100644 public_old/fonts/Istok_Web/OFL.txt create mode 100644 public_old/fonts/Josefin_Sans/JosefinSans-Italic-VariableFont_wght.ttf create mode 100644 public_old/fonts/Josefin_Sans/JosefinSans-VariableFont_wght.ttf create mode 100644 public_old/fonts/Josefin_Sans/OFL.txt create mode 100644 public_old/fonts/Josefin_Sans/README.txt create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-Bold.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-BoldItalic.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-ExtraLight.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-ExtraLightItalic.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-Italic.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-Light.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-LightItalic.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-Medium.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-MediumItalic.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-Regular.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-SemiBold.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-SemiBoldItalic.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-Thin.ttf create mode 100644 public_old/fonts/Josefin_Sans/static/JosefinSans-ThinItalic.ttf create mode 100644 public_old/fonts/Kanit/Kanit-Black.ttf create mode 100644 public_old/fonts/Kanit/Kanit-BlackItalic.ttf create mode 100644 public_old/fonts/Kanit/Kanit-Bold.ttf create mode 100644 public_old/fonts/Kanit/Kanit-BoldItalic.ttf create mode 100644 public_old/fonts/Kanit/Kanit-ExtraBold.ttf create mode 100644 public_old/fonts/Kanit/Kanit-ExtraBoldItalic.ttf create mode 100644 public_old/fonts/Kanit/Kanit-ExtraLight.ttf create mode 100644 public_old/fonts/Kanit/Kanit-ExtraLightItalic.ttf create mode 100644 public_old/fonts/Kanit/Kanit-Italic.ttf create mode 100644 public_old/fonts/Kanit/Kanit-Light.ttf create mode 100644 public_old/fonts/Kanit/Kanit-LightItalic.ttf create mode 100644 public_old/fonts/Kanit/Kanit-Medium.ttf create mode 100644 public_old/fonts/Kanit/Kanit-MediumItalic.ttf create mode 100644 public_old/fonts/Kanit/Kanit-Regular.ttf create mode 100644 public_old/fonts/Kanit/Kanit-SemiBold.ttf create mode 100644 public_old/fonts/Kanit/Kanit-SemiBoldItalic.ttf create mode 100644 public_old/fonts/Kanit/Kanit-Thin.ttf create mode 100644 public_old/fonts/Kanit/Kanit-ThinItalic.ttf create mode 100644 public_old/fonts/Kanit/OFL.txt create mode 100644 public_old/fonts/Parisienne/OFL.txt create mode 100644 public_old/fonts/Parisienne/Parisienne-Regular.ttf create mode 100644 public_old/myevents.ics create mode 100644 public_old/pattern.svg create mode 100644 public_old/penguin.svg delete mode 100644 sample.env create mode 100644 styles/layout.module.scss create mode 100644 styles/typeography.scss rename {styles => styles_old}/Home.module.css (100%) create mode 100644 styles_old/globals.css create mode 100644 tsconfig.json create mode 100644 types/User.ts create mode 100644 utils_old/buildBase64Data.js rename {utils => utils_old}/db.js (100%) create mode 100644 utils_old/handleUmamiEvent.js create mode 100644 utils_old/imageData.js create mode 100644 utils_old/useInterval.js diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..bffb357 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/.gitignore b/.gitignore index 74b7586..ca1b564 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz # testing /coverage @@ -25,11 +26,21 @@ yarn-debug.log* yarn-error.log* # local env files +.env*.local .env -.env.local -.env.development.local -.env.test.local -.env.production.local +.env.* +!.env.example # vercel .vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# panda css +styled-system + +# JetBrains +.idea +.fleet \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..aacb518 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +18.17 diff --git a/.vscode copy/launch.json b/.vscode copy/launch.json new file mode 100644 index 0000000..5ac75f2 --- /dev/null +++ b/.vscode copy/launch.json @@ -0,0 +1,28 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Next.js: debug server-side", + "type": "node-terminal", + "request": "launch", + "command": "pnpm dev" + }, + { + "name": "Next.js: debug client-side", + "type": "chrome", + "request": "launch", + "url": "http://localhost:3000" + }, + { + "name": "Next.js: debug full stack", + "type": "node-terminal", + "request": "launch", + "command": "pnpm dev", + "serverReadyAction": { + "pattern": "- Local:.+(https?://.+)", + "uriFormat": "%s", + "action": "debugWithChrome" + } + } + ] +} diff --git a/README.md b/README.md index 75d16b4..c403366 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,36 @@ -# Wedding Website +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). -## This is a skeleton template of the wedding website I created +## Getting Started -Features include: -- Password login for site access -- RSVP page for groups or individuals -- Pages that include: - - Home Page - - Wedding Party - - Photos pages - - Q&A - - Travel information - - RSVP forms +First, run the development server: -## Detailed Info +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` -Names, Dates, Locations are all hardcoded to a value +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. -The site implements a basic auth with [next-iron-session](https://github.com/vvo/next-iron-session) to protect access without knowing the password to the site. +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. -The code is set up to use a MongoDB instace, ENV MONGO_URL, but this could easily be swapped for any DB. For the purposes of deploying this template for viewing the data is hardcoded. +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. -Use of CSS variables at a Layout level allows for theming and is easily extensible. +## Learn More -Adding, Updating, and Deleting of guests and groups is currently done manually on the DB or on a deployment of the admin specific branch. +To learn more about Next.js, take a look at the following resources: -This admin branch is not included yet in this example site as no roles or permissions have been set up. However, this branch does include additional pages to add, edit, and delete these guests and groups. +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. -*If deploying to production please remove all sections that have the following:* -```// TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION``` +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! -## Tech +## Deploy on Vercel -Overall a typical NextJS Application using ReactJS and basic authentication. +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. -### Frontend - -- ReactJS -- Styled Components -- Images - - Loaded using either the default NextJS image with custom blur animation - - Or loading using Cloudinary on NextJS image and custom blur - -### Backend - -- NextJS APIs -- Next Iron Session for Login - - Server side rendering of base pages checking to see if user is logged in - - Requires ENV variable of SECRET_COOKIE_PASSWORD to be set -- Mongoose DB for MongoDB - - Used to store RSVPs and default logins - -## Future Changes -1. On/Off feature for public vs password protected sites -2. Build in auth permissions to allow guest vs admin roles -3. If roles available then add in the admin pages for create, update, and deletion of guests/groups -4. Add more theming options and easy customization of pages, resources, etc. -5. Email reminder option \ No newline at end of file +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/__tests__/Home.test.js b/__tests__/Home.test.js deleted file mode 100644 index 2c2c7b3..0000000 --- a/__tests__/Home.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import HomePage from '../pages'; - -describe('Index Page ', () => { - it('should render', () => { - render(); - }); -}); diff --git a/__tests__/Nav.test.js b/__tests__/Nav.test.js deleted file mode 100644 index 956ee1b..0000000 --- a/__tests__/Nav.test.js +++ /dev/null @@ -1,15 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import Nav from '../components/Nav'; - -const useRouter = jest.spyOn(require('next/router'), 'useRouter'); - -describe('