24/0513:07
🚀
SP
S Talent
— Phase 2 PRD Full Build CODE DONE. 6 giai đoạn code xong: 4 role (HS/PH/GV/ĐT), Chợ Nhiệm Vụ 3 khu, tạo+duyệt NV, nộp minh chứng OK/NotOK, XP+Xu thưởng, 7 hạng hành tinh, Shop voucher thật, notifications. 155 files, 22+ PB collections, tsc+build PASS. Chưa deploy — cần apply PB schema + FTP + test E2E.
24/0502:05
🎬
SP
GrowX Studio
— Sprint 5+6 DEPLOYED LIVE — Moodboard + Storyboard + Project Render. Bi yêu cầu "hoàn thành tất cả rồi deploy, moodboard giữ tiếng Anh" → autonomous mode. Delegate 2 Builder Sonnet song song (BE 472s/58 tools + FE 345s/39 tools) gộp Sprint 5+6. BE 5 file mới: lib/style.ts 102d (getProjectStylePrompt cache 60s tự inject keywords+palette vào prompt), routes/moodboard.ts 255d (GET/PUT/POST generate-key-visual), routes/shots.ts 212d (CRUD + reorder), routes/projectRender.ts 165d (POST render + GET SSE stream), workers/projectRenderJob.ts 258d (BullMQ queue chạy lần lượt từng shot workflow + ffmpeg -c copy concat lossless). 13 file modified: handlers (imageGen/videoGen/talkingStillHandler) inject style từ projectId, workflowExecutor thread projectId? qua NodeHandlerCtx, queue.ts thêm projectRenderQueue. PB schema mới: +2 collection moodboards (palette JSON, style_keywords, ref_image_ids JSON, key_visual_url) + shots (project_id, order_idx, name, duration_sec, prompt, workflow_id, output_url, status) + extend projects 3 field mới (moodboard_id, project_render_status, final_output_url). FE 12 file mới: MoodboardTab.tsx 159d + 3 component con (PaletteEditor / RefImagesPicker / KeyVisualEditor), StoryboardTab.tsx 200d + 5 component con (ShotCard dnd-kit / AddShotModal / ShotDetailModal / RenderDrawer SSE / StoryboardToolbar), 2 API client (moodboardApi / shotApi) + constants/moodboard.ts (DEFAULT_PALETTE + 10 STYLE_KEYWORD_SUGGESTIONS) + types mới. ProjectDetail.tsx 175d thêm tab switcher "Tổng quan / Moodboard / Storyboard". Drag-drop reorder shots dùng @dnd-kit/sortable đã có sẵn. Refactor pb.ts: 548→231 dòng, tách pbSchema.ts 323d để tuân thủ ≤500 absolute. Decision autonomous: Moodboard giữ tiếng Anh (Bi xác nhận), Style injection mặc định ON, Key Visual generate thủ công (nút riêng), ffmpeg -c copy concat, extend projects thay vì v2, bỏ Sprint 7. Deploy s25: tar src → /tmp/buildgrowx → docker build → recreate container qua /tmp/growx-run.sh → upload app-dist qua alpine --user 0. Image growx-server:s25 + bundle index-BGRDHZgc.js 658KB (gz 204KB). Smoke test E2E PASS: /api/health 200 ✓, schema auto-migrate ✓, PUT moodboard với palette+keywords ✓, GET moodboard persist OK ✓, POST shot auto order_idx=1 ✓, GET shots ✓, DELETE shot ✓. Cuối: 16 file dirty + 22 untracked chờ Bi xác nhận commit gộp Sprint 4-6 thành 1 commit hay tách. tsc + vite build PASS sạch cả BE + FE. ⏳ Bi vào project bất kỳ → 3 tab mới + tạo moodboard với palette + tạo 3-5 shot → render toàn bộ.
24/0501:07
🔒
SP
GrowX Studio
— Sprint 4 + Settings page DEPLOYED LIVE. Delegate 2 Builder Sonnet song song. Sprint 4: ImagePickerModal (components/ImagePickerModal.tsx 125d + UploadTab 128d + LibraryTab 74d) — click placeholder trong ImageInputNode mở modal 2 tabs Upload/Library; GuidePage (pages/GuidePage.tsx 152d + GuideSections 171d + GuideSteps 166d) route /guide 6 section hướng dẫn vẽ workflow + nav "Hướng dẫn". Settings (Option A — PB-based): Collection mới app_settings (key/value/description/is_secret) với 5 default rows seeded (openrouter_key, elevenlabs_key, image_gen_model, video_gen_model, cost_tracking_enabled). BE: lib/settings.ts 111d (getSettingValue cache 60s + fallback env) + routes/settings.ts 176d (GET mask secrets / PUT / POST test connection). Refactor 5 worker files (openrouter / elevenlabs / wan / imageGen / talkingStillHandler) — đọc key qua getSettingValue('openrouter_key', 'OPENROUTER_API_KEY'), fallback env nếu DB rỗng. FE: pages/admin/SettingsPage.tsx 141d + SettingRow.tsx 120d (mask secret + show/hide + test connection inline) + lib/settingsApi.ts 26d + constants/settings.ts 33d. Route /admin/settings + nav "Cài đặt". Save chỉ PUT keys đã sửa (dirty tracking). Image growx-server:s24 + bundle index-Jx7raIdC.js 638KB. Smoke test PASS: auth 401 → 200 with token, test openrouter "Kết nối thành công" (env fallback vì DB rỗng). Backward compat: DB rỗng → workers tự dùng env var hiện tại. ✅
23/0522:20
🎤
SP
GrowX Studio
— PIVOT TALKING pipeline: bỏ Wan 2.6 lipsync (model OpenRouter ignore audio input, tự generate AIGC Alibaba — forensic xác nhận) + ElevenLabs IVC (tiếng Việt chất lượng trung bình). Stack mới: Microsoft Edge TTS (free, npm msedge-tts@2.0.5) voice vi-VN-HoaiMyNeural (nữ Hoài My) + SSML style storyteller (rate -8% truyền cảm) + FFmpeg loop ref_image + Ken Burns zoom 1.0→1.15 → MP4 9:16 1080×1920. Đã code edgeTts.ts 140 dòng + talkingStill.ts 198 dòng + refactor renderJob.ts 311→396 (gỡ wan/elevenlabs imports + chunking, thêm idempotency skip nếu file ready, fix PB URL field bug bằng buildPublicUrl(PUBLIC_BASE_URL+...)). UI: dropdown Giọng đọc + Phong cách thay upload IVC. E2E mini local PASS — TTS 0.7s + FFmpeg 12s ra MP4 1.53MB 22s. tsc clean cả server + app, vite build PASS 426KB. Sync.so SKIP MVP vì no free tier + lipsync-2 không nhận static image. Còn lại: deploy VPS rebuild Docker (npm install msedge-tts) + E2E test scene thực.
15/0522:33
🎭
KH
Vòng Xoay May Mắn
— Nâng cấp 3 bộ VIP (giải lớn): Prize #3 "Quyền Sở Hữu & Khai Thác 01 Cây Cà Phê" → tier=big. Thêm field prize_id (relation) vào vxmm_vip_phones, vip_prize_id vào vxmm_players. 5 SĐT VIP cũ gán tạm về Togo. Hook mới có: (1) register-player cache vip_prize_id lên player, (2) spin dùng exact prize thay vì random big, (3) /api/vxmm/import-vip-phones endpoint với duplicate check cross-prize. Admin VipPhones: dropdown giải, import v2, filter, cột "Giải VIP". Summary: hiển thị HQ contact khi trúng giải 1-2-3. Build + FTP deploy done. ⚠️ Cần Bi: Upload hook mới qua datagiapha.ngoctinco.com/_/ + phân lại 5 SĐT VIP cũ. ✅
15/0516:46
🔥
SP
S Talent
— Hotfix xuất PDF hồ sơ năng lực LIVE tại https://talent.io.vn. Bi báo nút "Xuất Hồ sơ Năng lực (PDF)" trên Profile screen ấn không có gì xảy ra (silent failure — không tải file, không alert). Root cause 3 bug đồng thời (Scout Haiku discovery): (1) Logo path lỗi — ProfilePdf.tsx:164 dùng <Image src="/brand/logo-white.png" /> relative path, react-pdf v4 không resolve được trong browser context. (2) Font race condition — Font.register() Be Vietnam Pro 4 weights từ cdn.jsdelivr.net/fontsource được gọi sync ở module level nhưng font load async không await trước khi pdf().toBlob() render. (3) Emoji không render — Badges dùng emoji 🎤👥🔥🧠... mà react-pdf default không có emoji font. Fix (Builder Sonnet, 2 file): (a) ProfilePdf.tsx thêm prop logoUrl?: string vào ProfilePdfData + <Image src={logoUrl}> dùng prop; export FONT_URLS[] constant cho consumer pre-fetch; thêm Font.registerEmojiSource({format:'png', url: cdnjs twemoji 14.0.2/72x72}). (b) ProfileScreen.tsx handleExportPdf pre-fetch FONT_URLS qua Promise.allSettled(...map(fetch)) trước render PDF → warm HTTP cache, allSettled không throw; truyền logoUrl={window.location.origin + import.meta.env.BASE_URL + 'brand/logo-white.png'} absolute URL; 5 console.log('[PDF] bước X...') debug từng bước; catch block alert hiển thị err.message cụ thể thay vì generic "Vui lòng thử lại". Build + Deploy (Shipper Sonnet): npm run build PASS 284 modules tsc clean; Python ftplib upload 180.93.36.233:21 user stalent 15 files trong 2 giây; verify https://talent.io.vn/ HTTP 200, hash mới index-C_bypRMR.js / index-CGxfzoFu.css khớp 100% local↔server. Lưu ý: PWA service worker giữ cache cũ → Bi cần hard refresh Ctrl+Shift+R bypass. Risk còn lại: CDN jsdelivr có thể bị CORS từ localhost dev — nếu Bi test còn font xấu/logo trống sẽ triển Option B fallback tải .ttf Be Vietnam Pro về public/fonts/ register absolute local URL. ✅
13/0509:32
🛠
KH
App Plustalent
— FIX-PDP-SAVE-IN-EDIT-MODE: Mentee bấm "Lưu" trên PDP báo thành công nhưng dữ liệu không persist (case Quyên — plan v23 UEF Career). Root cause 2 tầng: (A) Mentor đã duyệt yêu cầu chỉnh sửa Mục tiêu → plan rơi vào trạng thái status="approved" + is_locked=false + edit_status="editing". Với is_locked=false, canEdit trong usePDPState trả về true → các nút Lưu tổng quát hiển thị. (B) Hàm save() có 3 nhánh if/else (draft/change_request, no plan, isExpert) không cover case mentee + plan.status=approved → silent fallthrough, hiển thị toast "Đã lưu bản nháp!" mà không gọi PB. Fix: (1) canEdit = !isExpert && !locked && !isClosed && !isEditingGoals — loại trừ chế độ chỉnh sửa Mục tiêu. (2) Thêm cờ didWrite trong save(), nếu không nhánh nào ghi DB thì throw error tiếng Việt hướng dẫn dùng "Gửi chỉnh sửa cho Mentor" hoặc "Yêu cầu chỉnh sửa PDP". (3) Mở rộng điều kiện render PDPEditRequest trong PDPForm.tsx để banner xanh "Bạn đang được phép chỉnh sửa mục tiêu PDP" hiển thị khi edit_status ∈ {requested, editing, submitted}. Không cần fix data: User reload, thấy banner đúng, dùng đúng flow "Gửi chỉnh sửa cho Mentor". Build pass, deploy FTP production. ✅
11/0501:35
🚀
KH
GrowX Talking Video
— Fix IPv4 transport + Talking Video pipeline E2E hoạt động. Form /talking-form báo lỗi "Internal Server Error" khi submit — root cause: container uploads không có IPv6 route, mà api.airtable.com chỉ resolve IPv6 → httpx.ConnectTimeout. Fix: _uploads_app.py thêm transport = httpx.AsyncHTTPTransport(local_address="0.0.0.0") bắt httpx dùng IPv4. SFTP sync app.py lên VPS 160.191.244.132:/home/deploy/uploads-service/app.py, docker compose up -d --build PASS, container uploads recreate + Started. curl https://growx.160-191-244-132.nip.io/health trả {"ok":true}. Pipeline production: (1) HTML form upload video tham chiếu mp4 ≤20MB + voice text tiếng Việt + chọn 1/10 giọng OpenAI (onyx default) + tên KH (2) Backend /talking lưu video, tạo Airtable record (collection jobs), gọi Activepieces webhook Gpiqobf00OPH0rGnSj9Ik (3) Activepieces flow 6 steps: Airtable Running → TTS OpenRouter gpt-audio-mini stream PCM16 24kHz mono + wrap WAV header → upload internal uploads:8000 → Airtable save audio_url → Sync.so v2 lipsync model "lipsync-2" submit + poll 10s/13min → Airtable Done → Telegram noti. HTTPS qua nip.io DNS + Caddy auto Let's Encrypt → growx.160-191-244-132.nip.io (Sync.so yêu cầu HTTPS public URL). Test artifacts: test_full_vn.wav 19.6s thoại GrowX brand intro với onyx, test_lipsync_output.mp4 14MB Sync.so job a4d401f8 thành công. ⚠️ Sync.so free tier (3 video) đã hết khi test — Bi cần upgrade Hobbyist $5/mo để chạy production. ⚠️ Optional: Build Dify workflow UI (theo yêu cầu gốc) thay HTML form đơn giản. ✅
09/0520:53
⚡
KH
Việt Huy viethuynew
— Convert chính thức Next.js trang chủ + trang sản phẩm (65% → 80%). Bi yêu cầu "convert trang chủ và trang sản phẩm sang next.js, đảm bảo chuyển đổi giống 100% bao gồm hiệu ứng". Chia 2 Phase delegate Builder Sonnet. Phase 1 (trang chủ): project mới 04-src/ Next.js 14 App Router + TS strict + Tailwind v3 + next/font Google (Be Vietnam Pro + JetBrains Mono). Config next.config.js output: 'export' cho FTP static deploy + images.unoptimized: true + trailingSlash: true. tailwind.config.ts brand tokens đầy đủ (navy #133578/baby #E8F0FB/cyan #00C2FF/gold #F0B94A/ink). globals.css extract toàn bộ keyframes từ HTML cũ (slide rotate / marquee / sphere glow / pin pulse / hover zoom). 5 layout components: Topbar, Header (sticky 129 dòng + 5 hover dropdowns), MobileMenu (8 mục accordion <details>), Footer (5 cột), FloatingButtons (FB/LinkedIn/Zalo/Tư vấn fixed). 5 home components: HeroSlider (5 slides 7s auto-rotate + Venn orbs UY TÍN/CHẤT LƯỢNG/HIỆU QUẢ), PartnersMarquee (pause-on-hover infinite), FieldsSection (3 cards 460px IntersectionObserver reveal + hover zoom + reveal CTA), CustomersMarquee, ContactSection (4 pin pulse Vietnam map + form 6 fields tiếng Việt). lib/types.ts Product/Linhvuc/SortBy types. 14 public assets copy (logo.png, logo-white.png, vietnam-map.png, fields/*, customers/*, partners/*). README dev/build/deploy. 38 files Phase 1, build pass. Phase 2 (trang san-pham): app/san-pham/page.tsx 'use client' + useSearchParams đọc ?linhvuc=y-te|thu-y|thuc-pham|moi-truong sync 2 chiều. 10 components mới components/sanpham/: HeroSearch (LIGHT baby-100 + breadcrumb dynamic + stats bar), CategoryCards (4 SVG line icon CYAN microscope/cattle/wheat/DNA — KHÔNG stock photo), Toolbar (sort/perPage 24-48-96/view grid-list/compare count), FilterSidebar (6 nhóm: Lĩnh vực/SP/Hãng mở sẵn — Công nghệ/Chứng nhận/Tình trạng collapse mặc định, chip active = bg-baby+border cyan), ProductCard (hover scale 1.05, cert badge gold vs baby, link cyan + outline navy mini button), ProductGrid (4-col / 2-col / 1-col + skeleton loading), Pagination, CompareDrawer (slide-up sticky bottom navy gradient, max 3 SP, container 1400px), FormCTA (2-col navy left + form 6 fields right + 3 contact icons hotline/email/zalo), EmptyState. lib/products.ts 8 SP seed (Sacace Real-TM Kit, Devyser NGS, Invitek Spin, AB Analitica HPV, Illumina MiSeq, Entrogen BRAF, Sacycler 96, Samag Extraction). 8 ảnh copy option3/assets/products/ → public/assets/products/. Bảo toàn 11 fixes UX đã apply. Build pass, route /san-pham prerendered static 9.25kB. Tổng: 50+ file mới Next.js project, 2 route static export sẵn FTP, ⏳ Bi test local cd 04-src && npm install && npm run dev.
09/0519:02
🎨
KH
Việt Huy viethuynew
— san-pham.html 11 fix UX deployed (60% → 65%). 11 fix toàn diện trang Danh sách sản phẩm sau review của Bi: (1) Hero LIGHT đổi từ dark navy gradient → baby blue background + H1 navy #133578 font-extrabold + cyan eyebrow line + search bar nền trắng viền navy/15 + breadcrumb ink-soft + stats row (1.000+/7/15+) navy. (2) Category cards SVG icons thay 4 ảnh stock người (nhân viên y tế cười / chăn nuôi / đầu bếp) — vi phạm brand rule no-stock-photo — bằng 4 SVG line-style cyan trong vòng baby blue (microscope / cattle silhouette / wheat sheaf / DNA helix). (3) Filter sidebar phân biệt: chip ACTIVE dùng bg-baby + border-cyan + ✕ cyan, option CHƯA chọn dùng checkbox vuông border-cyan KHÔNG dùng pill — phân biệt rõ trạng thái cho user. (4) Card button hierarchy: "Xem chi tiết →" thành text-link cyan (không phải button), "Báo giá" thành outline navy mini button — 1 primary action + 1 link phụ rõ ràng. (5) Compare drawer sticky bottom 96px navy gradient hiển thị khi user tick ≥1 SP — mini-card 2-3 SP đã chọn + button "Xóa hết" / "So sánh chi tiết →"; JS đầy đủ addToCompare/removeFromCompare/clearCompare/updateDrawer tích hợp checkbox card. (6) Sync số: hero "1.000+ mã" tròn, toolbar giữ "1.024 mã", category 4 lĩnh vực giữ +. (7) Label "Tìm phổ biến:" navy/70 trước 5 chip Real-time PCR / Sacace / NGS Devyser / Tách chiết DNA / ELISA — user hiểu ngay đây là quick search. (8) Sidebar 3 nhóm collapse: Lĩnh vực + Nhóm SP + Hãng mở sẵn (chevron rotate-180), Công nghệ + Chứng nhận + Tình trạng collapsed mặc định (chevron rotate-0); JS toggleFilter() handle. (9) "Xóa tất cả" consistency: link cyan nhỏ ở chip area trên + outline navy button ở sidebar dưới — 1 chỗ link 1 chỗ button rõ ràng. (10) Dropdown 24/48/96 SP/trang trong toolbar bên cạnh sort — fix UX 43 trang quá nhiều. (11) Form CTA cuối trang restructure 2 cột: trái 40% (eyebrow "Hỗ trợ chuyên môn" + H2 "Cần tư vấn sản phẩm phù hợp với phòng lab?" + sub 2 dòng + 3 contact icons Hotline/Email/Zalo OA), phải 60% (form 6 trường + button cyan). File option3/san-pham.html 1055 → 1357 dòng (+302). Giữ Be Vietnam Pro per global CLAUDE.md (không đổi sang Sora theo spec — Be Vietnam Pro 800 weight = extrabold tương đương). Header/footer KHÔNG đụng. ⚠️ Reference files Bi mention _STYLE_GENOME.md + "file 06b SHOT 1/3" không tồn tại trong repo — proceed với 11 spec explicit của Bi (đủ chi tiết). Bi review trên trình duyệt → góp ý tiếp.
09/0511:19
🎉
SP
S Talent
— Phase 1 production LIVE tại https://talent.io.vn (35% → 98%). 11 commits trong session: 9a8ab0b NaN guards 7 file + wire PB data (Survey/Profile/Home/Badges/Quests, HomeScreen tên user từ authStore + greeting động, HeroPanel SAI thật từ radar không hardcode 648, ProfileScreen load PB profiles → fallback localStorage → cache); a32e301 userStorage helper user-scoped chống profile data leak giữa accounts (`userKey()` + `clearAllUserData()`, `stalent_profile_draft_${userId}`); 62d0a8f logout button (Profile + Settings AccountSection, confirm dialog); 2c5336f empty states full Home/Quest/Career/Clan (`shared/ui/EmptyState.tsx`); a2bc35f fix "failed to create record" (signup className→grade map, friendlyPbError() dịch lỗi PB sang tiếng Việt: email trùng/password yếu/network); 07b887d Profile icons (Share navigator+clipboard / Settings → /settings / Edit pencil → modal save PB) + Help screen 8 sections (Khảo sát 12C/SAI Score/Radar 12 cánh/Quest/Career Compass/Clan/Mentor/PDF Profile) + FirstTimeGuide popup localStorage scoped; 63fdcec zero-state stats wire PB (Total XP/Coin từ authStore.model, Quest Done count completed, Streak max default 0, Home bỏ "+23 tuần này" delta giả); 39eb61c full sweep mock cleanup (TopBar red dot / Hero RankBadge "Thủy 3" / Career peers "+23 người" / Profile "Verified by Mentor" / Shop hardcoded balance=0 / Mentor mock sessions/certificates → wire `getPlustalentSessions` + `getPlustalentCertificates`); 9eddd58 Programs registration module (2 PB collections: `programs` public + `program_registrations` owner-only; routes `/programs` `/programs/:slug` `/programs/me`; form auto-fill 5 field từ authStore email readonly, dynamic field render text/tel/email/select/radio/checkbox/long-text/date, unique constraint chống trùng; helpers listPrograms/getProgram/registerProgram/getMyRegistrations/hasRegistered); b58e14f seed Glocal Citizen Podcast 10 form_fields đúng theo Google Form Bi gửi + 3 program seed (STEM Camp 2026 / English Communication 2026 / Career Workshop 2026); a357e29 BottomNav thay tab Clan → tab "Chương trình" (icon calendar ở giữa) + PWA bump version 0.1.0 → 0.2.0 force service worker auto-update. Phase 1 production: 13 PB collections (11 cũ + programs + program_registrations), 10 màn ported (Onboarding + Survey + Home + Quest + Career + Clan + Profile + Mentor + Shop + Settings + Help + Programs), no mock data leak, empty state UX full, PWA auto-update bumped 0.2.0. ⚠️ Pre-launch: chuyển hardcode admin credentials trong scripts (apply-programs-schema/seed-glocal-citizen) sang .env trước public release. ✅
09/0509:15
🚀
SP
S Talent
— US-012 Deploy FTP staging (80% → 95%). Build production PASS 8.45s — 15 files / 2MB / main chunk 339KB (gzip 101KB) + react-pdf chunk 1.46MB code-split. FTP upload 180.93.36.233:21 user stalent — 15 files PASS (index.html, sw.js, workbox, assets/, brand/, icons/, manifest.webmanifest). Commit 2e74e1b. Domain smoke test: stalent.ngoctinco.com HTTPS trả về site khác (SSL cert mismatch — hosting chưa activate). Bi cần: (1) Activate hosting panel cho stalent.ngoctinco.com → trỏ đúng webroot (2) Apply PB schema theo 04-src/scripts/pb-migrations.md tại https://datastalent.talent.io.vn/_/. Phase 1 staging sẵn sàng sau khi hosting ON. ✅
08/0519:30
🎯
SP
S Talent
— Brand identity update + Tài liệu nghiệp vụ 30 slides + PRD revised 12 stories + Mentor architecture clarified (30% → 35%). US-001 Brand identity: src/index.css primary #0BA5C7→#2586CF blue, accent #EA294A→#FFC500 vàng, thêm --cyan-light: #3EFDFD + --navy: #00437F, font Poppins thay General Sans; tailwind.config.js token đồng bộ; index.html theme-color + Google Fonts Poppins; manifest.webmanifest theme_color; public/brand/ thêm logo-black.png+logo-white.png từ Logo STalent.zip chính thức. Build PASS 2.43s, JS 200KB gzip 62KB, CSS 9KB. ⚠️ Bi cần xuất PNG icon 192/512px từ Logo STalent.ai thay placeholder PWA. Tài liệu nghiệp vụ 01-brief/STALENT-Tai-lieu-nghiep-vu.pptx 30 slides 2.25MB — A Tổng quan + B 5 tài khoản & user flow + C Sitemap & 9 màn + D Kinh doanh (Phase 1-3) + E Tech stack & Lưu ý; patch Mentor display-only sync Plustalent ở slides 5/7/10/20/23. PRD revised prd-loop/prd.json 12 user stories branch jobim/s-talent-fullbuild — US-001 done; US-002→US-012 pending: apply brand Home+Quest → Onboarding → Đăng ký → Khảo sát "công dân quốc tế" → Profile+Export PDF (Phase 1 go-live) → Career/Clan/Mentor sync display-only/Shop/Settings → PocketBase wiring → FTP deploy stalent.ngoctinco.com. Scope chặt: chỉ san-pham/S Talent/04-src/ + PROGRESS.md. Quyết định kiến trúc 08/05: (1) Brand mới blue+vàng+Poppins (2) Mentor display-only KHÔNG chat trong S Talent — chỉ sync sessions+certificates từ Plustalent (đối tác độc lập, nguồn thu Plustalent) (3) Phase 1 ưu tiên go-live: Onboarding→Survey→Profile radar→Export PDF (4) Phase 2: Quest/Career/Clan/Shop UI full lock CTA "Coming soon" (5) Khẩu ngữ TUYỆT ĐỐI không "du học" — dùng "công dân quốc tế". PocketBase admin https://datastalent.talent.io.vn/_/, FTP 180.93.36.233:21 user stalent. ✅
08/0512:13
🌏
KH
VNGG TECHNOLOGY
— Rebuild trang san-pham + đồng bộ visual 4 trang menu (75% → 80%). Bug 1: website/san-pham/index.html mất body khi refactor CSS đợt trước (file chỉ còn 429 dòng head + 3 mount div) → rebuild đầy đủ 13 section theo SITEMAP-CONTENT.md (1240 dòng): A.1 Hero Tổng đài navy + hero-tech-bg, A.2 USP 3 thẻ feature-card, A.3 grid 8 tính năng 4×2, A.4 timeline quy trình 4 bước, A.5 bảng so sánh Truyền thống vs Cloud (8 hàng), A.6 FAQ accordion 5 câu, A.7 CTA + stats; B.1 Hero CRM "Sắp Ra Mắt", B.2 Vision + mockup, B.3 6 tính năng dự kiến, B.4 form notify; Cross-sell 4 lợi ích. Bug 2: 4 trang rebuild trước (khach-hang/lien-he/blog/blog/bai-mau) visual lệch với 2 trang gốc (homepage/san-pham) → audit anti-pattern, mở rộng assets/site.css 177→363 dòng với 16 class chuẩn (.card, .feature-card, .eyebrow/.eyebrow-white, .section-h2/.section-h2-white, .hero-h1/.on-dark, .text-gradient, .gold-divider, .hero-tech-bg+@keyframes gridDrift, .hero-glow, .reveal+.is-visible, .btn-ghost-white); assets/site.js 77→122 dòng thêm IntersectionObserver auto-wire .reveal; refactor 4 trang gỡ class redefine local (khach-hang -7, lien-he -9, blog HIGH severity hero soft→navy gradient + button class chuẩn, bai-mau 3 inline button → btn-gold). Anti-pattern grep = 0. Deploy FTP 180.93.36.142 user vngg, smoke test 6/6 trang HTTP 200 (homepage 75KB / san-pham 74.6KB / khach-hang / lien-he / blog / bai-mau). Còn placeholder Bi xác nhận: 2 số liệu san-pham ("500+ doanh nghiệp" line 803 / "ROI 2.3x" line 1103), logo KH thật (8 trắng + 8 màu), hotline, Maps embed, Zalo OA, FB/LinkedIn URL, ảnh 6 blog post, newsletter endpoint. ✅
30/04tối
🔒
KH
Lisa Nội Bộ
— Phase 3 Mục 3 — Thelisa Proxy LIVE. Token Thelisa đã giấu khỏi bundle FE, đi qua PB hook proxy /api/thelisa/payroll-summary. pb_hooks/thelisa_proxy.pb.js: fix 3 bug JSVM — (1) scope: function declaration không visible trong handler → chuyển arrow function expression trong closure; (2) URLSearchParams không có trong goja runtime → build query string thủ công; (3) byte array decode ($http response body) → dùng String.fromCharCode.apply đúng cách. Auth guard ADMIN+MANAGER (KTV/Lễ tân/guest → 403), in-memory cache 60s/key, token đọc từ file pb_data/thelisa_token.txt trước (tránh shell escape ký tự đặc biệt). src/lib/thelisaApi.ts: refactor fetch direct → pb.send proxy, 3 message lỗi tiếng Việt đầy đủ (401 "Phiên đăng nhập hết hạn" / 403 "Không có quyền" / generic), token+URL Thelisa không còn trong lazy chunk. payrollService.ts: không nuốt silent 401/403 trong sync loop — throw error lên UI. PayrollPage.tsx: alert hiển thị e.message tiếng Việt thay vì generic string cứng. Bundle live đợt 2 sau hotfix: index-CGMaXTzw.js + thelisaApi-B0rrO-hg.js (1.4KB, clean). Verify toàn diện: Manager → 200 + JSON payroll ✅, KTV/Lễ tân → 403 ✅, expired token → 401 ✅. Deploy FTP thành công.
30/0409:10
🎨
KH
Việt Huy viethuynew
— Polish bản test theo feedback Bi (giữ 60%). Logo chính thức: từ JPEG Bi cấp (843×596 nền xám) — Python script process_logo.py luminance threshold 200 + edge anti-alias smoothing → nền trong suốt; auto-crop bbox 518×175 + padding 4% ngang/10% dọc cân đối → 558×209 PNG. Sinh 3 phiên bản: logo.png (navy gốc, header), logo-white.png (silhouette trắng cho footer dark), logo-navy.png (dự phòng); backup logo cũ .backup.png. §2A 3 thẻ lĩnh vực: thay 3 ảnh Unsplash → ảnh local Bi cấp assets/fields/chan-doan-y-te.jpg (lab kit + PCR machine) / thu-y-chan-nuoi.jpg (nhóm gia súc gia cầm) / an-toan-thuc-pham.jpg (food safety testing). Footer: bỏ tagline italic "Science for life". Eyebrow §2A "Lĩnh vực hoạt động": giảm tracking-[0.24em] → tracking-[0.08em] chữ khít hơn, bớt look eyebrow lỗi thời. Đóng gói lại: option3/viethuy-test.zip 5.6MB (18 entries) sync _deploy-test/ qua PowerShell Compress-Archive, sẵn sàng Bi up VPS test.
29/0412:30
🎨
KH
Việt Huy viethuynew
— Bản test option3/index-test.html chỉnh theo feedback khách & sitemap docx (40% → 60%). Clone từ option3/index.html gốc (giữ nguyên không động vào). Topbar/Header chuyển sáng: bg-baby-100 + bg-white, logo assets/logo.png xanh gốc thay logo trắng. Hero — 3 sphere overlap "UY TÍN/CHẤT LƯỢNG/HIỆU QUẢ" (Venn-style, radial cyan→navy, glow, container 240×210, overlap nhẹ ~10px) thay badge "Science for Life". §2A 7-icon → 3 thẻ lĩnh vực 420×460px (Chẩn đoán Y tế / Thú y & CN / ATTP) ảnh Unsplash + hover zoom 8% + reveal "Xem giải pháp" + chữ tên hiệu ứng gradient text shimmer. Đảo §2B (marquee đối tác) ↑ trước §2A, bỏ "Xem tất cả đối tác". Xoá hoàn toàn §2C/§3A/§3B/§4A/§4B (~267 dòng) + thêm JS guards cho DOM elements deleted. §5B Khách hàng: tiêu đề căn giữa + chuyển grid 8 ô → marquee infinite (giống §2B), nhân đôi data, bỏ "Xem tất cả". §6A — 4 pin đỏ map-pin gắn trực tiếp lên bản đồ: bỏ list 4 VP bên phải, chấm cyan → 4 pin đỏ SVG (path location-pin fill #ef4444, lõi tròn trắng), mỗi marker icon + label gắn tại đúng vị trí (Hà Nội 13%/24%, Đà Nẵng 50%/28%, TP.HCM 73%/34%, Cần Thơ 80%/26%); animation 2 vòng pulse đỏ delay 0.55s + bob 3px nhịp thở; label glassmorphism navy 55% blur; prefers-reduced-motion support. Form §6A đổi tiêu đề "THÔNG TIN LIÊN HỆ" + mô tả mới. Header/Footer menu theo sitemap docx (option3/Thong tin bo sung hoan thien Website_VH.docx): desktop 8 mục (Trang chủ · Giới thiệu▾ · Giải pháp/SP▾ · Kiến thức Y sinh▾ · Tài liệu▾ · Tin tức▾ · Tuyển dụng · Liên hệ) — 5 dropdown đầy đủ submenu; mobile <details> accordion + scroll max-h-[80vh]. Footer 5 cột restructure (Logo+VP / Giới thiệu / Giải pháp+Kiến thức / Tài liệu+Tin tức+Khác / Bản quyền), tách hotline cột 1 thành "CSKH 0286 287 1596" + "Hỗ trợ kỹ thuật 0286 287 1597 (placeholder)". Floating: thêm Facebook (#1877F2) + LinkedIn (#0A66C2) — cụm 4 nút (FB → LinkedIn → Zalo → Tư vấn). Đóng gói deploy: option3/_deploy-test/ + option3/viethuy-test.zip (4.86 MB) chứa index.html (rename từ test) + 4 file root + assets/{logo, logo-white, vietnam-map, customers/*7 logo} sẵn upload VPS giải nén chạy ngay. Còn placeholder: SĐT KT, link FB/LinkedIn thật, logo nihbt.png ✅
28/04JOBIM
🎧
KH
Lisa Nội Bộ
— JOBIM batch 7 task deployed. Orchestrator chạy 5 Builder Sonnet song song xử lý ALL_PENDING_NON_BANGLUONG.md. BUG-032 Admin/Thu Ngân mở thủ công KTV bị ĐÓNG hoạt động trong MỌI trường hợp (về sớm/OFF/lỗi/meal break) — tạo marker manual_reopen trong session_closures, getDailySessionBoard check isForceOpened bypass tất cả auto-close (tardiness/not_checked_in/meal_break/off), reopen tự động end active meal break + cancel registered. BUG-034 sửa logic earlyTardinessCovered bỏ so sánh checkout_time <= approved_time sai (chỉ cần đơn approved là miễn) — fix 2 chỗ trong attendanceService.ts (checkOut + manualEditAttendance); ExemptModal phân biệt rõ "Phạt tuân thủ — Đi trễ" vs "Phạt tuân thủ — Về sớm" với 2 checkbox độc lập, ngày, số tiền, màu nền cam/xanh. BUG-035 SessionRow main board hiện 🍚 NGHỈ ĂN + countdown + giờ kết thúc thay vì "ĐÓNG" trống (nền hồng), tag amber "Xong lượt ăn" cho KTV đang phục vụ + đăng ký nghỉ ăn. FEA-009 Phạt vệ sinh: collection hygiene_check_results mới (immutable result/penalty, mutable exemption fields) chạy migration thành công, service hygieneCheckService.ts với checkHygieneTask/exemptHygieneCheck/realtime subscribe, component HygieneCheckPanel nút "Đạt"/"Không Đạt" + form miễn phạt với check quyền theo ngày, cron hygiene-auto-check-cron.mjs auto-fail tasks chưa kiểm tra/chưa xong lúc 15:00, payroll dòng (12) thêm hygienePenaltyTotal aggregate vào penaltyTotal với UI expand "└ Phạt vệ sinh: XXXđ" realtime; quyền: cashier miễn chỉ hôm nay, admin miễn mọi lúc. IMP-024 phát hiện code multi-cashier (N records cùng tour_id) đã có sẵn từ refactor 25/04 — chỉ thêm prop addLabel theo team ("Thu Ngân"/"thợ Gội"/"KTV") trên TourRow + ManualScheduleEditor. IMP-025 Tab Nhanh popup KTV trống mở rộng computeSlotKtvs nhận expectedKtvs param (KTVs có ca chưa check-in), parseTardyInfo+computeExpectedWindow handle late/early/off/default, append isOff+tardyInfo vào MatrixKtvColumn, UI thêm section "DỰ KIẾN CÓ CA" 🔵 với cửa sổ "Dự kiến HH:MM–HH:MM" — đơn trễ/sớm/OFF tính ngay cả khi pending. IMP-026 rotation 3 chỗ (ScheduleRow/RotationPage/RosterManager) đổi từ userName.split(' ').pop() last-word → nickname || fullName (full name fallback đúng). 5 commits riêng, build pass 1m 10s, FTP deploy 183 files, migration PB collection chạy thành công. TODO Sếp: SSH VPS thêm crontab 0 15 * * * node /home/pocketbase/scripts/hygiene-auto-check-cron.mjs. Build TS clean (chỉ pre-existing errors trong authStore/phraseService/ProfilePage không liên quan).
28/0411:46
📦
SP
S Talent
— REFACTOR feature-based architecture (25% → 30%). Bi yêu cầu: "phân tích gọn mỗi tính năng vào 1 thư mục độc lập để về sau dễ phát triển và mở rộng". Tách src/components/screens/ + src/components/shared/ → src/features/ (8 folder độc lập: home / quest / profile / career / clan / mentor / shop / settings — mỗi cái có index.ts barrel) + src/shared/ (ui: Card/Chip/Icon/StickerButton/primitives/PlaceholderScreen + layout: BottomNav/AppShell). HomeScreen 405 dòng → 53 dòng compose 4 component con: HeroPanel (SAI Score 648/1000 + radar 12 trục), StreakStrip (5 ngày), QuestPreview (3 nhiệm vụ hôm nay), CareerPreview (Digital Marketing Strategist roadmap). Mock data tách features/home/data/mock.ts (SKILLS/RADAR/DAYS/QUESTS), radar geometry helpers tách features/home/utils/radar.ts (buildRadarPoints/buildAxisPoints/buildRingPoints). App.tsx rút còn 9 dòng (chỉ wrap AppShell + AppRoutes), routes.tsx tách riêng 8 routes. Quy ước: features/X không cross-import features/Y, dùng relative imports (không cần config alias). tsc --noEmit clean, dev server OK localhost:5174. Folder components/ cũ đã xóa hoàn toàn. Lợi ích: thêm tính năng mới = tạo 1 folder + 1 route → xong; nhiều dev làm song song ít conflict git; dễ thay mock data → API call cùng chỗ ✅
13/0509:01
🟢
KH
Hara App
— BUG-003 fix + UX progress bar AI analyze deployed ✅. services.ts: AbortController 30s cho callKimi, Promise.race 30s cho callGemini, retry loop bắt timeout/network error, message lỗi rõ hơn. MoodTracker.tsx: progress card animated 5 phase (🌌→🧘→💭→✍️→🌿) rotate theo %, curve 0-60%/8s, hold 90% chờ AI, jump 100% khi xong. Deploy v1.3.260513-0855 (bundleHash ClCLhdbk), 21 files FTP app.haragroup.vn. ✅
06/0521:32
🏦
KH
Hara App
— [9/9] IMP-008 Đổi TK thanh toán Techcombank → ACB 🎉 JOBIM Batch [1-9]/9 HOÀN TẤT: Modal thanh toán khóa học (CourseDetail.tsx:422-444) đổi ngân hàng TECHCOMBANK → ACB, số TK 4141131131 → 491386, URL VietQR TCB-...compact2.png → ACB-491386-compact2.png (auto sinh QR mới với amount + nội dung CK đúng định danh học viên), chủ TK LÊ THỊ MỸ HUỆ giữ nguyên. Comment code cập nhật tương ứng. Grep toàn project sau fix: 0 occurrence Techcombank/4141131131. Build pass 5.64s, bundle index-DCbka-47.js 74KB, version 1.3.260506-2132, FTP deploy 21 files. ✅
06/0521:27
📚
KH
Hara App
— [8/9] IMP-007 Đổi "Giảng viên" → "Người dẫn đường": Text update đơn giản trên trang khóa học. Audit toàn app: chỉ 1 occurrence "Giảng viên" tại app/CourseDetail.tsx:308 — fix 1 dòng từ • Giảng viên: Hara Team → • Người dẫn đường: Hara Team. Không có schema field DB cho instructor (hardcoded "Hara Team"). Build pass, bundle index-CFd395Tq.js, version 1.3.260506-2124, FTP deploy 21 files lên app.haragroup.vn, smoke test HTTP 200 + version match. ✅
06/0521:17
🌳
KH
Hara App
— [7/9] IMP-006 Khu vườn tâm trí: Feature redesign thay HOÀN TOÀN biểu đồ Recharts LineChart bằng visual "Khu vườn tâm trí" 5 scene SVG inline. Component mới MindGarden.tsx (150 dòng) — props {moodScore: 1-5}, SVG viewBox="0 0 400 300". 5 scene: 🚨 cây trụi + đất nứt + mây xám trôi 12s / 💜 cây ít lá vàng + 1-2 lá rơi 6s / 🌱 chồi non grow-in 800ms / 🕊️ cây xum xuê đung đưa ±2deg 4s + nắng / 🌸 hoa rực rỡ + 2 bướm bay 4-6s + cầu vồng. CSS keyframes inline + prefers-reduced-motion. Sửa MoodTracker.tsx gỡ recharts + xóa LineChart, thay grid 14 ô lịch sử emoji + ngày. Gỡ dep recharts khỏi package.json (npm uninstall 36 packages) + vite.config.ts bỏ vendor-recharts entry. Bonus: vendor-recharts 372KB BIẾN MẤT → tiết kiệm 372KB tải về. Bundle index-OwL5EO0P.js, version 1.3.260506-2117, FTP deploy. ✅
06/0521:11
🫸
KH
Hara App
— [6/9] IMP-005 Sửa Safety Banner: SafetyBanner.tsx 1 file, 3 chỗ (3 variant inline/modal/sticky-top dùng chung component). Đổi text 1 dòng cũ → 2 dòng tách biệt: "Bạn không một mình đâu🪷" + "Hãy gọi ngay nếu cần hỗ trợ👇". CSS thay <h2>/<h3>/<p> đơn → <div className="space-y-1"> chứa 2 <p> riêng. Giữ nguyên nút hotline + Đường dây 24/7 + Ban Cố Vấn. Build pass 9.46s, bundle index-BpUBdKNL.js, version 1.3.260506-2111, FTP deploy 22 files. ✅
06/0521:08
🌈
KH
Hara App
— [4/9] IMP-003 Thay icon Mood Tracker: constants.ts:53-54 đổi 2 mức cảm xúc đầu: "Cần sẻ chia" 🌧️ → 🚨 (cảnh báo/đèn báo động) giữ #EF4444 đỏ; "Chông chênh" ☁️ → 💜 (purple heart) đổi #F97316 → #8B5CF6 tím. Giữ nguyên 3 mức còn lại (Bình ổn 🌱 / An vui 🕊️ / Hạnh phúc 🌸). Build pass 16.10s, giữ 16 chunks code-split từ [5/9] (main 74KB), bundle index-B2CYPt_S.js, version 1.3.260506-2108, FTP deploy 22 files, smoke test HTTP 200 + version match. ✅
06/0521:05
⚡
KH
Hara App
— [5/9] IMP-004 Tốc độ app — Performance optimization toàn diện: App chậm ở mọi giao diện. Lighthouse Desktop = 91/100 (vượt mục tiêu 80). FCP/LCP 1.0s, TBT 0ms, CLS 0. Main bundle 1397KB → 74KB (-94.7%), 1 chunk → 16 chunks. 4 files: (1) App.tsx lazy load 5 view nặng (AdminDashboard/MoodTracker/Mailbox/CourseDetail/Courses) bằng React.lazy() + Suspense (2) vite.config.ts manualChunks 6 vendor: vendor-react 163KB / vendor-recharts 372KB / vendor-tiptap 330KB / vendor-ai 257KB / vendor-pocketbase 34KB / vendor-dnd 44KB (3) index.html bỏ font weight 600 + dns-prefetch PocketBase (4) services.ts dynamic import @google/genai chỉ load khi gọi Gemini fallback + cache courses 5 phút + knowledge_base 10 phút. Lazy chunks: AdminDashboard 77KB / MoodTracker 15KB / CourseDetail 13KB / Mailbox 7KB / Courses 5KB. Bundle index-i2m-wm-5.js, version 1.3.260506-2103, FTP deploy 10 files. ⚠️ Cache invalidation: gọi courseService.invalidateCache() sau khi admin update. ✅
06/0520:57
🎯
KH
Hara App
— [3/9] IMP-002 Canh giữa slogan: Slogan "Văn hóa • Tỉnh thức • Kết nối" dưới logo trên màn hình Splash bị xuống dòng + lệch trái trên mobile hẹp (≤ 360px). Root cause: text-xl (20px) + tracking-widest (0.1em) cho 30 ký tự uppercase → tổng width vượt viewport iPhone SE → tự wrap. Fix CSS 1 dòng Splash.tsx:30: đổi h1 từ text-xl tracking-widest sang text-sm sm:text-xl tracking-[0.15em] sm:tracking-widest text-center whitespace-nowrap, wrapper thêm w-full px-4. Mobile (< 640px) dùng text-sm + tracking nhẹ → vừa 1 dòng; desktop ≥ 640px giữ nguyên text-xl + tracking-widest. whitespace-nowrap ép 1 dòng tuyệt đối. Build pass 12.96s, bundle index-DeSB7oou.js 1397KB / gzip 389KB, version 1.3.260506-2057, FTP deploy 10 files, smoke test HTTP 200 + version match. ✅
06/0520:50
🤖
KH
Hara App
— [2/9] BUG-001 Mood Tracker → Kimi AI: Gemini key cũ AIzaSyDv79... bị Google suspend (CONSUMER_SUSPENDED 403) → Bi quyết chuyển Kimi AI (Moonshot Global) thay vì xin key mới, GIỮ Gemini làm fallback. Refactor multi-provider AI: services.ts thêm AiProvider = 'kimi' | 'gemini', hàm callKimi() OpenAI-compat POST https://api.moonshot.ai/v1/chat/completions (model kimi-k2.5, response_format json_object, KHÔNG truyền temperature vì k2.5 chỉ chấp nhận default=1), callGemini() giữ SDK @google/genai, callAi() dispatcher tự động fallback (primary lỗi → thử fallback). analyzeMoods refactor dùng callAi(prompt, {json:true}), GIỮ NGUYÊN: cache 5 phút theo latestLog.id, prefilter checkSafety() 14 keywords SOS, retry/backoff 1s/2s/4s. systemService mở rộng: ai_provider, kimi_api_key, kimi_model, kimi_base_url, gemini_model; giữ alias getApiKey/setApiKey. Admin UI mới: AiConfigModal.tsx 145 dòng — 2 tab Kimi/Gemini, radio chọn primary, dropdown model, input key + Base URL, nút "Test kết nối" verify HTTP 200. Bi cấp key sk-Q2Pa...tId đã upsert PB production qua script save-kimi-key.mjs. Build pass, FTP deploy 10 files app.haragroup.vn, bundle mới index-gRN8QdpX.js. Verify Kimi API HTTP 200 với key thật. ✅
06/0520:35
🛡️
KH
Hara App
— Hotfix [1/9] Admin trắng: Admin click vào Tháp Điều Khiển bị blank page. Root cause: useEffect line 149 AdminDashboard.tsx để loadAllOrders (useCallback) trong deps array → mỗi lần setAllOrders re-render thì reference mới → loop vô tận → React treo trắng. Fix 3 files: (1) AdminDashboard.tsx xóa loadAllOrders khỏi deps + bọc loadData() 3 try/catch độc lập + null-guard lesson.video_file?.split (2) components/ErrorBoundary.tsx mới — class component bắt runtime error, UI tiếng Việt, nút "Tải lại", details DEV mode (3) App.tsx bọc <AdminDashboard /> bằng <ErrorBoundary fallbackTitle="Lỗi tải Tháp Điều Khiển">. Build pass, FTP deploy 10 files lên app.haragroup.vn, bundle mới index-hDqzkdKc.js. Lần sau có lỗi sẽ hiện error UI có nút Tải lại thay vì trắng. ✅
28/04lượt 2
🛠
KH
App Plustalent
— FIX-ADMIN-PDP-ACTION-PLANS-JSON (hotfix): Section "Kế hoạch hành động" trong admin PDP detail dump JSON thô. Root cause: Builder lượt 1 chỉ handle goals/swot/personal_info/expectations/review_12months, field action_plans rơi vào fallback JSON.stringify. Fix PlanContentRenderer.tsx: thêm ActionPlansSection (card per goal + mini-cards per item với status badge / deadline / detail_target / expected_result / support_needed), RoadmapSection (monthly_actions grouped by goal), refactor GenericFieldRenderer XOÁ HOÀN TOÀN JSON.stringify — array-of-object thành mini-cards, array-of-primitive bullet list, object key-value rows. Build pass, FTP deploy 11 files OK (bundle index-Ci1qCxyq.js) ✅
28/04lượt 1
🔎
KH
App Plustalent
— FEAT-ADMIN-PDP-DETAIL-VIEWER: Sếp Bi feedback admin chỉ thấy mentor đã xem PDP hay chưa, không xem được nội dung 6 phiên check-in. Mở rộng modal chi tiết cặp Mentor-Mentee. Tab "Nhật ký 6 phiên": cross-reference "Mentor đã giao từ Phiên N-1", badge tháng, đầy đủ achievements/next_actions/extra_notes, thumbnail ảnh bằng chứng + lightbox full-screen z-[60], footer timestamp updated. Tab "Kế hoạch PDP": PlanContentRenderer thay Object.entries generic — goals array render thành card có badge KPI + tên sách + aspect/deadline. Files mới: CheckinCard.tsx, PlanContentRenderer.tsx. Build pass 14.49s, deploy FTP production ✅
24/0416:21
📞
KH
Hara App
— IMP-001 Hotline format (Sprint 5d): Sửa số điện thoại hiển thị trên SafetyBanner trong Mood Tracker và prompt SOS của Gemini. SafetyBanner.HOTLINE_DISPLAY: 093.115.6213 → 0931.156.213. services.ts:1054 Gemini crisis instruction cũng update. tel:0931156213 giữ nguyên (đã đúng). Build PASS 8.52s, deploy bundle index-DDNxYKm_.js, version 1.3.260424-1621.
24/0415:35
🛡️
KH
Hara App
— BUG-029 màn hình trắng + PWA Resilience layer (Sprint 5c, 96% → 97%). Khách chị Huệ Chrome Android báo trang load xong nhưng body trống. Diagnose: server OK toàn diện (HTML 200/4917B, bundle 968KB, PB data.haragroup.vn/api/health healthy, SSL 15/07/2026, DNS 180.93.36.231, sw.js precache đúng). Root cause = (1) Service Worker stale trên máy khách + (2) icon PWA 1×1 PNG placeholder làm Chrome không fire beforeinstallprompt → Bi xài Samsung bấm nút cài đặt rơi xuống manual modal. Fix gói 3 deploy: (a) version.json sinh tự động lúc build via Vite plugin custom (versionJsonPlugin closeBundle hook), (b) useVersionCheck() poll /version.json?t=ts mỗi 60s phát hiện deploy mới, (c) PWAUpdateBanner rewrite tri-state idle/available/updating + progress bar 4 bước (10% clear Cache Storage → 40% unregister SW → 70% dọn workbox-* IndexedDB GIỮ hara-offline-queue để không mất mood logs chưa sync → 100% hard reload ?v=ts), gradient teal sticky bottom-right, (d) Profile screen hiện Phiên bản: 1.3.260424-1621 + nút "Kiểm tra cập nhật" manual, (e) kill-switch inline 8s trong index.html (setTimeout check __haraReactMounted + #root.children.length → auto unregister SW + clear caches + reload ?recover=ts) chống màn hình trắng tương lai, (f) script Python _hub/scripts/gen-hara-icons.py tạo icon 192/512/maskable RGBA gradient teal #008B8B→#0A6965 + chữ "H" deep teal trong vòng tròn trắng, (g) xóa dead code <link rel=stylesheet href=/index.css> (404) + <script type=importmap> (Vite đã bundle hết). 2 lần build/deploy: bundle index-B3Mu68c7.js rồi rebuild với tooltip Auth fix.
24/0414:30
🔧
KH
Hara App
— Hotfix: Nút cài đặt app trên Samsung. Bi báo Samsung không thấy nút "Cài đặt ứng dụng" trên màn hình đăng nhập. Root cause: logic chỉ render khi canInstall||isIos, nhưng beforeinstallprompt không fire trên Samsung Internet (cần engagement) → nút ẩn vĩnh viễn. Fix: refactor utils/usePWAInstall.ts thêm isStandalone (matchMedia + iOS standalone detect), isAndroid, isSamsungInternet (UA /SamsungBrowser/i), canPrompt. install() mới trả {kind: 'prompted'|'manual'|'installed'} — không có promptEvent thì mở manual modal. Tạo components/InstallInstructionsModal.tsx 3 tab tiếng Việt: "Bấm ⋮ → Cài đặt ứng dụng" (Chrome) / "Bấm ☰ → Thêm trang vào → Màn hình chờ" (Samsung) / "Nút Chia sẻ ⬆️ → Thêm vào MH chính" (Safari) — auto chọn tab theo UA. Auth.tsx: condition đổi canInstall||isIos → !isStandalone (luôn hiện trừ khi đã cài), text động "1 chạm"/"Hướng dẫn" theo browser. Build PASS 9.22s, bundle index-Dj4Zo8yR.js (+1.5 KB gzip), deploy 8 files.
24/0414:18
📱
KH
Hara App
— Sprint 5 Audit trail + Admin Mobile Order Approval (95% → 96%). E2E test 10/10 PASS qua PB API: login → list course → enroll → free auto-active / paid pending → admin duyệt → unlock → progress đều thông. DB clean: 0 đơn pending treo, 2 KH HEALING active đang chờ Bi up content (course `healing-cam-xuc` 0 topic 0 lesson). Audit trail (D): PB schema `enrollments` thêm 2 field approved_by (relation users) + approved_at (date) qua admin API PATCH. approveEnrollment/rejectEnrollment ghi actorId = pb.authStore.model?.id + ISO timestamp — tránh tranh chấp duyệt đơn. Admin Mobile Order Approval (E): components/OrderApprovalSheet.tsx 136 dòng — bottom sheet slide-up branded mint+green, hiển thị course+học viên+SĐT+QR code copy+số tiền, 2 nút "Từ chối" (red, 2-step confirm in-sheet) + "Duyệt & Kích hoạt" (brand-green), thay hoàn toàn window.confirm() xấu trên mobile. AdminDashboard.tsx orders view: filter row (status: tất cả/pending/active/expired · period: 7d/30d/all · search SĐT), badge đỏ pending count trên nav button, card layout mobile-first (status pill amber/green/gray + course + student + amount + transaction code copy + 1 nút "Mở để duyệt"), hiển thị "✓ Duyệt bởi [tên admin] · [time]" cho đơn đã xử, sort pending oldest first → others newest. getEnrollmentsForAdmin({status, days, search}) mới với expand user_id,course_id,approved_by. Build PASS 8.49s, deploy bundle index-DfZWAumT.js.
24/0413:54
📝
KH
Hara App
— Sprint 4 Polish (92% → 95% LIVE). Course/Payment hoàn thiện: nút "Copy nội dung chuyển khoản" với 2s feedback (giảm sai nội dung CK), onEnded video → mark is_completed=true, progress bar thực (query learning_progress per course thay w-[30%] hardcoded), badge "Miễn phí" cho course price=0 trên cả thumbnail + hero, free course auto-active status='active' không cần admin duyệt (transaction_code FREE-{uid}-{ts}), rejectEnrollment đổi .delete() → PATCH status='expired' giữ audit trail. PWA install button trên trang Đăng nhập: refactor utils/usePWAInstall.ts shared hook (singleton capture beforeinstallprompt + iOS detect + EventTarget cho multi-component subscribe), nút "Cài đặt ứng dụng Hara trên máy · Dùng offline · Nhanh hơn" trên Auth.tsx (chỉ hiện khi canInstall||isIos), PWAInstaller.tsx tiêu thụ hook chung. Tài liệu nghiệp vụ BUSINESS-FLOWS.md 10 mục Mermaid: roles+quyền, đăng ký+đăng nhập+PWA install, khóa học (browse→enroll→consume), thanh toán VietQR Techcombank 4141131131, mood+safety filter+hotline 093.115.6213, mailbox SOS, PWA offline IndexedDB queue, ma trận 11 PB collection, lỗ hổng nghiệp vụ (chưa có collection transactions riêng, admin chưa nhận email notify, course HEALING thiếu content). Build PASS 7.73s, FTP deploy 8 files (bundle index-B36dsoWZ.js), HTTPS 200 ✅.
24/0413:36
🚀
KH
Hara App
— LIVE app.haragroup.vn ✅ (50% → 92%). Sprint 1 — Safety: checkSafety() mở rộng 14 từ khóa nguy hiểm (chết, tự sát, tự tử, không muốn sống, suicide, kill myself…), wired pre-filter chạy TRƯỚC Gemini trong analyzeMoods, force is_serious=true + push thread Mailbox priority. SafetyBanner.tsx (144 dòng, 3 variants modal/sticky-top/inline) hiển thị hotline 093.115.6213 + Cấp Cứu 115 + 1800 599 920. AdminDashboard view 'sos_alerts': bảng 8 cột + 3 stats card lọc thread priority=urgent & mood log safety_flagged. Sprint 2 — PWA: vite-plugin-pwa manifest (theme #008B8B, Vietnamese), Workbox 6 cache strategy, IndexedDB offline queue cho mood_logs sync khi online, PWAInstaller (beforeinstallprompt 30-day dismiss) + iOS modal + UpdateBanner skipWaiting. Sprint 3 — Deploy: build PASS 7.72s, FTP deploy 8 files (DELE-before-STOR vì file owner uid 1005), https://app.haragroup.vn trả 200, manifest+SW+theme-color all live. DB cleanup: xóa course HEALING duplicate (giữ b6ltodqb3dizjuj có 2 enrollment), slug healing-cam-xuc, UNIQUE INDEX trên courses.slug, xóa 3 SOS test thread. Còn block full launch: content course HEALING (2 KH trả tiền chờ Bi cấp), icon PWA chuẩn brand (Designer), code-split bundle 952 KB.
24/0407:57
🎬
KH
Việt Huy viethuynew
— §3A Hover preview — giải pháp cuối: Sau nhiều vòng fix lỗi YouTube 153 (video không cho phép nhúng, dù đã đổi video ID, thêm onError detection, fallback timer) vẫn lỗi chớp → bỏ YouTube embed hoàn toàn, thay bằng CSS-only hover effect: ảnh zoom 8% (900ms cubic-bezier) + gradient navy overlay đáy + play icon cyan tròn 56px fade-in scale 0.85→1. Xoá ~130 dòng JS, 0 khả năng lỗi. §3B products carousel đã chuyển infinite loop x3.
24/0407:35
📄
KH
Việt Huy viethuynew
— PowerPoint thuyết trình website: Tạo file present/VietHuy-Website-Presentation.pptx (21 MB, 7 slides 16:9 TELOS-inspired): Cover · BIG IDEA · Hiểu hơn · Phong cách+Màu · Typography+Quote+Mockup · Tính năng · Thank You. BIG IDEA "TRỌN GIẢI PHÁP · CHUẨN KHOA HỌC · VỮNG NIỀM TIN" nổi bật 16pt cyan 2 dòng. Logo logoviethuy.png/logovhtrang.png chuẩn tỉ lệ 2.77:1 (677×244). Watermark SCIENCE baby blue brand #DCEAF6. Body 10-11pt. Tiếng Việt UTF-8 đầy đủ. Script create_presentation.js 1058 dòng pptxgenjs.
22/0422:05
🚨
KH
Lisa Nội Bộ
— HOTFIX BUG-028: Bảng "Lượt Phục Vụ" chết sau deploy FEA-008 tại Lisa PREMIUM Q.1 Bến Thành. Root cause 3 tầng: (1) script migration FEA-008 dùng key schema: cũ → PB 0.23 bỏ qua → collection meal_breaks chỉ có id; (2) frontend query sort: 'created' → 400; (3) IIFE trong sessionService.ts return somePromise không await → rejection thoát khỏi try/catch → kéo sập Promise.all. Fix 3 phát: HOTFIX-SCHEMA (patch 12 field) → HOTFIX-SCHEMA-V2 (thêm created/updated autodate) → FIX-SESSION-RESILIENCE (frontend rebuild đúng await). Bảng đã hoạt động lại.
22/0422:00
💰
KH
Lisa Nội Bộ
— Kim Ngân 857k fix: Sửa thủ công phiếu lương Nguyễn Ngọc Kim Ngân tháng 4 — compliance_penalty_days 0→3, net_total 7.676.285→6.819.143. Commit e3e411d, deployed FTP.
22/0421:00
🍽
KH
Lisa Nội Bộ
— FEA-008 Nghỉ Ăn 20 Phút: Collection meal_breaks, đồng hồ đếm ngược 20p, giới hạn 2 lần/ca, tích hợp Ma Trận (block màu) + Lượt Phục Vụ (tự đóng nhận lượt). Commit 34c0418, deployed FTP.
21/0412:00
👥
KH
App Plustalent
— FEAT-ADMIN-MANUAL-PAIR: Admin ghép cặp mentor-mentee thủ công ngay trong trang "Theo dõi PDP". Files mới: UserCombobox.tsx + ManualPairModal.tsx. Idempotent (update nếu đã có), auto-backfill plans.mentor. Build OK, deploy FTP production ✅
21/0411:00
📊
KH
App Plustalent
— AUDIT-PDP-PAIRS-ALL: Audit toàn bộ 74 cặp mentor-mentee. Kết quả: 13 PASS (active), 0 STUCK, 61 BLOCKED (chưa ghép — bình thường), 0 INCONSISTENT. Dữ liệu sạch. Script: backend/audit-pdp-pairs-all.ts
21/0410:00
🔧
KH
App Plustalent
— FIX-PDP-EDIT-APPROVE-UEF: Mentor không thấy nút "Duyệt yêu cầu" chỉnh sửa PDP cho Trí Nhân. Root cause: mentee dùng flow cũ PDPUnlockRequest → edit_status="" rỗng → PDPEditReview không render nút. Fix: data migration set edit_status="requested" cho plan 8u5jnttkgh7ydbj v47 + backfill 1 plan sót. Không cần deploy FE. Scripts: debug/fix/verify 3 files.
21/0409:00
🔍
KH
App Plustalent
— CHECK-MENTOR-MULTI-MENTEE (điều tra): Xác nhận hệ thống cho phép 1 mentor nhiều mentee. Schema không có unique constraint trên matched_mentor/mentor/plans.mentor. Thực tế Mentor Vy có 3 mentee 1:1. Script: backend/check-mentor-multi.ts
20/0423:30
🔢
KH
App Plustalent
— FIX-QUYEN-CHECKIN-ROOTCAUSE: Root cause cuối cùng của bug check-in phiên PDP — PB schema field month trong program_session_checkins bị khóa max=3 (thiết kế cho 3 tháng), calendar month 4 > 3 → PB silent reject 400 — ảnh hưởng toàn bộ user từ tháng 4/2026. Fix: patch month.max = 12 qua Admin API + set plans.mentor Quyên = Hồ Linh + bump SW cache v2→v3. Migrate PB + deploy FTP. Commit 6db05c5
20/0423:00
🔑
KH
App Plustalent
— FIX-ADMIN-RESET-PASSWORD: Admin không reset được mật khẩu user khác (PB 404). Root cause: fix-api-rules.ts:40 set users.updateRule = 'id = @request.auth.id' → chặn admin. Fix: nới rule thêm || @request.auth.role = "ADMIN" cho cả updateRule + deleteRule. Script mới: backend/fix-users-admin-update.ts. Migrate PB production, không deploy frontend. Commit f48ef3d
20/0412:00
💳
KH
Lisa Nội Bộ
— Thelisa Payroll Sync: đồng bộ phiếu lương từ Thelisa POS (hoa hồng + TV + tips + tạm ứng) — nút Đồng bộ + auto-poll 5 phút + modal đối soát + popup chi tiết tạm ứng (ngày/số tiền/lý do). Deploy FTP. Phase proxy ẩn token (pb_hooks) đã code nhưng HOÃN theo yêu cầu Sếp — kế hoạch lưu tại docs/THELISA_PROXY_PLAN.md.
20/0411:30
🐞
KH
Lisa Nội Bộ
— BUG-024: Tab Nhanh Ma Trận không cuộn xuống 17h-24h (regression). Root cause: flex-1 trong parent không flex → layout collapse. Fix: đổi sang h-full khớp pattern Tab Chi tiết. Deploy FTP.
20/0411:00
✅
KH
Lisa Nội Bộ
— FEA-007 Duyệt miễn chấm công: approval workflow cho trường hợp đặc biệt không cần chấm công, trang duyệt cho ADMIN/MANAGER. Deploy FTP.
20/0422:00
🔊
KH
App Plustalent
— FIX-SW-CACHE-BUST: Bug 3 (reload mất data) tái diễn sau 2 vòng fix vì Service Worker cache-first serve JS/CSS cũ. Root cause: user stuck ở build trước khi fix. Fix: bump CACHE_NAME v1→v2 trong public/sw.js, build + deploy FTP. Verify app.plustalent.org/sw.js = v2 + version.json = mo6pp816. User sẽ thấy banner cam "Phiên bản mới đã sẵn sàng" trong 60s → click Cập nhật → nhận đủ 3 fixes.
20/0420:00
🎁
KH
App Plustalent
— FEAT-SUPPORT: Tính năng hỗ trợ người dùng — 2 collections (support_tickets + replies), form submit + upload ảnh 10MB×5, admin table + stat cards + filter + reply + notification realtime. 10 files mới, commit 6619b80, migrate PB + deploy FTP
20/0414:00
🔧
KH
App Plustalent
— FIX-PDP-SESSION-SUBMIT: Mentee bấm "Hoàn tất Phiên" báo lỗi "Thiếu thông tin chương trình hoặc mentor" (widespread). Fix: resolve programId+mentorId từ program_members trong usePDPState, bỏ guard !programId trong usePDPDiary, cập nhật PB rule updateRule cho mentor. Deploy FTP
20/0410:00
🔧
KH
App Plustalent
— FIX-PDP-MENTOR-VIEW: Mentor không xem được PDP mentee qua chương trình UEF/Career. Fix R1+R2: program_members query, grouped dropdown optgroup, siết PB rules 7 collections (subquery matched_mentor), skeleton/empty state/unauthorized guard. Deploy FTP
19/0416:00
📝
KH
App Plustalent
— FEAT-PDP-EDIT: mentee yêu cầu sửa PDP → mentor duyệt → max 2 lần/CT, admin override không tính quota, `plan_versions` snapshot, commit dfbbe3e, migrate PB + deploy FTP
16/0414:30
🌐
KH
Lisa Nội Bộ
— IMP-018 Form đặt lịch 6 ngôn ngữ: /book/vn + /book/en, chuyển KR/ZH/JA/TH, admin quản lý tên EN, embed iframe — deployed
16/0406:00
🔧
KH
Lisa Nội Bộ
— BUG-018 + IMP-014/016/017: Fix booking không hiện Ma Trận + Redesign Tab Nhanh + DV chọn CN+giá + Gộp form đặt lịch — deployed
15/0418:00
💰
KH
Lisa Nội Bộ
— FEA-006 Bảng Lương: phiếu lương realtime + biệt danh + đồng bộ chấm công + chat admin↔NV — deployed
15/0417:00
🔧
KH
Lisa Nội Bộ
— BUG-015/016: Fix phạt tuân thủ logic sai + migration 137 records + IMP-010→014 (Ma Trận snap-grid, ẩn KTV, OT modal, timeline bar)
14/04
🚀
KH
Lisa Nội Bộ
— Sprint 14/04: Góp ý ẩn danh refactor + BUG-013/014/015 + Tab Grid dịch vụ — deployed
09/04
🚀
KH
Lisa Nội Bộ
— 10 Prompt Batch: BUG-010/011/012 + IMP-005→010 + FEA-005 Danh sách booking — deployed
08/04
🚀
KH
Lisa Nội Bộ
— FEA-002 Ma Trận Lịch Hẹn: 6 phases (Nền tảng + Booking + Nhóm + Auto-fill + Thanh toán + Cảnh báo) — deployed
05/04
🔧
KH
Lisa Nội Bộ
— FEA-001/003/004: Thu Ngân xếp ca + Salary fields + CCCD upload + BUG-005/006 fix — deployed
01/0410:00
🚀
KH
Lisa Nội Bộ
— GPS chặn 30m + Đồng bộ Chấm Công↔Lượt Phục Vụ + Xoay Ca Thu Ngân — deployed (99%)
31/0323:30
⏱
KH
Lisa Nội Bộ
— Chấm Công Phase A+B: check-in/out + OT (tăng ca) + miễn trừ nâng cao + gate check + deploy
31/0310:26
📋
KH
VietHuy1
— Thêm dự án mới, khảo sát template Mediplace
30/03
🚀
KH
Lisa Nội Bộ
— UI Overhaul + Trạng thái ĐÓNG + Tài liệu hướng dẫn
30/03
🔧
KH
Diệp Dương
— Rebuild index.html + 5 trang con từ WordPress
30/03
🚀
SP
Phát Triển BV
— Code Next.js 17 components, build OK
31/0315:18
🔧
KH
App Plustalent
— Fix khung 24/48/72h vòng 2: 72h mở khi 48h đóng, xóa Netlify, deploy FTP
🔧
KH
App Plustalent
— Fix pagination bug mentee không thấy nút làm bài vòng 2 (59 members > 50/page)
31/0313:30
🔧
KH
App Plustalent
— Ops fix gộp account trùng mentee + fix vòng 2
29/03
🔧
KH
App Plustalent
— Fix Vòng 2 check-in timing
29/03
🎨
SP
Phát Triển BV
— Hero redesign + Survey 30 câu VCCI CSI
28/0310:18
🎨
KH
Việt Huy Web
— Color 60-30-10 + 4 landing pages + Mega menu. Deploy FTP — 90% → 95%
28/0320:15
📈
HT
DASHBOARD
— Cập nhật tiến độ tổng: đồng bộ 22 PROGRESS.md. LIVE 4, Backend 7, Mockup 6, Chưa code 6
26/0321:30
🚀
KH
Lisa Nail
— App Nội Bộ: Trễ/Sớm sửa+hủy, biệt danh nhân viên, admin/manager/lễ tân xóa đơn — deployed (98%)
19/0316:00
🚀
KH
Lisa Nail
— App Nội Bộ: Branches management, fix admin users, PWA update prompt — deployed (98%)