Skip to content

Commit fec9671

Browse files
committed
🚀 feat: push project to github
0 parents  commit fec9671

File tree

366 files changed

+48283
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

366 files changed

+48283
-0
lines changed

.dockerignore

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
node_modules
2+
.next
3+
.github
4+
.husky
5+
.env

.env.example

+135
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
# ?========================================================
2+
# !! NEVER COMMIT .env FILE !! ONLY COMMIT .env.example !!
3+
# Improve Your VS Code Experience with the `aaron-bond.better-comments` Extension.
4+
# Default Environment Variable Values. Define default values for environment variables required to run the app.
5+
# Overriding Defaults. These defaults can be overridden by environment-specific .env files, such as .env.development,
6+
# and local .env files like .env.local and .env.development.local.
7+
# Important: No Secrets Here. Never store secrets in this file. Store sensitive information in a .env.local file
8+
# or an environment-specific local .env file, like .env.development.local or .env.test.local.
9+
# Do not commit these local env files to source control.
10+
# Getting Started. If you're new or cloning the repo, use the ".env.example" file as a template to create your ".env" file.
11+
# Keep this file current when adding new variables to `.env`.
12+
# Use Caution When Committing. Remember that this file will be committed to version control. Ensure it does not contain secrets.
13+
# When cloning this repo, create a copy named ".env" and add your secrets.
14+
# Schema Updates. When adding new environment variables, update the schema in "/src/env.mjs" accordingly.
15+
16+
# !! ENV !! Local EXAMPLE
17+
18+
# ?========================================================
19+
20+
# !! DAATABASE CREDENTIALS (https://supabase.io)
21+
22+
# ?? [1] postgresql://<...>?ssl={"rejectUnauthorized":true}
23+
DATABASE_URL=
24+
DIRECT_URL=
25+
DAATABASE_PWD=Gmh70F4ilokvYXo
26+
27+
28+
# ?? [2] Supabase ENV Vars
29+
NEXT_PUBLIC_SUPABASE_URL=
30+
NEXT_PUBLIC_SUPABASE_ANON_KEY=
31+
SUPABASE_TOCKEN=
32+
SUPABASE_SERVICE_KEY=
33+
34+
# !! COMMON CREDENTIALS
35+
36+
# Use the production URL when deploying to production, e.g. https://example.com
37+
# ?? [3] Default host for the app
38+
NEXT_PUBLIC_APP_URL=
39+
40+
41+
# e.g. G-UA-123456789-0
42+
# ?? [4] Google Analytics (for `nextjs-google-analytics`)
43+
NEXT_PUBLIC_GA_MEASUREMENT_ID=
44+
45+
# ?? [5] MAILCHIMP Credentials
46+
NEXT_PUBLIC_MAILCHIMP_URL=
47+
MAILCHIMP_API_KEY=
48+
MAILCHIMP_LIST_ID=
49+
NEXT_PUBLIC_MAILCHIMP_URL=
50+
51+
# ?? [6] Authentication JWT Secret (`openssl rand -base64 32`)
52+
NEXTAUTH_SECRET=
53+
NEXTAUTH_URL=
54+
SECRET_KEY=
55+
56+
# Temporary
57+
VERCEL_URL=
58+
NEXT_PUBLIC_VERCEL_URL=
59+
NEXT_PRIVATE_PREBUNDLED_REACT=
60+
JWT_SECRET=
61+
62+
63+
# !! FILE UPLOADING (https://uploadthing.com)
64+
65+
# ?? [7] UPLOADTHING ****
66+
UPLOADTHING_SECRET=""
67+
UPLOADTHING_APP_ID=""
68+
69+
# !! Builde ANALYZER
70+
ANALYZE= false
71+
72+
73+
# !! RESEND (https://resend.com) (REACT EMAIL BUILDER)
74+
75+
# Resend API Key found at https://resend.com/api-keys
76+
77+
# ?? [8] re_****
78+
RESEND_API_KEY=
79+
# We need to register a domain with Resend to send emails from
80+
# Register a domain at https://resend.com/domains
81+
# Or we can use this email provided by resend for only testing: "onboarding@resend.dev"
82+
# It is not recommended tho
83+
84+
# ?? [9] e.g. "MouadLouhichi <hello@example.dev>"
85+
EMAIL_FROM=""
86+
SMTP_FROM=""
87+
88+
# !! LOGLIB (https://loglib.io)
89+
# ?? [10] LOGLIB_***
90+
LOGLIB_SITE_ID=
91+
LOGLIB_API_KEY=
92+
93+
94+
# ?? [11] CLOUDINARY
95+
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=
96+
CLOUDINARY_API_KEY=
97+
CLOUDINARY_API_SECRET=
98+
99+
100+
101+
# ?? [12]
102+
CLOUDFLARE_API=""
103+
CLOUDFLARE_USER=""
104+
105+
106+
# ?? [13] Google Provider Credential [33]
107+
GOOGLE_ID=
108+
GOOGLE_SECRET=
109+
110+
# ?? [14] Facebook Provider Credential [34]
111+
FACEBOOK_ID=
112+
FACEBOOK_SECRET=
113+
114+
# ?? [15] LINKEDIN Provider Credential [35]
115+
LINKEDIN_ID=
116+
LINKEDIN_SECRET=
117+
118+
# !! UNSORTED ENV VARS
119+
OPENAI=
120+
121+
# ============================================================================
122+
# Default values for environment variables requried to run the app should be
123+
# defined here.
124+
125+
# These variables will be overwritten by any environment-specific .env files,
126+
# such as .env.development, and by and local .env files, such as .env.local and
127+
# .env.development.local.
128+
#
129+
# This file should NOT contain any secrets. Secrets should be placed in a
130+
# .env.local file, or in an environment-specific local .env file, such as
131+
# .env.development.local or .env.test.local. Local env files should not be
132+
# committed to source control.
133+
#
134+
# See https://nextjs.org/docs/basic-features/environment-variables
135+
# ============================================================================

.eslintignore

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# ?? https://eslint.org/docs/latest/use/configure/ignore#the-eslintignore-file
2+
3+
# dependencies
4+
/node_modules
5+
6+
# next.js
7+
/.next
8+
/out
9+
10+
# production
11+
.next/
12+
/build
13+
/dist
14+
15+
# typescript
16+
next-env.d.ts
17+
18+
# temporary
19+
*.tson
20+
21+
# misc
22+
.utils
23+
storybook-static

.eslintrc.cjs

+221
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
// @ts-check
2+
3+
const { defineConfig } = require("eslint-define-config");
4+
5+
const config = defineConfig({
6+
// ==============================================
7+
// | Global: TypeScript + JavaScript + Jest |
8+
// ==============================================
9+
plugins: ["unused-imports"],
10+
rules: {
11+
"unused-imports/no-unused-imports": "error",
12+
"unused-imports/no-unused-vars": [
13+
"warn",
14+
{
15+
vars: "all",
16+
varsIgnorePattern: "^_",
17+
args: "after-used",
18+
argsIgnorePattern: "^_",
19+
},
20+
],
21+
},
22+
23+
root: true,
24+
env: {
25+
es2023: true,
26+
browser: true,
27+
node: true,
28+
},
29+
settings: {
30+
"import/resolver": {
31+
typescript: {
32+
project: ["./tsconfig.json"],
33+
},
34+
},
35+
tailwindcss: {
36+
callees: ["classNames", "clsx", "cls", "cva", "cn"],
37+
config: "./tailwind.config.ts",
38+
},
39+
},
40+
extends: [
41+
"plugin:tailwindcss/recommended",
42+
"plugin:i18n-json/recommended",
43+
"next/core-web-vitals",
44+
"eslint:recommended",
45+
"prettier",
46+
],
47+
48+
overrides: [
49+
// ============================================
50+
// | Override: TypeScript |
51+
// ============================================
52+
53+
{
54+
files: ["*.ts", "*.tsx", "*.mts", "*.cts", "*.d.ts"],
55+
parser: "@typescript-eslint/parser",
56+
parserOptions: {
57+
tsconfigRootDir: __dirname,
58+
project: ["./tsconfig.json"],
59+
ecmaVersion: "latest",
60+
sourceType: "module",
61+
},
62+
plugins: ["@tanstack/query"],
63+
extends: [
64+
"plugin:@tanstack/eslint-plugin-query/recommended",
65+
"plugin:@typescript-eslint/stylistic-type-checked",
66+
"plugin:@typescript-eslint/strict-type-checked",
67+
],
68+
rules: {
69+
// !! We are incrementally moving towards full and strict type safety.
70+
// !! Accordingly, disabled rules will be eliminated in the future.
71+
/**
72+
* @see https://github.com/godaddy/eslint-plugin-i18n-json#readme
73+
*/
74+
"i18n-json/valid-message-syntax": [
75+
2,
76+
{
77+
syntax: "icu",
78+
},
79+
],
80+
"i18n-json/valid-json": 2,
81+
"i18n-json/sorted-keys": [
82+
2,
83+
{
84+
order: "asc",
85+
indentSpaces: 2,
86+
},
87+
],
88+
"i18n-json/identical-keys": 0,
89+
/**
90+
* @see https://typescript-eslint.io
91+
*/
92+
"@typescript-eslint/consistent-type-imports": [
93+
"off",
94+
// "warn",
95+
// {
96+
// prefer: "type-imports",
97+
// fixStyle: "inline-type-imports" // "separate-type-imports"
98+
// }
99+
],
100+
"@typescript-eslint/no-unused-vars": [
101+
//"off",
102+
"warn",
103+
/* {
104+
argsIgnorePattern: "^_",
105+
caughtErrors: "none",
106+
varsIgnorePattern: "^_",
107+
}, */
108+
],
109+
"@typescript-eslint/consistent-type-definitions": [
110+
/* "error", "type" */
111+
"off",
112+
],
113+
"@typescript-eslint/no-non-null-assertion": "off",
114+
"@typescript-eslint/no-unsafe-enum-comparison": "off",
115+
"@typescript-eslint/dot-notation": "off",
116+
"@typescript-eslint/no-floating-promises": "off",
117+
"@typescript-eslint/no-empty-function": "off",
118+
"@typescript-eslint/restrict-plus-operands": "off",
119+
"@typescript-eslint/non-nullable-type-assertion-style": "off",
120+
"@tanstack/query/exhaustive-deps": "error",
121+
"@typescript-eslint/restrict-template-expressions": "off",
122+
"no-case-declarations": "off",
123+
"@typescript-eslint/no-unnecessary-type-arguments": "off",
124+
"@typescript-eslint/consistent-indexed-object-style": "off",
125+
"no-constant-condition": "off",
126+
"@next/next/no-html-link-for-pages": "off",
127+
"@typescript-eslint/ban-ts-comment": "off",
128+
"@typescript-eslint/no-explicit-any": "off",
129+
"@typescript-eslint/no-misused-promises": "off",
130+
"@typescript-eslint/no-empty-interface": "off",
131+
"@typescript-eslint/prefer-nullish-coalescing": "off",
132+
"@typescript-eslint/array-type": "off",
133+
"@typescript-eslint/no-meaningless-void-operator": "off",
134+
"@typescript-eslint/no-confusing-void-expression": "off",
135+
"@typescript-eslint/prefer-optional-chain": "off",
136+
"@typescript-eslint/no-unnecessary-condition": "off",
137+
"@tanstack/query/prefer-query-object-syntax": "error",
138+
"@typescript-eslint/no-redundant-type-constituents": "off",
139+
"@typescript-eslint/no-unnecessary-type-assertion": "off",
140+
"@typescript-eslint/no-unsafe-argument": "off",
141+
"@typescript-eslint/no-unsafe-assignment": "off",
142+
"@typescript-eslint/no-unsafe-member-access": "off",
143+
"@typescript-eslint/no-unsafe-call": "off",
144+
"@typescript-eslint/no-unsafe-return": "off",
145+
"@typescript-eslint/require-await": "off",
146+
"react-hooks/exhaustive-deps": "off",
147+
"react/display-name": "off",
148+
"react/no-unescaped-entities": "off",
149+
"tailwindcss/classnames-order": "off",
150+
"tailwindcss/enforces-shorthand": "off",
151+
"tailwindcss/migration-from-tailwind-2": "off",
152+
"tailwindcss/no-custom-classname": "off",
153+
"import/order": [
154+
"off",
155+
// "error",
156+
// {
157+
// "newlines-between": "always",
158+
// groups: [
159+
// ["builtin", "external"],
160+
// "internal",
161+
// ["sibling", "parent"],
162+
// "index",
163+
// "object",
164+
// "type"
165+
// ],
166+
// alphabetize: {
167+
// order: "asc"
168+
// }
169+
// }
170+
],
171+
"sort-imports": [
172+
"off",
173+
// "error",
174+
// {
175+
// ignoreDeclarationSort: true
176+
// }
177+
],
178+
},
179+
},
180+
181+
// ============================================
182+
// | Override: JavaScript |
183+
// ============================================
184+
185+
{
186+
files: ["*.js", "*.jsx", "*.mjs", "*.cjs"],
187+
},
188+
189+
// ============================================
190+
// | Override: Jest (JavaScript) |
191+
// ============================================
192+
193+
{
194+
files: ["**/__tests__/**/*.{ts,tsx}", "**/*.test.{ts,tsx}"],
195+
env: { "jest/globals": true },
196+
plugins: ["jest"],
197+
extends: [
198+
"plugin:@typescript-eslint/stylistic-type-checked",
199+
"plugin:@typescript-eslint/strict-type-checked",
200+
"plugin:jest-extended/all",
201+
"plugin:jest/style",
202+
"plugin:jest/all",
203+
],
204+
rules: {
205+
// !! We are incrementally moving towards full and strict type safety.
206+
// !! Accordingly, disabled rules will be eliminated in the future.
207+
"@typescript-eslint/prefer-nullish-coalescing": "off",
208+
"@typescript-eslint/no-non-null-assertion": "off",
209+
"jest/prefer-expect-assertions": "off",
210+
"jest/no-disabled-tests": "warn",
211+
"jest/no-focused-tests": "error",
212+
"jest/no-identical-title": "error",
213+
"jest/prefer-to-have-length": "warn",
214+
"jest/valid-expect": "error",
215+
"jest/require-top-level-describe": "off",
216+
},
217+
},
218+
],
219+
});
220+
221+
module.exports = config;

.gitattributes

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Auto detect text files and perform LF normalization
2+
* text=auto

.github/funding.yml

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
github: [mouadlouhichi]

0 commit comments

Comments
 (0)