diff --git a/frontend b/frontend deleted file mode 160000 index 6803f05..0000000 --- a/frontend +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6803f05f5e754e6903d63938f20c10636136ce89 diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..c00273f --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,6 @@ +node_modules/ +dist/ +.env +.env.local +*.log +public/unity-build/TemplateData/ diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..850d686 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,66 @@ +# --- Build stage --- +FROM node:18-alpine AS build + +# Environment: 'dev' or 'prod' (controls theming) +ARG VITE_ENV=prod +ENV VITE_ENV=$VITE_ENV + +# Game server WebSocket URL (Colyseus) +ARG VITE_GAME_SERVER_URL +ENV VITE_GAME_SERVER_URL=$VITE_GAME_SERVER_URL + +WORKDIR /app + +COPY package*.json ./ +RUN npm ci + +COPY . . +RUN npm run build + +# --- Production stage --- +FROM nginx:alpine + +# Copy built assets +COPY --from=build /app/dist /usr/share/nginx/html + +# Copy Unity build if present +COPY --from=build /app/public/unity-build /usr/share/nginx/html/unity-build + +# Nginx config for SPA + gzip precompressed Unity files +RUN cat > /etc/nginx/conf.d/default.conf << 'EOF' +server { + listen 80; + server_name _; + root /usr/share/nginx/html; + index index.html; + + gzip on; + gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript application/wasm; + + location /unity-build/Build/ { + types { + application/javascript js; + application/wasm wasm; + application/octet-stream data; + } + add_header Cache-Control "no-cache, must-revalidate"; + gzip on; + gzip_min_length 1000; + gzip_types application/javascript application/wasm application/octet-stream; + } + + # Aggressive cache for hashed Vite assets (NOT Unity build files) + location ~* ^(?!/unity-build/).*\.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + } + + location / { + try_files $uri $uri/ /index.html; + } +} +EOF + +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..52d118c --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,54 @@ +# ROLL'D — Frontend + +Client web pour le jeu ROLL'D. Héberge le build Unity WebGL dans une interface moderne. + +## Stack + +- **React 18** + **Vite 5** — build rapide, HMR +- **Tailwind CSS 3** — styling utility-first +- **Unity WebGL Loader** — intégration du build Unity + +## Quickstart + +```bash +npm install +npm run dev # http://localhost:5173 +npm run build # production build → dist/ +``` + +## Unity WebGL Build + +Placer le build Unity dans `public/unity-build/` : +``` +public/unity-build/ +├── Build/ +│ ├── build.data.gz +│ ├── build.framework.js.gz +│ ├── build.loader.js +│ └── build.wasm.gz +└── TemplateData/ (optionnel) +``` + +## Docker + +```bash +docker build -t rolld-frontend . +docker run -p 80:80 rolld-frontend +``` + +## Structure + +``` +├── public/ +│ ├── unity-build/ # Build WebGL (non versionné) +│ └── favicon.svg +├── src/ +│ ├── components/ # Composants React +│ ├── assets/ # Images, fonts +│ ├── App.jsx +│ └── main.jsx +├── index.html +├── tailwind.config.js +├── vite.config.js +└── Dockerfile +``` diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..ca75586 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,17 @@ + + +
+ + + + + + + +Chargement… {loadingProgress}%
+
+ Le build WebGL n'est pas encore disponible. Placez les fichiers dans{' '}
+
+ public/unity-build/Build/
+
+
Fichiers requis :
+├── nouveau_build.loader.js
+├── nouveau_build.data
+├── nouveau_build.framework.js
+└── nouveau_build.wasm
+Vérification du build…
+{error}
+ ++ Chaque surface change radicalement votre physique. Maîtrisez-les pour dominer l'arène. +
++ {gel.description} +
++ Un monde de billes, de gels et de physique. Roulez sur des surfaces qui boostent, + collent ou font rebondir — et affrontez d'autres joueurs en temps réel. +
+ + {/* CTA Buttons */} ++ Ce programme vidéoludique a été développé sous l'autorité directe du{' '} + Couple Présidentiel et financé par le{' '} + Ministère de la Défense dans le cadre de + la Directive de Divertissement Stratégique. +
++ Budget alloué : 35 Memes ($K) · Temps de développement : classifié · + Taux de satisfaction prévu : 420% +
+ + {/* Stamps / tags */} ++ « Endgame, Combined Arms, et Zougoulag ! » +
+