18 | 22 | Epic Stack 23 | 24 |
25 |26 | Check the{' '} 27 | 31 | Getting Started 32 | {' '} 33 | guide file for instructions on how to get your project off the 34 | ground! 35 |
36 | 37 |├── public
├── robots.txt
├── favicon.ico
├── img
│ └── user.png
├── apple-touch-icon.png
├── favicons
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── apple-touch-icon.png
│ ├── android-chrome-192x192.png
│ └── android-chrome-512x512.png
├── apple-touch-icon-120x120.png
├── apple-touch-icon-precomposed.png
├── apple-touch-icon-152x152-precomposed.png
├── fonts
│ └── nunito-sans
│ │ ├── nunito-sans-v12-latin_latin-ext-200.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-200.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-300.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-300.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-600.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-600.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-700.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-700.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-800.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-800.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-900.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-900.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-italic.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-italic.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-regular.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-200italic.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-300italic.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-600italic.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-700italic.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-800italic.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-900italic.woff
│ │ ├── nunito-sans-v12-latin_latin-ext-regular.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-200italic.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-300italic.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-600italic.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-700italic.woff2
│ │ ├── nunito-sans-v12-latin_latin-ext-800italic.woff2
│ │ └── nunito-sans-v12-latin_latin-ext-900italic.woff2
└── site.webmanifest
├── .npmrc
├── app
├── styles
│ └── tailwind.css
├── routes
│ ├── _marketing+
│ │ ├── about.tsx
│ │ ├── privacy.tsx
│ │ ├── support.tsx
│ │ ├── tos.tsx
│ │ ├── logos
│ │ │ ├── docker.png
│ │ │ ├── remix.png
│ │ │ ├── stars.jpg
│ │ │ ├── mailgun.png
│ │ │ ├── kody-rocket.png
│ │ │ ├── testing-library.png
│ │ │ ├── radix.svg
│ │ │ ├── github.svg
│ │ │ ├── typescript.svg
│ │ │ ├── eslint.svg
│ │ │ ├── sentry.svg
│ │ │ ├── msw.svg
│ │ │ ├── vitest.svg
│ │ │ ├── logos.ts
│ │ │ ├── tailwind.svg
│ │ │ ├── playwright.svg
│ │ │ └── prisma.svg
│ │ └── index.tsx
│ ├── users+
│ │ ├── $username_+
│ │ │ ├── notes.index.tsx
│ │ │ ├── notes.new.tsx
│ │ │ ├── notes.$noteId_.edit.tsx
│ │ │ ├── notes.$noteId.tsx
│ │ │ └── notes.tsx
│ │ └── $username.tsx
│ ├── _auth+
│ │ ├── logout.tsx
│ │ ├── login.tsx
│ │ ├── reset-password.tsx
│ │ └── signup_.verify.tsx
│ ├── resources+
│ │ ├── file.$fileId.tsx
│ │ ├── healthcheck.tsx
│ │ ├── delete-image.tsx
│ │ ├── image-upload.tsx
│ │ ├── delete-note.tsx
│ │ ├── theme.tsx
│ │ ├── delete-image.test.tsx
│ │ └── note-editor.tsx
│ ├── me.tsx
│ ├── admin+
│ │ ├── cache_.lru.$cacheKey.ts
│ │ ├── cache_.sqlite.$cacheKey.ts
│ │ └── cache_.sqlite.tsx
│ └── settings+
│ │ ├── profile.two-factor.tsx
│ │ └── profile.two-factor.index.tsx
├── utils
│ ├── nonce-provider.ts
│ ├── monitoring.server.ts
│ ├── misc.server.ts
│ ├── zod-extensions.ts
│ ├── db.server.ts
│ ├── request-info.ts
│ ├── singleton.server.ts
│ ├── permissions.server.ts
│ ├── devtools.tsx
│ ├── user-validation.ts
│ ├── user.ts
│ ├── monitoring.client.tsx
│ ├── email.server.ts
│ ├── session.server.ts
│ ├── env.server.ts
│ ├── forms.module.css
│ ├── totp.server.test.ts
│ ├── misc.ts
│ ├── timing.server.ts
│ ├── client-hints.tsx
│ ├── auth.server.ts
│ └── cache.server.ts
├── entry.client.tsx
├── components
│ ├── spinner.tsx
│ ├── spacer.tsx
│ └── error-boundary.tsx
├── models
│ └── note.ts
└── entry.server.tsx
├── .dockerignore
├── reset.d.ts
├── remix.env.d.ts
├── postcss.config.js
├── tests
├── fixtures
│ ├── test-profile.jpg
│ └── images
│ │ └── user
│ │ ├── 0.jpg
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ ├── 3.jpg
│ │ ├── 4.jpg
│ │ ├── 5.jpg
│ │ ├── 6.jpg
│ │ ├── 7.jpg
│ │ ├── 8.jpg
│ │ ├── 9.jpg
│ │ ├── kody.png
│ │ └── README.md
├── setup
│ ├── vitejs-plugin-react.cjs
│ ├── setup-env-vars.ts
│ ├── matchers.cjs
│ ├── paths.ts
│ ├── setup-test-env.ts
│ ├── global-setup.ts
│ └── utils.ts
├── mocks
│ ├── README.md
│ ├── index.ts
│ └── utils.ts
├── vitest-utils.ts
├── db-utils.ts
├── e2e
│ ├── 2fa.test.ts
│ └── settings-profile.test.ts
├── memoize-unique.ts
└── playwright-utils.ts
├── prisma
├── migrations
│ ├── migration_lock.toml
│ ├── 20230613173726_priority_model
│ │ └── migration.sql
│ └── 20230608211059_init
│ │ └── migration.sql
├── schema.prisma
└── seed.ts
├── .vscode
└── extensions.json
├── .prettierignore
├── types
├── priority.ts
└── vitest.d.ts
├── index.js
├── deps.d.ts
├── .env.example
├── .gitignore
├── .github
├── PULL_REQUEST_TEMPLATE.md
└── workflows
│ └── deploy.yml
├── other
├── setup-swap.js
├── litefs.yml
└── build-server.ts
├── server
└── dev-server.js
├── scripts
└── sentry-create-release.js
├── .prettierrc.cjs
├── vitest.config.ts
├── remix.config.js
├── tsconfig.json
├── playwright.config.ts
├── .eslintrc.cjs
├── fly.toml
├── README.md
├── Dockerfile
├── tailwind.config.ts
└── package.json
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Allow: /
3 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | legacy-peer-deps=true
2 | registry=https://registry.npmjs.org/
3 |
--------------------------------------------------------------------------------
/app/styles/tailwind.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | *.log
3 | .DS_Store
4 | .env
5 | /.cache
6 | /public/build
7 | /build
8 |
--------------------------------------------------------------------------------
/reset.d.ts:
--------------------------------------------------------------------------------
1 | // Do not add any other lines of code to this file!
2 | import '@total-typescript/ts-reset'
3 |
--------------------------------------------------------------------------------
/remix.env.d.ts:
--------------------------------------------------------------------------------
1 | ///
Select a note
3 | } 4 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | 'tailwindcss/nesting': {}, 4 | tailwindcss: {}, 5 | autoprefixer: {}, 6 | }, 7 | } 8 | -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/apple-touch-icon.png -------------------------------------------------------------------------------- /tests/fixtures/test-profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/test-profile.jpg -------------------------------------------------------------------------------- /public/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /tests/fixtures/images/user/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/images/user/0.jpg -------------------------------------------------------------------------------- /tests/fixtures/images/user/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/images/user/1.jpg -------------------------------------------------------------------------------- /tests/fixtures/images/user/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/images/user/2.jpg -------------------------------------------------------------------------------- /tests/fixtures/images/user/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/images/user/3.jpg -------------------------------------------------------------------------------- /tests/fixtures/images/user/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/images/user/4.jpg -------------------------------------------------------------------------------- /tests/fixtures/images/user/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/images/user/5.jpg -------------------------------------------------------------------------------- /tests/fixtures/images/user/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/images/user/6.jpg -------------------------------------------------------------------------------- /tests/fixtures/images/user/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/images/user/7.jpg -------------------------------------------------------------------------------- /tests/fixtures/images/user/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/images/user/8.jpg -------------------------------------------------------------------------------- /tests/fixtures/images/user/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/images/user/9.jpg -------------------------------------------------------------------------------- /public/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /public/favicons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/favicons/apple-touch-icon.png -------------------------------------------------------------------------------- /tests/fixtures/images/user/kody.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/tests/fixtures/images/user/kody.png -------------------------------------------------------------------------------- /tests/setup/vitejs-plugin-react.cjs: -------------------------------------------------------------------------------- 1 | // react types are missing when import as default to ESM module 2 | export { default as react } from '@vitejs/plugin-react' 3 | -------------------------------------------------------------------------------- /app/routes/_marketing+/logos/docker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/app/routes/_marketing+/logos/docker.png -------------------------------------------------------------------------------- /app/routes/_marketing+/logos/remix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/app/routes/_marketing+/logos/remix.png -------------------------------------------------------------------------------- /app/routes/_marketing+/logos/stars.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/app/routes/_marketing+/logos/stars.jpg -------------------------------------------------------------------------------- /prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (i.e. Git) 3 | provider = "sqlite" -------------------------------------------------------------------------------- /public/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /app/routes/_marketing+/logos/mailgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/app/routes/_marketing+/logos/mailgun.png -------------------------------------------------------------------------------- /tests/fixtures/images/user/README.md: -------------------------------------------------------------------------------- 1 | # User Images 2 | 3 | This is used when creating users with images. If you don't do that, feel free to 4 | delete this directory. 5 | -------------------------------------------------------------------------------- /app/routes/_marketing+/logos/kody-rocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/app/routes/_marketing+/logos/kody-rocket.png -------------------------------------------------------------------------------- /public/favicons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/favicons/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/favicons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/favicons/android-chrome-512x512.png -------------------------------------------------------------------------------- /app/routes/_marketing+/logos/testing-library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/app/routes/_marketing+/logos/testing-library.png -------------------------------------------------------------------------------- /public/apple-touch-icon-152x152-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/apple-touch-icon-152x152-precomposed.png -------------------------------------------------------------------------------- /tests/setup/setup-env-vars.ts: -------------------------------------------------------------------------------- 1 | import { DATABASE_PATH, DATABASE_URL } from './paths.ts' 2 | 3 | process.env.DATABASE_PATH = DATABASE_PATH 4 | process.env.DATABASE_URL = DATABASE_URL 5 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "dbaeumer.vscode-eslint", 4 | "esbenp.prettier-vscode", 5 | "prisma.prisma", 6 | "bradlc.vscode-tailwindcss" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /tests/setup/matchers.cjs: -------------------------------------------------------------------------------- 1 | // matchers types are missing when import as default to ESM module 2 | export { 3 | default as matchers, 4 | TestingLibraryMatchers, 5 | } from '@testing-library/jest-dom/matchers.js' 6 | -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-200.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-200.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-200.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-200.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-300.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-300.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-600.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-600.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-600.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-600.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-700.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-700.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-800.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-800.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-800.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-800.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-900.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-900.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-italic.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-italic.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-regular.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-200italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-200italic.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-300italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-300italic.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-600italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-600italic.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-700italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-700italic.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-800italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-800italic.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-900italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-900italic.woff -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-regular.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-200italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-200italic.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-300italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-300italic.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-600italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-600italic.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-700italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-700italic.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-800italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-800italic.woff2 -------------------------------------------------------------------------------- /public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-900italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Steinmacher/epic-stack-with-prisma-client-extensions/HEAD/public/fonts/nunito-sans/nunito-sans-v12-latin_latin-ext-900italic.woff2 -------------------------------------------------------------------------------- /app/utils/nonce-provider.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | export const NonceContext = React.createContext17 | {error.status} {error.data} 18 |
19 | ), 20 | statusHandlers, 21 | unexpectedErrorHandler = error =>{getErrorMessage(error)}
, 22 | }: { 23 | defaultStatusHandler?: StatusHandler 24 | statusHandlers?: Record48 | Please enter your details. 49 |
50 |26 | Check the{' '} 27 | 31 | Getting Started 32 | {' '} 33 | guide file for instructions on how to get your project off the 34 | ground! 35 |
36 | 37 |{data.note.content}
56 |{data.note.priority}
57 |Note not found
, 75 | }} 76 | /> 77 | ) 78 | } 79 | -------------------------------------------------------------------------------- /app/routes/resources+/delete-note.tsx: -------------------------------------------------------------------------------- 1 | import { json, type DataFunctionArgs, redirect } from '@remix-run/node' 2 | import { useFetcher } from '@remix-run/react' 3 | import { Button, ErrorList } from '~/utils/forms.tsx' 4 | import { useForm } from '@conform-to/react' 5 | import { getFieldsetConstraint, parse } from '@conform-to/zod' 6 | import { z } from 'zod' 7 | import { requireUserId } from '~/utils/auth.server.ts' 8 | import { prisma } from '~/utils/db.server.ts' 9 | 10 | const DeleteFormSchema = z.object({ 11 | noteId: z.string(), 12 | }) 13 | 14 | export async function action({ request }: DataFunctionArgs) { 15 | const userId = await requireUserId(request) 16 | const formData = await request.formData() 17 | const submission = parse(formData, { 18 | schema: DeleteFormSchema, 19 | acceptMultipleErrors: () => true, 20 | }) 21 | if (!submission.value || submission.intent !== 'submit') { 22 | return json( 23 | { 24 | status: 'error', 25 | submission, 26 | } as const, 27 | { status: 400 }, 28 | ) 29 | } 30 | 31 | const { noteId } = submission.value 32 | 33 | const note = await prisma.note.findFirst({ 34 | select: { id: true, owner: { select: { username: true } } }, 35 | where: { 36 | id: noteId, 37 | ownerId: userId, 38 | }, 39 | }) 40 | if (!note) { 41 | submission.error.noteId = ['Note not found'] 42 | return json({ status: 'error', submission } as const, { 43 | status: 404, 44 | }) 45 | } 46 | 47 | await prisma.note.delete({ 48 | where: { id: note.id }, 49 | }) 50 | 51 | return redirect(`/users/${note.owner.username}/notes`) 52 | } 53 | 54 | export function DeleteNote({ id }: { id: string }) { 55 | const noteDeleteFetcher = useFetcherYou have enabled two-factor authentication.
57 |You have not enabled two-factor authentication yet.
74 |75 | Two factor authentication adds an extra layer of security to your 76 | account. You will need to enter a code from an authenticator app 77 | like 1Password to log in. 78 |
79 |64 | Joined {data.userJoinedDisplay} 65 |
66 |No user with the username "{params.username}" exists
109 | ), 110 | }} 111 | /> 112 | ) 113 | } 114 | 115 | export const meta: V2_MetaFunctionNo user with the username "{params.username}" exists
124 | ), 125 | }} 126 | /> 127 | ) 128 | } 129 | -------------------------------------------------------------------------------- /app/routes/resources+/theme.tsx: -------------------------------------------------------------------------------- 1 | import { useForm } from '@conform-to/react' 2 | import { parse } from '@conform-to/zod' 3 | import { json, redirect, type DataFunctionArgs } from '@remix-run/node' 4 | import { useFetcher } from '@remix-run/react' 5 | import * as React from 'react' 6 | import { z } from 'zod' 7 | import { useHints } from '~/utils/client-hints.tsx' 8 | import { ErrorList } from '~/utils/forms.tsx' 9 | import { safeRedirect } from '~/utils/misc.ts' 10 | import { useRequestInfo } from '~/utils/request-info.ts' 11 | import { 12 | commitSession, 13 | deleteTheme, 14 | getSession, 15 | setTheme, 16 | } from '~/utils/session.server.ts' 17 | 18 | const ROUTE_PATH = '/resources/theme' 19 | 20 | const ThemeFormSchema = z.object({ 21 | redirectTo: z.string().optional(), 22 | theme: z.enum(['system', 'light', 'dark']), 23 | }) 24 | 25 | export async function action({ request }: DataFunctionArgs) { 26 | const formData = await request.formData() 27 | const submission = parse(formData, { 28 | schema: ThemeFormSchema, 29 | acceptMultipleErrors: () => true, 30 | }) 31 | if (!submission.value) { 32 | return json( 33 | { 34 | status: 'error', 35 | submission, 36 | } as const, 37 | { status: 400 }, 38 | ) 39 | } 40 | if (submission.intent !== 'submit') { 41 | return json({ status: 'success', submission } as const) 42 | } 43 | const session = await getSession(request.headers.get('cookie')) 44 | const { redirectTo, theme } = submission.value 45 | if (theme === 'system') { 46 | deleteTheme(session) 47 | } else { 48 | setTheme(session, theme) 49 | } 50 | 51 | const responseInit = { 52 | headers: { 'Set-Cookie': await commitSession(session) }, 53 | } 54 | if (redirectTo) { 55 | return redirect(safeRedirect(redirectTo), responseInit) 56 | } else { 57 | return json({ success: true }, responseInit) 58 | } 59 | } 60 | 61 | export function ThemeSwitch({ 62 | userPreference, 63 | }: { 64 | userPreference: 'light' | 'dark' | null 65 | }) { 66 | const requestInfo = useRequestInfo() 67 | const fetcher = useFetcher() 68 | const [isHydrated, setIsHydrated] = React.useState(false) 69 | 70 | React.useEffect(() => { 71 | setIsHydrated(true) 72 | }, []) 73 | 74 | const [form] = useForm({ 75 | id: 'onboarding', 76 | lastSubmission: fetcher.data?.submission, 77 | onValidate({ formData }) { 78 | return parse(formData, { schema: ThemeFormSchema }) 79 | }, 80 | }) 81 | 82 | const mode = userPreference ?? 'system' 83 | const nextMode = 84 | mode === 'system' ? 'light' : mode === 'light' ? 'dark' : 'system' 85 | const modeLabel = { 86 | light: ( 87 | <> 88 | 🔆 Light 89 | > 90 | ), 91 | dark: ( 92 | <> 93 | 🌕 Dark 94 | > 95 | ), 96 | system: ( 97 | <> 98 | 💻 System 99 | > 100 | ), 101 | } 102 | 103 | return ( 104 |