Compare commits
118
Commits
d0e4bc74b6
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a0b37314d | ||
|
|
2d579ed637 | ||
|
|
5108bc9d77 | ||
|
|
10ca2a6a5c | ||
|
|
10c7576c46 | ||
|
|
e3f51ca46f | ||
|
|
90bc26f14f | ||
|
|
2d6440b141 | ||
|
|
ab4b4f8c7d | ||
|
|
44e4e827bb | ||
|
|
44b9efeb2a | ||
|
|
7345e3c47f | ||
|
|
e6c6860244 | ||
|
|
f9856ea92b | ||
|
|
91c9bd9730 | ||
|
|
03ed057733 | ||
|
|
7cdfcc07e2 | ||
|
|
94aab8f611 | ||
|
|
6468179654 | ||
|
|
c1e1cd8edd | ||
|
|
8a304759ef | ||
|
|
edfce9159a | ||
|
|
31c2fc64e7 | ||
|
|
210f6134d1 | ||
|
|
3e33070896 | ||
|
|
48f5f29182 | ||
|
|
55a9be9c4c | ||
|
|
648546b3ee | ||
|
|
9e1278a840 | ||
|
|
c58930aace | ||
|
|
1e87c0e572 | ||
|
|
1ea0f3eac2 | ||
|
|
207da48c92 | ||
|
|
9da8061869 | ||
|
|
a595c355eb | ||
|
|
70f79b7357 | ||
|
|
14236c3d3b | ||
|
|
f647808ee8 | ||
|
|
044c584ff3 | ||
|
|
cb36c70bdd | ||
|
|
8aa606806a | ||
|
|
79f051f695 | ||
|
|
18a9c3f70b | ||
|
|
5a253cdf57 | ||
|
|
13ee0820ea | ||
|
|
bef7475941 | ||
|
|
c4a01cddcb | ||
|
|
e579a4836e | ||
|
|
6ac1881947 | ||
|
|
e58ca17c07 | ||
|
|
6d511d9c17 | ||
|
|
fe4bfdd955 | ||
|
|
116f1772b0 | ||
|
|
aa038bb1ff | ||
|
|
ef4e063005 | ||
|
|
a6421f5cd1 | ||
|
|
e26f814e34 | ||
|
|
5e38bfb89a | ||
|
|
fb10813707 | ||
|
|
4ed0cb7e0d | ||
|
|
374e9e5919 | ||
|
|
142a778b84 | ||
|
|
1b2ec281db | ||
|
|
4577f285c6 | ||
|
|
28397c2602 | ||
|
|
2f39288102 | ||
|
|
6773adc470 | ||
|
|
cf6f8229e3 | ||
|
|
193105482b | ||
|
|
d9b93b57f9 | ||
|
|
beb765f83f | ||
|
|
8426909587 | ||
|
|
e59ad31723 | ||
|
|
4c516ba2e4 | ||
|
|
f143d87bef | ||
|
|
8f970a26d8 | ||
|
|
3e17f7fbcb | ||
|
|
be40bc2c50 | ||
|
|
2dc3c0f4d9 | ||
|
|
b87e7f7ec9 | ||
|
|
265d3bc31b | ||
|
|
8e48532941 | ||
|
|
ac686ab3d7 | ||
|
|
770355e097 | ||
|
|
bea2bea1c3 | ||
|
|
31f3456223 | ||
|
|
c37d1838bb | ||
|
|
bbfc760ae1 | ||
|
|
5b6716dd7e | ||
|
|
83fe0a1c5a | ||
|
|
1ffff7727d | ||
|
|
adcd726102 | ||
|
|
4aa9c8bbdc | ||
|
|
1e7e176016 | ||
|
|
264271615c | ||
|
|
1b05737f1c | ||
|
|
7f9e004931 | ||
|
|
29f3a60c67 | ||
|
|
2dbe101a25 | ||
|
|
a3dd78acb1 | ||
|
|
b234134f40 | ||
|
|
b51889edf9 | ||
|
|
ed9cd20750 | ||
|
|
bf6ee4669a | ||
|
|
55730b10e8 | ||
|
|
85a48f9dbd | ||
|
|
ca4d0fa4a9 | ||
|
|
761328b643 | ||
|
|
f81fbf55a8 | ||
|
|
b3573dad40 | ||
|
|
b3a21e89c9 | ||
|
|
e825f3a8a1 | ||
|
|
27304b72ee | ||
|
|
cefb2b18c6 | ||
|
|
72c28bbb68 | ||
|
|
85b516814b | ||
|
|
0fd0f77b58 | ||
|
|
5cb906c2ff |
@@ -1,3 +1,10 @@
|
||||
**/.DS_Store
|
||||
/.obsidian/workspace.json
|
||||
/.DS_Store
|
||||
|
||||
|
||||
|
||||
|
||||
# Ignore Smart Environment folder
|
||||
.smart-env.weekly-review-tmp/
|
||||
.smart-env/
|
||||
|
||||
Vendored
+8
-1
@@ -1,3 +1,10 @@
|
||||
{
|
||||
"alwaysUpdateLinks": true
|
||||
"alwaysUpdateLinks": true,
|
||||
"pdfExportSettings": {
|
||||
"includeName": true,
|
||||
"pageSize": "Letter",
|
||||
"landscape": false,
|
||||
"margin": "0",
|
||||
"downscalePercent": 100
|
||||
}
|
||||
}
|
||||
Vendored
+6
-3
@@ -1,12 +1,15 @@
|
||||
[
|
||||
"obsidian-git",
|
||||
"iconic",
|
||||
"folder-links",
|
||||
"settings-search",
|
||||
"omnisearch",
|
||||
"auto-gitkeep",
|
||||
"editing-toolbar",
|
||||
"obsidian-local-rest-api",
|
||||
"notebook-navigator",
|
||||
"templater-obsidian"
|
||||
"templater-obsidian",
|
||||
"obsidian-git",
|
||||
"auto-gitkeep",
|
||||
"dataview",
|
||||
"smart-connections",
|
||||
"smart-lookup"
|
||||
]
|
||||
Vendored
+1
-1
@@ -17,6 +17,6 @@
|
||||
"repelStrength": 10,
|
||||
"linkStrength": 1,
|
||||
"linkDistance": 250,
|
||||
"scale": 0.4612742173312823,
|
||||
"scale": 0.28728300058735007,
|
||||
"close": true
|
||||
}
|
||||
Vendored
+20876
File diff suppressed because one or more lines are too long
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "dataview",
|
||||
"name": "Dataview",
|
||||
"version": "0.5.68",
|
||||
"minAppVersion": "0.13.11",
|
||||
"description": "Complex data views for the data-obsessed.",
|
||||
"author": "Michael Brenan <blacksmithgu@gmail.com>",
|
||||
"authorUrl": "https://github.com/blacksmithgu",
|
||||
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
.block-language-dataview {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
/*****************/
|
||||
/** Table Views **/
|
||||
/*****************/
|
||||
|
||||
/* List View Default Styling; rendered internally as a table. */
|
||||
.table-view-table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.table-view-table > thead > tr, .table-view-table > tbody > tr {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.table-view-table > tbody > tr:hover {
|
||||
background-color: var(--table-row-background-hover);
|
||||
}
|
||||
|
||||
.table-view-table > thead > tr > th {
|
||||
font-weight: 700;
|
||||
font-size: larger;
|
||||
border-top: none;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-bottom: solid;
|
||||
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.table-view-table > tbody > tr > td {
|
||||
text-align: left;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.table-view-table ul, .table-view-table ol {
|
||||
margin-block-start: 0.2em !important;
|
||||
margin-block-end: 0.2em !important;
|
||||
}
|
||||
|
||||
/** Rendered value styling for any view. */
|
||||
.dataview-result-list-root-ul {
|
||||
padding: 0em !important;
|
||||
margin: 0em !important;
|
||||
}
|
||||
|
||||
.dataview-result-list-ul {
|
||||
margin-block-start: 0.2em !important;
|
||||
margin-block-end: 0.2em !important;
|
||||
}
|
||||
|
||||
/** Generic grouping styling. */
|
||||
.dataview.result-group {
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
/*******************/
|
||||
/** Inline Fields **/
|
||||
/*******************/
|
||||
|
||||
.dataview.inline-field-key {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
font-family: var(--font-monospace);
|
||||
background-color: var(--background-primary-alt);
|
||||
color: var(--nav-item-color-selected);
|
||||
}
|
||||
|
||||
.dataview.inline-field-value {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
font-family: var(--font-monospace);
|
||||
background-color: var(--background-secondary-alt);
|
||||
color: var(--nav-item-color-selected);
|
||||
}
|
||||
|
||||
.dataview.inline-field-standalone-value {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
font-family: var(--font-monospace);
|
||||
background-color: var(--background-secondary-alt);
|
||||
color: var(--nav-item-color-selected);
|
||||
}
|
||||
|
||||
/***************/
|
||||
/** Task View **/
|
||||
/***************/
|
||||
|
||||
.dataview.task-list-item, .dataview.task-list-basic-item {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 3px;
|
||||
transition: 0.4s;
|
||||
}
|
||||
|
||||
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
|
||||
background-color: var(--text-selection);
|
||||
box-shadow: -40px 0 0 var(--text-selection);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/*****************/
|
||||
/** Error Views **/
|
||||
/*****************/
|
||||
|
||||
div.dataview-error-box {
|
||||
width: 100%;
|
||||
min-height: 150px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 4px dashed var(--background-secondary);
|
||||
}
|
||||
|
||||
.dataview-error-message {
|
||||
color: var(--text-muted);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/*************************/
|
||||
/** Additional Metadata **/
|
||||
/*************************/
|
||||
|
||||
.dataview.small-text {
|
||||
font-size: smaller;
|
||||
color: var(--text-muted);
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
.dataview.small-text::before {
|
||||
content: "(";
|
||||
}
|
||||
|
||||
.dataview.small-text::after {
|
||||
content: ")";
|
||||
}
|
||||
+4
-3
@@ -195,8 +195,7 @@
|
||||
"folderSortOrder": "alpha-asc",
|
||||
"enableFolderNotes": true,
|
||||
"folderNoteType": "markdown",
|
||||
"folderNoteName": "",
|
||||
"folderNoteNamePattern": "",
|
||||
"folderNoteNamePattern": "{{folder}}",
|
||||
"folderNoteTemplate": null,
|
||||
"enableFolderNoteLinks": true,
|
||||
"hideFolderNoteInList": true,
|
||||
@@ -262,6 +261,7 @@
|
||||
"unfinishedTaskBackgroundColor": "#ef000050",
|
||||
"unfinishedTaskBackgroundColorDark": "#ef000050",
|
||||
"showFileIcons": true,
|
||||
"unfinishedTaskIcon": "compact",
|
||||
"useFolderIconForFiles": false,
|
||||
"showFilenameMatchIcons": false,
|
||||
"fileNameIconMap": {},
|
||||
@@ -323,6 +323,7 @@
|
||||
"calendarMonthHighlights": {},
|
||||
"calendarShowWeekNumber": false,
|
||||
"calendarShowQuarter": false,
|
||||
"calendarShowOutsideMonthDays": true,
|
||||
"calendarShowYearCalendar": true,
|
||||
"calendarLeftPlacement": "navigation",
|
||||
"calendarWeeksToShow": 1,
|
||||
@@ -560,7 +561,7 @@
|
||||
"#404040",
|
||||
"#404040"
|
||||
],
|
||||
"lastShownVersion": "3.3.2",
|
||||
"lastShownVersion": "3.3.4",
|
||||
"rootFolderOrder": [],
|
||||
"rootTagOrder": [],
|
||||
"rootPropertyOrder": []
|
||||
|
||||
+164
-160
File diff suppressed because one or more lines are too long
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "notebook-navigator",
|
||||
"name": "Notebook Navigator",
|
||||
"version": "3.3.2",
|
||||
"version": "3.3.4",
|
||||
"minAppVersion": "1.11.0",
|
||||
"description": "Replace the default file explorer with a clean two-pane interface featuring folder tree, tag browsing, file previews, keyboard navigation, drag-and-drop, pinned notes, and customizable display options.",
|
||||
"author": "Johan Sanneblad",
|
||||
|
||||
+130
-5
@@ -247,8 +247,8 @@ body {
|
||||
--nn-theme-file-preview-color: var(--nn-theme-foreground-muted);
|
||||
--nn-theme-file-preview-font-weight: 400;
|
||||
/* --nn-theme-file-task-color and --nn-theme-file-task-complete-color are
|
||||
intentionally not declared here: task progress rules use var() fallbacks to detect whether
|
||||
a theme or Style Settings set them, so customized colors can persist on selected rows. */
|
||||
intentionally not declared here: task progress and replacement icon rules use var() fallbacks
|
||||
to detect whether a theme or Style Settings set them, so customized colors can persist on selected rows. */
|
||||
--nn-theme-file-task-font-weight: 400;
|
||||
--nn-theme-file-task-complete-font-weight: 400;
|
||||
--nn-theme-file-date-color: var(--nn-theme-foreground-faded);
|
||||
@@ -2975,6 +2975,8 @@ button.nn-navigation-calendar-year-month {
|
||||
z-index: 1;
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
/* Keeps Windows interface-font descenders inside the clipped label used for horizontal ellipsis. */
|
||||
line-height: 1.2;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
@@ -4023,7 +4025,7 @@ button.nn-navigation-calendar-day {
|
||||
color: var(--nn-file-name-custom-color);
|
||||
}
|
||||
|
||||
.nn-file-word-count-suffix {
|
||||
.nn-file-name-suffix {
|
||||
color: var(--nn-theme-file-word-count-color);
|
||||
font-weight: var(--nn-theme-file-word-count-font-weight);
|
||||
}
|
||||
@@ -4112,6 +4114,16 @@ button.nn-navigation-calendar-day {
|
||||
color: var(--nn-theme-navitem-selected-icon-color);
|
||||
}
|
||||
|
||||
/* A configured task color remains stable across selection states. Without one, the replacement
|
||||
follows the same normal and selected colors as the file icon it replaces. */
|
||||
.nn-file-icon.nn-file-icon-unfinished-task[data-has-color='false'] {
|
||||
color: var(--nn-theme-file-task-color, var(--nn-theme-navitem-icon-color));
|
||||
}
|
||||
|
||||
.nn-file.nn-selected .nn-file-icon.nn-file-icon-unfinished-task[data-has-color='false'] {
|
||||
color: var(--nn-theme-file-task-color, var(--nn-theme-navitem-selected-icon-color));
|
||||
}
|
||||
|
||||
/* Quick actions panel - horizontal container for action icons */
|
||||
.nn-quick-actions-panel {
|
||||
position: absolute;
|
||||
@@ -4224,6 +4236,14 @@ button.nn-navigation-calendar-day {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* Emoji and icon-font providers render the glyph on the container instead of adding an SVG,
|
||||
so they need an explicit font size to match the task indicator box. */
|
||||
.nn-file-task-progress-icon.nn-emoji-icon,
|
||||
.nn-file-task-progress-icon.nn-iconfont {
|
||||
font-size: calc(var(--icon-size) * 0.8);
|
||||
line-height: calc(var(--icon-size) * 0.8);
|
||||
}
|
||||
|
||||
/* The icon has no font weight, so its stroke width tracks the state weight variable instead:
|
||||
weight 400 maps to the lucide default stroke of 2, weight 600 to 2.5, keeping the icon's
|
||||
visual boldness in sync with the count text. */
|
||||
@@ -4554,7 +4574,7 @@ button.nn-navigation-calendar-day {
|
||||
);
|
||||
}
|
||||
|
||||
.nn-file.nn-selected .nn-file-word-count-suffix {
|
||||
.nn-file.nn-selected .nn-file-name-suffix {
|
||||
color: var(--nn-selected-file-word-count-color);
|
||||
}
|
||||
|
||||
@@ -5495,6 +5515,11 @@ body.nn-resizing {
|
||||
.nn-file.nn-compact.nn-context-menu-active:not(.nn-selected) .nn-file-content::after {
|
||||
border-radius: min(14px, var(--nn-theme-navitem-border-radius));
|
||||
}
|
||||
|
||||
/* Appearance menu entries holding a per-selection custom value are marked in bold */
|
||||
.nn-menu-title-custom {
|
||||
font-weight: 600;
|
||||
}
|
||||
/* Source: src/styles/sections/state-hidden-items.css */
|
||||
|
||||
/* ========================================================================
|
||||
@@ -7428,6 +7453,99 @@ button.nn-youtube-button svg {
|
||||
text-align: right;
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
|
||||
/* Cards linking to the author's other plugins on the settings start page */
|
||||
.setting-item.nn-plugin-cards {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* One column when the settings pane is narrow, because the description needs the width */
|
||||
.nn-plugin-card-list {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(16em, 1fr));
|
||||
gap: var(--size-4-2);
|
||||
margin-top: var(--size-4-2);
|
||||
}
|
||||
|
||||
/* A button so the whole card can be reached from the keyboard. The declarations before the
|
||||
layout undo the button styling a theme applies. */
|
||||
.nn-plugin-card {
|
||||
height: auto;
|
||||
padding: var(--size-4-3);
|
||||
background-color: var(--background-secondary);
|
||||
box-shadow: none;
|
||||
text-align: start;
|
||||
white-space: normal;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: var(--size-4-3);
|
||||
width: 100%;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
border-radius: var(--radius-m);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.nn-plugin-card:hover {
|
||||
border-color: var(--background-modifier-border-hover);
|
||||
background-color: var(--background-modifier-hover);
|
||||
}
|
||||
|
||||
.nn-plugin-card-icon {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex: 0 0 auto;
|
||||
width: var(--size-4-8);
|
||||
height: var(--size-4-8);
|
||||
border-radius: var(--radius-m);
|
||||
background-color: var(--background-primary);
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
/* min-width lets a long word wrap instead of stretching the card past its column */
|
||||
.nn-plugin-card-details {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--size-2-1);
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.nn-plugin-card-name {
|
||||
color: var(--text-normal);
|
||||
font-size: var(--font-ui-small);
|
||||
font-weight: var(--font-semibold);
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
/* One line whatever the language, cut with an ellipsis, so every card is the same height */
|
||||
.nn-plugin-card-description {
|
||||
color: var(--text-muted);
|
||||
font-size: var(--font-ui-smaller);
|
||||
line-height: 1.4;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
/* Sits at the far edge, the way Obsidian marks a row that opens somewhere else. It keeps to
|
||||
the middle of the card while the icon and the name line up at the top. */
|
||||
.nn-plugin-card-arrow {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
align-self: center;
|
||||
flex: 0 0 auto;
|
||||
margin-inline-start: auto;
|
||||
color: var(--text-faint);
|
||||
}
|
||||
|
||||
.nn-plugin-card-arrow .svg-icon {
|
||||
width: var(--icon-s);
|
||||
height: var(--icon-s);
|
||||
}
|
||||
|
||||
.nn-plugin-card:hover .nn-plugin-card-arrow {
|
||||
color: var(--text-muted);
|
||||
}
|
||||
/* Source: src/styles/sections/settings-sponsor-button.css */
|
||||
|
||||
/* ========================================================================
|
||||
@@ -8906,6 +9024,13 @@ body.is-phone .notebook-navigator-android .nn-split-container {
|
||||
font-size: calc(var(--nn-file-icon-size-mobile, var(--nn-file-icon-size)) * var(--nn-android-font-scale-reciprocal, 1));
|
||||
}
|
||||
|
||||
/* Task indicators are smaller than file icons, so preserve their 80% size while compensating
|
||||
for Android textZoom. Without this override, the general icon rule above enlarges them. */
|
||||
.notebook-navigator-android .nn-mobile .nn-file-task-progress-icon.nn-emoji-icon,
|
||||
.notebook-navigator-android .nn-mobile .nn-file-task-progress-icon.nn-iconfont {
|
||||
font-size: calc(var(--icon-size) * 0.8 * var(--nn-android-font-scale-reciprocal, 1));
|
||||
}
|
||||
|
||||
/* Clamp height compensation - Android doesn't scale max-height, so match the compensated line-height after textZoom applies. */
|
||||
.notebook-navigator-android .nn-file-name {
|
||||
max-height: calc(var(--nn-file-title-line-height) * var(--filename-rows, 1) * var(--nn-android-font-scale, 1));
|
||||
@@ -9713,7 +9838,7 @@ settings:
|
||||
-
|
||||
id: nn-theme-file-task-color
|
||||
title: File task color
|
||||
description: Icon, bar, and count color for notes with unfinished tasks.
|
||||
description: Color for the task display and replacement file icon in notes with unfinished tasks.
|
||||
type: variable-themed-color
|
||||
format: hex
|
||||
default-light: '#'
|
||||
|
||||
-512
@@ -1,512 +0,0 @@
|
||||
/*
|
||||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||
if you want to view the source, please visit the github repository of this plugin
|
||||
*/
|
||||
|
||||
var __create = Object.create;
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getProtoOf = Object.getPrototypeOf;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
||||
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
||||
var __export = (target, all) => {
|
||||
__markAsModule(target);
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __reExport = (target, module2, desc) => {
|
||||
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
||||
for (let key of __getOwnPropNames(module2))
|
||||
if (!__hasOwnProp.call(target, key) && key !== "default")
|
||||
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
||||
}
|
||||
return target;
|
||||
};
|
||||
var __toModule = (module2) => {
|
||||
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
||||
};
|
||||
var __publicField = (obj, key, value) => {
|
||||
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
||||
return value;
|
||||
};
|
||||
|
||||
// src/main.ts
|
||||
__export(exports, {
|
||||
default: () => SettingsSearch
|
||||
});
|
||||
var import_obsidian = __toModule(require("obsidian"));
|
||||
|
||||
// node_modules/monkey-around/mjs/index.js
|
||||
function around(obj, factories) {
|
||||
const removers = Object.keys(factories).map((key) => around1(obj, key, factories[key]));
|
||||
return removers.length === 1 ? removers[0] : function() {
|
||||
removers.forEach((r) => r());
|
||||
};
|
||||
}
|
||||
function around1(obj, method, createWrapper) {
|
||||
const original = obj[method], hadOwn = obj.hasOwnProperty(method);
|
||||
let current = createWrapper(original);
|
||||
if (original)
|
||||
Object.setPrototypeOf(current, original);
|
||||
Object.setPrototypeOf(wrapper, current);
|
||||
obj[method] = wrapper;
|
||||
return remove;
|
||||
function wrapper(...args) {
|
||||
if (current === original && obj[method] === wrapper)
|
||||
remove();
|
||||
return current.apply(this, args);
|
||||
}
|
||||
function remove() {
|
||||
if (obj[method] === wrapper) {
|
||||
if (hadOwn)
|
||||
obj[method] = original;
|
||||
else
|
||||
delete obj[method];
|
||||
}
|
||||
if (current === original)
|
||||
return;
|
||||
current = original;
|
||||
Object.setPrototypeOf(wrapper, original || Function);
|
||||
}
|
||||
}
|
||||
|
||||
// src/main.ts
|
||||
var SettingsSearch = class extends import_obsidian.Plugin {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
__publicField(this, "settingsSearchEl", createDiv("settings-search-container vertical-tab-header-group"));
|
||||
__publicField(this, "settingsResultsContainerEl", createDiv("settings-search-results-container vertical-tab-content"));
|
||||
__publicField(this, "settingsNavItemContainer", this.settingsSearchEl.createDiv("vertical-tab-header-group-items").createDiv("vertical-tab-nav-item settings-search-input"));
|
||||
__publicField(this, "settingsResultsEl");
|
||||
__publicField(this, "search");
|
||||
__publicField(this, "locale");
|
||||
__publicField(this, "resources", []);
|
||||
__publicField(this, "results", []);
|
||||
__publicField(this, "loaded", false);
|
||||
__publicField(this, "tabIndex", 0);
|
||||
__publicField(this, "pluginTabIndex", 0);
|
||||
__publicField(this, "seen", []);
|
||||
__publicField(this, "settingCache", new Map());
|
||||
__publicField(this, "searchAppended", false);
|
||||
__publicField(this, "activeIndex", -1);
|
||||
__publicField(this, "activeSetting");
|
||||
__publicField(this, "scope", new import_obsidian.Scope(this.app.scope));
|
||||
__publicField(this, "mobileContainers", []);
|
||||
}
|
||||
async onload() {
|
||||
(window["SettingsSearch"] = {
|
||||
addResources: this.addResources.bind(this),
|
||||
removeResources: this.removeResources.bind(this),
|
||||
removeTabResources: this.removeTabResources.bind(this)
|
||||
}) && this.register(() => delete window["SettingsSearch"]);
|
||||
this.app.workspace.onLayoutReady(async () => {
|
||||
this.settingsResultsContainerEl.createEl("h3", {
|
||||
text: "Settings Search Results"
|
||||
});
|
||||
this.settingsResultsEl = this.settingsResultsContainerEl.createDiv("settings-search-results");
|
||||
this.buildScope();
|
||||
this.buildSearch();
|
||||
this.buildResources();
|
||||
this.buildPluginResources();
|
||||
this.patchSettings();
|
||||
this.loaded = true;
|
||||
this.app.workspace.trigger("settings-search-loaded");
|
||||
});
|
||||
}
|
||||
buildResources() {
|
||||
const tab = this.app.setting.settingTabs[this.tabIndex];
|
||||
if (tab && tab.id !== void 0 && !this.seen.includes(tab.id)) {
|
||||
this.getTabResources(tab);
|
||||
this.tabIndex++;
|
||||
setTimeout(() => this.buildResources());
|
||||
}
|
||||
}
|
||||
buildPluginResources() {
|
||||
const tab = this.app.setting.pluginTabs[this.pluginTabIndex];
|
||||
if (tab) {
|
||||
this.getTabResources(tab);
|
||||
this.pluginTabIndex++;
|
||||
setTimeout(() => this.buildPluginResources());
|
||||
}
|
||||
}
|
||||
get manifests() {
|
||||
return Object.values(this.app.plugins.manifests);
|
||||
}
|
||||
addResourceToCache(resource) {
|
||||
if (!resource || !resource.text || !resource.name || !resource.tab) {
|
||||
return new Error("A valid resource must be provided.");
|
||||
}
|
||||
let name;
|
||||
if (resource.external) {
|
||||
name = createFragment((el) => {
|
||||
(0, import_obsidian.setIcon)(el.createSpan({
|
||||
attr: {
|
||||
"aria-label": "This setting was added by another plugin."
|
||||
}
|
||||
}), "info");
|
||||
el.createSpan({ text: resource.text });
|
||||
});
|
||||
} else {
|
||||
name = resource.text;
|
||||
}
|
||||
const setting = new import_obsidian.Setting(createDiv()).setName(name).setDesc(createFragment((e) => e.createDiv().innerHTML = resource.desc ?? ""));
|
||||
if (resource.external) {
|
||||
setting.settingEl.addClass("set-externally");
|
||||
}
|
||||
if (resource.tab == "community-plugins") {
|
||||
let plugin = this.manifests.find((p) => p.name == resource.text);
|
||||
if (plugin && this.app.plugins.getPlugin(plugin.id)?._loaded && this.app.setting.pluginTabs.find((t) => t.id == plugin.id)) {
|
||||
setting.addExtraButton((b) => {
|
||||
b.setTooltip(`Open ${resource.text} Settings`).onClick(() => {
|
||||
this.app.setting.openTabById(plugin.id);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
if (resource.tab == "plugins") {
|
||||
const plugins = Object.values(this.app.internalPlugins.plugins);
|
||||
const plugin = plugins.find((p) => p._loaded && p.instance.name == resource.text);
|
||||
if (plugin && this.app.setting.pluginTabs.find((t) => t.id == plugin.instance.id)) {
|
||||
setting.addExtraButton((b) => {
|
||||
b.setTooltip(`Open ${resource.text} Settings`).onClick(() => {
|
||||
this.app.setting.openTabById(plugin.instance.id);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
setting.addExtraButton((b) => {
|
||||
b.setIcon("forward-arrow").onClick(() => {
|
||||
this.showResult(resource);
|
||||
});
|
||||
});
|
||||
this.settingCache.set(resource, setting);
|
||||
}
|
||||
getResourceFromCache(resource) {
|
||||
if (!this.settingCache.has(resource)) {
|
||||
this.addResourceToCache(resource);
|
||||
}
|
||||
return this.settingCache.get(resource);
|
||||
}
|
||||
removeResourcesFromCache(resources) {
|
||||
for (const resource of resources) {
|
||||
this.settingCache.delete(resource);
|
||||
}
|
||||
}
|
||||
addResources(...resources) {
|
||||
for (const resource of resources) {
|
||||
resource.external = true;
|
||||
if (this.resources.find((k) => this.equivalent(resource, k)))
|
||||
continue;
|
||||
this.resources.push(resource);
|
||||
this.addResourceToCache(resource);
|
||||
}
|
||||
return () => this.removeResources(...resources);
|
||||
}
|
||||
equivalent(resource1, resource2) {
|
||||
return resource1.name == resource2.name && resource1.tab == resource2.tab && resource1.text == resource2.text && resource1.desc == resource2.desc && resource1.external == resource2.external;
|
||||
}
|
||||
removeResources(...resources) {
|
||||
const removing = [];
|
||||
const keys = [...this.settingCache.keys()];
|
||||
for (const resource of resources) {
|
||||
if (!resource || !resource.text || !resource.name || !resource.tab) {
|
||||
continue;
|
||||
}
|
||||
resource.external = true;
|
||||
this.resources = this.resources.filter((r) => !this.equivalent(resource, r));
|
||||
removing.push(...keys.filter((k) => k == resource || this.equivalent(resource, k)));
|
||||
}
|
||||
this.removeResourcesFromCache(removing);
|
||||
}
|
||||
removeTabResources(tab) {
|
||||
const removing = this.resources.filter((t) => t.tab == tab);
|
||||
this.resources = this.resources.filter((t) => t.tab != tab);
|
||||
this.removeResourcesFromCache(removing);
|
||||
}
|
||||
async getTabResources(tab) {
|
||||
await tab.display();
|
||||
const settings = tab.containerEl.querySelectorAll(".setting-item:not(.setting-item-header)");
|
||||
for (const el of Array.from(settings)) {
|
||||
const text = el.querySelector(".setting-item-name")?.textContent;
|
||||
if (!text)
|
||||
continue;
|
||||
const desc = el.querySelector(".setting-item-description")?.innerHTML ?? "";
|
||||
const resource = {
|
||||
tab: tab.id,
|
||||
name: tab.name,
|
||||
text,
|
||||
desc
|
||||
};
|
||||
this.resources.push(resource);
|
||||
this.addResourceToCache(resource);
|
||||
}
|
||||
if (this.app.setting.activeTab?.id == tab.id)
|
||||
return;
|
||||
this.seen.push(tab.id);
|
||||
tab.containerEl.detach();
|
||||
tab.hide();
|
||||
}
|
||||
patchSettings() {
|
||||
const self = this;
|
||||
this.register(around(this.app.setting, {
|
||||
onOpen: function(next) {
|
||||
return function() {
|
||||
next.apply(this);
|
||||
if (!import_obsidian.Platform.isMobile)
|
||||
self.search.inputEl.focus();
|
||||
return next;
|
||||
};
|
||||
}
|
||||
}));
|
||||
this.register(around(this.app.setting, {
|
||||
addSettingTab: function(next) {
|
||||
return function(tab) {
|
||||
if (tab && tab.id !== void 0 && !self.seen.includes(tab.id)) {
|
||||
self.getTabResources(tab);
|
||||
}
|
||||
return next.call(this, tab);
|
||||
};
|
||||
}
|
||||
}));
|
||||
this.register(around(this.app.setting, {
|
||||
removeSettingTab: function(next) {
|
||||
return function(tab) {
|
||||
if (this.isPluginSettingTab(tab)) {
|
||||
self.removeTabResources(tab.id);
|
||||
}
|
||||
return next.call(this, tab);
|
||||
};
|
||||
}
|
||||
}));
|
||||
this.register(around(this.app.setting, {
|
||||
openTab: function(next) {
|
||||
return function(tab) {
|
||||
self.searchAppended = false;
|
||||
self.app.keymap.popScope(self.scope);
|
||||
return next.call(this, tab);
|
||||
};
|
||||
},
|
||||
openTabById: function(next) {
|
||||
return function(tab) {
|
||||
self.searchAppended = false;
|
||||
self.app.keymap.popScope(self.scope);
|
||||
return next.call(this, tab);
|
||||
};
|
||||
},
|
||||
onClose: function(next) {
|
||||
return function() {
|
||||
if (import_obsidian.Platform.isMobile) {
|
||||
self.detach();
|
||||
}
|
||||
return next.call(this);
|
||||
};
|
||||
}
|
||||
}));
|
||||
}
|
||||
buildSearch() {
|
||||
const tempSetting = new import_obsidian.Setting(createDiv()).addSearch((s) => {
|
||||
this.search = s;
|
||||
});
|
||||
this.settingsNavItemContainer.append(tempSetting.controlEl);
|
||||
tempSetting.settingEl.detach();
|
||||
this.search.onChange((v) => {
|
||||
this.onChange(v);
|
||||
});
|
||||
this.search.setPlaceholder("Search settings...");
|
||||
this.app.setting.tabHeadersEl.prepend(this.settingsSearchEl);
|
||||
}
|
||||
buildScope() {
|
||||
this.scope.register(["Ctrl"], "N", () => {
|
||||
if (this.activeSetting) {
|
||||
this.activeSetting.settingEl.removeClass("active");
|
||||
}
|
||||
this.activeIndex = ((this.activeIndex + 1) % this.results.length + this.results.length) % this.results.length;
|
||||
this.centerActiveSetting();
|
||||
});
|
||||
this.scope.register([], "ArrowDown", () => {
|
||||
if (this.activeSetting) {
|
||||
this.activeSetting.settingEl.removeClass("active");
|
||||
}
|
||||
this.activeIndex = ((this.activeIndex + 1) % this.results.length + this.results.length) % this.results.length;
|
||||
this.centerActiveSetting();
|
||||
});
|
||||
this.scope.register(["Ctrl"], "P", () => {
|
||||
if (this.activeSetting) {
|
||||
this.activeSetting.settingEl.removeClass("active");
|
||||
}
|
||||
this.activeIndex = ((this.activeIndex - 1) % this.results.length + this.results.length) % this.results.length;
|
||||
this.centerActiveSetting();
|
||||
});
|
||||
this.scope.register([], "ArrowUp", () => {
|
||||
if (this.activeSetting) {
|
||||
this.activeSetting.settingEl.removeClass("active");
|
||||
}
|
||||
this.activeIndex = ((this.activeIndex - 1) % this.results.length + this.results.length) % this.results.length;
|
||||
this.centerActiveSetting();
|
||||
});
|
||||
this.scope.register([], "Enter", () => {
|
||||
if (this.activeSetting) {
|
||||
this.showResult(this.results[this.activeIndex]);
|
||||
}
|
||||
});
|
||||
}
|
||||
centerActiveSetting() {
|
||||
const result = this.results[this.activeIndex];
|
||||
this.activeSetting = this.getResourceFromCache(result);
|
||||
this.activeSetting.settingEl.addClass("active");
|
||||
this.activeSetting.settingEl.scrollIntoView({
|
||||
behavior: "auto",
|
||||
block: "nearest"
|
||||
});
|
||||
}
|
||||
detachFromMobile() {
|
||||
if (import_obsidian.Platform.isMobile) {
|
||||
this.settingsResultsContainerEl.detach();
|
||||
for (const header of this.mobileContainers) {
|
||||
this.app.setting.tabHeadersEl.append(header);
|
||||
}
|
||||
this.search.setValue("");
|
||||
}
|
||||
}
|
||||
detachFromDesktop() {
|
||||
if (import_obsidian.Platform.isDesktop) {
|
||||
this.app.setting.openTabById(this.app.setting.lastTabId);
|
||||
}
|
||||
}
|
||||
detach() {
|
||||
this.detachFromDesktop();
|
||||
this.detachFromMobile();
|
||||
this.searchAppended = false;
|
||||
}
|
||||
onChange(v) {
|
||||
if (!v) {
|
||||
this.detach();
|
||||
this.app.keymap.popScope(this.scope);
|
||||
return;
|
||||
}
|
||||
if (!this.searchAppended) {
|
||||
this.activeIndex = -1;
|
||||
this.app.keymap.popScope(this.scope);
|
||||
this.app.keymap.pushScope(this.scope);
|
||||
if (this.activeSetting) {
|
||||
this.activeSetting.settingEl.removeClass("active");
|
||||
this.activeSetting = null;
|
||||
}
|
||||
if (!import_obsidian.Platform.isMobile) {
|
||||
this.app.setting.activeTab.navEl.removeClass("is-active");
|
||||
this.app.setting.tabContentContainer.empty();
|
||||
this.app.setting.tabContentContainer.append(this.settingsResultsContainerEl);
|
||||
} else {
|
||||
const headers = this.app.setting.tabHeadersEl.querySelectorAll(".vertical-tab-header-group:not(.settings-search-container)");
|
||||
for (const header of Array.from(headers)) {
|
||||
this.mobileContainers.push(header);
|
||||
header.detach();
|
||||
}
|
||||
this.app.setting.tabHeadersEl.append(this.settingsResultsContainerEl);
|
||||
}
|
||||
this.searchAppended = true;
|
||||
}
|
||||
this.appendResults(this.performFuzzySearch(v));
|
||||
}
|
||||
getMatchText(text, result) {
|
||||
const matchElements = {};
|
||||
return createFragment((content) => {
|
||||
for (let i = 0; i < text.length; i++) {
|
||||
let match = result.matches.find((m) => m[0] === i);
|
||||
if (match) {
|
||||
const index = result.matches.indexOf(match);
|
||||
if (!matchElements[index]) {
|
||||
matchElements[index] = createSpan("suggestion-highlight");
|
||||
}
|
||||
let element = matchElements[index];
|
||||
content.appendChild(element);
|
||||
element.appendText(text.substring(match[0], match[1]));
|
||||
i += match[1] - match[0] - 1;
|
||||
continue;
|
||||
}
|
||||
content.appendText(text[i]);
|
||||
}
|
||||
});
|
||||
}
|
||||
appendResults(results) {
|
||||
this.settingsResultsEl.empty();
|
||||
if (results.length) {
|
||||
const headers = {};
|
||||
for (const resource of results) {
|
||||
if (!(resource.tab in headers)) {
|
||||
headers[resource.tab] = this.settingsResultsEl.createDiv();
|
||||
new import_obsidian.Setting(headers[resource.tab]).setHeading().setName(resource.name);
|
||||
}
|
||||
const setting = this.getResourceFromCache(resource);
|
||||
headers[resource.tab].append(setting.settingEl);
|
||||
}
|
||||
} else {
|
||||
this.settingsResultsEl.setText("No results found :(");
|
||||
}
|
||||
}
|
||||
showResult(result) {
|
||||
this.search.setValue("");
|
||||
const tab = this.app.setting.settingTabs.find((t) => t.id == result.tab) ?? this.app.setting.pluginTabs.find((t) => t.id == result.tab);
|
||||
if (!tab) {
|
||||
new import_obsidian.Notice("There was an issue opening the setting tab.");
|
||||
return;
|
||||
}
|
||||
this.app.setting.openTabById(tab.id);
|
||||
this.app.keymap.popScope(this.scope);
|
||||
this.detach();
|
||||
try {
|
||||
const names = tab.containerEl.querySelectorAll(".setting-item-name");
|
||||
const el = Array.from(names).find((n) => n.textContent == result.text);
|
||||
if (!el)
|
||||
return;
|
||||
const setting = el.closest(".setting-item");
|
||||
if (!setting)
|
||||
return;
|
||||
if (tab.id == "obsidian-style-settings") {
|
||||
let collapsed = setting.closest(".style-settings-container");
|
||||
let previous = collapsed?.previousElementSibling;
|
||||
while (previous != null && previous.hasClass("is-collapsed") && previous.hasClass("style-settings-heading")) {
|
||||
previous.removeClass("is-collapsed");
|
||||
collapsed = collapsed.parentElement?.closest(".style-settings-container");
|
||||
previous = collapsed?.previousElementSibling;
|
||||
}
|
||||
}
|
||||
let details = setting.closest("details");
|
||||
while (details) {
|
||||
details.setAttr("open", "open");
|
||||
details = details.parentElement?.closest("details");
|
||||
}
|
||||
setting.scrollIntoView(true);
|
||||
setting.addClass("is-flashing");
|
||||
window.setTimeout(() => setting.removeClass("is-flashing"), 3e3);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
performFuzzySearch(input) {
|
||||
const results = [], hotkeys = [];
|
||||
for (const resource of this.resources) {
|
||||
let result = (0, import_obsidian.prepareSimpleSearch)(input)(resource.text) ?? (0, import_obsidian.prepareSimpleSearch)(input)(resource.desc);
|
||||
if (result) {
|
||||
if (resource.tab == "hotkeys") {
|
||||
hotkeys.push(resource);
|
||||
} else {
|
||||
results.push(resource);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.results = [...results, ...hotkeys];
|
||||
return this.results;
|
||||
}
|
||||
onunload() {
|
||||
this.settingsSearchEl.detach();
|
||||
this.settingsResultsEl.detach();
|
||||
this.detach();
|
||||
if (this.searchAppended && import_obsidian.Platform.isDesktop)
|
||||
this.app.setting.openTabById(this.app.setting.lastTabId);
|
||||
}
|
||||
};
|
||||
|
||||
/* nosourcemap */
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"id": "settings-search",
|
||||
"name": "Settings Search",
|
||||
"version": "1.3.10",
|
||||
"minAppVersion": "0.12.17",
|
||||
"author": "Jeremy Valentine",
|
||||
"description": "Globally search settings in Obsidian.md",
|
||||
"authorUrl": "https://github.com/valentine195",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
/* src/assets/main.css */
|
||||
.settings-search-container.vertical-tab-header-group {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
.settings-search-input {
|
||||
padding-left: 6px;
|
||||
}
|
||||
.vertical-tab-nav-item.settings-search-input {
|
||||
background-color: inherit !important;
|
||||
}
|
||||
.settings-search-input .setting-item-control {
|
||||
display: block;
|
||||
}
|
||||
.settings-search-input .search-input-container {
|
||||
margin: 0;
|
||||
}
|
||||
.settings-search-results .setting-item.active {
|
||||
background-color: var(--background-secondary);
|
||||
}
|
||||
.settings-search-results .set-externally .setting-item-name {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
/* src/styles.css */
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"installed_at": 1787518597375,
|
||||
"last_version": "4.7.2"
|
||||
}
|
||||
+39625
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "smart-connections",
|
||||
"name": "Smart Connections",
|
||||
"author": "Brian Petro",
|
||||
"description": "AI link discovery copilot. See related notes as you write. Lookup using semantic (vector) search across your vault. Zero-setup local model for embeddings, no API keys, private.",
|
||||
"minAppVersion": "1.8.7",
|
||||
"authorUrl": "https://smartconnections.app",
|
||||
"isDesktopOnly": false,
|
||||
"version": "4.7.2"
|
||||
}
|
||||
+4809
File diff suppressed because it is too large
Load Diff
+3
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"last_version": "0.3.4"
|
||||
}
|
||||
+34674
File diff suppressed because one or more lines are too long
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "smart-lookup",
|
||||
"name": "Smart Lookup",
|
||||
"author": "Brian Petro",
|
||||
"description": "Semantic search for your vault. Ask in natural language, find notes by meaning when exact words fail, preview matching notes, and turn forgotten ideas into links, context, and next steps.",
|
||||
"minAppVersion": "1.8.7",
|
||||
"authorUrl": "https://smartconnections.app",
|
||||
"isDesktopOnly": false,
|
||||
"version": "0.3.4"
|
||||
}
|
||||
+4225
File diff suppressed because it is too large
Load Diff
+10
-2
@@ -34,8 +34,16 @@
|
||||
"template": "10 Knowledge/Templates/Weekly Review Template.md"
|
||||
},
|
||||
{
|
||||
"folder": "20 Work/Vendors",
|
||||
"template": "10 Knowledge/Templates/Vendor Template.md"
|
||||
"folder": "20 Work/Contracts",
|
||||
"template": "10 Knowledge/Templates/Contract Template.md"
|
||||
},
|
||||
{
|
||||
"folder": "20 Work/Ideas",
|
||||
"template": "idea"
|
||||
},
|
||||
{
|
||||
"folder": "20 Work/Tracking",
|
||||
"template": "10 Knowledge/Templates/Jira incident template.md"
|
||||
}
|
||||
],
|
||||
"file_templates": [],
|
||||
|
||||
Vendored
+5
-1
@@ -6,6 +6,10 @@
|
||||
"renewal_date": "date",
|
||||
"contract_end": "date",
|
||||
"category": "multitext",
|
||||
"projects": "multitext"
|
||||
"projects": "multitext",
|
||||
"date": "date",
|
||||
"contract_start": "date",
|
||||
"renewal_status": "multitext",
|
||||
"auto_renewal": "checkbox"
|
||||
}
|
||||
}
|
||||
Vendored
+223
@@ -0,0 +1,223 @@
|
||||
{
|
||||
"main": {
|
||||
"id": "f02c62e9dd362172",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "abf3ba7e57cbc170",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "b5344eceadba0fc2",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "empty",
|
||||
"state": {},
|
||||
"icon": "lucide-file",
|
||||
"title": "New tab"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "34574b27c2a3fa3d",
|
||||
"type": "mobile-drawer",
|
||||
"children": [
|
||||
{
|
||||
"id": "870e67f3c01edcff",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "alphabetical",
|
||||
"autoReveal": false,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-folder-closed",
|
||||
"title": "Files"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "382a019153039622",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": false,
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical"
|
||||
},
|
||||
"icon": "lucide-search",
|
||||
"title": "Search"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "865631e7a597ae19",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tag",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"useHierarchy": true,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-tags",
|
||||
"title": "Tags"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "8f49abdd8de7ec33",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "all-properties",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-archive",
|
||||
"title": "All properties"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "70dc63ec67fbc4ce",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-bookmark",
|
||||
"title": "Bookmarks"
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 0
|
||||
},
|
||||
"right": {
|
||||
"id": "6c3727b928dec85c",
|
||||
"type": "mobile-drawer",
|
||||
"children": [
|
||||
{
|
||||
"id": "0744fa636b42bd63",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "quotes/Quotes.md",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
"showSearch": false,
|
||||
"searchQuery": "",
|
||||
"backlinkCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-coming-in",
|
||||
"title": "Backlinks"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "8b243870131b0efb",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-going-out",
|
||||
"title": "Outgoing links"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "5a1e3406ec37404e",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"followCursor": false,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-list",
|
||||
"title": "Outline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0dfb780ad8f31552",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "notebook-navigator-calendar",
|
||||
"state": {},
|
||||
"icon": "lucide-calendar-days",
|
||||
"title": "Calendar"
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 0
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"switcher:Open quick switcher": false,
|
||||
"graph:Open graph view": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"templates:Insert template": false,
|
||||
"command-palette:Open command palette": false,
|
||||
"bases:Create new base": false,
|
||||
"iconic:Open rulebook": false,
|
||||
"omnisearch:Omnisearch": false,
|
||||
"notebook-navigator:Notebook Navigator": false,
|
||||
"templater-obsidian:Templater": false
|
||||
}
|
||||
},
|
||||
"active": "b5344eceadba0fc2",
|
||||
"lastOpenFiles": [
|
||||
"meetmic/treated/Toute une semaine - Le flux de publication.md",
|
||||
"meetmic/treated/Recording 2026-08-21 at 08.37.39 AM.md",
|
||||
"meetmic/treated/Recording 2026-08-17 at 09.48.40 AM.md",
|
||||
"meetmic/treated/Hajar - Amadou.md",
|
||||
"meetmic/treated/Flux - Live ONFR.md",
|
||||
"meetmic/treated/Discussion CI-CD.md",
|
||||
"meetmic/treated/Boukili PROD- Alignement infra et déploiement du replicat.md",
|
||||
"meetmic/treated/Boukili - Choix de la direction visuelle pour la phase 2.md",
|
||||
"meetmic/treated/Accès Important - Meta et gestion des médias sociaux.md",
|
||||
"meetmic/treated/[PNUM] Daily Scrum.md",
|
||||
"meetmic/Recording 2026-08-21 at 12.41.45 PM.md",
|
||||
"meetmic/Recording 2026-08-21 at 12.40.35 PM.md",
|
||||
"meetmic/Recording 2026-08-21 at 04.38.28 PM.md",
|
||||
"meetmic/Recording 2026-08-21 at 03.49.49 PM.md",
|
||||
"Bootstrap script for this vault.md",
|
||||
"30 Personal Projects/AI/CareerOp/Setup.md",
|
||||
"30 Personal Projects/AI/CareerOp",
|
||||
"30 Personal Projects/AI",
|
||||
"20 Work/Tracking/Website Sync/Website Sync - Complaint Tracking.md",
|
||||
"20 Work/Tracking/Website Sync/2026/08/2026-08-19 - TECH-32615.md",
|
||||
"20 Work/Tracking/Website Sync/2026/08/2026-08-19 - TECH-32612.md",
|
||||
"20 Work/Tracking/Website Sync/2026/08/2026-08-11 - TECH-32582.md",
|
||||
"20 Work/Tracking/Website Sync/2026/08/2026-08-05 - TECH-32552.md",
|
||||
"20 Work/Tracking/Website Sync/2026/08",
|
||||
"20 Work/Tracking/Website Sync/2026/07/2026-07-24 - TECH-32507.md",
|
||||
"20 Work/Tracking/Website Sync/2026/07/2026-07-15 - TECH-32453.md",
|
||||
"20 Work/Tracking/Website Sync/2026/07/2026-07-06 - TECH-32396.md",
|
||||
"20 Work/Tracking/Website Sync/2026/07",
|
||||
"20 Work/Tracking/Website Sync/2026",
|
||||
"20 Work/Tracking/Website Sync",
|
||||
"20 Work/Tracking",
|
||||
"20 Work/Team/Hajar/Hajar 1-1/Recordings/2026-08-17 - Hajar - Amadou.md",
|
||||
"20 Work/Team/Hajar/Hajar 1-1/Recordings",
|
||||
"20 Work/Team/Hajar/Hajar 1-1/2026-08-17 - Hajar 1-1.md",
|
||||
"20 Work/Projects/2026/ONFR",
|
||||
"20 Work/Projects/2026/Mogador Sync"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
L'égalité, c'est donner les mêmes attentes. L'équité, c'est adapter le niveau d'accompagnement selon la situation. Chatgpt
|
||||
|
||||
Les détails font la perfection mais la perfection n'est pas un détail. Leonardo Da Vinci
|
||||
@@ -0,0 +1,150 @@
|
||||
---
|
||||
type: contract
|
||||
vendor:
|
||||
status: active
|
||||
category:
|
||||
contract_start:
|
||||
contract_end:
|
||||
annual_cost:
|
||||
currency:
|
||||
contract_value:
|
||||
billing_frequency:
|
||||
payment_terms:
|
||||
auto_renewal:
|
||||
notice_days:
|
||||
notice_deadline:
|
||||
renewal_status: not-due
|
||||
purchase_order:
|
||||
account_manager:
|
||||
criticality: medium
|
||||
---
|
||||
|
||||
<%*
|
||||
const vendor = await tp.system.prompt("Vendor name");
|
||||
|
||||
if (!vendor) {
|
||||
new Notice("Contract creation cancelled.");
|
||||
return;
|
||||
}
|
||||
|
||||
const safeVendor = vendor
|
||||
.replace(/[\\/:\*?"<>|]/g, "-")
|
||||
.trim();
|
||||
|
||||
const startDate = await tp.system.prompt(
|
||||
"Contract start date (YYYY-MM-DD)"
|
||||
);
|
||||
|
||||
const endDate = await tp.system.prompt(
|
||||
"Contract end date (YYYY-MM-DD)"
|
||||
);
|
||||
|
||||
if (!startDate || !endDate) {
|
||||
new Notice("Contract creation cancelled: dates required.");
|
||||
return;
|
||||
}
|
||||
|
||||
const startYear = startDate.substring(0, 4);
|
||||
const endYear = endDate.substring(0, 4);
|
||||
|
||||
const currentFile = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
await app.fileManager.processFrontMatter(
|
||||
currentFile,
|
||||
(frontmatter) => {
|
||||
frontmatter.vendor = vendor;
|
||||
frontmatter.contract_start = startDate;
|
||||
frontmatter.contract_end = endDate;
|
||||
}
|
||||
);
|
||||
|
||||
const folder = "20 Work/Contracts/Active";
|
||||
|
||||
if (!app.vault.getAbstractFileByPath("20 Work/Contracts")) {
|
||||
await app.vault.createFolder("20 Work/Contracts");
|
||||
}
|
||||
|
||||
if (!app.vault.getAbstractFileByPath(folder)) {
|
||||
await app.vault.createFolder(folder);
|
||||
}
|
||||
|
||||
await tp.file.move(
|
||||
`${folder}/${safeVendor} - ${startYear}-${endYear}`
|
||||
);
|
||||
|
||||
tR += `# ${vendor} - ${startYear}-${endYear}`;
|
||||
-%>
|
||||
|
||||
## Contract Summary
|
||||
|
||||
**Service / Product:**
|
||||
|
||||
**Purpose:**
|
||||
|
||||
**Business owner:**
|
||||
|
||||
---
|
||||
|
||||
## Commercial Terms
|
||||
|
||||
**Annual cost:**
|
||||
|
||||
**Total contract value:**
|
||||
|
||||
**Currency:**
|
||||
|
||||
**Billing frequency:**
|
||||
|
||||
**Payment terms:**
|
||||
|
||||
**Purchase order:**
|
||||
|
||||
---
|
||||
|
||||
## Renewal
|
||||
|
||||
**Contract end:**
|
||||
|
||||
**Auto-renewal:**
|
||||
|
||||
**Notice period:**
|
||||
|
||||
**Notice deadline:**
|
||||
|
||||
**Expected price increase:**
|
||||
|
||||
**Renewal decision:**
|
||||
|
||||
---
|
||||
|
||||
## Services / Entitlements
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Contacts
|
||||
|
||||
| Role | Name | Email |
|
||||
|---|---|---|
|
||||
| Account Manager | | |
|
||||
| Technical Contact | | |
|
||||
| Support | | |
|
||||
|
||||
---
|
||||
|
||||
## Risks / Considerations
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Renewal History
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
-
|
||||
@@ -1,52 +1,115 @@
|
||||
---
|
||||
date:
|
||||
status: idea
|
||||
owner: Amadou
|
||||
project:
|
||||
strategic_area:
|
||||
effort:
|
||||
impact:
|
||||
---
|
||||
|
||||
<%*
|
||||
const year = tp.date.now("YYYY");
|
||||
const date = tp.date.now("YYYY-MM-DD");
|
||||
const year = tp.date.now("YYYY");
|
||||
|
||||
const title = await tp.system.prompt("Idea title");
|
||||
|
||||
if (!title) {
|
||||
new Notice("Idea creation cancelled: no title entered.");
|
||||
return;
|
||||
}
|
||||
|
||||
const safeTitle = title
|
||||
.replace(/[\\/:*?"<>|]/g, "-")
|
||||
.trim();
|
||||
|
||||
const baseFolder = "20 Work/Ideas";
|
||||
const yearFolder = `${baseFolder}/${year}`;
|
||||
|
||||
if (!app.vault.getAbstractFileByPath(yearFolder)) {
|
||||
await app.vault.createFolder(yearFolder);
|
||||
await app.vault.createFolder(yearFolder);
|
||||
}
|
||||
await tp.file.move(`${yearFolder}/${date}`);
|
||||
|
||||
const filename = `${date} - ${safeTitle}`;
|
||||
|
||||
await tp.file.move(`${yearFolder}/${filename}`);
|
||||
|
||||
// Update Properties only after Templater finishes
|
||||
tp.hooks.on_all_templates_executed(async () => {
|
||||
|
||||
const file = tp.file.find_tfile(
|
||||
`${yearFolder}/${filename}`
|
||||
);
|
||||
|
||||
if (!file) return;
|
||||
|
||||
await tp.app.fileManager.processFrontMatter(
|
||||
file,
|
||||
(frontmatter) => {
|
||||
frontmatter.date = date;
|
||||
frontmatter.status = "idea";
|
||||
frontmatter.owner = "Amadou";
|
||||
}
|
||||
);
|
||||
});
|
||||
-%>
|
||||
# {{title}}
|
||||
|
||||
**Date:** {{date}}
|
||||
**Status:** 💡 Idea
|
||||
> 💡 **Idea** · 🔎 **Exploring** · 🟢 **Approved** · ⏸️ **Parked** · ⚫ **Dropped** · 🚀 **Converted**
|
||||
|
||||
## The Idea
|
||||
|
||||
Describe the idea simply.
|
||||
Describe the idea in one or two sentences.
|
||||
|
||||
<% tp.file.cursor() %>
|
||||
|
||||
## Problem / Opportunity
|
||||
|
||||
What problem does this solve or what opportunity does it create?
|
||||
What problem does this solve, or what opportunity does it create?
|
||||
|
||||
-
|
||||
|
||||
## Why It Matters
|
||||
|
||||
What is the potential business value?
|
||||
|
||||
## Who Benefits?
|
||||
-
|
||||
|
||||
## Current Situation
|
||||
|
||||
How is this handled today?
|
||||
|
||||
-
|
||||
|
||||
## Possible Approach
|
||||
|
||||
How could this work?
|
||||
What could the solution look like?
|
||||
|
||||
## Effort
|
||||
Keep this high-level. This is not yet a project plan.
|
||||
|
||||
**Estimated complexity:** Low / Medium / High
|
||||
-
|
||||
|
||||
## Risks / Questions
|
||||
## Assumptions / Questions
|
||||
|
||||
What needs to be true, or what do I need to validate?
|
||||
|
||||
-
|
||||
-
|
||||
|
||||
## Next Step
|
||||
## Risks / Trade-offs
|
||||
|
||||
What is the smallest action needed to validate this idea?
|
||||
-
|
||||
|
||||
## Smallest Next Step
|
||||
|
||||
What is the cheapest or fastest action that would tell me whether this is worth pursuing?
|
||||
|
||||
-
|
||||
|
||||
## Outcome
|
||||
|
||||
What ultimately happened with this idea?
|
||||
|
||||
-
|
||||
|
||||
## Related
|
||||
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
---
|
||||
date:
|
||||
jira:
|
||||
actual_sync_issue: false
|
||||
status: investigating
|
||||
classification:
|
||||
---
|
||||
|
||||
<%*
|
||||
const baseTrackingFolder = "20 Work/Tracking";
|
||||
|
||||
// Today's values
|
||||
const date = tp.date.now("YYYY-MM-DD");
|
||||
const year = tp.date.now("YYYY");
|
||||
const month = tp.date.now("MM");
|
||||
|
||||
// Find available Tracking folders
|
||||
const trackingRoot = app.vault.getAbstractFileByPath(baseTrackingFolder);
|
||||
|
||||
if (!trackingRoot) {
|
||||
new Notice("Tracking folder not found.");
|
||||
return;
|
||||
}
|
||||
|
||||
const folders = trackingRoot.children
|
||||
.filter(item => item.children)
|
||||
.map(item => item.name)
|
||||
.sort();
|
||||
|
||||
if (folders.length === 0) {
|
||||
new Notice("No tracking folders found.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Select tracking category
|
||||
const tracking = await tp.system.suggester(
|
||||
folders,
|
||||
folders,
|
||||
false,
|
||||
"Select tracking folder"
|
||||
);
|
||||
|
||||
if (!tracking) {
|
||||
new Notice("Tracking cancelled.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Jira number
|
||||
const jira = await tp.system.prompt(
|
||||
"Jira ticket (ex: PBI-123)"
|
||||
);
|
||||
|
||||
if (!jira) {
|
||||
new Notice("Tracking cancelled: no Jira ticket entered.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Update YAML properties
|
||||
const currentFile = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
await app.fileManager.processFrontMatter(
|
||||
currentFile,
|
||||
(frontmatter) => {
|
||||
frontmatter.date = date;
|
||||
frontmatter.jira = jira.toUpperCase();
|
||||
frontmatter.actual_sync_issue = false;
|
||||
frontmatter.status = "investigating";
|
||||
frontmatter.classification = null;
|
||||
}
|
||||
);
|
||||
|
||||
// Create destination folders
|
||||
const trackingFolder = `${baseTrackingFolder}/${tracking}`;
|
||||
const yearFolder = `${trackingFolder}/${year}`;
|
||||
const monthFolder = `${yearFolder}/${month}`;
|
||||
|
||||
if (!app.vault.getAbstractFileByPath(yearFolder)) {
|
||||
await app.vault.createFolder(yearFolder);
|
||||
}
|
||||
|
||||
if (!app.vault.getAbstractFileByPath(monthFolder)) {
|
||||
await app.vault.createFolder(monthFolder);
|
||||
}
|
||||
|
||||
// Move + rename
|
||||
await tp.file.move(
|
||||
`${monthFolder}/${date} - ${jira.toUpperCase()}`
|
||||
);
|
||||
|
||||
// Generate heading
|
||||
tR += `# ${jira.toUpperCase()}`;
|
||||
-%>
|
||||
|
||||
## Observation
|
||||
|
||||
-
|
||||
|
||||
## Verification
|
||||
|
||||
- Reported time:
|
||||
- Checked time:
|
||||
- Expected availability:
|
||||
- Content available:
|
||||
### Technical issue identified:
|
||||
|
||||
|
||||
## Outcome
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
Available status:
|
||||
- investigating
|
||||
- resolved
|
||||
- monitoring
|
||||
|
||||
Available classifications
|
||||
|
||||
| Classification | Use when |
|
||||
| -------------------- | ---------------------------------------------------------------------------------- |
|
||||
| confirmed-sync-issue | There was an actual technical synchronization problem |
|
||||
| no-issue-confirmed | Complaint resolved/no technical issue found |
|
||||
| unrelated-issue | The problem was real, but **not caused by synchronization** |
|
||||
| user-error | Incorrect action/configuration/input by the requester caused the perceived problem |
|
||||
| unknown | Insufficient information to determine what happened |
|
||||
@@ -15,22 +15,34 @@ await tp.file.move(
|
||||
|
||||
## Meetings
|
||||
|
||||
-
|
||||
- <% tp.file.cursor() %>
|
||||
|
||||
---
|
||||
|
||||
## Significant Events
|
||||
|
||||
<% tp.file.cursor() %>
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Decisions"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
- [[]]
|
||||
|
||||
## Ideas
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Ideas"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## People / Management
|
||||
@@ -74,6 +86,18 @@ Important project changes only.
|
||||
|
||||
---
|
||||
|
||||
## Created Today
|
||||
|
||||
```dataview
|
||||
TABLE WITHOUT ID
|
||||
file.link AS "File",
|
||||
file.folder AS "Location"
|
||||
FROM "20 Work"
|
||||
WHERE date = date(this.file.name)
|
||||
AND file.path != this.file.path
|
||||
SORT file.name ASC
|
||||
```
|
||||
---
|
||||
## Related
|
||||
|
||||
- [[]]
|
||||
@@ -1,112 +0,0 @@
|
||||
---
|
||||
vendor: true
|
||||
status: active
|
||||
category:
|
||||
owner: Amadou
|
||||
account_manager:
|
||||
annual_budget:
|
||||
current_spend:
|
||||
renewal_date:
|
||||
contract_end:
|
||||
criticality: medium
|
||||
projects:
|
||||
tags:
|
||||
purchase order:
|
||||
currency: CAD
|
||||
---
|
||||
|
||||
<%*
|
||||
const year = tp.date.now("YYYY");
|
||||
|
||||
const vendor = await tp.system.prompt("Vendor name");
|
||||
|
||||
if (!vendor){
|
||||
new Notice("Vendor creation cancelled.");
|
||||
return;
|
||||
}
|
||||
|
||||
const safeVendor = vendor
|
||||
.replace(/[\\/:*?"<>|]/g,"-")
|
||||
.trim();
|
||||
|
||||
const folder = `20 Work/Vendors/${year}`;
|
||||
|
||||
if(!app.vault.getAbstractFileByPath(folder)){
|
||||
await app.vault.createFolder(folder);
|
||||
}
|
||||
|
||||
await tp.file.move(`${folder}/${safeVendor}`);
|
||||
-%>
|
||||
|
||||
# <% vendor %>
|
||||
## Executive Summary
|
||||
|
||||
What is this vendor used for?
|
||||
|
||||
---
|
||||
|
||||
# Contacts
|
||||
|
||||
| Role | Name | Email | Phone |
|
||||
|------|------|-------|------|
|
||||
| Account Manager | | | |
|
||||
| Technical Contact | | | |
|
||||
| Support | | | |
|
||||
|
||||
|
||||
---
|
||||
|
||||
# Budget
|
||||
|
||||
Annual Budget:
|
||||
|
||||
Current Spend:
|
||||
|
||||
Remaining Budget:
|
||||
|
||||
Expected Increase:
|
||||
|
||||
Currency:
|
||||
|
||||
|
||||
---
|
||||
|
||||
# Products / Services
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
# Projects Using This Vendor
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
# Decisions
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
# Meetings
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
# Risks
|
||||
|
||||
| Risk | Mitigation | Status |
|
||||
|------|------------|--------|
|
||||
| | | |
|
||||
|
||||
---
|
||||
|
||||
# Action Items
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
# Notes
|
||||
@@ -0,0 +1,274 @@
|
||||
---
|
||||
type: contract
|
||||
vendor: "Algolia"
|
||||
status: active
|
||||
category: "Service Order"
|
||||
contract_start: "2024-01-01"
|
||||
contract_end: "2026-12-31"
|
||||
annual_cost: 25074.33
|
||||
currency: "USD"
|
||||
contract_value: 75223.0
|
||||
billing_frequency: "Annual"
|
||||
payment_terms: "Net 30"
|
||||
payment_method: "Annual Wire Transfer"
|
||||
auto_renewal: true
|
||||
renewal_term_months: 36
|
||||
notice_days: 60
|
||||
notice_deadline: "2026-11-01"
|
||||
renewal_increase_percent: 7
|
||||
renewal_status: not-due
|
||||
purchase_order:
|
||||
account_manager:
|
||||
criticality: medium
|
||||
---
|
||||
|
||||
# Algolia
|
||||
|
||||
## Contract Summary
|
||||
|
||||
**Purpose:** Subscription to Search and Ancillary Services
|
||||
|
||||
**Service / Product:** Search and Ancillary Services
|
||||
|
||||
## Commercial Terms
|
||||
|
||||
- Annual cost: 25074.33 USD
|
||||
- Total contract value: 75223.0 USD
|
||||
- Billing frequency: Annual
|
||||
- Payment terms: Net 30
|
||||
- Payment method: Annual Wire Transfer
|
||||
|
||||
## Renewal
|
||||
|
||||
- Contract start: 2024-01-01
|
||||
- Contract end: 2026-12-31
|
||||
- Auto-renewal: True
|
||||
- Renewal term: 36 months
|
||||
- Notice period: 60 days
|
||||
- Notice deadline: 2026-11-01
|
||||
- Renewal increase: 7%
|
||||
|
||||
## Watch Outs
|
||||
|
||||
- Contract automatically renews for additional 36-month terms.
|
||||
- Non-renewal notice must be provided at least 60 days before the end of the current term.
|
||||
- Fees increase by 7% at every renewal.
|
||||
- One-time discounts do not apply to subsequent renewal terms.
|
||||
- Fees increase by 7% at renewal.
|
||||
|
||||
## Services / Entitlements
|
||||
|
||||
- Premium Plan (Algolia KeywordSearch)
|
||||
- Algolia Recommend
|
||||
- Core Foundation Add-on
|
||||
|
||||
## Source Evidence
|
||||
|
||||
> Evidence below is taken directly from the locally extracted PDF text.
|
||||
|
||||
### Contract Start
|
||||
|
||||
- Value: 2024-01-01
|
||||
- Source page: 3
|
||||
|
||||
```text
|
||||
Unless earlier terminated in accordance with its terms, the term of the Service Order will start on the Start Date and
|
||||
continue until the End Date as set forth above. Except with respect to professional services, if subscribed, at the end of the
|
||||
initial term and any renewal term, this Service Order will automatically renew for additional terms of one year each, unless
|
||||
either party gives the other notice of non-renewal at least sixty (60) days before the end of the then-current term.
|
||||
Notwithstanding the immediately preceding sentence, all One-Time Discounts set forth above applicable to the initial term or
|
||||
any renewal term of the Service Order will not apply to a subsequent renewal term. Subscriber acknowledges that all One-
|
||||
Time Discounts are not intended to be repeated or replicated for affiliates of Subscriber. At each renewal of this Service
|
||||
Order, Algolia will increase the fee…
|
||||
```
|
||||
|
||||
### Contract End
|
||||
|
||||
- Value: 2026-12-31
|
||||
- Source page: 1
|
||||
|
||||
```text
|
||||
Subscriber Information Billing Information
|
||||
Groupe Média TFO Groupe Média TFO
|
||||
Address (Information including for notice) Address
|
||||
21 College Street 21 College Street
|
||||
Toronto, Ontario Toronto, Ontario
|
||||
M5G 2B3 M5G 2B3
|
||||
Canada Canada
|
||||
|
||||
Billing Details
|
||||
|
||||
Payment Terms Payment Schedule Method of Payment Billing Currency
|
||||
Net 30 Annual Wire Transfer USD
|
||||
|
||||
Term & Infrastructure Location
|
||||
|
||||
Search Infrastructure Location Term (Months) 36.00
|
||||
Canada Start Date 1-Jan-2024
|
||||
End Date 31-Dec-2026
|
||||
|
||||
|
||||
|
||||
QTY Subscribed Services - Search and Ancillary
|
||||
|
||||
12,340 Search Units* per each 12-
|
||||
Premium Plan (Algolia KeywordSearch) price includes 5.95% Volume Discount
|
||||
months contract year
|
||||
|
||||
3,000 Recommend Units*** per each
|
||||
Algolia Recommend Plan,
|
||||
|
||||
|
||||
Subtotal: $93,627.00
|
||||
Discount (19.66%): ($18,404.00)
|
||||
Total Annual Rate: $25,074.33
|
||||
Total Committed Amount for Initial Term: $75,223.00
|
||||
|
||||
Page 1 of 3
|
||||
```
|
||||
|
||||
### Annual Cost
|
||||
|
||||
- Value: 25074.33
|
||||
- Source page: 1
|
||||
|
||||
```text
|
||||
Subscriber Information Billing Information
|
||||
Groupe Média TFO Groupe Média TFO
|
||||
Address (Information including for notice) Address
|
||||
21 College Street 21 College Street
|
||||
Toronto, Ontario Toronto, Ontario
|
||||
M5G 2B3 M5G 2B3
|
||||
Canada Canada
|
||||
|
||||
Billing Details
|
||||
|
||||
Payment Terms Payment Schedule Method of Payment Billing Currency
|
||||
Net 30 Annual Wire Transfer USD
|
||||
|
||||
Term & Infrastructure Location
|
||||
|
||||
Search Infrastructure Location Term (Months) 36.00
|
||||
Canada Start Date 1-Jan-2024
|
||||
End Date 31-Dec-2026
|
||||
|
||||
|
||||
|
||||
QTY Subscribed Services - Search and Ancillary
|
||||
|
||||
12,340 Search Units* per each 12-
|
||||
Premium Plan (Algolia KeywordSearch) price includes 5.95% Volume Discount
|
||||
months contract year
|
||||
|
||||
3,000 Recommend Units*** per each
|
||||
Algolia Recommend Plan,
|
||||
|
||||
|
||||
Subtotal: $93,627.00
|
||||
Discount (19.66%): ($18,404.00)
|
||||
Total Annual Rate: $25,074.33
|
||||
Total Committed Amount for Initial Term: $75,223.00
|
||||
|
||||
Page 1 of 3
|
||||
```
|
||||
|
||||
### Contract Value
|
||||
|
||||
- Value: 75223.0
|
||||
- Source page: 1
|
||||
|
||||
```text
|
||||
Subscriber Information Billing Information
|
||||
Groupe Média TFO Groupe Média TFO
|
||||
Address (Information including for notice) Address
|
||||
21 College Street 21 College Street
|
||||
Toronto, Ontario Toronto, Ontario
|
||||
M5G 2B3 M5G 2B3
|
||||
Canada Canada
|
||||
|
||||
Billing Details
|
||||
|
||||
Payment Terms Payment Schedule Method of Payment Billing Currency
|
||||
Net 30 Annual Wire Transfer USD
|
||||
|
||||
Term & Infrastructure Location
|
||||
|
||||
Search Infrastructure Location Term (Months) 36.00
|
||||
Canada Start Date 1-Jan-2024
|
||||
End Date 31-Dec-2026
|
||||
|
||||
|
||||
|
||||
QTY Subscribed Services - Search and Ancillary
|
||||
|
||||
12,340 Search Units* per each 12-
|
||||
Premium Plan (Algolia KeywordSearch) price includes 5.95% Volume Discount
|
||||
months contract year
|
||||
|
||||
3,000 Recommend Units*** per each
|
||||
Algolia Recommend Plan,
|
||||
|
||||
|
||||
Subtotal: $93,627.00
|
||||
Discount (19.66%): ($18,404.00)
|
||||
Total Annual Rate: $25,074.33
|
||||
Total Committed Amount for Initial Term: $75,223.00
|
||||
|
||||
Page 1 of 3
|
||||
```
|
||||
|
||||
### Auto-Renewal
|
||||
|
||||
- Value: True
|
||||
- Source page: 3
|
||||
|
||||
```text
|
||||
Unless earlier terminated in accordance with its terms, the term of the Service Order will start on the Start Date and
|
||||
continue until the End Date as set forth above. Except with respect to professional services, if subscribed, at the end of the
|
||||
initial term and any renewal term, this Service Order will automatically renew for additional terms of one year each, unless
|
||||
either party gives the other notice of non-renewal at least sixty (60) days before the end of the then-current term.
|
||||
Notwithstanding the immediately preceding sentence, all One-Time Discounts set forth above applicable to the initial term or
|
||||
any renewal term of the Service Order will not apply to a subsequent renewal term. Subscriber acknowledges that all One-
|
||||
Time Discounts are not intended to be repeated or replicated for affiliates of Subscriber. At each renewal of this Service
|
||||
Order, Algolia will increase the fee…
|
||||
```
|
||||
|
||||
### Notice Period
|
||||
|
||||
- Value: 60
|
||||
- Source page: 3
|
||||
|
||||
```text
|
||||
Unless earlier terminated in accordance with its terms, the term of the Service Order will start on the Start Date and
|
||||
continue until the End Date as set forth above. Except with respect to professional services, if subscribed, at the end of the
|
||||
initial term and any renewal term, this Service Order will automatically renew for additional terms of one year each, unless
|
||||
either party gives the other notice of non-renewal at least sixty (60) days before the end of the then-current term.
|
||||
Notwithstanding the immediately preceding sentence, all One-Time Discounts set forth above applicable to the initial term or
|
||||
any renewal term of the Service Order will not apply to a subsequent renewal term. Subscriber acknowledges that all One-
|
||||
Time Discounts are not intended to be repeated or replicated for affiliates of Subscriber. At each renewal of this Service
|
||||
Order, Algolia will increase the fee…
|
||||
```
|
||||
|
||||
### Renewal Increase
|
||||
|
||||
- Value: 7
|
||||
- Source page: 3
|
||||
|
||||
```text
|
||||
Unless earlier terminated in accordance with its terms, the term of the Service Order will start on the Start Date and
|
||||
continue until the End Date as set forth above. Except with respect to professional services, if subscribed, at the end of the
|
||||
initial term and any renewal term, this Service Order will automatically renew for additional terms of one year each, unless
|
||||
either party gives the other notice of non-renewal at least sixty (60) days before the end of the then-current term.
|
||||
Notwithstanding the immediately preceding sentence, all One-Time Discounts set forth above applicable to the initial term or
|
||||
any renewal term of the Service Order will not apply to a subsequent renewal term. Subscriber acknowledges that all One-
|
||||
Time Discounts are not intended to be repeated or replicated for affiliates of Subscriber. At each renewal of this Service
|
||||
Order, Algolia will increase the fee…
|
||||
```
|
||||
|
||||
## Source Files
|
||||
|
||||
- `Algolia/2024/[completed] Q-18253 - Groupe Média TFO - SO (1).pdf`
|
||||
|
||||
## Notes
|
||||
|
||||
-
|
||||
@@ -0,0 +1,101 @@
|
||||
---
|
||||
type: contract
|
||||
vendor: "Directus"
|
||||
status: active
|
||||
category: "Cloud Services"
|
||||
contract_start: "2026-06-30"
|
||||
contract_end: "2027-06-29"
|
||||
annual_cost: 18000.0
|
||||
currency: "USD"
|
||||
contract_value: 18000.0
|
||||
billing_frequency: "Monthly"
|
||||
payment_terms: "Net 30"
|
||||
payment_method: "Annual in Advance"
|
||||
auto_renewal: true
|
||||
renewal_term_months: 12
|
||||
customer_notice_days: 30
|
||||
vendor_notice_days:
|
||||
notice_deadline: "2027-05-30"
|
||||
renewal_increase_percent:
|
||||
renewal_pricing_rule: "fees for Services during any Renewal Term shall be the fees charged by Directus for the respective Services as in effect as of the Cancellation Deadline"
|
||||
renewal_status: "not-due"
|
||||
purchase_order:
|
||||
account_manager:
|
||||
criticality: medium
|
||||
---
|
||||
|
||||
# Directus
|
||||
|
||||
## Contract Summary
|
||||
|
||||
**Purpose:** Enterprise Cloud Services
|
||||
|
||||
**Service / Product:** Directus Enterprise Cloud
|
||||
|
||||
## Commercial Terms
|
||||
|
||||
- Annual cost: 18000.0 USD
|
||||
- Total contract value: 18000.0 USD
|
||||
- Billing frequency: Monthly
|
||||
- Payment terms: Net 30
|
||||
- Payment method: Annual in Advance
|
||||
|
||||
## Renewal
|
||||
|
||||
- Contract start: 2026-06-30
|
||||
- Contract end: 2027-06-29
|
||||
- Auto-renewal: True
|
||||
- Renewal term: 12 months
|
||||
- Customer notice: 30 days
|
||||
- Vendor notice: days
|
||||
- Customer notice deadline: 2027-05-30
|
||||
- Fixed renewal increase: %
|
||||
- Renewal pricing rule: fees for Services during any Renewal Term shall be the fees charged by Directus for the respective Services as in effect as of the Cancellation Deadline
|
||||
- Renewal status: not-due
|
||||
|
||||
## Watch Outs
|
||||
|
||||
- Automatic renewal for successive 12-month terms.
|
||||
- Customer must provide non-renewal notice at least 30 days before the end of the term.
|
||||
- Renewal pricing is not fixed: renewal uses the vendor's applicable pricing under the contract.
|
||||
|
||||
## Services / Entitlements
|
||||
|
||||
- Enterprise Tier 2 Cloud
|
||||
- 1 Production Project for 1 year
|
||||
- 10 Studio users
|
||||
- Enterprise license included
|
||||
- Basic support included w/99.9% uptime SLA
|
||||
|
||||
## Source Evidence
|
||||
|
||||
> Extracted from the local contract PDF. Review the original contract before making a contractual decision.
|
||||
|
||||
### Automatic Renewal
|
||||
|
||||
- Value: True
|
||||
- Source page: 3
|
||||
|
||||
> rprise-cloud-agreement, the terms of which are incorporated herein. The initial term of this Order commences on the date of this Order (the “Effective Date”) and continues thereafter for 1 year (the “Initial Term”). This Order for Services will be automatically renewed for successive annual periods (each a “ Renewal Term”) at the expiration of the Initial Term or any Renewal Term, as applicable, unless (i) Customer gives written notice to sales@directus.io at least 30 days prior to the end of the Initial Term or Renewal Term (each such date, a “Cancellation Deadline”), or (ii) Directus gives written notice at le
|
||||
|
||||
### Customer Non-Renewal Notice
|
||||
|
||||
- Value: 30
|
||||
- Source page: 3
|
||||
|
||||
> Purchase terms By signing this Order, I certify that I am authorized on behalf of the customer identified above to place a binding order for the Directus products and/or services listed below and to commit to the payment obligations specified herein. The use of the Directus services is governed by the Directus Cloud Enterprise Master Service Agreement located at https://directus.com/terms/enterprise-cloud-agreement, the terms of which are incorporated herein. The initial term of this Order commences on the date of this Order (the “Effective Date”) and continues thereafter for 1 year (the “Initial Term”). This Order for Services will be automatically renewed for successive annual periods (each a “ Renewal Term”) at the expiration of the Initial Term or any Renewal Term, as applicable, unless (i) Customer gives written notice to sales@directus.io at least 30 days prior to the end of the Initial Term or Renewal Term (each such date, a “Cancellation Deadline”), or (ii) Directus gives writt…
|
||||
|
||||
### Renewal Pricing Rule
|
||||
|
||||
- Value: fees for Services during any Renewal Term shall be the fees charged by Directus for the respective Services as in effect as of the Cancellation Deadline
|
||||
- Source page: 3
|
||||
|
||||
> to sales@directus.io at least 30 days prior to the end of the Initial Term or Renewal Term (each such date, a “Cancellation Deadline”), or (ii) Directus gives written notice at least 90 days prior to the end of the Initial Term or Renewal Term. The fees for Services during any Renewal Term shall be the fees charged by Directus for the respective Services as in effect as of the Cancellation Deadline. Payment terms: net 30, Annual in Advance Signature Signature Date Printed name Countersignature Countersignature Date Printed name
|
||||
|
||||
## Source Files
|
||||
|
||||
- `Directus/2026/Groupe Média TFO - Directus Enterprise Cloud - Renewal.pdf`
|
||||
|
||||
## Notes
|
||||
|
||||
-
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
type: contract
|
||||
vendor: Libeo
|
||||
status: active
|
||||
category: Service Contract
|
||||
contract_start: 2026-04-27
|
||||
contract_end: 2027-03-31
|
||||
annual_cost: 7500
|
||||
currency: CAD
|
||||
contract_value: 7500
|
||||
billing_frequency: annual
|
||||
payment_terms: Net 30
|
||||
payment_method: Bank transfer
|
||||
auto_renewal:
|
||||
renewal_term_months:
|
||||
customer_notice_days:
|
||||
vendor_notice_days:
|
||||
notice_deadline:
|
||||
renewal_increase_percent:
|
||||
renewal_pricing_rule:
|
||||
renewal_status: unknown
|
||||
purchase_order:
|
||||
account_manager:
|
||||
criticality: medium
|
||||
---
|
||||
|
||||
# Libeo
|
||||
|
||||
## Contract Summary
|
||||
|
||||
**Purpose:** Maintenance Boukili
|
||||
|
||||
**Service / Product:** Maintenance Boukili
|
||||
|
||||
## Commercial Terms
|
||||
|
||||
- Annual cost: 7500.0 USD
|
||||
- Total contract value: 7500.0 USD
|
||||
- Billing frequency: Monthly
|
||||
- Payment terms: Net 30
|
||||
- Payment method: Bank transfer
|
||||
|
||||
## Renewal
|
||||
|
||||
- Contract start: 2026-04-27
|
||||
- Contract end: 2027-03-31
|
||||
- Auto-renewal: None
|
||||
- Renewal term: months
|
||||
- Customer notice: days
|
||||
- Vendor notice: days
|
||||
- Customer notice deadline:
|
||||
- Fixed renewal increase: %
|
||||
- Renewal pricing rule:
|
||||
- Renewal status: unknown
|
||||
|
||||
## Watch Outs
|
||||
|
||||
- No major contractual watch-outs identified automatically.
|
||||
|
||||
## Services / Entitlements
|
||||
|
||||
- Maintenance Boukili
|
||||
|
||||
## Source Evidence
|
||||
|
||||
> Extracted from the local contract PDF. Review the original contract before making a contractual decision.
|
||||
|
||||
## Source Files
|
||||
|
||||
- `Libeo/2026/TFO2627-052 - CS - Libéo (1).pdf`
|
||||
|
||||
## Notes
|
||||
|
||||
-
|
||||
@@ -0,0 +1,100 @@
|
||||
---
|
||||
vendor: Sentry - 2025-2026
|
||||
contract_start: 2025-09-21
|
||||
contract_end: 2026-09-20
|
||||
type: contract
|
||||
status: active
|
||||
category:
|
||||
- Software Subscription
|
||||
annual_cost: "352"
|
||||
currency: USD
|
||||
contract_value:
|
||||
billing_frequency: Annual
|
||||
payment_terms:
|
||||
auto_renewal: true
|
||||
notice_days:
|
||||
notice_deadline:
|
||||
renewal_status:
|
||||
- due-soon
|
||||
purchase_order:
|
||||
account_manager:
|
||||
criticality: medium
|
||||
source_type: renewal-email
|
||||
---
|
||||
|
||||
# Sentry - 2025-2026
|
||||
|
||||
## Executive Summary
|
||||
|
||||
Sentry Team subscription used by TFO.
|
||||
|
||||
The subscription is scheduled to automatically renew on **September 20, 2026**.
|
||||
|
||||
The renewal notice was received 30 days before renewal and indicates that the subscription can be modified before the renewal date.
|
||||
|
||||
## Services
|
||||
|
||||
- Sentry
|
||||
- Plan: Team
|
||||
|
||||
## Financial Summary
|
||||
|
||||
| Item | Value |
|
||||
|---|---:|
|
||||
| Annual Cost | Unknown |
|
||||
| Currency | Unknown |
|
||||
| Billing Frequency | Annual |
|
||||
| Contract Value | Unknown |
|
||||
|
||||
> Financial information was not included in the renewal notice and should be confirmed from invoices, purchase orders, or the Sentry account.
|
||||
|
||||
## Renewal
|
||||
|
||||
| Item | Value |
|
||||
|---|---|
|
||||
| Automatic Renewal | Yes |
|
||||
| Current Period | 2025-09-21 → 2026-09-20 |
|
||||
| Renewal Date | 2026-09-20 |
|
||||
| Renewal Term | 12 months |
|
||||
| Notice Requirement | Not specified |
|
||||
| Renewal Increase | Not specified |
|
||||
|
||||
## Watch Outs
|
||||
|
||||
- **Automatic renewal:** Subscription automatically renews September 20, 2026.
|
||||
- **Action required:** Review the subscription before September 20 if the plan should be changed or cancelled.
|
||||
- **Cost unknown:** Renewal notice does not state the upcoming renewal price.
|
||||
- **Terms incomplete:** Cancellation notice requirements and price increase terms are not provided in this notice.
|
||||
|
||||
## Evidence
|
||||
|
||||
### Automatic Renewal
|
||||
|
||||
> "Annual Contract will automatically renew on Sept. 20, 2026."
|
||||
|
||||
**Source:** Sentry Annual Contract Renewal Notice
|
||||
|
||||
### Current Contract Period
|
||||
|
||||
**Period:** September 21, 2025 – September 20, 2026
|
||||
|
||||
**Source:** Sentry Annual Contract Renewal Notice
|
||||
|
||||
### Plan
|
||||
|
||||
**Plan Size:** Team
|
||||
|
||||
**Source:** Sentry Annual Contract Renewal Notice
|
||||
|
||||
## Missing Information
|
||||
|
||||
- [ ] Confirm annual renewal cost
|
||||
- [ ] Confirm currency
|
||||
- [ ] Confirm cancellation/notice period
|
||||
- [ ] Confirm whether renewal price will increase
|
||||
- [ ] Confirm payment terms
|
||||
- [ ] Confirm purchase order, if applicable
|
||||
|
||||
## Notes
|
||||
|
||||
Renewal reminder received 30 days before scheduled renewal.
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
type: contract
|
||||
vendor: "Trings"
|
||||
status: active
|
||||
category: "Service Agreement"
|
||||
contract_start: "2025-11-01"
|
||||
contract_end: "2026-08-31"
|
||||
annual_cost: 40760.0
|
||||
currency: "USD"
|
||||
contract_value: 40760.0
|
||||
billing_frequency: "Upfront"
|
||||
payment_terms: "Immediate"
|
||||
payment_method: "Bank Transfer"
|
||||
auto_renewal:
|
||||
renewal_term_months:
|
||||
customer_notice_days:
|
||||
vendor_notice_days:
|
||||
notice_deadline:
|
||||
renewal_increase_percent:
|
||||
renewal_pricing_rule:
|
||||
renewal_status: "unknown"
|
||||
purchase_order:
|
||||
account_manager:
|
||||
criticality: medium
|
||||
---
|
||||
|
||||
# Trings
|
||||
|
||||
## Contract Summary
|
||||
|
||||
**Purpose:** Customization of Live Event Experience
|
||||
|
||||
**Service / Product:** Live Event Customization Services
|
||||
|
||||
## Commercial Terms
|
||||
|
||||
- Annual cost: 40760.0 USD
|
||||
- Total contract value: 40760.0 USD
|
||||
- Billing frequency: Upfront
|
||||
- Payment terms: Immediate
|
||||
- Payment method: Bank Transfer
|
||||
|
||||
## Renewal
|
||||
|
||||
- Contract start: 2025-11-01
|
||||
- Contract end: 2026-08-31
|
||||
- Auto-renewal: None
|
||||
- Renewal term: months
|
||||
- Customer notice: days
|
||||
- Vendor notice: days
|
||||
- Customer notice deadline:
|
||||
- Fixed renewal increase: %
|
||||
- Renewal pricing rule:
|
||||
- Renewal status: unknown
|
||||
|
||||
## Watch Outs
|
||||
|
||||
- Contract is non-cancelable before its Contract End Date.
|
||||
- Payment terms are immediate.
|
||||
- Service customization is subject to client approval and may be rejected.
|
||||
|
||||
## Services / Entitlements
|
||||
|
||||
- Tag customization — live event overlay tags displayed in French: “Scheduled” and “Preview” → À venir; “LIVE” → En direct; event date rendered in French format per CLIENT screen captures.
|
||||
- Scheduling and visibility — multiple Live Events may be scheduled weeks in advance while appearing in the livestream shelf individually, beginning three (3) days before the event date.
|
||||
- Shelf display — the main livestream shelf displays only one (1) upcoming or live event at a time.
|
||||
|
||||
## Source Evidence
|
||||
|
||||
> Extracted from the local contract PDF. Review the original contract before making a contractual decision.
|
||||
|
||||
## Source Files
|
||||
|
||||
- `Trings/Tringapps_-_TFO_-_CR001.pdf`
|
||||
- `Trings/[completed] CONTRACT .pdf`
|
||||
|
||||
## Notes
|
||||
|
||||
-
|
||||
@@ -0,0 +1,42 @@
|
||||
|
||||
|
||||
## Upcoming Expiration
|
||||
```dataview
|
||||
TABLE
|
||||
vendor AS "Vendor",
|
||||
annual_cost AS "Annual Cost",
|
||||
currency AS "Currency",
|
||||
contract_end AS "Ends",
|
||||
renewal_status AS "Renewal"
|
||||
FROM "20 Work/Contracts"
|
||||
WHERE status = "active"
|
||||
AND contract_end >= date(today)
|
||||
AND contract_end <= date(today) + dur(120 days)
|
||||
SORT contract_end ASC
|
||||
```
|
||||
|
||||
|
||||
## Contract with notice deadline
|
||||
```dataview
|
||||
TABLE
|
||||
vendor AS "Vendor",
|
||||
notice_deadline AS "Notice Deadline",
|
||||
contract_end AS "Contract End",
|
||||
annual_cost AS "Annual Cost",
|
||||
currency AS "Currency"
|
||||
FROM "20 Work/Contracts"
|
||||
WHERE status = "active"
|
||||
AND notice_deadline
|
||||
SORT notice_deadline ASC
|
||||
```
|
||||
|
||||
|
||||
## Portfolio by currency
|
||||
```dataview
|
||||
TABLE WITHOUT ID
|
||||
currency AS "Currency",
|
||||
sum(rows.annual_cost) AS "Annual Commitments"
|
||||
FROM "20 Work/Contracts"
|
||||
WHERE status = "active"
|
||||
GROUP BY currency
|
||||
```
|
||||
@@ -70,4 +70,4 @@ What would I do differently next time? N/A
|
||||
|
||||
## Related
|
||||
|
||||
- [[]]
|
||||
- [[Algolia - 2024-2026]]
|
||||
+2
@@ -36,4 +36,6 @@ Expliquer aussi que nous allons faire un vrai test aussi
|
||||
## Related
|
||||
|
||||
- [[2026-08-14]]
|
||||
- [[2026-08-14 - OTT - Faire un test live avant le 17 septembre]]
|
||||
- [[2026-08-07 - Pay Trings for the french tabs]]
|
||||
-
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
---
|
||||
date: 2026-08-18
|
||||
status: decided
|
||||
owner: Amadou
|
||||
project: ""
|
||||
---
|
||||
---
|
||||
|
||||
|
||||
> 🟡 **Proposed** · 🟢 **Decided** · 🔴 **Rejected** · ⚫ **Superseded**
|
||||
|
||||
## Context
|
||||
|
||||
Why is a decision needed?
|
||||
|
||||
|
||||
Avec les fournisseurs externes avec qui nous travaillons, souvent ils vont modifier les images docker et créer des dépendances avec leur système. Nous voulons évviter ceci et de ce fait, il faut avoir une clause juridique qui indique que les images docker soit nous appartiennent soit ne doivent aucune dépendance avec leur système.
|
||||
|
||||
|
||||
## Decision
|
||||
|
||||
What was decided?
|
||||
|
||||
## Why
|
||||
|
||||
Why was this option chosen?
|
||||
|
||||
-
|
||||
|
||||
## Consequences
|
||||
|
||||
What are we accepting by making this decision?
|
||||
|
||||
- Cela peut demander une plus grande vigilience niveau sécurité des images.
|
||||
|
||||
## Related
|
||||
|
||||
-
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Options Considered _(optional)_
|
||||
|
||||
### Option 1
|
||||
|
||||
**Description:**
|
||||
|
||||
**Pros:**
|
||||
-
|
||||
|
||||
**Cons:**
|
||||
-
|
||||
|
||||
### Option 2
|
||||
|
||||
**Description:**
|
||||
|
||||
**Pros:**
|
||||
-
|
||||
|
||||
**Cons:**
|
||||
|
||||
|
||||
|
||||
### Related
|
||||
- [[2026-08-18 - Idello - Estimer le temps d'avoir des images docker propers avec aucune dépendances]]
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
---
|
||||
date: 2026-08-18
|
||||
status: decided
|
||||
owner: Amadou
|
||||
project: "[[Idello]]"
|
||||
---
|
||||
---
|
||||
|
||||
|
||||
> 🟡 **Proposed** · 🟢 **Decided** · 🔴 **Rejected** · ⚫ **Superseded**
|
||||
|
||||
## Context
|
||||
|
||||
Why is a decision needed?
|
||||
|
||||
Afin de pouvoir faire nos Ci/CD interne, nous avons demandé à Libéo nous faire un estimé de combien cela va couter afin de ne plus utiliser des images qui ont des dépendances chez le fournisseur.
|
||||
|
||||
|
||||
## Decision
|
||||
|
||||
What was decided? To evaluate how much it would cost to have it clean
|
||||
|
||||
## Why
|
||||
|
||||
Why was this option chosen?
|
||||
|
||||
- Afin de voir si on peut faire du Ci/CD interne
|
||||
|
||||
## Consequences
|
||||
|
||||
What are we accepting by making this decision?
|
||||
|
||||
- Un flux doit être discuté pour bien sécuriser les images par la suite
|
||||
|
||||
## Related
|
||||
|
||||
-
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Options Considered _(optional)_
|
||||
|
||||
### Option 1
|
||||
|
||||
**Description:**
|
||||
|
||||
**Pros:**
|
||||
-
|
||||
|
||||
**Cons:**
|
||||
-
|
||||
|
||||
### Option 2
|
||||
|
||||
**Description:**
|
||||
|
||||
**Pros:**
|
||||
-
|
||||
|
||||
**Cons:**
|
||||
|
||||
|
||||
|
||||
### Related
|
||||
- [[2026-08-18 - Contracts - Ajouter les clauses sur les images doker et les dépendances]]
|
||||
@@ -0,0 +1,67 @@
|
||||
---
|
||||
date: 2026-08-21
|
||||
status: proposed
|
||||
owner: Slimane
|
||||
project: sync-monitoring
|
||||
---
|
||||
---
|
||||
|
||||
|
||||
> 🟡 **Proposed** · 🟢 **Decided** · 🔴 **Rejected** · ⚫ **Superseded**
|
||||
|
||||
## Context
|
||||
|
||||
Why is a decision needed?
|
||||
|
||||
Slimane me propose d'utiliser healthcheck.io, cela me semble pas mal si cela répond au besoins
|
||||
|
||||
|
||||
|
||||
|
||||
## Decision
|
||||
|
||||
What was decided?
|
||||
Je lui ai dit d'aller de l'avant avec et de voir avec Joel si c'est ok. Si ses tests sont pertinents (Joel doit lui demander de les voir), then oui prend l'abonnement business. Niveau SMS, de mettre nos cells afin que nous soyons aviser. Aussi j'ai demandé de voir si on peut avoir un intégration avec Slack
|
||||
|
||||
## Why
|
||||
|
||||
Why was this option chosen?
|
||||
|
||||
- La plus safe, j'ai besoin de cela avant le mois de Septembre qui aura beaucoup de nouveauté
|
||||
|
||||
## Consequences
|
||||
|
||||
What are we accepting by making this decision?
|
||||
|
||||
- On peut avancer le projet, assurer que le mois de Septembre que nous soyons pro-actif
|
||||
|
||||
## Related
|
||||
|
||||
-
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Options Considered _(optional)_
|
||||
|
||||
### Option 1
|
||||
|
||||
**Description:**
|
||||
|
||||
**Pros:**
|
||||
-
|
||||
|
||||
**Cons:**
|
||||
-
|
||||
|
||||
### Option 2
|
||||
|
||||
**Description:**
|
||||
|
||||
**Pros:**
|
||||
-
|
||||
|
||||
**Cons:**
|
||||
|
||||
### Related
|
||||
[[Mogador Sync Project]]
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
---
|
||||
date: 2026-09-10
|
||||
status: proposed
|
||||
owner: Amadou
|
||||
project: "[[Boukili]]"
|
||||
---
|
||||
---
|
||||
|
||||
|
||||
> 🟡 **Proposed** · 🟢 **Decided** · 🔴 **Rejected** · ⚫ **Superseded**
|
||||
|
||||
## Context
|
||||
|
||||
Why is a decision needed?
|
||||
|
||||
The details of these items are in the emails we have exchanged.
|
||||
|
||||
1. user_last_activity_at fallback
|
||||
|
||||
2. Contentful blacklist -- for controlling notifications
|
||||
|
||||
3. Firebase auth lockout
|
||||
|
||||
4. Migration update messaging
|
||||
|
||||
Il y a un potentiel regression ou Salesforce n'est plus la source de vérité
|
||||
Pas de plan de tests une fois la migration en place
|
||||
Que faire si un utilisateur se connecte sur un appareil et migre. Puis change d'appareil qui n'a pas le auto-update, le compte sur cette appareil sera sous firebase et donc l'utilisateur n'aura pas de synchro entre le nouveau aws et le firebase.
|
||||
|
||||
|
||||
|
||||
## Decision
|
||||
|
||||
What was decided?
|
||||
|
||||
## Why
|
||||
|
||||
Why was this option chosen?
|
||||
|
||||
-
|
||||
|
||||
## Consequences
|
||||
|
||||
What are we accepting by making this decision?
|
||||
|
||||
-
|
||||
|
||||
## Related
|
||||
|
||||
-
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Options Considered _(optional)_
|
||||
|
||||
### Option 1
|
||||
|
||||
**Description:**
|
||||
|
||||
**Pros:**
|
||||
-
|
||||
|
||||
**Cons:**
|
||||
-
|
||||
|
||||
### Option 2
|
||||
|
||||
**Description:**
|
||||
|
||||
**Pros:**
|
||||
-
|
||||
|
||||
**Cons:**
|
||||
-
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
---
|
||||
date: 2026-09-10
|
||||
status: proposed
|
||||
owner: Amadou
|
||||
project: maleo
|
||||
---
|
||||
---
|
||||
|
||||
|
||||
> 🟡 **Proposed** · 🟢 **Decided** · 🔴 **Rejected** · ⚫ **Superseded**
|
||||
|
||||
|
||||
|
||||
## Context
|
||||
|
||||
Why is a decision needed?
|
||||
Equipe Jason/Eric veulent les cours en ligne sur Idello. Sauf que le zip utilisé pour les cours en ligne n'est pas compatible avec Idello. Ce sont deux type de zip.
|
||||
|
||||
|
||||
## Decision
|
||||
|
||||
What was decided?
|
||||
Un ticket doit être fait par zip. Cela sera traité puis retourné à Hélène pour injecter dans Louise
|
||||
Cela ne pourra commencer que le 12 octobre
|
||||
|
||||
## Why
|
||||
|
||||
Why was this option chosen?
|
||||
|
||||
- Easiest et avec le moins de problème et cela va leur permettre d'avoir les zip
|
||||
|
||||
## Consequences
|
||||
|
||||
What are we accepting by making this decision?
|
||||
|
||||
- A voir la fréquence si cela va nous impacter ou pas.
|
||||
|
||||
## Related
|
||||
|
||||
-
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Options Considered _(optional)_
|
||||
|
||||
### Option 1
|
||||
|
||||
**Description:**
|
||||
|
||||
**Pros:**
|
||||
-
|
||||
|
||||
**Cons:**
|
||||
-
|
||||
|
||||
### Option 2
|
||||
|
||||
**Description:**
|
||||
|
||||
**Pros:**
|
||||
-
|
||||
|
||||
**Cons:**
|
||||
-
|
||||
@@ -0,0 +1,109 @@
|
||||
---
|
||||
date: 2026-09-11
|
||||
status: decided
|
||||
owner: Amadou
|
||||
project: ""
|
||||
---
|
||||
---
|
||||
|
||||
|
||||
> 🟡 **Proposed** · 🟢 **Decided** · 🔴 **Rejected** · ⚫ **Superseded**
|
||||
|
||||
## Context
|
||||
|
||||
TFO possède plusieurs univers et propriétés jeunesse principalement exploités à travers des expériences sur écran.
|
||||
|
||||
Lunii propose une expérience audio jeunesse sans écran basée sur des histoires, notamment interactives. Il semble y avoir un alignement naturel entre les deux organisations : Lunii apporte le format et la plateforme audio, tandis que TFO peut apporter ses univers jeunesse, son expertise éducative et un positionnement distinctif autour de la francophonie canadienne.
|
||||
|
||||
Concept :
|
||||
|
||||
> **Les univers TFO prennent vie sans écran.**
|
||||
|
||||
L'objectif ne serait pas simplement d'adapter des épisodes TFO existants en audio, mais d'explorer la création de nouvelles expériences audio conçues spécifiquement pour Lunii.
|
||||
|
||||
Le CTO a approuvé que l'idée soit présentée au CEO afin d'évaluer l'intérêt de TFO à ouvrir une discussion avec Lunii.
|
||||
|
||||
## Decision
|
||||
|
||||
🟢 **Décision prise — procéder à une démarche exploratoire auprès de Lunii.**
|
||||
|
||||
L'objectif de cette première phase est de présenter TFO, ses univers, son expertise, sa portée et le potentiel d'une collaboration afin de déterminer si Lunii souhaite explorer un partenariat avec TFO.
|
||||
|
||||
Cette décision ne constitue pas encore l'approbation d'un projet de production ou d'un modèle commercial.
|
||||
|
||||
Le directeur du service éducatif sera impliqué dans la démarche, conformément à la demande du CEO.
|
||||
|
||||
## Why
|
||||
|
||||
- Étendre les univers TFO au-delà de l'écran.
|
||||
- Faire vivre les propriétés intellectuelles de TFO sous une nouvelle forme plutôt que simplement redistribuer du contenu existant.
|
||||
- Créer une expérience complémentaire à l'offre numérique actuelle de TFO.
|
||||
- Mettre à profit l'expertise éducative et jeunesse de TFO.
|
||||
- Offrir à Lunii un potentiel positionnement distinctif autour de contenus franco-canadiens.
|
||||
- Valider l'intérêt mutuel avant d'engager des ressources importantes.
|
||||
- Possibilité, à terme, d'imaginer une collection autour de la francophonie canadienne : Ontario français, Acadie, Manitoba, Nord canadien, etc.
|
||||
|
||||
## Consequences
|
||||
|
||||
- Constituer une petite équipe interne pour préparer l'approche.
|
||||
- Impliquer le directeur du service éducatif dans la démarche.
|
||||
- Construire une proposition de valeur claire pour Lunii.
|
||||
- Identifier les propriétés et univers TFO les plus pertinents à présenter.
|
||||
- Rassembler les données permettant de démontrer la portée et la valeur de TFO : audiences, usages numériques, portée éducative, présence géographique et autres indicateurs pertinents.
|
||||
- Préparer une première présentation TFO × Lunii.
|
||||
- Identifier et approcher les bons interlocuteurs chez Lunii.
|
||||
- Si Lunii manifeste un intérêt, définir ensuite une deuxième phase portant sur le concept, le modèle de collaboration, les droits, les responsabilités et un éventuel pilote.
|
||||
|
||||
## Related
|
||||
|
||||
- CTO — approbation obtenue pour présenter l'idée au CEO.
|
||||
- Concept : **« Les univers TFO prennent vie sans écran. »**
|
||||
- Opportunité potentielle : **TFO × Lunii**
|
||||
- Extension possible : **francophonie canadienne sans écran**
|
||||
|
||||
## Options Considered
|
||||
|
||||
### Option 1 — Explorer une collaboration avec Lunii
|
||||
|
||||
**Description:**
|
||||
|
||||
Présenter l'idée au CEO et demander l'autorisation d'ouvrir une première conversation exploratoire avec Lunii.
|
||||
|
||||
**Pros:**
|
||||
|
||||
- Faible engagement initial.
|
||||
- Permet de valider rapidement l'intérêt de Lunii.
|
||||
- Nouveau canal pour les propriétés jeunesse TFO.
|
||||
- Fort alignement potentiel avec la mission éducative de TFO.
|
||||
- Possibilité de créer une offre franco-canadienne distinctive.
|
||||
|
||||
**Cons:**
|
||||
|
||||
- Modèle économique encore inconnu.
|
||||
- Droits et propriété intellectuelle à clarifier.
|
||||
- Nécessiterait des ressources éditoriales et/ou de production si un pilote est lancé.
|
||||
|
||||
### Option 2 — Ne pas poursuivre pour le moment
|
||||
|
||||
**Description:**
|
||||
|
||||
Conserver l'idée comme opportunité future sans contacter Lunii.
|
||||
|
||||
**Pros:**
|
||||
|
||||
- Aucun nouvel engagement ou besoin de capacité.
|
||||
- Évite d'ajouter une initiative au portefeuille actuel.
|
||||
|
||||
**Cons:**
|
||||
|
||||
- Opportunité non validée.
|
||||
- Risque de laisser passer un partenariat potentiellement bien aligné avec TFO.
|
||||
- Les hypothèses sur l'intérêt de Lunii resteraient sans réponse.
|
||||
|
||||
|
||||
|
||||
Si le CEO dit **« oui, contactez-les »**, je passerais alors la note en **🟢 Decided** et je reformulerais la Decision en *« TFO ouvrira une discussion exploratoire avec Lunii »*.
|
||||
|
||||
|
||||
Update le 15 Septembre 2026
|
||||
Xavier a donne son go pour les contacter.
|
||||
@@ -0,0 +1,537 @@
|
||||
---
|
||||
date: 2026-08-19
|
||||
status: idea
|
||||
owner: Amadou
|
||||
project:
|
||||
strategic_area:
|
||||
effort:
|
||||
impact:
|
||||
---
|
||||
|
||||
|
||||
> 💡 **Idea** · 🔎 **Exploring** · 🟢 **Approved** · ⏸️ **Parked** · ⚫ **Dropped** · 🚀 **Converted**
|
||||
|
||||
# Gouvernance des applications développées par IA / Vibe Coding
|
||||
|
||||
## TL;DR
|
||||
|
||||
En une semaine, deux projets développés rapidement à l'aide d'outils de vibe coding ont été portés à mon attention avec une intention potentielle de mise en production :
|
||||
|
||||
- une application facilitant la procédure de notation des appels d'offres, incluant un CMS;
|
||||
|
||||
- une application de gestion de projets et d'employés visant potentiellement à remplacer Vimbiz.
|
||||
|
||||
|
||||
L'objectif n'est pas de freiner ce type d'initiative. Ces outils permettent aux équipes de prototyper rapidement des solutions intéressantes.
|
||||
|
||||
Par contre, **un prototype fonctionnel n'est pas automatiquement une application prête pour la production**.
|
||||
|
||||
Nous devrions définir un processus organisationnel permettant de valider, sécuriser, tester, documenter et gouverner ces applications avant leur utilisation officielle.
|
||||
|
||||
---
|
||||
|
||||
## Objectif de la discussion
|
||||
|
||||
S'entendre avec le CTO et le responsable Infrastructure/Sécurité sur :
|
||||
|
||||
1. les critères permettant de déterminer qu'une application doit passer par une validation TI;
|
||||
|
||||
2. les validations nécessaires avant une mise en production;
|
||||
|
||||
3. les responsabilités respectives de nos équipes;
|
||||
|
||||
4. les exigences minimales de sécurité, QA, architecture et gouvernance;
|
||||
|
||||
5. le processus permettant de faire passer un prototype à une application officiellement supportée.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# Constat
|
||||
|
||||
Le développement assisté par IA réduit considérablement la barrière technique nécessaire pour créer une application.
|
||||
|
||||
Une personne peut maintenant produire rapidement :
|
||||
|
||||
- une interface;
|
||||
|
||||
- un backend;
|
||||
|
||||
- une base de données;
|
||||
|
||||
- un système d'authentification;
|
||||
|
||||
- un CMS;
|
||||
|
||||
- des automatisations;
|
||||
|
||||
- des intégrations avec d'autres systèmes.
|
||||
|
||||
|
||||
Cela permet beaucoup d'innovation.
|
||||
|
||||
Cependant, la facilité de création ne garantit pas :
|
||||
|
||||
- la sécurité;
|
||||
|
||||
- la qualité du code;
|
||||
|
||||
- la protection des données;
|
||||
|
||||
- la conformité;
|
||||
|
||||
- la maintenabilité;
|
||||
|
||||
- la disponibilité;
|
||||
|
||||
- la capacité de récupération;
|
||||
|
||||
- la qualité des tests;
|
||||
|
||||
- la documentation;
|
||||
|
||||
- la pérennité de la solution.
|
||||
|
||||
|
||||
Le risque apparaît particulièrement lorsqu'un prototype devient progressivement un outil utilisé dans les opérations de l'organisation.
|
||||
|
||||
---
|
||||
|
||||
# Principe proposé
|
||||
|
||||
> **Toute application destinée à être utilisée officiellement par l'organisation ou à traiter des données organisationnelles doit passer par un processus de validation avant sa mise en production.**
|
||||
|
||||
Le niveau de validation devrait être proportionnel au risque.
|
||||
|
||||
Un petit outil interne sans données sensibles ne devrait pas nécessairement suivre le même processus qu'une application qui gère des employés ou remplace un système organisationnel.
|
||||
|
||||
---
|
||||
|
||||
# Questions à trancher ensemble
|
||||
|
||||
## 1. Quand une application devient-elle un projet TI?
|
||||
|
||||
Définir les déclencheurs.
|
||||
|
||||
Par exemple :
|
||||
|
||||
- utilisée par plusieurs employés;
|
||||
|
||||
- traite ou conserve des données organisationnelles;
|
||||
|
||||
- contient des données personnelles ou confidentielles;
|
||||
|
||||
- nécessite une authentification;
|
||||
|
||||
- communique avec nos systèmes;
|
||||
|
||||
- utilise des API ou des comptes de service;
|
||||
|
||||
- automatise un processus d'affaires;
|
||||
|
||||
- remplace un outil existant;
|
||||
|
||||
- devient nécessaire aux opérations;
|
||||
|
||||
- doit être hébergée ou supportée par l'organisation.
|
||||
|
||||
|
||||
À partir de quel moment une expérimentation doit-elle être déclarée?
|
||||
|
||||
---
|
||||
|
||||
## 2. Processus proposé
|
||||
|
||||
### Étape 1 — Prototype / expérimentation
|
||||
|
||||
🟢 Libre dans un environnement contrôlé.
|
||||
|
||||
Objectif : permettre l'innovation sans créer trop de bureaucratie.
|
||||
|
||||
Pas de données sensibles ou de production sans autorisation.
|
||||
|
||||
### Étape 2 — Demande de mise en production
|
||||
|
||||
Le propriétaire présente minimalement :
|
||||
|
||||
- objectif;
|
||||
|
||||
- utilisateurs;
|
||||
|
||||
- données utilisées;
|
||||
|
||||
- architecture;
|
||||
|
||||
- technologies;
|
||||
|
||||
- hébergement;
|
||||
|
||||
- authentification;
|
||||
|
||||
- intégrations;
|
||||
|
||||
- dépendances externes;
|
||||
|
||||
- personne responsable;
|
||||
|
||||
- criticité du processus.
|
||||
|
||||
|
||||
### Étape 3 — Revue
|
||||
|
||||
Selon le type d'application :
|
||||
|
||||
**Mon équipe**
|
||||
|
||||
- revue fonctionnelle;
|
||||
|
||||
- QA;
|
||||
|
||||
- tests;
|
||||
|
||||
- accessibilité lorsque nécessaire;
|
||||
|
||||
- intégration avec les produits et données existants;
|
||||
|
||||
- documentation minimale;
|
||||
|
||||
- maintenabilité.
|
||||
|
||||
|
||||
**Infrastructure / Sécurité**
|
||||
|
||||
- sécurité;
|
||||
|
||||
- hébergement;
|
||||
|
||||
- authentification et autorisations;
|
||||
|
||||
- secrets;
|
||||
|
||||
- accès réseau;
|
||||
|
||||
- sauvegardes;
|
||||
|
||||
- journalisation;
|
||||
|
||||
- vulnérabilités;
|
||||
|
||||
- dépendances;
|
||||
|
||||
- gestion des accès.
|
||||
|
||||
|
||||
**Architecture / CTO**
|
||||
|
||||
- pertinence de la solution;
|
||||
|
||||
- duplication d'un système existant;
|
||||
|
||||
- dette technique;
|
||||
|
||||
- architecture;
|
||||
|
||||
- support à long terme;
|
||||
|
||||
- décision build vs buy;
|
||||
|
||||
- responsabilité organisationnelle.
|
||||
|
||||
|
||||
### Étape 4 — Décision
|
||||
|
||||
🟢 **Approved for production**
|
||||
|
||||
🟡 **Approved with conditions**
|
||||
|
||||
🟠 **Prototype only**
|
||||
|
||||
🔴 **Not approved**
|
||||
|
||||
---
|
||||
|
||||
# Validation QA
|
||||
|
||||
Une application générée avec l'aide de l'IA doit être considérée comme du logiciel à part entière.
|
||||
|
||||
Avant une mise en production, selon sa criticité :
|
||||
|
||||
- tests fonctionnels;
|
||||
|
||||
- scénarios d'erreur;
|
||||
|
||||
- validation des permissions;
|
||||
|
||||
- validation des données;
|
||||
|
||||
- tests de régression;
|
||||
|
||||
- tests sur différents profils utilisateurs;
|
||||
|
||||
- accessibilité lorsque pertinente;
|
||||
|
||||
- validation des intégrations.
|
||||
|
||||
|
||||
Le fait que l'application « fonctionne » lors d'une démonstration ne constitue pas une validation suffisante.
|
||||
|
||||
---
|
||||
|
||||
# Sécurité
|
||||
|
||||
Points à définir avec Infrastructure/Sécurité :
|
||||
|
||||
- Où le code peut-il être hébergé?
|
||||
|
||||
- Quels services IA sont autorisés?
|
||||
|
||||
- Quel code ou quelles données peuvent être envoyés à un fournisseur IA?
|
||||
|
||||
- Comment gérer les secrets et clés API?
|
||||
|
||||
- Quelles méthodes d'authentification sont acceptées?
|
||||
|
||||
- Peut-on créer des comptes utilisateurs locaux?
|
||||
|
||||
- Comment gérer les permissions?
|
||||
|
||||
- Quels fournisseurs cloud sont autorisés?
|
||||
|
||||
- Quelles dépendances externes sont acceptables?
|
||||
|
||||
- Quels scans de vulnérabilités sont requis?
|
||||
|
||||
- Quels logs doivent être conservés?
|
||||
|
||||
- Quelles sauvegardes sont nécessaires?
|
||||
|
||||
- Quel processus appliquer lorsqu'une vulnérabilité est découverte?
|
||||
|
||||
|
||||
---
|
||||
|
||||
# Gouvernance des données
|
||||
|
||||
Une application peut devenir une nouvelle source de données organisationnelles sans que nous nous en rendions compte.
|
||||
|
||||
Pour chaque application, déterminer :
|
||||
|
||||
- quelles données sont créées;
|
||||
|
||||
- quelles données sont collectées;
|
||||
|
||||
- où elles sont stockées;
|
||||
|
||||
- qui en est propriétaire;
|
||||
|
||||
- qui peut y accéder;
|
||||
|
||||
- combien de temps elles sont conservées;
|
||||
|
||||
- si elles contiennent des informations personnelles ou confidentielles;
|
||||
|
||||
- si une source officielle existe déjà;
|
||||
|
||||
- comment les données peuvent être exportées;
|
||||
|
||||
- ce qui arrive aux données si l'application est abandonnée.
|
||||
|
||||
|
||||
Éviter de créer de nouvelles sources de vérité parallèles.
|
||||
|
||||
---
|
||||
|
||||
# Maintenabilité
|
||||
|
||||
Question essentielle :
|
||||
|
||||
> **Qui maintient l'application dans deux ans?**
|
||||
|
||||
Avant approbation :
|
||||
|
||||
- propriétaire fonctionnel identifié;
|
||||
|
||||
- propriétaire technique identifié;
|
||||
|
||||
- dépôt de code appartenant à l'organisation;
|
||||
|
||||
- documentation minimale;
|
||||
|
||||
- procédure de déploiement;
|
||||
|
||||
- sauvegardes;
|
||||
|
||||
- gestion des dépendances;
|
||||
|
||||
- monitoring;
|
||||
|
||||
- procédure en cas d'incident;
|
||||
|
||||
- plan de continuité si le créateur quitte l'organisation.
|
||||
|
||||
|
||||
Une application ne devrait pas dépendre uniquement de la personne qui l'a créée.
|
||||
|
||||
---
|
||||
|
||||
# Cas 1 — Application de notation des appels d'offres
|
||||
|
||||
Application avec CMS permettant de faciliter le processus de notation.
|
||||
|
||||
Points à examiner :
|
||||
|
||||
- données conservées;
|
||||
|
||||
- confidentialité des soumissions;
|
||||
|
||||
- utilisateurs et permissions;
|
||||
|
||||
- intégrité des notes;
|
||||
|
||||
- historique des modifications;
|
||||
|
||||
- auditabilité;
|
||||
|
||||
- sauvegarde;
|
||||
|
||||
- export des résultats;
|
||||
|
||||
- propriétaire du processus;
|
||||
|
||||
- durée de conservation;
|
||||
|
||||
- hébergement;
|
||||
|
||||
- support.
|
||||
|
||||
|
||||
Question importante :
|
||||
|
||||
> Devons-nous pouvoir démontrer ultérieurement qui a donné quelle note, quand, et si cette note a été modifiée?
|
||||
|
||||
---
|
||||
|
||||
# Cas 2 — Remplacement potentiel de Vimbiz
|
||||
|
||||
Application de gestion de projets et d'employés.
|
||||
|
||||
Ce cas présente un niveau de risque beaucoup plus élevé.
|
||||
|
||||
À examiner notamment :
|
||||
|
||||
- nature des données employés;
|
||||
|
||||
- permissions;
|
||||
|
||||
- rôles;
|
||||
|
||||
- historique;
|
||||
|
||||
- intégrité des données;
|
||||
|
||||
- sauvegardes;
|
||||
|
||||
- disponibilité;
|
||||
|
||||
- sécurité;
|
||||
|
||||
- confidentialité;
|
||||
|
||||
- export et récupération;
|
||||
|
||||
- intégrations;
|
||||
|
||||
- migration depuis Vimbiz;
|
||||
|
||||
- responsabilité du support;
|
||||
|
||||
- continuité;
|
||||
|
||||
- coût réel de maintenance.
|
||||
|
||||
|
||||
Avant même une revue technique, une question doit être posée :
|
||||
|
||||
> **Avons-nous réellement pris la décision organisationnelle de remplacer Vimbiz?**
|
||||
|
||||
Le développement d'un prototype ne devrait pas, à lui seul, entraîner implicitement cette décision.
|
||||
|
||||
---
|
||||
|
||||
# Classification du risque
|
||||
|
||||
Je proposerais un modèle simple.
|
||||
|
||||
### 🟢 Faible
|
||||
|
||||
Prototype, données non sensibles, peu d'utilisateurs, aucun processus critique.
|
||||
|
||||
Validation légère.
|
||||
|
||||
### 🟡 Modéré
|
||||
|
||||
Application interne, plusieurs utilisateurs, données organisationnelles ou intégrations.
|
||||
|
||||
QA + revue technique + sécurité.
|
||||
|
||||
### 🔴 Élevé
|
||||
|
||||
Données personnelles/confidentielles, employés, finance, processus critique, authentification importante ou remplacement d'un système officiel.
|
||||
|
||||
Revue complète et approbation formelle avant production.
|
||||
|
||||
---
|
||||
|
||||
# Point important : ne pas tuer l'innovation
|
||||
|
||||
Le processus doit rester suffisamment léger pour que les employés continuent à expérimenter.
|
||||
|
||||
L'objectif devrait être :
|
||||
|
||||
> **Expérimenter facilement. Mettre en production de façon contrôlée.**
|
||||
|
||||
Nous voulons éviter deux extrêmes :
|
||||
|
||||
- interdire ou ralentir inutilement les prototypes;
|
||||
|
||||
- laisser des prototypes devenir des systèmes de production sans gouvernance.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# Questions à poser au CTO et Infrastructure/Sécurité
|
||||
|
||||
- Sommes-nous d'accord qu'il faut formaliser ce processus maintenant?
|
||||
|
||||
- Quels types d'applications nécessitent obligatoirement une revue?
|
||||
|
||||
- Qui peut autoriser une mise en production?
|
||||
|
||||
- Quelles responsabilités appartiennent à mon équipe?
|
||||
|
||||
- Quelles responsabilités appartiennent à Infrastructure/Sécurité?
|
||||
|
||||
- Devons-nous définir une liste d'outils IA autorisés?
|
||||
|
||||
- Quelles exigences minimales de sécurité voulons-nous imposer?
|
||||
|
||||
- Quel niveau de QA voulons-nous selon la criticité?
|
||||
|
||||
- Où doivent vivre le code et la documentation?
|
||||
|
||||
- Qui devient propriétaire d'une application après son approbation?
|
||||
|
||||
- Devons-nous tenir un registre des applications internes développées de cette façon?
|
||||
|
||||
|
||||
---
|
||||
|
||||
# Proposition de prochaine étape
|
||||
|
||||
Ne pas commencer par une politique lourde.
|
||||
|
||||
Utiliser les deux projets actuels comme cas concrets pour définir un premier processus :
|
||||
|
||||
**Prototype → Évaluation du risque → Revue → QA/Sécurité → Approbation → Production → Gouvernance**
|
||||
|
||||
Puis documenter une version simple du processus à appliquer aux prochains projets.
|
||||
@@ -259,3 +259,9 @@ Au final, l'objectif n'est pas de produire davantage de tableaux de bord.
|
||||
L'objectif est de permettre à la direction de répondre plus facilement à une question fondamentale :
|
||||
|
||||
> **Comment savons-nous, de façon objective, que nous sommes en train d'atteindre nos objectifs stratégiques?**
|
||||
|
||||
|
||||
### Related
|
||||
- [[Strategic KPI Framework]]
|
||||
- [[KPI]]
|
||||
-
|
||||
@@ -632,4 +632,4 @@ The long-term strategy is:
|
||||
|
||||
- [[Self-Service Analytics]]
|
||||
|
||||
- [[CTO]]
|
||||
- [[CTO - Aligner les objectifs stratégiques, les KPI et les données]]
|
||||
@@ -550,7 +550,7 @@ HR → Finance → IT → other business domains.
|
||||
- [[Data Steward]]
|
||||
- [[Self-Service Analytics]]
|
||||
- [[Data Culture]]
|
||||
- [[CTO]]
|
||||
- [[CTO - Aligner les objectifs stratégiques, les KPI et les données]]
|
||||
|
||||
## Update - 2026-07-27
|
||||
|
||||
|
||||
@@ -243,3 +243,8 @@ It's:
|
||||
**How does the organization measure its strategy?**
|
||||
|
||||
And _that_ is the level where I think your CTO ambitions and what you're currently doing at work are starting to genuinely intersect.
|
||||
|
||||
|
||||
### Related
|
||||
- [[Strategic KPI Framework]]
|
||||
- [[KPI]]
|
||||
+841
@@ -0,0 +1,841 @@
|
||||
---
|
||||
date: 2026-08-18
|
||||
status: idea
|
||||
owner: Amadou
|
||||
project:
|
||||
strategic_area: Accessibilité
|
||||
effort: High
|
||||
impact: High
|
||||
---
|
||||
|
||||
|
||||
> 💡 **Idea** · 🔎 **Exploring** · 🟢 **Approved** · ⏸️ **Parked** · ⚫ **Dropped** · 🚀 **Converted**
|
||||
|
||||
# Rôle et responsabilités – Chargé de stratégie numérique
|
||||
|
||||
## TL;DR
|
||||
|
||||
Le Chargé de stratégie numérique est responsable de deux grands axes :
|
||||
|
||||
1. **Accessibilité numérique** : surveiller la conformité de nos plateformes, identifier les risques, accompagner les projets et assurer une veille sur les obligations et standards applicables.
|
||||
|
||||
2. **SEO et découvrabilité** : surveiller la santé SEO de nos plateformes, analyser leur visibilité, identifier les problèmes et opportunités et recommander les actions à prioriser.
|
||||
|
||||
|
||||
L'évolution recherchée est de faire passer le rôle d'un fonctionnement principalement **réactif** à un fonctionnement davantage **proactif**.
|
||||
|
||||
Le rôle ne doit pas uniquement consister à répondre aux demandes, participer aux projets ou effectuer des validations. Il doit également utiliser les données, les audits, les outils de surveillance et son expertise pour **faire émerger des recommandations et proposer des priorités**.
|
||||
|
||||
La posture recherchée est notamment :
|
||||
|
||||
> **« Voici ce que les données montrent. Nous perdons de la visibilité sur X, nous avons une opportunité sur Y et Google indexe mal Z. Je recommande que nous travaillions sur ces trois axes ce trimestre. »**
|
||||
|
||||
Son rôle est de **détecter, analyser, recommander, prioriser et mesurer**.
|
||||
|
||||
L'implémentation demeure la responsabilité des équipes concernées : Marketing, contenu, développeurs, intégrateurs ou fournisseurs.
|
||||
|
||||
---
|
||||
|
||||
# 1. Objectif du rôle
|
||||
|
||||
Le Chargé de stratégie numérique est responsable de la **gouvernance de l'accessibilité numérique** et de la **santé SEO de nos plateformes Web**.
|
||||
|
||||
Son rôle consiste à :
|
||||
|
||||
- définir et maintenir les standards;
|
||||
|
||||
- surveiller la conformité et la performance;
|
||||
|
||||
- identifier les risques et les opportunités;
|
||||
|
||||
- formuler et prioriser des recommandations;
|
||||
|
||||
- accompagner les équipes internes et les fournisseurs;
|
||||
|
||||
- valider les changements importants;
|
||||
|
||||
- mesurer l'évolution dans le temps;
|
||||
|
||||
- faire émerger de façon proactive les sujets nécessitant l'attention de l'organisation.
|
||||
|
||||
|
||||
L'implémentation des recommandations est réalisée par les équipes responsables selon la nature du changement : fournisseurs, développeurs, intégrateurs, équipes de contenu ou Marketing.
|
||||
|
||||
---
|
||||
|
||||
# 2. Posture attendue : expertise et force de proposition
|
||||
|
||||
Le Chargé de stratégie numérique ne doit pas intervenir uniquement lorsqu'une demande lui est adressée ou lorsqu'un projet nécessite une validation.
|
||||
|
||||
Une partie importante de son rôle consiste à **surveiller activement nos plateformes, analyser les données disponibles et identifier de façon proactive les risques, problèmes et opportunités** en matière de SEO et d'accessibilité.
|
||||
|
||||
Il doit être en mesure de transformer ses observations en **propositions concrètes et priorisées** pour l'organisation.
|
||||
|
||||
## 2.1 Attente
|
||||
|
||||
À partir des données, audits, outils de surveillance, évolutions technologiques et observations sur nos plateformes, le Chargé de stratégie numérique doit régulièrement pouvoir répondre aux questions suivantes :
|
||||
|
||||
- Qu'est-ce qui se dégrade?
|
||||
|
||||
- Qu'est-ce qui fonctionne bien?
|
||||
|
||||
- Où perdons-nous de la visibilité?
|
||||
|
||||
- Où avons-nous une opportunité de croissance?
|
||||
|
||||
- Quels problèmes techniques limitent notre découvrabilité?
|
||||
|
||||
- Quels risques d'accessibilité sont présents?
|
||||
|
||||
- Quels problèmes reviennent régulièrement?
|
||||
|
||||
- Quelles évolutions de Google, des moteurs de recherche, des WCAG ou de l'IA pourraient nous affecter?
|
||||
|
||||
- Sur quoi devrions-nous travailler ensuite?
|
||||
|
||||
|
||||
L'objectif est de passer d'un fonctionnement principalement **réactif** :
|
||||
|
||||
> Une équipe demande une analyse → une analyse est effectuée → une recommandation est produite.
|
||||
|
||||
à un fonctionnement également **proactif** :
|
||||
|
||||
> Les données et plateformes sont surveillées → un problème ou une opportunité est identifié → son impact est évalué → une recommandation est formulée → une action est proposée et priorisée.
|
||||
|
||||
---
|
||||
|
||||
## 2.2 Forme attendue d'une proposition
|
||||
|
||||
Une recommandation stratégique devrait idéalement contenir quatre éléments.
|
||||
|
||||
### 1. Observation
|
||||
|
||||
**Qu'est-ce que les données ou l'analyse montrent?**
|
||||
|
||||
> La visibilité organique des pages X diminue depuis trois mois.
|
||||
|
||||
### 2. Impact
|
||||
|
||||
**Pourquoi est-ce important?**
|
||||
|
||||
> Ces pages représentent une part importante des impressions provenant de Google et cette diminution pourrait réduire la découvrabilité de nos contenus.
|
||||
|
||||
### 3. Recommandation
|
||||
|
||||
**Que devrions-nous faire?**
|
||||
|
||||
> Je recommande de revoir la structure des pages, le maillage interne et le positionnement des contenus concernés.
|
||||
|
||||
### 4. Action proposée
|
||||
|
||||
**Quelle est la prochaine étape concrète?**
|
||||
|
||||
> Effectuer une analyse détaillée des principales pages concernées et créer les tickets techniques ou recommandations éditoriales nécessaires.
|
||||
|
||||
---
|
||||
|
||||
## 2.3 Exemple de posture attendue
|
||||
|
||||
Le résultat attendu n'est pas uniquement :
|
||||
|
||||
> « Voici le rapport SEO du mois. »
|
||||
|
||||
Le rôle doit permettre d'arriver avec une lecture et une recommandation :
|
||||
|
||||
> **« Voici ce que les données montrent. Nous perdons de la visibilité sur X, nous avons une opportunité sur Y et Google indexe mal Z. Je recommande que nous travaillions sur ces trois axes ce trimestre. »**
|
||||
|
||||
De la même manière pour l'accessibilité :
|
||||
|
||||
> **« Les audits des derniers mois montrent que les mêmes problèmes reviennent sur plusieurs plateformes. Je recommande que nous intégrions ces critères directement dans les exigences transmises aux fournisseurs plutôt que de continuer à les corriger après livraison. »**
|
||||
|
||||
---
|
||||
|
||||
## 2.4 Responsabilités proactives
|
||||
|
||||
Le Chargé de stratégie numérique doit notamment :
|
||||
|
||||
- surveiller régulièrement les données SEO et les indicateurs d'accessibilité;
|
||||
|
||||
- identifier les tendances positives et négatives;
|
||||
|
||||
- détecter les anomalies sans attendre qu'elles soient signalées;
|
||||
|
||||
- identifier les opportunités d'amélioration;
|
||||
|
||||
- analyser les causes potentielles;
|
||||
|
||||
- proposer des actions concrètes;
|
||||
|
||||
- évaluer leur priorité et leur impact;
|
||||
|
||||
- présenter ses recommandations aux responsables concernés;
|
||||
|
||||
- créer ou demander la création des tickets nécessaires;
|
||||
|
||||
- suivre l'implémentation des recommandations acceptées;
|
||||
|
||||
- mesurer les résultats après leur mise en œuvre;
|
||||
|
||||
- ajuster ses recommandations selon les résultats obtenus.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 2.5 Priorités trimestrielles
|
||||
|
||||
À chaque trimestre, le Chargé de stratégie numérique présente les **principales priorités SEO et accessibilité** identifiées à partir des données, audits et observations.
|
||||
|
||||
À titre indicatif, cela peut représenter **3 à 5 priorités lorsque pertinent**.
|
||||
|
||||
Pour chaque priorité :
|
||||
|
||||
|Élément|Attendu|
|
||||
|---|---|
|
||||
|Constat|Ce que les données montrent|
|
||||
|Impact|Pourquoi cela mérite notre attention|
|
||||
|Recommandation|Ce qui devrait être fait|
|
||||
|Priorité|Haute / Moyenne / Basse|
|
||||
|Responsable d'implémentation|Interne / Marketing / Fournisseur|
|
||||
|Résultat attendu|Ce que nous cherchons à améliorer|
|
||||
|Mesure|Comment vérifier si cela a fonctionné|
|
||||
|
||||
Ces priorités sont discutées avec les responsables concernés afin de déterminer lesquelles seront intégrées aux travaux du trimestre.
|
||||
|
||||
---
|
||||
|
||||
## 2.6 Limite de cette responsabilité
|
||||
|
||||
Être **force de proposition** ne signifie pas que le Chargé de stratégie numérique décide seul de la stratégie d'affaires ou des priorités de Marketing.
|
||||
|
||||
Marketing et les responsables de produits demeurent responsables de leurs objectifs d'affaires et éditoriaux.
|
||||
|
||||
Le Chargé de stratégie numérique doit :
|
||||
|
||||
- transformer ces objectifs en recommandations SEO et d'accessibilité;
|
||||
|
||||
- utiliser les données pour identifier des opportunités;
|
||||
|
||||
- faire émerger des risques que les autres équipes n'auraient pas nécessairement identifiés;
|
||||
|
||||
- provoquer les discussions nécessaires lorsqu'un objectif n'est pas suffisamment défini.
|
||||
|
||||
|
||||
Il n'a donc pas besoin d'attendre qu'une autre équipe lui fournisse une demande SEO précise pour commencer son analyse.
|
||||
|
||||
---
|
||||
|
||||
# 3. Accessibilité numérique
|
||||
|
||||
## 3.1 Veille réglementaire et conformité
|
||||
|
||||
- Assurer une veille sur la LAPHO et les obligations applicables à l'organisation.
|
||||
|
||||
- Suivre l'évolution des WCAG et autres standards pertinents.
|
||||
|
||||
- Analyser les communications et changements réglementaires.
|
||||
|
||||
- Identifier les impacts potentiels pour nos plateformes.
|
||||
|
||||
- Recommander les actions nécessaires pour maintenir la conformité.
|
||||
|
||||
- Maintenir la documentation interne relative aux standards d'accessibilité.
|
||||
|
||||
|
||||
### Livrables
|
||||
|
||||
- synthèse des changements réglementaires pertinents;
|
||||
|
||||
- recommandations de mise en conformité;
|
||||
|
||||
- standards et documentation internes à jour;
|
||||
|
||||
- état périodique de la conformité des plateformes.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3.2 Audits d'accessibilité
|
||||
|
||||
Effectuer des audits périodiques des principales plateformes numériques.
|
||||
|
||||
**Fréquence cible : tous les 2 à 3 mois par plateforme.**
|
||||
|
||||
Les audits comprennent notamment :
|
||||
|
||||
- tests automatisés;
|
||||
|
||||
- tests manuels;
|
||||
|
||||
- navigation au clavier;
|
||||
|
||||
- structure HTML;
|
||||
|
||||
- formulaires;
|
||||
|
||||
- contrastes;
|
||||
|
||||
- composants interactifs;
|
||||
|
||||
- navigation;
|
||||
|
||||
- utilisation des attributs ARIA lorsque nécessaire;
|
||||
|
||||
- autres critères WCAG applicables.
|
||||
|
||||
|
||||
### Livrables
|
||||
|
||||
Pour chaque audit :
|
||||
|
||||
- rapport d'accessibilité;
|
||||
|
||||
- problèmes identifiés;
|
||||
|
||||
- niveau de sévérité;
|
||||
|
||||
- recommandations;
|
||||
|
||||
- suivi des problèmes précédemment identifiés.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3.3 Accessibilité dans les projets
|
||||
|
||||
L'accessibilité doit être considérée le plus tôt possible dans les projets et non uniquement lors de la validation finale.
|
||||
|
||||
### Avant le développement
|
||||
|
||||
- Participer à l'analyse des nouvelles fonctionnalités.
|
||||
|
||||
- Réviser les maquettes et spécifications lorsque pertinent.
|
||||
|
||||
- Identifier les risques d'accessibilité.
|
||||
|
||||
- Proposer des solutions ou alternatives.
|
||||
|
||||
|
||||
### Pendant le développement
|
||||
|
||||
- Participer aux rencontres pertinentes avec les fournisseurs.
|
||||
|
||||
- Répondre aux questions d'accessibilité.
|
||||
|
||||
- Identifier rapidement les décisions pouvant créer des problèmes de conformité.
|
||||
|
||||
- Accompagner les développeurs dans l'interprétation des standards.
|
||||
|
||||
|
||||
### Avant ou après livraison
|
||||
|
||||
- Effectuer une validation d'accessibilité.
|
||||
|
||||
- Documenter les problèmes identifiés.
|
||||
|
||||
- Confirmer les corrections lorsque nécessaire.
|
||||
|
||||
- Maintenir le suivi des éléments non corrigés.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3.4 Gestion des risques d'accessibilité
|
||||
|
||||
Tous les problèmes d'accessibilité n'ont pas le même impact.
|
||||
|
||||
Les problèmes devraient être classifiés afin de faciliter les décisions de livraison.
|
||||
|
||||
### Critique
|
||||
|
||||
Obstacle important empêchant certains utilisateurs d'accéder à une fonctionnalité essentielle.
|
||||
|
||||
**Attente : correction avant livraison lorsque possible.**
|
||||
|
||||
### Majeur
|
||||
|
||||
Problème significatif de conformité ou d'expérience utilisateur.
|
||||
|
||||
**Attente : correction planifiée et suivie.**
|
||||
|
||||
### Mineur
|
||||
|
||||
Problème ayant un impact limité.
|
||||
|
||||
**Attente : ajout au backlog et priorisation selon la capacité.**
|
||||
|
||||
Lorsqu'un problème important demeure au moment d'une livraison, le risque doit être documenté et connu des responsables du produit.
|
||||
|
||||
---
|
||||
|
||||
# 4. SEO
|
||||
|
||||
## 4.1 Surveillance de la santé SEO
|
||||
|
||||
Effectuer une surveillance régulière de la santé SEO des plateformes.
|
||||
|
||||
Analyser notamment :
|
||||
|
||||
- Google Search Console;
|
||||
|
||||
- indexation des pages;
|
||||
|
||||
- erreurs d'exploration;
|
||||
|
||||
- sitemap;
|
||||
|
||||
- robots.txt;
|
||||
|
||||
- données structurées;
|
||||
|
||||
- Core Web Vitals;
|
||||
|
||||
- performance Web;
|
||||
|
||||
- structure HTML;
|
||||
|
||||
- liens internes;
|
||||
|
||||
- redirections;
|
||||
|
||||
- pages 404;
|
||||
|
||||
- canonicalisation;
|
||||
|
||||
- autres éléments techniques pouvant affecter la découvrabilité.
|
||||
|
||||
|
||||
### Livrables
|
||||
|
||||
- état de santé SEO;
|
||||
|
||||
- problèmes techniques identifiés;
|
||||
|
||||
- recommandations;
|
||||
|
||||
- tickets techniques lorsque des corrections sont nécessaires.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4.2 Performance et visibilité SEO
|
||||
|
||||
Suivre l'évolution de la visibilité organique.
|
||||
|
||||
Analyser notamment :
|
||||
|
||||
- évolution du trafic organique;
|
||||
|
||||
- impressions;
|
||||
|
||||
- clics;
|
||||
|
||||
- CTR;
|
||||
|
||||
- requêtes importantes;
|
||||
|
||||
- pages les plus visibles;
|
||||
|
||||
- pertes ou gains de visibilité;
|
||||
|
||||
- opportunités de croissance;
|
||||
|
||||
- anomalies.
|
||||
|
||||
|
||||
### Livrable
|
||||
|
||||
**Rapport SEO mensuel ou trimestriel** présentant :
|
||||
|
||||
- principales évolutions;
|
||||
|
||||
- problèmes détectés;
|
||||
|
||||
- opportunités;
|
||||
|
||||
- recommandations;
|
||||
|
||||
- actions proposées.
|
||||
|
||||
|
||||
Le rapport ne doit pas uniquement présenter des données. Il doit fournir une **lecture des résultats et des recommandations**.
|
||||
|
||||
---
|
||||
|
||||
## 4.3 Recommandations SEO
|
||||
|
||||
À partir des données disponibles, identifier de façon proactive les opportunités.
|
||||
|
||||
Exemples :
|
||||
|
||||
- opportunités de mots-clés;
|
||||
|
||||
- contenus pouvant être optimisés;
|
||||
|
||||
- pages nécessitant une meilleure structure;
|
||||
|
||||
- problèmes d'indexation;
|
||||
|
||||
- améliorations du maillage interne;
|
||||
|
||||
- optimisation des titres et métadonnées;
|
||||
|
||||
- recommandations pour les campagnes;
|
||||
|
||||
- optimisation des contenus vidéo;
|
||||
|
||||
- opportunités liées aux moteurs de recherche et plateformes émergentes.
|
||||
|
||||
|
||||
L'objectif n'est pas uniquement de répondre aux demandes, mais également de **faire émerger des recommandations à partir des données**.
|
||||
|
||||
---
|
||||
|
||||
## 4.4 Veille SEO, AEO, GEO et IA
|
||||
|
||||
Suivre l'évolution des pratiques de découvrabilité numérique :
|
||||
|
||||
- évolution des moteurs de recherche;
|
||||
|
||||
- changements importants des algorithmes;
|
||||
|
||||
- AEO;
|
||||
|
||||
- GEO;
|
||||
|
||||
- moteurs et assistants utilisant les LLM;
|
||||
|
||||
- évolution des résultats enrichis;
|
||||
|
||||
- nouvelles pratiques de données structurées;
|
||||
|
||||
- impacts potentiels de l'IA sur la découvrabilité des contenus.
|
||||
|
||||
|
||||
### Livrable
|
||||
|
||||
Lorsque pertinent :
|
||||
|
||||
> **Changement observé → impact potentiel → recommandation → action proposée.**
|
||||
|
||||
---
|
||||
|
||||
# 5. Accompagnement des équipes
|
||||
|
||||
## 5.1 Marketing et contenu
|
||||
|
||||
Accompagner les équipes responsables du contenu sur :
|
||||
|
||||
- recherche et analyse de mots-clés;
|
||||
|
||||
- structure des contenus;
|
||||
|
||||
- titres;
|
||||
|
||||
- descriptions;
|
||||
|
||||
- liens;
|
||||
|
||||
- optimisation des pages;
|
||||
|
||||
- bonnes pratiques SEO;
|
||||
|
||||
- bonnes pratiques d'accessibilité;
|
||||
|
||||
- optimisation des campagnes lorsque pertinent.
|
||||
|
||||
|
||||
Le Chargé de stratégie numérique fournit les **standards, analyses et recommandations**.
|
||||
|
||||
Les équipes responsables du contenu effectuent la **production et la saisie du contenu et des métadonnées**.
|
||||
|
||||
---
|
||||
|
||||
## 5.2 Développeurs et fournisseurs
|
||||
|
||||
Accompagner les équipes techniques sur :
|
||||
|
||||
- architecture SEO;
|
||||
|
||||
- HTML sémantique;
|
||||
|
||||
- accessibilité des composants;
|
||||
|
||||
- JavaScript et accessibilité;
|
||||
|
||||
- performance Web;
|
||||
|
||||
- données structurées;
|
||||
|
||||
- indexation;
|
||||
|
||||
- standards WCAG.
|
||||
|
||||
|
||||
Le Chargé de stratégie numérique identifie les besoins et valide les résultats.
|
||||
|
||||
Les fournisseurs et développeurs sont responsables de l'implémentation technique.
|
||||
|
||||
---
|
||||
|
||||
# 6. Formation et documentation
|
||||
|
||||
Maintenir et partager les bonnes pratiques avec les équipes.
|
||||
|
||||
### Activités
|
||||
|
||||
- formations internes;
|
||||
|
||||
- documentation;
|
||||
|
||||
- guides SEO;
|
||||
|
||||
- guides d'accessibilité;
|
||||
|
||||
- checklists pour les projets;
|
||||
|
||||
- recommandations aux fournisseurs;
|
||||
|
||||
- séances d'accompagnement avec Marketing ou les équipes de contenu.
|
||||
|
||||
|
||||
### Objectif
|
||||
|
||||
Réduire progressivement les problèmes en intégrant les bonnes pratiques **avant le développement ou la publication**, plutôt que de les détecter uniquement après coup.
|
||||
|
||||
---
|
||||
|
||||
# 7. Cycle de travail proposé
|
||||
|
||||
Afin de rendre le rôle, les contributions et les résultats plus visibles, mettre en place un cycle récurrent.
|
||||
|
||||
## Mensuellement
|
||||
|
||||
### SEO
|
||||
|
||||
- analyser Google Search Console;
|
||||
|
||||
- surveiller l'indexation;
|
||||
|
||||
- analyser les principales variations de visibilité;
|
||||
|
||||
- vérifier les problèmes techniques;
|
||||
|
||||
- créer et suivre les tickets nécessaires;
|
||||
|
||||
- identifier les opportunités SEO;
|
||||
|
||||
- présenter les constats nécessitant une action.
|
||||
|
||||
|
||||
### Accessibilité
|
||||
|
||||
- suivre les problèmes ouverts;
|
||||
|
||||
- suivre les corrections;
|
||||
|
||||
- identifier les risques sur les projets en cours.
|
||||
|
||||
|
||||
### Projets
|
||||
|
||||
- participer aux projets nécessitant une expertise SEO/accessibilité;
|
||||
|
||||
- suivre les recommandations transmises aux fournisseurs.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Tous les 2 à 3 mois
|
||||
|
||||
- effectuer les audits d'accessibilité prévus;
|
||||
|
||||
- réaliser une analyse technique SEO approfondie;
|
||||
|
||||
- analyser les tendances de visibilité;
|
||||
|
||||
- revoir les recommandations en attente;
|
||||
|
||||
- identifier les prochaines priorités.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Trimestriellement
|
||||
|
||||
Présenter une synthèse permettant de répondre à :
|
||||
|
||||
- Qu'est-ce qui a évolué?
|
||||
|
||||
- Quels sont les principaux risques?
|
||||
|
||||
- Quelles opportunités avons-nous identifiées?
|
||||
|
||||
- Qu'avons-nous corrigé?
|
||||
|
||||
- Qu'est-ce qui reste à corriger?
|
||||
|
||||
- Quelles sont les prochaines priorités recommandées?
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Annuellement
|
||||
|
||||
- revoir les obligations LAPHO;
|
||||
|
||||
- revoir les standards WCAG applicables;
|
||||
|
||||
- mettre à jour les standards internes;
|
||||
|
||||
- produire un bilan de l'évolution de l'accessibilité;
|
||||
|
||||
- produire un bilan SEO;
|
||||
|
||||
- identifier les priorités de l'année suivante.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 8. Répartition des responsabilités SEO
|
||||
|
||||
Une distinction claire est nécessaire entre **stratégie, contenu et implémentation**.
|
||||
|
||||
|Responsabilité|Stratégie numérique|Marketing / Contenu|Fournisseur / Dev|
|
||||
|---|:-:|:-:|:-:|
|
||||
|Analyse SEO|✓|||
|
||||
|Audit technique|✓|||
|
||||
|Analyse mots-clés|✓|Participation||
|
||||
|Identification des opportunités|✓|Participation||
|
||||
|Recommandations SEO|✓|Participation||
|
||||
|Définition des standards|✓||Participation|
|
||||
|Stratégie éditoriale|Support|✓||
|
||||
|Création du contenu||✓||
|
||||
|Saisie des métadonnées|Standards / recommandations|✓||
|
||||
|Implémentation technique|Validation||✓|
|
||||
|Correction des problèmes techniques|Validation||✓|
|
||||
|Mesure des résultats|✓|Participation||
|
||||
|
||||
---
|
||||
|
||||
# 9. Indicateurs permettant de rendre le travail visible
|
||||
|
||||
L'objectif n'est pas de mesurer uniquement le volume d'activité, mais également la **couverture, les résultats et l'évolution des risques**.
|
||||
|
||||
## Accessibilité
|
||||
|
||||
- % des plateformes auditées selon le calendrier prévu;
|
||||
|
||||
- nombre de problèmes critiques / majeurs / mineurs;
|
||||
|
||||
- évolution des problèmes ouverts;
|
||||
|
||||
- nombre de problèmes corrigés;
|
||||
|
||||
- % des projets importants évalués;
|
||||
|
||||
- évolution du niveau de conformité.
|
||||
|
||||
|
||||
## SEO
|
||||
|
||||
- évolution de la visibilité organique;
|
||||
|
||||
- évolution des impressions et clics;
|
||||
|
||||
- état de l'indexation;
|
||||
|
||||
- Core Web Vitals;
|
||||
|
||||
- problèmes techniques détectés;
|
||||
|
||||
- problèmes techniques corrigés;
|
||||
|
||||
- recommandations émises;
|
||||
|
||||
- recommandations implémentées.
|
||||
|
||||
|
||||
## Force de proposition
|
||||
|
||||
- principales opportunités identifiées;
|
||||
|
||||
- recommandations stratégiques proposées;
|
||||
|
||||
- recommandations retenues;
|
||||
|
||||
- résultats des recommandations mises en œuvre;
|
||||
|
||||
- capacité à identifier les enjeux avant qu'ils deviennent des demandes ou des problèmes.
|
||||
|
||||
|
||||
## Accompagnement
|
||||
|
||||
- projets accompagnés;
|
||||
|
||||
- analyses réalisées;
|
||||
|
||||
- formations effectuées;
|
||||
|
||||
- recommandations importantes émises;
|
||||
|
||||
- risques identifiés avant développement.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 10. Résultat attendu du rôle
|
||||
|
||||
Le rôle ne devrait pas être évalué simplement sur :
|
||||
|
||||
> « Est-ce qu'il fait du SEO ou des tests d'accessibilité? »
|
||||
|
||||
Il devrait permettre à l'organisation de répondre en permanence à cinq questions :
|
||||
|
||||
1. **Nos plateformes respectent-elles nos obligations d'accessibilité?**
|
||||
|
||||
2. **Quels sont actuellement nos principaux risques d'accessibilité?**
|
||||
|
||||
3. **Nos plateformes sont-elles techniquement optimisées pour être découvertes?**
|
||||
|
||||
4. **Où perdons-nous de la visibilité et où avons-nous des opportunités?**
|
||||
|
||||
5. **Quelles actions devrions-nous prioriser maintenant?**
|
||||
|
||||
|
||||
Le Chargé de stratégie numérique est responsable de fournir cette visibilité, d'identifier les actions nécessaires et d'accompagner leur réalisation.
|
||||
|
||||
Le succès du rôle devrait progressivement faire évoluer la discussion de :
|
||||
|
||||
> « Qu'est-ce qu'on devrait demander au responsable SEO/accessibilité? »
|
||||
|
||||
vers :
|
||||
|
||||
> **« Qu'est-ce que notre analyse SEO/accessibilité nous recommande de prioriser actuellement? »**
|
||||
|
||||
---
|
||||
|
||||
# 11. Points à valider avec le CTO
|
||||
|
||||
Cette proposition nécessite de s'entendre notamment sur :
|
||||
|
||||
- le niveau de responsabilité du rôle concernant la conformité LAPHO;
|
||||
|
||||
- la fréquence officielle des audits d'accessibilité;
|
||||
|
||||
- les critères pouvant bloquer une livraison;
|
||||
|
||||
- le processus d'acceptation d'un risque d'accessibilité;
|
||||
|
||||
- la fréquence du reporting SEO;
|
||||
|
||||
- les plateformes et indicateurs SEO à surveiller;
|
||||
|
||||
- le niveau de proactivité attendu concernant les recommandations;
|
||||
|
||||
- la responsabilité respective de Stratégie numérique, Marketing et des fournisseurs;
|
||||
|
||||
- le mécanisme de priorisation des recommandations et tickets;
|
||||
|
||||
- la façon de rendre les activités et résultats visibles auprès de la direction;
|
||||
|
||||
- le cycle de présentation des priorités SEO/accessibilité.
|
||||
+567
@@ -0,0 +1,567 @@
|
||||
---
|
||||
|
||||
type: idea
|
||||
status: exploring
|
||||
created: 2026-09-16
|
||||
tags:
|
||||
|
||||
- seo
|
||||
|
||||
- accessibilite
|
||||
|
||||
- strategie-numerique
|
||||
|
||||
- roles
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
## TL;DR
|
||||
|
||||
Le Chargé de stratégie numérique ne fonctionne pas uniquement à partir des demandes reçues.
|
||||
|
||||
Son travail repose sur un **cycle continu de surveillance, analyse, recommandation, suivi et validation** de la santé SEO et de l'accessibilité de nos plateformes.
|
||||
|
||||
Même en l'absence de nouveaux projets ou de demandes provenant des autres équipes, il doit avoir un backlog permanent alimenté par :
|
||||
|
||||
- les données SEO;
|
||||
|
||||
- les audits d'accessibilité;
|
||||
|
||||
- les problèmes déjà identifiés;
|
||||
|
||||
- les évolutions de nos plateformes;
|
||||
|
||||
- les recommandations en attente;
|
||||
|
||||
- les changements réglementaires;
|
||||
|
||||
- les évolutions des moteurs de recherche et technologies de découvrabilité.
|
||||
|
||||
|
||||
Son travail doit permettre de répondre régulièrement à :
|
||||
|
||||
> **Qu'est-ce qui fonctionne? Qu'est-ce qui se dégrade? Quels sont nos risques? Où sont les opportunités? Qu'est-ce qu'on recommande de faire maintenant?**
|
||||
|
||||
---
|
||||
|
||||
# 1. Cycle opérationnel
|
||||
|
||||
Le fonctionnement attendu suit généralement ce cycle :
|
||||
|
||||
> **Surveiller → Détecter → Analyser → Recommander → Prioriser → Faire réaliser → Valider → Mesurer**
|
||||
|
||||
Le Chargé de stratégie numérique n'est pas nécessairement celui qui implémente les changements.
|
||||
|
||||
Il est responsable d'identifier les besoins, de formuler les recommandations, de les transmettre aux bonnes équipes et d'en assurer le suivi.
|
||||
|
||||
---
|
||||
|
||||
# 2. Activités quotidiennes / continues
|
||||
|
||||
Il ne s'agit pas nécessairement d'activités devant être réalisées chaque jour, mais d'un ensemble de travaux qui constituent le backlog permanent du rôle.
|
||||
|
||||
## SEO – Surveillance et amélioration de la visibilité
|
||||
|
||||
Assurer une surveillance régulière de la **visibilité de nos sites dans les moteurs de recherche** et identifier les actions permettant de l'améliorer.
|
||||
|
||||
Concrètement :
|
||||
|
||||
- Vérifier que nos sites et nos contenus sont correctement trouvés et référencés par les moteurs de recherche.
|
||||
|
||||
- Surveiller si certains contenus gagnent ou perdent de la visibilité.
|
||||
|
||||
- Identifier les problèmes techniques qui empêchent ou limitent la découverte de nos contenus.
|
||||
|
||||
- Analyser les données pour comprendre les baisses ou changements importants de performance.
|
||||
|
||||
- Identifier les contenus et sujets pour lesquels nous avons des opportunités d'améliorer notre présence.
|
||||
|
||||
- Comparer les résultats dans le temps afin de déterminer si les actions mises en place fonctionnent.
|
||||
|
||||
- Formuler des recommandations concrètes aux équipes concernées.
|
||||
|
||||
- Faire créer les correctifs techniques nécessaires et en assurer le suivi avec les fournisseurs.
|
||||
|
||||
- Vérifier après correction que le problème est réglé et mesurer le résultat.
|
||||
|
||||
|
||||
### Résultat attendu
|
||||
|
||||
Le Chargé doit pouvoir régulièrement présenter une lecture simple de la situation :
|
||||
|
||||
> **« Notre visibilité est stable globalement, mais nous perdons du terrain sur X. Nous avons également identifié une opportunité sur Y et un problème technique limite la visibilité de Z. Je recommande ces actions. »**
|
||||
|
||||
Les outils comme Google Search Console et les indicateurs techniques servent à réaliser cette analyse; **ils ne constituent pas le résultat du travail**.
|
||||
|
||||
|
||||
### Lorsqu'un problème est identifié
|
||||
|
||||
> Problème détecté → analyse → impact → recommandation → ticket/action → suivi → validation → mesure.
|
||||
|
||||
---
|
||||
|
||||
## Accessibilité – Suivi
|
||||
|
||||
- Suivre les problèmes d'accessibilité ouverts.
|
||||
|
||||
- Vérifier les corrections livrées.
|
||||
|
||||
- Retester les éléments corrigés.
|
||||
|
||||
- Documenter les résultats.
|
||||
|
||||
- Maintenir le backlog d'accessibilité.
|
||||
|
||||
- Identifier les problèmes récurrents.
|
||||
|
||||
- Répondre aux questions techniques provenant des équipes ou fournisseurs.
|
||||
|
||||
- Faire remonter rapidement les risques importants.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Tickets et recommandations
|
||||
|
||||
- Créer les tickets nécessaires lorsqu'un problème technique est identifié.
|
||||
|
||||
- Documenter clairement :
|
||||
|
||||
- le problème;
|
||||
|
||||
- son impact;
|
||||
|
||||
- le comportement attendu;
|
||||
|
||||
- la recommandation;
|
||||
|
||||
- le niveau de priorité.
|
||||
|
||||
- Répondre aux questions des développeurs/fournisseurs.
|
||||
|
||||
- Suivre les tickets jusqu'à leur résolution.
|
||||
|
||||
- Valider les corrections.
|
||||
|
||||
- Fermer ou documenter les éléments demeurant en attente.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 3. Activités hebdomadaires
|
||||
|
||||
## Revue SEO
|
||||
|
||||
Effectuer une revue des principaux indicateurs et événements de la semaine.
|
||||
|
||||
Examiner notamment :
|
||||
|
||||
- anomalies de visibilité;
|
||||
|
||||
- nouvelles erreurs Search Console;
|
||||
|
||||
- problèmes d'indexation;
|
||||
|
||||
- pages ayant connu des variations importantes;
|
||||
|
||||
- problèmes techniques;
|
||||
|
||||
- opportunités émergentes;
|
||||
|
||||
- tickets SEO ouverts.
|
||||
|
||||
|
||||
### Résultat attendu
|
||||
|
||||
À la fin de la revue :
|
||||
|
||||
> **Rien de significatif à signaler**
|
||||
|
||||
ou
|
||||
|
||||
> **Voici ce qui nécessite notre attention et ce que je recommande.**
|
||||
|
||||
L'absence de problème est donc également le résultat d'une surveillance effectuée.
|
||||
|
||||
---
|
||||
|
||||
## Revue du backlog SEO/accessibilité
|
||||
|
||||
Maintenir une liste de travail active comprenant :
|
||||
|
||||
- problèmes à analyser;
|
||||
|
||||
- recommandations à approfondir;
|
||||
|
||||
- tickets à créer;
|
||||
|
||||
- tickets en attente du fournisseur;
|
||||
|
||||
- corrections à valider;
|
||||
|
||||
- opportunités SEO;
|
||||
|
||||
- audits à préparer;
|
||||
|
||||
- documentation à mettre à jour;
|
||||
|
||||
- actions réglementaires à effectuer.
|
||||
|
||||
|
||||
Le backlog doit permettre de savoir **sur quoi le Chargé travaille actuellement et ce qui vient ensuite**.
|
||||
|
||||
---
|
||||
|
||||
## Suivi des fournisseurs
|
||||
|
||||
Pour les projets actifs :
|
||||
|
||||
- revoir les changements prévus;
|
||||
|
||||
- analyser les impacts SEO/accessibilité;
|
||||
|
||||
- répondre aux questions;
|
||||
|
||||
- documenter les recommandations;
|
||||
|
||||
- suivre les problèmes identifiés;
|
||||
|
||||
- vérifier l'état des corrections;
|
||||
|
||||
- préparer les validations nécessaires.
|
||||
|
||||
|
||||
La participation aux rencontres fournisseurs est un **moyen**, et non le livrable.
|
||||
|
||||
Le résultat attendu est :
|
||||
|
||||
> **Risques identifiés → recommandations transmises → corrections suivies → résultat validé.**
|
||||
|
||||
---
|
||||
|
||||
# 4. Activités mensuelles
|
||||
|
||||
## Analyse de performance SEO
|
||||
|
||||
Produire une analyse permettant de comprendre l'évolution de la découvrabilité de nos plateformes.
|
||||
|
||||
Examiner notamment :
|
||||
|
||||
- trafic organique;
|
||||
|
||||
- impressions;
|
||||
|
||||
- clics;
|
||||
|
||||
- CTR;
|
||||
|
||||
- requêtes importantes;
|
||||
|
||||
- pages importantes;
|
||||
|
||||
- gains et pertes de visibilité;
|
||||
|
||||
- indexation;
|
||||
|
||||
- problèmes techniques;
|
||||
|
||||
- Core Web Vitals lorsque pertinent.
|
||||
|
||||
|
||||
L'analyse ne doit pas être uniquement descriptive.
|
||||
|
||||
Elle doit répondre à :
|
||||
|
||||
> **Qu'est-ce que ces données signifient et devons-nous faire quelque chose?**
|
||||
|
||||
---
|
||||
|
||||
## Recommandations SEO
|
||||
|
||||
À partir des analyses du mois :
|
||||
|
||||
- identifier les principales opportunités;
|
||||
|
||||
- identifier les problèmes nécessitant une intervention;
|
||||
|
||||
- proposer les actions;
|
||||
|
||||
- déterminer quelles équipes doivent intervenir;
|
||||
|
||||
- créer les tickets lorsque nécessaire;
|
||||
|
||||
- suivre les recommandations précédentes.
|
||||
|
||||
|
||||
### Exemple
|
||||
|
||||
> **Constat :** les pages X perdent de la visibilité.
|
||||
>
|
||||
> **Analyse :** Google indexe correctement les pages, mais leur position moyenne diminue sur plusieurs requêtes importantes.
|
||||
>
|
||||
> **Recommandation :** revoir la structure du contenu et le maillage interne.
|
||||
>
|
||||
> **Action :** analyse des principales pages + recommandations à l'équipe contenu.
|
||||
|
||||
---
|
||||
|
||||
## État de l'accessibilité
|
||||
|
||||
Maintenir une vue globale comprenant :
|
||||
|
||||
- problèmes critiques ouverts;
|
||||
|
||||
- problèmes majeurs ouverts;
|
||||
|
||||
- corrections effectuées;
|
||||
|
||||
- corrections en attente;
|
||||
|
||||
- validations réalisées;
|
||||
|
||||
- audits prévus;
|
||||
|
||||
- risques associés aux projets actifs.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 5. Activités tous les 2 à 3 mois
|
||||
|
||||
## Audits d'accessibilité
|
||||
|
||||
Effectuer les audits planifiés des plateformes.
|
||||
|
||||
Pour chaque plateforme :
|
||||
|
||||
- effectuer les tests automatisés;
|
||||
|
||||
- effectuer les tests manuels;
|
||||
|
||||
- tester la navigation au clavier;
|
||||
|
||||
- vérifier les principaux composants;
|
||||
|
||||
- analyser les problèmes;
|
||||
|
||||
- classifier leur sévérité;
|
||||
|
||||
- documenter les résultats;
|
||||
|
||||
- comparer avec l'audit précédent;
|
||||
|
||||
- créer les actions/tickets nécessaires.
|
||||
|
||||
|
||||
### Livrable
|
||||
|
||||
**Rapport d'audit + backlog de corrections.**
|
||||
|
||||
Un audit n'est donc pas terminé avec la production du rapport.
|
||||
|
||||
Il doit alimenter le travail des semaines suivantes :
|
||||
|
||||
> **Audit → problèmes → tickets → corrections → retests → fermeture.**
|
||||
|
||||
---
|
||||
|
||||
# 6. Activités trimestrielles
|
||||
|
||||
## Revue stratégique SEO et accessibilité
|
||||
|
||||
À partir des analyses réalisées durant le trimestre, présenter les principaux constats.
|
||||
|
||||
La revue doit répondre à quatre questions :
|
||||
|
||||
### 1. Qu'est-ce qui a changé?
|
||||
|
||||
Principales évolutions observées.
|
||||
|
||||
### 2. Quels sont nos principaux risques?
|
||||
|
||||
SEO, accessibilité, conformité ou technologie.
|
||||
|
||||
### 3. Quelles sont nos opportunités?
|
||||
|
||||
Améliorations possibles de visibilité, découvrabilité ou expérience.
|
||||
|
||||
### 4. Que recommande-t-on?
|
||||
|
||||
Principales actions à considérer pour le prochain trimestre.
|
||||
|
||||
### Posture attendue
|
||||
|
||||
> **« Voici ce que les données montrent. Nous perdons de la visibilité sur X, nous avons une opportunité sur Y et Google indexe mal Z. Je recommande qu'on travaille ces trois axes ce trimestre. »**
|
||||
|
||||
À titre indicatif, identifier **3 à 5 priorités lorsque pertinent**.
|
||||
|
||||
---
|
||||
|
||||
# 7. Travail dans les projets
|
||||
|
||||
Le Chargé de stratégie numérique intervient durant l'ensemble du cycle d'un projet lorsque celui-ci comporte des enjeux SEO ou d'accessibilité.
|
||||
|
||||
## Avant développement
|
||||
|
||||
- analyser les besoins;
|
||||
|
||||
- examiner les maquettes;
|
||||
|
||||
- examiner les spécifications;
|
||||
|
||||
- identifier les risques SEO;
|
||||
|
||||
- identifier les risques d'accessibilité;
|
||||
|
||||
- proposer des ajustements avant développement.
|
||||
|
||||
|
||||
## Pendant le développement
|
||||
|
||||
- participer aux échanges pertinents avec les fournisseurs;
|
||||
|
||||
- répondre aux questions;
|
||||
|
||||
- analyser les choix techniques ayant un impact SEO/accessibilité;
|
||||
|
||||
- identifier rapidement les problèmes;
|
||||
|
||||
- documenter les recommandations.
|
||||
|
||||
|
||||
## Avant livraison
|
||||
|
||||
- effectuer les validations pertinentes;
|
||||
|
||||
- documenter les problèmes;
|
||||
|
||||
- classifier les problèmes d'accessibilité;
|
||||
|
||||
- identifier les éléments devant être corrigés;
|
||||
|
||||
- documenter les risques acceptés lorsque nécessaire.
|
||||
|
||||
|
||||
## Après livraison
|
||||
|
||||
- effectuer les validations finales nécessaires;
|
||||
|
||||
- vérifier l'indexation lorsque pertinent;
|
||||
|
||||
- suivre les problèmes demeurés ouverts;
|
||||
|
||||
- mesurer les impacts lorsque pertinent.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 8. Accompagnement Marketing et contenu
|
||||
|
||||
Le Chargé de stratégie numérique accompagne les équipes plutôt que d'attendre qu'elles arrivent avec une demande SEO complètement définie.
|
||||
|
||||
Il doit pouvoir :
|
||||
|
||||
- analyser les opportunités de mots-clés;
|
||||
|
||||
- recommander des améliorations de contenu;
|
||||
|
||||
- recommander des structures de pages;
|
||||
|
||||
- proposer des optimisations de titres et descriptions;
|
||||
|
||||
- identifier les opportunités de maillage interne;
|
||||
|
||||
- fournir des recommandations pour les campagnes;
|
||||
|
||||
- accompagner l'optimisation des contenus vidéo;
|
||||
|
||||
- expliquer les bonnes pratiques SEO;
|
||||
|
||||
- fournir des standards réutilisables.
|
||||
|
||||
|
||||
Marketing et contenu demeurent responsables des objectifs éditoriaux et de la création du contenu.
|
||||
|
||||
La saisie de métadonnées est une **activité d'implémentation du contenu**, et non la responsabilité stratégique SEO.
|
||||
|
||||
---
|
||||
|
||||
# 9. Veille technologique
|
||||
|
||||
Maintenir une veille sur les changements pouvant avoir un impact sur nos plateformes.
|
||||
|
||||
Notamment :
|
||||
|
||||
- évolution de Google Search;
|
||||
|
||||
- changements importants d'algorithmes;
|
||||
|
||||
- Search Console;
|
||||
|
||||
- données structurées;
|
||||
|
||||
- AEO;
|
||||
|
||||
- GEO;
|
||||
|
||||
- découvrabilité via les moteurs utilisant l'IA/LLM;
|
||||
|
||||
- nouvelles pratiques SEO;
|
||||
|
||||
- évolution des WCAG;
|
||||
|
||||
- technologies d'accessibilité.
|
||||
|
||||
|
||||
La veille ne doit pas se limiter à lire de l'information.
|
||||
|
||||
Lorsqu'un changement est pertinent pour l'organisation :
|
||||
|
||||
> **Changement → impact potentiel pour TFO → recommandation → action si nécessaire.**
|
||||
|
||||
---
|
||||
|
||||
# 10. Réglementation et conformité
|
||||
|
||||
## Accessibilité
|
||||
|
||||
- surveiller les communications réglementaires pertinentes;
|
||||
|
||||
- suivre les obligations applicables;
|
||||
|
||||
- analyser les changements;
|
||||
|
||||
- déterminer les impacts sur l'organisation;
|
||||
|
||||
- coordonner les actions nécessaires;
|
||||
|
||||
- maintenir la documentation;
|
||||
|
||||
- contribuer aux rapports ou plans réglementaires lorsque requis.
|
||||
|
||||
|
||||
## CRTC
|
||||
|
||||
- suivre les obligations et communications pertinentes au rôle;
|
||||
|
||||
- contribuer aux dossiers réglementaires sous sa responsabilité;
|
||||
|
||||
- documenter les actions requises;
|
||||
|
||||
- coordonner avec les secteurs concernés;
|
||||
|
||||
- assurer le suivi des échéances applicables.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 11. Plaintes et rétroaction accessibilité
|
||||
|
||||
Lorsqu'une plainte ou rétroaction concernant l'accessibilité est reçue :
|
||||
|
||||
- analyser la demande;
|
||||
|
||||
- déterminer si elle c
|
||||
@@ -0,0 +1,76 @@
|
||||
|
||||
# Monday, August 17th 2026
|
||||
|
||||
← [[2026-08-16]] | **Week 34** | [[20 Work/Journal/2026/2026-08-18]] →
|
||||
|
||||
---
|
||||
|
||||
## Meetings
|
||||
|
||||
- Daily avec l'équipe produit
|
||||
- Abdoulaye doit finir ses taches jira pour ce vendredi
|
||||
- On a la main sur les synchros et le fait de décaler les heures semblent stabiliser les synchros
|
||||
- 1-1 Hajar
|
||||
- 1-1 Slimane avec un gros problème d'images poster qui ont une taille bien plus petite que normalement
|
||||
|
||||
---
|
||||
|
||||
## Significant Events
|
||||
|
||||
- Fin de lecture pour WP Expert
|
||||
- [[2026-08-17 - Equipe produit]]
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
|
||||
- [[]]
|
||||
|
||||
---
|
||||
|
||||
## People / Management
|
||||
|
||||
Feedback given, coaching moments, observations.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Projects
|
||||
|
||||
Important project changes only.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Leadership Reflection
|
||||
|
||||
### What surprised me today?
|
||||
|
||||
-
|
||||
|
||||
### What did I learn today?
|
||||
|
||||
-
|
||||
|
||||
### What would I do differently next time?
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Follow-ups
|
||||
|
||||
> Only actions that still belong to me.
|
||||
> Everything else should already be in **Twos**, **Jira**, or **Monday**.
|
||||
|
||||
- [ ]
|
||||
|
||||
---
|
||||
|
||||
## Related
|
||||
|
||||
- [[]]
|
||||
@@ -0,0 +1,80 @@
|
||||
|
||||
# Tuesday, August 18th 2026
|
||||
|
||||
← [[2026-08-17]] | **Week 34** | [[2026-08-19]] →
|
||||
|
||||
---
|
||||
|
||||
## Meetings
|
||||
|
||||
- Live flux ONFR avec toutes les personnes concernées
|
||||
- Rencontre avec Libéo sur les images docker
|
||||
|
||||
---
|
||||
|
||||
## Significant Events
|
||||
|
||||
- [[2026-08-18 - Flux - Live ONFR]]
|
||||
- [[2026-08-18 - Discussion CI-CD]]
|
||||
- Plan pour les taches de Valéry [[2026-08-18 - Role - Stratégie numérique SEO et accessibilité]]
|
||||
- Started working on POC of Idello RAG again but with langflow this time
|
||||
- Je vais m'occuper de toutes les équipes pendant 2 jours (jeudi et vendredi)
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Decisions"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## People / Management
|
||||
|
||||
Feedback given, coaching moments, observations.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Projects
|
||||
|
||||
Important project changes only.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Leadership Reflection
|
||||
|
||||
### What surprised me today?
|
||||
|
||||
-
|
||||
|
||||
### What did I learn today?
|
||||
|
||||
-
|
||||
|
||||
### What would I do differently next time?
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Follow-ups
|
||||
|
||||
> Only actions that still belong to me.
|
||||
> Everything else should already be in **Twos**, **Jira**, or **Monday**.
|
||||
|
||||
- [ ]
|
||||
|
||||
---
|
||||
|
||||
## Related
|
||||
|
||||
- [[]]
|
||||
@@ -0,0 +1,85 @@
|
||||
|
||||
# Wednesday, August 19th 2026
|
||||
|
||||
← [[2026-08-18]] | **Week 34** | [[2026-08-20]] →
|
||||
|
||||
---
|
||||
|
||||
## Meetings
|
||||
|
||||
- Sharon qui me parle du projet de Jerry qu'il a fait entièrement de son coté. Je lui ai conseillé de parler à Marc sur l'impact négative sur l'équipe. A savoir que Jerry donne des idées qui ne sont pas tjrs réalisable. De plus, tout son concept ne doit être vu que comme un POC car ce ne fut jamais accepté.
|
||||
- Ticket de Théo pour synchro fixé tout seul TECH-32612
|
||||
|
||||
---
|
||||
|
||||
## Significant Events
|
||||
|
||||
- Document contractuel refusé par Wp-Expert
|
||||
- Les assurances de TFO sont d'Octobre à Octobre. Pour cette fois ci on a fait du 1 nov au 31 juillet
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Decisions"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
- [[]]
|
||||
|
||||
## Ideas
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Ideas"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## People / Management
|
||||
|
||||
Feedback given, coaching moments, observations.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Projects
|
||||
|
||||
Important project changes only.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Leadership Reflection
|
||||
|
||||
### What surprised me today?
|
||||
|
||||
-
|
||||
|
||||
### What did I learn today?
|
||||
|
||||
-
|
||||
|
||||
### What would I do differently next time?
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Follow-ups
|
||||
|
||||
> Only actions that still belong to me.
|
||||
> Everything else should already be in **Twos**, **Jira**, or **Monday**.
|
||||
|
||||
- [ ]
|
||||
|
||||
---
|
||||
|
||||
## Related
|
||||
|
||||
- [[]]
|
||||
@@ -0,0 +1,98 @@
|
||||
|
||||
# Thursday, August 20th 2026
|
||||
|
||||
← [[2026-08-19]] | **Week 34** | [[2026-08-21]] →
|
||||
|
||||
---
|
||||
|
||||
## Meetings
|
||||
|
||||
- Meeting with legal and marketing about Meta. Decision taken is to go forward with 3 admins, 2 in marketing and one in my team
|
||||
- Presented Toute une semaine workflow to Sonia and Philippe. It went well
|
||||
|
||||
---
|
||||
|
||||
## Significant Events
|
||||
|
||||
- Asked Julie Brisson if we can do Net 15 for wp-expert
|
||||
- Transcription missing from a product in Idello yet the file was correct in susbtitle colum but missing in the description one.
|
||||
- Got the data lineage for CPE / Mogador V2
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Decisions"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
- [[]]
|
||||
|
||||
## Ideas
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Ideas"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## People / Management
|
||||
|
||||
Feedback given, coaching moments, observations.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Projects
|
||||
|
||||
Important project changes only.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Leadership Reflection
|
||||
|
||||
### What surprised me today?
|
||||
|
||||
-
|
||||
|
||||
### What did I learn today?
|
||||
|
||||
-
|
||||
|
||||
### What would I do differently next time?
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Follow-ups
|
||||
|
||||
> Only actions that still belong to me.
|
||||
> Everything else should already be in **Twos**, **Jira**, or **Monday**.
|
||||
|
||||
- [ ]
|
||||
|
||||
---
|
||||
## Created Today
|
||||
|
||||
```dataview
|
||||
TABLE WITHOUT ID
|
||||
file.link AS "File",
|
||||
file.folder AS "Location"
|
||||
FROM "20 Work"
|
||||
WHERE file.cday = date(this.file.name)
|
||||
AND file.path != this.file.path
|
||||
SORT file.ctime ASC
|
||||
```
|
||||
|
||||
---
|
||||
## Related
|
||||
|
||||
- [[]]
|
||||
@@ -0,0 +1,98 @@
|
||||
|
||||
# Tuesday, September 8th 2026
|
||||
|
||||
← [[2026-09-07]] | **Week 37** | [[2026-09-11]] →
|
||||
|
||||
---
|
||||
|
||||
## Meetings
|
||||
|
||||
- all 1-1
|
||||
|
||||
---
|
||||
|
||||
## Significant Events
|
||||
|
||||
- Boukili to almost go live
|
||||
- OTT needs more test for a sign off
|
||||
- lettre de CRTC
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Decisions"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
- [[]]
|
||||
|
||||
## Ideas
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Ideas"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## People / Management
|
||||
|
||||
Feedback given, coaching moments, observations.
|
||||
|
||||
- JC overwhelmed with projects mais c'est ok, c'est plus les décisions qu'il aime pas
|
||||
|
||||
---
|
||||
|
||||
## Projects
|
||||
|
||||
Important project changes only.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Leadership Reflection
|
||||
|
||||
### What surprised me today?
|
||||
|
||||
- Too much when restarting
|
||||
|
||||
### What did I learn today?
|
||||
|
||||
- Hate coming back
|
||||
|
||||
### What would I do differently next time?
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Follow-ups
|
||||
|
||||
> Only actions that still belong to me.
|
||||
> Everything else should already be in **Twos**, **Jira**, or **Monday**.
|
||||
|
||||
- [ ]
|
||||
|
||||
---
|
||||
|
||||
## Created Today
|
||||
|
||||
```dataview
|
||||
TABLE WITHOUT ID
|
||||
file.link AS "File",
|
||||
file.folder AS "Location"
|
||||
FROM "20 Work"
|
||||
WHERE file.cday = date(this.file.name)
|
||||
AND file.path != this.file.path
|
||||
SORT file.ctime ASC
|
||||
```
|
||||
|
||||
---
|
||||
## Related
|
||||
|
||||
- [[]]
|
||||
@@ -0,0 +1,97 @@
|
||||
|
||||
# Thursday, September 10th 2026
|
||||
|
||||
← [[2026-09-09]] | **Week 37** | [[2026-09-11]] →
|
||||
|
||||
---
|
||||
|
||||
## Meetings
|
||||
|
||||
- Rencontre interne pour parler de Boukili
|
||||
|
||||
---
|
||||
|
||||
## Significant Events
|
||||
|
||||
- Email de Trings, on doit regarder la logique Algolia
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Decisions"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
- [[]]
|
||||
|
||||
## Ideas
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Ideas"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## People / Management
|
||||
|
||||
Feedback given, coaching moments, observations.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Projects
|
||||
|
||||
Important project changes only.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Leadership Reflection
|
||||
|
||||
### What surprised me today?
|
||||
|
||||
-
|
||||
|
||||
### What did I learn today?
|
||||
|
||||
-
|
||||
|
||||
### What would I do differently next time?
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Follow-ups
|
||||
|
||||
> Only actions that still belong to me.
|
||||
> Everything else should already be in **Twos**, **Jira**, or **Monday**.
|
||||
|
||||
- [ ]
|
||||
|
||||
---
|
||||
|
||||
## Created Today
|
||||
|
||||
```dataview
|
||||
TABLE WITHOUT ID
|
||||
file.link AS "File",
|
||||
file.folder AS "Location"
|
||||
FROM "20 Work"
|
||||
WHERE file.cday = date(this.file.name)
|
||||
AND file.path != this.file.path
|
||||
SORT file.ctime ASC
|
||||
```
|
||||
|
||||
---
|
||||
## Related
|
||||
|
||||
- [[]]
|
||||
@@ -0,0 +1,98 @@
|
||||
|
||||
# Friday, September 11th 2026
|
||||
|
||||
← [[2026-09-10]] | **Week 37** | [[2026-09-12]] →
|
||||
|
||||
---
|
||||
|
||||
## Meetings
|
||||
|
||||
- Rencontre interne pour parler de Boukili
|
||||
|
||||
---
|
||||
|
||||
## Significant Events
|
||||
|
||||
- Autre regression pour Trings, JC envoie un email
|
||||
- En attente d'une livraison pour Trings
|
||||
- Algolia n'a pas de relation entre lien et collection donc Trings ne peut pas faire cela sans passer par Directus.
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Decisions"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
- [[]]
|
||||
|
||||
## Ideas
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Ideas"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## People / Management
|
||||
|
||||
Feedback given, coaching moments, observations.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Projects
|
||||
|
||||
Important project changes only.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Leadership Reflection
|
||||
|
||||
### What surprised me today?
|
||||
|
||||
-
|
||||
|
||||
### What did I learn today?
|
||||
|
||||
-
|
||||
|
||||
### What would I do differently next time?
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Follow-ups
|
||||
|
||||
> Only actions that still belong to me.
|
||||
> Everything else should already be in **Twos**, **Jira**, or **Monday**.
|
||||
|
||||
- [ ]
|
||||
|
||||
---
|
||||
|
||||
## Created Today
|
||||
|
||||
```dataview
|
||||
TABLE WITHOUT ID
|
||||
file.link AS "File",
|
||||
file.folder AS "Location"
|
||||
FROM "20 Work"
|
||||
WHERE file.cday = date(this.file.name)
|
||||
AND file.path != this.file.path
|
||||
SORT file.ctime ASC
|
||||
```
|
||||
|
||||
---
|
||||
## Related
|
||||
|
||||
- [[]]
|
||||
@@ -0,0 +1,98 @@
|
||||
|
||||
# Monday, September 14th 2026
|
||||
|
||||
← [[2026-09-13]] | **Week 38** | [[2026-09-15]] →
|
||||
|
||||
---
|
||||
|
||||
## Meetings
|
||||
|
||||
- None important, was a slow day, see personal vault as that what happened
|
||||
|
||||
---
|
||||
|
||||
## Significant Events
|
||||
|
||||
- Submission to stores for OTT.
|
||||
- iOS was approved, Roku due tomorrow
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Decisions"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
- [[]]
|
||||
|
||||
## Ideas
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Ideas"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## People / Management
|
||||
|
||||
Feedback given, coaching moments, observations.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Projects
|
||||
|
||||
Important project changes only.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Leadership Reflection
|
||||
|
||||
### What surprised me today?
|
||||
|
||||
-
|
||||
|
||||
### What did I learn today?
|
||||
|
||||
-
|
||||
|
||||
### What would I do differently next time?
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Follow-ups
|
||||
|
||||
> Only actions that still belong to me.
|
||||
> Everything else should already be in **Twos**, **Jira**, or **Monday**.
|
||||
|
||||
- [ ]
|
||||
|
||||
---
|
||||
|
||||
## Created Today
|
||||
|
||||
```dataview
|
||||
TABLE WITHOUT ID
|
||||
file.link AS "File",
|
||||
file.folder AS "Location"
|
||||
FROM "20 Work"
|
||||
WHERE file.cday = date(this.file.name)
|
||||
AND file.path != this.file.path
|
||||
SORT file.ctime ASC
|
||||
```
|
||||
|
||||
---
|
||||
## Related
|
||||
|
||||
- [[]]
|
||||
@@ -0,0 +1,98 @@
|
||||
|
||||
# Tuesday, September 15th 2026
|
||||
|
||||
← [[2026-09-14]] | **Week 38** | [[2026-09-16]] →
|
||||
|
||||
---
|
||||
|
||||
## Meetings
|
||||
|
||||
- Avec Francis sur l'équipe - went well
|
||||
- Sur la visibilité des tickets jira et anomalies.
|
||||
- Xavier
|
||||
|
||||
---
|
||||
|
||||
## Significant Events
|
||||
|
||||
- Approbation de Xavier pour une collaboration avec Lunii
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Decisions"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
- [[]]
|
||||
|
||||
## Ideas
|
||||
```dataview
|
||||
LIST
|
||||
FROM "20 Work/Ideas"
|
||||
WHERE startswith(file.name, this.file.name + " - ")
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## People / Management
|
||||
|
||||
Feedback given, coaching moments, observations.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Projects
|
||||
|
||||
Important project changes only.
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Leadership Reflection
|
||||
|
||||
### What surprised me today?
|
||||
|
||||
-
|
||||
|
||||
### What did I learn today?
|
||||
|
||||
-
|
||||
|
||||
### What would I do differently next time?
|
||||
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Follow-ups
|
||||
|
||||
> Only actions that still belong to me.
|
||||
> Everything else should already be in **Twos**, **Jira**, or **Monday**.
|
||||
|
||||
- [ ]
|
||||
|
||||
---
|
||||
|
||||
## Created Today
|
||||
|
||||
```dataview
|
||||
TABLE WITHOUT ID
|
||||
file.link AS "File",
|
||||
file.folder AS "Location"
|
||||
FROM "20 Work"
|
||||
WHERE file.cday = date(this.file.name)
|
||||
AND file.path != this.file.path
|
||||
SORT file.ctime ASC
|
||||
```
|
||||
|
||||
---
|
||||
## Related
|
||||
|
||||
- [[]]
|
||||
@@ -0,0 +1,38 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-08-17
|
||||
source: Gooogle Meet
|
||||
status: inbox
|
||||
duration: 12m
|
||||
meetmic_id: D4CE24D3-24A5-40FB-88F7-7767D2B4B3FA
|
||||
---
|
||||
|
||||
|
||||
## Résumé
|
||||
- Les tests et QA pour TFO (pubs, bannières, pre rolls) sont en cours, avec une mise en ligne réussie pour ONFR malgré des anomalies liées à Mediatonik.
|
||||
- La synchro quotidienne a été déplacée à 5h30 du matin, et les paramètres du CMS permettent désormais de la modifier directement.
|
||||
- Une réunion est prévue demain pour tester un faux produit de A à Z, avec un test en production sur l’OTT.
|
||||
- Le nouveau fournisseur ONFR a un contrat du 1er septembre au 31 mars, et les modifications front-end seront limitées jusqu’au hub.
|
||||
- Les équipes de Sidlee vont finir leur mandat fin septembre.
|
||||
|
||||
## Décisions
|
||||
Aucune
|
||||
|
||||
## Actions
|
||||
- [ ] Documenter les anomalies liées à Mediatonik (à faire par Devn)
|
||||
- [ ] Refaire les tests existants suite à la livraison Boukili (à faire par Abdoulaye, Hajar)
|
||||
- [ ] Les 3 tikcets d'Abdoulaye seront fait pour ce vendredi 21 aout.
|
||||
- [ ] Préparer un test A à Z avec un faux produit, incluant l’OTT en production (à faire par l’expéditeur)
|
||||
- [ ] Valider le contrat du nouveau fournisseur ONFR (à faire par Amadou)
|
||||
|
||||
## Blocages / Risques (mes pensées)
|
||||
- Risque d’erreur de synchronisation si les heures de synchro ne sont pas ajustées correctement.
|
||||
- Risque de panique si les équipes ne sont pas informées du processus de transition de SidLee à WP-Expert.
|
||||
- Risque de changements non prévus dans le front-end, si les équipes de ONFR ne respectent pas les contraintes.
|
||||
|
||||
## À suivre
|
||||
- Test A à Z avec un faux produit (demain)
|
||||
- Validation du contrat du fournisseur ONFR
|
||||
- Documentation des anomalies liées à Mediatonik
|
||||
- Préparation du test sur l’OTT en production
|
||||
- Réunion avec les équipes de transition (Willy, SidLee, Wp-Expert)
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-08-19
|
||||
source: Gooogle Meet
|
||||
status: inbox
|
||||
duration: 21m
|
||||
meetmic_id: B0FCFDF0-5886-417C-B629-71B8896C4CDE
|
||||
---
|
||||
|
||||
# [PNUM] Daily Scrum
|
||||
|
||||
## Résumé
|
||||
- La mise en production de TFO est prévue la semaine prochaine afin de laisser du temps à Ajar pour terminer ses tests. Quelques bugs doivent encore être corrigés par les Affranchis.
|
||||
- La cause des images poster floues semble liée à un resize effectué par Louise lors de l’export. Il faut confirmer que ce comportement est intentionnel avant de le désactiver.
|
||||
- La hausse des consommations MaxMind pour Idéllo reste inexpliquée malgré la mise en place d’un cache. Les statistiques et l’impact des vidages de cache soulèvent encore des questions.
|
||||
- Le fonctionnement des deux feeds live, notamment leur usage respectif pour le site et l’OTT, doit être clarifié. Une confusion existe aussi autour du terme « live ».
|
||||
- Une bannière promotionnelle doit être rendue administrable dans WordPress. Le budget semble disponible, mais le périmètre du fournisseur actuel et du nouveau fournisseur doit être confirmé.
|
||||
|
||||
## Décisions
|
||||
- La mise en production de TFO aura lieu la semaine prochaine.
|
||||
|
||||
## Actions
|
||||
- [ ] Corriger les bugs restants avant la mise en production de TFO — Responsable : les Affranchis
|
||||
- [ ] Confirmer avec Mohamed Benyaya si le resize des images poster est intentionnel — Responsable : non précisé
|
||||
- [ ] Demander à Philippe quelle solution de cache a été implémentée pour Idéllo et MaxMind — Responsable : non précisé
|
||||
- [ ] Rencontrer Sonia et Philippe pour discuter du flux des vidéos OTT live — Échéance : demain
|
||||
- [ ] Clarifier avec Jean-Claude et Eric le rôle du deuxième feed et son usage sur le site — Responsable : non précisé
|
||||
- [ ] Préparer le dossier et l’estimation de la bannière WordPress pour présentation à Julie — Responsable : non précisé
|
||||
|
||||
## Blocages / Risques
|
||||
- Des bugs doivent être corrigés avant la mise en production de TFO.
|
||||
- La cause de la hausse des requêtes et des coûts MaxMind n’est pas identifiée. L’efficacité du cache et l’impact des vidages de cache restent incertains.
|
||||
- Le rôle du deuxième feed live et son intégration au site ne sont pas clairement définis.
|
||||
- La prise en charge de la bannière par le fournisseur actuel ou le nouveau fournisseur n’est pas tranchée.
|
||||
|
||||
## À suivre
|
||||
- Vérification de l’implémentation du cache MaxMind et analyse des requêtes Idéllo.
|
||||
- Clarification de l’architecture des feeds live avec Jean-Claude et Eric.
|
||||
- Décision de Julie concernant la réalisation de la bannière WordPress et son estimation.
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-08-20
|
||||
source: MeetMic
|
||||
status: inbox
|
||||
duration: 5m
|
||||
meetmic_id: C98BE2BB-85FE-40B2-BCB9-9545A0BE5E17
|
||||
---
|
||||
|
||||
# [PNUM] Daily Scrum
|
||||
|
||||
## Résumé
|
||||
- Des améliorations sont en cours au niveau de CNS.
|
||||
- La synchronisation du CMS fonctionne désormais automatiquement vers le staging pour les nouveaux contenus.
|
||||
- Une anomalie reste à clarifier concernant le délai de disponibilité des vidéos dans WordPress.
|
||||
- Sur Idéllo, le formulaire de contact disparu en production a été reconstruit.
|
||||
- La revue de l’après-midi sera maintenue simple, avec les membres actuels de l’équipe, compte tenu du faible volume d’évolutions.
|
||||
|
||||
## Décisions
|
||||
- Maintenir une revue simple avec les membres actuels de l’équipe.
|
||||
|
||||
## Actions
|
||||
- [ ] Vérifier les logs afin de déterminer si le CronJob de WordPress explique le décalage de disponibilité des vidéos.
|
||||
- [ ] Laisser une note à Joël concernant le problème de synchronisation vidéo.
|
||||
- [ ] Demander à Philippe un retour sur les instructions à fournir lorsque des corrections sont effectuées dans Drupal.
|
||||
- [ ] Informer Sonia et Philippe de l’analyse concernant la synchronisation des vidéos dans WordPress cet après-midi.
|
||||
|
||||
## Blocages / Risques
|
||||
- La cause du décalage signalé pour la disponibilité des vidéos dans WordPress n’est pas identifiée. Un décalage du CronJob de WordPress est envisagé, mais non confirmé.
|
||||
- Les corrections effectuées par Idéllo dans Drupal ne sont pas suffisamment documentées pour l’équipe.
|
||||
|
||||
## À suivre
|
||||
- Retour de Joël sur l’analyse des logs et du problème de synchronisation vidéo.
|
||||
- Retour de Philippe sur la documentation des corrections Drupal.
|
||||
- Suivi de la liaison à Salesforce pour les éléments transmis à Marc Beaubain.
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-08-21
|
||||
source: MeetMic
|
||||
status: inbox
|
||||
duration: 14m
|
||||
meetmic_id: 8B9B38E7-5C7B-4D6B-B317-1ABFE19FDDB4
|
||||
---
|
||||
|
||||
# [PNUM] Daily Scrum
|
||||
|
||||
## Résumé
|
||||
- Un problème de synchronisation persiste le matin, mais les changements sont présents sur staging. La mise en production de la version 1.4 pourrait résoudre les problèmes observés sur staging.
|
||||
- Marketing souhaite rendre des bandes-annonces disponibles avant la création des fiches de collection ou de produits afin de promouvoir une série à venir.
|
||||
- Une bande-annonce non liée à une collection peut être consultée via son URL, mais cette approche présente des limites fonctionnelles et ne répond pas correctement au besoin de navigation sur le site.
|
||||
- Les solutions envisagées — ajout manuel dans un héros, lien direct ou redirection vers YouTube — sont jugées trop risquées ou inadaptées, notamment pour l’OTT.
|
||||
- Le besoin de promouvoir des contenus futurs n’était pas inclus dans le périmètre initial des bandes-annonces et semble être devenu une priorité d’entreprise sans alignement suffisant entre les équipes.
|
||||
|
||||
## Décisions
|
||||
- Ne pas mettre en place maintenant de solution alternative pour les bandes-annonces futures ; ce besoin doit faire l’objet d’un projet distinct.
|
||||
- Ne pas utiliser de redirection vers YouTube pour répondre au besoin de promotion.
|
||||
- Maintenir la position selon laquelle la fonctionnalité actuelle de bandes-annonces ne doit pas être détournée pour gérer les promotions futures.
|
||||
|
||||
## Actions
|
||||
- [ ] Expliquer clairement à Julie les risques, les limites techniques et le décalage avec le périmètre initial — Responsable : non identifié
|
||||
- [ ] Remonter à Mohamed et aux autres parties prenantes le problème de communication et de priorisation entre les équipes — Responsable : non identifié
|
||||
|
||||
## Blocages / Risques
|
||||
- Une bande-annonce non liée à une collection ne s’intègre pas correctement au parcours utilisateur et peut ouvrir un lecteur sans navigation de retour.
|
||||
- La création anticipée d’une collection pourrait empêcher son affichage dans le slider de nouveautés au moment de la sortie réelle.
|
||||
- L’OTT ne dispose pas du bouton custom nécessaire pour afficher ou rediriger vers ces bandes-annonces.
|
||||
- Une solution ponctuelle risque d’entraîner des demandes récurrentes de Marketing et de créer une fonctionnalité difficile à maintenir.
|
||||
- Le besoin semble avoir été priorisé au niveau de l’entreprise sans avoir été communiqué comme une priorité lors de la conception du projet initial.
|
||||
|
||||
## À suivre
|
||||
- Définir les besoins réels de Marketing concernant les promotions futures, ainsi que la solution faisable et son mode d’implémentation.
|
||||
- Déterminer comment conserver l’affichage « nouveauté » lorsqu’une collection est créée avant la sortie du contenu.
|
||||
- Clarifier l’alignement des priorités et des attentes entre Marketing, les équipes produit et les équipes techniques.
|
||||
- Vérifier l’évolution du problème de synchronisation après la mise en production de la version 1.4.
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-08-20
|
||||
source: MeetMic
|
||||
status: inbox
|
||||
duration: 17m
|
||||
meetmic_id: 392DF839-DB46-4B09-96BA-186ADB032B85
|
||||
---
|
||||
|
||||
# Accès Important - Meta et gestion des médias sociaux
|
||||
|
||||
## Résumé
|
||||
- TFO a perdu l’accès à son Meta Business Manager après la suppression de plusieurs faux comptes d’employés, ce qui limite les opérations sur Facebook.
|
||||
- La solution temporaire discutée consiste à utiliser de vrais comptes personnels pour se connecter à la page TFO, sans les utiliser à des fins personnelles.
|
||||
- Le recours à plusieurs administrateurs est nécessaire pour éviter un point de défaillance unique, notamment en cas d’absence ou de départ d’une personne.
|
||||
- La solution Meta Work Account n’est actuellement pas disponible pour TFO et Meta n’a fourni aucun calendrier de déploiement.
|
||||
- Les accès de Floriane et Valérie via l’outil de gestion des médias sociaux ont également été interrompus après le renouvellement des connexions.
|
||||
|
||||
## Décisions
|
||||
- Mettre en place temporairement une utilisation hybride de comptes individuels réels pour accéder à la page TFO.
|
||||
- Prévoir trois administrateurs — Cindy, Joël et Kevin — et ne pas en ajouter d’autres sans validation préalable.
|
||||
- Ne pas produire de décharge distincte : les conditions d’emploi, les contrats et les politiques existantes encadrent déjà l’utilisation professionnelle des comptes.
|
||||
- Informer les RH et le syndicat par souci de transparence, sans attendre leur retour pour faire progresser les opérations.
|
||||
|
||||
## Actions
|
||||
- [ ] Préparer un courriel récapitulatif présentant la situation et la solution retenue — Responsable : Amadou
|
||||
- [ ] Informer les RH et le syndicat de la création et de l’utilisation de comptes individuels — Responsable : non identifié
|
||||
- [ ] Envoyer un message à Joël afin qu’il soit informé de la démarche — Responsable : Kevin
|
||||
- [ ] Créer les accès individuels nécessaires pour les trois administrateurs retenus — Responsable : non identifié
|
||||
- [ ] Rappeler aux personnes concernées de ne pas ajouter d’autres administrateurs à l’insu de l’équipe — Responsable : Kevin et un autre interlocuteur non identifié
|
||||
|
||||
## Blocages / Risques
|
||||
- La suppression des faux comptes a entraîné la perte de l’accès au Meta Business Manager.
|
||||
- L’accès repose actuellement sur une seule personne, créant un point de défaillance unique.
|
||||
- L’utilisation de comptes personnels comporte un risque d’accès persistant après le départ ou l’absence d’un employé.
|
||||
- Les restrictions de Meta sur les faux comptes ont déjà entraîné plusieurs suppressions et refus d’accès.
|
||||
- La solution Meta Work Account n’est pas encore disponible pour TFO.
|
||||
|
||||
## À suivre
|
||||
- Confirmer la notification des RH et du syndicat.
|
||||
- Vérifier la mise en place et la gestion des trois accès administrateurs.
|
||||
- Suivre la disponibilité éventuelle de Meta Work Account et l’évolution du support Meta.
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-09-11
|
||||
source: MeetMic
|
||||
status: inbox
|
||||
duration: 21m
|
||||
meetmic_id: 90081927-2438-4E69-ACC6-544E679F739F
|
||||
---
|
||||
|
||||
# Recording
|
||||
|
||||
## Résumé
|
||||
- La soumission ne peut pas être sécurisée dans le délai initial, car plusieurs problèmes doivent encore être corrigés et testés correctement.
|
||||
- Les principaux sujets abordés sont la migration des utilisateurs sur UAT, la fiabilité du champ de dernière activité, la migration forcée des utilisateurs multi-appareils et les tests Salesforce.
|
||||
- L’équipe de développement prévoit de terminer les corrections restantes, d’effectuer une régression complète, puis de fournir une version stable. La livraison est envisagée entre le vendredi 18 et le mercredi 23, sous réserve de confirmation.
|
||||
- Les livraisons seront mieux contrôlées afin d’éviter plusieurs versions successives et de permettre à l’équipe de test de planifier ses validations.
|
||||
|
||||
## Décisions
|
||||
- Le code sera gelé une fois les problèmes actuellement identifiés corrigés et validés.
|
||||
- Les travaux de phase 2 seront réalisés sur une branche distincte et ne seront pas intégrés à la phase 1 pendant la validation.
|
||||
- Une livraison ne sera effectuée que lorsque l’équipe de développement aura terminé ses tests et confirmé que l’équipe de réception est prête.
|
||||
|
||||
## Actions
|
||||
- [ ] Investiguer le problème de migration observé sur UAT et fournir une version stable après un nouveau cycle de tests — Responsable : équipe de développement
|
||||
- [ ] Mettre en place un mécanisme de retry pour fiabiliser la remontée de la dernière activité et examiner un indicateur de visibilité réservé aux tests — Responsable : équipe de développement
|
||||
- [ ] Organiser un échange avec Habiba afin de définir une solution robuste et suffisamment visible pour valider la dernière activité — Responsable : équipes concernées
|
||||
- [ ] Étudier avec l’agence actuelle la possibilité de déconnecter tous les utilisateurs et d’afficher un message d’obligation de mise à jour, notamment via Contentful — Responsable : Amadou et équipe concernée
|
||||
- [ ] Vérifier l’avancement des tests Salesforce avec Nicolas et Mark, puis communiquer une mise à jour — Responsable : équipe concernée
|
||||
- [ ] Confirmer par e-mail les dates de livraison jugées réalistes — Responsable : équipe de développement — Échéance : dans l’après-midi
|
||||
- [ ] Corriger les problèmes restants, effectuer une régression complète et préparer une build stable avant livraison — Responsable : équipe de développement — Échéance : entre le vendredi 18 et le mercredi 23, selon confirmation
|
||||
|
||||
## Blocages / Risques
|
||||
- Le temps disponible pour tester est insuffisant pour garantir une version solide avant soumission.
|
||||
- La migration fonctionne sur test/staging mais présente encore un problème non identifié sur UAT.
|
||||
- Le champ de dernière activité n’est pas jugé suffisamment fiable, notamment en cas d’échec réseau.
|
||||
- La stratégie de migration forcée des utilisateurs multi-appareils reste à définir et constitue un point critique pour la soumission.
|
||||
- Les tests Salesforce n’ont pas abouti et un problème de transfert de données entre parties de Salesforce est en cours d’analyse.
|
||||
- L’équipe de développement est en avance sur l’équipe de test, qui dispose encore d’un backlog de tickets à valider.
|
||||
|
||||
## À suivre
|
||||
- Confirmer la stratégie retenue pour la migration forcée et la communication aux utilisateurs.
|
||||
- Confirmer la date de livraison et le déclenchement du freeze.
|
||||
- Valider la disponibilité de l’équipe de réception avant chaque livraison.
|
||||
- Suivre les résultats des tests et de la régression complète avant la soumission.
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-08-21
|
||||
source: MeetMic
|
||||
status: inbox
|
||||
duration: 61m
|
||||
meetmic_id: B8668D71-5BEB-4766-A7B0-FE27CCF4E15E
|
||||
---
|
||||
|
||||
# Recording
|
||||
|
||||
## Résumé
|
||||
- La mise en production de tefo.org est prévue jeudi, mais pourrait être décalée en raison de bugs critiques. Elle inclut une correction de la synchronisation permettant de gérer les heures depuis le CMS.
|
||||
- Sur Idéllo, un manque d’espace disque a corrompu le cache et généré une liste d’environ 356 produits à corriger manuellement. Des épisodes présentent aussi des problèmes de transcription dans Directus.
|
||||
- Le projet OTT progresse : traduction des tags autorisée, accès à Algolia transmis et flux opérationnel documenté. La livraison complète, notamment la recherche, paraît difficile pour la première semaine de septembre.
|
||||
- Bukili doit recevoir une livraison propre après suppression des données de test. Le déploiement staging/preview/prod est défini, mais la synchronisation avec les stores et l’architecture des données restent à clarifier.
|
||||
- Un projet de refonte de la synchronisation V2 et de remplacement de Directus par des fichiers JSON sur S3 est à l’étude, avec un objectif souhaité d’implémentation dans un an, sous réserve d’approbation.
|
||||
- Le remplacement du fournisseur WordPress pour la portion ONFR est bloqué par des exigences d’assurance et de paiement net 15, avec une échéance opérationnelle au 30 septembre.
|
||||
|
||||
## Décisions
|
||||
- Le travail de traduction des tags OTT de l’anglais au français a été autorisé pour un montant de 5 000 dollars.
|
||||
- Des tests de faux événements en production seront réalisés avant le 17 septembre, avec l’objectif d’en effectuer au moins deux.
|
||||
- L’absence initiale de sous-titrage sur les vidéos provenant de l’OTT est acceptée, la version sous-titrée devant arriver le lendemain.
|
||||
- Le déploiement Bukili en production passera par un environnement de preview validé manuellement avant publication.
|
||||
- L’extension concernant l’API target 35 des stores a été approuvée jusqu’au 31 octobre.
|
||||
|
||||
## Actions
|
||||
- [ ] Rappeler aux équipes de tefo.org d’ajuster l’heure de la petite synchronisation à 55 minutes, voire 50 minutes, lors de la mise en production — Responsable : non identifié — Échéance : avant la mise en production
|
||||
- [ ] Corriger manuellement la liste d’environ 356 produits concernés par les associations de collections — Responsable : Slimane — Échéance : non mentionnée
|
||||
- [ ] Analyser les épisodes Idéllo sans transcription et identifier pourquoi le contenu présent dans Directus n’est pas renseigné dans le bon champ — Responsable : non identifié — Échéance : aujourd’hui et la semaine prochaine
|
||||
- [ ] Envoyer le rapport des produits mis en retard depuis le 1er octobre 2025 sur Slack — Responsable : non identifié — Échéance : non mentionnée
|
||||
- [ ] Tester les nouveaux builds OTT et transmettre un retour — Responsable : Jean-Claude — Échéance : non mentionnée
|
||||
- [ ] Envoyer un courriel et organiser une réunion pour fixer les dates des tests OTT en production — Responsable : non identifié — Échéance : avant le 17 septembre
|
||||
- [ ] Programmer les faux événements nécessaires aux tests OTT — Responsable : Pierre-Olivier — Échéance : avant le 17 septembre
|
||||
- [ ] Clarifier la synchronisation entre les environnements Bukili et les déploiements des stores — Responsable : Abdoulaye — Échéance : non mentionnée
|
||||
- [ ] Demander à Joël d’examiner l’alerte de fermeture liée à l’inactivité du compte SSO — Responsable : non identifié — Échéance : non mentionnée
|
||||
- [ ] Livrer la partie Bukili à Abdoulaye — Responsable : non identifié — Échéance : septembre
|
||||
- [ ] Vérifier les conditions contractuelles d’autres fournisseurs comparables à Trinx — Responsable : non identifié — Échéance : non mentionnée
|
||||
- [ ] Obtenir l’avis de Julie Brisson sur l’acceptation du paiement net 15 et faire vérifier les exigences d’assurance par le juridique — Responsable : non identifié — Échéance : non mentionnée
|
||||
|
||||
## Blocages / Risques
|
||||
- La mise en production de tefo.org peut être retardée par des bugs critiques.
|
||||
- Les problèmes de synchronisation ont déjà entraîné des contenus incomplets, notamment à cause d’un cache corrompu sur un serveur arrivé à saturation.
|
||||
- Le rapport des produits mis en retard comporte des éléments dont la source n’est pas toujours vérifiable : absence de tickets ou de conversations Slack associées.
|
||||
- Le calendrier OTT est incertain pour la recherche et d’autres fonctionnalités. Les relations entre JW Player et Algolia doivent être confirmées avant la création éventuelle d’un nouvel index.
|
||||
- L’architecture Bukili envisagée pourrait provoquer une double intégration et une perte ou une incohérence des données entre les deux méthodes d’accès.
|
||||
- La migration des mots de passe n’a été validée que sur un échantillon d’environ 1 000 utilisateurs sur 33 000.
|
||||
- Un compte lié au SSO risque d’être fermé pour inactivité après le retrait du SSO de Bukili.
|
||||
- Le fournisseur WordPress pressenti pour ONFR ne respecte pas les exigences d’assurance et demande un paiement net 15 au lieu de net 30. Son remplacement est urgent compte tenu de l’échéance du 30 septembre.
|
||||
- Le projet de remplacement de Directus et de refonte de la synchronisation aurait un impact majeur sur les sites et les données d’ABBA et nécessite d’abord une documentation complète et l’aval de Mohamed.
|
||||
|
||||
## À suivre
|
||||
- Confirmer la date effective de mise en production de tefo.org et vérifier la correction de la synchronisation.
|
||||
- Suivre la correction des produits Idéllo et l’analyse des transcriptions manquantes avec Joël.
|
||||
- Suivre les tests OTT, les nouveaux builds, la traduction des tags et la disponibilité des fonctionnalités pour septembre.
|
||||
- Définir et documenter la synchronisation de Bukili avec les stores avant la livraison propre.
|
||||
- Évaluer la solution d’architecture basée sur S3 et JSON, puis obtenir l’approbation de Mohamed avant tout prototype.
|
||||
- Obtenir les réponses de Julie Brisson et du service juridique concernant le fournisseur WordPress, et prévoir une solution de rechange si nécessaire.
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-09-10
|
||||
source: MeetMic
|
||||
status: inbox
|
||||
duration: 37m
|
||||
meetmic_id: 005E7E46-E0E4-41D6-82ED-4B799F82EF5D
|
||||
---
|
||||
|
||||
# Reunion equipe
|
||||
|
||||
## Résumé
|
||||
- La réunion a principalement porté sur la préparation de la rencontre avec Francis, prévue mardi 15 à 15 h, dans la salle Gisèle Chrétien. Chaque personne présentera brièvement ses projets, leur état d’avancement, leurs impacts et leurs dépendances.
|
||||
- La présentation des projets a été réorganisée : la documentation départementale sera rattachée à la partie plateforme plutôt qu’aux données, la gouvernance des données sera présentée comme une pratique transversale, et le projet sera nommé « projet Données FMC ».
|
||||
- Les principaux sujets data abordés sont Data Booking V3, Data Hub, Data OTT, l’intégration d’Umami et le monitoring des flux de synchronisation avec Mogador. Umami est encore au stade de mise en place des trackers, tandis que son intégration au Data Warehouse n’est pas prévue pour le prochain trimestre.
|
||||
- L’équipe a discuté de la gestion des demandes SEO, du fonctionnement des tickets Jira et du processus à appliquer pour les fichiers ZIP liés à Idéllo.
|
||||
- Plusieurs livraisons et migrations présentent des enjeux de calendrier, notamment OTT, Boukili et une livraison TFO prévue avant le 16 ou le 17.
|
||||
|
||||
## Décisions
|
||||
- La documentation départementale sera présentée dans la partie plateforme, et non dans la partie données.
|
||||
- La gouvernance des données sera présentée comme une pratique continue visant notamment une source de vérité unique dans Power BI, et non comme un projet autonome.
|
||||
- Le projet sera désigné comme « projet Données FMC » plutôt que comme un « nouveau gabarit FMC ».
|
||||
- Pour les fichiers ZIP destinés à Idéllo, chaque cours et chaque fichier ZIP devra faire l’objet d’un ticket Jira distinct. Les demandes ne seront pas traitées depuis des tickets fermés.
|
||||
- Le traitement des demandes liées aux fichiers ZIP d’Idéllo ne commencera pas avant le 12 octobre.
|
||||
- Le Snowflake de JW Player demeure la source de référence pour les données OTT pour le moment.
|
||||
|
||||
## Actions
|
||||
- [ ] Préparer la présentation des projets pour la rencontre avec Francis — Responsable : équipe — Échéance : mardi 15
|
||||
- [ ] Corriger et finaliser le document de présentation, notamment les catégories de projets — Responsable : non précisé — Échéance : avant mardi 15
|
||||
- [ ] Poursuivre la mise en place des trackers Umami avec le fournisseur — Responsable : Jean-Claude — Échéance : non précisée
|
||||
- [ ] Analyser les flux de synchronisation avec Mogador et mettre en place des alertes en cas d’échec — Responsable : Mohamed Slimane — Échéance : non précisée
|
||||
- [ ] Continuer à renseigner et mettre à jour les tickets Jira avant de commencer le traitement et lors de leur fermeture — Responsable : équipe — Échéance : non précisée
|
||||
- [ ] Créer les tickets Jira nécessaires pour chaque cours et chaque fichier ZIP destiné à Idéllo — Responsable : Jason / demandeurs concernés — Échéance : à partir du 12 octobre
|
||||
- [ ] Recompiler les fichiers ZIP reçus, puis les transmettre à Ellen Chalent pour leur mise en ligne — Responsable : équipe — Échéance : non précisée
|
||||
- [ ] Clarifier avec Julie et Carole le calendrier de livraison et de validation d’OTT — Responsable : non précisé — Échéance : non précisée
|
||||
- [ ] Effectuer des tests de régression ciblés sur la livraison TFO liée au live et au carousel — Responsable : Ajar — Échéance : avant le 16 ou le 17
|
||||
- [ ] Organiser un échange sur les recommandations de service tracking pour MAMI — Responsable : Rabiba et Amandou — Échéance : non précisée
|
||||
|
||||
## Blocages / Risques
|
||||
- La livraison OTT risque de ne pas être prête à temps en raison de régressions constatées. Une livraison le week-end pourrait être nécessaire pour viser la mise en ligne avant le 14 septembre, en vue de l’émission live du 17.
|
||||
- La migration de Boukili pourrait nécessiter deux pipelines de données en parallèle, pour Firestore et AWS, ainsi qu’une logique de fusion et de déduplication.
|
||||
- Les utilisateurs disposant de plusieurs devices risquent de perdre leur progression si certains devices continuent d’écrire dans Firestore après la migration. Une réponse de l’équipe concernée est attendue.
|
||||
- La capacité QA constitue un goulot d’étranglement, une seule personne étant affectée à quatre sites. Un QA permanent supplémentaire ou un renfort ponctuel sont envisagés.
|
||||
- Les absences prochaines d’Ajar, Jean-Claude et Joël pourraient ralentir l’équipe pendant quelques jours.
|
||||
- L’investissement à long terme dans OTT et JW Player reste incertain, le contrat JW Player arrivant à échéance dans un an.
|
||||
|
||||
## À suivre
|
||||
- Tenir la rencontre avec Francis et recueillir ses éventuelles questions sur les projets, les priorités et les besoins QA.
|
||||
- Suivre la réponse du fournisseur concernant les régressions et le calendrier de livraison OTT.
|
||||
- Clarifier le scénario de migration multi-device de Boukili avec Carole et l’équipe concernée.
|
||||
- Suivre l’analyse du document FMC et les éléments pouvant être automatisés.
|
||||
- Suivre l’intégration future des données Umami au Data Warehouse.
|
||||
- Contrôler la mise en œuvre systématique du processus de tickets Jira pour Idéllo à partir du 12 octobre.
|
||||
@@ -0,0 +1,96 @@
|
||||
|
||||
**Date:** 2026-09-10
|
||||
**Duration:** 30 min
|
||||
**Attendees:**
|
||||
|
||||
---
|
||||
|
||||
# 📢 Announcements
|
||||
|
||||
Company / Department / CTO updates
|
||||
|
||||
- Rencontre avec Francis le 15 sept
|
||||
- Chacun va présenter, on va parler des projets
|
||||
- Ticket Jira, je vois une petite amélioration mais encore du retard. Ne pas tjrs aller dans le mode execution et penser aux ticket
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
# 🔄 Operations
|
||||
|
||||
Anything affecting day-to-day operations?
|
||||
|
||||
Examples:
|
||||
- vacations
|
||||
- coverage
|
||||
- SLA concerns
|
||||
- incoming workload
|
||||
- incidents
|
||||
|
||||
- Hajar vacation
|
||||
- Jean-Claude vacation
|
||||
- Joel off
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
# 🤝 Team Coordination
|
||||
|
||||
Things that require coordination between teammates.
|
||||
|
||||
Examples:
|
||||
- handoffs
|
||||
- dependencies
|
||||
- waiting on someone
|
||||
- knowledge transfer
|
||||
- testing
|
||||
- reviews
|
||||
|
||||
| Topic | Owner(s) | Next Step |
|
||||
|--------|----------|-----------|
|
||||
| | | |
|
||||
|
||||
---
|
||||
|
||||
# ⚠️ Risks / Blockers
|
||||
|
||||
Only blockers that need team visibility or help.
|
||||
|
||||
| Risk | Owner | Action |
|
||||
| ----------------------------------- | ----- | --------------------- |
|
||||
| OTT - risque de livraison en retard | JC | Waiting for Ethan |
|
||||
| Boukili | JC | En cours de livraison |
|
||||
|
||||
---
|
||||
|
||||
# ✅ Decisions
|
||||
|
||||
Only decisions affecting the team.
|
||||
|
||||
- [[2026-09-10 - Flux Zip pour les maleos qui vont sur Idello]]
|
||||
|
||||
---
|
||||
|
||||
# 👏 Recognition
|
||||
|
||||
Wins from this week.
|
||||
|
||||
-
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
# 📋 Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| ------ | ----- | --- |
|
||||
| | | |
|
||||
|
||||
---
|
||||
|
||||
# 📝 Parking Lot
|
||||
|
||||
Items requiring another discussion.
|
||||
|
||||
- Livraison TFO avant le 16 pour le live event -> Hajar va basculer
|
||||
-
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-08-17
|
||||
source: MeetMic
|
||||
status: inbox
|
||||
duration: 28m
|
||||
meetmic_id: 735EA7FB-D251-48B3-8676-9DB20DF81324
|
||||
---
|
||||
|
||||
# Boukili PROD: Alignement infra et déploiement du replicat
|
||||
|
||||
## Résumé
|
||||
- La discussion porte sur la préparation du déploiement en production de la plateforme Bookili, avec des questions sur l’état de l’environnement prod et les conditions de déploiement.
|
||||
- Le délai de livraison en prod n’est pas défini, mais les fournisseurs ont besoin de finir avant le 15 août pour préparer la rentrée scolaire.
|
||||
- L’objectif est de mettre en place un blue green deployment avec un environnement preview pour tester avant le déploiement final.
|
||||
- Le changement DNS et la migration vers un nouveau serveur (CloudFront) sont discutés, avec des inquiétudes sur la gestion des anciennes URLs et la compatibilité avec les services existants.
|
||||
- L’automatisation du déploiement est en place pour le back-end et la web app, mais il y a des incertitudes sur la gestion des compilations, des URLs et des scripts d’alimentation de la base de données.
|
||||
|
||||
## Décisions
|
||||
Aucune
|
||||
|
||||
## Actions
|
||||
- [ ] Vérifier l’état de l’environnement prod et les conditions de déploiement — Responsable : non identifié — Échéance : non définie
|
||||
- [ ] Mettre en place un environnement preview pour tester le déploiement — Responsable : non identifié — Échéance : non définie
|
||||
- [ ] Vérifier la compatibilité des URLs et des scripts d’alimentation de la base de données — Responsable : non identifié — Échéance : non définie
|
||||
|
||||
## Blocages / Risques
|
||||
- Incertitude sur la gestion des URLs et des compilations dans les environnements prod et staging.
|
||||
- Risque de conflit entre les deux environnements (prod et staging) et la gestion des migrations.
|
||||
- Risque de non-conformité avec les exigences des fournisseurs sur la gestion des URLs et des compilations.
|
||||
|
||||
## À suivre
|
||||
- Vérifier la compatibilité des URLs et des compilations dans les environnements prod et staging.
|
||||
- Mettre en place un environnement preview pour tester le déploiement.
|
||||
- Vérifier la compatibilité des scripts d’alimentation de la base de données.
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-08-21
|
||||
source: MeetMic
|
||||
status: inbox
|
||||
duration: 26m
|
||||
meetmic_id: 05BBECB0-DA30-4FFB-AC60-DFDAB75EDB87
|
||||
---
|
||||
|
||||
# Boukili : Choix de la direction visuelle pour la phase 2
|
||||
|
||||
## Résumé
|
||||
- Zemind a présenté trois thèmes pour la reconstruction et les améliorations de Boukili : sombre, violet et clair.
|
||||
- Les propositions conservent la charte graphique actuelle de Boukili tout en améliorant l’accessibilité, la navigation, les icônes et l’affichage des informations.
|
||||
- Le thème clair a été préféré pour sa lisibilité, malgré un rendu jugé trop blanc et manquant légèrement de dynamisme.
|
||||
- Des suggestions ont été formulées pour intégrer davantage les couleurs de la marque, notamment le bleu-vert de Boukili, et pour améliorer la mise en forme de certains éléments comme le tableau.
|
||||
- La version mobile présente les informations des élèves sous forme de cartes. Le défilement est prévu sur mobile, tandis que la pagination est prévue sur tablette.
|
||||
|
||||
## Décisions
|
||||
- Le thème clair est retenu comme base de travail, avec des ajustements de couleurs inspirés de la charte graphique de Boukili.
|
||||
|
||||
## Actions
|
||||
- [ ] Transmettre à Zemind les retours sur le thème clair et les suggestions de couleurs de Boukili.
|
||||
- [ ] Envoyer les codes couleurs de la charte graphique afin de faciliter les ajustements.
|
||||
- [ ] Regrouper les captures d’écran et les commentaires dans un Google Doc pour permettre les retours asynchrones.
|
||||
|
||||
## Blocages / Risques
|
||||
- La pagination sur ordinateur fait débat : elle pourrait être moins pratique que le défilement, notamment lorsque la recherche et le filtrage permettent déjà de trouver un élève.
|
||||
- Le thème clair doit être ajusté pour éviter un rendu trop blanc tout en conservant une bonne lisibilité et un contraste accessible.
|
||||
|
||||
## À suivre
|
||||
- Organiser une discussion dédiée sur la pertinence de la pagination et ses éventuelles variantes selon l’appareil.
|
||||
- Valider les ajustements visuels proposés par Zemind avant de poursuivre le développement des autres interfaces.
|
||||
- Aborder les fonctionnalités lors d’une prochaine validation.
|
||||
|
||||
### Related
|
||||
- [[2026-08-17 - Boukili PROD- Alignement infra et déploiement du replicat]]
|
||||
- [[Boukili - Choix de la direction visuelle pour la phase 2]]
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-09-10
|
||||
source: MeetMic
|
||||
status: inbox
|
||||
duration: 21m
|
||||
meetmic_id: 0D6EED25-BB8C-4366-BC07-819F4DABDB7C
|
||||
---
|
||||
|
||||
# Recording
|
||||
|
||||
## Résumé
|
||||
- La migration de Firebase vers AWS présente un risque important pour les utilisateurs connectés sur plusieurs appareils, notamment en cas de versions différentes de l’application et d’absence de synchronisation des progrès.
|
||||
- Des incertitudes persistent sur la fiabilité de la migration des données, ainsi que sur une régression liée à Salesforce et sur d’autres éléments data nécessitant une expertise technique.
|
||||
- Les livraisons fréquentes et non alignées avec le rythme de test prévu entraînent une surcharge, des tests répétés et un manque de visibilité sur l’état réel de la version.
|
||||
- L’équipe doit clarifier les points bloquants, les solutions possibles et les estimations avant de définir une nouvelle date de mise en production.
|
||||
|
||||
## Décisions
|
||||
- La mise en production prévue lundi est annulée.
|
||||
- Aucune nouvelle date de déploiement ne sera fixée avant clarification des blocages, évaluation des solutions et obtention d’estimations fiables.
|
||||
|
||||
## Actions
|
||||
- [ ] Organiser un point technique avec Abiba pour clarifier les problèmes liés à la data et les points critiques — Échéance : demain matin
|
||||
- [ ] Préparer un email détaillant les blocages critiques et le soumettre à l’équipe pour validation avant envoi — Responsable : non identifié
|
||||
- [ ] Évaluer avec The Mind la faisabilité, le coût et le délai d’une intervention de l’IBO sur la migration — Échéance : à partir du point prévu demain
|
||||
- [ ] Informer Mohamed des raisons du report après clarification avec Abiba — Responsable : non identifié
|
||||
- [ ] Obtenir des estimations sur la durée nécessaire pour résoudre les problèmes restants — Responsable : The Mind
|
||||
|
||||
## Blocages / Risques
|
||||
- Risque de perte ou de non-synchronisation des données pour les utilisateurs passant d’une version Firebase à AWS tout en utilisant plusieurs appareils, dont certains non mis à jour.
|
||||
- Régression Salesforce encore en cours d’investigation, sans retour disponible au moment de la réunion.
|
||||
- Fiabilité de la migration des données non confirmée à 100 %.
|
||||
- Les solutions actuellement suggérées, notamment l’acceptation d’une perte de données ou d’une fiabilité insuffisante, ne sont pas acceptables.
|
||||
- Le rythme des livraisons perturbe les tests et empêche de disposer du recul nécessaire pour estimer les délais.
|
||||
|
||||
## À suivre
|
||||
- Retour d’Abiba sur les problématiques data et la migration.
|
||||
- Retour sur la régression Salesforce.
|
||||
- Vérification auprès de The Mind et de l’IBO de la possibilité de bloquer le retour vers l’ancienne version ou de forcer la mise à jour.
|
||||
- Clarification du traitement des utilisateurs qui se reconnecteront après la période de 90 jours.
|
||||
- Définition d’une nouvelle échéance après résolution ou mitigation des blocages.
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-09-10
|
||||
source: MeetMic
|
||||
status: inbox
|
||||
duration: 17m
|
||||
meetmic_id: B6A3C0A2-EC0E-4373-A44E-313D8AE6B832
|
||||
---
|
||||
|
||||
# Daily Meeting TFO vs Zemind
|
||||
|
||||
## Résumé
|
||||
- Une nouvelle build dédiée au test de la migration des données doit être envoyée après validation QA, suivie d’une build complète prévue le lendemain, considérée comme release candidate.
|
||||
- Quatre sujets techniques restent à arbitrer : retry de suivi de la dernière activité, Firebase auth lockout, message demandant la mise à jour des appareils et contrôle de version dans Contentful.
|
||||
- Le Firebase auth lockout pourrait être ajouté côté backend avant le go live, mais sa faisabilité n’est estimée qu’à 95 %. Sans lockout, les appareils non mis à jour resteraient utilisables, mais la progression ne serait pas synchronisée.
|
||||
- L’équipe a vérifié le fonctionnement attendu de l’environnement web de production, du bucket S3 de livraison et de la preview distribution. Un déploiement réel doit encore valider ce workflow.
|
||||
- Le déploiement de production doit notamment permettre de tester la fonctionnalité de réinitialisation du mot de passe. Abdullah a également demandé un accès à Firebase app distribution pour tester sur Android.
|
||||
|
||||
## Décisions
|
||||
Aucune.
|
||||
|
||||
## Actions
|
||||
- [ ] Envoyer la liste des quatre sujets nécessitant une décision — Échéance : rapidement, avant la prochaine build
|
||||
- [ ] Donner un retour sur les sujets à implémenter afin de permettre leur intégration dans la build suivante — Échéance : fin de journée
|
||||
- [ ] Vérifier la configuration du pipeline, pousser la build web vers la branche principale et tester le déploiement via le bucket S3 — Échéance : après la réunion
|
||||
- [ ] Déployer une build de production pour valider le workflow et tester la réinitialisation du mot de passe — Échéance : fin de journée
|
||||
- [ ] Ajouter Abdullah à Firebase app distribution pour les tests Android
|
||||
|
||||
## Blocages / Risques
|
||||
- Le délai restant est limité à environ un jour et demi ; l’implémentation et la validation des quatre sujets pourraient empêcher le traitement de certains bugs P3 ou P4.
|
||||
- Le fonctionnement du système de version existant dans Contentful ne peut pas être vérifié actuellement.
|
||||
- Le Firebase auth lockout n’est pas encore confirmé avec certitude.
|
||||
- Le workflow de déploiement de production et de preview distribution n’a pas encore été testé avec une vraie build de production.
|
||||
|
||||
## À suivre
|
||||
- Arbitrer les quatre sujets techniques et confirmer ceux à intégrer.
|
||||
- Valider la build de migration, puis la release candidate prévue le lendemain.
|
||||
- Confirmer le déploiement web de production et le bon fonctionnement du workflow.
|
||||
- Décider ultérieurement de la gestion du go live après la soumission des applications.
|
||||
- Poursuivre les échanges et refaire un point le lendemain.
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
type: meeting
|
||||
date: 2026-08-18
|
||||
source: MeetMic
|
||||
status: inbox
|
||||
duration: 19m
|
||||
meetmic_id: 9CEB3804-D724-48AF-994C-01E0CBFBC0CE
|
||||
---
|
||||
|
||||
# Discussion CI/CD
|
||||
|
||||
## Résumé
|
||||
- La réunion porte sur la mise en place du CI/CD pour Idéllo et la réduction de la dépendance aux images Docker actuellement fournies par Libeo.
|
||||
- Le besoin est de disposer de Dockerfiles complets permettant de builder les images Nginx, Drupal et Node.js de manière indépendante, sans composants propriétaires ou dépendances internes non documentées.
|
||||
- Les images pré-buildées avaient été choisies initialement comme compromis pour respecter les délais du projet ; l’intention initiale était que les builds soient réalisés côté TFO.
|
||||
- Le CI/CD sera géré côté TFO, avec upload des images dans un registry. Les nouveaux Dockerfiles devront être testés sur l’environnement de développement afin de garantir leur compatibilité avec les différents environnements.
|
||||
|
||||
## Décisions
|
||||
- L’option retenue pour l’évaluation est de fournir des Dockerfiles complets et simplifiés, plutôt que de maintenir uniquement des images pré-buildées.
|
||||
- Le CI/CD et l’upload des images dans un registry seront gérés côté TFO.
|
||||
- Les Dockerfiles validés serviront de références figées jusqu’à ce qu’une mise à jour soit communiquée par le responsable du code.
|
||||
|
||||
## Actions
|
||||
- [ ] Créer un ticket pour évaluer l’extraction des éléments propriétaires et la production de Dockerfiles indépendants — Responsable : Philippe
|
||||
- [ ] Évaluer l’effort nécessaire et revenir avec une estimation — Responsable : non identifié
|
||||
- [ ] Vérifier les aspects contractuels et administratifs liés aux images Docker et à leur contrôle — Responsable : Philippe
|
||||
- [ ] Tester les nouveaux Dockerfiles dans l’environnement de développement pour vérifier leur compatibilité avec l’infrastructure — Responsable : non identifié
|
||||
- [ ] Mettre en place la synchronisation du code entre les dépôts GitHub et GitLab — Responsable : non identifié
|
||||
|
||||
## Blocages / Risques
|
||||
- Les images actuelles reposent sur des images de base internes et des dépendances potentiellement propriétaires à Libeo.
|
||||
- La suppression de ces dépendances nécessite une passe complète de QA afin de détecter les éléments oubliés.
|
||||
- Les images internes sont rebâties automatiquement avec des correctifs de sécurité et des mises à jour mineures ; ce mécanisme devra être pris en compte pour conserver un niveau de sécurité comparable.
|
||||
- Une divergence entre les Dockerfiles ou les images utilisés selon les environnements pourrait entraîner des problèmes de compatibilité et de diagnostic.
|
||||
- Le sens et le fonctionnement exacts de la synchronisation entre GitHub et GitLab restent à clarifier.
|
||||
|
||||
## À suivre
|
||||
- Clarifier la responsabilité de la maintenance et des mises à jour des Dockerfiles.
|
||||
- Confirmer le modèle de synchronisation entre GitHub et GitLab, idéalement dans un seul sens.
|
||||
- Confirmer les éléments contractuels concernant la propriété et le contrôle des images Docker.
|
||||
|
||||
|
||||
### Related
|
||||
- [[2026-08-18 - Idello - Estimer le temps d'avoir des images docker propers avec aucune dépendances]]
|
||||
@@ -0,0 +1,29 @@
|
||||
## Governance
|
||||
|
||||
**Executive Sponsor:** Xavier
|
||||
**Executive Alignment:** Mohammed
|
||||
**Opportunity Lead:** Amadou
|
||||
**External relationship / Lunii:** Amadou
|
||||
|
||||
### Contributors
|
||||
|
||||
- Education — educational positioning, reach and evidence
|
||||
- Product — digital audience, usage and ecosystem
|
||||
- Content — IP / universe selection
|
||||
- Marketing — audience / brand data as required
|
||||
|
||||
## Current Phase
|
||||
|
||||
**Phase 1 — Partnership exploration**
|
||||
|
||||
Goal:
|
||||
|
||||
> Obtain sufficient interest from Lunii to enter formal discussions
|
||||
> about a potential TFO × Lunii collaboration.
|
||||
|
||||
## Gate to Phase 2
|
||||
|
||||
Phase 2 begins only if Lunii expresses concrete interest in
|
||||
exploring a collaboration.
|
||||
|
||||
Until then, we are **not designing the final product**.
|
||||
@@ -0,0 +1,104 @@
|
||||
# TFO × Lunii — Data Pack
|
||||
|
||||
> **Purpose:** Gather the strongest evidence demonstrating why TFO is a valuable partner for Lunii.
|
||||
|
||||
## Key Numbers
|
||||
|
||||
|Metric|Value|Period|Source|Why it matters to Lunii|
|
||||
|---|--:|---|---|---|
|
||||
|TFO.org users|TBD|TBD|TBD|Demonstrates digital reach|
|
||||
|Youth video views|TBD|TBD|TBD|Demonstrates consumption of youth content|
|
||||
|Youth audience|TBD|TBD|TBD|Demonstrates access to target audience|
|
||||
|Ontario reach|TBD|TBD|TBD|Demonstrates strength in core market|
|
||||
|Canada outside Quebec|TBD|TBD|TBD|Demonstrates unique francophone reach|
|
||||
|
||||
## Digital Reach
|
||||
|
||||
### TFO.org
|
||||
|
||||
- Monthly users:
|
||||
|
||||
- Annual users:
|
||||
|
||||
- Video views:
|
||||
|
||||
- Youth content consumption:
|
||||
|
||||
- Mobile / tablet usage:
|
||||
|
||||
- Geography:
|
||||
|
||||
|
||||
### Apps / OTT
|
||||
|
||||
- Installs:
|
||||
|
||||
- Active users:
|
||||
|
||||
- Viewing:
|
||||
|
||||
- Platforms:
|
||||
|
||||
- Relevant youth usage:
|
||||
|
||||
|
||||
### Social
|
||||
|
||||
- YouTube:
|
||||
|
||||
- Instagram:
|
||||
|
||||
- TikTok:
|
||||
|
||||
- Facebook:
|
||||
|
||||
- Other:
|
||||
|
||||
|
||||
## Educational Reach
|
||||
|
||||
### IDÉLLO
|
||||
|
||||
- Registered users:
|
||||
|
||||
- Teachers:
|
||||
|
||||
- Schools:
|
||||
|
||||
- School boards:
|
||||
|
||||
- Geographic reach:
|
||||
|
||||
- Usage:
|
||||
|
||||
|
||||
### Education Network
|
||||
|
||||
- Ontario:
|
||||
|
||||
- Other provinces / territories:
|
||||
|
||||
- Partnerships:
|
||||
|
||||
- Relevant programs:
|
||||
|
||||
|
||||
## Youth Content
|
||||
|
||||
|Property|Audience / Usage|Age|Recognition|Notes|
|
||||
|---|--:|---|---|---|
|
||||
|TBD|||||
|
||||
|TBD|||||
|
||||
|TBD|||||
|
||||
|
||||
## Francophone Canada
|
||||
|
||||
Evidence demonstrating TFO's position within francophone communities in Canada.
|
||||
|
||||
- Ontario:
|
||||
|
||||
- Outside Ontario:
|
||||
|
||||
- Schools:
|
||||
|
||||
- Fam
|
||||
@@ -0,0 +1,126 @@
|
||||
# TFO × Lunii — IP Shortlist
|
||||
|
||||
> **Question:** Which TFO universes best demonstrate the potential of a TFO × Lunii collaboration?
|
||||
|
||||
## Selection Criteria
|
||||
|
||||
A strong candidate should ideally have:
|
||||
|
||||
- recognizable characters or universe;
|
||||
|
||||
- relevance to Lunii's target age;
|
||||
|
||||
- strong storytelling potential;
|
||||
|
||||
- ability to work without visuals;
|
||||
|
||||
- potential for interaction / choices;
|
||||
|
||||
- educational or discovery potential;
|
||||
|
||||
- existing audience;
|
||||
|
||||
- rights allowing exploration of another format.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Candidate 1 — [Property]
|
||||
|
||||
### Audience
|
||||
|
||||
**Target age:**
|
||||
**Existing reach:**
|
||||
**Where it currently lives:**
|
||||
|
||||
### Universe
|
||||
|
||||
What makes this universe recognizable or interesting?
|
||||
|
||||
### Why it could work on Lunii
|
||||
|
||||
How could the universe naturally become an audio experience?
|
||||
|
||||
### Example
|
||||
|
||||
> One very short example of a possible Lunii experience.
|
||||
|
||||
### Educational Potential
|
||||
|
||||
### Evidence
|
||||
|
||||
### Rights / Constraints
|
||||
|
||||
- Rights status: TBD
|
||||
|
||||
- Audio adaptation rights: TBD
|
||||
|
||||
- Characters / talent considerations: TBD
|
||||
|
||||
|
||||
### Assessment
|
||||
|
||||
**Fit with Lunii:** ⭐⭐⭐⭐⭐
|
||||
**Audience strength:** ⭐⭐⭐⭐⭐
|
||||
**Audio potential:** ⭐⭐⭐⭐⭐
|
||||
**Educational potential:** ⭐⭐⭐⭐⭐
|
||||
**Rights confidence:** ❓
|
||||
|
||||
---
|
||||
|
||||
## Candidate 2 — [Property]
|
||||
|
||||
Same structure.
|
||||
|
||||
---
|
||||
|
||||
## Candidate 3 — [Property]
|
||||
|
||||
Same structure.
|
||||
|
||||
---
|
||||
|
||||
## Wildcard — Francophonie canadienne
|
||||
|
||||
This does not necessarily need to be based on an existing TFO property.
|
||||
|
||||
### Concept
|
||||
|
||||
Interactive audio adventures allowing children to discover different francophone communities across Canada through storytelling.
|
||||
|
||||
Possible settings:
|
||||
|
||||
- Ontario français
|
||||
|
||||
- Acadie
|
||||
|
||||
- Manitoba
|
||||
|
||||
- Northern Canada
|
||||
|
||||
- Western Canada
|
||||
|
||||
|
||||
### Why it matters
|
||||
|
||||
This could combine TFO's educational mission and knowledge of francophone Canada with Lunii's screen-free storytelling format.
|
||||
|
||||
---
|
||||
|
||||
## Recommended Shortlist
|
||||
|
||||
### 1. TBD
|
||||
|
||||
**Why:**
|
||||
|
||||
### 2. TBD
|
||||
|
||||
**Why:**
|
||||
|
||||
### 3. TBD
|
||||
|
||||
**Why:**
|
||||
|
||||
## Not Recommended
|
||||
|
||||
Properties considered but excluded, with reason:
|
||||
@@ -0,0 +1,203 @@
|
||||
# TFO × Lunii — Pitch
|
||||
|
||||
> # Les univers TFO prennent vie sans écran.
|
||||
|
||||
## Objective
|
||||
|
||||
At the end of the meeting, we want Lunii to think:
|
||||
|
||||
> **TFO could bring something valuable and distinctive to Lunii in Canada. We should explore this further.**
|
||||
|
||||
We are **not** trying to close a deal in this meeting.
|
||||
|
||||
---
|
||||
|
||||
# Storyline
|
||||
|
||||
## 1 — Les univers TFO prennent vie sans écran
|
||||
|
||||
**Message:**
|
||||
|
||||
TFO and Lunii have an opportunity to extend francophone children's universes beyond the screen.
|
||||
|
||||
**Visual:**
|
||||
|
||||
TFO × Lunii
|
||||
|
||||
**Say:**
|
||||
|
||||
TBD
|
||||
|
||||
---
|
||||
|
||||
## 2 — TFO
|
||||
|
||||
**Message:**
|
||||
|
||||
TFO is more than a television network.
|
||||
|
||||
We are a francophone educational media organization with a direct relationship with children, families and educators.
|
||||
|
||||
**Proof:**
|
||||
|
||||
- TBD
|
||||
|
||||
- TBD
|
||||
|
||||
- TBD
|
||||
|
||||
|
||||
**Say:**
|
||||
|
||||
TBD
|
||||
|
||||
---
|
||||
|
||||
## 3 — Our Audience
|
||||
|
||||
**Message:**
|
||||
|
||||
TFO already reaches the children and families that could be relevant to Lunii's Canadian growth.
|
||||
|
||||
**Key numbers:**
|
||||
|
||||
- TBD
|
||||
|
||||
- TBD
|
||||
|
||||
- TBD
|
||||
|
||||
|
||||
**Say:**
|
||||
|
||||
TBD
|
||||
|
||||
---
|
||||
|
||||
## 4 — Education
|
||||
|
||||
**Message:**
|
||||
|
||||
TFO brings something beyond content: an established relationship with the educational ecosystem.
|
||||
|
||||
**Key numbers:**
|
||||
|
||||
- TBD
|
||||
|
||||
- TBD
|
||||
|
||||
|
||||
**Potential contribution from Education:**
|
||||
|
||||
TBD
|
||||
|
||||
---
|
||||
|
||||
## 5 — Our Universes
|
||||
|
||||
**Message:**
|
||||
|
||||
TFO has characters and universes that can live beyond video.
|
||||
|
||||
### Universe 1
|
||||
|
||||
TBD
|
||||
|
||||
### Universe 2
|
||||
|
||||
TBD
|
||||
|
||||
### Universe 3
|
||||
|
||||
TBD
|
||||
|
||||
---
|
||||
|
||||
## 6 — Why TFO × Lunii
|
||||
|
||||
### Lunii brings
|
||||
|
||||
- screen-free experience;
|
||||
|
||||
- audio storytelling expertise;
|
||||
|
||||
- interactive storytelling;
|
||||
|
||||
- direct relationship with families.
|
||||
|
||||
|
||||
### TFO brings
|
||||
|
||||
- francophone youth universes;
|
||||
|
||||
- educational expertise;
|
||||
|
||||
- Canadian francophone perspective;
|
||||
|
||||
- audience and distribution;
|
||||
|
||||
- relationship with educators.
|
||||
|
||||
|
||||
### Together
|
||||
|
||||
> **A new way for francophone children in Canada to experience stories and learning without another screen.**
|
||||
|
||||
---
|
||||
|
||||
## 7 — Imagine...
|
||||
|
||||
Pick ONE strong example.
|
||||
|
||||
### Example
|
||||
|
||||
**[TFO Universe] × Lunii**
|
||||
|
||||
The child recognizes a character from TFO.
|
||||
|
||||
But instead of replaying the television episode, they enter a completely new audio adventure.
|
||||
|
||||
They choose where to go.
|
||||
|
||||
They make decisions.
|
||||
|
||||
They discover.
|
||||
|
||||
They become part of the story.
|
||||
|
||||
> **Same universe. New story. No screen.**
|
||||
|
||||
---
|
||||
|
||||
## 8 — Let's Explore It Together
|
||||
|
||||
We are not arriving with a predetermined business model or finished product.
|
||||
|
||||
We believe there is enough strategic alignment between TFO and Lunii to explore what we could build together.
|
||||
|
||||
### The Ask
|
||||
|
||||
> **Would Lunii be interested in exploring a TFO × Lunii collaboration with us?**
|
||||
|
||||
## Meeting Outcome
|
||||
|
||||
- 🟢 Interested → define Phase 2
|
||||
|
||||
- 🟡 Interested, different direction → explore / adapt
|
||||
|
||||
- 🔴 No strategic fit → document learning and close
|
||||
|
||||
|
||||
## Questions for Lunii
|
||||
|
||||
- What are Lunii's priorities for Canada?
|
||||
|
||||
- Which audiences are they trying to grow?
|
||||
|
||||
- How do they normally structure IP partnerships?
|
||||
|
||||
- What makes a content partnership attractive to them?
|
||||
|
||||
- Which TFO assets or capabilities interest them most?
|
||||
|
||||
- Would they prefer an existing IP, original concept, educational collection, or another model?
|
||||
@@ -0,0 +1,220 @@
|
||||
|
||||
|
||||
> **Les univers TFO prennent vie sans écran.**
|
||||
|
||||
## Status
|
||||
|
||||
**Phase:** Exploration / Business Development
|
||||
**Executive sponsor:** Xavier
|
||||
**Lead:** Amadou
|
||||
**Executive alignment:** Mohammed B
|
||||
**Strategic contributor:** Eric Genier, Directeur, service éducatif
|
||||
|
||||
## Objective
|
||||
|
||||
Obtenir l'intérêt de Lunii pour explorer une collaboration avec TFO.
|
||||
|
||||
La phase actuelle ne vise pas encore à définir ou produire une offre finale. Elle vise à démontrer pourquoi **TFO serait un partenaire intéressant pour Lunii au Canada**.
|
||||
|
||||
## Success Criteria — Phase 1
|
||||
|
||||
La phase exploratoire est considérée comme réussie si :
|
||||
|
||||
1. TFO obtient une rencontre avec les bons interlocuteurs chez Lunii.
|
||||
|
||||
2. TFO démontre clairement la valeur qu'il peut apporter à Lunii.
|
||||
|
||||
3. Lunii manifeste un intérêt concret à poursuivre la discussion.
|
||||
|
||||
4. Les deux organisations identifient au moins une piste de collaboration qui mérite d'être approfondie.
|
||||
|
||||
|
||||
## Core Proposition
|
||||
|
||||
**Les univers TFO prennent vie sans écran.**
|
||||
|
||||
TFO pourrait permettre à certains de ses univers jeunesse de vivre sous forme d'expériences audio originales adaptées à Lunii.
|
||||
|
||||
TFO apporte notamment :
|
||||
|
||||
- des univers et propriétés jeunesse;
|
||||
|
||||
- une expertise en contenu éducatif;
|
||||
|
||||
- une connaissance des enfants et familles francophones au Canada;
|
||||
|
||||
- une présence dans le milieu éducatif;
|
||||
|
||||
- une capacité de promotion et de distribution numérique;
|
||||
|
||||
- un positionnement unique dans la francophonie canadienne.
|
||||
|
||||
|
||||
Lunii apporte notamment :
|
||||
|
||||
- une plateforme audio jeunesse sans écran;
|
||||
|
||||
- une expertise dans la narration audio;
|
||||
|
||||
- une expérience interactive conçue pour les enfants;
|
||||
|
||||
- une marque et un produit déjà établis auprès des familles.
|
||||
|
||||
|
||||
## What We Need to Prove
|
||||
|
||||
Notre première présentation doit répondre à une question :
|
||||
|
||||
> **Pourquoi Lunii devrait-il vouloir travailler avec TFO?**
|
||||
|
||||
### TFO reach
|
||||
|
||||
À documenter :
|
||||
|
||||
- audience jeunesse;
|
||||
|
||||
- utilisateurs / visiteurs numériques;
|
||||
|
||||
- visionnements;
|
||||
|
||||
- portée des propriétés jeunesse;
|
||||
|
||||
- présence au Canada hors Québec;
|
||||
|
||||
- portée en Ontario;
|
||||
|
||||
- portée auprès des écoles;
|
||||
|
||||
- enseignants / classes / conseils scolaires rejoints;
|
||||
|
||||
- données IDÉLLO pertinentes;
|
||||
|
||||
- réseaux sociaux / communautés;
|
||||
|
||||
- autres données démontrant notre capacité de distribution.
|
||||
|
||||
|
||||
### TFO assets
|
||||
|
||||
Identifier :
|
||||
|
||||
- 3 à 5 univers jeunesse particulièrement adaptés à l'audio;
|
||||
|
||||
- personnages reconnaissables;
|
||||
|
||||
- propriétés dont TFO contrôle suffisamment les droits;
|
||||
|
||||
- contenu éducatif pouvant prolonger l'expérience;
|
||||
|
||||
- expertise éditoriale et pédagogique pertinente.
|
||||
|
||||
|
||||
## Team — Exploration Phase
|
||||
|
||||
### Lead
|
||||
|
||||
**Amadou**
|
||||
|
||||
Responsable de :
|
||||
|
||||
- coordination de l'opportunité;
|
||||
|
||||
- relation avec Lunii;
|
||||
|
||||
- proposition de valeur;
|
||||
|
||||
- préparation du pitch;
|
||||
|
||||
- coordination des contributions internes;
|
||||
|
||||
- suivi des décisions et prochaines étapes.
|
||||
|
||||
|
||||
### Directeur — Service éducatif
|
||||
|
||||
Contribution :
|
||||
|
||||
- proposition de valeur éducative;
|
||||
|
||||
- compréhension du milieu scolaire;
|
||||
|
||||
- portée éducative de TFO;
|
||||
|
||||
- opportunités potentielles autour de l'apprentissage;
|
||||
|
||||
- validation des affirmations et données éducatives.
|
||||
|
||||
|
||||
### Product
|
||||
|
||||
Contribution :
|
||||
|
||||
- connaissance des audiences et produits numériques;
|
||||
|
||||
- données d'utilisation pertinentes;
|
||||
|
||||
- possibilités de parcours entre Lunii et l'écosystème TFO;
|
||||
|
||||
- expertise produit lorsque nécessaire.
|
||||
|
||||
|
||||
### Content / IP
|
||||
|
||||
Contribution à identifier selon les propriétés retenues :
|
||||
|
||||
- sélection des univers;
|
||||
|
||||
- droits;
|
||||
|
||||
- potentiel éditorial;
|
||||
|
||||
- talents / personnages / production.
|
||||
|
||||
|
||||
## Phase 1 — Deliverables
|
||||
|
||||
1. Opportunity Brief.
|
||||
|
||||
2. Sélection préliminaire de propriétés TFO.
|
||||
|
||||
3. Data pack / chiffres clés TFO.
|
||||
|
||||
4. Présentation courte **TFO × Lunii**.
|
||||
|
||||
5. Identification des interlocuteurs Lunii.
|
||||
|
||||
6. Première rencontre exploratoire.
|
||||
|
||||
|
||||
## Out of Scope — Phase 1
|
||||
|
||||
Pour éviter de concevoir un projet avant d'avoir validé l'intérêt de Lunii :
|
||||
|
||||
- architecture technique;
|
||||
|
||||
- intégration TFO.org;
|
||||
|
||||
- développement logiciel;
|
||||
|
||||
- modèle commercial détaillé;
|
||||
|
||||
- calendrier de production;
|
||||
|
||||
- engagement budgétaire;
|
||||
|
||||
- sélection définitive des propriétés;
|
||||
|
||||
- négociation des droits;
|
||||
|
||||
- lancement produit.
|
||||
|
||||
|
||||
Ces éléments seront abordés seulement si Lunii souhaite poursuivre.
|
||||
|
||||
## Next Step
|
||||
|
||||
Réunir les contributeurs internes nécessaires pour construire :
|
||||
|
||||
**« Pourquoi TFO + pourquoi maintenant + pourquoi Lunii devrait vouloir travailler avec nous? »**
|
||||
|
||||
Puis préparer l'approche initiale auprès de Lunii.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user