🪷 Dự Án Yogi & Linga — Project Brain
Khi muốn tiếp tục: Chỉ cần nhắn “tiếp tục dự án” — đọc note này là đủ để biết đang ở đâu và làm gì tiếp theo.
📌 Tổng Quan
| Mục | Thông tin |
|---|---|
| Tên site | Yogi & Linga |
| Mô tả | Blog sexual wellness — review sản phẩm, hướng dẫn mua, bài viết sức khỏe |
| URL live | https://yogilinga.com |
| GitHub repo | https://github.com/Sontis98/yogilinga |
| GitHub user | Sontis98 |
| Tech stack | Jekyll (github-pages gem) + GitHub Actions |
| Local folder | D:\project\yogilinga |
🔑 Credentials & Config Quan Trọng
GitHub PAT: ghp_[SEE_LOCAL_NOTES]
Tạo tại: GitHub → Settings → Developer settings → Personal access tokens → Classic
Permissions cần: repo + workflow
_config.yml (các setting quan trọng)
url: "https://yogilinga.com"
baseurl: ""
include: ["_pages"] # BẮT BUỘC — Jekyll mới process _pages/
⚠️ Quy Trình Push Code (BẮT BUỘC)
KHÔNG push trực tiếp từ D:\project\yogilinga — Windows mount làm hỏng .git/config.
KHÔNG dùng Write/Edit tools cho layout files — tạo null bytes → Jekyll đọc binary → build fail.
Luôn làm theo flow này:
PAT="ghp_[SEE_LOCAL_NOTES]"
# 1. Clone mới vào /tmp (mỗi session)
rm -rf /tmp/yogi_session
git clone https://$PAT@github.com/Sontis98/yogilinga.git /tmp/yogi_session
# 2. Copy file từ workspace mount
cp /sessions/*/mnt/yogilinga/path/to/file /tmp/yogi_session/path/to/file
# 3. Nếu content có backtick, dùng Python để write
python3 -c "open('/tmp/yogi_session/path/file','w').write('''CONTENT HERE''')"
# 4. Kiểm tra null bytes (layout files)
python3 -c "c=open('/tmp/yogi_session/_layouts/default.html','rb').read(); print('nulls:', c.count(b'\\x00'))"
# 5. Commit và push
cd /tmp/yogi_session
git config user.email "ssontiss@gmail.com"
git config user.name "Sontis98"
git add . && git commit -m "feat: ..." && git push origin main
Check build status (browser JS):
(async function() {
const res = await fetch('https://api.github.com/repos/Sontis98/yogilinga/actions/runs?per_page=1', {
headers: { 'Authorization': 'token ghp_[SEE_LOCAL_NOTES]' }
});
const d = await res.json();
const r = d.workflow_runs[0];
return { status: r.status, conclusion: r.conclusion, commit: r.head_commit?.message?.slice(0,60) };
})()
Bash sandbox: KHÔNG thể dùng GitHub REST API (proxy 403) — dùng browser JS cho API calls
🏗️ Cấu Trúc Site Hiện Tại
D:\project\yogilinga\
├── _config.yml # url: yogilinga.com, baseurl: "", include: [_pages]
├── _layouts/
│ ├── default.html # GA4, Schema JSON-LD, age gate, nav, footer
│ ├── review.html # Schema Review JSON-LD, scorecard, buy box, related guide
│ ├── post.html # Layout wellness posts
│ └── guide.html # Layout guides + related reviews + more guides
├── _reviews/ # 48 reviews
├── _posts/ # 8 wellness blog posts
├── _guides/ # 7 buying guides
├── _pages/
│ ├── reviews.html # /reviews/ — filter JS hoạt động ✅
│ ├── wellness.html # /wellness/
│ ├── guides.html # /guides/
│ ├── about.md # Scoring rubric, 3 team personas, affiliate transparency ✅
│ ├── contact.md # Form mailto hoạt động ✅
│ ├── affiliate-disclosure.md
│ ├── privacy.md # GA4 G-071MTW1DP2, GDPR/CCPA ✅
│ └── terms.md # Comprehensive ✅
├── assets/
│ ├── css/main.css
│ └── images/
│ ├── reviews/ # 48 JPEGs on-brand
│ ├── blog/ # 17 JPEGs lifestyle
│ └── guides/ # 7 JPEGs
├── index.html # Homepage
├── robots.txt
├── CNAME # yogilinga.com
└── google3749be6f9e4e8e72.html
✅ Đã Làm Xong
- Domain yogilinga.com — live, SSL, DNS A records trỏ vào GitHub Pages
- GA4 G-071MTW1DP2 — đã thêm domain yogilinga.com, Search Console verified, sitemap submitted
- 48 reviews — Lovense (18), We-Vibe (5), Satisfyer (5), Womanizer (5), Dame (5), LELO (5), b-Vibe (5)
- 7 buying guides — body-safe materials, first vibrator, app toys, lubricant, anal toys, couples toys, LELO brand
- 8 wellness blog posts
- Ảnh thật cho tất cả 48 reviews — từ brand CDNs (Lovense, Womanizer, We-Vibe, Dame, LELO, b-Vibe) ✅
- Lovense: hoverImg CDN (
cdn.lovense.com/UploadFiles/web/store/hoverImg/) - Womanizer:
womanizer.com/media/catalog/product/cache/ - We-Vibe:
we-vibe.com/media/catalog/product/cache/(prefixwvi_) - Dame: Shopify JSON API (
dame.com/products/[handle].json) - LELO:
assets.lelo.comCDN - b-Vibe, Satisfyer: ảnh thật từ session trước
- Lovense: hoverImg CDN (
- Blog images — 8 bài posts đều có ảnh minh họa thật (37–70KB)
- Mobile nav fix — hamburger menu ẩn đúng trên desktop
- Newsletter strip — đã xóa khỏi layout (xấu + không cần)
- Filter buttons /reviews/ — hoạt động đúng
- Schema JSON-LD Review markup
- Internal linking — 30+ reviews có related_guide_url, 7 guides có related_brand
- Legal pages — Affiliate Disclosure, Privacy (GA4), Terms
- About page — Scoring rubric, 3 team personas, affiliate transparency
- Lovense affiliate — 18/18 reviews có affiliate link ✅
- Calor + Tenera: dùng store page link
/r/wotgjp(sản phẩm không có link riêng)
- Calor + Tenera: dùng store page link
🔗 Lovense Affiliate Links (đã có)
| Sản phẩm | Link |
|---|---|
| Lush 3 | https://www.lovense.com/r/rtg7ej |
| Nora | https://www.lovense.com/r/vx5cjf |
| Hush 2 | https://www.lovense.com/r/9zhq54 |
| Edge 2 | https://www.lovense.com/r/tks6y2 |
| Ferri | https://www.lovense.com/r/3e42fi |
| Max 2 | https://www.lovense.com/r/qwxa52 |
| Domi 2 | https://www.lovense.com/r/7o7l34 |
| Osci 2 | https://www.lovense.com/r/wotgjp |
| Lush 4 | https://www.lovense.com/r/er1brt |
| Gemini | https://www.lovense.com/r/k1ari5 |
| Diamo | https://www.lovense.com/r/mqqgtx |
| Solace Pro | https://www.lovense.com/r/4jszbs |
| Gush 2 | https://www.lovense.com/r/wnl76o |
| Lush Mini | https://www.lovense.com/r/uw4vx0 |
| Ridge | https://www.lovense.com/r/rhnoxz |
| Mini Sex Machine | https://www.lovense.com/r/dawt0e |
| Calor | ⚠️ TẠM — cần link /r/ thật |
| Tenera | ⚠️ TẠM — cần link /r/ thật |
📋 VIỆC CẦN LÀM TIẾP — Theo Thứ Tự Ưu Tiên
🔴 Ngay bây giờ
(Không có việc khẩn cấp — site đang ổn định, ảnh thật đầy đủ)
🟡 Đăng Ký Affiliate Programs (user action required)
| Brand | Network | URL đăng ký | Status |
|---|---|---|---|
| We-Vibe | Impact Radius | https://app.impact.com/advertiser-signup | ❌ Chưa |
| Dame | Impact Radius | https://app.impact.com/advertiser-signup | ❌ Chưa |
| LELO | ShareASale | https://www.shareasale.com/account/join.cfm | ❌ Chưa |
| Womanizer | ShareASale | https://www.shareasale.com/account/join.cfm | ❌ Chưa |
| Satisfyer | ShareASale | https://www.shareasale.com/account/join.cfm | ❌ Chưa |
| b-Vibe | ShareASale | https://www.shareasale.com/account/join.cfm | ❌ Chưa |
Sau khi có link: thay tất cả
buy_urlplaceholder trong 30 reviews (5×b-Vibe, 5×Dame, 5×LELO, 5×Satisfyer, 5×We-Vibe, 5×Womanizer)
🟢 Nội Dung & SEO (có thể làm ngay)
- Reviews mới: Aneros, Hot Octopuss, Njoy
- 5–10 bài wellness posts mới
- Newsletter signup — ConvertKit hoặc Mai