From a10d92abac492f37b8edc19b3c2c6e1e7e297c7c Mon Sep 17 00:00:00 2001 From: Adrian Miesikowski Date: Tue, 10 Feb 2026 13:34:42 +0100 Subject: [PATCH] first commit --- .dockerignore | 12 + .gitignore | 41 + Dockerfile | 47 + Dockerfile.dev | 17 + README.md | 36 + app/about/page.tsx | 55 + app/api/blog/[slug]/route.ts | 23 + app/api/blog/route.ts | 22 + app/api/contact/route.ts | 34 + app/api/health/route.ts | 8 + app/blog/[slug]/page.tsx | 92 + app/blog/page.tsx | 74 + app/favicon.ico | Bin 0 -> 25931 bytes app/globals.css | 69 + app/layout.tsx | 81 + app/oferta/page.tsx | 53 + app/page.tsx | 166 ++ app/sitemap.ts | 51 + components/AboutHero.tsx | 14 + components/BlogCard.tsx | 52 + components/BlogList.tsx | 65 + components/BlogPost.tsx | 199 ++ components/CTA.tsx | 24 + components/ContactForm.tsx | 23 + components/FeaturedBlog.tsx | 97 + components/Footer.tsx | 22 + components/GoogleAnalytics.tsx | 28 + components/Hero.tsx | 30 + components/HowItWorks.tsx | 50 + components/Icons.tsx | 80 + components/LogoCarousel.tsx | 74 + components/Mission.tsx | 16 + components/Nav.tsx | 46 + components/OfertaHero.tsx | 18 + components/OfertaServices.tsx | 99 + components/ScrollReveal.tsx | 41 + components/Stats.tsx | 74 + components/Team.tsx | 33 + components/Values.tsx | 31 + components/WhatWeDo.tsx | 50 + components/WhyUs.tsx | 35 + data/submissions.json | 1 + lib/blog.ts | 136 ++ lib/mongodb.ts | 21 + next.config.ts | 37 + package-lock.json | 2355 ++++++++++++++++++++++++ package.json | 26 + postcss.config.mjs | 7 + public/.htaccess | 15 + public/blog/ai-automation.jpg | Bin 0 -> 39076 bytes public/blog/ecommerce-ai.jpg | Bin 0 -> 232676 bytes public/blog/salesforce-integration.jpg | Bin 0 -> 100080 bytes public/favicon.svg | 4 + public/og-image.png | Bin 0 -> 26414 bytes public/robots.txt | 5 + scripts/seed-blog.ts | 229 +++ tsconfig.json | 34 + 57 files changed, 4952 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 Dockerfile.dev create mode 100644 README.md create mode 100644 app/about/page.tsx create mode 100644 app/api/blog/[slug]/route.ts create mode 100644 app/api/blog/route.ts create mode 100644 app/api/contact/route.ts create mode 100644 app/api/health/route.ts create mode 100644 app/blog/[slug]/page.tsx create mode 100644 app/blog/page.tsx create mode 100644 app/favicon.ico create mode 100644 app/globals.css create mode 100644 app/layout.tsx create mode 100644 app/oferta/page.tsx create mode 100644 app/page.tsx create mode 100644 app/sitemap.ts create mode 100644 components/AboutHero.tsx create mode 100644 components/BlogCard.tsx create mode 100644 components/BlogList.tsx create mode 100644 components/BlogPost.tsx create mode 100644 components/CTA.tsx create mode 100644 components/ContactForm.tsx create mode 100644 components/FeaturedBlog.tsx create mode 100644 components/Footer.tsx create mode 100644 components/GoogleAnalytics.tsx create mode 100644 components/Hero.tsx create mode 100644 components/HowItWorks.tsx create mode 100644 components/Icons.tsx create mode 100644 components/LogoCarousel.tsx create mode 100644 components/Mission.tsx create mode 100644 components/Nav.tsx create mode 100644 components/OfertaHero.tsx create mode 100644 components/OfertaServices.tsx create mode 100644 components/ScrollReveal.tsx create mode 100644 components/Stats.tsx create mode 100644 components/Team.tsx create mode 100644 components/Values.tsx create mode 100644 components/WhatWeDo.tsx create mode 100644 components/WhyUs.tsx create mode 100644 data/submissions.json create mode 100644 lib/blog.ts create mode 100644 lib/mongodb.ts create mode 100644 next.config.ts create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.mjs create mode 100644 public/.htaccess create mode 100644 public/blog/ai-automation.jpg create mode 100644 public/blog/ecommerce-ai.jpg create mode 100644 public/blog/salesforce-integration.jpg create mode 100644 public/favicon.svg create mode 100644 public/og-image.png create mode 100644 public/robots.txt create mode 100644 scripts/seed-blog.ts create mode 100644 tsconfig.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..a719f8e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,12 @@ +Dockerfile +.dockerignore +node_modules +npm-debug.log +README.md +.next +.git +.gitignore +*.md +.env*.local +.DS_Store +*.pem diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ef6a52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f4e362e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,47 @@ +# Multi-stage build for Next.js application +FROM node:20-alpine AS base + +# Install dependencies only when needed +FROM base AS deps +RUN apk add --no-cache libc6-compat +WORKDIR /app + +# Copy package files +COPY package.json package-lock.json* ./ +RUN npm ci + +# Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +# Set environment variables for build +ENV NEXT_TELEMETRY_DISABLED=1 + +# Build the application +RUN npm run build + +# Production image, copy all the files and run next +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +# Copy built application +COPY --from=builder /app/public ./public +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +EXPOSE 3000 + +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" + +CMD ["node", "server.js"] diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..bdf4b79 --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,17 @@ +# Development Dockerfile for Next.js with hot reload +FROM node:20-alpine + +WORKDIR /app + +# Install dependencies +COPY package.json package-lock.json* ./ +RUN npm ci + +# Copy application code +COPY . . + +# Expose development port +EXPOSE 3000 + +# Start development server +CMD ["npm", "run", "dev"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..e215bc4 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/app/about/page.tsx b/app/about/page.tsx new file mode 100644 index 0000000..b1bcf98 --- /dev/null +++ b/app/about/page.tsx @@ -0,0 +1,55 @@ +import type { Metadata } from "next"; +import AboutHero from "@/components/AboutHero"; +import Mission from "@/components/Mission"; +import Values from "@/components/Values"; +import Team from "@/components/Team"; +import CTA from "@/components/CTA"; + +export const metadata: Metadata = { + title: "O nas — Specjaliści Sztucznej Inteligencji | SZMYT AI Labs", + description: + "Zespół ekspertów AI ✓ Doświadczenie w projektach dla różnych branż ✓ Transparentność i efektywność ✓ Kompleksowe wdrożenia AI. Poznaj naszą misję!", + keywords: [ + "zespół AI", + "eksperci sztucznej inteligencji", + "specjaliści AI Polska", + "doświadczenie AI", + "firma AI", + "konsultanci sztucznej inteligencji", + ], + openGraph: { + title: "O nas — Specjaliści Sztucznej Inteligencji | SZMYT AI Labs", + description: + "Zespół ekspertów AI ✓ Doświadczenie w projektach dla różnych branż ✓ Transparentność i efektywność ✓ Kompleksowe wdrożenia AI.", + url: "https://sztucznainteligencjadlafirm.pl/about/", + }, + alternates: { canonical: "https://sztucznainteligencjadlafirm.pl/about/" }, +}; + +const pageSchema = { + "@context": "https://schema.org", + "@type": "WebPage", + name: "O nas — Specjaliści Sztucznej Inteligencji", + url: "https://sztucznainteligencjadlafirm.pl/about/", + description: "Zespół ekspertów AI z doświadczeniem w projektach dla różnych branż. Transparentność, efektywność i kompleksowe wdrożenia AI.", + breadcrumb: { + "@type": "BreadcrumbList", + itemListElement: [ + { "@type": "ListItem", position: 1, name: "Strona główna", item: "https://sztucznainteligencjadlafirm.pl/" }, + { "@type": "ListItem", position: 2, name: "O nas", item: "https://sztucznainteligencjadlafirm.pl/about/" }, + ], + }, +}; + +export default function About() { + return ( + <> +