Changelog
Alle Updates, neuen Funktionen und Korrekturen, die auf der KIWI-Plattform ausgeliefert wurden.
3023 Einträge
- remaining work in progress at push time
63442d4 - the t() reachability check reads 30 lines of a component's parameters
f5bf0de - the component catalogue has ten backgrounds since the SVG backgrounds
2ea382d - work in progress from the studio session, SVG backgrounds and their timing, vector timing, component style and identity, storyboard and product film updates, with their tests
d4fc370 - favourites on top, newest first, drag-and-drop to reorder, star only on hover
699ca2e - a green dot on the agent's avatar for unread replies, counted by the server per business
94d8d65 - a scheduled task runs in its own business; the night brief reads invoices again
2b01877 - approvals, missions, tasks, notifications and delegations belong to a business
14b29d1 - the page's agent at work in the hero, and a team strip that stays on topic
5b3e21b - the chat history belongs to a business; switching business switches the conversation
908bec0 - what a turn created is listed on top of its results, and opens in place
38c3ba7 - fifteen skills from marketingskills, second pass
dd0fbc2 - conversion review, benefit copy for the modules, two more signup buttons, Aukimi after the FAQ
de7e820 - a quote the agent creates comes back with its PDF, ready to attach
0e5cf3b - an answer that lists attachments nobody created is corrected
e0191be - an agent at work in the hero, and the home page A/B goes live
8b657b1 - three claude-skills procedures failed on the pod; first call first, title fixed
505756e - a tutorial clip keeps its final hold on ffmpeg 7
eafd620 - work in progress from the studio session, vector illustrations and their motion in product films, vector content planning, component plan and storyboard updates, review script, with their tests
58d94d9 - translate the social module, agenda and brief strings into 28 languages
a1f5a9c - dead routes and files out, real-only listening, campaigns per business
3dc8cad - bench cases x2-* for the 23 skills taken from claude-skills
6ad880c - Isabella, Yara, Rohan, Natalia and Hugo take claude-skills methods
16b345b - the post editor says what each network accepts, picks the account, and shows what happened
4d64736 - Nathan, Sarah, Sophia, Naomi, Diego and Adrian take claude-skills methods
3cc89a7 - Mateo, Cassandra, Jian, Kai and Sarah take claude-skills methods
e869d05 - scheduled social posts show in the agenda and the morning brief
37da39d - the social agents can plan around the calendar and reach their own actions
501da76 - a post the user cancels does not go out, and none goes out twice
c4c22aa - portrait brand screens follow the 0.98 reading width of e174c7eaf
104963d - work in progress from the studio session, scene templates, camera, focus card context test
e174c7e - border-spacing-x/y is a Tailwind utility, not a border colour
a5ddbb6 - brand kits are read per business since 98d27db43
60be26f - restore CRLF line endings that 0326bbeba flipped in bulk
dc685f4 - work in progress from the studio session, focus cards (context, pose, veil), focal depth feather and timing, DOM group hosts in the worker, portrait brand screens, font loading, with their tests
6a69cab - five new skill procedures failed on the prod pod; rule first, call named
a9c07e4 - agent status is kept per account, not per agent
a48d958 - no needless delegation, and the screen shows the delegate at work
9fcec89 - a delegated agent continues after its actions, like the chat
afc0ba8 - Kai takes Gaston's coding loop and Qwen3-Coder-30B
b8095a4 - the October announcement shows the product, four screens
3e73550 - each announcement carries the recipient's own referral code and link
32e66d0 - editable Gantt, weekly timesheet, time & billing panel, task timers
0326bbe - one table of time, project tasks join the Time Tracker, invoiceable
e9bdb35 - bench cases for the new skills; Ludovic's prompts start with their title
3cbcc43 - sales and customer agents take cold-email, pricing, churn methods
c5718ba - Aria, Lucas, Camille and Lena take marketingskills methods
1ec4b0d - Manon edits, writes welcome sequences, and names more AI tells
dd457c2 - Ludovic plans along dependencies, reuses past projects, checks workload
a25a7bd - recapture every product screen, Marcus is Ludovic
d19c414 - a dead session leads to the login page every time, not only the first
1e24ce4 - Marcus is Ludovic in the last comments, tests and agent docs
af4e096 - remaining work in progress, landing variants, articles, blog seed script, package.json
309339a - translations from the background translation script (new and changed keys)
77167f3 - work in progress from the parallel session, agent renaming, templates and prompts, agent pages and docs
56b97a9 - work in progress from the studio session, reading timing, annotation timing and contrast, device composition, group wipe, font loading in the worker, blur geometry, with their tests
c248bff - the bridge call now carries who asked (by: 'email'), the attachment test expected the old 3-argument call
2529094 - a green unread badge on agents that replied, a browser notice when the tab is hidden, bigger avatars
5cdd377 - Kai fixes a failing test on the user's computer, 8 of 8, tests green on disk
a4d4fd7 - a short dashboard, decisions, the Watch journal, three numbers that mean something, today's tasks
884830b - signup funnel, one-screen signup, paid-weighted bandit, demo video
3f10c72 - no hard-coded fallback text in the linked-tab banner
e704be5 - the browser itself becomes a computer for the agents, no install
fb3b8c0 - tabs filled with KIWI data, invoices, quotes, expenses, pipeline
c32f2ab - a watch can be deleted again, and its buttons say what happened
a287f4e - Kai on the bridge, a guessed path finds the real file, a file shown unread is read, one computer is always the one
9302e44 - blurred glass bands on landing pages, like the home page
74d8568 - @mention someone in a comment and they are notified
b62ef3c - the computer is a location of the media library, copy both ways
a3625e2 - no icon beside the landing section titles
81faf24 - tabs carry a stable id; merge and undo follow the tab, not its position
435a57d - the daily journal, who writes it, its guards, when it runs, and the time-zone trap
fd408b3 - the Watch page, today's journal in a card that opens in full, readable watches
9685513 - a daily watch journal written by Hugo replaces the per-crawl notifications
62978fe - the agent inserts, deletes, sorts and renames, with the screen's code
e3ea4c8 - the home page joins the landing A/B
46f02dc - see live what the agents do on your computers, and stop them
2815f24 - drop spreadsheets.yjsState
8a5542e - share, comments and history open in the editor; read-only verified; review fixes
b54a689 - landing SEO, share images, page-to-account flow
f1467fe - landing pages convert better and rank better
8630ad7 - Yara end to end, no payment on another client's invoice, no expense twice, and the model knows what its earlier actions did
cbe947f - agents read images and scanned PDFs from the computer
ee97c48 - undo takes back only your own step; the new texts in 30 languages
77c6e9e - the library no longer loads every workbook to show twenty cells
7a6fdac - a supplier invoice dropped in the watched folder becomes an invoice to pay
c1d0685 - the export carries the month's expenses, receipts and a CSV summary
d877bad - 0.4.0, manage the computer from KIWI, and the bridge updates itself
2f9a8ca - Diego end to end, the quote finds the prospect just created, no invented quote card
42c8e38 - an e-mail invitee can list collaborators; failures are 500 and logged
c81b49d - fifteen smaller defects of the editor
55669db - inserting, deleting, sorting and renaming carry the formulas along
53dc952 - formats, comments and rules belong to their tab
e267d88 - open screens merge each other's saves instead of colliding
41a8a56 - the directory, one query for both readers, the way out, the limits, and the dead /p/ links
3595914 - "Find businesses" in the Network tool, a link button on the public directory, policy §5.4 p7
16f8678 - a directory to find KIWI businesses and link with a note
56c0fa7 - agents attach files to emails, from the media library or from the computer
ed10757 - two editors, the agent and the share link stop overwriting each other
af543aa - KIWI invoices and quotes saved as PDF on the machine, on demand and every month
5bd48fc - Manon, writes before asking, invents no fact, reads a link before describing it
2060582 - search inside files, text, PDF, Word, Excel, PowerPoint
b2ce2a9 - 0.3.0 reads Word, Excel, PowerPoint and PDF on the machine, and the agent sees what it read
6f01129 - the grid draws only the rows on screen, an edit no longer takes seconds
75e4c4a - Aria end to end, what the reply says now matches what was saved
a045bdb - landing line captures are hand-picked
7651075 - landing captures match their line, buttons keep their label, Phosphor icons
b3c968f - Aria, an invented business id is replaced, a short how-to gets steps before questions
ab84e71 - photograph a receipt, morning summary, overdue invoice alerts, offline lists
0e15d2f - a busy pod is a retry, not a task failure, no scheduled task had succeeded since 2026-10-05
ab2ddbe - Sophia, replay on the prod pod, free plan writes instead of delegating, Turkish stays Turkish
3c56b78 - recapture brand, clients, workforce and hero
5bcad3d - a recurring task comes back in the list, with its list, business and category
345f2f4
- kiwi-studio skill for agents
cf53018 - editor workspace, mix timeline, cue audition, waveforms, scene motion review, edit history
b0e37f9 - film mix, sound effects, transitions, product films and reading/timing rules in the composer
98d27db - translations for shared projects and the studio workspace (all languages)
86f0e61 - "Our partners" block on public pages, co-marketing with both sides' consent
94b28dd - partners block, consent, where it renders, and the blog that was empty on custom domains
36efd12 - Partners section in the Network tool, and policy §5.4 p6
13cdfef - landing pages show the app, agent conversations, module screens, alternating rows
7798168 - offer notifications where they help, 0 push subscriptions in prod
b3b0666 - read a dropped receipt after answering, and say when the model is down
05cf8de - the desktop-sorting question from Seb's 2026-10-08 screenshot
c686145 - meeting times follow the interface language, not the browser's
a9a1b25 - the reply language is the last line the model reads, and an offline computer is named as the blocker
99216bd - approve from the notification, PDFs and a watched folder for the bridge, share a quote
f8f46bb - how meetings between linked businesses work, and their traps
17283ee - Meetings section in the Network tool, and the privacy policy says what crosses
7444ac7 - meetings between linked businesses, free slots on both sides, one click to confirm
f70de31 - Sophia's third pass, seven cases from the 2026-10-07 Turkish conversation, and history in the bench
394e373 - answers general questions, never delivers an article as an email, knows the blog publishes to WordPress
f7da08f - starter missions speak the account's language and deliver the saved document, not the model's promise
91604d0 - a failed or cut-off turn is no longer silent, to the user or to the model
6b1511b - a chat wake waits 30 s for the lane lock instead of failing at once
b985b54 - Brave gets its own install help instead of Chrome's
f7f3e84 - the account menu opens on the credit balance, in green
94f6c80 - install page, one big button, one line of help
60d2ade - "Install the app" in the account menu, with a page that explains it
a36a029 - automatic A/B on every landing page, written variants, Thompson bandit, nightly loser archive
24df572 - an accepted quote creates a Pending invoice, not a draft
3d3beb1 - landing pages no longer follow the agent site flag; internal links; mail claims follow prod
2d547b1 - landing pages, price on free pages, colour, internal links, richer SEO; IMAP folders and true mail claims
ec05239 - a field too long answers 400 naming it, not 500
fbdb0ce - film recipes, a number makes the film different, inside the brand charter
35063be - the header calendar showed 'nothing coming up' on a full agenda
efa57f0 - the glowing halos of the living background are 1.8 times larger
30fb09a - the orange warnings of a rendered film sit in a closed accordion
d2b294f - the screen label never sits on the capture, and the browser bar is thin
54d7adb - Merge remote-tracking branch 'origin/main'
6c7553a - translations of the new and modified keys (automatic pass, 28 languages)
a5ad3bd - served by app.kiwi itself, `npx https://app.kiwi/downloads/kiwi-bridge-<version>-<hash>.tgz`, no npm registry
f116b87
- privacy §5.4 on questions and shared projects; CLAUDE.md
4ec11f9 - a shared project shows up for its member, without a delete button
6f15c79 - shared projects, a project opened to a linked business
a28205b - ask the network, linked businesses and theirs recommend themselves or one they know
9193980 - publish as @nammu/kiwi-bridge, the bare name belongs to someone else's package; dependencies frozen
5a5efd4 - overdue alerts reach every account, not the platform's ten oldest tasks
a29443a - agent actions check the plan and the project's owner
096b8a0 - a scheduled campaign is sent once, a failed one comes back to its owner; drips stop at an unsubscribe
dae6d35 - the app icon counts what waits for you, the header shows the computer, offline messages go out later, two shortcuts
e7038e8 - landing pages and their A/B in the frontend CLAUDE.md
7bbf5bb - a follow-up sequence, a public project page and a meeting invite wait for approval
28d9cbf - trust set aside, credits documented, privacy §5.4 on gifts
2342148 - shared resources are credits, gifts between linked businesses and a monthly network bonus
f98551f - an accepted quote wins its CRM deal; sent invoices show what the client did
65ec77e - delete the old module sheet and its 21 562 strings
50ffe37 - 52 landing pages, every module, every agent, twelve features
7d7acdd - Kai gets the local actions, run the tests, read a repository on the user's computer
6ae1e85 - KIWI's agents work on the user's computer, kiwi-bridge, 7 local actions, approval shown in full
45c2647 - every landing page gets a static route, prerender and sitemap entry
5206f9c - the install banner shows on desktop again, Chrome after an uninstall, Safari on Mac
04a4c4c - Aria's four film skills, kiwi-studio listed, purpose screencast
7346100 - screencast tutorial pipeline wired end to end (run phase, genre, agent entry)
0052242 - the tutorial script from what the user said
5216193 - tutorialFrame, a tutorial step in a browser frame on a gradient background
276f9c2 - the editing plan and the clip of a tutorial step
79d72e8 - what happens on screen over time, scrolls, typing, page changes, dead time
c657d12 - speech track and silences from a user video, transcription by Scribe
7bfa939 - a fake screen recording with exact ground truth
bd2f30a - cards and comment scenes pass the on-screen word cap; no time in a checklist unless the source has it
2ec33d1 - kiwi-studio dev skill and three film skills for Aria
d95b2a1 - manifesto look, comment-to-get call to action, project stickers
cf8371d - the cards template (progress, checklist, skeleton-to-filled comparison)
af71cf3 - chapter pills and status badges for the explainer look
991d582 - captions bring in the active word blurred and pale (explainer theme)
2b31c6a - wake the sleeping video pod and wait for it before the first Wan plan
23c6c92 - the explainer genre and visual themes (cream, serif, one accent per section)
5dadbf1 - explainer title, italic and gradient emphasis words, serif and mono fonts
2b61bc0 - two new scene transitions, iris and lift
38a3caa - landing page template, first two pages in French and English
8794328 - screencast tutorial pipeline wired end to end (run phase, genre, agent entry)
cb92196 - the tutorial script from what the user said
c367f70 - tutorialFrame, a tutorial step in a browser frame on a gradient background
76bbdd8 - privacy policy §5.5 on sent documents, and layer 1 in CLAUDE.md
436095b - send quotes from the screen, a Received tab, invoices to pay, and the public document page
536cbeb - quotes and invoices travel between cells, and answer back
e873f49 - desktop app closer to native, title bar, "Open with KIWI", file sharing, web+kiwi:// links
f87cb87 - the editing plan and the clip of a tutorial step
95b5ae4 - what happens on screen over time, scrolls, typing, page changes, dead time
855c688 - speech track and silences from a user video, transcription by Scribe
32b3d2c - a fake screen recording with exact ground truth
925b72f - cards and comment scenes pass the on-screen word cap; no time in a checklist unless the source has it
07ff948 - kiwi-studio dev skill and three film skills for Aria
a94d474 - privacy policy §5.4 and the network section of CLAUDE.md
347e9d3 - the Network tab, links, benchmarks, common memory; recipes in each agent's skills
c1e4e02 - common memory, facts a cell chooses to give its network
ace6f1e - manifesto look, comment-to-get call to action, project stickers
6aa6bb6 - the cards template (progress, checklist, skeleton-to-filled comparison)
2b8f4eb - chapter pills and status badges for the explainer look
59aede6 - benchmarks, payment delay, quote acceptance, deal win rate and cycle
1f310e5 - captions bring in the active word blurred and pale (explainer theme)
5c461f9 - cells link to each other, by personal code or a completed referral
0c6f5bb - inter-cell network, name it cellule, add the network boost layer
8a5637a - note the inter-pod network idea (quotes and invoices first), not started
7e20852 - wake the sleeping video pod and wait for it before the first Wan plan
3c8356b - the explainer genre and visual themes (cream, serif, one accent per section)
dba67e8 - explainer title, italic and gradient emphasis words, serif and mono fonts
890e5f7 - two new scene transitions, iris and lift
6df144a - a cited zone of a still capture stays sharp, the rest of the capture is blurred
c998f41 - motion blur, shot by shot, only where a media moves fast and no text does
08995d9 - the filmed cursor leaves a short accent trail when it moves
0c29cc9 - the card is found among non-decor layers (blur plate shares its source)
8747e68 - in 9:16 a landscape screen gets its own capture, blurred, as background
c9b5849 - the click ring test follows the new ring (size set by camera zoom)
83cabfc - clicks and typing get real VFX in the filmed tour
0285f75 - the closing button has volume, not a flat fill
3e23a7c - the 01/02/03 step numbers also sit huge and faded behind each card
210a599 - track the Codex config (.codex hooks, .agents skills)
34d0e9e - the announcement says the site and app come in 30+ languages
a3e6385 - one frame of slack between a caption's end and the scene's duration
ee735dc - the brand's REAL second colour, not the accent shifted by a hue
70fa9d1 - an animated counter always ends inside its scene
0c08b3a - Arabic retranslated from en.json, 99.7 % of the app and the public site
6995759 - narration 'full', every explanatory scene gets its voice
47d33dd - Japanese retranslated from en.json, 99.7 % of the app and the public site
8d8524e - a scene's text must say what its screen shows, swap to a matching unused screen, else warn
74fad86 - an idle video pod running an old bundle is restarted, the worker reports its bundle
800a687 - a status poll is not activity, the idle sweep can stop the video pod again
30a7445 - a raw newline in a model reply no longer fails the same batch forever
7efa891 - Finnish says "4" languages for the spell checker, as content-facts requires
54015ad - Romanian retranslated from en.json, 99.6 % of the app and the public site
b77049d - Danish retranslated from en.json, 99.4 % of the app and the public site
d7a1571 - Greek retranslated from en.json, 99.5 % of the app and the public site
9494557 - Afrikaans retranslated from en.json, 99.6 % of the app and the public site
776813e - Czech retranslated from en.json, 99.5 % of the app and the public site
68f56f5 - Hungarian retranslated from en.json, 99.6 % of the app and the public site
6c2ca81 - Finnish retranslated from en.json, 99.6 % of the app and the public site
ddb92a9 - Gujarati retranslated from en.json, 99.6 % of the app and the public site
39a4586 - Bengali retranslated from en.json, 99.7 % of the app and the public site
00f4a06 - Indonesian retranslated from en.json, 99.3 % of the app and the public site
6ce0786 - Norwegian retranslated from en.json, 99.5 % of the app and the public site
4aa15cd - Thai retranslated from en.json, 99.5 % of the app and the public site
5ed7aca - Ukrainian retranslated from en.json, 99.6 % of the app and the public site
122b050 - Vietnamese retranslated from en.json, 99.5 % of the app and the public site
549671e - Swedish retranslated from en.json, 99.5 % of the app and the public site
503d754 - chart labels keep no lost comma after translation; the outro URL stays above the platform UI
fc18fe5 - Polish retranslated from en.json, 99.6 % of the app and the public site
7eb7f6d - Dutch retranslated from en.json, 99.4 % of the app and the public site
2f72086 - Turkish retranslated from en.json, 99.6 % of the app and the public site
907dd4a - Korean retranslated from en.json, 99.7 % of the app and the public site
6bc9539 - Chinese retranslated from en.json, 99.7 % of the app and the public site
5191139 - pt and it, the Google preview labels and the footer credit, translated by hand
99c10a5 - Portuguese retranslated from en.json, 99.5 % of the app and the public site
ebf9943 - a film never ends on a hard cut, closing fade to black or white, with fallbacks
2452316 - a screen video with an action frame fills the 9:16 frame; chart labels lose the lost space
cce6645 - a text never sits on the captions band, QC rule text_over_captions, templates fit the free zone
b6082ff - Italian retranslated from en.json, 99.4 % of the app and the public site
f8ee546 - the reframe asset role exists in the database, old image analyses count as images
ff32542 - a square window card takes the usable width and sits in the platform's safe zone
7c02126 - a 9:16 film shows a square window of each landscape screen, cut on its useful zone
d750fa2 - a square window on a still screenshot's useful zone (POST /reframe)
7a6fb55 - the outro's final veil is denser in 9:16, the plate stops competing with the button
0e826e8 - a landscape screen in a 9:16 frame gets the brand's living background and stays above the captions
352a04c - a 9:16 film shows the phone version of the site's sections, captured on demand
9d24a60 - capture the site's sections in a phone viewport (mobileSections, mobileOnly)
0ec5930 - the fresh-film bench takes --platform (instagram-reel…): 9:16, 1080p, the platform's safe zone
f3e3f9c - a title over a product shot is carried by a horizontal scrim
bdafd99 - size scenes with a reserve for the probed voice duration
5f0007f
- ScanningService keeps its original CRLF line endings
06cf3c1 - Overpass declared as a processor; stale OpenAI warning and URL removed
83830b3 - OpenStreetMap discovery, coordinates, scan route and its refunds
8b1bb9b - scan_prospects reads OpenStreetMap results, caps the radius, needs a place
65d147f - the scan form speaks OpenStreetMap, real sectors, real radii, a place is required
15f12cb - the API boots again, the dead AI prospect generator and checker.js are removed
d487183 - discovery on OpenStreetMap, geo LLM validators removed, NOT DEPLOYABLE YET
104a0c7 - machine translations of the new and changed English keys, 28 languages
70d0c94 - announcements write the Premium price Stripe bills, not a typed one
8a11a3e - the Premium price follows Stripe everywhere on the site
50d13f0 - the Premium price, large, on a button under "What it replaces"
b8cdd8d - Sophia's face in the how-it-works tutorial
4387c85 - the tools are KIWI's; only the mailbox and calendar are connected
79712c7 - a three-step tutorial right under the hero, linking to the guide
e0dc8b3 - choosing a section scrolls back to its title, smoothly
f86f8ba - the documentation in French, translated from the new English
4b11fd2 - the documentation reads like an article, and links the kiwi Discord server
515a284 - agent portraits, product screenshots, and a "What is KIWI?" that starts simple
c9f0a0e - a logo in settings must not break every screen, 64 KB cap, /businesses/mine without settings
417a202 - saving a logo on a business answered 500 (found by running it)
fb1bb4b - quotes and invoices carry the active business's brand
e0f4ff1 - the site says what the module does, and the dead code is gone
690f85a - the brand panel no longer loses edits or fails in silence
1433ef1 - a new landing page starts from the business's declared brand
8d1829d - readers and writers use the same brand, the active business's
5c0eacd - every brand write goes through one validator
4e1115c - /docs explains what KIWI is, and every English sentence matches the code
f2c6959 - two checks the clean worktree caught
322b4d7 - the grid calculates with the new engine; the old regex engine is gone
8d6e7f3 - formula engine, part 2, functions, dependency graph, cycles, incremental recalculation
03915f5 - formula engine, part 1, tokenizer, parser and values (no eval, case kept)
411f4e7 - the agent's spreadsheet actions say what they did, and no longer leave the library stale
abf87f0 - import and export stop corrupting data (CSV encodings and separators, real XLSX, formula injection)
d437ec4 - spreadsheets belong to an activity, links are opt-in, and a cell cannot run script
0ecacfd - a workbook is no longer lost to a 100 KB limit, a closing tab, or a silent overwrite
309ab2b - the live snapshot is handed out as copies, never by reference
85da2fd - the zone-reads booking test mocks the new section lookup
ccf66e6 - import KIWI_PAGES_DOMAIN at the top of the routes file (no-use-before-define)
5ffec4d - the editor stops losing keystrokes, hiding errors and hiding two section types
49fa83e - editing a published page no longer changes it for visitors until you publish the changes
89cb64d - the A/B service test expects the significance block
7d5a4c2 - A/B tests are served for real, by the server, from a cookie
0bd2d92 - invented testimonials, numbers, logos and prices cannot go live as if real
a79aa6f - remove 14 routes nothing called, and the webhook that never fired
fda2765 - the section executors read params.content where the contract test looks for it
6bc2313 - AI generation no longer destroys the page it replaces, and every copy obeys the plan
5e71edf - the paying address is as fresh as /p/<slug>, and the page HTML is parsed, not filtered
6a35fda - a form submission now reaches the CRM, and a robot leaves nothing
3526ccd - the public CRM page no longer promises custom stages or an owner filter
a49a9f5 - a note is saved on the row the screen reads
e71dbc8 - never add two currencies, totals are listed per currency
383b496 - keep the one stage rule that acts, drop the two that did not
49d82d1 - compress JSON responses, leave the SSE streams alone
bf9c3f1 - machine translations of the CRM keys into the 28 other languages
1de581f - the forecast keeps an overdue deal, a refused stage rule goes back, the reasons and steps are named
00d07b1 - a next step on any date, the deal's fields and several contacts per company, and a Kanban that keeps up
69c0dc6
- seven more defects, the import behind another module's gate, products on a lead, a search that emptied the Kanban
84cc29b - drop the scope exemption of a route that no longer exists
cf7ae00 - the tasks of a won deal name the client, not the word "client"
fc635be - remove what no screen calls and what did nothing when clicked
cdefab7 - a won deal is announced, a lost deal is not a win, and the pipeline has one table
9bf01d1 - seven things the CRM screens could not do, edit a record, move a stage from the list, keep a note
f66de01 - an action that needs a mailbox or calendar is refused at execution, and send_sales_email needs a mailbox (C)
6893ed3 - publish a post on WordPress, Ghost, Dev.to or Hashnode, and export the blog as HTML
3a248a8
- every account has its business blog, agents write there and can schedule a post, and none writes on the profile blog
dffa373 - publishing by parameter needs highWhen
9333e3a - the font menus are readable and the editor toolbar is compact
fe4f77a - publishing waits for approval, no business id is asked of a one-business account, and only the last message has live buttons
a4624f5 - the agent bench gets five trap cases per agent and checks for scope, date, empty promises and language (A)
8196e74 - move senderProfile below the imports (lint), ui-audit --host
390a7a5 - translate memory scope strings
08bf453 - bookings see busy time from every calendar mailbox (L4)
ef06697 - a guard against line-ending flips, and the editing helper that avoids them (L3)
d8cebe6 - agent memory follows the selected business (L2)
a6eb116 - the other prompt paths describe the selected business, not the account profile (L1)
996eaa5 - an agent works for the SELECTED business, not for the account's profile
6520012 - Stop now releases a paused task, so the floating timer can be dismissed
42f835c - translate the delegate chip hint into the 29 other languages
d6750d4 - the "Delegate to agent" chip opens the delegate's chat
9b2feaf - translate the floating timer's open label into the 29 other languages
684a8aa - the floating timer opens the Time Tracker in one click
784ee95 - translate the module picker into the 29 other languages
de0fe03 - the header module picker is a custom menu with title, function and search
7c4e7a2 - translate signature, all-mailboxes and calendar mailbox strings into the 29 other languages
bc6ec8b - choose the mailbox that carries the agenda, and merge several agendas (L7)
f25bdc0 - IMAP connections are reused per mailbox (L6)
58132f3 - real-time push per mailbox, behind an explicit switch (L5)
e9dc527 - "All mailboxes" read view (L4)
63c6551 - unread count per mailbox (L3)
4e25f14 - a signature per mailbox (L2)
241b4a9 - versioned encryption keys for mailbox secrets, with a re-encryption script (L1)
c8a9c0b - translate Send from and the Aukimi result into the 29 other languages
02d3200 - snoozes remember their mailbox (accountId)
fa79167 - bookings, sales availability and time-tracker sync use the OAuth mailbox
6142379 - every new signup exists on Aukimi again, Free ones without any tool
2d8ca07 - translate the mailbox strings into the 29 other languages
81b9951 - mailbox picker, mailbox list in the profile, IMAP test button (M5)
e610ce5 - background jobs and agents follow the mailbox (M3, M4)
57011be - define accountOf before getUserProvider (lint)
3c5b5bd - mailbox routes, list, test, add, remove, per-request mailbox (M2)
bbb5fb1 - several mailboxes per account, table, service, per-mailbox provider (M1)
ac98945 - translate the moderation queue and follow strings into the 29 other languages
4b0f09b - follow a post, get told of new comments
8c66dcd - moderation queue after reports; posts are published at once
b46b8ef - translate the forum ban strings into the 29 other languages
7ff3bb6 - forum bans that are stored and enforced
053a81c - translate the Add time window into the 29 other languages
746550b - forgotten timers are closed, one open session per account
3634b24 - "Add time" window and POST /timer/sessions/manual
8038e34 - the scoped-reports test mocks the billing settings the timesheet now reads
c01a8e2 - one billing calculation, stamped when a session closes
03bd582 - sessions carry their task's business, reports stay inside it
51991c2 - a task's time is the sum of its sessions, everywhere
e62b99d - the site-reader worker mock knows wake()
aaf1433 - the video pod wake-up is announced, not mistaken for a slow capture
bac7155 - type-check and the module-declarations test follow the moved module table and numeric durations
42bf215 - categories exist, moderation works, posts are rate-limited and pinnable
7e65a06 - a calendar or plan becomes a spreadsheet with a clickable preview in the chat
b84f1b4 - a quick-link select to every module, centred in the app header
bb0af5e - agents read the images sent in the chat, through the vision pod
d8db13c - reliable timer, honest timesheet, safer CSV, one calendar event per session
00a8727 - the total no longer reads 5.5e+25h
ce3103e - landing-page bookings get the same guarantees as the personal page
5c58a2d - the host is told, the CRM learns the client, cancel notifies the other side, and a meeting can be rescheduled
f3a68b4 - reliable availability, one booking per slot, and a booking address you can choose and copy
4eadb75 - a booking now reaches the owner's calendar, with its Meet/Teams link
cbf9791 - HeaderCalendar writes its i18n keys in full
80c3835 - full-page calendar with a compact header, and a quick calendar in the app header
5ae1560 - the mailbox fills its whole area, with room inside and no wrapped buttons
390e4c0 - the next emails load, snippets are readable, Smart Triage has its column
3ede57d - the mailbox state comes from the server, not from a browser flag
46bc532 - the discord_links table is created even when the foreign key cannot be
883eaf1 - redo the voice of one scene
1aa537d
- choose which formats to render
32f4a05 - every step log has its Stop button (script, shots, voice, compose, render)
21b8e6c - elapsed time on every running step, in the log and in the chat
2f6d928 - a running film step can be stopped from its own log and from the chat
c3e6fb6 - the module tabs stay usable while an agent is getting ready
fa897d5 - a social draft card ignores an image the model invented
50d4b7b - Yes/No buttons follow the language of the reply, and the video-project card shows a user sentence
34e938d - the video studio section names SaaS too
c161379 - the video studio section is no longer about 'your own website' only
0ef3b4d - the site no longer promises a 14-day trial, Free is Sophia + 30 credits
b2d136d - no more 14-day Premium trial on signup, a new account is Free (Sophia only)
1d57e86 - the navbar and footer load the active language, not only en and fr
2cc0911 - every legacy Hindi translation retranslated from en.json
54f495e - Arabic and Hindi reach 99.7 % of the app and the public site
83e6571 - Spanish and German complete (100 %)
939b840 - Japanese reaches 99.7 % of the app and the public site
d1e3197 - every legacy Russian translation retranslated from en.json
89a2ccc - Russian reaches 99.7 % of the app and the public site
bb1ac2e - the idle sweep runs every 2 min, and its cron and its GPU meter read one value
536e987 - a resumed agent pod gets 6 min before it is recreated, and the chat wakes it as soon as you start typing
2b9a1b1 - she reads a file linked from the media library, says what she cannot do, switches the interface language, and asks one question on an empty profile
09e7ed8 - page capture twice as fast on the pod, and a stopped video pod is restarted on new code instead of recreated
07741aa - no invented figures card, no invented recipient, and a workflow draft says it has no steps
faae9a2 - a method question only reads, Nova never quotes a market number she did not read, and project risk has an overview
4bec1c8 - an instruction about how to answer is followed, not turned into an invented action
ec88a83 - a neighbouring question is answered, not handed over, and a delegation reply no longer shows twice
f87de0a - advice is written, not bought with three paid actions, and he can finally set a follow-up task
e4c1300 - she answers the author of a pasted message, never speaks for acts the user did not do, translates, and reads a link first
6db6f14 - no invented actions, the user's language, scheduled posts counted, AI visibility found, and a paid post asks first
9f19f97 - the agents one by one, Sophia first, what the bench found and what serves every agent
4ea16df - every agent knows today's date, mail actions are not offered without a mailbox, and Sophia's real requests are on the bench
510973f - the video pod rents the cheapest 48 GB GPU anywhere in the world, and the legal texts say so
5626b97 - the free plan gets one AI video a month, with the KIWI watermark
89ebe4a - she knows what is connected, keeps no empty promise, knows KIWI, reads Excel and PowerPoint, and keeps email ids
c4e0ac9 - the monthly film cap applies to every chat action that renders, and silent fallbacks now say what they did
87c85ed - the chapter title stays above the platform's interface
93efef9 - confetti now accelerate as they fall
24f751b - an opened draft can finally be launched, and a prepared film keeps the address to film
b1e319c - a spoken target in a still capture is lit by a dark veil, like in guided tours
71964f2 - the custom agent marketplace is gone, web search runs on Exa with its key in prod
447ce88 - one set of easing curves, and a test that refuses an unknown one
ae0716e - the scene check warns when too many foreground blocks move together
ec3a8da - agent routing reads French, by whole words, the best match winning
779f8fa - the scene check reads the platform's safe zone over time
4e456f9 - a false success is redone, live text hides variables, choices can be several, and YouTube, X and websites are film platforms
fe44bc1 - web search runs on Exa, social listening and translation finally return something, and every agent chat keeps its scroll
fbb2d37 - the focus veil of guided tours is tested and no longer sticks after an off-screen navigation
30c8d5b - no orphan action, a draft never lost to one field, buttons for any choice, and every chat survives a page change
14b6d05 - no variable in a reply, a button to say yes, a draft never refused for one field, and no success claimed for nothing
98b755b - a film is asked for by platform, with each platform's frame and safe zone
1513ced - a video request finally serves the video-project actions, and a web address serves the site reader
abcc825 - an agent asks for missing information instead of failing
43f1d1f - the agent chat keeps its scroll when you switch tabs, Discord-style
30b58ce - recapture of the 21 product screens, light and dark, in English
8afcc80 - captures in English, document and spreadsheet opened, versioned URLs, audit of masking overrides
3a56d90 - a video brief accepts the language as an agent writes it
5ee4c51 - Recent Leads truncates long names, agent sidebar clicks no longer land on Mission Control
e01dfcd - sitemap.xml becomes an index with one sitemap per language
d24f17b - document the automatic translation of new or changed keys
692cc5f - new or changed en.json keys are translated into the other 29 languages by a hook
85d256b - split 238k chars of always-loaded notes into per-area files
4a0c0ad - retranslate the whole interface from English
a8c54a5
- a fully refunded Stripe credit pack loses its credits too
b1bb14c - a fully refunded Polar credit pack loses its credits, and the success page shows the amount
69bdb3c - credit packs can be paid with Polar, and bigger provider logos
93c34ea - a turn survives a tab or page change, the approval card speaks plainly, and a video is a project first
413b212 - the Premium webhook ignores orders of other products
38ac304 - a video project saves itself as you type, and Aria can prepare one filled in without launching it
3eca1b5 - what the user sees is read in their zone, not the server's UTC clock
1565254 - timeBlock lays the day out in the account zone, not the server's
36739eb - every account gets its zone from the browser, and calendar slots read office hours in it
b23bbc8 - one morning brief, the server reads mail, calendar, overdue invoices and quotes; Sophia only sorts; each line has its button
dc917a3 - Welcome, Re-engage and Win-back go out in each member's language
00f239d - sent, opened and clicked per User Mailer email, and one preview text instead of two
376f282 - every mail KIWI sends its members comes out of the one charter template
5c78285 - ride the pod wakes users already paid for, and tell users their work is prepared overnight and sent at their hour
4ddad2d - an announcement never goes twice to the same member, and the single mail carries its unsubscribe
4e3a47e - the update announcement now presents video and social posts, in all 11 languages
83fbc2f - newsletter and User Mailer follow the charter, live preview, test to me, preview text, rates per campaign
282c49a - "Lend my session to KIWI", for Chromium and Firefox, ready to publish
5e32c78 - lend your browser session to film your own app, and the access is asked again when a signed-in film films again
562721d - a product photo can come alive, Wan starts from the image and only adds the motion
266e59c - the community write actions are gone, and the film from the chat is described
e252645 - an agent no longer receives another agent's conversation
c342520 - a priority written "High" or "urgent" no longer loses the task
848deb6 - find, stop, translate, reformat and re-score a film from the chat
fb4f218 - change a film from the chat, see where it is, approve it with its price, publish it
511e998 - Aria makes a film from the chat, with the media dropped in it, and the film comes back in the conversation
bf8f122 - a social post asked in the chat is a draft, and can carry the user's own images
d30cc94 - the Video tab gets a left margin inside Workforce, like the other modules
585acef - the trimmer's player stays a reasonable size and its sliders sit under their labels
9b826a2 - add your own media to a film, and choose the part of a video, start, end, peak moment
68d7bf3 - your own media in a project, and the part of a video the generator must use, with its peak moment
d77c5b4 - the generator uses the animated components, a title, a counter, a feature grid, or an animated background under a card
874085b - the pod films animated components (React + Framer Motion, 21st.dev style) frame by frame
d088dce - clicking a notification without a link opens it
cf33470 - the creation form takes a login for an app behind a sign-in; a resume without it refuses to film the login page
4232b51 - retranslate the whole interface from English
1cc65e8 - film a client's app behind a login, the pod signs in with a login and password held in memory only
9717e2b - one translation file per language
9c81143 - the run accepts `notify`, every generate and render from the studio answered 422
af9563d - stop English copies from shadowing every translation
57bd797 - drop the English en/fr copies from 79 .extra.json files
800f304 - translate About Us to Hungarian (104 keys)
c0d8464 - translate About Us to Hindi (104 keys)
f92d0a4 - translate About Us to Gujarati (104 keys)
1f32444 - translate About Us to Finnish (104 keys)
b5ba41b - zoom-through transition and floating screen captures (code landed in other sessions' i18n commits)
d9e333e - translate About Us to Greek (104 keys)
4ba5041 - translate About Us to Danish (104 keys)
e6c366b - translate About Us to Czech (104 keys)
f19af09 - translate About Us to Bengali (104 keys)
a4be8e9 - translate About Us to Arabic (104 keys)
81b56d9 - translate About Us to Afrikaans (104 keys)
7d2aff0 - fill all 30 languages in .extra.json fallbacks
b66ae47 - fill all 30 languages across entire frontend
d95aade - words that arrive one by one and a wipe exit, drawn by the renderer; a sound on moving transitions; the critic sees flat transitions and stacked titles
3239ca3 - stop the global partner hook from stealing Google's OAuth code
7f7c326 - ensure DE and NO have all required translations
b15a37a - add remaining 16 languages (AF/AR/BN/CS/DA/EL/FI/GU/HI/HU/ID/JA/KO/TH/VI/ZH)
5d79540 - translate PL/RO/RU/SV/TR/UK (6 langs × 64 texts = 384)
2483cc2 - translate 64 Portuguese texts
ae4c04c - translate 64 Dutch texts
82b2e28 - translate 64 Spanish texts (About Us page)
03c2dd9 - translate 64 Italian texts (About Us page)
51ea42b - translate 132 missing German texts (FAQ + privacy policy)
abeb242 - out of the corporate slideshow, moving backgrounds, word-by-word titles, transitions that carry the image, Wan under key cards
cff0730 - an email when the film is ready (or could not be finished)
2203815 - a minimal creation form
15aa11b - the next action is violet, one button per film tells you where to click
569e6be
- 10 px between the module tabs' separator and the module content
3fe1549 - the composition fields line up
66882a5 - no horizontal scrollbar in an agent's Video tab, and room on the right
9e32869 - as many scenes as the length needs, and a short version of 15-30 s
00e61bd - the storyboard editor shows the range the storyboard was written for
cd86183 - deleting a project answers at once, its files go in the background
fa29bf6 - a shot keeps its genre's length, no 10 s scenes, no slideshow, no twice the same shot
aeb3e51 - no more « Worker unreachable » while the video pod sleeps, and a quieter screen
4cf51d1 - delete a video project, for good, files included, refused while a film runs
6146942 - full-screen text breathes, 84 % of the safe area, 12 % width margin
6682b70 - a finished project reads « Ready », not the GPU engine's sentence
39c08e9 - install Chromium for the four studio capture tests
94cbeda - the 22 red tests of the redesign, six real defects, the rest stale rules
3a640eb - a test workflow runs when its own file changes
e1e638b - the screens stop re-filtering the roster the server already filtered
e38e647 - the film starts where the music arrives, not on its quiet swell
abf7648 - a stats number never runs off the frame
7493ed0 - the time given back to a film goes to the footage, not to the cards
c1449f9 - the major-update announcement, in the language of each member
3fb803f - the daily GPU budget lets a running job finish instead of cutting it
1880586 - install the video worker dependencies and ffmpeg for the backend suite
ba86cf6 - interface footage is framed on the action, not the whole screen
26033ff - the epic opening hits and leaves (1.8 s), and new rules reach cached films
7218e09 - the job log names the failing tests and the files that fail to load
3b12304 - a film lasts the length that was asked for
64ac57a - a page <title> is never shown as on-screen text
0b3da7b - the end card no longer freezes, and the motion check sees a held value
f967175 - the music lifts between voice lines and starts at t=0
56bf80b - a deploy no longer cuts a film, the runner puts its runs back in the queue on stop
b31baf3 - never sort whole compositions or runs, MySQL runs out of sort memory
896880c - the studio says whether a film can start now, and where it stands in the queue
1025eb2 - the video studio runs on gaston-sandra, tunnel, secrets, deploy, rollback
8d8dd00 - declare Polar as a subprocessor, it collects Premium payments since 2026-10-01
c5dcbfa - fail when the studio-runner stops beating, films would wait in the queue silently
03e44fc - the video studio is processed on our Hetzner server in Germany
ce532f0 - deploy the studio-runner after the API, same commit, and check both carry the same pod bundle
6c7fbfc - the tunnel command lives in a script, YAML folding was splitting it
bef3daf - runs can execute on another server, the API enqueues, studio-runner.js executes
28839f8 - profile tabs really wrap, the global segment rule made them a one-row grid
6fd606e - the capture may take 15 min, the interactive tour no longer fits in 8
b344db1 - header menus above sticky bars, profile tabs wrap, provider logos on pay buttons
e76a8ed - the tall-page scan test now uses a tall page
d69036d - the interface redesign in progress, with the studio quality work from the parallel session
cf953e5 - two buttons, pay with Stripe or with Polar
1f35d2b - Kiwi Premium can be paid with Polar, next to Stripe
ba0ff21
- 'no music' is a decision even on a new project
4c0178c - the English voice follows the genre of the film
d1430f2 - a film without music no longer ships silently
99ee97e - the brand's own fonts are rendered, from the site's files
54e0d97 - the brand logo is found, and shown the way the page shows it
3db4c2f - movement first, a still image is never a shot when a video or the filmed tour exists
12d651e - the family kit, headline and 3D device (corporate), impact and HUD (epic), cinema bands
6930297 - a living background instead of flat colour cards
00b0b44 - corporate and epic families, a planned transition sequence, a drawn rhythm, a perpetual-motion check
6624c7c - a partial vision answer is completed, then reported as partial, no longer thrown away
b129b7e - a card stays above the subtitles; a still longer than 3 s breathes past the upscale guard
09d05cc - English by default, "dynamic" read from the prompt, videos named as videos to the model
653b6e5 - size a narrated scene past its outgoing transition, the render refused it
ef90d3a - an empty 404 from the RunPod proxy also means the pod is not up yet
b13775b - line-by-line text drops duplicate subtitles; a figure the page does not carry is refused
6ae06f0 - repair a mis-cited proof, drop an invented one, the analysis no longer dies on either
724f049 - serve the agents' 9B in bf16 on 48 GB cards, FP8 never started on the lane's Ampere GPUs
76ddd97 - wait through the proxy's 502/503/504 while a recreated pod loads its model
1cac470 - long worker calls run as jobs, the RunPod proxy cuts any response at ~100 s
d7e5a5e - the failing-run generator yields, as the lint gate requires
ca89b74 - the pod's code ships with every backend deploy
8b88209 - prompt → film from Marketing, KIWI capture with the user's session, readable failures
4a8e14a
- ignore stale agent detail responses
feef7e8 - serialize pod wakes and prevent orphan GPUs
65de599 - show selected agent while pod warms
5e95572 - restore render audio readiness guard
78941c6 - ship studio production workflow
de1c219 - center dashboard navigation menu
d635c65
- bound response memory and retain body timeouts
23c4039 - reserve memory for video Studio backend and record real benchmark
77641a5 - check visible shot fidelity against generation requests
e5366fe - preserve video duration and prevent uncertain resubmissions
f69a2ce - retain jobs through transient polling failures
1369e57 - ship editable previews, durable runs and web storyboards
701bd7c - preserve model precision when switching Wan pipelines
e49d47e - restore managed RunPod generation and montage runtime
3949456 - expose documentation in public navigation
f6e0c87 - restrict free accounts to Sophia
3ef1799 - keep quote and invoice amounts visible on mobile
0f1d696 - remove nested search input border
ad17e65 - gate autonomous events before context loading
b931002 - --ipv4, Chromium résout localhost en 127.0.0.1
9d95487 - une action optionnelle dont l'élément manque ne coûte rien au film
943a946 - une photo remplit le cadre dans un genre sans appareil
e284611 - la densité de texte ne compte pas les étapes du lettre par lettre
11c3acd
- l'image de partage d'un site (og:image) n'est jamais le fond d'un texte
67e9608 - trois défauts trouvés en rendant les films témoins dans trois genres
21c7960 - un film déjà rendu peut réécrire son storyboard (changer de genre, de public)
32a4912 - lot I, deux voix, signature sonore de marque sur le logo de fin
9a2e22a - lot J, capture tablette, popups fermés, défilement avec inertie
26d1d15 - lot F, résolution de sortie, cadence, ultra-large 21:9, zone Reels, durées 45 s / 90 s / 2 min
5a80ff7 - lot G, règles de marque : vocabulaire, prononciation, voix et musique de marque, logo en intro, filigrane
61600be - lot H, chapitre numéroté, avant / après, QR code de fin, néon
3e9a570 - lot E, public cible, suggestions de montage, version localisée
6683370 - lot C, punch, secousse, speed ramp, jump cut, écran partagé, énergie et lettres, pour le trailer et la pub seulement
e99afa3 - lot B, une capture qui ne remplit pas le cadre se montre dans un navigateur ou un téléphone
b37c11e - lot A, annotations selon le genre (cadre, cercle, flèche et étiquette) et mots clés à l'accent
714f7ec - lot D, marque tierce, page privée, rapport de droits, sujet grave, pas de transition lente en trailer
ea48e2a - l'empreinte d'une composition porte toute la direction, pas le seul genre
bf940ba - le ton sobre ne se devine plus sur le texte du site
78e812a - lot R4, durées 6/15/30/60 s, versions muette et sans logo
1bc83a7 - lot R3, le vocabulaire que le genre ouvre : noir, cercle, pixels, glitch, surlignage, mots tapés
f115cfe - lot R2, les garde-fous : données masquées, logo jamais en fond, sous-titre sans redite, carte de fin lisible, phrases à relire
92b6e5b - lot R1, le moteur de réalisation (genre × style), qui décide ET contraint
5b978aa - l'horloge de la page tient sur une page lourde, pas de bannière de cookies, contraste d'un texte qui sort
e8bf92f - lot FX, halo de lumière, poussière et lueur de titre, réglés par le style
a638496 - lot T, le texte entre, glisse, et sort en fondu
b5953b1 - lot V, le temps de la page suit le film, et 0,5× à 1,5× pour toutes les vidéos
796d45e - robertsspaceindustries.com, une page lourde se capture, et un film de texte se pose sur les images du produit
d8bad06 - BiblioDIP refait, la même page ne revient plus, l'adresse se lit, le voile ne grise plus l'écran
65f5d60 - lots 3 à 5, des écrans plus grands, une fin toujours, une musique qui varie
c5125ab - lots 1 et 2, le tri de l'information, et un texte qu'on lit en français
223ab5e - un défilement raté ne tue plus le worker ni la capture
ebaf871 - vidéo de présentation de la plateforme sous le héros
1690513 - i18n 29 locales, documentation restructurée, OG images, studio vidéo
bf10aa9 - frontières de domaine, permissions resserrées, délégation arbitrée + section Discord accueil
3ed324c - lots D et E, le produit filmé en action, et un clic pour tout le film
ba3da01 - lot C, la relecture visuelle, un appel par film, testée contre la vraie lane vision
fa72ab2 - lot B, les règles de la Library, contrôlées sur chaque film
30ab588 - lot F, présentation ou tutoriel, zone ou contrôle, et des transitions qui ne sautent plus
27bda6b - lot A, la bonne version d'un écran, choisie seule
cc495de - le temps de voir, la présentation sans gros plans, la licence d'une voix à sa synthèse
d3f3d56 - un écran fourni remplit le cadre, et la caméra ne le coupe plus
eeb95f0 - lot 4, deux durées, et la version courte d'un projet sans recapture
e3ac903 - lot 3, le film rendu est relu, et ce qui se corrige seul est corrigé
8d14013 - medias fournis d'abord, textes qui tiennent, voix et scenes reprises
57402ea - lot 2, cache de scene dans le worker ; rendu parallele mesure et ecarte
049c398 - lot 1, textes courts des l'ecriture, reecrits plutot que coupes
da4d1f0 - jamais l'enveloppe de la page comme plan, jamais deux fois le meme plan
014beb2 - une requete coupee ne fait plus tomber le film ; delai de rendu configurable
eebebba - deux versions du film, site (accueil) et diffusion (YouTube, Product Hunt, Peerlist), et motion design
83e7673 - un site se montre, le motion design ponctue, il ne remplace pas
d8aadf6 - film de l'application v7, agents, studio video, publication programmee, CRM, Expensa, tous les modules
d29df0b
- le film d'un compte social, suite fixe, voix du profil, 20 a 40 s
f23eca4 - motion design (graphic, chart, post, profile) et profil X comme source
2c89551 - une video ne se fige jamais dans sa scene
1b8fd59 - transitions dans le sens du geste, grain commun, flou de mouvement
fc287a0 - typographie cinetique, table des mouvements, textes sur le tempo, carte de fin animee
f9394ef - les bruitages suivent le type de video, et 7 dB plus bas
2c3d7bf - aucune mention legale ni fiche technique en voix off, meme reformulee
d3bce4e - sur une boutique, la fiche technique n'est pas un argument ; une scene finale ne se reduit pas a un mot
c60e38d - une correction des regles du storyboard regenere le script, au lieu de resservir l'ancien
6b9b7d7 - studio-url-to-film --resume repart de l'analyse sur un projet deja rendu
c47f3f2 - la voix dit une description, les chiffres et avis s'affichent ; aucune citation coupee au milieu
a890798 - le film montre les medias du produit, pas la page ni ses mentions legales
6336518 - generer une video depuis une URL sans interface, et tester sans le pod
c77a1c1 - le style produit enchaine en fondu avec halo, le film s'ouvre et se ferme en fondu
8b262a3 - une URL de boutique donne les medias et la marque du PRODUIT, dans la langue de la page
448c2d6 - le storyboard tient avec le modele 9B, schema impose, reparation, voix et musique par defaut
1aa9768 - lint, CATALOGUE_ORDER defini avant buildCatalogue
6daed98 - une video depuis une URL, le modele voyait le menu du site, pas le produit
74d425a - le quota de stockage lit le niveau d'abonnement reel, les clients Premium etaient a 100 Mo
100247c - film promo, un titre de scene reste lisible 1,5 a 2 s une fois ecrit
418cff0 - film promo, la mise au point ne sert qu'aux gestes, jamais aux titres
35ea0cd - film promo, pause de capture 60 ms apres le clic, pas 220 : la roue de chargement de l'ecran suivant se voyait
77ab496 - film promo, l'attente du chargement apres un clic ne se filme plus
26fe6c8 - film promo, la coupe suit la fin du geste, un rechargement ne se filme pas
7eb3157 - mise au point, coupes sur la musique, navigation dans l'app, sous-titres, preuve chiffree
7f71ee4 - le film promo suit la Library, grille unique, typographie cinetique, trois temps par scene
e0db316 - une camera dans la page enregistree, valeur de plan, point focal unique
a0ca33f - une transition « bloom » (fondu avec halo) et deux bruitages sans tonalite
8116df3 - enregistrer une navigation dans l'APP, et le film promo KIWI en trois formats
f946678 - le prompt de l'utilisateur part structure vers Wan, avec le negatif officiel
1670807 - extraire les chaines en dur du frontend vers t(), 1876 a 45
3432f9b
- une poussee est une ARRIVEE (90 % du cadre), et les bruitages suivent la voix
9028885 - eteindre un module rend ses pages injoignables, pas seulement cachees
d5d7706 - une capture au format du cadre le REMPLIT, une capture d application y etait illisible
0236d5d - un bouton de langue dans la barre haute, a cote du theme
eecfc56 - la musique passait 12,7 dB AU-DESSUS de la voix, le lit est calcule, plus unitaire
1cf630a - l'avatar de la carte d'accueil du chat avait une hauteur de ZERO
e801dea - le bloc Discord ecrivait text-white, et la palette le bannit
9053cf8 - H4, trois styles depuis une URL : produit, dynamique, cinema
3856c73 - deux images du site etaient posees en double avec l'accueil
c169e38 - H3, le sound design : dix bruitages synthetises, un plan pur, un bus hors du duck
801c9b1 - deux images et une couleur qui n'est pas du vert
d02fc31 - le second flash de chaque changement de page
186bd83 - la description de /about-us que je venais d ecrire depassait de 21 caracteres
7f75db7 - un SVG en image sociale, et cinq pages qui ne disaient pas ce qu'elles sont
3e23d44 - H2, trois looks mesures, une duree par transition, whip et flash
307f54b - la vraie photo des bureaux, et un bloc Discord aux couleurs de Discord
621adfc - la page annoncait encore un lancement, et n'avait aucune image
87b3985 - "Not Just a Fan" publié sur le blog officiel
afd1e85 - cinq largeurs de conteneur sur une page, ramenees a une
bc29344 - la page suit enfin la meme grammaire que /pricing et l'accueil
eb9626a - le formulaire de contact ne fonctionnait pas, et le support passe sur Discord
35606a2 - une grille de portraits, et une fiche complete au clic
a5716fd - H1, la grammaire de camera par plan
8a2d562 - H0, Aukimi second temoin, la planche en script, et les sections retrouvees
ea251ec - Q8, Wan : export ffmpeg bt709, 40 pas par defaut, controle sur trois images et sur le fichier remonte
b465efd - Q5, 60 images par seconde, l interpolation Wan mesuree et laissee en option
8eda9e1 - Q4, la remontée d'un plan par le petit côté, captures d'éléments à dpr 4, héros mobile à dpr 3
f52c5e8 - M4, la typographie mesurée, les voiles de lumière, le contraste lu sur l'image rendue
ced706b - M3, les sous-titres mot à mot, sans bande, dans l'encre du fond
38c25f9 - cinq textes sous le seuil, dix liens qui menaient au formulaire de connexion
1a1ce70 - M2, une idée par écran, la caméra sur l'élément, et deux trous du moteur
098943c - « 24/7 » et « jour et nuit » disparaissent des trois dernieres pages
f3fe16f - « pendant que vous dormez » est faux, et la page ne nommait qu'un agent sur 24
30f0394 - quatre temoignages inventes, et le studio video + le multi-activite sur les pages qui manquaient
dd3210a - M1, la porte de contrôle avant le rendu, et trois corrections que la planche montrait
44a0fc9 - « No Schrems II headaches » etait faux, et les deux differenciateurs manquaient
6206289 - les agents, le multi-activite, le studio video et le delai reel
f61369f - six reponses fausses ou perimees, dont la voix qui n'etait declaree nulle part
d9be8c9 - la mise en page reprend le vocabulaire deja ecrit pour la section prix de l'accueil
c1c35dc - un pod qui sert un autre modèle que la lane est recréé au réveil
ee1d130 - Q3, le screencast reconstruit depuis des PNG sans perte, 60 i/s, desktop et mobile
ec57c02 - l'essai etait annonce quatre fois, et trois lignes Premium disaient ce que dit le gratuit
b623555 - Qwen3.5-9B en FP8 sur le pod, le modèle devient du code, et plus d'adresse inventée
67ee63a - les deux outils de mesure du referencement et du prix, et pourquoi pas des tests
9ece300 - un controle qui compare ce que Stripe facture a ce que le site annonce
acaa357 - 26 titres et descriptions perdaient leur fin en resultat de recherche
95bae61 - mesurer le declenchement contre de vrais messages, pas des phrases inventees
fb9f301 - le banc de comparaison des modèles du pod, et sa première mesure
3d14267 - les trois chiffres invérifiables le sont maintenant, et ils etaient faux
2cc566d - l'ecran de la base de connaissance sait livrer a tous les comptes
a1b1621 - un seul encodage pour le film, une coupe est une coupe, CRF 16, tags bt709 (Q2)
92445fa - un document peut enfin etre livre a tous les comptes
b2cb9f0 - /docs n'avait aucune balise, et trois URL se disputaient un seul document
63c6e69 - le badge des avis Product Hunt, un survol plus discret, rotation a 3 s
bafd843 - fenêtre du pod à 32K, l'historique de conversation rendu aux agents
d5507ef - ce que la traînée longue du site affirmait, et ce qu'elle affirme maintenant
f05409f - la page recrutait pour un lancement de beta vieux de treize mois
f6facd4 - trois pages presentaient des gens et des partenariats inventes
bc95cef - « these are the ONLY action names that exist » etait faux, et bloquait 79 actions
8947ce0 - le format d'action etait decrit deux fois, et « rendre compte » n'avait aucun mot
67253e2 - 39 calculateurs de plus, et une seule declaration chacun
7581949 - l apercu de l editeur et les vignettes chargent la couche kiwi-videoflow avant le moteur
a9170d7 - la couche kiwi-videoflow, easings reels, texte a 2x, encodeur, FBO 16 bits (Q1)
8f9067d - le banc de qualite, mesurer les films avant de les ameliorer (Q0)
8882cd4 - une skill ne se declenchait que sur une chaine exacte, une fois sur huit
1321aba - seize procedures distillees de la bibliotheque, livrees a dix agents
c77cca1 - quatre chiffres mis en avant, dont un impossible et un contredit par la prod
37e6c7f - une skill livree a tous les comptes evinçait celle que le compte avait ecrite
8a41f82 - « Learning curve < 1 hour » n'est mesurable par rien
b927d20 - les fichiers de police de Google en connect-src, pour les vignettes de l editeur
3c205e3 - loudness mesuree puis gain + limiteur ; le worker ferme ses Chromium, poliment puis de force
9e77e91 - trois affirmations que le code contredit, sur 30 locales
ab18f98 - CLAUDE.md annoncait un referencement fige sur l'anglais, c'est faux depuis un mois
3efa4ca - composer une scene ne sonde plus le reseau ; la voix par defaut d une langue est une voix native
2808e16 - vignettes dans la bande des scenes ; le client marketing ne garde que ses trois appels
b37eb3d - « Rejoignez 3,5M+ professionnels » etait une preuve sociale inventee
c6bbf81 - la troisieme section parlait d'un autre metier, elle part
e3efad3 - Lot 7c, régénérer un seul plan Wan, réutiliser un brand kit
9025399 - un visiteur anonyme se faisait deconnecter en ouvrant la page d'accueil
416f279 - Lot 7b, l'éditeur visuel d'une scène, dans le produit
10a8137 - les portraits de /agents etaient carres
9fa2848 - l'ecran montrait un autre agent que celui qu'on venait de cliquer
74e0e3c - les cartes d'agents prennent un degrade anthracite, au lieu d'un aplat noir
c3046c9 - une grille 3x3 d'agents qui tourne, des separateurs verts, et l'ancre qui defile enfin
9028768 - Lot 7a, une scène éditée à la main, validée, versionnée, et qui survit
133ec25 - Lot 6d, la parole et la musique plus rapides
a6d5716 - le studio video et le calendrier de publication se montrent, au lieu de se decrire
c5217a6 - ce que la nuit du 22 au 23 a etabli, et qui ne se relit pas dans le code
7774804 - le pays des pods, et deux descriptions qui vendent l'ancien produit
0126ced - les 18 pages produit en francais, et 25 affirmations fausses corrigees avant de les traduire
d96185a - l'IA ne tourne pas ou la page disait qu'elle tournait
25a3327 - Lot 6c vérifié contre le compte ElevenLabs réel, voix, film, licence
a338685 - « 180+ actions » pour un agent qui en a 173, et trois ecrans qui n'existent pas
e207a40 - deux produits qui n'existent pas, 150 liens morts, et le nombre d'outils Aukimi
cd973d8 - le metier de l'agent etait tronque, et c'est lui l'argument
9340a17 - les 24 agents, une rangee qui defile, et le calendrier Marketing photographie
597790e - ElevenLabs comme second fournisseur de voix off, derriere une interface
07f056b - le plafond video garde les quatre etapes payantes, pas seulement le rendu
aba2cbf - le prix suit le volume, un forfait de 15 payait dix passages GPU
055a1c6 - l'echec d'une mission n'ecrivait rien, et l'ecran disait le contraire
7bb69a2 - une date porte son fuseau, un jour nu reste un jour
d03742f - la generation video passe aux comptes payants, et le studio l applique
5aa1bc9
- relier les chiffres du site a leur source dans le code
418ef90 - ce qu'on recevait apres avoir clique
454a5bd - le ROI multi-canal, la boite unifiee et la beta de 2025
13f0bd2 - les ouvertures n etaient jamais comptees, les clics jamais traces
ffcdd8d - une question, celle a laquelle les gens repondent
800fe8e - dix affirmations publiques que le code contredit
f5f4c9b - supprimer l'assistant en 5 etapes, que personne n'atteint
5543604 - de vraies miniatures, au lieu d une image de 2560 px retrecie
06ff62c - la bibliothèque musicale vérifiée contre l'API, le calage en temps film
682531e - les deux dernieres captures sont a jour, les vignettes a 384 px
f7c66c2 - une section publication, et les deux demos remontent avant le catalogue
ef2c33c - le seul bouton allume etait celui qui saute l'etape
d3880df - l oxydation remplace le violet pale, et les vignettes doublent
f478788 - « Connect Bluesky » passe par t(), la CI repasse au vert
eb0925a - le studio est photographie, et l accueil le montre
39da99e - Revert "feat(onboarding): un compte neuf n'est plus vide"
eefaecd - une section pour le studio video
7be882a - la section Aukimi porte le logotype du partenaire
a25e34c - la palette d accent du sombre passe en vert, magenta, violet
78c6c2a - Lot 6, voix off, sous-titres, musique calée sur le tempo
bdb948a - un compte neuf n'est plus vide
2f6b2d6 - le dashboard proposait quatre plateformes que le projet n avait pas
0043dce - corriger ce que j avais affirme sans le verifier
780963c - le module herite de marketing, sinon l ecran disparait
531561f - le hero montre le produit et dit ce qu il fait
e8aa67e - plus aucune capture ne vend un ecran vide
fb90f08 - le studio video a sa page publique et son entree Navbar
b36a3c2 - quatre des cinq ecrans vides ont de quoi etre photographies
3d8c57b - enregistrer une publication en brouillon repondait 500
853d1db - le studio video sort de Marketing et devient un module d Aria
cd1862d - chaque page de module dit quel agent le pilote
f4727a7 - le site dit ce que le produit est devenu, un agent par metier
27e31d5 - l accueil et la bibliotheque servent la capture du theme
6868b74 - 36 captures du produit, en clair et en sombre
58e3865 - plus de barre de defilement en mode focus
7b59b51 - l'écran du studio vidéo remplace l'ancien VideoStudio
a6e0f99 - un jeu de demonstration local, pour photographier un produit vivant
339d8ff - une page de module atteinte en direct s intitulait « Workspace »
15336d6 - Sophia ouvre la liste des agents
93e77d2 - les deux traits de la barre laterale passent en line-soft
5d3ca08 - Mission control ne s allume plus en meme temps que l agent ouvert
201f1b2 - passer d un agent a un module ne fait plus clignoter l ecran
3fbba78 - le composeur s ouvre sur deux lignes et demie
aa676e3 - le bandeau de l'agent disparait, ses actions montent dans la barre
6a0780e - Lot 5, la file des plans Wan, avec un contrôle qualité mesuré
ec4c99d - une seule liste d'agents, la colonne de Workforce rejoint le menu
6bd5c1a - le badge Product Hunt quitte le hero
d390072 - on arrive sur la conversation, et la bascule ne scintille plus
39f57ee - Lot 4, la composition sans Wan rend un film juste en 16:9 et 9:16
c458eb3 - chaque agent a sa table, le chat, ses modules, sa memoire
ee7f93e - le menu lateral liste des agents, pas des outils
d0a7ddc - le brief PostForMe ouvrait sur une phrase devenue fausse
2636058 - l erreur de connexion disait le message d une bibliotheque
33a7237 - « Publish Now » etait illisible, et la regle censee l'interdire etait aveugle
7d9bd98
- la ligne marquee publiee du 29 juillet n avait jamais quitte la maison
12c8376 - deux scripts pour voir l integration Post for Me, sans publier
975847d - le rendu de post visait un chemin double, avec le corps d un autre endpoint
7aa5fae - 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
