Initial commit: Sase.tr VIN Sorgulama Platformu

Features:
- Next.js 16.1.3 frontend with Turbopack
- NestJS API with Prisma ORM
- EMEX VIN scraper integration
- Turkish translations for automotive parts
- JWT authentication with refresh tokens
- PM2 production deployment

Tech Stack:
- Frontend: Next.js 16.1, React 19, TailwindCSS
- Backend: NestJS, Prisma, MySQL
- Scraping: Puppeteer

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
root
2026-01-17 03:04:30 +01:00
commit b9532a61ee
195 changed files with 31777 additions and 0 deletions

40
docker/Dockerfile.api Normal file
View File

@@ -0,0 +1,40 @@
FROM node:20-alpine AS base
# Install pnpm
RUN corepack enable && corepack prepare pnpm@9.15.0 --activate
WORKDIR /app
# Copy package files
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml* ./
COPY apps/api/package.json ./apps/api/
COPY packages/shared/package.json ./packages/shared/
# Install dependencies
RUN pnpm install --frozen-lockfile
# Copy source
COPY packages/shared ./packages/shared
COPY apps/api ./apps/api
# Generate Prisma client
WORKDIR /app/apps/api
RUN pnpm db:generate
# Build
RUN pnpm build
# Production image
FROM node:20-alpine AS production
WORKDIR /app
# Copy built files
COPY --from=base /app/apps/api/dist ./dist
COPY --from=base /app/apps/api/node_modules ./node_modules
COPY --from=base /app/apps/api/package.json ./
COPY --from=base /app/apps/api/prisma ./prisma
EXPOSE 4000
CMD ["node", "dist/main.js"]

39
docker/Dockerfile.web Normal file
View File

@@ -0,0 +1,39 @@
FROM node:20-alpine AS base
# Install pnpm
RUN corepack enable && corepack prepare pnpm@9.15.0 --activate
WORKDIR /app
# Copy package files
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml* ./
COPY apps/web/package.json ./apps/web/
COPY packages/shared/package.json ./packages/shared/
# Install dependencies
RUN pnpm install --frozen-lockfile
# Copy source
COPY packages/shared ./packages/shared
COPY apps/web ./apps/web
# Build
WORKDIR /app/apps/web
RUN pnpm build
# Production image
FROM node:20-alpine AS production
WORKDIR /app
# Copy built files
COPY --from=base /app/apps/web/.next/standalone ./
COPY --from=base /app/apps/web/.next/static ./.next/static
COPY --from=base /app/apps/web/public ./public
EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
CMD ["node", "server.js"]

View File

@@ -0,0 +1,74 @@
version: '3.8'
services:
api:
build:
context: ..
dockerfile: docker/Dockerfile.api
container_name: sase_api
restart: unless-stopped
ports:
- "4000:4000"
environment:
- NODE_ENV=production
env_file:
- ../apps/api/.env
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
web:
build:
context: ..
dockerfile: docker/Dockerfile.web
container_name: sase_web
restart: unless-stopped
ports:
- "3000:3000"
environment:
- NODE_ENV=production
env_file:
- ../apps/web/.env.local
depends_on:
- api
mysql:
image: mysql:8.0
container_name: sase_mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: sase_tr
MYSQL_USER: sase_user
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: sase_redis
restart: unless-stopped
volumes:
- redis_data:/data
command: redis-server --appendonly yes
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
mysql_data:
redis_data:
networks:
default:
name: sase_network

46
docker/docker-compose.yml Normal file
View File

@@ -0,0 +1,46 @@
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: sase_mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root}
MYSQL_DATABASE: sase_tr
MYSQL_USER: sase_user
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-sase_password}
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./mysql-init:/docker-entrypoint-initdb.d
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: sase_redis
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
mysql_data:
redis_data:
networks:
default:
name: sase_network