Giai đoạn: 15/06 – 22/06/2026 · Tổng hợp từ lịch sử Git và transcript phiên làm việc Claude của từng dự án
Người thực hiện: jc-hello
Ngày lập: 22/06/2026
Phạm vi: 5 dự án + 1 dự án mới
Tổng quan tuần
Đây là tuần hạ tầng & sản phẩm — hai việc lớn song song: (1) tách cơ sở dữ liệu dùng chung thành 4 database riêng trên Railway và dọn dẹp schema để hệ thống độc lập, an toàn, dễ mở rộng; và (2) đại tu toàn diện trang Places của dashboard cho chị — gộp danh sách + chi tiết + duyệt vào một màn hình, chỉnh sửa tại chỗ, thêm bản đồ và tìm kiếm nhanh. Bên cạnh đó là triển khai Metabase để chị Ngọc tự xem báo cáo, crawler Ybox (học bổng/sự kiện) cho CheckEvent và khởi tạo dự án mới chicdata_cronjobs.
~84
commit trong tuần
5+1
dự án hoạt động / mới
1 → 4
tách DB chung thành 4 DB riêng
100/100
điểm audit cấu trúc DB sau dọn dẹp
Khối lượng commit theo dự án:
~40
chicdata_dashboard Báo cáo
~20
chicgo_data Dữ liệu
~14
migration Hạ tầng
9
checkevent_data Sự kiện
1
chicnchill_data
1. Tách cơ sở dữ liệu thành 4 DB riêng — trọng tâm hạ tầng của tuần
Trước đây tất cả dự án (chicgo, chicnchill, checkevent, dashboard) dùng chung một Postgres production — mọi thay đổi schema đều ảnh hưởng dây chuyền, rủi ro cao. Tuần này đã tách thành 4 database độc lập trên hạ tầng Railway mới: mỗi dự án sở hữu DB của mình.
Database mới
Chứa gì
Dự án dùng
chicgo
Địa điểm (places), reviews, giá, từ khoá, danh mục, tags
chicgo_data
chicnchill
Sản phẩm, ehunt (đổi tên từ etsy_ehunt_data), dữ liệu niche
chicnchill_data, nichenest
checkevent
Sự kiện, tổ chức, vé, bài viết/học bổng (Ybox)
checkevent_data
dashboard
Tài khoản đăng nhập (auth) + dữ liệu cộng đồng đã gộp
chicdata_dashboard
Quy trình an toàn: cấp phát 4 DB → sao chép dữ liệu sang DB mới → kiểm tra số dòng từng bảng (script 99-verify.sh đối chiếu hàng-hàng) → trỏ từng app sang DB mới. DB cũ được giữ nguyên chỉ-đọc làm bản rollback; mỗi repo có hai cấu hình .env (DB cũ) và .env.new (Railway) để quay lui dễ dàng nếu cần.
1.1 Dọn dẹp & chuẩn hoá schema khi tách 17/06
Gộp dữ liệu cộng đồng vào địa điểm — bình luận, đánh giá, vote, feedback (6 bảng app.* rời rạc) được gộp vào cột JSONB ngay trong bảng places → truy vấn đơn giản, không còn join rải rác.
Gom các trường BD cũ — 6 cột BD (verified_status, score, score_breakdown, note…) gộp về một cột bd_old_data (JSONB); API vẫn giữ nguyên hợp đồng cũ qua alias nên không gãy.
Bỏ cột/bảng rác — xoá ~10 cột chết và bảng không dùng (store_*, legacy_id…), làm bảng places gọn còn 48 cột.
Báo cáo & audit cấu trúc DB — lập tài liệu cấu trúc đầy đủ 4 DB (trường/quan hệ/cách dùng); điểm audit nâng từ 97 → 100/100 sau khi dọn.
Đồng bộ BigQuery theo từng DB — pipeline sync sang BigQuery được tách lại theo mỗi database sau khi split.
2. Đại tu trang Places của dashboard — chicdata_dashboard, công cụ cho chị
Trang quản lý địa điểm được thiết kế lại toàn diện theo loạt spec trong tuần, gộp thao tác xem — sửa — duyệt vào một chỗ:
Một màn hình split 50/50 — gộp 3 trang cũ (danh sách, chi tiết, hàng đợi duyệt) thành một trang: danh sách bên trái, chi tiết bên phải; trên mobile thành slide-over toàn màn hình.
Chỉnh sửa tại chỗ (inline edit) — mọi trường đều bấm-để-sửa: tên, địa chỉ, SĐT, toạ độ, danh mục… kèm editor riêng có kiểm tra hợp lệ cho dữ liệu phức tạp (giá, giờ mở cửa, giờ cao điểm, liên kết, mạng xã hội).
Gợi ý & chú thích từng trường (HelpTip) — thêm tooltip giải thích ý nghĩa trường và cách tính điểm BD, giúp người nhập hiểu rõ.
Bộ lọc nâng cao — dropdown chọn quận/huyện, lọc theo trạng thái xác minh (đã duyệt / chờ / tất cả) và lọc địa điểm đã làm giàu bằng Perplexity.
Tính năng BD Confirm — trang xác nhận BD với chọn nguồn, theo dõi tiến độ và thống kê theo quận & danh mục.
Tìm kiếm nhanh ⌘K (Spotlight) — gõ ⌘K để tìm địa điểm theo tên & địa chỉ ngay trên header.
Chuẩn hoá danh mục theo từng nhóm — bỏ "customer intents" khỏi nhập tự do; thay bằng danh mục con chuẩn theo từng category (chọn trong danh sách cố định, cảnh báo giá trị cũ lệch chuẩn).
Module bài viết (Chicwriter) — trang Articles: danh sách, chi tiết, bộ lọc, song ngữ Việt–Anh, xuất CSV; trỏ sang schema chicwriter.
Đọc dễ hơn — tinh chỉnh cỡ chữ & khoảng cách trong panel chi tiết theo phản hồi thực tế.
Đồng bộ tách DB — tách pool auth riêng, thêm pool cho chicnchill + checkevent, trỏ lại nguồn sản phẩm/sự kiện/bài viết/cấu hình; đọc dữ liệu cộng đồng từ JSONB đã gộp.
3. Metabase — công cụ tự xem báo cáo cho chị Ngọc — BI self-serve
Triển khai Metabase — công cụ BI để chị Ngọc tự tạo biểu đồ & báo cáo, tự lọc số liệu ngay trên trình duyệt mà không cần đụng đến code hay nhờ kỹ thuật. Bổ trợ cho dashboard: dashboard dành cho thao tác nghiệp vụ, còn Metabase dành cho khám phá số liệu linh hoạt.
Kết nối thẳng dữ liệu thật — gắn các DB chicgo (địa điểm) và dashboard làm nguồn dữ liệu; chị có thể kéo-thả tạo câu hỏi, biểu đồ, bảng tổng hợp mà không cần viết SQL.
Tách riêng an toàn — Metabase dùng một database metabase riêng để lưu cấu hình nội bộ (~150 bảng), không lẫn vào DB dữ liệu chicgo/dashboard.
Tự lưu & chia sẻ — câu hỏi/biểu đồ tạo ra lưu lại được, gom thành dashboard riêng và chia sẻ trong đội.
4. Chất lượng dữ liệu chicgo_data — ngoài phần dọn DB ở mục 1
Chuẩn hoá thời gian review — chuyển ngày đăng đánh giá từ dạng text sang kiểu thời gian thật (TIMESTAMPTZ), có index và xuất chuẩn ISO → lọc/sắp xếp theo thời gian chính xác.
Giá về một mối — mọi truy vấn/logic chuyển sang dùng cây giá chuẩn places.prices; bỏ hẳn bảng public.prices cũ.
Thêm prompt phân loại mới — bổ sung bộ prompt cho các nhóm mới (thể thao ngách, wellness/mindset, craft workshop…) phục vụ AI phân loại; đổi tên bảng category_prompts → categories cho rõ nghĩa.
Ổn định vận hành — bật line-buffering cho log khi chạy nền (nohup) + log nhịp tim (heartbeat) để theo dõi tiến trình dài.
5. CheckEvent Data — crawler Ybox (học bổng/sự kiện)
Bổ sung nguồn mới Ybox.vn — nền tảng tổng hợp học bổng, tuyển dụng & sự kiện cho giới trẻ Việt Nam:
Crawler Ybox — gọi API (SearchPosts) lấy danh sách bài + tải nội dung từng bài, đẩy vào DB checkevent.
Hỗ trợ tiếng Việt bằng AI — tự dịch tóm tắt & nội dung sang tiếng Việt, trích thông tin chuẩn hoá (loại học bổng, giá trị, điều kiện…), tên quốc gia hiển thị tiếng Việt.
Chuẩn dữ liệu học bổng — lưu theo "Global University & Scholarship Data Spec" (deadline, yêu cầu GPA/ngoại ngữ, hồ sơ cần thiết…); upsert từ JSON hoặc crawl đẩy thẳng vào DB.
Trỏ sang DB checkevent — cập nhật theo đợt tách DB, phẳng hoá tham chiếu schema về public.
6. chicdata_cronjobs — dự án MỚI: tự động khôi phục ảnh hỏng
Khởi tạo trong tuần (mới ở mức tài liệu & cấu trúc, chưa viết code chạy). Mục tiêu: hệ thống tác vụ định kỳ tự động sửa ảnh bị hỏng trong DB production cho các sản phẩm Chic.
Quy trình — kiểm tra ảnh hỏng (dead image) → tìm lại ảnh mới (Playwright/Google) → tải lên Cloudflare R2 → cập nhật URL mới vào DB.
Phạm vi — ưu tiên Chicgo, sau đó CheckEvent & ChicnChill (cùng mô hình); hỗ trợ chạy nhiều dịch vụ trên một hoặc nhiều máy.
Công nghệ — Python + Playwright + Cloudflare R2, có retry/backoff khi Google chặn (lỗi 403).
Tổng kết & định hướng
Điểm nhấn tuần: hệ thống dữ liệu đã tách thành 4 DB độc lập (mỗi dự án một DB, schema đã dọn sạch, audit 100/100) và trang Places của dashboard được đại tu thành nơi xem–sửa–duyệt–xem bản đồ tất-cả-trong-một. Đây là nền móng để mỗi sản phẩm tiến hoá độc lập, giảm rủi ro dây chuyền.
Theo dõi tiếp: (1) giám sát sau cutover — các app đọc/ghi đúng DB mới, đồng bộ BigQuery theo từng DB; (2) hoàn thiện & đưa vào chạy chicdata_cronjobs (khôi phục ảnh hỏng); (3) tiếp tục tinh chỉnh trang Places theo phản hồi của chị.