Le build Docker (vue-tsc en install isole) echouait avec TS2307
"Cannot find module './App.vue'..." faute de declaration de module
pour les fichiers .vue. Ajout du shim standard dans vite-env.d.ts.
- MesPersos.vue (347L) éclaté en 5 sous-composants autonomes sous
shop/persos/ (BgPrefsSection, SendButtonPrefsSection, SendSkinPrefsSection,
IpColorPrefsSection, PetsPrefsSection). MesPersos n'est plus qu'un wrapper.
- CSS partagé des sections déplacé en classes globales .pf-* dans style.css
(plus de duplication entre les sections).
- ProductCard : metaJson typé via parseMeta<ProductMeta>(), suppression des
casts `any` (find/designs) — comportement identique.
- vue-tsc --noEmit : 0 erreur.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Theming
- Thème global piloté par variables CSS (:root + [data-theme]) appliqué via un
attribut data-theme sur la racine app. Ajout du thème "WhatsApp" (bulles +
palette verte, bulle sortante #005c4b) sans nouveau composant message.
- useTheme: type Theme étendu + THEME_LAYOUT (whatsapp = layout bulles).
- MessageList: sélection du composant par layout avec garde de repli
(fini le <component :is="undefined">).
- Fix du thème "compact" cassé : nouveau MessageItemCompact.vue (variante dense).
- Surfaces migrées en variables : fond app/chat, header, bouton d'envoi, bulles.
Corrections
- Bug envoi rich/fichier : le backend exigeait un content texte non vide même
en mode HTML/CSS/JS. Validation par présence (texte OU rich OU piece jointe) ;
le front n'envoie plus d'espace bidon. Plus besoin de faux texte.
- Shop : suppression de "Tout voir", navigation forcee par categorie
(defaut: Publicite).
Refactor (lisibilite)
- Parite perks backend (ip-colors, audio-alert, send-skin-*) ; /api/shop/me
renvoie myPerks precalcule ; le front consomme directement (suppression de la
derivation dupliquee + nettoyage d'un artefact de merge dans useMessages).
- Coherence composable-singleton : myPerks lu via useMyPerks() partout.
- Extraction du composer de HomePage vers ChatComposer.vue (HomePage = layout).
- Helper type parseMeta<T>() pour les metaJson (moins de any).
- vue-tsc --noEmit : 0 erreur.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sépare le type-check (script 'typecheck') du build de prod ('vite build').
Le build Docker ne doit pas échouer sur des erreurs TS strictes (TS6133/TS2307)
alors que le bundle est sain.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- docker-compose.prod.yml: postgres + redis + backend (bun) + web (nginx single-origin)
- backend/Dockerfile + entrypoint: prisma migrate deploy + seed idempotent au boot
- frontend/Dockerfile: build Vite (VITE_API_URL=https://xip.kerboul.me) servi par nginx
- deploy/nginx.conf: proxy /api + /ws vers le backend, SPA fallback
- .gitea/workflows/deploy.yml: auto-deploy SSH sur push main (runner CT121 -> CT502)
- scripts/deploy.sh: pull + rebuild de la stack
- mode open-bar (XIP_OPEN_BAR): paywall off pour tous en prod, via isFree() centralise
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- backend: SSE endpoint /api/messages/stream backed by Redis pub/sub
- backend: read real client IP via getConnInfo (fallback for x-forwarded-for)
- backend: CORS allow any origin (dev: LAN access from phone)
- frontend: useMessages subscribes via EventSource, auto-reconnect, merges new messages/replies live
- frontend: vite host:true to expose dev server on LAN
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Added docker-compose.yml for PostgreSQL and Redis services with health checks.
- Created frontend directory with initial Vue.js setup including package.json, vite.config.ts, and TypeScript configuration.
- Implemented main application structure with App.vue and HomePage.vue components.
- Added message fetching and posting functionality in HomePage.vue.
- Included necessary styles and scripts for Ionic framework integration.
- Developed a dev-stack script to manage Docker containers and run backend/frontend servers.