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>
This commit is contained in:
Nicholai 2025-08-07 15:33:04 -06:00
commit 11410f9727
301 changed files with 40107 additions and 0 deletions

28
.env.example Normal file
View 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
View 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
View 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
View File

@ -0,0 +1,5 @@
node_modules
# Keep environment variables out of version control
.env
/generated/prisma

1
.husky/pre-commit Normal file
View File

@ -0,0 +1 @@
npm test

View 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
View 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
View File

@ -0,0 +1 @@
{"previewModeId":"20bcc895df914f912b83ce1e1fed7cb1","previewModeSigningKey":"587d5f5563565ce53d7183f6460e92713a69e12d84cb3cc8bc837aedde050ecb","previewModeEncryptionKey":"5b2c8c793f7648960cc5bf38e9ee77d89f1a5c956e06bd55a4d27c5c6e8eb294","expireAt":1755770701011}

1
.next/cache/.rscinfo vendored Normal file
View File

@ -0,0 +1 @@
{"encryption.key":"JltOaK9Mj8BftcAmgT+TY2d4dlxRthOhqwcgE7jdmmI=","encryption.expire_at":1755769549461}

1
.next/cache/.tsbuildinfo vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View 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
View File

@ -0,0 +1 @@
{"type": "commonjs"}

View File

@ -0,0 +1,11 @@
{
"version": 4,
"routes": {},
"dynamicRoutes": {},
"notFoundRoutes": [],
"preview": {
"previewModeId": "fb9c4c4984fa8ec7728081b65244da96",
"previewModeSigningKey": "a00eee57bc84f3e56bf99a6e7889d544d441eecbb3eea92572e7e837103c4aca",
"previewModeEncryptionKey": "8a983d8d3104253a5373340d2ae4307db99934c4c0bc7d3a0c2406420e85ab22"
}
}

View File

@ -0,0 +1 @@
{}

View 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

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,4 @@
{
"/page": "app/page.js",
"/project/[id]/page": "app/project/[id]/page.js"
}

Some files were not shown because too many files have changed in this diff Show More