Premium SaaS product showcase and marketing website for Studio42.dev.
- Product Showcase: Beautiful product pages with media carousels, features, and pricing
- Universal Contact System: Dynamic contact form with URL parameter support
- AI Assistant: Groq-powered chat widget with semantic search
- Admin Dashboard: Secure admin interface for managing contacts and email configuration
- Email System: Configurable SMTP email notifications
- Frontend: Next.js 16 (App Router), React 19, TypeScript, Custom CSS
- Backend: Next.js API Routes, Node.js 20+
- Database: PostgreSQL 15+ with pgvector extension, Prisma ORM
- AI: Groq API (OpenAI-compatible) with tool calling
- Email: SMTP (Nodemailer, optional/admin-configurable)
- Auth: NextAuth.js v5 (beta)
- Testing: Jest, React Testing Library, Playwright
- Node.js 20+
- PostgreSQL 15+ with pgvector extension
- npm or yarn
- Clone the repository:
git clone <repository-url>
cd studio42.dev- Install dependencies:
npm install- Set up environment variables:
cp .env.example .env.local
# Edit .env.local with your configuration- Set up the database:
# Create database and enable pgvector
sudo -u postgres psql
CREATE DATABASE studio42_website;
CREATE USER studio42_user WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE studio42_website TO studio42_user;
\c studio42_website
CREATE EXTENSION IF NOT EXISTS vector;
\q- Run migrations and seed:
npm run db:migrate
npm run db:seed- Start development server:
npm run devVisit http://localhost:3000
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm test- Run testsnpm run test:coverage- Run tests with coveragenpm run test:e2e- Run E2E tests with Playwrightnpm run db:migrate- Run database migrationsnpm run db:seed- Seed database with initial datanpm run db:studio- Open Prisma Studio
See .env.example for required environment variables:
DATABASE_URL- PostgreSQL connection stringNEXTAUTH_SECRET- Secret for NextAuth.jsNEXTAUTH_URL- Base URL for authenticationGROQ_API_KEY- Groq API key for AI assistantOPENAI_API_KEY- OpenAI API key for embeddings (optional)GROQ_MODEL- Groq model name (default: llama-3.1-70b-versatile)EMBEDDING_MODEL- Embedding model (default: text-embedding-3-small)
The project maintains 90%+ test coverage with:
- Unit tests (Jest)
- Integration tests (Jest)
- E2E tests (Playwright)
Run all tests:
npm run test:allBuild and run with Docker:
docker build -t studio42-website .
docker run -p 3000:3000 --env-file .env.local studio42-website- Build the application:
npm run build- Start the production server:
npm start- Set up reverse proxy (nginx recommended) with SSL
studio42.dev/
├── app/ # Next.js App Router pages
│ ├── (public)/ # Public pages
│ ├── admin/ # Admin pages (protected)
│ └── api/ # API routes
├── components/ # React components
│ ├── admin/ # Admin components
│ ├── ai/ # AI assistant components
│ ├── contact/ # Contact form components
│ └── products/ # Product components
├── lib/ # Utility libraries
├── prisma/ # Prisma schema and migrations
├── scripts/ # Utility scripts
├── styles/ # CSS files
└── __tests__/ # Test files
Private - Studio42.dev