---
url: https://docs.nemo12.com/ops/storage.md
description: >-
  Quy tắc lưu trữ: code, docs, prototype và asset nhỏ vào git; nội dung learner
  vào D1; media nặng và file nguồn vào R2; bản sinh không lưu (SRC-1433).
---

# File nào vào git, D1, R2

Chủ dự án 18.10.2026: "Cần có quy tắc nào đó, để file nào được đưa lên GitHub, dạng nào ko được đưa lên GitHub
mà được đưa vào đâu đó khác như D1 hay R2". File nhị phân đã vào lịch sử git thì không gỡ được nếu không viết lại
lịch sử, và repo đang có 162 MB file theo dõi, phần lớn là media, seed SQL và nội dung
([đo dung lượng repo](repo-size.md)).

| Dạng | Nơi lưu | Ghi chú |
| --- | --- | --- |
| Code, config, test, migration D1 (schema) | **Git** | |
| Docs (PRD, SDD, quyết định, ảnh chụp minh hoạ nhỏ) | **Git**, `apps/<app>/docs/` (chung: `docs/`) | Docs cạnh code |
| Prototype UI (HTML/React nháp, link Artifact, link Figma) | **Git**, `apps/<app>/design/prototypes/` | Không vào build |
| Asset app thật sự dùng, đã tối ưu | **Git**, `apps/<app>/public/` hoặc `src/assets/` | Ảnh ≤ 300 KB (webp), 3D `.glb` ≤ 500 KB, âm thanh UI ≤ 200 KB |
| Nội dung learner đọc (bài, câu hỏi, sách, bài SEO, Grammar) | **D1**, nạp qua workflow `seed-data` | Nguồn soạn (md/json) và seed SQL ≤ 1 MB ở git, vì `seed-data` đọc file từ repo |
| Media nặng và file nguồn (video, audio bài học, `.blend`, PSD, render, ảnh gốc, PDF lớn) | **R2** `nemo12-content/<app>/...` | Danh mục ở `apps/<app>/design/assets.json`: khoá R2, nguồn, giấy phép, ghi công |
| Dữ liệu người dùng (bài làm, hồ sơ, đơn hàng) | **D1 production**, chỉ qua API | Không bao giờ vào git, kể cả bản xuất |
| Bản sinh (dist, seed SQL lớn, index, fixture sinh) | **Không lưu**: sinh lại khi build hay deploy | `.generated/`, `.gitignore` |
| Bí mật (token, khoá) | **GitHub Secrets / Cloudflare secrets**, máy: `.dev.vars` | |
| Log, ảnh chụp tạm, báo cáo một lần | **Không lưu** (scratchpad, `tmp-*`) | |

Máy chặn: `scripts/check-storage.mjs` (nhóm `check:code`, chạy ở pre-commit và CI) từ chối mọi file MỚI thêm
thuộc định dạng nguồn/media (`.psd .blend .fbx .mp4 .mov .wav .zip .sqlite`…), ảnh quá 300 KB, `.glb` quá 500 KB,
và mọi file quá 1 MB. File đã có từ trước không bị xét; kế hoạch trong `docs/ops/repo-size.md` đưa chúng ra dần.
Ngoại lệ thật thì thêm đường dẫn vào `scripts/storage-allow.json` kèm lý do.
