Initial commit - modstagram-next

This commit is contained in:
root
2026-07-05 13:59:41 +03:30
commit 11e73da693
859 changed files with 117640 additions and 0 deletions

41
.gitignore vendored Normal file
View File

@@ -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

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
registry=https://registry.npmmirror.com/

26
Dockerfile Normal file
View File

@@ -0,0 +1,26 @@
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM node:18-alpine AS runner
WORKDIR /app
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/node_modules ./node_modules
ENV NODE_ENV=production
ENV HOST=0.0.0.0
EXPOSE 3000
CMD ["npm", "start"]

36
README.md Normal file
View File

@@ -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.

22
components.json Normal file
View File

@@ -0,0 +1,22 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "",
"css": "app/globals.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"iconLibrary": "lucide",
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
},
"registries": {}
}

16
docker-compose.yml Normal file
View File

@@ -0,0 +1,16 @@
version: '3.8'
services:
next-app:
build: .
container_name: modstagram-next
restart: unless-stopped
ports:
- "3004:3000"
environment:
- NODE_ENV=production
- HOST=0.0.0.0
volumes:
- ./:/app
- /app/node_modules
- /app/.next

43
eslint.config.mjs Normal file
View File

@@ -0,0 +1,43 @@
import { dirname } from "path";
import { fileURLToPath } from "url";
import { FlatCompat } from "@eslint/eslintrc";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
});
const eslintConfig = [
...compat.extends("next/core-web-vitals", "next/typescript"),
{
ignores: [
"node_modules/**",
".next/**",
"out/**",
"build/**",
"next-env.d.ts",
],
},
];
export default eslintConfig;
// import { dirname } from "path";
// import { fileURLToPath } from "url";
// import { FlatCompat } from "@eslint/eslintrc";
// const __filename = fileURLToPath(import.meta.url);
// const __dirname = dirname(__filename);
// const compat = new FlatCompat({
// baseDirectory: __dirname,
// });
// const eslintConfig = [
// ...compat.extends("next/core-web-vitals", "next/typescript"),
// ];
// export default eslintConfig;

View File

@@ -0,0 +1 @@
google-site-verification: google04b13fd53edd8dd1.html

218
next-sitemap.config.js Normal file
View File

@@ -0,0 +1,218 @@
// next-sitemap.config.js
/** @type {import('next-sitemap').IConfig} */
module.exports = {
siteUrl: 'https://modstagram.com', // دامنه اصلی سایت شما
generateRobotsTxt: true, // تولید فایل robots.txt
sitemapSize: 7000, // حداکثر تعداد URL در هر فایل سایت‌مپ
changefreq: 'daily', // فرکانس پیش‌فرض تغییر صفحات
priority: 0.7, // اولویت پیش‌فرض صفحات
// تابع transform برای فیلتر کردن و تنظیمات خاص هر مسیر
transform: async (config, path) => {
// مسیرهایی که نباید در سایت‌مپ باشند و نیازی به ایندکس شدن ندارند
const excludedPaths = [
'/settings',
'/auth',
'/new-post',
'/offer',
'/private/', // مسیرهای خصوصی
// صفحات مربوط به پرداخت و ثبت‌نام/ورود
'/projects/payment/success',
'/projects/payment/failed',
'/billboards/payment/success',
'/billboards/payment/failed',
'/forget-password',
'/change-passowrd',
'/login-with-username',
'/login',
'/register-otp',
'/verify-otp',
'/register',
'/forget-password-otp',
'/register/password',
'/register/fullname',
'/register/usertype',
'/register/username',
'/verify/avatar',
'/verify/auth',
'/verify/colors',
'/verify/confirm',
'/verify/expertise',
'/verify/gender',
'/verify/national-cart',
'/verify/location',
'/verify/public-relations',
'/verify/cooperation-type',
'/verify/services',
'/verify/sizes',
'/new-project', // اگر این یک صفحه فرم داخلی است که نیازی به ایندکس شدن ندارد
'/billboards/new', // اگر این یک صفحه فرم داخلی است که نیازی به ایندکس شدن ندارد
'/search', // اگر صفحه جستجو محتوای قابل ایندکس ندارد
];
// اگر مسیر در لیست excludedPaths باشد، آن را از سایت‌مپ حذف کن
if (excludedPaths.some(p => path.startsWith(p))) {
return null;
}
let pageChangefreq = config.changefreq;
let pagePriority = config.priority;
// تنظیمات خاص برای مسیرهای مختلف
if (path.startsWith('/users/')) { // مسیر برای پروفایل‌های کاربران
pageChangefreq = 'weekly';
pagePriority = 0.6;
}
if (path.startsWith('/projects/') || path.startsWith('/billboards/')) {
pageChangefreq = 'daily';
pagePriority = 0.8;
}
if (path === '/') { // صفحه اصلی
pageChangefreq = 'daily';
pagePriority = 1.0;
}
if (path === '/about-us') { // صفحه درباره ما
pageChangefreq = 'monthly';
pagePriority = 0.8;
}
return {
loc: path, // آدرس کامل صفحه
changefreq: pageChangefreq, // فرکانس تغییر صفحه
priority: pagePriority, // اولویت صفحه
lastmod: config.autoLastmod ? new Date().toISOString() : undefined, // تاریخ آخرین تغییر
alternateRefs: config.alternateRefs ?? [],
};
},
// تابع additionalPaths برای اضافه کردن مسیرهای داینامیک از API
additionalPaths: async (config) => {
const paths = [];
const BASE_URL_API = "https://app.modstagram.ir/api/v1"; // آدرس پایه API شما
paths.push({
loc: '/',
changefreq: 'daily',
priority: 1.0
});
paths.push({
loc: '/projects',
changefreq: 'daily',
priority: 0.9
});
paths.push({
loc: '/billboards',
changefreq: 'daily', // یا weekly بسته به میزان تغییر محتوا
priority: 0.9
});
try {
// واکشی داده‌های پروژه‌ها
const projectsRes = await fetch(`${BASE_URL_API}/projects?limit=500`);
const projectsData = await projectsRes.json();
if (projectsData && Array.isArray(projectsData.projects)) {
projectsData.projects.forEach((project) => {
if (project.id && project.title) {
paths.push({
// مسیر پروژه‌ها (با استفاده از تمپلیت لیتِرال صحیح)
loc: `/projects/${project.id}/${encodeURIComponent(project.title)}`,
changefreq: 'daily',
priority: 0.8
});
}
});
}
// واکشی داده‌های بیلبوردها
const billboardsRes = await fetch(`${BASE_URL_API}/advertising/web?limit=500`);
const billboardsData = await billboardsRes.json();
if (billboardsData && Array.isArray(billboardsData.advertisings)) {
billboardsData.advertisings.forEach((billboard) => {
if (billboard._id && billboard.title) {
paths.push({
// مسیر بیلبوردها (با استفاده از تمپلیت لیتِرال صحیح)
loc: `/billboards/${billboard._id}/${encodeURIComponent(billboard.title)}`,
changefreq: 'daily',
priority: 0.8
});
}
});
}
// واکشی داده‌های کاربران (مدل‌ها)
const usersRes = await fetch(`${BASE_URL_API}/users/web?limit=500`);
const usersData = await usersRes.json();
if (usersData && Array.isArray(usersData.users)) {
usersData.users.forEach((user) => {
if (user.user_name) {
paths.push({
// مسیر پروفایل کاربران (مسیر در Next.js شما /users/[username] است)
loc: `/users/${encodeURIComponent(user.user_name)}`,
changefreq: 'weekly',
priority: 0.6
});
}
});
}
} catch (error) {
// لاگ کردن خطا در صورت مشکل در واکشی داده‌ها از API
console.error('Error fetching additional paths for sitemap:', error);
}
return paths; // بازگرداندن آرایه‌ای از مسیرهای داینامیک
},
// تنظیمات مربوط به فایل robots.txt
robotsTxtOptions: {
policies: [
{
userAgent: '*', // اعمال سیاست‌ها برای همه ربات‌ها
allow: '/', // اجازه دسترسی به کل سایت
disallow: [
'/api/', // مسیرهای API
'/_next/', // فایل‌های داخلی Next.js
'/settings', // صفحات تنظیمات
'/auth', // صفحات احراز هویت (ورود، ثبت‌نام)
'/private/', // مسیرهای خصوصی موجود
'/new-post', // صفحات ایجاد پست جدید
'/offer', // صفحات پیشنهاد
// اضافه کردن مسیرهای پرداخت و ثبت‌نام/ورود به disallow
'/projects/payment/success',
'/projects/payment/failed',
'/billboards/payment/success',
'/billboards/payment/failed',
'/forget-password',
'/change-passowrd',
'/login-with-username',
'/login',
'/register-otp',
'/verify-otp',
'/register',
'/forget-password-otp',
'/register/password',
'/register/fullname',
'/register/usertype',
'/register/username',
'/verify/avatar',
'/verify/auth',
'/verify/colors',
'/verify/confirm',
'/verify/expertise',
'/verify/gender',
'/verify/national-cart',
'/verify/location',
'/verify/public-relations',
'/verify/cooperation-type',
'/verify/services',
'/verify/sizes',
'/new-project',
'/billboards/new',
'/search', // اگر این صفحه برای ایندکس شدن نامناسب است
],
},
],
// اضافه کردن آدرس سایت‌مپ به robots.txt
additionalSitemaps: [
'https://modstagram.com/sitemap.xml',
],
},
};

74
next.config.ts Normal file
View File

@@ -0,0 +1,74 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
// ۱. نادیده گرفتن خطاهای بیلد
eslint: {
ignoreDuringBuilds: true,
},
typescript: {
ignoreBuildErrors: true,
},
// ۲. تنظیمات تصاویر
images: {
remotePatterns: [
{
protocol: 'https',
hostname: 'app.modstagram.ir',
port: '',
pathname: '/**',
},
{
protocol: 'https',
hostname: 'blog.modstagram.com', // اجازه دادن به نمایش تصاویر وبلاگ
port: '',
pathname: '/**',
},
{
protocol: 'http',
hostname: 'localhost',
port: '',
pathname: '/**',
},
],
formats: ['image/avif', 'image/webp'],
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
minimumCacheTTL: 31536000,
},
// ۳. هدایت ترافیک ساب‌فولدر به وردپرس (بخش جدید)
async rewrites() {
return [
{
source: '/blog',
destination: 'https://blog.modstagram.com/blog',
},
{
source: '/blog/:path*',
destination: 'https://blog.modstagram.com/blog/:path*',
},
];
},
// ۴. تنظیمات هدرها
async headers() {
return [
{
source: '/(.*)',
headers: [
{ key: 'X-DNS-Prefetch-Control', value: 'on' },
{ key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubDomains; preload' },
{ key: 'X-XSS-Protection', value: '1; mode=block' },
{ key: 'X-Frame-Options', value: 'SAMEORIGIN' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
{ key: 'Referrer-Policy', value: 'origin-when-cross-origin' },
{ key: 'Cache-Control', value: 'public, s-maxage=1, stale-while-revalidate=59' },
],
},
];
},
reactStrictMode: false,
};
export default nextConfig;

12575
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

127
package.json Normal file
View File

@@ -0,0 +1,127 @@
{
"name": "modstagram-next",
"version": "0.1.0",
"private": true,
"scripts": {
"start": "next start -p 3000 -H 0.0.0.0",
"dev": "next dev -p 3000 -H 0.0.0.0",
"build": "next build",
"lint": "next lint",
"postbuild": "next-sitemap"
},
"dependencies": {
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/modifiers": "^9.0.0",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@headlessui/react": "^2.2.8",
"@hookform/resolvers": "^5.2.2",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-avatar": "^1.1.10",
"@radix-ui/react-checkbox": "^1.3.3",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-icons": "^1.3.2",
"@radix-ui/react-label": "^2.1.7",
"@radix-ui/react-navigation-menu": "^1.2.14",
"@radix-ui/react-popover": "^1.1.15",
"@radix-ui/react-progress": "^1.1.7",
"@radix-ui/react-radio-group": "^1.3.8",
"@radix-ui/react-scroll-area": "^1.2.10",
"@radix-ui/react-select": "^2.2.6",
"@radix-ui/react-separator": "^1.1.7",
"@radix-ui/react-slider": "^1.3.6",
"@radix-ui/react-slot": "^1.2.3",
"@radix-ui/react-switch": "^1.2.6",
"@radix-ui/react-tabs": "^1.1.13",
"@radix-ui/react-toast": "^1.2.15",
"@radix-ui/react-toggle": "^1.1.10",
"@radix-ui/react-toggle-group": "^1.1.11",
"@radix-ui/react-tooltip": "^1.2.8",
"@radix-ui/themes": "^3.2.1",
"@shadcn/ui": "^0.0.4",
"@tabler/icons-react": "^3.34.1",
"@tanstack/react-query": "^5.87.1",
"@tanstack/react-table": "^8.21.3",
"@vitalets/google-translate-api": "^9.2.1",
"axios": "^1.7.9",
"chart.js": "^4.5.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"embla-carousel-react": "^8.6.0",
"formik": "^2.4.6",
"framer-motion": "^12.23.12",
"i18next": "^25.3.6",
"i18next-browser-languagedetector": "^8.2.0",
"i18next-http-backend": "^3.0.2",
"jalali-moment": "^3.3.11",
"js-cookie": "^3.0.5",
"jszip": "^3.10.1",
"leaflet": "^1.9.4",
"lodash": "^4.17.21",
"lucide-react": "^0.541.0",
"mapbox-gl": "^3.9.3",
"next": "^15.5.2",
"next-i18next": "^15.4.2",
"next-seo": "^6.8.0",
"next-sitemap": "^4.2.3",
"next-themes": "^0.4.6",
"node-fetch": "^3.3.2",
"openai": "^5.21.0",
"radix-ui": "^1.4.3",
"rc-rate": "^2.13.0",
"react": "^18.3.1",
"react-chartjs-2": "^5.3.0",
"react-confetti": "^6.4.0",
"react-dom": "^18.3.1",
"react-easy-crop": "^5.5.0",
"react-hook-form": "^7.65.0",
"react-hot-toast": "^2.5.1",
"react-i18next": "^15.6.1",
"react-icons": "^5.5.0",
"react-leaflet": "^4.2.1",
"react-map-gl": "^7.1.8",
"react-modal": "^3.16.3",
"react-multi-date-picker": "^4.5.2",
"react-otp-input": "^3.1.1",
"react-slick": "^0.31.0",
"react-use": "^17.6.0",
"recharts": "^2.15.4",
"sharp": "^0.34.5",
"slick-carousel": "^1.8.1",
"socket.io-client": "^4.8.1",
"sonner": "^2.0.7",
"swiper": "^11.2.2",
"tailwind-merge": "^3.3.1",
"tailwindcss-rtl": "^0.9.0",
"three": "^0.180.0",
"translate-google": "^1.5.0",
"uuid": "^11.1.0",
"vaul": "^1.1.2",
"yet-another-react-lightbox": "^3.25.0",
"yup": "^1.7.1",
"zod": "^3.25.76"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
"@ffmpeg/ffmpeg": "^0.12.10",
"@ffmpeg/util": "^0.12.1",
"@tailwindcss/postcss": "^4.2.4",
"@types/js-cookie": "^3.0.6",
"@types/leaflet": "^1.9.20",
"@types/lodash": "^4.17.20",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"@types/react-modal": "^3.16.3",
"@types/react-slick": "^0.23.13",
"autoprefixer": "^10.4.21",
"eslint": "^9",
"eslint-config-next": "15.1.5",
"postcss": "^8.5.14",
"tailwindcss": "^4.2.4",
"ts-node": "^10.9.2",
"tw-animate-css": "^1.3.8",
"typescript": "^5"
}
}

127
package.jsonغ Normal file
View File

@@ -0,0 +1,127 @@
{
"name": "modstagram-next",
"version": "0.1.0",
"private": true,
"scripts": {
"start": "next start -p 3000 -H 0.0.0.0",
"dev": "next dev -p 3000 -H 0.0.0.0",
"build": "next build"
"lint": "next lint",
"postbuild": "next-sitemap"
},
"dependencies": {
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/modifiers": "^9.0.0",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@headlessui/react": "^2.2.8",
"@hookform/resolvers": "^5.2.2",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-avatar": "^1.1.10",
"@radix-ui/react-checkbox": "^1.3.3",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-icons": "^1.3.2",
"@radix-ui/react-label": "^2.1.7",
"@radix-ui/react-navigation-menu": "^1.2.14",
"@radix-ui/react-popover": "^1.1.15",
"@radix-ui/react-progress": "^1.1.7",
"@radix-ui/react-radio-group": "^1.3.8",
"@radix-ui/react-scroll-area": "^1.2.10",
"@radix-ui/react-select": "^2.2.6",
"@radix-ui/react-separator": "^1.1.7",
"@radix-ui/react-slider": "^1.3.6",
"@radix-ui/react-slot": "^1.2.3",
"@radix-ui/react-switch": "^1.2.6",
"@radix-ui/react-tabs": "^1.1.13",
"@radix-ui/react-toast": "^1.2.15",
"@radix-ui/react-toggle": "^1.1.10",
"@radix-ui/react-toggle-group": "^1.1.11",
"@radix-ui/react-tooltip": "^1.2.8",
"@radix-ui/themes": "^3.2.1",
"@shadcn/ui": "^0.0.4",
"@tabler/icons-react": "^3.34.1",
"@tanstack/react-query": "^5.87.1",
"@tanstack/react-table": "^8.21.3",
"@vitalets/google-translate-api": "^9.2.1",
"axios": "^1.7.9",
"chart.js": "^4.5.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"embla-carousel-react": "^8.6.0",
"formik": "^2.4.6",
"framer-motion": "^12.23.12",
"i18next": "^25.3.6",
"i18next-browser-languagedetector": "^8.2.0",
"i18next-http-backend": "^3.0.2",
"jalali-moment": "^3.3.11",
"js-cookie": "^3.0.5",
"jszip": "^3.10.1",
"leaflet": "^1.9.4",
"lodash": "^4.17.21",
"lucide-react": "^0.541.0",
"mapbox-gl": "^3.9.3",
"next": "^15.5.2",
"next-i18next": "^15.4.2",
"next-seo": "^6.8.0",
"next-sitemap": "^4.2.3",
"next-themes": "^0.4.6",
"node-fetch": "^3.3.2",
"openai": "^5.21.0",
"radix-ui": "^1.4.3",
"rc-rate": "^2.13.0",
"react": "^18.3.1",
"react-chartjs-2": "^5.3.0",
"react-confetti": "^6.4.0",
"react-dom": "^18.3.1",
"react-easy-crop": "^5.5.0",
"react-hook-form": "^7.65.0",
"react-hot-toast": "^2.5.1",
"react-i18next": "^15.6.1",
"react-icons": "^5.5.0",
"react-leaflet": "^4.2.1",
"react-map-gl": "^7.1.8",
"react-modal": "^3.16.3",
"react-multi-date-picker": "^4.5.2",
"react-otp-input": "^3.1.1",
"react-slick": "^0.31.0",
"react-use": "^17.6.0",
"recharts": "^2.15.4",
"sharp": "^0.34.5",
"slick-carousel": "^1.8.1",
"socket.io-client": "^4.8.1",
"sonner": "^2.0.7",
"swiper": "^11.2.2",
"tailwind-merge": "^3.3.1",
"tailwindcss-rtl": "^0.9.0",
"three": "^0.180.0",
"translate-google": "^1.5.0",
"uuid": "^11.1.0",
"vaul": "^1.1.2",
"yet-another-react-lightbox": "^3.25.0",
"yup": "^1.7.1",
"zod": "^3.25.76"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
"@ffmpeg/ffmpeg": "^0.12.10",
"@ffmpeg/util": "^0.12.1",
"@tailwindcss/postcss": "^4.2.4",
"@types/js-cookie": "^3.0.6",
"@types/leaflet": "^1.9.20",
"@types/lodash": "^4.17.20",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"@types/react-modal": "^3.16.3",
"@types/react-slick": "^0.23.13",
"autoprefixer": "^10.4.21",
"eslint": "^9",
"eslint-config-next": "15.1.5",
"postcss": "^8.5.14",
"tailwindcss": "^4.2.4",
"ts-node": "^10.9.2",
"tw-animate-css": "^1.3.8",
"typescript": "^5"
}
}

5
postcss.config.mjs Normal file
View File

@@ -0,0 +1,5 @@
export default {
plugins: {
"@tailwindcss/postcss": {},
},
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/images/eyes/01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
public/images/eyes/02.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/eyes/03.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
public/images/eyes/04.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/05.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/eyes/06.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/07.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
public/images/eyes/08.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
public/images/eyes/09.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
public/images/eyes/10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
public/images/eyes/14.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/15.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/eyes/17.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/18.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/19.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/20.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/21.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
public/images/eyes/22.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/eyes/23.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
public/images/eyes/24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
public/images/eyes/25.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
public/images/eyes/26.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
public/images/hairs/01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/02.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/03.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/hairs/04.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/05.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/06.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
public/images/hairs/07.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/08.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/09.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/14.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/15.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/hairs/16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/hairs/17.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/hairs/18.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/hairs/19.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/20.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/hairs/21.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/22.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/hairs/23.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/hairs/25.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/hairs/26.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/27.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/28.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/hairs/29.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/30.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/31.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/33.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/34.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/35.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/36.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/images/hairs/37.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/38.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/39.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/40.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/41.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/42.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/43.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/44.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/45.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
public/images/hairs/46.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
public/images/hairs/47.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
public/images/hairs/48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/images/hairs/49.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
public/images/hairs/50.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Some files were not shown because too many files have changed in this diff Show More