Initial project setup with Next.js, Tailwind CSS, TypeScript, and ESLint configuration
- Configured Next.js app with app router - Set up Tailwind CSS with custom dark theme - Implemented providers with SessionProvider and ThemeProvider - Added toast system - Configured ESLint and Prettier - Set up pre-commit hooks with husky and lint-staged 🚀 Generated with [opencode](https://opencode.ai) Co-Authored-By: opencode <noreply@opencode.ai>
28
.env.example
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# Example environment variables for local development and for copying to .env.local or .env.production
|
||||||
|
|
||||||
|
# Database (SQLite local or a production Postgres URL)
|
||||||
|
# For SQLite (local dev):
|
||||||
|
DATABASE_URL="file:./dev.db"
|
||||||
|
# For Postgres (production):
|
||||||
|
# DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public"
|
||||||
|
|
||||||
|
# NextAuth configuration
|
||||||
|
NEXTAUTH_URL="http://localhost:3000"
|
||||||
|
# Use a strong random string in production (e.g. `openssl rand -base64 32`)
|
||||||
|
NEXTAUTH_SECRET="your-nextauth-secret-here"
|
||||||
|
|
||||||
|
# Web3Forms (contact form)
|
||||||
|
WEB3FORMS_ACCESS_KEY="your-web3forms-access-key-here"
|
||||||
|
|
||||||
|
# Optional SMTP (for password reset / emails)
|
||||||
|
# SMTP_HOST=smtp.example.com
|
||||||
|
# SMTP_PORT=587
|
||||||
|
# SMTP_USER=your-smtp-user
|
||||||
|
# SMTP_PASS=your-smtp-password
|
||||||
|
|
||||||
|
# Optional upload provider (Cloudinary / Uploadthing)
|
||||||
|
# CLOUDINARY_URL=cloudinary://API_KEY:API_SECRET@CLOUD_NAME
|
||||||
|
# UPLOADTHING_SECRET=your-uploadthing-secret
|
||||||
|
|
||||||
|
# Node environment
|
||||||
|
NODE_ENV=development
|
||||||
9
.env.local
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Database
|
||||||
|
DATABASE_URL="file:./dev.db"
|
||||||
|
|
||||||
|
# NextAuth
|
||||||
|
NEXTAUTH_URL="http://localhost:3000"
|
||||||
|
NEXTAUTH_SECRET="your-secret-key-here-change-in-production"
|
||||||
|
|
||||||
|
# Web3Forms (for contact form)
|
||||||
|
WEB3FORMS_ACCESS_KEY="cf89ee88-fb13-4091-ac7c-96249aa34eb0"
|
||||||
22
.eslintrc.json
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"extends": [
|
||||||
|
"next/core-web-vitals",
|
||||||
|
"plugin:@typescript-eslint/recommended",
|
||||||
|
"plugin:prettier/recommended"
|
||||||
|
],
|
||||||
|
"plugins": ["@typescript-eslint", "prettier"],
|
||||||
|
"rules": {
|
||||||
|
"prettier/prettier": "error",
|
||||||
|
"@typescript-eslint/explicit-function-return-type": "off",
|
||||||
|
"@typescript-eslint/no-explicit-any": "error",
|
||||||
|
"no-console": "warn",
|
||||||
|
"react/prop-types": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": [
|
||||||
|
"warn",
|
||||||
|
{
|
||||||
|
"argsIgnorePattern": "^_",
|
||||||
|
"varsIgnorePattern": "^_"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
node_modules
|
||||||
|
# Keep environment variables out of version control
|
||||||
|
.env
|
||||||
|
|
||||||
|
/generated/prisma
|
||||||
1
.husky/pre-commit
Normal file
@ -0,0 +1 @@
|
|||||||
|
npm test
|
||||||
45
.next/app-build-manifest.json
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"pages": {
|
||||||
|
"/layout": [
|
||||||
|
"static/chunks/webpack.js",
|
||||||
|
"static/chunks/main-app.js",
|
||||||
|
"static/css/app/layout.css",
|
||||||
|
"static/chunks/app/layout.js"
|
||||||
|
],
|
||||||
|
"/page": [
|
||||||
|
"static/chunks/webpack.js",
|
||||||
|
"static/chunks/main-app.js",
|
||||||
|
"static/chunks/app/page.js"
|
||||||
|
],
|
||||||
|
"/api/auth/[...nextauth]/route": [
|
||||||
|
"static/chunks/webpack.js",
|
||||||
|
"static/chunks/main-app.js",
|
||||||
|
"static/chunks/app/api/auth/[...nextauth]/route.js"
|
||||||
|
],
|
||||||
|
"/blog/page": [
|
||||||
|
"static/chunks/webpack.js",
|
||||||
|
"static/chunks/main-app.js",
|
||||||
|
"static/chunks/app/blog/page.js"
|
||||||
|
],
|
||||||
|
"/contact/page": [
|
||||||
|
"static/chunks/webpack.js",
|
||||||
|
"static/chunks/main-app.js",
|
||||||
|
"static/chunks/app/contact/page.js"
|
||||||
|
],
|
||||||
|
"/faq/page": [
|
||||||
|
"static/chunks/webpack.js",
|
||||||
|
"static/chunks/main-app.js",
|
||||||
|
"static/chunks/app/faq/page.js"
|
||||||
|
],
|
||||||
|
"/project/[id]/page": [
|
||||||
|
"static/chunks/webpack.js",
|
||||||
|
"static/chunks/main-app.js",
|
||||||
|
"static/chunks/app/project/[id]/page.js"
|
||||||
|
],
|
||||||
|
"/crew/page": [
|
||||||
|
"static/chunks/webpack.js",
|
||||||
|
"static/chunks/main-app.js",
|
||||||
|
"static/chunks/app/crew/page.js"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
31
.next/build-manifest.json
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"polyfillFiles": [
|
||||||
|
"static/chunks/polyfills.js"
|
||||||
|
],
|
||||||
|
"devFiles": [
|
||||||
|
"static/chunks/react-refresh.js"
|
||||||
|
],
|
||||||
|
"ampDevFiles": [],
|
||||||
|
"lowPriorityFiles": [
|
||||||
|
"static/development/_buildManifest.js",
|
||||||
|
"static/development/_ssgManifest.js"
|
||||||
|
],
|
||||||
|
"rootMainFiles": [
|
||||||
|
"static/chunks/webpack.js",
|
||||||
|
"static/chunks/main-app.js"
|
||||||
|
],
|
||||||
|
"rootMainFilesTree": {},
|
||||||
|
"pages": {
|
||||||
|
"/_app": [
|
||||||
|
"static/chunks/webpack.js",
|
||||||
|
"static/chunks/main.js",
|
||||||
|
"static/chunks/pages/_app.js"
|
||||||
|
],
|
||||||
|
"/_error": [
|
||||||
|
"static/chunks/webpack.js",
|
||||||
|
"static/chunks/main.js",
|
||||||
|
"static/chunks/pages/_error.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ampFirstPages": []
|
||||||
|
}
|
||||||
1
.next/cache/.previewinfo
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"previewModeId":"20bcc895df914f912b83ce1e1fed7cb1","previewModeSigningKey":"587d5f5563565ce53d7183f6460e92713a69e12d84cb3cc8bc837aedde050ecb","previewModeEncryptionKey":"5b2c8c793f7648960cc5bf38e9ee77d89f1a5c956e06bd55a4d27c5c6e8eb294","expireAt":1755770701011}
|
||||||
1
.next/cache/.rscinfo
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"encryption.key":"JltOaK9Mj8BftcAmgT+TY2d4dlxRthOhqwcgE7jdmmI=","encryption.expire_at":1755769549461}
|
||||||
1
.next/cache/.tsbuildinfo
vendored
Normal file
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
BIN
.next/cache/webpack/client-development-fallback/0.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development-fallback/1.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development-fallback/1.pack.gz_
vendored
Normal file
BIN
.next/cache/webpack/client-development-fallback/index.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development-fallback/index.pack.gz.old
vendored
Normal file
BIN
.next/cache/webpack/client-development/0.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/1.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/10.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/11.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/12.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/13.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/14.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/15.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/2.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/3.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/4.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/5.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/6.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/7.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/8.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/9.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/index.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/client-development/index.pack.gz.old
vendored
Normal file
BIN
.next/cache/webpack/client-production/0.pack
vendored
Normal file
BIN
.next/cache/webpack/client-production/1.pack
vendored
Normal file
BIN
.next/cache/webpack/client-production/2.pack
vendored
Normal file
BIN
.next/cache/webpack/client-production/index.pack
vendored
Normal file
BIN
.next/cache/webpack/client-production/index.pack.old
vendored
Normal file
BIN
.next/cache/webpack/edge-server-production/0.pack
vendored
Normal file
BIN
.next/cache/webpack/edge-server-production/index.pack
vendored
Normal file
BIN
.next/cache/webpack/server-development/0.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/1.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/10.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/11.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/12.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/13.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/14.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/15.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/16.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/17.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/2.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/3.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/4.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/5.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/6.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/7.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/8.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/9.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/index.pack.gz
vendored
Normal file
BIN
.next/cache/webpack/server-development/index.pack.gz.old
vendored
Normal file
BIN
.next/cache/webpack/server-production/0.pack
vendored
Normal file
BIN
.next/cache/webpack/server-production/1.pack
vendored
Normal file
BIN
.next/cache/webpack/server-production/2.pack
vendored
Normal file
BIN
.next/cache/webpack/server-production/index.pack
vendored
Normal file
BIN
.next/cache/webpack/server-production/index.pack.old
vendored
Normal file
31
.next/fallback-build-manifest.json
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"polyfillFiles": [
|
||||||
|
"static/chunks/polyfills.js"
|
||||||
|
],
|
||||||
|
"devFiles": [
|
||||||
|
"static/chunks/fallback/react-refresh.js"
|
||||||
|
],
|
||||||
|
"ampDevFiles": [
|
||||||
|
"static/chunks/fallback/webpack.js",
|
||||||
|
"static/chunks/fallback/amp.js"
|
||||||
|
],
|
||||||
|
"lowPriorityFiles": [],
|
||||||
|
"rootMainFiles": [
|
||||||
|
"static/chunks/fallback/webpack.js",
|
||||||
|
"static/chunks/fallback/main-app.js"
|
||||||
|
],
|
||||||
|
"rootMainFilesTree": {},
|
||||||
|
"pages": {
|
||||||
|
"/_app": [
|
||||||
|
"static/chunks/fallback/webpack.js",
|
||||||
|
"static/chunks/fallback/main.js",
|
||||||
|
"static/chunks/fallback/pages/_app.js"
|
||||||
|
],
|
||||||
|
"/_error": [
|
||||||
|
"static/chunks/fallback/webpack.js",
|
||||||
|
"static/chunks/fallback/main.js",
|
||||||
|
"static/chunks/fallback/pages/_error.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ampFirstPages": []
|
||||||
|
}
|
||||||
1
.next/package.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"type": "commonjs"}
|
||||||
11
.next/prerender-manifest.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"version": 4,
|
||||||
|
"routes": {},
|
||||||
|
"dynamicRoutes": {},
|
||||||
|
"notFoundRoutes": [],
|
||||||
|
"preview": {
|
||||||
|
"previewModeId": "fb9c4c4984fa8ec7728081b65244da96",
|
||||||
|
"previewModeSigningKey": "a00eee57bc84f3e56bf99a6e7889d544d441eecbb3eea92572e7e837103c4aca",
|
||||||
|
"previewModeEncryptionKey": "8a983d8d3104253a5373340d2ae4307db99934c4c0bc7d3a0c2406420e85ab22"
|
||||||
|
}
|
||||||
|
}
|
||||||
1
.next/react-loadable-manifest.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
1
.next/routes-manifest.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"caseSensitive":false,"basePath":"","rewrites":{"beforeFiles":[],"afterFiles":[{"source":"/admin/:path*","destination":"/admin/:path*","regex":"^\\/admin(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))?(?:\\/)?$","check":true}],"fallback":[]},"redirects":[{"source":"/:path+/","destination":"/:path+","permanent":true,"internal":true,"regex":"^(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))\\/$"}],"headers":[]}
|
||||||
146
.next/server/_error.js
Normal file
4
.next/server/app-paths-manifest.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"/page": "app/page.js",
|
||||||
|
"/project/[id]/page": "app/project/[id]/page.js"
|
||||||
|
}
|
||||||