diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d518964 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,33 @@ +# Ignore node_modules and build output +node_modules +.next +out + +# Ignore logs and temporary files +*.log +*.tmp +*.swp + +# Ignore local environment files +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Ignore Docker files +Dockerfile +docker-compose.yml + +# Ignore git files +.git +.gitignore + +# Ignore editor directories and files +.vscode +.idea +*.sublime-project +*.sublime-workspace + +# Ignore other unnecessary files +README.md +dev/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6f958f1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,45 @@ +# Stage 1: Building the code +FROM node:lts-alpine AS builder + +WORKDIR /app + +# Copy package files +COPY package.json yarn.lock ./ + +# Install dependencies +RUN yarn install --frozen-lockfile + +# Copy app files +COPY . . + +# Build app +RUN yarn build + +# Stage 2: Production +FROM node:lts-alpine AS runner + +WORKDIR /app + +ENV NODE_ENV=production + +# Copy necessary files +COPY --from=builder /app/next.config.mjs ./ +COPY --from=builder /app/package.json ./ +COPY --from=builder /app/yarn.lock ./ +COPY --from=builder /app/public ./public +COPY --from=builder /app/.next ./.next +COPY --from=builder /app/prisma ./prisma + +# Install production dependencies only +RUN apk add --no-cache openssl +RUN yarn install --frozen-lockfile --production && \ + yarn cache clean + +# Remove unnecessary files +RUN rm -rf /app/.git \ + /app/.next/cache \ + /app/README.md + +EXPOSE 3000 + +CMD ["yarn", "start"] \ No newline at end of file diff --git a/package.json b/package.json index a5311dd..7c5972d 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "dev": "docker compose --file dev/docker-compose.yml up -d && next dev --experimental-https --turbo", "setup": "docker compose --file dev/docker-compose.yml up -d && prisma migrate deploy", "build": "prisma generate && next build", - "start": "next start", + "start": "prisma migrate deploy && next start", "lint": "next lint", "db:generate": "prisma generate", "db:migrate": "prisma migrate dev --name", diff --git a/src/app/(public)/page.tsx b/src/app/(public)/page.tsx index 76d6e35..659ef67 100644 --- a/src/app/(public)/page.tsx +++ b/src/app/(public)/page.tsx @@ -5,9 +5,13 @@ import prisma from '@/lib/db'; import { Avatar, AvatarImage, AvatarFallback } from '@radix-ui/react-avatar'; import Image from 'next/image'; import Link from 'next/link'; +import { redirect } from 'next/navigation'; export default async function Home() { const { user } = await validateRequest(); + if (!user?.hasOnboarded) { + redirect('/onboarding'); + } const streams = await prisma.streamInfo.findMany({ where: { isLive: true, diff --git a/src/components/app/EditLivestream/EditLivestream.tsx b/src/components/app/EditLivestream/EditLivestream.tsx index d5d2eaa..52bd5ce 100644 --- a/src/components/app/EditLivestream/EditLivestream.tsx +++ b/src/components/app/EditLivestream/EditLivestream.tsx @@ -1,17 +1,5 @@ -import { Button } from '@/components/ui/button'; -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, - DialogTrigger, -} from '@/components/ui/dialog'; import { validateRequest } from '@/lib/auth'; import prisma from '@/lib/db'; -import { UniversalForm } from '../UniversalForm/UniversalForm'; -import { editStreamInfo } from '@/lib/form/actions'; -import RegenerateKey from '../RegenerateKey/RegenerateKey'; import EditLivestreamDialog from './dialog'; export default async function EditLivestream() { diff --git a/src/components/app/NavBar/NavBar.tsx b/src/components/app/NavBar/NavBar.tsx index 32523d4..a15788b 100644 --- a/src/components/app/NavBar/NavBar.tsx +++ b/src/components/app/NavBar/NavBar.tsx @@ -19,7 +19,7 @@ import { ThemeSwitcher } from '../ThemeSwitcher/ThemeSwitcher'; import { Slack } from 'lucide-react'; import { SidebarTrigger } from '@/components/ui/sidebar'; -export const links = [{ href: '/srizan', name: 'test stream' }]; +export const links = [{ href: '/', name: 'home (placeholder link)' }]; function NavbarLinks() { return (