├── .gitignore ├── README.md ├── app.vue ├── assets └── css │ └── tailwind.css ├── components ├── global │ ├── Footer.vue │ ├── LanguageSelector.vue │ └── Navbar.vue ├── home │ ├── Brand.vue │ └── HeroSection.vue └── stock │ ├── Main.vue │ └── SpecificPage.vue ├── composables └── useSBClient.ts ├── i18n └── lang │ ├── de.js │ ├── en.js │ ├── es.js │ ├── fr.js │ ├── it.js │ ├── pt.js │ └── zh-CN.js ├── layouts └── default.vue ├── nuxt.config.ts ├── package-lock.json ├── package.json ├── pages ├── index.vue ├── stock.vue └── stockSingle │ └── [id].vue ├── plugins └── sb-client.ts ├── public ├── favicon.ico └── images │ └── VeluxeAutoLogo.png ├── server └── tsconfig.json ├── tailwind.config.js └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Node.js 2 | /node_modules 3 | /.nuxt 4 | /dist 5 | /.vite 6 | /.yarn 7 | /.pnpm 8 | yarn-error.log 9 | npm-debug.log 10 | package-lock.json 11 | yarn.lock 12 | 13 | # Nuxt.js build files 14 | .nuxt/ 15 | 16 | # VSCode directory 17 | .vscode/ 18 | 19 | # MacOS system files 20 | .DS_Store 21 | 22 | # Windows system files 23 | Thumbs.db 24 | 25 | # Log files 26 | *.log 27 | 28 | # Environment files 29 | .env 30 | .env.local 31 | .env.*.local 32 | 33 | # NPM / Yarn lock files (optional, depending on your setup) 34 | package-lock.json 35 | yarn.lock 36 | 37 | # Optional: Ignore coverage folder created by testing libraries 38 | coverage/ 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nuxt Minimal Starter 2 | 3 | Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. 4 | 5 | ## Setup 6 | 7 | Make sure to install dependencies: 8 | 9 | ```bash 10 | # npm 11 | npm install 12 | 13 | # pnpm 14 | pnpm install 15 | 16 | # yarn 17 | yarn install 18 | 19 | # bun 20 | bun install 21 | ``` 22 | 23 | ## Development Server 24 | 25 | Start the development server on `http://localhost:3000`: 26 | 27 | ```bash 28 | # npm 29 | npm run dev 30 | 31 | # pnpm 32 | pnpm dev 33 | 34 | # yarn 35 | yarn dev 36 | 37 | # bun 38 | bun run dev 39 | ``` 40 | 41 | ## Production 42 | 43 | Build the application for production: 44 | 45 | ```bash 46 | # npm 47 | npm run build 48 | 49 | # pnpm 50 | pnpm build 51 | 52 | # yarn 53 | yarn build 54 | 55 | # bun 56 | bun run build 57 | ``` 58 | 59 | Locally preview production build: 60 | 61 | ```bash 62 | # npm 63 | npm run preview 64 | 65 | # pnpm 66 | pnpm preview 67 | 68 | # yarn 69 | yarn preview 70 | 71 | # bun 72 | bun run preview 73 | ``` 74 | 75 | Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. 76 | -------------------------------------------------------------------------------- /app.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 20 | 21 | -------------------------------------------------------------------------------- /assets/css/tailwind.css: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; 5 | /* eslint-enable */ 6 | -------------------------------------------------------------------------------- /components/global/Footer.vue: -------------------------------------------------------------------------------- 1 | 3 | 4 | 22 | 23 | -------------------------------------------------------------------------------- /components/global/LanguageSelector.vue: -------------------------------------------------------------------------------- 1 | 72 | 73 | 94 | 95 | -------------------------------------------------------------------------------- /components/global/Navbar.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 79 | 80 | -------------------------------------------------------------------------------- /components/home/Brand.vue: -------------------------------------------------------------------------------- 1 | 76 | 77 | -------------------------------------------------------------------------------- /components/home/HeroSection.vue: -------------------------------------------------------------------------------- 1 | 348 | 349 | 468 | 469 | 563 | -------------------------------------------------------------------------------- /components/stock/Main.vue: -------------------------------------------------------------------------------- 1 | 570 | 571 | 752 | 753 | 884 | -------------------------------------------------------------------------------- /components/stock/SpecificPage.vue: -------------------------------------------------------------------------------- 1 | 170 | 461 | 462 | -------------------------------------------------------------------------------- /composables/useSBClient.ts: -------------------------------------------------------------------------------- 1 | import { SupabaseClient } from "@supabase/supabase-js"; 2 | 3 | export const useSupabase = (): SupabaseClient => { 4 | const supabase = inject("supabase"); 5 | if (!supabase) { 6 | throw new Error("Error Initializing Supabase Client"); 7 | } 8 | return supabase as SupabaseClient; 9 | } -------------------------------------------------------------------------------- /i18n/lang/de.js: -------------------------------------------------------------------------------- 1 | export default { 2 | filtersTitle: "Finden Sie Ihr Auto" 3 | } 4 | -------------------------------------------------------------------------------- /i18n/lang/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | filtersTitle: "Find your car", 3 | brand: "Brand", 4 | year: "Year", 5 | fuel: "Fuel", 6 | model: "Model", 7 | budget: "Bugdet", 8 | typology: "Typology", 9 | transmission: "Transmission", 10 | kilometers: "Kilometers", 11 | capacity: "Seats", 12 | search: "Search", 13 | select: "Select", 14 | doors: "Doors", 15 | price: "Price", 16 | consumption: "Comsumption", 17 | higherPrice: "Higher price", 18 | lowerPrice: "Lower price", 19 | latest: "Latest", 20 | oldest: "Oldest", 21 | brandAZ: "Brand (A-Z)", 22 | brandZA: "Brand (Z-A)", 23 | higherKMs: "Higher KMs", 24 | lowerKMs: "Lower KMs", 25 | potency: "Potency", 26 | cylinderCapacity: "Cylinder capacity", 27 | color: "Color", 28 | state: "State", 29 | interested: "Interested? Contact us", 30 | stock: "Stock", 31 | contacts: "Contacts", 32 | manual: "Manual", 33 | automatic: "Automatic", 34 | seats: "Seats", 35 | gasoline: "Gasoline", 36 | diesel: "Diesel", 37 | eletric: "Eletric", 38 | lpg: "LPG", 39 | utility: "Utility", 40 | cityBased: "City-based", 41 | suv: "SUV", 42 | van: "Van", 43 | monoVolume: "Monovolume", 44 | orderBy: "Order by", 45 | moreInfo: "More info" 46 | } 47 | -------------------------------------------------------------------------------- /i18n/lang/es.js: -------------------------------------------------------------------------------- 1 | export default { 2 | filtersTitle: "Encuentra tu auto", 3 | lpg: "GPL" 4 | } 5 | -------------------------------------------------------------------------------- /i18n/lang/fr.js: -------------------------------------------------------------------------------- 1 | export default { 2 | filtersTitle: "Trouve ta voiture", 3 | lpg: "GPL" 4 | }; 5 | -------------------------------------------------------------------------------- /i18n/lang/it.js: -------------------------------------------------------------------------------- 1 | export default { 2 | filtersTitle: "Trova la tua auto", 3 | lpg: "GPL" 4 | }; 5 | -------------------------------------------------------------------------------- /i18n/lang/pt.js: -------------------------------------------------------------------------------- 1 | export default { 2 | filtersTitle: "Encontra o teu carro", 3 | brand: "Marca", 4 | year: "Ano", 5 | fuel: "Combustível", 6 | model: "Modelo", 7 | budget: "Orçamento", 8 | typology: "Tipologia", 9 | transmission: "Transmissão", 10 | kilometers: "Quilómetros", 11 | capacity: "Lugares", 12 | search: "Procurar", 13 | select: "Selecionar", 14 | doors: "Portas", 15 | price: "Preço", 16 | consumption: "Consumo", 17 | higherPrice: "Maior preço", 18 | lowerPrice: "Menor preço", 19 | latest: "Mais recente", 20 | oldest: "Mais antigo", 21 | brandAZ: "Marca (A-Z)", 22 | brandZA: "Marca (Z-A)", 23 | higherKMs: "Mais KMs", 24 | lowerKMs: "Menos KMs", 25 | potency: "Potência", 26 | cylinderCapacity: "Cilindrada", 27 | color: "Cor", 28 | state: "Estado", 29 | interested: "Interessado? Contacta-nos", 30 | stock: "Inventário", 31 | contacts: "Contactos", 32 | manual: "Manual", 33 | automatic: "Automático", 34 | seats: "Lugares", 35 | gasoline: "Gasolina", 36 | diesel: "Gasóleo", 37 | eletric: "Elétrico", 38 | lpg: "GPL", 39 | utility: "Utilitário", 40 | cityBased: "Citadino", 41 | suv: "SUV", 42 | van: "Carrinha", 43 | monoVolume: "Monovolume", 44 | orderBy: "Ordernar por", 45 | moreInfo: "Saber mais" 46 | } 47 | -------------------------------------------------------------------------------- /i18n/lang/zh-CN.js: -------------------------------------------------------------------------------- 1 | export default { 2 | filtersTitle: "找到你的车" 3 | } 4 | -------------------------------------------------------------------------------- /layouts/default.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /nuxt.config.ts: -------------------------------------------------------------------------------- 1 | export default defineNuxtConfig({ 2 | modules: ['@nuxtjs/i18n'], 3 | i18n: { 4 | locales: [ 5 | { code: 'pt', name: 'Português', file: 'pt.js' }, 6 | { code: 'es', name: 'Español', file: 'es.js' }, 7 | { code: 'en', name: 'English', file: 'en.js' }, 8 | { code: 'fr', name: 'Français', file: 'fr.js' }, 9 | { code: 'de', name: 'Deutsch', file: 'de.js' }, 10 | { code: 'it', name: 'Italiano', file: 'it.js' }, 11 | { code: 'zh-CN', name: '中国人', file: 'zh-CN.js' } 12 | ], 13 | lazy: true, 14 | langDir: 'lang/', 15 | defaultLocale: 'pt', 16 | fallbackLocale: 'pt', 17 | }, 18 | css: [ 19 | '@/assets/css/tailwind.css', 20 | '@fortawesome/fontawesome-free/css/all.css' 21 | ], 22 | 23 | postcss: { 24 | plugins: { 25 | tailwindcss: {}, 26 | autoprefixer: {}, 27 | }, 28 | }, 29 | 30 | runtimeConfig: { 31 | public: { 32 | SUPABASE_URL: process.env.SUPABASE_URL, 33 | SUPABASE_ANON_KEY: process.env.SUPABASE_ANON_KEY, 34 | } 35 | }, 36 | 37 | components: true, 38 | compatibilityDate: '2025-02-21', 39 | }) 40 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "veluxe-auto", 3 | "private": true, 4 | "type": "module", 5 | "scripts": { 6 | "build": "nuxt build", 7 | "dev": "nuxt dev", 8 | "generate": "nuxt generate", 9 | "preview": "nuxt preview", 10 | "postinstall": "nuxt prepare" 11 | }, 12 | "dependencies": { 13 | "@fortawesome/fontawesome-free": "^6.7.2", 14 | "@nuxt/types": "^2.18.1", 15 | "@nuxtjs/i18n": "^9.2.1", 16 | "@supabase/supabase-js": "^2.49.1", 17 | "@vercel/analytics": "^1.5.0", 18 | "@vercel/speed-insights": "^1.2.0", 19 | "@vueuse/core": "^12.5.0", 20 | "nouislider": "^15.8.1", 21 | "nuxt": "^3.15.1", 22 | "swiper": "^11.2.0", 23 | "vue": "latest", 24 | "vue-router": "latest" 25 | }, 26 | "devDependencies": { 27 | "autoprefixer": "^10.4.20", 28 | "postcss": "^8.4.49", 29 | "tailwindcss": "^3.4.17" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /pages/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /pages/stock.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 42 | -------------------------------------------------------------------------------- /pages/stockSingle/[id].vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 18 | -------------------------------------------------------------------------------- /plugins/sb-client.ts: -------------------------------------------------------------------------------- 1 | import { createClient } from '@supabase/supabase-js'; 2 | 3 | export default defineNuxtPlugin((app) => { 4 | const config = useRuntimeConfig(); 5 | 6 | const supabase = createClient(config.public.SUPABASE_URL as string, config.public.SUPABASE_ANON_KEY as string); 7 | 8 | app.vueApp.provide('supabase', supabase); 9 | }); -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fumatecdev/Veluxe_next/6451728f383301eb490bc84794f07ab373c32e3f/public/favicon.ico -------------------------------------------------------------------------------- /public/images/VeluxeAutoLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fumatecdev/Veluxe_next/6451728f383301eb490bc84794f07ab373c32e3f/public/images/VeluxeAutoLogo.png -------------------------------------------------------------------------------- /server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../.nuxt/tsconfig.server.json" 3 | } 4 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | './app.vue', 5 | './pages/**/*.{vue,js,ts}', 6 | './components/**/*.{vue,js,ts}', 7 | './layouts/**/*.{vue,js,ts}', 8 | './plugins/**/*.{js,ts}', 9 | './nuxt.config.{js,ts}', 10 | ], 11 | theme: { 12 | extend: { 13 | screens: { 14 | // Custom screen sizes 15 | 'xs': '480px', // Extra small devices 16 | 'sm': '640px', // Small devices (default) 17 | 'md': '768px', // Medium devices (default) 18 | 'midlg': '850px', 19 | 'lg': '1024px', // Large devices (default) 20 | 'xl': '1280px', // Extra large devices (default) 21 | '2xl': '1536px', // 2x Extra large devices (default) 22 | '3xl': '1920px', // Custom large screen 23 | }, 24 | }, 25 | }, 26 | plugins: [], 27 | } 28 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://nuxt.com/docs/guide/concepts/typescript 3 | "extends": "./.nuxt/tsconfig.json", 4 | "compilerOptions": { 5 | "target": "esnext", 6 | "module": "esnext", 7 | "moduleResolution": "node", 8 | "strict": true, 9 | "jsx": "preserve", 10 | "esModuleInterop": true, 11 | "skipLibCheck": true, 12 | "resolveJsonModule": true, 13 | "lib": ["dom", "esnext"] 14 | } 15 | } --------------------------------------------------------------------------------