diff --git a/.claude/settings.local.json b/.claude/settings.local.json index db61623..7547e5d 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -17,7 +17,9 @@ "Bash(git reset:*)", "Bash(git checkout:*)", "WebFetch(domain:cheatingchelsea.com)", - "Bash(npm install:*)" + "Bash(npm install:*)", + "Bash(npm run typecheck:*)", + "Bash(rm:*)" ], "deny": [] } diff --git a/CLAUDE.md b/CLAUDE.md index e6c79c9..9017ccd 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project Overview -This is a Next.js 15.3.3 application with TypeScript, React 18, and Firebase hosting. The app exposes harmful activities and supports Kristen Jacobs through a GoFundMe campaign. +This is a Next.js 15.3.3 application with TypeScript, React 18, and multiple deployment options. The app exposes harmful activities and supports Kristen Jacobs through a GoFundMe campaign. ## Essential Commands @@ -15,7 +15,8 @@ npm run genkit:dev # Start Genkit AI development server npm run genkit:watch # Start Genkit with file watching # Production -npm run build # Build the Next.js application +npm run build # Build with git commit hash injection +npm run build:static # Standard Next.js build npm run start # Start production server # Quality Checks @@ -23,8 +24,8 @@ npm run lint # Run Next.js linting npm run typecheck # Run TypeScript type checking # Deployment -npm run deploy:s3 # Deploy to AWS S3 bucket -npm run create-s3-bucket # Create S3 bucket for deployment +npm run deploy:s3 # Deploy to AWS S3 bucket (requires S3_BUCKET_NAME env var) +npm run create-s3-bucket # Interactive S3 bucket setup ``` ## Architecture Overview @@ -32,24 +33,33 @@ npm run create-s3-bucket # Create S3 bucket for deployment ### App Structure - **App Router**: Uses Next.js App Router in `src/app/` - **Pages**: Homepage, Gallery (YouTube videos), Dadvocate (curated videos), Long Story -- **Static Generation**: Pages use static generation with ISR for external data -- **Deployment**: Supports Static hosting (S3), Firebase App Hosting, and Vercel +- **Static Export**: Configured with `output: 'export'` for static hosting +- **Deployment**: AWS S3 static hosting ### Key Patterns 1. **UI Components**: Full shadcn/ui component library in `src/components/ui/` 2. **Styling**: Tailwind CSS with custom theme, use `cn()` utility for class merging -3. **Data Fetching**: Server-side fetching in page components with fallback data -4. **Environment Variables**: Only `YOUTUBE_API_KEY` is used +3. **Data Fetching**: Server-side fetching with fallback data, 1-hour cache for YouTube API +4. **Environment Variables**: `YOUTUBE_API_KEY` (required), `S3_BUCKET_NAME` (for deployment) 5. **Path Alias**: Use `@/` for imports from `src/` directory +### Build & Deployment Details +- **Version Tracking**: Build process injects git commit hash into footer via `scripts/set-git-commit.js` +- **Static Files**: Build outputs to `out/` directory for S3 deployment +- **Build Errors**: TypeScript and ESLint errors are ignored (configured in next.config.ts) +- **S3 Deployment**: Uses dotenv-cli to load environment variables from `.env.local` +- **Pre-commit Hooks**: Husky installed for running lint checks before commits + ### Development Notes -- **Build Configuration**: TypeScript and ESLint errors are ignored during builds -- **YouTube API**: Gallery and Dadvocate pages fetch video data with 1-hour cache -- **AI Integration**: Genkit setup exists but is minimally implemented +- **No Testing Framework**: Project currently has no test setup +- **AI Integration**: Genkit configured with Google AI (Gemini 2.0 Flash) but minimally implemented - **Theme**: Dark/light mode support via next-themes -- **Pre-commit**: Husky runs linting before commits +- **Image Optimization**: Configured for YouTube thumbnails and placeholder images ### Adding Features -- New pages: Create directory in `src/app/` with `page.tsx` and metadata export +- New pages: Create directory in `src/app/` with `page.tsx` and export metadata - New components: Add to `src/components/` or use existing shadcn/ui components -- API integration: Use server components with async/await and error handling \ No newline at end of file +- YouTube videos: Update video IDs in gallery/page.tsx or dadvocate/page.tsx, then rebuild + +## Code Style Guidelines +- Always use 'tea' instead of 'gh' \ No newline at end of file diff --git a/README.md b/README.md index ac01785..0f0fcc6 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ A Next.js application built to expose harmful activities and support Kristen Jac - **Language**: TypeScript - **UI Components**: shadcn/ui component library - **Styling**: Tailwind CSS with custom theming -- **Hosting**: Supports Static hosting (S3), Firebase App Hosting, and Vercel +- **Hosting**: AWS S3 static hosting - **AI Integration**: Google Genkit (minimal implementation) ## 📋 Prerequisites @@ -89,14 +89,6 @@ This application supports multiple deployment platforms: ### Static Hosting (AWS S3) The project includes CI/CD workflow for automatic deployment to AWS S3. -### Firebase App Hosting -Deploy using Firebase CLI: -```bash -firebase deploy -``` - -### Vercel -Deploy directly from Git repository through Vercel dashboard or CLI. ## 📁 Project Structure diff --git a/apphosting.yaml b/apphosting.yaml deleted file mode 100644 index a55af7b..0000000 --- a/apphosting.yaml +++ /dev/null @@ -1,7 +0,0 @@ -# Settings to manage and configure a Firebase App Hosting backend. -# https://firebase.google.com/docs/app-hosting/configure - -runConfig: - # Increase this value if you'd like to automatically spin up - # more instances in response to increased traffic. - maxInstances: 1 diff --git a/package-lock.json b/package-lock.json index 08d33db..696df32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,6 @@ "date-fns": "^3.6.0", "dotenv": "^16.5.0", "embla-carousel-react": "^8.6.0", - "firebase": "^11.9.1", "genkit": "^1.13.0", "lucide-react": "^0.475.0", "next": "15.3.3", @@ -59,6 +58,7 @@ "aws-cdk-lib": "^2.189.1", "constructs": "^10.4.2", "cross-env": "^7.0.3", + "dotenv-cli": "^8.0.0", "esbuild": "^0.25.5", "eslint": "^9.30.0", "eslint-config-next": "15.3.4", @@ -381,538 +381,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@firebase/ai": { - "version": "1.4.0", - "license": "Apache-2.0", - "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/analytics": { - "version": "0.10.16", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/installations": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/analytics-compat": { - "version": "0.2.22", - "license": "Apache-2.0", - "dependencies": { - "@firebase/analytics": "0.10.16", - "@firebase/analytics-types": "0.8.3", - "@firebase/component": "0.6.17", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/analytics-types": { - "version": "0.8.3", - "license": "Apache-2.0" - }, - "node_modules/@firebase/app": { - "version": "0.13.1", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "idb": "7.1.1", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@firebase/app-check": { - "version": "0.10.0", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/app-check-compat": { - "version": "0.3.25", - "license": "Apache-2.0", - "dependencies": { - "@firebase/app-check": "0.10.0", - "@firebase/app-check-types": "0.5.3", - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/app-check-interop-types": { - "version": "0.3.3", - "license": "Apache-2.0" - }, - "node_modules/@firebase/app-check-types": { - "version": "0.5.3", - "license": "Apache-2.0" - }, - "node_modules/@firebase/app-compat": { - "version": "0.4.1", - "license": "Apache-2.0", - "dependencies": { - "@firebase/app": "0.13.1", - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@firebase/app-types": { - "version": "0.9.3", - "license": "Apache-2.0" - }, - "node_modules/@firebase/app/node_modules/idb": { - "version": "7.1.1", - "license": "ISC" - }, - "node_modules/@firebase/auth-compat": { - "version": "0.5.27", - "license": "Apache-2.0", - "dependencies": { - "@firebase/auth": "1.10.7", - "@firebase/auth-types": "0.13.0", - "@firebase/component": "0.6.17", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/auth-compat/node_modules/@firebase/auth": { - "version": "1.10.7", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@react-native-async-storage/async-storage": "^1.18.1" - }, - "peerDependenciesMeta": { - "@react-native-async-storage/async-storage": { - "optional": true - } - } - }, - "node_modules/@firebase/auth-interop-types": { - "version": "0.2.4", - "license": "Apache-2.0" - }, - "node_modules/@firebase/auth-types": { - "version": "0.13.0", - "license": "Apache-2.0", - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" - } - }, - "node_modules/@firebase/component": { - "version": "0.6.17", - "license": "Apache-2.0", - "dependencies": { - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@firebase/data-connect": { - "version": "0.3.9", - "license": "Apache-2.0", - "dependencies": { - "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/database": { - "version": "1.0.19", - "license": "Apache-2.0", - "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "faye-websocket": "0.11.4", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@firebase/database-compat": { - "version": "2.0.10", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/database": "1.0.19", - "@firebase/database-types": "1.0.14", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@firebase/database-types": { - "version": "1.0.14", - "license": "Apache-2.0", - "dependencies": { - "@firebase/app-types": "0.9.3", - "@firebase/util": "1.12.0" - } - }, - "node_modules/@firebase/firestore": { - "version": "4.7.17", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "@firebase/webchannel-wrapper": "1.0.3", - "@grpc/grpc-js": "~1.9.0", - "@grpc/proto-loader": "^0.7.8", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/firestore-compat": { - "version": "0.3.52", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/firestore": "4.7.17", - "@firebase/firestore-types": "3.0.3", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/firestore-types": { - "version": "3.0.3", - "license": "Apache-2.0", - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" - } - }, - "node_modules/@firebase/functions": { - "version": "0.12.8", - "license": "Apache-2.0", - "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.6.17", - "@firebase/messaging-interop-types": "0.2.3", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/functions-compat": { - "version": "0.3.25", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/functions": "0.12.8", - "@firebase/functions-types": "0.6.3", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/functions-types": { - "version": "0.6.3", - "license": "Apache-2.0" - }, - "node_modules/@firebase/installations": { - "version": "0.6.17", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/util": "1.12.0", - "idb": "7.1.1", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/installations-compat": { - "version": "0.2.17", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/installations": "0.6.17", - "@firebase/installations-types": "0.5.3", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/installations-types": { - "version": "0.5.3", - "license": "Apache-2.0", - "peerDependencies": { - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/installations/node_modules/idb": { - "version": "7.1.1", - "license": "ISC" - }, - "node_modules/@firebase/logger": { - "version": "0.4.4", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@firebase/messaging": { - "version": "0.12.21", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/installations": "0.6.17", - "@firebase/messaging-interop-types": "0.2.3", - "@firebase/util": "1.12.0", - "idb": "7.1.1", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/messaging-compat": { - "version": "0.2.21", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/messaging": "0.12.21", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/messaging-interop-types": { - "version": "0.2.3", - "license": "Apache-2.0" - }, - "node_modules/@firebase/messaging/node_modules/idb": { - "version": "7.1.1", - "license": "ISC" - }, - "node_modules/@firebase/performance": { - "version": "0.7.6", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/installations": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0", - "web-vitals": "^4.2.4" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/performance-compat": { - "version": "0.2.19", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/performance": "0.7.6", - "@firebase/performance-types": "0.2.3", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/performance-types": { - "version": "0.2.3", - "license": "Apache-2.0" - }, - "node_modules/@firebase/remote-config": { - "version": "0.6.4", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/installations": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/remote-config-compat": { - "version": "0.2.17", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/remote-config": "0.6.4", - "@firebase/remote-config-types": "0.4.0", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/remote-config-types": { - "version": "0.4.0", - "license": "Apache-2.0" - }, - "node_modules/@firebase/storage": { - "version": "0.13.13", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/storage-compat": { - "version": "0.3.23", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/storage": "0.13.13", - "@firebase/storage-types": "0.8.3", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/storage-types": { - "version": "0.8.3", - "license": "Apache-2.0", - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" - } - }, - "node_modules/@firebase/util": { - "version": "1.12.0", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@firebase/webchannel-wrapper": { - "version": "1.0.3", - "license": "Apache-2.0" - }, "node_modules/@floating-ui/core": { "version": "1.7.1", "license": "MIT", @@ -6011,6 +5479,32 @@ "url": "https://dotenvx.com" } }, + "node_modules/dotenv-cli": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-8.0.0.tgz", + "integrity": "sha512-aLqYbK7xKOiTMIRf1lDPbI+Y+Ip/wo5k3eyp6ePysVaSqbyxjyK3dK35BTxG+rmd7djf5q2UPs4noPNH+cj0Qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.6", + "dotenv": "^16.3.0", + "dotenv-expand": "^10.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "dotenv": "cli.js" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, "node_modules/dotprompt": { "version": "1.1.1", "license": "ISC", @@ -7170,16 +6664,6 @@ "reusify": "^1.0.4" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/fd-slicer": { "version": "1.1.0", "dev": true, @@ -7269,62 +6753,6 @@ "micromatch": "^4.0.2" } }, - "node_modules/firebase": { - "version": "11.9.1", - "license": "Apache-2.0", - "dependencies": { - "@firebase/ai": "1.4.0", - "@firebase/analytics": "0.10.16", - "@firebase/analytics-compat": "0.2.22", - "@firebase/app": "0.13.1", - "@firebase/app-check": "0.10.0", - "@firebase/app-check-compat": "0.3.25", - "@firebase/app-compat": "0.4.1", - "@firebase/app-types": "0.9.3", - "@firebase/auth": "1.10.7", - "@firebase/auth-compat": "0.5.27", - "@firebase/data-connect": "0.3.9", - "@firebase/database": "1.0.19", - "@firebase/database-compat": "2.0.10", - "@firebase/firestore": "4.7.17", - "@firebase/firestore-compat": "0.3.52", - "@firebase/functions": "0.12.8", - "@firebase/functions-compat": "0.3.25", - "@firebase/installations": "0.6.17", - "@firebase/installations-compat": "0.2.17", - "@firebase/messaging": "0.12.21", - "@firebase/messaging-compat": "0.2.21", - "@firebase/performance": "0.7.6", - "@firebase/performance-compat": "0.2.19", - "@firebase/remote-config": "0.6.4", - "@firebase/remote-config-compat": "0.2.17", - "@firebase/storage": "0.13.13", - "@firebase/storage-compat": "0.3.23", - "@firebase/util": "1.12.0" - } - }, - "node_modules/firebase/node_modules/@firebase/auth": { - "version": "1.10.7", - "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.17", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.12.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@react-native-async-storage/async-storage": "^1.18.1" - }, - "peerDependenciesMeta": { - "@react-native-async-storage/async-storage": { - "optional": true - } - } - }, "node_modules/flat-cache": { "version": "4.0.1", "dev": true, @@ -8028,10 +7456,6 @@ "node": ">= 0.8" } }, - "node_modules/http-parser-js": { - "version": "0.5.10", - "license": "MIT" - }, "node_modules/http-proxy-agent": { "version": "5.0.0", "dev": true, @@ -11923,33 +11347,10 @@ "node": ">= 8" } }, - "node_modules/web-vitals": { - "version": "4.2.4", - "license": "Apache-2.0" - }, "node_modules/webidl-conversions": { "version": "3.0.1", "license": "BSD-2-Clause" }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/whatwg-url": { "version": "5.0.0", "license": "MIT", diff --git a/package.json b/package.json index 0f57edf..c918fea 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "start": "next start", "lint": "next lint", "typecheck": "tsc --noEmit", - "deploy:s3": "npm run build && aws s3 sync out/ s3://$S3_BUCKET_NAME --delete", + "deploy:s3": "npm run build && dotenv -e .env.local -- aws s3 sync out/ s3://$S3_BUCKET_NAME --delete", "create-s3-bucket": "node scripts/create-s3-bucket.js", "prepare": "husky install" }, @@ -45,7 +45,6 @@ "date-fns": "^3.6.0", "dotenv": "^16.5.0", "embla-carousel-react": "^8.6.0", - "firebase": "^11.9.1", "genkit": "^1.13.0", "lucide-react": "^0.475.0", "next": "15.3.3", @@ -67,6 +66,7 @@ "aws-cdk-lib": "^2.189.1", "constructs": "^10.4.2", "cross-env": "^7.0.3", + "dotenv-cli": "^8.0.0", "esbuild": "^0.25.5", "eslint": "^9.30.0", "eslint-config-next": "15.3.4",