Changelog
Kiwi પ્લેટફોર્મના તમામ અપડેટ, નવી સુવિધાઓ અને સુધારા.
2153 એન્ટ્રીઓ
- lot 3, le storyboard, tenu par la structure du brief et refuse en bloc
c78a6d7 - les runs autonomes se limitent a des comptes choisis
4b8b468 - lot 2, l analyse, et le validateur qui refuse tout ce qui n a pas de source
68b6314 - lot 1, lire un site comme un humain le voit, et n en garder que ce qui a une source
5f48763 - les douze tables du generateur de videos, derivees d une seule specification
5622181 - la qualite de Wan, enfin regardee, elle tient, c est le temps qui coince
b28873f - les deux moteurs se melangent DANS une scene, pas seulement entre elles
aafd80b - VideoFlow rend une scene en 4 s la ou Wan en met 203
dc7fe51 - un jeton vide laissait un GPU ouvert sur Internet, en silence
7cd3b98 - les 271 select du produit avaient perdu leur chevron
7a02288 - les trois autres couloirs demandaient des cartes disparues, et l image se construit enfin
9ee76b2 - les cles VAPID sont posees en prod, le push bascule au prochain deploiement
b9a0ea6 - le pod n avait jamais tourne, et six choses l en empechaient
2685540 - des ecrans de demarrage iOS, au lieu d'un flash blanc
9f93118 - dire qu'on est hors ligne, au lieu de laisser chaque ecran echouer
93e9ff7 - un partage entrant perdait son contenu a la reconnexion
015112e - le controle du manifeste lisait la source, donc il n'affirmait rien
0803a94 - la moitie SOURCE du gate, et les cinq fautes qu elle a trouvees
c312c2d - filtrer les prospects par ville
7505b7a - le marche d agents personnalises est supprime
81b6456 - les agents n ecrivent plus sur le forum de KIWI
900fa73 - une sauvegarde quotidienne, et elle contient enfin la facturation
89b83f8 - un envoi en masse porte sa desinscription
20257a6 - trois pannes silencieuses de plus, et l'env de Gaston est rendu
2350705 - trois tables fantomes de plus, et le cron qui en interrogeait une
7430df4 - deux mesures agents qui n avaient jamais rien mesure
ea79034 - le modele global reprend la structure du gabarit
85856f3 - un modele pour un envoi a TOUS les comptes
cda057f - le modele produit devient un mail de reconquete
f4bc486 - le texte des bulles utilisateur s alignait a droite
239a289 - un point d attente au lieu de l ordre d execution
1316ac9 - le panneau du profil et l onglet d annonces
c1666f1 - lier son compte kiwi, et recevoir le role de son plan
9e8775e - un seul appel a Discord, et les releases par produit
9d67f71
- la regle text-white ne pouvait pas echouer en local
01c765e - publier une note de version dans #announcements
f3a86df
- GET /prospects servait les prospects de toutes les activites
7126e74 - 51 boites du navigateur remplacees par celles du produit
b1630df - les boites de dialogue du produit, et le nom du business editable
5305a5c - retirer le mode « toutes les activites » et ce qui le portait
cdacbc2 - l'utilisateur cree, renomme et archive ses activites
496c984 - cloisonner les cinq derniers modules, les 13 tables y sont
a0b7315 - cloisonner Expensa, et la serie de numeros devient celle de l'activite
aa51497 - cloisonner le CRM, prospects, pipeline et deals
bd22620 - cloisonner les taches, et la recherche globale au passage
e96e866 - le business devient une identite ambiante, pas un argument de plus
58a6d6c - le selecteur d'activite devient une identite, pas un filtre
930ebce - resoudre le locataire cote serveur, et le prouver au lieu de le supposer
3c9443a - rattacher les donnees existantes, et une serie de numeros par business
eee6fa2 - tout compte a un business, et exactement un par defaut
72f44d5 - KIWI a son propre environnement, plus les tables de Gaston
65d0d55 - retirer trois symboles morts avant de rendre le business obligatoire
5700a8a - la memoire semantique n'avait jamais rien ecrit, un caractere de trop
96a9cb0 - un seul point de depart pour une mission, et Sarah cesse d'etre sur fond blanc
2440ce1 - les vignettes n'étaient carrées nulle part, la classe ne compilait pas
0e6edea - la panne du recall sémantique cesse d'être silencieuse et gratuite
9233ddf - l'historique garde sa position, et les compteurs s'ouvrent
e0864cd - une liste de missions, et le document s'ouvre sur place
085ec66 - l'ordre d'exécution n'est plus affiché en JSON brut
534491c - tous les avatars suivent le thème, pas seulement la liste
73c24bf - les règles d'écriture passent en dernier, là où le modèle les lit
42bc9dc - la colonne des agents rend sa place au contenu
200bbc6 - un seul bouton de création, et le modal ne scintille plus
0d59f86 - les actions passent à Node 24, avant le retrait du 23 septembre
9503995 - skills créables, skills des 24 agents, honnêteté des modèles ML
a2014b3 - mesurer la sélection d'actions contre ce qui s'est passé
79e036a - un chiffre sorti d'une règle ne s'affiche plus comme une prédiction
f73b092 - 149 skills sur 24 agents, et de quoi les payer
7f16315 - des skills écrits par le compte, pas seulement par le code
5218a2b
- Profil, une route disait « enregistré » sans rien écrire
22454ce - Sheets, une analyse ratée était facturée
d6e9d39 - Documents, le gestionnaire part, l'éditeur reste
49fc284 - le Calendar avait 7 actions pour 14 routes
83ca47f - le Communication Hub avait 13 actions pour 34 routes
d964a7e - le Sales Accelerator appelait son propre serveur en HTTP
47efc29 - le Project Manager avait 41 routes et 6 actions
c18d579 - le Time Tracker avait trois actions pour six vues
2d17db7 - rien ne comparait le code aux modèles
c003058 - the client portal the share link had been promising
bdf411e - the six actions go through the service, like the screen
5f8b244 - a subtask route that always refused, and a share link with no page
c2036fb - the request body was the write, and it owned the row
977a5c8 - a column the board could not accept, and two tiles pinned to zero
501ffb9 - a model that never existed, and the columns behind it
0d80075 - brief for the PostForMe investigation
11984ca - answer the question that was asked
9357e87 - the bubble shows one answer, not the model working
a03b01f - the first real chat turn named a status that does not exist
8c3396c - marketing, the module is not the folder that carries its name
725bc64 - marketing, 25 actions, and an action that always failed
cefe427 - SEO absorbed whole, no editor, and two answers that were not answers
5ab4592 - SEO, 28 actions, and two answers that were not answers
a44d795 - community leaves the programme, it is KIWI's own forum
0395f77 - landing pages, the manager absorbed, the builder kept
ecfe320 - the accent is a fill, not an ink, three labels measured under AA
ca502c5 - landing pages, the manager, and publishing as an act
7e58634 - the gate depends on every category being a switchable slug
cdb8ac9 - an agent respects the module switch, and a fake owner column goes
15724e5 - Campaigns absorbed, and an INT owner column in a UUID application
d46496e - Campaigns as actions, and a campaign that goes to its own audience
2a234ce - Expensa absorbed, and the prompt window is the programme's real ceiling
c487e79 - Expensa as actions, and one answer to what an invoice owes
0ec967f - the CRM is absorbed, and what its repair found
1480be1 - the CRM as actions, and eight of its ten could never have worked
d401d4b
- the media library is absorbed; chat attachments live in the library
acdc3e1 - the media library as actions, one service behind routes and executors
2f98f40 - four small modules absorbed, one service per module, cap at 100
de17a14 - the business blog is an agent's to draft, write, publish and prune
8de6190 - the booking page is an agent's to configure and to cancel from
6f32db4 - every line of the Loyalty screen is an action, and the agent can finally find a card
bb9e317 - every line of the Notifications screen is an action, on one reading of the table
cd1cbb7 - record the Workforce centralisation programme and what its foundations guarantee
b37786b - My Business is a panel of Workforce, and Sophia runs it
d64f5a8 - the workflow palette reads the action registry, and every action names its module
688670b - twelve hand-written module lists, one test that compares them
f4da802 - a card the model is told to emit must render, and a rendered card must be emitted by someone
7cea07d - the floating chat shows what the agent did, through one badge for all three surfaces
117f769 - the action budget is per domain, and the page decides on an ambiguous message
7725aab
- an opacity suffix on a token already near the floor
cc56486 - the contrast residue was one number, not six screens
0136a6a - explain the contrast residue CLAUDE.md called unexplained
ce7709e - the Draft badge measured 1.47:1, and three map buttons had no name
d52071e - the free-tier watermark came off with a right-click
3bbd775 - delete the Instagram growth subsystem, 0 rows, ever
7e6cc11 - an empty form was one click away from erasing your guidelines
3ec4952 - the analytics tab said 0/3 to someone with 2 accounts
1276808 - the one honest analytics source answered 500, always
62e3106 - stop shipping social account tokens to the browser
3e51c75
- a campaign mission now fills the calendar with drafts
2cdbbea - drop the last two explanatory lines on Mission control
198ef6f - the attention chip lands where its count lives, Workflow in violet
e646d84 - assigned missions move into a modal
74e169e - a table instead of a record, and a screen without the lecture
91615cb - lead with the next step, the deliverable, and notifications that land
45b3add
- no focus ring around the editing surface
5f0d4dd - paginate with ProseMirror decorations, not inline styles
7ef7f38 - translate the pod modal, the starting notice and the activity log
6acf9f5 - a restart on another build is a deploy, not a loop
804b8d3 - render agent documents, open the deliverable, dedicated composer
d876af0 - wrap long mission text instead of overflowing the panel
79b462c - start the mission before opening its details
5b3e6d5 - list next actions as full-width rows
74306a4 - restructure the Run my business layout
7fff2ac - edit shared company profile from My Business
98332cb - keep activity summary visible before optional setup
c7b0134 - separate business planning and workflow from dashboard overview
203fdb2 - organize business profile into readable responsive sections
49f5c49 - record production verification and usable landing editor
dc9dffb - distinguish fresh collection from applicable market evidence
0a3a9d6 - connect company profiles, market evidence and executable growth missions
2d33ce9 - record production validation and activation follow-up
b05b04b - refresh mission details until the result is ready
ce85d9f - preserve provisioned pods and track mission execution reliably
6e8899a - deliver guided Workforce outcomes and reliable activation
1384ae3
- la cle partenaire Aukimi ne quitte plus le serveur
56d3343 - un correctif du deploiement doit declencher un deploiement
e1dc13f - le deploiement backend ne recharge plus kiwi-ai, et la fenetre respire
b613e8b
- l'auto-test en compte trois, pas deux
9e29a17 - un uptime court n'est pas une boucle, le watchdog le confirme
2b23eaa - un watchdog de vie, parce que 38 morts sont passees inapercues
bdfd4b5 - la cause etait un plafond de tas pose par la plateforme, pas par V8
cb5c2c0 - le plafond de tas passe par NODE_OPTIONS, seul mecanisme qui marche
53ac5b3 - borner le tas de V8, qui vise une memoire que le node n'a pas
292e354 - le node est a 1 Go, la boucle OOM est arretee, et le vrai mecanisme
8715727 - un garde-fou memoire pose sous le socle est pire que pas de garde-fou
4d47a36 - le garde-fou memoire etait sous le socle et bouclait
1ef5f5e - « Coming Soon » etait un mensonge produit par un catch
44a391a - le PWA ne concerne que l'application, plus le site vitrine
dd2fbf8 - une encre de theme sur un fond fixe est invisible dans l'un des deux
f762501
- le chat agents est prouve en prod, la relance de devis reste inexercee
694b6ff - du texte invisible en theme clair, et l'audit cesse de noter des ecrans morts
694c7e4 - le health check de deploiement laisse 2 min, pas 30 s
1a78a9f - deux memoires ecrites puis jetees, et le controle de schema apprend a lire les ENUM
6be07be - une adresse .app.kiwi est reservee aux clients payants
4a840ce - Hostpoint bloque une IP apres ~800 requetes en 15 s, et ce que Search Console en dit
72e7a2a
- la liste de cartes GPU vit dans le code, plus dans un .env qui survit aux correctifs
61a7ea6 - la relance des devis sous contrat serveur, et la delegation livre sans rejouer
a889c64
- la VM se ferme avant de servir, et le chemin de l'embedder est repare
c5cc331 - chat_messages.taskKey migree, et le controle de schema cesse d'etre aveugle
f0768dd - les trois services passent sous Kiwi/, la CI suit
43703ae
- colonne pleine hauteur, code qui revient a la ligne, en-tete degrossi
4cc2ade - la carte « Valeur generee (30 j) » sur l'atterrissage
cacd2c7 - la valeur generee par les agents remonte a la surface
0f3ee4c - kit de deploiement du VPS Sandra-KIWI dedie
2c56d2e - suggestions dans neuf modules de plus, et choix des declencheurs
f5c46c8 - les declencheurs autonomes s'allument un par un
3adea97 - la CI ne gate aucun deploy, la gate reelle est locale
7ef9338 - le bouton reduire du chat flottant a un nom accessible
22134dd - les 11 agents sans cartes de demarrage en ont desormais
62e2326 - les deux actions commentaires Instagram sont supprimees
b7a0fd3 - des suggestions ancrees dans la page dans le chat flottant
915c23e - le contexte d'ecran pese enfin dans la selection d'outils
b910d45 - la carte passe en glassmorphism
f25ea92 - refonte des pages publiques et harmonisation du dashboard
f022c91 - rendus video durables, livraison sociale isolee, SEO des landings
5a8285e
- une conversation « modifiee » qui n'a pas ete enregistree ne le dit plus
bc388e9
- un seul titre par module, porte par l'en-tete
8d083ac - le quota de stockage est pre-calcule avant de lancer un rendu
996038d - le second vers du titre passe au violet, et les portraits suivent le theme
8e7a50f - la section Aukimi revient, en 30 langues cette fois
787b17c - vibe_stories.isEvergreen etait declaree sans migration
390c7bf - 45 blocs de migration vivaient derriere la garde de semis, morts depuis des mois
80f7f6c - les cases a cocher et les barres de defilement imbriquees ignoraient le theme clair
d353195 - la liste redevient la vue d'entree, le kanban ne s'impose plus
5740ab2 - le CRM occupe toute la largeur, pipeline compris
ee1a18c - Échap était mort dans tout le dashboard, avalé par des modales fermées
9c9a64a - deux sous-traitants jamais déclarés, et la bande venait du gabarit
5116182 - le logo blanc sur fond crème, sur sept écrans
4aa9f42 - la bande sombre en haut de chaque page, et le flash à chaque chargement
0405409 - la liste du changelog, refaite au lieu d'être rapiécée
acab9c8 - quatre questions sourcées dans le code, et un dégradé qui n'en était pas un
88c0867 - les onze clés du changelog dans les vingt-huit locales
07ddf20 - un pluriel que j'avais cassé, et les pastilles ramenées près de leur date
bba1882 - la barre de défilement ne suivait pas le thème, et cinq pages reviennent au vert
9ea3a04 - l'aplat noir du bloc « Our Mission » devient une carte de verre
cc420ff - un spread dans le mauvais ordre effaçait les cinq filtres traduits
2859053 - les titres d'affichage reprennent le vert de la marque
1710f1d - un bouton « Postuler » qui ne faisait rien, et la pastille retirée
18e598c - la page affichait des agents que la base ferme, et sa teinte s'arrêtait au héros
b36d897 - dix-neuf portraits déclarés en .png, présents en .webp seulement
0693a8e - les émoji cachés dans les dictionnaires deviennent des icônes
a8e7566 - un dictionnaire de locales qui n'est que de l'anglais
35a729c - les 77 libellés traduits dans les 28 locales
3fe16b4 - 77 libellés anglais en dur sortent du code
26f084f - les icônes de statut et de priorité passent à Phosphor
9fa9704 - les quinze derniers écrans, auth, paiement, onboarding
2ebf3c2 - la carte d'entreprise, et quatorze survols que le verre avait tués
dac2458 - parallaxe sur toute la page, verre allégé, et la visionneuse enfin au-dessus
683f0da - parallaxe vertical sur la photo, et les rangées de modules en verre
6b8a60a - /partners existe enfin, nouvelle photo de fond, pied de page en verre
ac10620 - blog d'entreprise, signature, fidélité, et un essai sur /login
b63f11b - les quatre écrans créateurs, et le verre sur les pages de contenu
a4aa9b9 - dix pages de contenu rejoignent le fond et les teintes
53fdc3f - l'accent n'était pas lisible sur son propre voile
005ee14 - les étiquettes d'état ne basculaient pas avec le thème
b297349 - la pilule d'appel à l'action existait en six copies
b9692b6 - le CTA parlait un troisième dialecte de bouton
7c42e7f - le verre sur les 129 cartes que la mesure autorise
4dd3cc2 - l'aplat qui masquait le fond fixe sur quinze pages
fff4763 - le verre dépoli, et la mesure qui dit où il a le droit d'aller
5fff9ec - les douze routes SEO rejoignent le fond et les teintes
d6aaea7 - pages publiques et données vers 30 langues
431cbdd
- Remplacer L() par t() - Unsubscribe.jsx + Lot E (4 pages tools)
e372db4
- 657 chaînes d'anglais en dur sortent du code vers l'i18n
31088ea - la photo de fond devient une vraie image de header
8717cac - la rampe claire était cinq fois plus plate que la sombre
1b38713 - la surface des cartes était invisible, seul leur cadre les tenait
e43a200 - une couleur d'accent par page, sans toucher une seule classe
2a94801 - « Our Mission » en ton sur ton, et une pastille illisible en thème clair
838c433 - des cadres dans des cadres deviennent une page
e77f800 - 10,3 Mo de PNG deviennent 1,2 Mo de WebP, et un fond par thème
3e1d17c - Phosphor à la place des émojis, et une bande de verre au lieu d'un aplat
8517ad6 - 160 px de vide entre la démonstration et le roster d'agents
9eb4902 - quatre boîtes identiques deviennent une page, et un halo qui respire
e40f85c - les dix dernières copies du fond de page, et six écouteurs de défilement en trop
36a2ae0 - un seul fond de page, l'échelle éditoriale, et une grille qui ne suppose plus
ecb5d22 - deux pages publiques qui plantaient, et un CTA qui annonçait gratuit ce qui est payant
ce00082 - thème clair/sombre, Cal Sans, et un fond de page qui peint enfin
c362326
- une seule famille de surfaces, et une contrainte qui saute
fafd3dc - rendre le flaky diagnosticable au lieu de le deviner
6756e50 - couverture des missions, du scheduler et du statut e-mail
b705a19 - un fond neutre, la hiérarchie revient au module
74f39b2 - connexion Google et Gmail sans attente artificielle, session par cookie
7e06d68 - ce qui demande une attention, mis en avant
4b402b8 - centre de missions et supervision minimale
1c63352 - missions durables côté serveur
f57a6cf
- un élément ne se pose pas sur le fond exact de son parent
1d53e94 - des surfaces légèrement dégradées, posées comme un rôle nommé
a2ca33c - panneau découpé, hiérarchie inversée, densité
c5d2edc - le menu contextuel restait ouvert par-dessus la confirmation
66d28ed - du vert sur du vert, et une carte qui réservait du vide
f49512b - prérendre les 30 locales, plus seulement l'anglais
06c4419 - trois limites déclarées que personne ne lisait
af163ff - le canonical des articles contredisait le sitemap
1919b3a - le sitemap qui mentait, et l'étape argent qu'on ne mesurait pas
0f472de - 1537 des 1590 URL du sitemap se déclaraient duplicatas de l'accueil
53fb2b8 - mesurer l'étape argent, qui ne l'était pas du tout
77c6b1f - les tuiles du Project Manager étaient posées sur leur propre couleur
6746efa
- une panne muette, et une migration écrite qui n'est pas appliquée
d951c37 - comparer ce que les modèles promettent à ce que la base contient
f54859e - 280 pannes serveur ne laissaient aucune trace
eef8f06 - douze écrans plantaient, un hook lisait un état déclaré plus bas
a43ac0e - recharger à la prise de contrôle du SW, pas après
9802cfa - la porte qui interdit de rendre une panne en succès
64ca177 - un catch ne peut plus répondre 2xx sans raison déclarée
8eef9f1 - dix-huit pannes serveur rendues comme des succès
de6dad7 - les deux angles morts de la porte d'API, et ce qu'ils cachaient
b1d7103 - l'atteignabilité remplace l'ombrage
081db31 - douze routes qu'Express n'atteignait jamais
892633e - appariement en chemin complet, et un seul extracteur
d8d42ed - cinq écrans appelaient des routes montées ailleurs, ou nulle part
fb69b3f - les trois contraintes ajoutées aujourd'hui, et ce qu'elles ont attrapé
a993756 - quatre routes qu'Express n'atteignait jamais
2c46688 - le sélecteur de période des analytics ne servait à rien
003c33c - encaisser n'a jamais compté dans le relevé des agents
020219c - les compteurs d'actions agent étaient faux à deux endroits
0b5f80a - les réglages des actions ventes partaient dans le vide
c9ad588 - huit paramètres promis au modèle, et jamais lus
bd6373a - les totaux des listes de devis et de factures étaient concaténés
6b828ee - ajouter un produit du catalogue faussait le montant du devis
3173bee - le calendrier affichait « undefined 2026 » la moitié de l'année
20ee1db - CLAUDE.md décrivait un service qui n'existe pas
203e353 - treize appels vers des routes qui n'existent pas, et la porte qui les voit
502cc8f - reliquats morts, deux erreurs avalées, et la règle qui voit la zone morte
b88b8cb - des chiffres inventés, présentés comme des mesures
0cfe3d7 - un dossier qui n'en était pas un, un destinataire ignoré
1be087a - les créneaux d'une landing page étaient lus dans le fuseau du serveur
b63d657 - Outlook créait un événement unique là où Google créait une série
1e0390d - quatre filtres de liste qui ne filtraient rien
7a8c41e - trois endpoints qui échouaient ou mentaient en silence
fdb2e90 - eslint, et la porte est fermée en CI
475a86f - three more crashes on the error path, and switch cases that leak
07e2334 - a geocoder that always failed, a catch that crashed, 1811 lines of dead code
c6b35fd - put the last disable directive where the rule actually fires
5f99a7c - 505 errors to zero, and six real bugs were hiding in them
fa7495e - 15 MB of public files nothing referenced
7b58ced - every modal in the product now traps focus, 55 to zero
c970953 - a modal I "fixed" crashed on render, and CI caught what I did not
5be307e - the same shape on the server, a query inside a loop over rows
a97db97 - the last two screens that opened one request per row
ce7906e - the lead list opened a thousand requests to draw itself
c005182 - 55 modals to 6
89f491c - 55 modals to 11, and four bugs in the tool that found them
3b9a3ef - eleven more panels, and the codemod bug that was wasting them
d78f9d3 - the modal gate counted files, not modals, 55 to 26
5df16b6 - twelve more modals reachable from a keyboard, 43 to 31
b11e675 - twelve modals a keyboard user could not escape
c9d2349 - the untranslated screens are in French, 159 missing keys to 3
e084e9d - thirteen keys were rendering as themselves on screen
93affc8 - the list endpoint returned the whole table, every load
99e1102 - an event asked for at 14:00 was created at 16:00
96aef32 - four invoice statuses the database cannot store
6a19736 - one quote-creation path, and quotes now have an expiry date
867da08 - three of six recurrences did the wrong thing, one of them daily
16487fd - one creation path, called by the form and by the agent
e55cf20 - a period that was declared, asked for, and never applied
0eccae4
- parameters the actions promised and no code ever read
17f7e48 - prospects the agent created were invisible in the CRM
cf0a805 - the agent billed in the wrong currency, with no VAT, under a number that now collides
71b862e - document numbers belong to the issuer, not to the platform
f7f82a6 - emailing an invoice returned 500, and payments closed on the wrong number
2496afe - seal the activity ledger, so tampering leaves a mark
e8d00fb - the receipt, what your agents did, and what it was worth
0a36c6d - the tool selector forgot the subject the moment you said "vas-y"
ecee42e - agents could not see most of the actions they are entitled to
93aee69 - load what production loads, 68 route modules, at import
79354cd - import the migration entrypoint, which nothing did
dd3bd23 - restore the function boundary, prod has been 502 since 21:45
f6e7ab5
- remove every trace of the departed inference provider
2562b6c - the safety dashboard was reading a table nothing writes
3561feb - quotes were emailed to clients with a total of zero
4f66ca9 - archive the PDF for hand-made quotes too, and keep it current
d5aa200 - the quote PDF is a document, not a download
36d2d25 - a correction becomes a rule, and memory reaches the prompt
20a75aa - show what the agent is doing while it does it
acd8cfc - read the attachment, not just the ones that happen to be plain text
a22ea87 - an execution loop, the agent now sees what its actions did
011a717 - the quote/invoice number on a chat card now opens Expensa
4a17acf - a drafted email had no card, so no copy and no send button
c7dc05b - the compact action list shipped the signatures without the manual, and create_document threw its content away
76180c6 - hard spend guards, a daily GPU budget and a maximum runtime
aac5835 - escalate GPUs on capacity failure, and make the knowledge base actually reach the model
4ab442d - walk the whole FK graph instead of fixing one level per round trip
6706aac - stop guessing which tables reference an agent, ask the schema
16b62b3 - deleting an agent 500'd on a foreign key the handler never cleared
bdcdf27 - deleting an agent 404'd because this one route read :id differently
7493e5c - no agent has been told which actions exist since Xpander was removed
15f4266 - the per-message context built fifteen fields and the model read two
00e4376 - the idle sweep was killing the pod while it was still booting
6b19272
- Sophia invented create_pdf_devis because she was never allowed to make a quote
57032c1 - the business lane asked for three GPUs that do not exist, so the pod could never be recreated
8c11051 - the pod could no longer be woken, a tier gate and a deadlock, both mine
1f6d283 - 115 columns down to 8, this time derived from the model and proven by a request
fc20ad9 - restore the bare findByPk, naming `subscription` 401'd every request
643cf00 - every locale URL was a soft 404 the moment the stale prerender went away
88929d3 - the focus ring was four times the floor, clipped at the edges, and invisible in the light editors
71ec48b - the audit's 45 confirmed holes, and the metering that was never enforced
7002c43
- remove Claude from KIWI
2b2c402 - delete the Education module
a1418ef - stop marking the default, and defer the repeated affordance
ec47e89 - a third shorter, nothing removed
5b37c9c - Todo is half done, not untouched
78d50df - 720 MB of resident set, and why repairing a dead loader broke prod
ba23383
- the nine broken journeys, and the invariants that make them findable
e481448 - measure what is open, and 60 disclosures that cannot be opened
dcea57f - --expand-all, because a collapsed panel is never measured
70ea05b - the module the design pass had queued, plus what a closed panel hides
97423ca - 16 more, and the codemod finally stopped guessing at scope
409f472 - focus visibility and accessible names, with the measurement traps
7f7a008 - the app removed every focus ring and never put one back
f7da17d - repair JSX the last commit broke, and stop the audit scoring a dead page
9ca37bb - 60 controls announced only as "button" or "edit text"
0bbff79 - restore two entries a regex swallowed, and add the modal lessons
eea2ee9 - 12 more paid off, and the hook was stealing focus on every render
605714f - the categorical palette question, answered
666309f - the gate can see raw state hues now, and the islands are declared
e67f628 - the modal a11y gap, and the two codemod traps it exposed
10380e8 - the hook that does all of this was written, then never adopted
c4cce96 - the audit flags, and --expect as the habit worth keeping
6781f1b - drop a comment describing a fix that is no longer there
6cecb0b - the light editors were never rendered, and one finding was mine
9b2b3d2 - record the mobile audit and the flex-1 min-width trap
aae90e4 - nothing had ever been measured below 1440px
d08457b
- a duplicate key deletes half a colour role, and green tests can hide it
042b6ef - audit the 40 public pages for the first time, and fix what it found
cd6eda5 - a duplicate key had deleted half the danger and warning palette
90b9a78 - the audit tool can report zero because it never arrived
44565d9 - the conflict warnings were amber, not warning
3cf7e51 - dismissing the suggested-times panel was saving the event
207ba53 - record the French-accent rule and the subprocessor rewrite
eaffb7c - the subprocessor table listed a company we stopped using and hid nine we do
b8e2aa1 - the French was written without accents, 729 strings, 13 files
277f154 - correct what actually leaves for Sandra, and where the fix has to happen
90ccbde - SANDRA_ENABLED is true in prod, the warning was not followed
515d88a - define the 57 Calendar keys, baseline 219 → 160
8fa32f5 - define the 87 auth-page keys that rendered as raw identifiers
3fe364d - last two services, no hand-written .d.ts remains beside a .js
5fc9449 - todoService, 26 promised response shapes the code never guaranteed
ad789ce - apiRateLimiterService, and three real defects its .d.ts was hiding
28c8bfd - make two service boundaries verified instead of declared
9ce256e - encode the rules the build cannot check, 50 tests to 218
5702d77 - audit where user data actually goes, because the RGPD page is wrong
22c6dd7 - the workflow editor's unreadable labels, and !bg- defeating disabled
146ea5e - AgentDashboard
bb8475a - the history, coach and small panels, module done
5c10034 - the Blog and Social tabs
63eabcb - the Reply tab
90c96c7 - TemplateLibrary, the Compose screen now reads one language
d2d782e - the prospects panel and the variable picker
a6467b3 - the Compose card followed no language at all
6328b2a
- fail the build on shade steps that do not exist
be85d69 - the tail of the surface sweep, and five classes that drew nothing
06ffda8 - 36 white labels on solid accent fills, and the shared components
e86854e - give the light theme its own measured roles
634398f - 110 interactive gradients were flattened into invisible buttons
8f93a0e - Education and Communication Hub onto the semantic roles
c26f8e7 - CRM pipeline onto the semantic roles
098e9ac - Workforce onto the semantic roles
29b747e - one source for the config maps, and brands that are brands again
caa96cb - record what the UI passes established, and what they broke
348af80 - public and auth pages onto the semantic roles
32ddb9b - remaining modules onto the semantic roles
bad2b0d - LandingPages onto the semantic roles
008d566 - Sales Accelerator onto the semantic roles
39f9e6d - shared components onto the semantic roles
af195bb - three measured defects in the token and Button layer
9496afa - measure the interface instead of eyeballing it
8c57e26 - sync() aborted on the first table, so half the schema never existed
9c661ac - parse windowMs, and key signed-in traffic by session not IP
9189f89 - one icon set, migrate lucide-react to Phosphor, drop the dep
b79a22a - elevation does not stack, and one corner language
31629b7 - the four state accents were declared but unused
c23b5ea - flatten the chrome, cards, buttons, fields, type scale
1dc8ed1 - one request per config, not four, and clear the caches on logout
3a8b85b - stop every local build from calling the production API
b5e0d92 - apply the semantic palette across the app
24ad2c3 - semantic palette, and delete the override layer
b20c65c - stop calling a React hook from a service class
03fbcd1 - surface the real defects, parse Tailwind CSS, drop dead noise
41465c8 - make the lint run mean something, 8086 errors down to 816
de47787 - fold the workflow editor's greens onto the brand ramp
d0505e6 - 21 ReferenceErrors that react/prop-types had been hiding
a0a1ccd
- drop the 'feeds' OAuth scope, it broke Instagram connect
53f2997 - fold 37 off-brand greens onto the single brand ramp
53e08cc - align the client with the real v1 spec + wire Instagram placement
90fbb93
- diagnose TOKEN_REVOKED at the source + lock the logic with a test
4573509 - clean logout + redirect on a genuinely revoked session
8c505b2 - purge stale host-only kiwi_sess cookie on login/logout
ff9800c - Merge branch 'design/color-unification'
49f8ada - unify accent to brand green, repoint primary/secondary palettes
d2857c9 - stop caching sw.js immutable, THIS is why updates never shipped
d1ea133 - unify Education accents to green (pilot)
f2badbf - autoUpdate, new deploys apply on next load, no stale cache
3c05adb
- scope the pod-warming overlay to the chat workspace
5d2a47a - sync CLAUDE.md with Xpander removal (self-hosted only, no fallback)
93b964d - minimalist module page headers (passe 3)
7cc1128 - minimalist dashboard chassis, strip noise, tighten density
607e355 - Merge branch 'refactor/remove-xpander'
9d94e6c - drop Xpander from .env.example + self-hosted runbook
baa9e45 - gut + rename XpanderService → SelfHostedInferenceService
d209548 - delete dead Xpander-only services + wiring
8fcd106 - route the last live Xpander calls to self-hosted
94b6bbd - route to code lane when RunPod-managed (auto-provision gate)
036c0a3 - finish code-pod lane wiring for prod
b1bb0ef - gitignore Python __pycache__/ bytecode
4c919af - compact embedded todo header + chat fills PiP width
41e3398 - rich Workspace PiP, tabbed full Todo + inline agent chat
e683d4d - auto-deploy on push to main (fast EN prerender)
6dc9a56 - stop header rows collapsing in the floating panel
2c142a3 - keep Workspace PiP button always visible
2274b7e - floating Workspace window (Document Picture-in-Picture)
74c633d
- make code_url optional, pod auto-provisions on first use
d3735b2 - code lane self-provisions on first use, no POD_ID needed at boot
cd0b829 - code pod lane, full lifecycle management for Kai developer agent
ccea46f
- workspace-file lenient parse + overflow + orange inline code
ae4e25d - detect workspace-file blocks by content not className
0cc568b - parse workspace-file blocks regardless of fence tag + friendly network error
581e435 - rewrite system prompt, tighter Claude Code interaction pattern
1b00ea7 - ask before showing code, not after (Claude Code pattern)
5dcb8c8 - remove false-positive hallucinated-action warning
cc9ef22 - inline code visible in agent messages (green on dark bg)
38efa1f - cap workspace context + tighten token budget to prevent 400s
fe4ff85 - dynamic token budgeting for self-hosted conversation history
ae913b6 - agent-specific slash commands
afac36b - auto-delete stopped orphan pods in reapOrphans
54e3ec4 - skip Xpander action instructions on self-hosted path (token overflow)
34d6bda - resolve live pod URL after ensureAwake + hide voice btn on agent page
f12acb7 - use vLLM /health instead of /v1/models for readiness + pass conversation history
7674ed3 - persist pod endpoint to DB after recreate, restore on restart
fb62ee2 - remove Xpander completely, 100% self-hosted pod
93b8c1a - route ALL traffic to self-hosted pod, drop Xpander as primary
f165f3d
- handle lazy (content:null) snapshot files in the edit card
a1dcfb9
- set-code-env workflow, wire Kai to a self-hosted code pod
06c4538 - name the code-lane model (Qwen3-Coder-30B-A3B-AWQ)
1b5cbf2 - sync .htaccess CSP header with index.html (unblocks Monaco + TradingView)
a3016a3 - unblock Monaco, allow jsdelivr in CSP + lazy-load the editor
c798fd1 - Monaco editor, real VS Code tokenizer, minimap, find, go-to-line
a94e28a - real syntax highlighting via react-simple-code-editor + hljs lexer
bdb219d
- visible editor (drop broken highlight overlay) + hide bottom bar when loaded
2ad3b5c - visible highlighted text, full file tree, header project switcher
a4c6b2f - syntax-highlight theme + 90vw/90vh modal + header IDE button
ed06de5 - preflight dist-consistency check before shipping
1034474 - fullscreen Workspace IDE (file tree + tabs + editor + save)
9c2f7c0 - slimmer agents sidebar + collapse to avatars-only
a15e028 - port Gaston's code-quality harness, static checks on workspace edits
f9abe8d - use AlertModal instead of native alert() for workspace messages
a3bd92a - accurate File System Access unsupported message (Brave flag)
3171b65 - crash on Workforce page, 'language is not defined'
70358fc - browser-API capability layer + wire the missing useful ones
f56b7ca - local folder workspace via File System Access API
87300a6
- bounded agentic loop, planner, evaluator-optimizer, run tracing, MAX_STEPS
b38de2a - document the Xpander+RunPod routing split, cost model & lever
9bca631 - idle-sweep uses boot time as floor, orphaned pods sleep after restart
af9ca33 - adversarial hardening, SSRF, exfil, prompt-injection, kill-switch
e6912c6 - harden the job queue, per-user concurrency cap + stuck-job backstop
93c42ce - self-hosted voice box (TTS+STT+embeddings), kill the last OpenAI deps
050b95f - self-hostable STT/logo/geo-LLM + data-egress doc (nLPD)
27455a0 - model-aware fal provider, Seedance 2.0 selectable (env-only switch)
f18dff6 - second routine nudge timed to trial expiry (north-star)
c5774dc - contextual upgrade prompt (Phase 2)
62133f4 - guarantee a routine falls out of onboarding + instant-proof enable (north-star)
b355e10 - instrument the monetization funnel (Phase 1)
a21747a - reliability batch 2, honest sends, validated stages, wider PII guard, conditional media
a69a34d - per-tier monthly cap on AI video generation
c0023a4 - set-image-env, wire prod to the self-hosted SDXL image pod (token via dispatch input)
780b444 - default to SDXL (ungated), FLUX.1-schnell is gated on HF (needs a token)
5e0c310 - self-hosted image pod (Flux.1-schnell), new 'image' lane, OpenAI fallback
19c3910 - reliability batch 1, refunds, flat actions, streaming, data follow-up, honest failures
9a7d3c3 - also strip all SELF_HOSTED_VIDEO_* vars (retire the pod system when switching to fal)
cbd0033 - always notify (start + ready) + live spinner in Workforce for long jobs
b783b61 - video requests use generate_video (not image), kill fabricated images
e4c6c7a - follow-up turn after data actions so the agent actually ANSWERS
a16dbc0 - 7 more colour-grade looks (teal&orange, sunset, neon, moody, matte, airy, film)
822c4cc - business-aware AI storyboards (full brand context + content type/platform/goal)
639e1ad - handle multi_tool_use.parallel wrapper (parallel tool-calling artifact)
4dd36fb - market report falls back to web search when Tensor has no data
cb42335 - set-fal workflow, activate fal.ai (FAL_KEY via dispatch input + VIDEO_USE_FAL)
50fadcc - fal.ai Wan 2.2 provider (VIDEO_USE_FAL), same model, fast + pay-per-clip
28e9483 - lighter A14B frame counts (81/97/121) for bearable render times
81c8974
- delete gallery clips, right-click context menu + hover trash
ee87178 - backfill agentTemplateId on legacy agent replies
75b2f97 - wire prod to the Wan 2.2 A14B pod (A100/H100 80GB, I2V model, staged CMD)
8493da9 - Wan 2.2 A14B (flagship), split T2V/I2V models, dual-guidance, staged deps
96d61a7 - persist agent replies + reliable chart klines proxy
cdd901d - render at Wan-native 720p (1280×704), big quality jump over 480p
ee9d009 - stop scrollable panels flickering on hover (constant scrollbar gutter)
33af534 - wait for pod deps_ready before /generate (no more 503 on a cold/recreated pod)
3b0c21d - merge project bar into the top toolbar (single row)
72f1c65 - saved projects (new / save / reopen / delete)
a35fded - After-Effects-style timeline editor (trim, drag-reorder, transitions, delete)
d8c9e1c - show which clip/step is rendering (scene N/total, stitching, post-prod)
d764259 - rebuild prod builder CMD from hardened server.py; token via dispatch input (not stored)
d090896 - retry model download through transient hf_transfer/httpx flakiness
2b7568f - crypto→Nova routing, hide vendor tool names w/ playful status, Nova no-code rule, video modal player
5b73966 - full recreate-resilience, set IMAGE + builder CMD + idle 30m + new Wan pod
6ded4ab - one-shot fix-video-env, point prod at the Wan 2.2 video pod + hard restart
33566b6 - async pod generation (job_id + /status) to beat the ~100s proxy timeout
ed53c00 - switch model LTX-Video → Wan 2.2 TI2V-5B (self-hosted quality)
a98fbf3 - higher render resolution + quality prompt cues (LTX)
fc7442f - allow generated videos in media-src (api.app.kiwi + S3)
5f9ad45 - persist video studio composer + restore last dashboard route on login
350a70a - false 'scan failed' toast + wider sidebar
b1803f1 - generate text in the user's UI language + strip citation markers
a30aff0 - prospecting save no longer 400s on bad social handle + SW ignores cross-origin
5369cb5 - overwrite fields (not just empty) + clearer hint
374c25e - input icon padding + robust AI website scan
407eb15 - multi-scene sequences (storyboard → montage)
515407f - async generation job pipeline (foundation)
e146d49 - AI script tab (by-sentence, editable) + tabbed Prompt/Editing UI
0c43777 - 15 credits per generation
2a49254 - generate_video action, agents can create marketing videos
4ea00ee - remove one-shot re-wire workflow (video env live on new pod)
6663c4c - one-shot re-wire video pod env
ec18035 - self-hosted generated music (MusicGen) + voice (Kokoro TTS)
79f16ba - post-production suite, text, voice, music, grading, publish
0dff9d9 - full video-app layout (3 panels + filmstrip)
96cfd96 - follow brand DA palette (dark navy + emerald), drop grey
4786587 - AE-style viewer toolbar on the stage
0ec0a6b - flat anthracite (After Effects) palette
d57df9f - 1-click regenerate from a gallery clip
a33fc16 - two-column studio UI (composer + stage)
7435e0d - remove one-shot video env fix/check workflows (done, env live)
971d5b0 - check via node+dotenv (what the app sees)
14170e4 - read process env via /proc
19f996a - read-only check of running process video env
8c87f74 - one-shot fix, write video env to both files + hard restart
f9684d9 - remove one-shot video-env wiring workflow (done)
a8e675a - one-shot workflow to wire SELF_HOSTED_VIDEO_* into prod .env
bbaec00 - media picker, brand-from-URL, gallery, branded end card
8219736 - inject brand colour palette into the generation prompt
77428ed - centered marketing layout, templates + product image→video
8f7b0b4 - tighten gap between Workforce and Todo/Media (mb-3→mb-1)
c357412 - serve logo (public perms 700→644) + narrower rail, less padding
ad0bd0f - untrack __pycache__ bytecode + gitignore it
69dfb4c - pin Workforce/Todo/Media, fix media thumbnails, declutter todo
1ff9bf7 - add tiktoken/protobuf/blobfile for LTX T5 tokenizer
db64991 - torch 2.5.1 base image (DTensor for transformers/accelerate)
7a179d5 - pin diffusers==0.32.1 (torch 2.4 compat) + /debug route
1a07088 - lazy-import torch/diffusers so uvicorn boots instantly
08ad7a4 - persist generated clips to Media Library + S3
f735397 - reap orphan duplicate pods in idleSweep (cost leak)
8ddb652 - self-hosted LTX-Video pod image + server contract
6af305a - freemium KIWI watermark + sleep-managed video pod lane
73ba62b - AI Video Studio format/duration/brand-style options
174ca16
- media by URL + engagement analytics (likes/comments/views + top posts)
f9aee05 - twitter→x normalize, post-results polling cron, readable connect errors
f7f14b6 - publish to /social-posts with snake_case social_accounts
af97b27 - send X connection_type oauth2 (omitting it 500s)
c2a29bd - back to Instagram Business Login (modern non-deprecated scopes)
f91f1f8 - Instagram via Facebook Login per PostForMe docs
b53967e - brand-colour platform icons via exact hex
430870f - deauthorize + data-deletion callbacks for App Review
346bc35 - close the OAuth popup by polling it (window.opener is severed)
a084b74 - default Instagram to direct Instagram Business Login
e552918 - published posts are light-green + not draggable
a8fb35c - Instagram connect via Facebook Login (per PostForMe guide)
0697a03 - surface professional-account requirement before connecting
390452a - drop redirect_url_override so OAuth uses PostForMe's callback
41e7632 - default Instagram connect to Login-with-Facebook
da01f30 - ↑/↓ recall of previously sent messages (shell-style)
f0bcc5b - Instagram/LinkedIn connect + s3:// image resolution
e1a806b - darker light stop on gradient (#141a26 → #101420)
f1da585 - restore <select> chevron (gradient no longer clobbers it) + Accounts bar in Comptes tab
9b2cd05 - verify PostForMe Standard-Webhooks HMAC signature + darker input gradient
a52c0ee - snake_case PostForMe fields + normalize account list + popup UX
9e0c724 - tighter padding, bluer bg gradient, 6px radius
b643c74 - unify blues, cyan/sky/indigo → blue scale (201 across 53 files)
5b69dae - frontend deploy is manual-only (local npm run deploy)
f50ba20 - key on real client IP (leftmost XFF), not proxy hop
92f9123 - invert the gradient (dark top → light bottom)
65bd45a - skip futile canonical-repair on no-canonical pages
8b22cef - EN-only routine deploy + full (all-locales) periodic
0475b53 - local build+deploy script (npm run deploy)
65f8433 - subtle gradient fill, 4px radius, 1px blue-gray border
a823652 - centered 'Connect an account' CTA when none connected
661cdb5 - re-enable the floating agent bubble on the Marketing module
63d8083 - hide unconnected platforms + flat darker inputs app-wide
d08e26a - never force-redirect to /login on 401
74be0f2 - stream tarball to Hostpoint instead of per-file rsync
123d1d9 - dark solid track + lighter slider, no transparency
e804748 - redirect to login ONLY on confirmed session revocation (not any 401)
becf7a9 - stop rate-limiting /auth/refresh, it was killing sessions
cd79b0c - rate limiter only counts failed attempts (stop spurious lockouts)
2ee9cee - remove auto-redirect-to-login on 401 (was expiring sessions / breaking login)
ef73a07 - auto-redirect to /login when the session expires
4d17a38 - double login rate limit (15 -> 30 attempts / 15 min)
ee77100 - guidelines settings modal that steers the content/social agents
52437b5 - Nova chart from action result, post delete, clipboard image paste
0834678 - connected-only accounts, hide unconfigured platforms, agent bubble + remove dead config
c64ad70 - Free tier limit was hardcoded to 500 MB, should be 100 MB
c6cd488 - CSP for charts, stray scrollbar, update banner, toolbar modal, voice gating + chat tweaks
d5814db - rebuild as a focused social media manager + remove dead code
bf068b7 - trading copilot (real levels, price alerts, Tensor report) + per-agent chat history
b3c1409
- draw support/resistance levels + tighter prompt; Home polish
7d6cd69 - fix Aukimi claim + use real aukimi.com screenshot
ca6349a - agent-drafted social posts render as interactive cards
a53f669 - merge Marketing+Social Growth, full-width Home sections, dev-crash fix
f957ef3 - crash on Home when rendering Nova (unmapped 'education' category)
e406f7e - kill stray horizontal-scroll on public pages (single styled scrollbar)
a89b2af - propagate Nova (crypto-educator) to all 28 non-core locales
71647a8 - Nova on agents page + Home highlights (Aukimi, crypto, social)
e5a85c7 - rich cards, choices/form/chart/steps/tradingview, real-time page loop, voice, Marketing Studio, UI polish
947c221 - reinforcement loop, auto-dedup, Firecrawl, Nova, Tensor data, voice gate
da079a2 - narrower panel + tighter padding
d96216a - table card auto-detects the list payload under ANY key
8a2428a - interactive table cards for list-action results
676dc5d
- chat scroll-to-latest on switch, multilingual enum params, quote status, note button
4d30608 - pod-local + multi-DC business option (unblock EU-CZ-1 capacity)
753bbd3 - agent workspace actively wakes the pod (was deadlocked)
90028b6 - live wake-up progress with playful staged messages
e50aa93 - sleep-managed vision pod (2-lane PodLifecycleService)
b031eba - self-hosted vision path for the 2 remaining Claude calls
cb7eebb - app-wide "AI warming up" indicator
ee95eb6 - --enforce-eager for faster pod cold boot
cb03ef4 - migrate all text generation off Claude → self-hosted pod
3fd5c17 - self-hosted generation foundation + presence warming
02c55e4 - complete the artifact + structured-param sweep
347da40 - surface artifacts + fix invoice items (like the quote)
b877241 - make Isabella populate the quote items array
72275d5 - Isabella actually creates the quote + drops a PDF card
ed04697 - unify the Todo modal to one glassmorphic DA
4cd6789 - multiple user-created todo lists (Perso, Projet X, …)
51a8f8a - actually send the personalized first email
6ce7705
- in-app north-star nudge, one-click enable first routine
694d509 - slash commands in the Workforce chat input
0fde4fe - regenerate response action
d1cb91f - copy-message action
dcb5d82 - contact/prospect + quote/invoice cards
3414e3d - copy button on code blocks
d773cfb - event/meeting card with Add-to-calendar (.ics)
f2731aa - editable email card before send
08c9045 - inline PDF preview in file cards
e68b56d - paginated email cards + ticket reference cards
eded08d - robust clipboard-image paste (items + files)
c617c22 - in-chat email/file cards + image previews (send from chat)
16e2cb1 - syntax highlighting for code in agent chat
cd5c5fa - control-room UI under Sophia's Routines
9535146 - control-room API, status, suppression list, add/remove
05f8eea - production-grade autonomous outreach with send-boundary guardrails
55ccf07 - autonomous prospecting routine (draft-first) + reply guard
c755288
- isolate localStorage per route so root pages render in EN
93c5ea8 - outcome-led base SEO in index.html (title, OG, JSON-LD, noscript)
ed89832 - outcome-led framing on PWA manifest, industries & compare pages
0a50293 - propagate outcome-led framing to secondary pages (30 locales)
8516f2e - aria-label on 37 icon-only close buttons
dd19a69 - harden Microsoft webhook + PostForMe webhook auth
c2167af
- social-account IDOR + Instagram image path traversal
fbab15f - cover useUserTier (paywall gating) + onActivateKey a11y
f411114 - cover geo helpers + i18n hook (+ DRY the coord helpers)
e070528 - index vibe_scheduled_posts for the social-publisher cron
68303fc - VibeMarketing mass-assignment + contact-form rate limit
965abe1 - defuse SVG stored-XSS on all serve paths + stop token log leak
5b53e4b - remove orphan components/dashboard/i18n.json (no importers)
a1bff74 - lazy-locale, timetracker + components (56/56 complete)
6e978cb - lazy-locale, Logs + 7 auth pages
c54860d - lazy-locale, edu, clientfinder, Campaigns, VibeMarketing
0dbfe93 - lazy-locale, calendar + profile (manual, biggest custom)
793dfbd - lazy-locale batch 3, Expensa, sales, community-public
a04db63 - lazy-locale batch 2, nodes, Workforce, messages, auth (+2)
1979acc - lazy-load non-primary locales across 37 modules (codemod)
f672dbf - post author controls hidden, CSS typo, input hardening
c812476 - free-busy always empty, getEvent missing, Swiss tz default
1c83509 - localize hardcoded French, batch 3 (core done)
3a70356
- localize hardcoded French, batch 2 (4 components)
280441a - localize hardcoded French, batch 1 (3 components)
c8f1e6c - stop realtime socket churn + pivot columns past Z + guards
d1489e3 - bound WS write access + input caps + pagination clamp
4b97a24 - stop realtime socket churn + MarginPicker crash + hardening
b19b74a - bound WS write access + input caps + pagination clamp
9ab77f6 - by-prospect view showed no emails + stricter validation
37e02f7 - repair broken .filter(Boolean) in 23 error handlers
c51caa1 - unify coordinate order in Geographic Lead Discovery
0ff68fa - eliminate vitest inter-test flakiness
980c293 - site-wide Organization/WebSite JSON-LD + multi-schema + breadcrumbs
3c2f526 - Sentry releases, source maps, user context
206ab9a - upgrade modal + annual plan + trial-to-paid metric
f7f2209 - end-of-trial email sequence + dunning + upgrade prompts
55f8882 - long-tail sweep (labels, keyboard, spinners, Escape)
5e2af20 - modal focus-trap primitive + keyboard mega-menu (batch 3)
8a5f82f - names, landmarks, skip link, focus management (batch 2)
2ad8e48 - fix contrast (gray-500/600 -> gray-400), toast live region, login focus ring
34994e2 - charge credits after validation + global out-of-credits UX
6c2400a - credit-meter paid AI endpoints + LOW audit cleanups
c54468b - audit remediations (path traversal, cost gates, GDPR, PII)
e821973 - lazy-load CommunityPublic (was eager in the shared index chunk)
7b0d704 - lazy-load below-the-fold sections (LCP win)
6946fbd - confirmation email on first routine activation
2efd550 - elevate the routine option in onboarding step 3
f02ec38 - D+1 welcome-back email + in-app (return-leak lever)
d7bf41f - earlier multichannel routine nudge + first-routine empty state
13b678b - propagate outcome-led positioning to Features/Pricing heroes + auth SEO
255963e - reposition home SEO title/description to outcome-led
d81226c - reposition hero to outcome-led (run your business solo)
345c43e - shorten feature CTA to "Learn more" + remove card header icons
0a2f9ee - finish typing the hooks/ directory
990520c - type the gating hooks (useUserTier, useEnabledModules)
7babd1a - type the last two context providers (XP, BusinessFilter)
9fb53ed - unit-test the routing decision
e9156d4 - streaming on the self-hosted lane
444b9d7 - reduce hero top padding on small screens (pt-24 sm:pt-32)
f97bd1f - calendar legibility + AgentDashboard toggle polish
566e734 - responsive audit fixes across site + app
d0157c5 - Complete Toolkit section on 3 columns (was 2)
1cc2c0a
- declutter hero, drop cost breakdown list + tighten subtitle
93a4a60 - show the full agent roster on /agents (was hardcoded to 11)
7b12217 - hard paywall for free tier by default (KIWI-enforced)
b21f8b0 - reusable AgentAvatar with initials placeholder (no broken images)
3fe4874 - route free-tier real-time chat to self-hosted pod
9f61bcc - "Update available" banner on new deploy
4ebdd59 - add Kai (developer) to the site agent rosters
383b378 - Sophia illustration no longer clipped (page overflow-x-hidden clipped the bleed)
6ae75c0 - finish team-realign sweep (Modules + Features), drop "not a maze of bots"
606f6e8 - realign site to Sophia-leads-a-team (all agents re-enabled), 30 locales
6aa7ecd - stop cropping Sophia illustration feet (bigger, lower, square bottom)
da5fdb4 - strip leaked Xpander tool-call JSON + steer to KIWI actions
6b84626 - early-adopter social-proof line in the hero
fac5bbd - XPANDER_SHARED_AGENT_ID, bind all agents to one shared Xpander bot
eebbe92 - bigger rounded Sophia illustration + clickable agent cards
ea5920e - add self-hosted inference + Sandra follow-ups
e6f1f47 - decouple Xpander bot id from KIWI conversation key
4d5936c - give Kai a distinct xpanderId so his chat is separate from Sophia
cc2fe3b - provider-agnostic TTS + graceful degradation
85dc544 - enlarge + reposition Sophia illustration beside the chat demo
bc928be - Sophia illustration in the AIAssistantFocus section + optimized assets
cf6b4ff - Merge branch 'feat/self-hosted-inference'
8ba5045 - route ALL autonomous agent paths self-hosted (not just routines)
5c500c0 - Merge pull request #2 from nammuSeb/feat/self-hosted-inference
068782d - idle auto-sleep for the self-hosted business pod (15 min)
97945d7 - self-hosted env vars + provisioning runbook (Qwen2.5-32B-Instruct-AWQ)
4366277 - Sandra semantic-recall client + wire AgentMemoryService (off by default)
d51f1c8 - add code-specialized agent (Kai) routed to the self-hosted code pod
81da24e - InferenceProvider foundation, self-hosted routing (off by default)
e589c0b - Sprint 2, plug the funnel leaks
1ff69d0 - Sprint 1, instant 'aha' + funnel instrumentation
3403ecc - blue-gray dark gradient on the initial load screen (design system)
bdff122 - Merge branch 'feat/app-improvements'
0473984 - correct AgentContext import casing in Contexts.jsx
4a90002 - Merge pull request #1 from nammuSeb/feat/app-improvements
5483a98 - translate site chrome, Navbar, Footer + 2 home sections + credit modal to 30 locales
182c852 - homepage in 30 locales, 8 markets transcreated
fb0ea3b - market-adapt Features + Pricing for 8 deep markets
3e0f9a8 - lazy-load public pages, index chunk 4.2MB → 612KB
2f6be35 - migrate utils + design-system to TypeScript
35733ca - migrate all 7 context providers to .tsx
a3ea1cc - TypeScript foundation, typed api layer + eslint + CI gate
0965bbd - translate 22 public marketing pages to 30 locales + prerender helmet-repair pass
cbad8cb - installable PWA with offline, web-push and app badging
d46398c - drive activation toward the first Sophia routine
2ebebf2 - add Vitest + React Testing Library + Playwright + CI
9a30acc - user account + agent response language across 30 locales
bb1159f
- restore per-page meta, downgrade react-helmet-async to 1.3.0 + prerender helmet flush
215b216 - 30-locale routing, hreflang/sitemap/prerender + restyled language picker
0e9cf6b - add Vietnamese (vi) support to all 30 i18n.json files
f361ece - integrate 29 languages + create LanguageSelector component
800d343 - kill anthracite everywhere (blue-gray dark palette) + hero on 2 lines
8de791b - finish em-dash purge (public/blog/css) + blue-gray auth pages
37c62ff - remove all em-dashes + refresh stale SEO positioning
8275584 - blue-gray palette (no anthracite) on referral card + checklist
426c248 - surface referral card on the dashboard home
5550feb - carry referral code through Google OAuth signup
93c729d - stamp lastSeenAt on activity (missed in 2e009f42)
74f99ea - welcome prompt is advisory-only, never executes actions
d8c4cec - unify start story, trial-forward + Premium=workspace (Sophia-only)
cc7bbfa - grant 14-day trial to Google-OAuth signups
2fd4a39 - unify dashboard palette with the site, anthracite → gray
31e73d4 - sync backend package-lock with @sentry/node (npm ci was failing)
90eeb7b - align navbar + footer color with the marketing pages
8528703 - align marketing with the real app (Sophia-only + core modules)
9c5a178
- cover money/data/auth critical paths (was zero coverage)
14223bc - deliverability, text parts, broadcast stream, suppression, no fake-sent
da9f37f - e-signature emails were never sent (wrong env var)
6803e8a - named sub-processors, retention periods, real cookie policy page
2e84853 - retention purge crons + mask emails in logs
0083bfd - error boundaries, cookie consent, i18n on conversion surfaces, error toasts
39d78c5 - real account erasure, data export, idempotency+uniqueness
2760eca - OAuth refresh + reconnect prompts + fetch timeouts + error sanitize
6ebbecd - block sends to unresolved pseudonyms (email-to-nowhere)
7b067e1 - show combined turn cost (chat + actions), no surprise -2
ddc2dbc - parallelize agent context, kill list N+1s, deanonymize live stream
8f6f29b - add missing indexes on hot-path scans (perf audit)
307b8bc - destructive deletes require approval (agent-flow audit)
ea753b0 - stop double-execution of routines and duplicate emails (cron audit)
053bb5a - close IDOR + secrets-leak + unguarded-AI holes (audit)
725a5b3 - close remaining subscription gaps (G6/G7/G8)
7fdafbf - close 5 subscription gaps found in the audit
798597d - Premium-only, free tier gets the lock, not the toggle
39a96be - timeout never covers a loaded app + self-healing session
f2f2d73
- accept the app's 'aukimi-authed' ack, no more false disconnect overlay
fb8982c - hide the floating agent bubble on the Aukimi module
2fa0b11 - free tier gets a restricted suite instead of a hard paywall
1c2c7b2 - Premium upgrade wall with real suite screenshots
6b42b5f - design-system sweep, opaque anthracite, no glass, no rainbow
ec303c0 - one-click background jobs for Sophia, the employee who works unprompted
3785fc9 - Sophia-only storefront, honest single-employee pitch
1c4fe89 - record post-deploy smoke-test results in TODO
6f9dab8 - first Sophia task in 2 interactions (was ~10)
d18caa2 - reposition, 'Your AI employees, and the office they work in'
1d46bb9 - real gating, API middleware + route guards (was cosmetic)
3bd8066 - complete PII pseudonymization at the Xpander boundary, credits framed as hours of work
087aa11 - explicit fetch credentials everywhere, LinkedIn cleanup, AI email tools wired
d2b8e0e - refocus on core modules, close agent gaps, finalize Messages
528297a - migrate all react-icons/fa to @phosphor-icons/react
82fe1df - multi-signer e-signature + AI rewrite credit/rate limiting
fa33693 - remove JWT query tokens on file routes, enforce CSP, bump nodemailer
b7f7630 - mock PlanLimitsService so plan gate doesn't 403 chat tests
eba54b6 - sync CLAUDE.md with project scan 2026-07-16
d128696
- add FR/EN keys for e-signature UI (view/certificate/resend/declined)
d13ee0e - restore invoice/quote PDF generation, pin pdfmake to 0.2.x
639089f - Merge feat/esignature-hardening: trustworthy e-signature (audit, certificate PDF, decline, branded emails)
f1ea165 - harden e-signature, trustworthy, opposable signatures
8dbb1c9 - Merge security/cookie-only-auth: httpOnly cookie-only session auth
f29cb8e - cookie-only (httpOnly) session auth, remove JWT from localStorage
979458f
- stop stale cookie from resolving requests to the wrong user
5131729 - close remaining hyperlink-injection gaps in transactional emails
a689613 - escape user input in all transactional email HTML templates
e47a7f4 - sanitize name fields against hyperlink injection in emails
84737d6
- escape form data in owner email + rate-limit public A/B tracking
3947680 - final cross-origin sweep, 5 remaining authless calls
f0ca85e - add Bearer header to 58 authenticated raw fetch() calls (cross-origin sweep)
cf8d689 - send Bearer header on all authenticated AuthContext fetches
ac336a0
- cross-origin auth headers, Google-login bounce, off-brand load screen
bc80d21 - add unsubscribe link/header (compliance) + fail loud on missing email key
12600cc - send Authorization header on all email API calls
2cf9aed
- blog/social history save used non-existent model fields
8fc4329 - per-country localization, VAT fallback, default currency, money formatting, e-invoicing warning
c43a344 - fix misleading PLACEHOLDER comment on quote-send route
76ec3c6 - set Todo + Media apart as modal utilities, not modules
29f7213 - add Time Tracker and Todo to sidebar essentials
1692aa2 - add Media, Documents, Sheets to sidebar essentials
25e4566 - remove AI Team Leaderboard tab
f180476 - remove Advanced Analytics + External Integrations tabs
cfe68c1 - move Time Tracker/Todo/Media/Documents/Sheets to a new Workspace group
4d839b7
- free-plan banner in sidebar + remove Add Agent entirely
68c18be - cap older history messages in LLM context
639108d - send only message-relevant tool defs per call
78856a5 - upgrade listen control to a mini audio player
9e981b9 - chat input exactly 44px to match send/mic/stop buttons
dcf547e - vertically center chat input text so it aligns with mic/send buttons
b7e8a5e - full agent module is Premium-only; Free = Sophia + upgrade message
6348bc7 - gate workflow_execution behind auto-trigger switch
702aa2b
- surface Lead Generator in sidebar essentials
af3cce0 - actionable empty state in Project Manager
b422057 - create-first-quote CTA in empty quotes table
6ca6715 - empty-state nudge when connected with no events
a21117e - stop connect-modal fatigue + CRM CTA on empty by-prospect
5d49c69 - guarantee credits exist before the first agent message
8118442 - progressive disclosure in Add Prospect modal (quick-add)
3c20b19 - friendlier first-run for the leads module
57468e6 - tailored "first move" recommendations on step 3
93062c7 - connect-to-unlock empty state when not connected
5c8b5fb
- progressive-disclosure sidebar (essentials vs all tools)
1b3a5b9 - zero-setup cold-start for the AI assistant
c7800c7 - harden agent actions, landing-page XSS, auth & webhooks
b508833
- branded header in agent-only experience
fa40c1f - brand the login screen per white-label domain
1bbff10 - white-label agent-only SSO via partner auth codes
1b2e988
- remove agent search bar, align message input with buttons
58271e2 - preserve agentOnlyMode through email/password login
4b71fe7 - Switzerland localization + Swiss QR-bill invoices
880130e - geo-aware locale context + GDPR-harden shared memory
427b5c1 - lift maintenance mode, restore dashboard + login
020f692
- hardcoded maintenance page for app/login area
53c5b7e
- CSV/XLSX client import with column mapping
03931c8 - extract Invoices modals into modals/ folder
b69b27b - single source for currency format + status colors
1dce1a0 - remove dead AIOwnershipDashboard (retired Spotlight)
47e762e - remove references to retired spotlight module
a36ed2f - surface real migration failures instead of silent warns
d8b8179 - replace native alert() with toast notifications
c94f77f - remove unused creative studio modules
5da1d83
- add/rename/duplicate/delete templates in User Mailer
9a8be76 - add "Kiwi Rebuild" announcement template
f950691 - pause notice modal, agents paused until June 20
1ab8322
- kiwi-green radio accent in PDF export instead of OS blue
c4017e4 - light-gray row hover on quotes/invoices tables
7be6224 - full-width agent message bubbles + clearer tab hover
e1efc1e - match agent chat bubbles to workspace style
ce416e1 - neutral-gray scrollbars instead of blue
14a62fd - anthracite paper background instead of navy
ee7b969 - stop full-grid re-render on hover
1634b70 - correct page-break math, top margin was double-counted
fbf3af9 - request same-origin proxy URL in image editor
d36ad95 - same-origin image-edit proxy + populate Google Meet link
d532fae - opaque anthracite surfaces, kill glass/navy, fix dropdown opacity + z-index
9c141dd - crash in grid view, define bg + drop orphan setMoveTargetFiles
c705924 - anthracite+green design-system refresh + plan-limit UX + new module panels
f458bc0 - tier-based plan limits + document/email-template models
e0fec6b - gate newsletter postmark-webhook + extract shared auth helper
7630520 - app-wide security hardening across backend, frontend, kiwi-ai
3315b9d
- close the "first action" gap, 26 onboarded, 0 activated
2eb63ad - hide AI assistant hero when no agents enabled (+ prerender fix)
8fe4758 - 18 integration tests for Sales Accelerator critical paths
2fc5547 - no white-on-green CTAs + hide agents section/page when none enabled
ed26fa6 - add 5 bonus agents (17 → 22)
9b4f4e8
- pre-seed all 17 agent templates at startup
a8fe265 - add POST /_diag/migrate to force-create tables
a7d6429 - MySQL index length on VARCHAR(255) UNIQUE
7bc1d62
- Phase 4, email alerts, anomaly scan, daily recap
9288ebb - Phase 2, stats + invocations browse endpoints
e00aa00 - Phase 1, guard wrapper, kill-switch, agent caps
af75f33 - replace 5 mechanical LLM triggers with deterministic handlers
5f0147f - cut Xpander+Perplexity costs, consolidate drip cron
7be7fb1 - consolidate 7 every-minute crons into one 5min scheduler
0a886c4 - disable ProactiveAgentService cron to cut Xpander costs
702e8fe
- draft, The Freelancer's Guide to Building an AI Sales Team (Without Hiring)
0e36ca9 - enrich /my-posts with scheduledAt via raw SQL
de6a8f3 - draft, 7 Mistakes You're Making with Your Sales Outreach
caf58bb - draft, The Freelancer's Guide to Building an AI Sales Team
dfbb83f - draft, Stop Wasting Time on App-Switching (unified freelance workflow)
10822db - unbreak /blog/official, /feed.xml, BlogTab, remove scheduledAt from Sequelize model
304c3af - scheduled publishing for blog articles
62be2fb - draft, The Authenticity Rebellion (imperfect design in an AI-saturated world)
cbffcba - The Death of SEO, Why Social Discovery is the New Search Engine for Freelancers in 2026
2c5c7cf
- revert vendor chunk split, broke React/recharts interop
fa46e64 - drop vendor-charts/motion/icons/stripe/date chunks
ff0c502 - lazy-load dashboard + auth routes, split vendors
722c6d2 - IndexNow protocol, instant Bing/Yandex/Naver recrawl
f8210be - add HSTS, Permissions-Policy, CSP report-only
aa7b22c - og:image cut from 1097 KB → 60 KB (1200×630 JPG)
5e2b0a1 - remove unverified aggregateRating from JSON-LD
1042512 - /modules no longer 403s, redirects to /features
5a89d5a - sitemap bilingual URLs now match Apache trailing-slash form
048f40c - make api sitemap.xml resilient to per-section failures
340af93 - align canonical + sitemap with Apache trailing-slash behavior
bc86005
- add workflow_dispatch trigger to deploy-backend
c63657d
- own table community_chat_messages, stop colliding with agent chat_messages
46eb2ba - heal camelCase columns on chat_* tables
f21cc07
- temporary /diag/schema endpoint
e9170d7 - append backend detail field to thrown error message
0c0af56 - unblock startup when sequelize.sync hits a legacy FK mismatch
798112f - surface SQL error code + message on history 500
6bfb4ec - drop moderatedAt model field, schema-compatible removal
a275e46 - resilient ban check + better diagnostic on send failure
7037537 - mention notifications + full moderation system
a89529c - @mentions autocomplete + scroll-up history pagination
25d2dc6 - per-message upvote next to the timestamp
6f15bf3 - resilient channel list when new tables are missing
18e8be5 - bigger centered underline tabs for Posts/Chat
02c429b - Posts/Chat as a top-level segmented tab
4ca5f24 - emoji reactions, message edit, unread badges
a60c037 - Discord-style real-time chat with WebSocket
a56912c
- banking details in profile for invoice payment block
77a9a7a
- Revert "style(theme): retune dark surface palette to softer near-black + navy"
4d53638
- retune dark surface palette to softer near-black + navy
88c6089 - force outlined nodes via .node-sidebar parent + !important
05352b0 - outlined dark Node Properties items
cb87f01 - outlined dark buttons with 2px colored border
46c7930 - revive Workflow Builder, bridge it to the agent system
99a93e6
- hide entirely when user has <2 businesses
1d8885e - rewrite documentation site with full module catalog
3adc8a8 - hide floating agent chat on agent dashboard route
941676d - agent-first home, /dashboard now lands on AgentDashboard
fc2d9f2 - kanban view on the new navy palette
b3d3448 - brand green = #36fdab + cool navy surfaces (no anthracite)
1970d4e - align tailwind dark + green palettes with the new chrome
9e1e9e2 - fix the 10 failures that broke the run-tests CI
815c6ee - rename WealthForge-backend/SCRIPTS → scripts (case-sensitive Linux)
0183dd4 - tame the green, neutral tabs + flat primary CTA
e2e6c4f - darker blue-tinted palette + Geist body + Button text contrast
5f2d369 - /my/settings was being matched by /:username/settings (404)
62ef849 - full anthracite palette migration
3665a70 - module template, SectionCard, StatTile, PageHeader, EmptyState
a56795a - visual sweep, AIOwnership, ProspectCenter, sales generators, brand panel
97e02be - residual drift audit, orphan hexes + glass-card overlays
2a5c162 - NewPostModal accent, emerald → green (case-fix)
97a12cd - MediaLibrary palette + global radius softening
871e54e - module pass batch, ClientFinder, Aukimi, Loyalty
07c8081 - comm-hub finish + landing-pages module pass
7145d7c - module pass, modals on shared surface, tabular numbers
c8fdb47 - module pass, header chrome, badges, mono cleanup
dbf6036 - module pass, kill HUD font, modal on shared surface
c5161df - module pass, modals on shared surface, mono → tabular
3574a11 - module pass, sober chrome, keep categorical hues
7a9015f - global chrome, modals, XP bar, toasts, onboarding
f5c1f1e - global layout chrome, palette unification pass
82b3ac9 - darker palette + global visual normalization layer
fabaeff - unify palette to cool dark navy + kill teal/broken greens
fef47d9 - flat minimalist UI, phase 2 (top 4 modules)
1e8125f - flat minimalist UI, phase 1 (primitives)
0178d99 - kill 2-second marketing-site flash after login
e4c24af - per-user transformation history + booking 500 fix
b790ab0 - wrong service method name + saved-searches route order
e9b9a76
- SEO meta, version history, visit analytics, AI rewriter, custom HTML, lead magnet
7b2e46c - subscriber segments + drip campaigns with cron processor
1d726b8 - send-time AI + AI generator + click heatmap analytics
81e91d9 - approval queue + voice mode (STT/TTS)
06eb940 - expense AI categorize + VAT detect + cashflow + receipt OCR + recurring cron
62b52ca - risk detector, burndown, client portal, Gantt + auto-link
d26de2e - pomodoro hook + idle detector hook
ad583da - categorize + timesheet + calendar sync + leak detector
dc611d8 - time-blocking auto-generator + smart reschedule
dd56045 - pre-meeting briefs + AI scheduling assistant
d1e086b - meeting templates with auto-created notes doc
72bfd0f - email snooze with cron, scheduled send already shipped
d58a6b8 - voice-to-email draft (Whisper + Claude polish)
3f8fb1c - 30 email templates across 6 categories + apply endpoint
983aecd - real stage automation rules, todos, webhooks, notes
a297169 - /health endpoint, conversion rates + cycle + AI insight
a749d5c - weighted forecast, probability × value bucketed by month
1f13530 - unified deal timeline endpoint
4e38daa - deal templates + apply endpoint
cc20a56 - voice memo → transcribed CRM note + auto todos
9325984 - stalled deals list + AI suggested next actions
4de6df5 - win/loss analyzer, patterns from closed deals
7638854 - AI reply classifier (interested / not_now / objection / …)
cc316ca - AI-generated personalized openers from prospect signals
a5ceb8f - competitor weekly digest, AI summary of what's working
7cc43fb - brand voice training, paste samples, all generators adopt it
752b948 - pre-publish engagement predictor
b93f951 - AI content calendar generator
ec3b4de - /hooks/rewrite endpoint (missed in last commit)
de94615 - hook library + AI rewriter
3ac8e28 - drag a todo onto Calendar to schedule it
f28c42f - global quick-capture (Cmd+Shift+K) for fast triage
336203f - pomodoro 25-min focus timer per task
9c01a84 - AI breakdown + AI prioritize via Claude
e0b715f - checklist templates, onboarding / launch / month-end / hire / review
618dcd4 - browser image annotator, arrows, rectangles, text, freehand
caa3dcf - AI auto-tagging for images via Claude vision
c44348e - file version history, snapshot, list, restore
b986e50 - atomic bulk endpoints + bulk tag action
5215c6e - explicit share-link endpoints
2c1478a - server-side Yjs CRDT mirror, phase 1 of true CRDT migration
2565c01 - cell-level AI actions, summarize, forecast, clean, anomalies
c9f2ce2 - live-updating charts + area + donut chart types
a69a7c5 - conditional formatting, color scale, data bar, duplicates
8cd0926 - 4 new templates + auto-fill from profile
ee1cbe2 - exclude yjsState BLOB from list endpoints
189bed6 - e-signature flow, request, public sign page, owner notification
d739199 - /slash AI commands, rewrite, summarize, translate
2c03728 - templates auto-fill from profile + NDA/Quote/Invoice
ac2e5e7 - server-side Yjs persistence, survives all-peer disconnect
a179be8 - finalize dashboard, Tailwind safelist, soft retry, empty week
deded3b - finalize module, startup env check + mobile header
c330cc3 - finalize module, i18n credit packs, toasts, env check
ab8e7ee - finalize module, toasts, success feedback, GEO API, env check
a34e97f - finalize module, i18n, agent actions, rate limit, error toasts
79a1bbb - use leftIcon JSX instead of icon component prop
5d9e401 - nest BlogManager under LandingPages module
13d1927 - wire i18n on Editor + Stats + Performance
fefe9e4 - add PATCH /agents/:id for generic agent updates
4d1b558 - add real expense tracker, model, CRUD routes, tab UI
c517688 - mobile responsive + recurring tasks
bdad0e1 - redirect to dashboard immediately after login
4b8e32a - persist billing rates/currency/enabled server-side
1d51271 - drag-to-create on MonthView + MS secondary calendar fix
01940cc - mobile responsive 4-panel + drafts folder icon
2a168a6 - CSV import, saved searches, fix favorite route, responsive
fc5f2e8 - register PipelineStageRule in Associations.js
e3049ed - persist + execute stage automation rules + mobile responsive
c1ddcd1 - remove orphaned SalesPsychology hub
1a20826 - sequence cron, agent actions, DB-backed templates, header i18n
ceee3bf - surface social-connect errors via toast
d60cae4 - retry, vibe detection, i18n on hub
4642823
- stop dropping completedAt + parentTodoId on every boot
32b4041 - recurrence UI, subtasks, due-date notifications, model sync
8441980 - skeleton + fade-in for thumbnails instead of broken-image alt
be9d898 - broken thumbnails, wrong URL prefix and frontend mismatch
d3f582f - expiresAt + Postmark share email + generic PUT for tags
db20e0a - version history + drop legacy /share endpoint
33ce6a5 - real version history with throttled snapshots + restore
309fb64 - fix mobile LCP with AVIF hero + preload + fetchPriority
b0411c2
- enable react-hooks rules
fe44d00 - floor RATE_LIMIT_MAX_REQUESTS at 1000 / 15min
5964812 - move 'if (error)' early return below all hooks (React error #300)
d67e437 - hard-reload after skip/finish instead of soft navigate
cf9d09a - skip onboarding redirect on stripped fallback user
d46943b - stop redirect flicker between /onboarding and /dashboard
d969328 - resume at saved step + add skip button
fb989d5 - persist Koofie analyses + show full score breakdown
78b4e28 - request limit=100 so newer articles aren't dropped
0aaf714 - add "60 Days With 7 AI Agents" honest debrief
8fd2909 - expose run_koofie_audit action to seo-specialist
0b7b8d5 - integrate Koofie analyzer as a new SEO tab
ae5b046
- move social-proof badges to bottom-center of the page
a9abe68 - allow raws.dev in img-src so the badge renders
6844fc0 - resize Raws.dev badge to 44px to match Product Hunt height
3c57da4 - add Raws.dev badge alongside Product Hunt in hero
1192d79 - add "Why charging by the hour is killing your freelance business"
aa61a82 - refresh all 17 agent avatar images
6b20554 - revert DirectorySlash Off, broke prerendered routes (403)
8272c4f
- redirect trailing slashes even on prerendered directories
0d36998
- add "Unsexy math of going solo" article
d0ee762 - use raw SQL to dodge model/local-DB drift
88c996f - seeder for "7 questions" article into prod blog_posts
ad47ccd - add "7 questions every solo founder should ask themselves"
f0e2a9e - paginate inside tall blocks (lists span page break)
745ddc9
- hero count uses app-active agents, not site-visible
0f8eba0 - rephrase CTA title to "The future of work is independent"
4f81ea1 - hero count uses /config/agents (site-enabled agents)
57ba98e - fetch agent count from backend templates API
882a221
- stop clipping descenders in hero gradient title
f3e62a4 - clean hero line break, drive agent count from templates meta
79c8001 - Google sign-in, forced onboarding, sharper home hero
cfec9fd - make blog articles + other content routes crawlable (404 → 200)
9ebcd0c - add Aukimi tools featured image, update post
dd5c906 - 2-row layout, brand on top, 5 equal link columns below
c4eaf0e - add Partners column with Aukimi link
74691cc - click-to-scroll-bottom + consecutive page-break empty gaps
c49fc83 - redesigned list view, featured hero + grid + search
3e6692c - resolve s3:// featured images through the public media proxy
83a959f - persist outbound article in DB, remove static JSON duplicate
00fb052 - new article, "Outbound works in 2026"
7279d2b
- honor explicit PageBreak nodes in paginator
5623c08
- finalize ultrareview TODO, 5 remaining findings
5b09ca5 - rate-limit public POST, fix tz date-edge bug, catch UCErr
ab25917 - remove Telegram community link
92f1b2d - dashboard config + bookings list + prospect cancel + T-24h reminder
d35a1d7 - public Calendly-style scheduling on /book/:username
f5ea29e - LanguageContext must not use react-router hooks
b4fafba - translate CommunityPublic list + post pages to FR
3cc57b0 - Phase 1, /fr/ URL routing, hreflang, bilingual sitemap
084fb62
- TDZ crash, move pagination effect after useEditor
339174c - real content pagination, blocks restart at top of next page
f290db2
- Google-Docs-style page stack, visible gap between pages
725e38d - visible A4 paper with format + orientation controls
af11076 - resolve s3:// URLs through authenticated /media/files proxy
21346a9 - provision Aukimi partner user on signup
fac9c45 - add Telegram community link
7401c34 - Sophia now sees your todos + handle expired Google tokens
fb0364c
- end-of-feed marker on dashboard
2d1f486 - infinite-scroll wipe + polish public community cards
20d21a2 - keep public cards opaque, roll back over-transparent look
fa02e7d - softer card transparency + more natural comment tone
eeeb08e - hot/new/top filters, richer seed, public detail fix, free-tools bg
a6cc1af - seed script, 5 fake users + 5 public posts
d0fae20 - isPublic dropped by api service + new notification style
851005c - unify public page background, Community + Directory match Home
93dcee6 - EditPostModal content spilled out of panel background
3661a79 - add Community to Creators popup menu
b0cedeb - opt-in public posts + /community page on marketing site
1978994 - perf + UX sprint, N+1 fix, solution preview, shortcuts, infinite scroll
009a23e - restore-version uses kiwi modal instead of window.confirm
91834da - blank editor after reopen, retry setContent against Yjs race
c8de45e - stub /versions endpoint to silence 404s on every doc open
33c4095 - GSC "Product snippets" issue, swap Product for SoftwareApplication
303585c - lazy-load chat history, initial 3 msgs, scroll-up for more
4d8889f - "+" icon on add-lead button now white on green
8b9eb2f - color popups clipped by toolbar, use portal + fixed position
5ebd592 - stale CSS chunk recovery + graceful project 404
18a744c - richer layouts, feature highlight, process arrows, pricing ribbon
a199fbc - 500, replace nested include with separate map-section query
b8c39dc - auto-select title text on rename
c6fbc04 - map view + cross-page anchor fallback
a876828
- harden delete against silent no-ops
fbea073 - pricing-card contrast on bold + glassmorphism themes
e5ac828 - robust stale-chunk recovery after deploy
d069e1d - debounce search, real export, lead score, saved searches
06f24a2 - allow OpenStreetMap tiles and Leaflet marker icons
01ef581 - drop redundant success alert on project delete
bd3fe31 - add IMAP/SMTP provider for non-Gmail/Microsoft mailboxes
48e158d - resolve inline cid: email images via backend proxy
13fe5ae - block remote email images with show/hide toggle
6009e71 - actual delete + free-tier 100/batch & 100/month caps
56fb433 - Stripe Connect payment sections (Option B)
b1eeb61 - 4 incremental wins from the audit
2d68b1f - collapse editor header from 4 rows to 2
29cc76a - whitelist api.producthunt.com in img-src so the badge loads
51f118e - add Product Hunt featured badge below hero CTAs
aab452b - featured hero, stats banner, products preview, URL sync
816eb07 - OWASP audit batch, IDOR, auth, crypto, config hardening
f31551c - invalidate all existing sessions on password reset
e582b94
- enrich SEO content, FAQ schema, internal linking
c7e342d - add Meta tags & SERP preview generator
2342374 - add Free Tools link to Support menu (EN+FR)
54503a8 - hub + 5 SEO-optimized tools (hourly rate, invoice, QR, UTM, word counter)
5314385 - Imprint, 3 industry pages, 3 comparison pages (EN+FR)
b7178a6 - polish AI Assistant focus, Sophia avatar, no blobs, no dots
d2bf7ed - AI Assistant focus section with animated chat demo
4168f51 - new blog post, 'Why traditional SEO is dying and Geographic AI Discovery is the new freelance goldmine'
5090033 - document delete, confirmation + optimistic removal + toast feedback
e43208d - hoist editorRef + use refs in drop handler to avoid TDZ
0a70304 - normalize country field to ISO 3166-1 alpha-2 for Google Ads
2c2d33c - Customer Match export, options dropdown (hashed vs plain, verified filter)
4db969b - bump build heap to 6GB, prerender was hitting OOM
3a3f9a5 - desktop file drop + contrast fix on Sheets/Documents list rows
f0d7a37 - drag-and-drop always active, auto-switches to manual sort on drop
bfcb9c8 - drag-and-drop reorder for Sheets + Documents dashboards
09a52ba - richer share UX, tabs + link role + public/restricted toggle
dcd9268 - merge Sheets share buttons, icon opens the full modal
b9e8413 - re-enable live cursors via custom CollaborationCursorExt
7671b24 - disable CollaborationCursor, crashes editor mount in v3
692fb7c - guard editor.view in spellcheck effects
46a6421 - SEO / GEO / internal-linking overhaul
5308ca0 - guard editor.view access in SuggestionMode command + effects
459ac4f - Documents editor crash + Tiptap v3 compat
033ef1b
- ShareResourceModal, portal to body + safe backdrop close
0099f85 - hoist useDocumentRealtime + userColor above useEditor
277ad6d - Documents Yjs CRDT co-editing + suggestion mode + share
a3b02fc - Sheets comments, pivot tables, realtime co-editing + share
ec33271 - resource sharing with Postmark invites (documents + spreadsheets)
4bc4813 - ProspectActivity associations + kiwi-ai feedback blending
21b2c0f - persistent circuit breaker + action feedback loop + SSE fix
e56fb79 - read modules from correct key in config response
5190535 - rich Welcome email, personal tone, screenshots, Aukimi section, Community CTA
737d118 - use outbound stream for user mailer, add Postmark error logging
9afc830 - save/load email templates in User Mailer
8ea424e - remove agent count from Welcome template, add Community Hub link
5b79bec - Welcome email template dynamically shows only active modules
8fc1a2e - replace VibeMarketing with Campaigns in Welcome email template
389b494 - improve Welcome email template, add Aukimi details, Community Hub, all modules
8a3518e - Aukimi API URL default to aukimi.com (not app.aukimi.com)
d712c3a - auto-provision aukimi accounts via partner API on auth-token request
a334e5f - apply fontFamily and secondaryColor to quotes/invoices PDFs
7fa92ec
- bulk Accept button now also converts quotes to invoices
313ce8e - invoice number generation must be globally unique, not per-user
06c066f - more bottom margin on floating bulk actions bar
b1ecc1c - wider bulk actions floating bar in Expensa (600px)
a56e5e8 - make bulk actions bar fixed floating at bottom of screen in Expensa
822f7a5 - remove sticky from bulk actions bar in Expensa
bd79001 - make bulk actions bar sticky in Expensa quotes table
ae33a7e - expose detailed error message on quote-to-invoice conversion failure
43ba9c6 - invoice number generation, use max existing number instead of count
728d10f - auto-convert quote to invoice when status set to Accepted
1759711 - add migration to update quotes.status ENUM with 'Sent' value
eb585a5 - Expensa, fix silent error in convertQuoteToInvoice, remove Invoiced from dropdown
8ba8a7d - Expensa, add Sent/Expired statuses, fix invoice list stale closure
5c11d9c - quote-to-invoice conversion, accept Pending status, add success feedback + tab switch
e7629c4
- ProactiveAgentService class closing brace was misplaced
a4aee85 - ProactiveAgentService, autonomous agent actions
d1df48e - add missing ChartBar import
52b45b5
- custom domain serving, middleware for verified domains
013f25d - .app.kiwi label bigger (text-sm)
ccb68e4 - domain settings layout, stacked vertically, clean inputs
49fd6c6 - complete settings panel redesign, clean accordion layout
f88b0f3 - disable floating chat on landing page editor + add bottom padding to settings
163d22d - bigger custom CSS + head code editors with syntax coloring
82761ce - simplify landing page editor header, remove business button, cleaner status
6640230 - landing page settings, slide-out sidebar with accordion sections
1b31dad - SEO button in landing page editor was always switching to editor
1e798e8 - mobile responsive, AgentDashboard + Marketing TweetDeck
984b83d - Landing Pages, 12 new features
a478986 - Sales Accelerator, 9 new features
1a6d3e1 - Lead Generator improvements, distance, scoring, dedup, enrichment
30ae08b
- Aukimi fullscreen, 20px header bar with minimize button
f129dc8 - Aukimi fullscreen z-index 100 to cover all UI elements
0d90a2b - Aukimi fullscreen, minimal header, max space for iframe
6138e42 - email invalid_grant triggers orange reconnect banner
0f92291 - send/stop button aligned with input, PAGE_SIZE 10, remove debug logs
7179261 - orange reconnect email banner on token expiration
0417498 - Documents light mode, black text on white background
f1a10cd - align send button vertically with input
fa8def7 - unified background color #0f1219, dark navy flat
1418c71 - signup + login page, anthracite gradient with subtle glow
4bf888f - disable floating chat on marketing page (Lucas embedded)
b517c32 - delete scheduled post route + agent column overflow + post endpoint
5bca390 - Bluesky connect modal + LinkedIn/Instagram platform_data fix
355e756 - PostForMe auth, pass platform-specific data (connection_type)
48212a2 - darker background gradient
b7ea189 - background gradient matching header bar navy tones
8fa72c6 - darker background gradient
ada7235 - replace grid background with anthracite-blue gradient
9cea8e7 - Google Ads conversion tracking on signup
9d9ad58 - PostForMe API base URL missing /v1 prefix
303bfff
- bigger connect account buttons with platform names
66ea4a5 - embedded Lucas agent + PostForMe in Marketing TweetDeck
994aabb - PostForMe integration in Marketing TweetDeck
7693152 - Marketing module rewrite, TweetDeck-style columns
e941604 - Xpander streaming, custom functions, and knowledge bases
d155d0c - migrate Xpander from webhook to proper API (v1/agents/invoke)
67cd3f7 - detect hallucinated actions, warn user when agent lies
122117b - agents must not claim success without action blocks
eaedfa7 - copy button in agent console modal
c9466fe - Xpander timeout 30s→60s for complex requests (web search)
c2a29b3 - agent console modal, click 'thinking' to see live SSE events
f1f683a - calendar timeout, rate limiter too slow + short timeout
95ddd6c - add console logs for chat scroll loading
1625019 - create_meeting_link, translate_text, shorten_url actions
95efbf8 - 6 new agent actions, profile, pipeline, dashboard, export
3298d40 - update_business_profile agent action
6184b8c - agents must ACT immediately, not describe plans
017e477 - auto-switch agent window on handoff delegation
6b4fd76 - automatic agent handoff when out of expertise
0b0e6a5 - notification when agent responds (visible outside Workforce)
6f3a618 - auto-extract directives from user corrections
f7343b7 - search messages in chat history
66494ec - infinite scroll chat history (WhatsApp-style)
06023fb - drag & drop files into agent chat
3dd120e - chat bubbles, dark navy/slate tones matching sidebar
ba845d8 - Agent.findOne missing userId, chat history not loading
a932908 - chat bubbles, anthracite gradient with subtle border
e3af2ca - SSE stream hangs when sendMessage errors or Xpander timeouts
0992169 - label_email, handle custom labels like 'Urgent'
133a8e3
- add social/integration TODOs to CLAUDE.md
2752a74 - social listening cron + comment reply actions
3f7f990 - agent memory loss and off-track behavior
65188dc - stop button to cancel agent response mid-stream
b10fa3b - highlight color picker, bigger swatches, cleaner grid
bdf8c16 - inject user directives into system prompt for strict enforcement
e8f98d4 - add missing useMemo import in AgentDashboard
502a69b - paste images from clipboard into agent chat
65f91f4 - @mention agent delegation in chat
78f1752 - add detailed error logging for sendMessage Validation error
e9abf20 - keyword-based agent routing fallback when ML service is down
ec2655f - use findOrCreate for Agent to prevent race condition
3bc0acb - manual email recipients for campaigns
ae9d1bf - allow resending campaigns already sent
be110f5 - include newsletter subscribers in campaign recipients
e4eefb4 - campaign send, better error handling + show actual error message
dfc0972 - multi-series charts in Sheets + agent memory edit/search/dedup
3d11146 - agents can update documents and spreadsheets
a54632d - Activity Feed shows auto-triggered agent messages with date accordion
02be492 - notification type ENUM + email label mapping
937e06f - RGPD, anonymize PII on ALL Xpander calls
f2f0b87 - add search_leads permission to executive-assistant
610e6b0 - remove orphaned debug line causing SyntaxError crash
fff0f1c - dashboard/projects 500 + cleanup debug logs
3e84d60 - agents show green dot when active (was gray = looked offline)
58ed4a3 - 4 SQL column mismatches in AgentActionService
c8a01a8 - create_task uses 'text' column instead of non-existent 'description'
bffa75f - add 'automation', 'action', 'response' to ChatMessage messageType ENUM
811eb71 - filter disabled agents from /workforce/agents endpoint
92dfbe4 - route-agent missing Content-Type header
66cd6af - test email also wraps with Kiwi template
42f9ee9 - newsletter template wrapping moved to backend (no more double template)
7ead5c7 - personalization tokens, handle HTML-encoded braces + clean empty names
780061c - newsletter delete, fix broken headers ref + use window.confirm
2bc229e - newsletter double template, save raw content, wrap on send/preview
0e8323a - purchase-credits returns session.url for frontend redirect
dbe7506 - credit purchase error response, include debug message
ee4024e - use Kiwi AlertModal instead of browser alert() for cancel feedback
55d4e90 - add cancel subscription success/error feedback
d217848 - cancel subscription keeps active until period end
e662edb - subscription status shows Premium correctly + remove Free label from sidebar
5205995 - handle Stripe current_period_end as number or Date
c974059 - always return debug error in verify-session (temporary)
3ea581b - verify-session, include error details in response for debugging
5f7192c
- add debug log to verify-session entry point
6a4e890 - requireStripe middleware, proper error handling for async
dcd1fbc - don't cache Stripe test client, add verify-session logging
9669942 - verify-session fallback to DB if Stripe call fails
63e7256 - webhook handler returns 500 on failure instead of swallowing errors
da41563 - webhook accepts both live and test Stripe secrets
b44d524 - strip JSON double-quotes from SiteConfig Stripe values
2ccaf27 - t is not defined in PipelineKanban sub-components
9a53346 - Aukimi auth, retry harder, send to both origins
37209ba - Aukimi iframe loads only after auth token is ready
22ff82f - cross-origin iframe reload error in AukimiSuite
5d3c815 - Aukimi partner ID 1 → 2
711053a - increase spreadsheet rows from 20 to 100+ (200 max)
f42fff2 - agentActions.js syntax error from sed corruption
7e7c57f - add missing api import in AukimiSuite
09b9907 - AUKIMI_PARTNER_ID crash + missing screenshot placeholders
e9ed9a6 - marketing module improvements, personalization, A/B testing, bounces, recommendations
9753f5f - connect AI agents to Documents & Spreadsheets modules
dde0de9 - server-side PDF export for invoices & quotes (Expensa)
79ee0a7 - document headers/footers with page numbers
d6d70d6 - page margins in Documents editor
620e9f5 - persist light/dark mode preference in Documents & Sheets
2cc8e8b
- newsletter logo 200px
174bc2c - sync Postmark suppressions bidirectionally
062e0f9 - newsletter logo 420px width
cf436e1 - remove unsubscribe text from newsletter template (handled by Postmark)
eb73554 - newsletter header logo 320px width
8f50598 - improve newsletter template + add /unsubscribe page
30df23b - remove broken headers references from sed migration
73d8d9a - increase DB connection pool from 5 to 20 for production scale
0e0683e - subscription billing security + grace period + renewal credits
cbad859 - revert auth to localStorage authToken + global fetch interceptor
6b01f69 - restore Bearer auth fallback for all fetch calls
b2d141a - server crash, AuditService methods outside class + bad import
30ad01d - remove duplicate AuditLog model causing server crash
0acbb3a - S3 encryption at rest + audit log system
ece298e - S3 versioning + automated daily backup script
cef2939 - increase free storage limit from 100MB to 500MB
23e394b - CSRF protection, magic byte validation, error sanitization
d1de3ed - migrate auth from localStorage to httpOnly cookies
64f6d2a - fix critical vulnerabilities
d7fbe36 - active sheet tab, border-bottom only
fd3e646 - green border on active sheet tab
e1d036c - rename and delete sheet tabs in Spreadsheets
b90d6c4 - reduce document auto-save debounce to 300ms
91d5e8b - document auto-save stale closure + faster save (800ms)
9e8fc71 - extract document object from API response on create
03973ac - mount BusinessBlogRoutes on /businesses prefix instead of /
45ae411 - add *.google.ch to CSP (Swiss Google domain for ads)
d733188 - TOS modal button, light green bg with black text
621110c - propagate tosAcceptedAt to frontend user context
522773c - update CSP to allow S3 storage and Google Ads domains
af386d6 - S3 sync status indicator with 3-state cloud icons
04bbdfd - auto-sync all media to S3 with cloud status indicator
202d407 - add S3 storage (Infomaniak Swiss Backup) + legal terms modal
6df4740 - add 4 new landing page templates (Portfolio, Fitness, Real Estate, Online Course)
e9aa1eb - Landing Pages, aggregate stats, SEO score panel
590eb32 - Landing Pages, show error feedback for all failed operations
7211d65
- add Documents, Spreadsheets to navbar dropdown + Landing Pages to screenshots
649e1d0 - add Landing Pages to Home page features
9d8834d
- remove "Included in free version" badges from Home and Modules
2d24751 - Sheets, insert/delete row/col shifts ALL formats correctly
3ab240e - Document & Sheet sharing, public links with share tokens
4c44530 - Sheets, formula fill with relative/absolute references ($)
33f963c - Sheets, IMAGE formula, HYPERLINK, insert image button
f559bfd - Sheets, table formatting (borders, alternating colors)
5c31a41 - Sheets, drag & drop cells to move content (Google Docs style)
6fae4cb - Sheets, 25+ new formulas (lookup, text, math, stats, date, info)
3f02ee1 - Sheets, row/column header context menus (Google Docs style)
6334cb7 - Sheets, row insert shifts formats, undo/redo stale closure
fd94a07
- Project Manager, double-click to rename project
4a32565 - Project Manager, null guard on updateMetrics
0aa99cf - Project Manager, task update 400, profile 404, status chips
e8431ba - PDFExporter, add t() prop with fallback, pass from ProjectDetail
ef2b638 - GanttChart, add t() prop with fallback to prevent crash
e026f36 - Workforce, remove live badge + capabilities count, green send button
7b92b28 - Workforce, Power Mode toggle, fix French credit error
e8603ff - Landing Pages, publish/schedule loading states + timezone
5942c91 - Landing Pages, honeypot anti-spam, HTML cache, SEO improvements
bf69efd - Landing Pages, bilingual error message for terms of use
09f9bb4 - SEO module, error UI, URL parse safety, search debounce
831e065 - Project Manager, i18n for Gantt filters, PDF export, empty states
3334f27 - Sales Accelerator, remove alerts, fix navigation redirects
88589d4 - CRM pipeline, i18n automation rules, pass t() to Kanban
bcad2e9 - CRM, replace all alert() with toast notifications, fix bugs
915e468 - Sheets, memoize cells, formula cache, dynamic row rendering
3e5003b - Sheets, bugs, toasts, confirmations, 15+ new formulas
6509d2f
- focus mode uses portal to body instead of fixed positioning
117391d - focus mode, full opaque background, Escape/Cmd+Shift+F, z-index
78b2008 - spell checker, 5 languages, DB dictionary, grammar colors
d507bd3 - spell checker, personal dictionary, bilingual, grammar, cache
935b8a5 - self-hosted spell checker, zero external API, RGPD compliant
2718b45 - spell checker position mapping, build proper text↔PM offset map
732b229 - add api.languagetool.org to CSP connect-src for spell checker
9a21442 - move spell state declarations before useEffect that references them
f91d213 - spell checker uses overlay instead of DOM mutation
3a2894c - inline spell check, click red underlined words for suggestions
4aef6a9 - spell check, send full sentence to LanguageTool via POST
d1367f7 - integrated spell check suggestions in Documents context menu
92cdcc9 - Shift+right-click bypasses custom menu for spell check suggestions
0cca009 - enable native spell checking in Documents and Sheets
ae1583a - context menus, viewport clamping + cut/copy/paste/undo/redo
2ac1b14 - kanban status drag & drop persistence + mode memory
28d91b5 - add missing useCallback import in TimeTracker.jsx
523787c - add empty states and loading spinners to all TimeTracker views
3581593 - TimeTracker, configurable daily goal, fix sync, cleanup
dd1152c
- 3 TimeTracker bugs, time display, kanban persist, today's focus
62334bb - remove manual Save buttons from Documents and Sheets
afc3d3e - Assignment to constant variable in Modules.jsx
df751b9 - validate timestamps before sending to Google Calendar API
977257c - add calendar update logging to diagnose Invalid start time
26fe0ef - calendar "Invalid start time" + timezone + conflict text
75c9af5 - calendar event save bug + add event color picker
18b14f6 - initialize screenshot gallery with existing default images
4e9f8f6 - auto-save screenshots on every change (no manual save button)
57a3af2 - screenshots, drag & drop, lightbox, multi-format social, ZIP, compression
52cc902 - screenshot cards with full controls on all images
3fa019e - screenshot cards with visible controls and reorder
d6939f5 - replace add-image dropdown with centered modal
22dbc34 - persist social media screenshots + add image popover (upload/paste/URL)
97f5f16 - support multiple screenshots per module
62e55cf - social media images, 6px border, preserve logo aspect ratio
a1faec7 - dark theme for all email templates and prelaunch page
17a5183 - newsletter stats counting active subscribers from wrong endpoint
4a4e5fd - prelaunch confirmation email template
6fae1ba - send prelaunch confirmation email via Postmark, fix stat card colors
def80a3 - use Button component from design system in prelaunch page
63ba930 - simplify prelaunch signup page, remove module-specific features
f130346 - translate Postmark email templates (FR/EN) and surface send errors
5912b85
- resolve i18n key resolution for all auth pages
4be91c4
- fallback to /api/stats for agent roster when /api/agents/stats fails
e81372f
- add cdn.jsdelivr.net to CSP for Three.js font resolver
8e228d5 - add blob: to CSP script-src for Three.js web workers
ff06d3f - downgrade react-three to React 18-compatible versions + add .npmrc
9b0dcdd - add missing icon imports and fix extension conflicts in Documents
ad11262 - replace non-existent SpellCheck icon with ListChecks
aeb8a13 - add 7 new Document editor features (highlight colors, line spacing, indent, sub/sup, emoji, focus mode, spell check)
6334839 - improve text color icon visibility in dark mode
1ee63b4 - add missing TextAa import in Documents
d5f5eb6 - change text color icon to TextAa with dynamic color indicator
9eafd84 - improve cell selection visibility in Sheets light mode
3a32c7c
- improve document card info visibility + fix dark mode background color
ba99c3c - add undo/redo toolbar buttons to Sheets
16b3dd3 - delete VectorEditor, add features to Documents, MediaLibrary, Calendar, ProjectManager & CommandPalette
4088a65 - add missing XP tables to auto-migrate + fix tiptap duplicate extensions
83c64ee - add custom context menu to Documents editor
b656f4f - prevent Sheets context menu from overflowing viewport
7be93e0 - fix context menus + draggable charts + major feature additions
aa7b215 - center changelog timeline bar + change Documents import icon
2641307 - add sort/filter, conditional formatting, charts & import to Sheets
46ed3b0 - add find/replace, templates, table of contents & word goal to Documents
f9b3aa2 - back button returns to correct module when opening docs/sheets from Media
96914fe - add freeze, merge, number format, auto-fill & shortcuts to Sheets
fdef4f3 - add font size, text color, import & shortcuts to Documents editor
be01520 - add multi-format export to Documents and Sheets
56e164f - add Google Fonts selector to Documents editor
b537804 - ColorPickerBtn light mode support in Sheets
7b7175c - add light mode toggle + column/row resize to Sheets & Documents editors
b4529ff - darken column/row headers to distinguish from cell content area
a2d0f74 - add column/row selection and cell color styling to Sheets
ac5c8fc - improve formula eval robustness, add word boundary to SUM regex, direct numeric return, error logging
d90c368 - add thumbnails/previews for documents & spreadsheets in Media Library
f2aeea0 - sync documents & spreadsheets to Media Library
146aac5 - merge Media Library header into single toolbar row to save vertical space
e22903e - reduce sort select height and improve icon visibility in Documents & Sheets
fcdf0e6 - unify Sheets header with Documents, add list view, portal context menu, sort & relative time
858c854 - return 410 for unknown subdomains instead of passing to API (was causing 5xx)
698c7e8 - 410 for /search + /lander with params, 301 /privacy → /privacy-policy, /education/blog → /blog
6ce4dd9 - 301 redirect spam query params (?beerus=) to clean URL
23edc43 - redirect www.app.kiwi → app.kiwi + force HTTPS (301)
3ae19c4 - return 410 Gone for legacy APK store URLs, block in robots.txt
db95358 - SEO, canonical via useLocation, .htaccess 404 for unknown routes, prerender /directory
8bca851 - add agent mappings for media, documents, sheets, blog, clients modules
8bdaa98 - Documents context menu z-index + deferred listener to prevent instant close
3a9404d - Documents context menu, use portal + prevent click-through
fb69dd8 - improve Documents module, sort, grid/list views, paper editor, keyboard shortcuts
90e8f65 - add column/row hover highlight + cell range selection in Sheets
347a5e1
- add print with settings modal to Documents & Sheets + sync to Media Library
3345c00 - sync Documents & Sheets to Media Library
3393e38 - improve editor toolbars + add right-click context menus to Sheets & Documents
8ec756f - embed PDF preview directly in modal via blob URL + redesign preview header
42afabf - add thumbnails/previews for PDFs, Documents, and Sheets
84d65cd - replace PDF/Office iframe with open-in-new-tab preview card
6566eea - add preview modal, context menu, create doc/sheet to Media Library
cd02d52 - remove storage usage pill from Media Library header
5d5a6fc - improve Sheets, fix cell input bug, add 25+ formulas, help panel
605783b - add Sheets spreadsheet module with formula support
20f43e0 - add Documents module with Tiptap WYSIWYG editor
9733afb - use 4:3 aspect ratio with min-height for grid file cards
95b7d27 - make share email input full width on its own row
0de2460 - remove JWT auth requirement for serving uploaded files and thumbnails
22dcdec - append JWT token to media file URLs for authenticated access
bf0a802 - store full API path for thumbnail URLs
1cf5c1e - strip /api/v1 prefix from media file URLs
55b8a03 - prefix media file URLs with API_BASE_URL for production
f01411f - make Media Library full width layout
fcc8af9 - redesign Media Library with Drive-like UX improvements
deefcac - add media_files migration for new columns and update badge color
156ec96 - add Media Library page with Drive-like file management, sharing & preview
41d9591 - add reactions, @mentions, channel sidebar & notification improvements to Community (frontend)
6667e4f - add reactions, @mentions, channel sidebar & notification improvements to Community
7a0b70b - add financial dashboard to Expensa with P&L, cash flow, aging & forecasting
962d484 - add advanced reporting view to Time Tracker with billing, PDF export & peak hours
995be46 - upgrade Calendar module with conflict detection, keyboard shortcuts, time indicator, drag-to-create & scheduling assistant
a425452 - upgrade SEO Dashboard with competitor comparison, recommendations & keyword badges
89cfcba - upgrade Automation/Nodes module with 5 new node types, 8 Kiwi-connected templates & backend execution
3194dae - add Media Manager modal accessible from dashboard sidebar
214a43d
- add team, video, map to landing_page_sections type ENUM
fbc3df4 - resolve React error #31 on /blog by using dangerouslySetInnerHTML for JSON-LD schema
4e717c4 - redesign changelog page with vertical timeline grouped by date
9328d39 - button text contrast computed against gradient midpoint, not just primaryColor
ce6060f - scheduled publishing, newsletter section, business blog, WYSIWYG editor, image optimization, Lighthouse prep, tests
cb1e348 - exit-intent popups, social proof, blog gen, clone, sitemap, RSS
d56523b - add team/video/map landing page sections + business performance analytics
a14ed36 - improve landing page animations + migrate react-icons/fa to Phosphor
14a76dc - standardize email FROM address to use EMAIL_FROM env var
1f56cd5 - add og:image dimensions to SEO component + update sitemap
ea4548e - dynamic canonical URLs + noindex for dashboard pages
73162d2
- make landing pages full width + improve image preview in editor
b00812c - add Pexels domains to CSP for landing page images
28ac23e - add subPageId to LandingPageSection Sequelize model
61e62d9 - center landing pages on all themes + enforce 2-font limit
6bffab7
- inject graphic design theory principles into landing page AI prompt
58c7982 - randomize product count (2-4) instead of always generating 5
eacc5f3 - increase landing page variety to 12600 unique combinations
d936b84 - massively increase landing page visual variety
432cbc2 - add Stripe Customer Portal configuration ID support
3c6dc79 - prevent server crash when STRIPE_SECRET_KEY is missing
a07cb4e - multi-page site navigation showing same content on all pages
d5d691f - complete Stripe subscription safety net
53396b1 - parallaxBg using DALL-E prompt text instead of image URL
9cd317d
- landing page list fallback when Business table missing + multi-page fixes
80c1c6b - hero contrast, multi-page nav on subdomains, business name sync
84b6164 - enforce text contrast with inline styles on all landing page elements
30727d1 - rewrite all /uploads/ paths in preview including CSS url() backgrounds
fcd3267 - prevent duplicate landing pages per user/business
46551dc - enforce contrast on card text via CSS contrast guard
6a4b4c6 - remove subPageId from LandingPageSection model to prevent Unknown column error
137b569 - add focal point selector to image uploads for landing pages
29ebf9d - add object-cover to landing page images to prevent deformation
474f5bc - add isVisible to raw SQL fallback + make renderer filter defensive
059e370 - add safe fallbacks for subPageId column in public landing page routes
ca0be7b - refactor logs page into date-based accordion groups
f7e30a3 - handle missing subPageId column in subdomain resolver + add multi-page support
c892069 - handle missing subPageId column in landing_page_sections gracefully
c30b167 - remove sanitizeJsonFields that corrupted landing page JSON responses
cddbd46 - handle missing landing_sub_pages table gracefully + add error logging
2e3e4cf - add Quote section + hero background image/video options
edb0c65 - add multi-page landing page support
5ecb091
- remove breadcrumb from landing pages, fix CTA contrast, sanitize JSON fields
8af4c4d - remove breadcrumb from landing pages + fix CTA button contrast
a97417a - add missing landing page editors (carousel, tabs, process) + submissions API
8b8acdb - add 9 landing page improvements (ARIA, CLS, carousel, tabs, breadcrumbs, blog JSON-LD, responsive pricing)
0111a2d - cap border-radius to 16px max on inputs/buttons/forms, add WCAG contrast guard
d40692f - landing page improvements, footer variants, content dark mode, testimonials scroll, image optimizations
6b52860 - enforce consistent border-radius via CSS variables for all elements
62c4e64 - adapt form styles to designSystem (border-radius, input radius)
7b7f55f - contrast pass with inline styles, centered orphan cards, remove gradient line
cb22f64 - increase hero video/image overlay minimum to 0.5 for better contrast
d8d0a4c - hide foreground hero image when video/image background is present
0146a03 - validate section types & add businessId migration for quotes/invoices
204525e - diversify navbar layouts and hover effects on landing pages
9146bfe - contrast pass, icons, step circles, stats, video overlay, spacing
2776ccb - link quotes & invoices to selected business in Expensa
fccded3 - 3-color brand rule, hide video on mobile, cascade delete business
27e4775 - integrate Pexels API for stock photos & video hero backgrounds
c98e53d - add 5 contact form layouts (split, banner, minimal, card-accent, centered)
880f473 - restore sticky nav by using overflow-x:clip instead of hidden
7c30e1e - horizontal scrollbar, mobile nav dark theme, and responsive spacing
e16529e - CTA buttons now use business primaryColor instead of generic black
de2ce82 - dark theme navbar scrolled state now uses dark background
0a9d7eb - make dark theme navbar fully opaque to prevent content bleed-through
f5c14c7 - add list view mode and sort options to business directory
a5433f3 - dark theme navbar visibility + timeline colors + force dark on all sections
ff6ad25 - comprehensive dark theme fixes for landing pages (bold + glassmorphism)
11059f4 - comprehensive SEO optimization for landing pages (72→~90/100)
c3b44c9 - directory logo on dark kiwi background (#0f1d2a)
74eaecf - cinematic image prompts + directory logo background
46833c6 - dark mode coherence across all landing page sections
4bf52b7 - industry-weighted layout system with 7 profiles and new variants
32025d6 - force random layout/style diversity on landing page sections
b1b10d9 - 3 landing page issues, cropped button text, logo color, logo quality
8072ced - show business name next to logo in landing page nav and footer
e3a1e14 - add layout variants for features (5) and pricing (3) sections
24857b5 - add countdown, process, services to landing_page_sections ENUM
3efc410
- major landing page design overhaul, 8 UI/UX improvements
4aa7120 - show business logo with primaryColor in navbar selector + fix directory broken logos
fa58f7f - clear stale business filter when selected business no longer exists
fafcca2 - replace native confirm() with modal in SEO CompetitorsTab
443feeb - hide credit warning when balance > 8
60e50d0 - business filter system, backend routes now handle businessId param
5aab6e3 - CTA buttons now link to actual sections instead of nowhere (#)
2532140 - switch image generation from DALL-E 3 to gpt-image-1
0ae4606 - enhanced landing pages, DALL-E per section, countdown timer, Google Fonts, animations, multi-step forms, video hero, parallax
09f4e5c - deep theme personalization, Claude generates customCss + designSystem
2abc25a - visually distinct landing page themes with aggressive CSS overrides
f2bdf22 - preview images, rewrite relative URLs to absolute + allow API in frame-src
d92ec7b - preview images, use request origin for base href instead of missing env var
55c67fe - landing page preview images + transparent logos + logs date parsing
f43ec99 - credits wiped on level-up + CSP blocking DALL-E images
c01865d - group /logs page entries by date with visual separators
37a2d1b - exclude public/uploads from rsync --delete in deploy
e7966f3 - landing page images not showing, 3 fixes
0c1e963 - inject business logo into landing page settings
0fb027a - remove headline/description text from DALL-E image prompts
5a38c9c - add business filter system across dashboard modules
345ac85 - landing page sections empty content + stuck generation auto-cleanup
bb1e105
- editorial calendar status 'scheduled' → 'pending' (match ENUM)
8a72713 - show map tiles when no prospects, replace full overlay with small badge
2f56ae4 - keep conversion-optimized section order, vary only visual design
08956e0 - unique landing page designs per business via designSystem + random seeds
ad1c786 - ban download/guide/ebook CTAs from generated landing pages
3b9210b - upgrade DALL-E image quality to HD
d0f6270 - enforce NO text in all DALL-E generated images
7ab0a34 - increase FAQ category menu size from sm to md
9dfe25f - campaign editor uses business branding for emails
bd17102 - campaign email templates use business brand instead of Kiwi branding
6ea5485
- add Aukimi partnership section to About Us page
4879209 - rename BlogPost to BusinessBlogPost to resolve table name collision + redesign Marketplace
ded78a0 - redesign Discover Creators page with i18n, hide when module disabled
c824bdd - add landing page themes, blog system, auto-répondeur, WhatsApp widget, QR code & analytics
86867c7 - 6-theme system for landing pages + AI theme selection
da78184 - in-app notification when new form submission arrives
fe04590 - no fake phone/email in landing pages, filter '#' social links
25aaf9d - pricing grid supports up to 4 columns on one row
8c252f4 - use fav.svg as default favicon for landing pages
b0104d7 - revert Profile.jsx language destructure, local state was correct
bc0aa7b - add missing language destructure in Profile.jsx
3beafe0 - brand identity editor, social links, DALL-E logo gen, business tests
fa9a860 - add missing DB migrations for todos.businessId/projectId and businesses.language
6291af7 - add todo filters by business/project + FR/EN i18n for remaining dashboard modules
0969193 - use brand logo as favicon on landing pages, fallback to kiwi logo
be7bec3 - dynamically load chosen Google Font for landing pages
ba16b09 - landing pages generated in user's language (FR/EN)
b48f936 - major landing page generation improvements
840943c - landing pages use business brand identity (colors, font)
c73852f - anchor nav links + add contact form + vary landing page designs
d6f130e - disable all links and buttons in landing page preview mode
4cafb0b - strengthen DALL-E prompts to never include text in generated images
a38c52a - add public business directory page (/directory)
987bbcb - comprehensive SEO optimization for landing pages
fd77b7a - translate hardcoded French strings to English in landing pages i18n
5883506 - improved landing page generation with full business context
272099b - generate DALL-E images for landing pages + enriched business settings
04c3e43 - landing page navbar, short labels, brand name, CSP frame-src
890e73d - allow Tailwind CDN and Phosphor icons in CSP for landing page preview
fc9068b - add allow-same-origin to landing page preview iframe sandbox
1f222bd - remove UUID id from campaign creation (column is INT autoIncrement)
b2796f6 - lowercase "nammu" brand name everywhere (footer, legal pages, i18n)
9c1a314 - correct AB view column name (testId not abTestId) + non-blocking cleanup
d5c7de8 - use correct column name landingPageId in AB test cleanup on page delete
c4453a4
- delete AB tests before landing page to avoid FK constraint error
b4c83b9 - AI costs dashboard, track & display real costs per provider/model
47fbc14 - improve agent feedback, comment prompt on dislike + memory on all feedback
7fe7f9d - search_leads agent action, use correct Prospect column names
fc7ee4f - add FR/EN i18n to SEO dashboard (all tabs, GSC connect, site selector)
550c41a - add FR/EN i18n to LandingPages, SectionEditors & A/B Tests
a65d26d - add FR/EN i18n to all dashboard modules
539fb49 - add FR/EN i18n to 8 dashboard modules
6c89e07 - move language toggle from sidebar to top bar in dashboard
914f948 - add useLanguage hook to Sidebar component (language not defined crash)
e111b14 - show language toggle when user is authenticated
3ff8726 - add backend agent visibility config endpoint and app-side filtering
35fb4be - add FR/EN i18n to AgentsSection on Home page
5e771bd - add FR/EN i18n to auth flow pages
39bc15d - add FR/EN i18n to Education and Partners pages
c9314c3 - add FR/EN i18n to NotFound and Documentation pages
6b18a10 - align all free plan defaults to 30 credits/month
b0e8f0f - bump premium plan from 350 to 500 AI credits/month
8c505ff - add FR/EN language toggle and wire all Home page text to i18n
3d80fc5 - unify button styles across public site to match app design system
e33bd66 - implement growth loop system (referrals, milestones, free plan bump)
ad1b1b0 - pass missing t prop to HeroSection in Home (production crash)
dd1c239 - add missing useLanguage hook in Home component (site crash)
5b18162 - add FR/EN i18n to Navbar, Footer, Home, Features & Pricing
d414288 - add FR/EN i18n to auth, legal, modules, and agents pages
7c3164b - wire up i18n translations for FAQ, Support & Contact pages
480080b
- add prerendering for 41 public pages + fix blog clean URLs
6a5f1f3 - fill all time slots in traffic endpoint with zeros
a08f55a - use aspect-ratio instead of fixed height on SVG charts
28614d7 - traffic chart with period selector (24h, 7d, 30d, 6m, 1y)
36d4ff0 - interactive traffic chart with tooltips, stats & heatmap bar
9af0cdf - rewrite MiniLineChart with proper viewBox proportions
673d41e - parse SQL string values to numbers in visitor traffic chart
7842983 - show fallback message when visitor analytics data is unavailable
0d24163 - align visitor analytics field names with backend response
3d1e506
- remove duplicate Newsletter import crashing server
b438c85 - auto-subscribe invite users to newsletter distribution list
9bf06b5 - auto-create newsletter distribution list per invite code
ec76113 - add auto-migration for invite_codes table and referralCode column
f8e0a65 - add beta invite code system for gated registration
bdda540 - stop wiping level-up credits for free users
eefc926 - filter dashboard cards and sections by enabled modules
ae3f366 - hide email connection banner when Messages module is disabled
1518a89 - pass enabledModules prop to Sidebar component (was ReferenceError)
df8cf12 - module toggle actually works, fix double API prefix + filter everywhere
20d0c7c - add public loyalty program page at /loyalty/:programId
e3387c3
- Loyalty crash (missing X import) + Todos 500 (wrong table name)
8bb28f3 - Loyalty IconButton icons not rendering, use icon prop instead of children
a99409b - hide A/B testing when no landing pages, improve empty state CTA
1219f76 - campaign subscribers now pulled from user's CRM prospects + landing page submissions
a6cd713 - PM improvements, drag & drop kanban, bulk actions, analytics, checklists, auto-progress, workload view
f87f252 - complete Project Manager frontend, search, sort, comments, tags, templates, archive, todo linking
75b5347 - project manager, archive, duplicate, templates, comments, todo linking
8c25feb - remove duplicate New Project button, rename header button
47226a8 - show project cards grid instead of empty placeholder
abacb2a - translate Project Manager to English + fix add button style
2104b4e - sanitize empty string budget/progress in project create/update
2bbb870 - use fixed positioning for quote status dropdown
9c0c125 - use fixed positioning for invoice status dropdown
17bdbe2 - invoice status dropdown clipped by overflow-hidden on table wrapper
2affa3e - add all 6 invoice statuses to dropdown (Sent, Partially Paid, Cancelled)
384c4b6 - sanitize empty string vatRate before DB save
5ab589f - add missing brand/billing columns migration for users table
cab57fe - clickable status dropdown on invoice table rows
595df38 - invoice payment tracking, partial payments, history, progress bar
f1ad5de - remove success alerts, add clickable status on quotes, fix GROUP BY SQL error
4e6b52b - redesign invoice modal + add convert-to-invoice button on quotes
0be7213 - redesign Expensa UI, tighter, narrower, more professional
a787f6f - quote/invoice status ENUM mismatch + quantity integer + remove tips
9112a6c - remove redundant quick actions from SEO dashboard
6998f42
- SEO audit history, click to view past audit details, per-URL sparklines
6c9ee07 - dashboard 500 errors + calendar polling after logout
723b4cf - GDPR-safe PII anonymization for Xpander AI calls
31a330f - increase rate limits across all limiters
4f9447d
- add Nammu + Geneva Switzerland to footer IDE/TVA line
6b9048c - easier level curve, free account cap at level 3, click-to-view XP info
1bb3575 - prevent duplicate prospects by email
ebc1a8d - prospect detail UI, match app design system
44cee9e - prospect creation 500, sanitize empty string integer fields
6c3f63d - agent chat input alignment + green send button
0541eec - green Add button + green Add prospect button, remove star icon
d0b0180 - purple XP theme + floating buttons opacity 20%
8736802 - add XP awards across 17 route files for gamification
db287a6 - gamification XP system with levels, credit rewards, and sidebar bar
e4f0add
- set floating buttons to 10% opacity, 100% on hover
6e0f2bb - remove bottom spacer + fix agent bubble opacity (framer-motion override)
ce0012e - make floating agent bubble invisible until hover + remove footer
4edbe82 - convert TodoList to draggable floating panel that persists across views
086859e - make calendar fit available height instead of overflowing
5ff0e8b - disable Spotlight module, hide from sidebar menu, redirect route to dashboard
9f9391c - onTodoClick crash in navbar + white calendar picker icons on dark theme
f55e82c - remove inline gradient overrides from Expensa buttons, use standard Button variants
9deb167 - add discrete shortcut icons in top navbar (notes, todo, timer, aukimi)
38b3d46 - make top navbar more narrow (py-2 → py-1)
a6b4a5f - add bottom spacer so floating buttons don't overlap page content
6b73cb1 - position Quick Notes icon above agent chat button
abf5b6d - move Quick Notes icon to right side, next to agent chat button without overlap
3ab8300 - move Todo shortcut from sidebar bottom to Tools menu group
04d8126 - remove unique constraint on xpanderId, should be unique per (userId, xpanderId)
9242aef - add wss://api.app.kiwi to CSP connect-src for WebSocket connections
fc98407 - sidebar category labels (Main, Business, Tools, User) in green
dc83736 - increase global rate limit from 50 to 500 req/15min, app fires ~10 requests on page load
4f2df28 - remove fake notification dots from sidebar, only show badge with real unread count
e684c89 - price input/currency select alignment, wider input, no left rounding on select
da0f593 - agent vacation/pause mode, block triggers, scheduled tasks, and chat when paused
220601e - align price input and currency select on products tab
a6f86a1 - credit warning chip links to /profile?tab=subscription instead of 404
b84f7f6 - migrate auth to httpOnly cookies + tighten CSP + move sensitive data to sessionStorage
f320dfb - resolve 5 beta test bugs (tabs, routes, content bank, timer UX)
3916828 - correct UserCredit import path (user_credit.js, not UserCredit.js)
15c74c3 - add IDE/TVA number to footer
f3f4cc7 - include subscription info in /users/profile response
88c0b17 - email dates showing 1970 + raw HTML body in message detail
c7ee9c8 - remove all Nylas references, rename to email provider
08059bd - subscription tab blank (#7) + sidebar highlight (#10)
0fb3c13 - resolve 8 beta bugs + rename Communication Hub to Messages
14519ad - resolve blank Subscription tab caused by error/loading race conditions
207cb98 - resolve 3 CRM prospect bugs (validation, creation, kanban add button)
03ac14f - add missing currency column to Invoice model (fixes Expensa Analytics 500 error)
da0ae69 - automated email triage cron for Sophia executive assistant
30818fc - inject real calendar availability into Response Generator + anti-AI-slop prompt
5c5ec3d - switch Response Generator from Claude to OpenAI GPT-4o
ac63b11 - use claude-3-haiku model (account lacks Sonnet access)
8274417 - use claude-3-5-sonnet-20241022 model ID (previous ID returned 404)
3ebb875 - update Claude model ID + clean up Response Generator UI
bf7af9e - Sales Accelerator Response Generator no longer requires client selection
18e309e - add empty state overlay on map when no prospects (#15)
7f3854d - address beta bug report, 10 fixes
8db4b2e - correct subscription link to /dashboard/profile?tab=subscription
3cd60b0 - make credit badge clickable → links to subscription page
887c15f - add script to reset all subscriptions to Free plan
2af06f7 - correct stale credit balance for free plan users
b4196a3 - Free plan always shows 10 credits, ignore stale DB value
40036fc
- clean up Workforce - remove unused tabs and fix node connections
8616d2a - remove ML Insights tab and delete MLInsightsPanel.jsx
ca437cf - tone down Workforce button when active + remove Usage tab
117b92f - move Workforce AI to fixed prominent button at top of sidebar
f3ec462 - search multiple .env paths and strip \r before dotenv parse
257e8ce - use mysql2 directly in migration to avoid import chain issues
56c86c1 - move migration script to backend root for correct ES module resolution
aba4ca6 - add migration script for missing users table columns
78cd8b5 - expose error message on prospecting-data 500 for debugging
ce12a19 - kanban weekly agenda for social post scheduling with drag & drop
0858fed - marketing icon to megaphone + convert post panel from slide-over to centered modal
ae14730 - add composite agent actions for social posts with images and blog articles
2ed4979 - integrate Post for Me API for social media publishing
2142b92 - social media marketing page + pain points section + content ideation agent actions
f76fd36 - update marketing pages with correct plan limits (storage + price)
c01c7e6 - add verify-session endpoint to sync Stripe subscription without webhook
08f0a63 - redesign subscription success page with Kiwi branding + fix billing date
1a0f016 - only show credits for Premium subscribers, not Free plan with active status
e191930 - make Subscribe button larger and more prominent
b5aa65c - hide credits tab and balance when user has no active subscription
226e81c - replace deprecated stripe.redirectToCheckout with window.location.href
b76e1e1 - verify email page, use correct logo path (/kiwi.png) and fix bg-dark-* classes
680d81e - email templates, smaller centered logo (80px), update year to 2026
912ba88 - prevent double-hashing password on reset (User model hook already hashes)
ce52e1c - remove default browser outline on focused inputs
9821922 - use default Postmark 'outbound' stream instead of non-existent 'kiwi'
686dac2 - fix 15 vulnerabilities from pre-launch audit
6466f08
- use RGB for business card PDF colors (CMYK values kept as reference)
cdf1753 - print-ready business card PDF export (CMYK, 3mm bleed, crop marks)
8b8aa91 - redesign Productivity Stats with KPI cards, daily chart, priority bars
f455deb - add 2px margin between timeline task rows
fe83a9c - redesign Timeline view with day grid, task breakdown, and week chart
bbc582c - wire Kanban edit button + add delete confirmation modal
7330883 - redesign Kanban board with refined cards and columns
e3bf498 - redesign TasksView with refined UX
b12e27f - rewrite PiP hook, stable draw loop, proper user gesture flow
f432936 - position timer bar to the left of the agent bubble
89e87ca - unified toast chip notifications + fix timer bar overlap
15af68d - Picture-in-Picture for Pomodoro timer on tab switch
e0959ad - auto-start timer when selecting break from suggestion banner
21b5ddf - use dynamic plan limits in subscription/credits UI
1dd7f06 - CGU checkbox on landing page publish + configurable plan limits
0b734cb - timer Start button contrast + switch checkmark leak
209c956 - time tracker UI/UX issues
8b909c1 - improve Brand Identity panel + remove unused theme switcher
af7ff43 - AI website scanner for auto-filling prospecting profile
c25856e - derive SERVER_BASE_URL from API_BASE_URL when not configured
62241ef - auto-retry lazy imports on stale chunk errors after deploy
d1b36ab - integrate Domain SEO Analysis, LinkedIn Data, SEO Content Analysis APIs
c2d5c4e
- CSP blocking Stripe.js and inline scripts in production
817cad8 - upgrade @vitejs/plugin-react to v5 for vite 7 compatibility
25e3c48 - allow Aukimi iframe in CSP + fix QuickNote sidebar overlap
08a6e06 - integrate 5 RapidAPI services, ZeroBounce, ExchangeRate, VAT, Hunter.io, Google Trends
f08eae5 - upgrade vulnerable dependencies, 0 audit vulnerabilities
4f2f07b - comprehensive security hardening across backend and frontend
ef112af - add TypeScript declarations for context providers, services, and domain types
e30ac45 - add Aukimi API env vars to .env.example
9571902 - add Aukimi Partner API v2 integration for agent creative suite access
7558e30 - add storage usage indicator in dashboard sidebar
eb056e4 - replace violet with green in Home pricing cards for readability
9ea8ad9 - improve pricing card credits/storage box contrast
a792e27 - update public site with all 15 modules, free trial, and new pricing
54aff0e - remove h-full from TodoPreview so it adapts to content size
cb04789 - 4 major improvements, onboarding, trial, analytics, query optimization
7fc90e2
- create dist/index.html fallback during deploy for NGINX try_files
3739f33 - serve branded HTML error page for browser requests on server errors
3345a93 - move AB test routes before /:id param route in LandingPageRoutes
c3ee0a4 - add missing auth middleware to landing page A/B test routes
02f160a - add GEO, A/B testing, marketing ROI + branded 404 page
363d347 - rewrite Marketing module from scratch
6b334fe - rename Vibe Marketing → Marketing, rewrite hub
bfb43e9 - move bookingLimiter declaration before first usage
07c188d - harmonize card backgrounds across Lead Generator module
98f816a - rewrite ClientFinder to match dashboard design system
a6ef6fa - re-enable Lead Generator module with map
d2c5001 - landing page improvements - media quota, AVIF compression, SEO, form fix
3d527b0 - show landing page views & leads stats on dashboard
8b0c4f0 - serve landing page images publicly without auth
eb2ac6f - remove padding from nav links
e31d2cd - more padding on CTA button, line-height fix
032569b - increase CTA button padding
904c580 - increase navbar horizontal padding
d4edb0d - use 'Get in touch' for CTA nav button label
a45ae6d - use 'Contact' label for CTA nav link, remove text truncation
d2bd824 - improve landing page navbar - limit links, truncate labels, polish styling
333a97a
- trigger frontend redeploy with api.app.kiwi URL
bc21940 - add workflow_dispatch trigger to frontend deploy
54f9318 - read VITE_API_BASE_URL from secrets instead of vars
34cce9c - add api.app.kiwi as backend API domain
1c9b36e - Revert "fix: switch landing pages from subdomain URLs to path-based URLs"
7733720 - switch landing pages from subdomain URLs to path-based URLs
e2b07b7 - prevent Workforce page from scrolling past dashboard header
0a25e0f - TDZ error - move menuItems declaration before useEffect that references it
2997b04 - enhanced invoice PDF (PAID watermark, send modal, batch download)
c6e19ca - add missing DB migrations for deactivatedAt, recurring, recurringInterval
89e92eb - send invoice button on invoice rows + send modal state
72e87e0 - add invoice action icons (send, archive, print)
b09e382 - invoice send via email endpoint + billing service method
7c79fdb - onboarding checklist on dashboard overview
2abdc51 - advanced search filters for CRM prospects
5c45d4a - workflow templates modal (5 pre-built automation workflows)
f0529f3 - quick notes scratchpad + agent pinning enhancements
18346be - profile preferences panel (theme, notifications, default view)
0084c97 - task dependency visualization (blocked by, blocks, chain-link badges)
ea3843c - campaign performance dashboard (metrics, health score, A/B test indicators)
71ab21d - email templates for Communication Hub (6 built-in + save custom)
aaa5163 - email templates for Communication Hub
d4ebce6 - task dependencies in Project Manager
5b6074e - campaign performance analytics endpoint
6a0208b - agent favorites/pinning + recently used section in Workforce sidebar
fe2b3dc - pipeline deal value forecast bar with weighted funnel visualization
9dacfcc - weekly summary widget with week-over-week trend comparison
c85746f - CRM activity timeline with date grouping + log activity form
cd20d3e - Expensa billing analytics (revenue chart, top clients, outstanding/paid)
66ea0d7 - landing page template gallery, notification center panel
dc8e9fa - SEO sparklines, calendar quick-add, kanban board, pomodoro mode
2d2d8bc - lead scoring rings, bulk actions bar, pipeline stage automation
09e7722 - recurring invoices + bulk lead actions
0ce1821 - workflow test execution UI, health endpoints, community stats bar, overview alerts
6e9fb8c - add .idea/ to gitignore and remove from tracking
f4e6dc3 - enriched overview KPIs, workflow execution engine, profile danger zone, spotlight context
dbcd100 - keyboard shortcuts, enriched stats, campaigns/landing pages agent context
c8c44a3 - recent activity feed, projects widget, loyalty/vibe agent integration
4e3a19a - timer analytics from backend, billing widget on overview, automation agent context
5f9f8a8 - sales email sending + campaign audience segmentation
6da016c
- notification bell, project deadlines, timer analytics
e3be298 - global Command Palette (Cmd+K) with search + navigation
5ffcbe8 - billing agent event triggers + overdue/expiring cron
b182ce5 - pipeline deal values, bulk actions, enhanced Kanban
52194f6 - enhanced Overview dashboard with agent activity feed + automations widget
69d8b47 - add booking ENUM migration for landing_page_sections
5e31edf - AI landing page generation with brand context (10 credits)
ca4b647 - company info modal before landing page creation
1097722 - use company name for landing page subdomains, not page title
57e5709 - auto-assign subdomains to landing pages + backfill endpoint
15f59e9 - use subdomain/custom domain URLs in landing page list view
33a4e71 - add icon picker modal for landing page features + favicon icon mode
2bb0a9f - remove CSP header on landing page HTML responses
88bc3e8 - handle non-array form field options in LandingPageRenderer
3dd5a77 - remove duplicate DomainService import + deploy LandingPage model with domain columns
628b710 - switch landing page subdomains to *.app.kiwi + auto-assign from company name
a0c3268 - add missing DomainService and customDomainResolver files
3824782 - add kiwi-bdd to customDomainResolver internal hosts
20061c2 - add kiwi-bdd host to CORS allowlist
cc842b5 - route landing page leads to CRM + email notification
334d902 - prevent image editor modal from closing on crop drag release
f2ef49e - add ImageUploadEditor component with crop and image adjustments
4571036
- add mobile bottom navigation bar to dashboard
671cce8 - LinkedIn status check reading wrong response key + button style
ba3b117 - pre-fill campaign editor with company brand data
37e763e - change Schedule button to amber warning style
65c747e - dark text in email preview, gray icon in calendar error state
7bc6063 - return OAuth URL directly from /nylas/auth endpoint
38fd7a6 - remove all remaining Nylas branding from frontend
8ed10b9 - use TEXT for token columns to avoid MySQL row size limit
98e0f66 - add temporary endpoint to check users table columns
4a67e22 - add DB migration for Nylas→email column rename (fixes production 500 on login)
e92f964 - implement scheduled email send with cron
0ef22c6 - remove all Nylas branding from frontend UI
a9ca5b1 - rename frontend nylas* files to generic names
8ed4fc6 - replace Nylas with direct Google + Microsoft APIs for email/calendar
baf5626 - complete Vibe Marketing module, fix bugs, wire UI, add campaigns, PDF export, hashtags, competitors
05a968c
- migrate Vibe Marketing module from Lucide to Phosphor icons, unify design
a3fbd0b - implement Vibe Marketing module, 29 backend endpoints + frontend route
b1cc112 - replace remaining blue buttons with green primary variant across 4 files
24dd329 - change CommunicationHub settings button from blue to green primary variant
36550df - migrate remaining raw buttons to Button component, improve sidebar scrollbar + nav hover
4745cad - subtle scrollbar + sober sidebar hover, remove flashy green scrollbar, no hover bg on nav links
c69108a - harmonize UI, semi-transparent icon squares + ButtonGroup migration across 44 files
c4d0a0f - sales view, fix button contrast, remove AI-Powered badge, stop forcing icon colors
ce1a786 - harmonize icon sizing and contrast across Button/IconButton/ButtonGroup
90d7c9c - polish Button design system, subtle gradients, shadows, active states
e083508 - design system, Button, IconButton, ButtonGroup components + migrate 139 files
c69054e - landing page templates visual upgrade, styled preview cards, template variety, decorative renderer polish
81d0463 - replace all window.confirm/alert with AlertModal component (12 occurrences across 13 files)
6f75395 - rich landing page templates, 6 starter templates with pre-filled content, colors, and realistic demo data
d1fffe5 - Landing Page round 11, hero/testimonials bg styles, stats prefix, FAQ animation, content split layout
6307e6c - Landing Page round 10, hero split layout, pricing toggle, feature links, gallery lightbox, logos subtitle, footer text
dbf40b4 - Landing Page Round 9, divider section, custom labels, hero trust line, blockquotes
5d6b43d - Landing Page Round 8, subtitles, features bg style, fonts, preview refresh
579ec8d - Landing Page Builder round 7, gallery section, head code, FAQ subtitles
e4961c1 - Landing Page Builder round 6, CTA styles, testimonial layouts, content images
f7135e4 - Landing Page Builder round 5, mobile nav, sidebar previews, badges, counters
a42d493 - Landing Page improvements, new sections, video, SEO, UX polish
512c182 - improve text contrast, labels, titles, placeholders more readable
0b4e0fd - improve dashboard contrast, lighter cards, visible borders, subtler scanlines
5b7543f - server crash, remove dead route code from Deal.js + fix TemplateVote associations
a051da9 - more double-prefix API bugs + useBrandData auth + cron counter
274f126 - remove double /api/v1/ prefix in API calls + fix public page URLs
79e3d3d - Landing Page Builder improvements, DnD, nav, presets, shortcuts
b36c562 - fix+feat: Landing Page Builder, critical fix + 9 improvements
1fbe3d4 - improve Landing Page Builder, 10 enhancements
756a870 - redesign Landing Page Builder, live preview, auto-save, improved renderer
5a04a24 - add Content Studio, Email Campaigns, and Landing Page Builder
89c91a2
- redesign Overview dashboard, 6 stat cards, meetings widget, bug fixes
1f990a4
- 6 bugs in Sales Accelerator module
6a4129f - handle PageSpeed API 429 quota exceeded with user-friendly error
8ecea5d - 6 beta test bugs, template vars, debug UI, i18n, naming, tooltips
8ae98cb - server crash, missing PublicProfile model in ContactRoutes
26e3c45 - CORS blocked in production, skip HTTPS redirect on OPTIONS preflight
69dd6fd - remove 60+ debug console.logs, fix MicroAfterEffects crash bug
a2324b0 - remove debug logs, add missing /timer/today-stats endpoint
3d607f7 - implement missing features across 5 modules
1b00fc3 - second-pass audit, hardcoded paths, wrong token key, SPA navigation
5b6d41f - audit and fix 15 issues across all 13 dashboard modules
4cec326 - wire credit deduction on agent chat/actions + webhook idempotence
c980ec8
- SEO improvements, robots meta, broken og:images, trailing slash, security headers
9fddad6 - add dynamic SEO meta tags to all public pages
2a4e9d3 - add robots.txt, fix og:image, update sitemap for GSC crawl issues
db12554 - remove add-agent button, category chips, fix timestamps
304dc54
- remove 11 unused database columns
d02ad1d - add missing recurrence columns to todos auto-migration
9430fb9 - remove Media Library module + transparent blur Task Manager
25a21bd - hide floating chat on Aukimi Suite page
2df5617 - remove debug logs from AukimiSuite
d6cfe98 - add Aukimi env vars to frontend deploy workflow
c1d706f - add console.log to Aukimi postMessage flow
df7dbcb - retry postMessage auth to Aukimi iframe
4f4559e - show Aukimi iframe even if auth guard fails
9a229b9 - embed Aukimi as single iframe instead of tool grid
7e090e3 - embed Aukimi tools in iframe with postMessage auth
70787b5
- calendar mega-upgrade, 15 features across 6 phases
51961ef - add 6 AI capability domains + 522 Workforce integration tests
d28c522
- clean Communication Hub dead code + fix calendar 1-day offset
1ad6f0e - temporarily remove Google OAuth buttons from login/signup
2195e33 - add Google OAuth sign-in + fix Nylas client ID mismatch
152c67c - add 11 email intelligence agent actions (search, draft, reply, label, archive)
169c6d8 - add 12 new agent actions (prospects, billing, projects, timer)
f945a19 - analytics timeline 500 (Date object not string) + TodoList leads URL
38d0712 - add focus mode toggle for Workforce, hides sidebar and panels
37505f4 - URL detection + Perplexity enrichment in agent chat
86c2319
- map missing floating chat routes (aukimi, notifications) + add MLService train/status methods
c2aca2f - connect timer to agents, upgrade prompts for agency/marketing/PR/SEO workflows
6e6f194 - agent autonomy, billing/todo/community events, ML context, floating chat automation
cdd6162 - knowledge base RAG, analytics dashboard, NL automation, marketplace, team collaboration
95075b9 - agent memory, workflows, advanced ML, real-time WebSocket, external integrations
8d2c717 - add Workforce integration tests (90 tests) and TypeScript type declarations
01ed525 - double /api/v1/ on stream URL, wrong token key, stale event in routing debounce
cec63cc
- add explicit Chat tab button in agent dashboard navigation
c18be80 - add agent intelligence layer, activity feed, ML routing, crawler diff, agent-initiated actions
ab133e2 - implement agent autonomy system, delegation, scheduling, crawlers, ML service
1c6f4b8 - standardize card styling across dashboard and fix logout on refresh
9833c65 - align dashboard pages to tactical theme and clean up UI
397ee07 - remove debug console.logs leaking tokens and credentials
a780995 - prevent logout on server errors during session restore
342389d - remove Stripe key console.logs and hardcoded localhost URLs
ca09850 - add missing DB tables migration, .htaccess cache headers, and webmanifest
91b433a - correct VITE_API_URL → VITE_API_BASE_URL and add time_sessions migration
6c1452a - unify UI/UX across all 12 dashboard modules
e294755 - apply tactical MGS styling to all 14 dashboard modules
076989c - add darker, compact MGS-style tactical theme to dashboard
70f3102 - resolve all case-sensitive import mismatches for Linux CI
8228db0 - case-sensitive import KanbanView -> Kanbanview
6fd1b2d - case-sensitive import SmartFloatingChatWithContext
ce237a5 - trigger frontend deploy with corrected API URL
d8892fe - use npm install instead of npm ci for CI compatibility
8607b16 - regenerate package-lock.json to fix npm ci sync
63718ed - update API URL from kiwi-backend to kiwi-bdd
7fa1069 - simplify backend deploy workflow (checkout + rsync)
d3f9cc4 - trigger both deploy workflows
f90d2b2 - Add README
d41849c - add full backend + frontend codebase
ed6407f
