🎉 Init monorepo Nuxt 4 + Laravel 12 (Story 1.1)
Setup complet de l'infrastructure projet : - Frontend Nuxt 4 (SSR, TypeScript, i18n, Pinia, TailwindCSS) - Backend Laravel 12 API-only avec middleware X-API-Key et CORS - Design tokens (sky-dark, sky-accent, sky-text) et polices (Merriweather, Inter) - Documentation planning et implementation artifacts Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
6
frontend/.env.example
Normal file
6
frontend/.env.example
Normal file
@@ -0,0 +1,6 @@
|
||||
# API Configuration
|
||||
NUXT_PUBLIC_API_URL=http://localhost:8000/api
|
||||
NUXT_PUBLIC_API_KEY=your-api-key-here
|
||||
|
||||
# Site URL (for sitemap, SEO)
|
||||
NUXT_PUBLIC_SITE_URL=http://localhost:3000
|
||||
5
frontend/app/app.vue
Normal file
5
frontend/app/app.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<NuxtLayout>
|
||||
<NuxtPage />
|
||||
</NuxtLayout>
|
||||
</template>
|
||||
5
frontend/app/assets/css/main.css
Normal file
5
frontend/app/assets/css/main.css
Normal file
@@ -0,0 +1,5 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Merriweather:ital,wght@0,300;0,400;0,700;1,400&display=swap');
|
||||
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
5
frontend/app/pages/index.vue
Normal file
5
frontend/app/pages/index.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="min-h-screen bg-sky-dark flex items-center justify-center">
|
||||
<h1 class="text-4xl font-ui text-sky-text">Skycel</h1>
|
||||
</div>
|
||||
</template>
|
||||
44
frontend/nuxt.config.ts
Normal file
44
frontend/nuxt.config.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
export default defineNuxtConfig({
|
||||
devtools: { enabled: true },
|
||||
|
||||
ssr: true,
|
||||
|
||||
future: {
|
||||
compatibilityVersion: 4,
|
||||
},
|
||||
|
||||
modules: [
|
||||
'@nuxtjs/i18n',
|
||||
'@pinia/nuxt',
|
||||
'@nuxt/image',
|
||||
'@nuxtjs/sitemap',
|
||||
],
|
||||
|
||||
css: ['~/assets/css/main.css'],
|
||||
|
||||
postcss: {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
},
|
||||
|
||||
i18n: {
|
||||
locales: ['fr', 'en'],
|
||||
defaultLocale: 'fr',
|
||||
strategy: 'prefix_except_default',
|
||||
},
|
||||
|
||||
app: {
|
||||
pageTransition: { name: 'page', mode: 'out-in' },
|
||||
},
|
||||
|
||||
runtimeConfig: {
|
||||
public: {
|
||||
apiUrl: process.env.NUXT_PUBLIC_API_URL || 'http://localhost:8000/api',
|
||||
apiKey: process.env.NUXT_PUBLIC_API_KEY || '',
|
||||
},
|
||||
},
|
||||
|
||||
compatibilityDate: '2025-01-01',
|
||||
})
|
||||
11936
frontend/package-lock.json
generated
Normal file
11936
frontend/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
26
frontend/package.json
Normal file
26
frontend/package.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"name": "skycel-frontend",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "nuxt build",
|
||||
"dev": "nuxt dev",
|
||||
"generate": "nuxt generate",
|
||||
"preview": "nuxt preview",
|
||||
"postinstall": "nuxt prepare"
|
||||
},
|
||||
"dependencies": {
|
||||
"@nuxt/image": "^1.9.0",
|
||||
"@nuxtjs/i18n": "^9.0.0",
|
||||
"@nuxtjs/sitemap": "^7.2.0",
|
||||
"@pinia/nuxt": "^0.9.0",
|
||||
"nuxt": "^3.16.0",
|
||||
"pinia-plugin-persistedstate": "^3.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^10.4.24",
|
||||
"postcss": "^8.5.6",
|
||||
"tailwindcss": "^3.4.19",
|
||||
"typescript": "^5.7.0"
|
||||
}
|
||||
}
|
||||
62
frontend/tailwind.config.js
Normal file
62
frontend/tailwind.config.js
Normal file
@@ -0,0 +1,62 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
content: [
|
||||
'./app/**/*.{vue,js,ts}',
|
||||
'./components/**/*.{vue,js,ts}',
|
||||
'./layouts/**/*.{vue,js,ts}',
|
||||
'./pages/**/*.{vue,js,ts}',
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
'sky-dark': {
|
||||
DEFAULT: '#0a0e1a',
|
||||
50: '#1a1f2e',
|
||||
100: '#151a28',
|
||||
200: '#10141f',
|
||||
300: '#0c1019',
|
||||
400: '#080c14',
|
||||
500: '#0a0e1a',
|
||||
600: '#060810',
|
||||
700: '#04060c',
|
||||
800: '#020408',
|
||||
900: '#010204',
|
||||
},
|
||||
'sky-accent': {
|
||||
DEFAULT: '#fa784f',
|
||||
hover: '#fb8c68',
|
||||
active: '#f96436',
|
||||
50: '#fff4f0',
|
||||
100: '#ffe8e0',
|
||||
200: '#ffd1c1',
|
||||
300: '#ffb9a2',
|
||||
400: '#fca283',
|
||||
500: '#fa784f',
|
||||
600: '#e86940',
|
||||
700: '#d65a31',
|
||||
800: '#c44b22',
|
||||
900: '#b23c13',
|
||||
},
|
||||
'sky-text': {
|
||||
DEFAULT: '#f5f0e6',
|
||||
muted: '#b8b3a8',
|
||||
50: '#fdfcfa',
|
||||
100: '#fbf9f5',
|
||||
200: '#f7f3eb',
|
||||
300: '#f5f0e6',
|
||||
400: '#e8e3d9',
|
||||
500: '#dbd6cc',
|
||||
600: '#cec9bf',
|
||||
700: '#c1bcb2',
|
||||
800: '#b4afa5',
|
||||
900: '#a7a298',
|
||||
},
|
||||
},
|
||||
fontFamily: {
|
||||
'narrative': ['Merriweather', 'Georgia', 'serif'],
|
||||
'ui': ['Inter', 'system-ui', 'sans-serif'],
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [],
|
||||
}
|
||||
3
frontend/tsconfig.json
Normal file
3
frontend/tsconfig.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"extends": "./.nuxt/tsconfig.json"
|
||||
}
|
||||
Reference in New Issue
Block a user