SPB Git forge

spb/uqo-eval

Public
55commits 2branches 0releases
134.4 MBsize
maindefault branch
yesterdaylast push
TypeScript 90.1% JavaScript 3.2% Python 3.2% CSS 1.8% HTML 1.8%

UQO Éval : assets de marque (favicon/OG/manifest/apple-touch avec logo officiel), corrections PDF (pieds de page, mention cours), Analyser partout, données src/data, nettoyage tokens

Simon-Pierre Boucher committed 1 mo ago (Aug 28, 2026) parent 50a3d3d

8 changed files +24 −20

modified docs/PIPELINE-DONNEES.md +2 −0
@@ -1,3 +1,5 @@
1 +> **Note UQO Éval** — document hérité du projet d'origine (Vrai-Prix) : le pipeline de données décrit ici est celui qui a produit la base `data/vraiprix.db` utilisée par UQO Éval.
2 +
1 3 # Vrai-Prix — Pipeline de données (documentation de continuité)
2 4
3 5 > Rédigé le 2026-08-18. **Important : contrairement aux autres apps Ka, Vrai-Prix
modified src/components/MobileTabBar.tsx +3 −3
@@ -1,8 +1,8 @@
1 1 // UQO Éval — laboratoire pédagogique d'évaluation immobilière
2 2 /**
3 3 * Barre de navigation mobile commune (tabbar v1) :
4 − * Estimer · Marché · Ventes · Méthode, accent rouge signature, bilingue.
5 − * Estimer mène immédiatement à la recherche d'adresse (focus du champ héros) ;
4 + * Analyser · Marché · Ventes · Méthode, accent bleu UQO, bilingue.
5 + * Analyser mène immédiatement à la recherche d'adresse (focus du champ héros) ;
6 6 * Ventes ancre le flux « dernières ventes réelles » de l'accueil.
7 7 */
8 8 "use client";
@@ -40,7 +40,7 @@ export default function MobileTabBar() {
40 40 <KaTabbar
41 41 tabs={[
42 42 {
43 − label: fr ? "Estimer" : "Estimate",
43 + label: fr ? "Analyser" : "Analyze",
44 44 icon: "target",
45 45 to: "/",
46 46 onClick: () => {
modified src/components/SearchBox.tsx +2 −2
@@ -86,7 +86,7 @@ export default function SearchBox({
86 86 {hero && (
87 87 <button
88 88 type="button"
89 − aria-label={fr ? "Estimer cette adresse" : "Estimate this address"}
89 + aria-label={fr ? "Analyser cette adresse" : "Analyze this address"}
90 90 onMouseDown={(e) => {
91 91 // mousedown : devance le blur de l'input (sinon le menu se ferme avant)
92 92 e.preventDefault();
@@ -95,7 +95,7 @@ export default function SearchBox({
95 95 }}
96 96 className="vp-display -mb-px flex min-h-[56px] shrink-0 items-center gap-2 self-end bg-[var(--accent-bright)] px-4 text-[14px] font-bold text-ink transition-colors hover:bg-[#ff6b63] sm:px-7 sm:text-[15px]"
97 97 >
98 − {fr ? "Estimer" : "Estimate"}
98 + {fr ? "Analyser" : "Analyze"}
99 99 <span aria-hidden="true">→</span>
100 100 </button>
101 101 )}
modified src/ka/ka-tabbar.css +1 −1
@@ -1,5 +1,5 @@
1 1 /* ============================================================
2 − KA Tabbar v1 — barre de navigation mobile commune Groupe KA
2 + Tabbar v1 — barre de navigation mobile (UQO Éval)
3 3 Canonique : ka-ui.git/nav/ka-tabbar.css — copiée telle quelle
4 4 dans chaque app (src/ka/ka-tabbar.css) et importée par le
5 5 composant KaTabbar. Voir TABBAR-STANDARD.md.
modified src/ka/tokens.css +5 −5
@@ -14,7 +14,7 @@
14 14 ----------------------------------------------------------------------------- */
15 15
16 16 :root {
17 − /* ---- Palette fixe Groupe KA (identique sur les 12 sites) ---- */
17 + /* ---- Palette de base (surchargée par globals.css — UQO Éval) ---- */
18 18 --paper: #f5f3ee;
19 19 --surface: #ffffff;
20 20 --surface-2: #faf9f5;
@@ -31,8 +31,8 @@
31 31 --danger-soft: #fbe9e7;
32 32
33 33 /* ---- ACCENT du site — SEULES variables surchargées par marque ---- */
34 − --accent: #d9f26b; /* défaut : lime Groupe KA */
35 − --accent-soft: #f0f9d2;
34 + --accent: #006085; /* défaut : bleu UQO (surchargé par globals.css) */
35 + --accent-soft: #dcebf2;
36 36 --accent-deep: #123f2e;
37 37 --on-accent: var(--ink); /* couleur du texte posé SUR l'accent */
38 38
@@ -194,7 +194,7 @@ body > * { position: relative; }
194 194 }
195 195 .input::placeholder { color: var(--ink-3); }
196 196
197 −/* ---- Badge « Un service Groupe KA » (header, cliquable → hub) ---- */
197 +/* ---- Badge hérité (.gk-badge — inutilisé par UQO Éval) ---- */
198 198 .gk-badge {
199 199 display: inline-flex; align-items: center; gap: 7px;
200 200 min-height: 30px; padding: 3px 10px 4px;
@@ -271,7 +271,7 @@ body > * { position: relative; }
271 271 select, textarea { font-size: max(16px, 1em) !important; }
272 272 }
273 273
274 −/* Zone tactile du badge Groupe KA étendue à ≥44 px au doigt, sans changer
274 +/* Zone tactile du badge hérité étendue à ≥44 px au doigt, sans changer
275 275 son rendu (débord de la zone cliquable via pseudo-élément). */
276 276 @media (pointer: coarse) {
277 277 .gk-badge { position: relative; }
modified src/lib/report-portfolio.ts +3 −3
@@ -60,11 +60,11 @@ function pageFrame(doc: Doc, page: number, total: number, generated: string) {
60 60 doc.rect(0, 0, W, H).fill(PAPER);
61 61 doc.rect(M, H - 46, W - 2 * M, 1.2).fill(INK);
62 62 doc.font("JB-Reg").fontSize(6.5).fillColor(INK3).text(
63 − "UQO-EVAL.APP — RAPPORT DE PARC IMMOBILIER · PLATEFORME PÉDAGOGIQUE · ESTIMATION STATISTIQUE À TITRE INDICATIF",
64 − M, H - 38, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false });
63 + "UQO-EVAL.APP · RAPPORT DE PARC — PLATEFORME PÉDAGOGIQUE · ESTIMATION À TITRE INDICATIF",
64 + M, H - 39, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false });
65 65 doc.font("JB-Reg").fontSize(6.5).fillColor(INK3).text(
66 66 "COURS IMM1003 · IMM1033 — SIMON-PIERRE BOUCHER, UQO",
67 − M, H - 29, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false });
67 + M, H - 30, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false });
68 68 doc.font("JB-Bold").fontSize(7.5).fillColor(INK)
69 69 .text(`${page} / ${total}`, W - M - 40, H - 39, { width: 40, align: "right" });
70 70 doc.font("JB-Reg").fontSize(6.5).fillColor(INK3)
modified src/lib/report-pro.ts +2 −2
@@ -67,11 +67,11 @@ function footer(c: Ctx, total: number) {
67 67 const { doc } = c;
68 68 doc.rect(M, H - 52, CW, 0.8).fill(INK);
69 69 doc.font("JB-Reg").fontSize(6).fillColor(INK3).text(
70 − "ESTIMATION STATISTIQUE AUTOMATISÉE (AVM) À VOCATION PÉDAGOGIQUE — NE CONSTITUE PAS UN RAPPORT D'ÉVALUATION AU SENS DES NORMES DE L'OEAQ · UQO-EVAL.APP",
70 + "AVM PÉDAGOGIQUE — NE CONSTITUE PAS UN RAPPORT D'ÉVALUATION AU SENS DES NORMES DE L'OEAQ · UQO-EVAL.APP",
71 71 M, H - 44, { width: CW - 50, characterSpacing: 0.3, lineBreak: false });
72 72 doc.font("JB-Reg").fontSize(6).fillColor(INK3).text(
73 73 "COURS IMM1003 · IMM1033 — SIMON-PIERRE BOUCHER, UQO",
74 − M, H - 36, { width: CW - 50, characterSpacing: 0.3, lineBreak: false });
74 + M, H - 35, { width: CW - 50, characterSpacing: 0.3, lineBreak: false });
75 75 doc.font("JB-Bold").fontSize(7).fillColor(INK)
76 76 .text(`${c.page} / ${total}`, W - M - 40, H - 45, { width: 40, align: "right" });
77 77 }
modified src/lib/report.ts +6 −4
@@ -73,12 +73,12 @@ function pageFrame(doc: Doc, page: number, total: number, generated: string) {
73 73 // filet de bas de page
74 74 doc.rect(M, H - 46, W - 2 * M, 1.2).fill(INK);
75 75 doc.font("JB-Reg").fontSize(6.5).fillColor(INK3).text(
76 − "UQO-EVAL.APP — PLATEFORME PÉDAGOGIQUE · ESTIMATION STATISTIQUE À TITRE INDICATIF · NE REMPLACE PAS UNE ÉVALUATION PROFESSIONNELLE CERTIFIÉE (OEAQ)",
77 − M, H - 38, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false }
76 + "UQO-EVAL.APP · PLATEFORME PÉDAGOGIQUE — ESTIMATION STATISTIQUE À TITRE INDICATIF (OEAQ)",
77 + M, H - 39, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false }
78 78 );
79 79 doc.font("JB-Reg").fontSize(6.5).fillColor(INK3).text(
80 80 "COURS IMM1003 · IMM1033 — SIMON-PIERRE BOUCHER, UQO",
81 − M, H - 29, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false }
81 + M, H - 30, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false }
82 82 );
83 83 doc.font("JB-Bold").fontSize(7.5).fillColor(INK)
84 84 .text(`${page} / ${total}`, W - M - 40, H - 39, { width: 40, align: "right" });
@@ -363,7 +363,9 @@ export async function buildReport(data: UnitEstimate): Promise<Buffer> {
363 363 "leur dispersion et la largeur de la fourchette. Validation selon la norme IAAO sur études de ratios.",
364 364 M + 16, my + 26, { width: W - 2 * M - 32, lineGap: 1.5 });
365 365 doc.font("JB-Reg").fontSize(6.8).fillColor(LIME)
366 − .text(COURS.toUpperCase(), M + 16, my + 88, { width: W - 2 * M - 32, characterSpacing: 0.2, height: 14, ellipsis: true });
366 + .text(
367 + "GÉNÉRÉ DANS LE CADRE DES COURS IMM1003 · IMM1033 (ÉVALUATION IMMOBILIÈRE) — SIMON-PIERRE BOUCHER, UQO",
368 + M + 16, my + 88, { width: W - 2 * M - 32, characterSpacing: 0.2, height: 14, ellipsis: true, lineBreak: false });
367 369
368 370 doc.end();
369 371 return done;
370 372