Time
Category
Select All
Videos
Shorts
Country
Select All
US
BR
ID
TH
VN
Other ▾
Game
Select All
SLG Strategy
Casual Casual
RPG RPG
MOBA
FPS / TPS Shooting
Sandbox Sandbox
Cloud Gaming Cloud Gaming
Other Others
Creator
Select All
Review/Analysis
Tutorial/Guide/Play
Highlights/Clips
News/Commentary
This week imported
0
Outreach Funnel
0
First Outreach
0
Opened
0
Replied
Start Collaboration
0
Total Subscribers
0
All creators in DB
Country Source Top 5
By imported creator count
Subscriber Segment Distribution
Creator Count × Subscriber Tier
0
110K-1010K
0
1010K-5010K
0
5010K-10010K
0
10010K-50010K
0
50010K+
Engagement Rate × View rate bubble chart
Bubble Size = Subscribers;Color-code content types
Videos
Shorts
Creator Tier Assignment
by Content Type / Category,Determine placement priority
Source Type
Mostly long videos
Main Pool
ShortsShare < 30%
0 creators
Share in DB 0%
Source Type
Shorts-oriented
Shorts pool
ShortsShare > 70%
0 creators
Share in DB 0%
Source Type
Mixed / Low Activity
Low health
Published (30d) < 2
0 creators
Share in DB 0%
total 0 creators
Outreach Status
All0
Not Contacted0
Sent0
Opened0
Replied0
In Collaboration0
Declined0
Import Source
Videos0
Shorts0
Content Direction
SLG Strategy0
Casual0
RPG RPG0
MOBA0
FPS / TPS0
Sandbox Sandbox0
Cloud Gaming0
Other0
Creator Type
Review/Analysis0
Tutorial/Guide/Play0
Highlights/Clips0
News/Commentary0
Other0
Selected 0
Channel Country Import Source Content Direction Creator Type Subscribers Engagement Rate View Rate Import Date Email Emails Sent
YouTube Creator Screening
Videos / Shorts dual mode · Local storage · Real-time params
API Settings
💡 Daily free quota 10,000 units, resets at 00:00 Pacific Time.12keywords × 4 pages ~ 5,800 Unit。
API Call Flow & Quota Usage Details
Step API Endpoint Quota/Call Channel A Channel B Description
1.Search & Collect videos.list
(chart=mostPopular)
1/page 4~8 Channel A: Fetch trending game videos by region
1.Search & Collect search.list
(type=video)
100/page 1200~4800 Channel B: Search videos by keywords
2.Coarse Screen channels.list 1/50Channel ≈3~4 ≈6~12 Batch fetch subs/country, eliminate 50-70%
3.Deep Analysis playlistItems.list 1/Channel ≈1/Channel ≈1/Channel Only channels passing coarse screening
3.Deep Analysis videos.list 1/Channel ≈1/Channel ≈1/Channel Fetch plays/Likes/Comments/Brand Collab
Channel A Total(TrendingScan) ≈300~500 4page trending≈8 + Channel processing≈300~400
Channel B Total(Keyword Search) ≈3,000~6,000 12 keywords × 4 pages≈4800 + Channel processing
💡 Coarse screening flow:Subscribers → Registered Country(Null pass)→ Game Type(topicDetails,Null pass)→ Only passed channels enter deep analysis
Filter Params
· Channel language affects search relevance
· Registered country is filled at registration
· This field is filled by the creator,May not match actual location
💡 Search channel description
🔥 Channel A(Trending video scan):Fetch trending game videos from target region channels directly,regionCode Region filter effective,nokeywords required,Very low quota usage(~ 408 Unit),Suitable for quick discovery of trending creators。Cover~ 150-200 channels。
🔍 Channel B(Precise keyword search):Search videos by keywords,Extract channel info from videos,High accuracy but high quota consumption(~ 5,224 Unit),Suitable for deep vertical discovery。Search Phase regionCode Keyword Searchno。
Suggest:Run Channel A first for quick coverage,Then Channel B for precise deep discovery,Results auto-deduplicated & merged。Only one channel can run at a time。
📊 Data Analysis Base
The base for all data analysis is maxResults = 50 Videos,Filtered out Shorts(≤60sec)
No search records
0
Scanned
0
Passed
0
Does not match
0
Has collaboration records
0
Quota Usage
Real-time Log
Passed (0) Does not match (0) All (0)
# Channel Name Subscribers Avg Views View Rate Engagement Rate Latest Published Country Email keywords Brand Status
No data
Conversion ParamsSettings (Auto-recalculate after modification)
Click User = Avg Views × Click Rate
Downloads = Click User × Download Rate
Total effect = Downloads × Unit Price
Suggested Amount = Total effect × Risk Range
Click User = Avg Views × Click Rate → Downloads = Click User × Download Rate → Total effect = Downloads × Unit Price → Suggested collab amount = Total effect × Risk Range
Creators with email:0 name  ·  Checked:0 name
When checked, emails also go to test mailbox
# Channel Name Subscribers Avg Views (10) Engagement Rate Email Source Status Suggested collab amount (USD)
No creator data,Please select creators in Creator DB first, then click「Initiate Outreach」
📧 Email workspace
📮 Tencent Enterprise Mail SMTP Disconnected
🏢 Server:smtp.exmail.qq.com  ·  Port:465(SSL)
In Tencent Enterprise Mail「Settings → Client-sideSettings」Enable SMTP,Login with auth code
🔍 Self-hosted email tracking(Optional) Not enabled
Enable self-hosted email tracking
Emails still via Tencent Enterprise Mail SMTP Send。
After enabling,Self-hosted tracking service will inject tracking ID into each email,Record open & click behavior in real-time。
📮 Tencent SMTP Send 🔍 Self-hosted Tracking Layer
Closed
✏️ Email template editor
Email Body · [Creator Name] Placeholders auto-replaced at send time

Hi [Creator Name],

I've been watching your game videos, and I really love your content style and energy.

We're looking for creators like you to make a paid gameplay / review video for our mobile game—Starparks.

What we offer:

  • Full creative control (keep your own style)
  • Free game support
  • No strict script

If you're interested, I can send you the full collaboration details right away.

Best regards,
Kxun
CEO
300 LIVE

📤 Email Send
📮
SMTP Direct (Tencent Enterprise Mail)
Emails will be via Tencent Enterprise Mail SMTP directlySend,Without tracking
0
Pending
0
success
0
failed
Ready, check target creators before sending
📊 Self-hosted Tracking Delivery Stats Analytics
📊
Self-hosted tracking not enabled
Enable "Self-hosted Email Tracking" above and complete setup to see data here
📅 Send Records(By Date)
No send records
📧 Email Preview
Theme
Body
Account
API Config
Data Refresh
Email Tool
Notifications
Member Management
API Config
YouTube Data API Key
Used for channel data fetching,Daily quota 10,000 units
Daily refresh ratio
Daily refresh ratio of existing creators in the DB
Refresh Time(UTC)
Daily auto-refresh execution time
QuotaMonitor
Quota alert threshold
Notify when usage exceeds this ratio
Disable search.list
Force disable high-consumption endpoints(100u/times)
Email tool sync
Webhook URL
URL for email tool to push status changes
AutoSync
Open/Reply status auto-updates to Creator DB
Timezone
All timestamps based on this timezone
System Plans · Storage Plan
Storage centralization plan — Migrate all storage from scattered local to Tencent Cloud PostgreSQL
Planned
1、Current storage overview
Tencent Cloud Server(mailer300 / 43.130.49.17)
Service Port Storage Location Type Data Volume
ai.300live.com Frontend443/var/www/ai-tools/ + localStorageStatic HTML + Browser Storage1.4M
storage-api(Creator DB Proxy)3082/var/www/storage-api/outreach.dbSQLite20K
email-server(Email Outreach)3080/var/www/youtube-tools/email-server/data.dbSQLite4K
track-server(Email Tracking)3081/opt/track-server/track.dbSQLite4K
youtube-storage3082/var/www/youtube-tools/data/*.jsonJSONFile(30day cleanup)4.8M
langdetect Model/home/ubuntu/langdetect/lid.176.bin2baseModel125M
Mac Mini(Tailscale: 100.68.146.94)
gamecreator-hub :3000 — PostgreSQL Creator DB Core Data,Current 13 CreatorRecord
⚠ Mac Mini Is the sole data source for Creator DB,Tencent Cloud storage-api Pass Tailscale Intranet proxy access
MacBook Local(Browser localStorage,29Read/write at)
gchub_creators
Creator DB Local Cache
gchub_outreach
Outreach status tracking
email_send_history
Email send records
email_api_token
Email service auth
gchub_channel_videos
Channel video cache
YouTube API Quota
Quota Tracking
Server Resource Overview
mailer300 · 43.130.49.17 · Intel Xeon E5-26xx v4 · 2 vCPU
2026-04-23 Snapshot
Disk 50 GB
Used 9.8G · canuse 38G
19.6%
Log 732M langdetect 126M email-tracking 62M storage-api 29M youtube-tools 45M track-server 19M ai-tools 3M Other ~8.8G
Memory 1.9 GiB
Used 504Mi · canuse 1.2Gi · Cache 1.3Gi
26%
gamecreator-hub
86M
track-server
72M
email-server
72M
storage-api
72M
PM2 daemon (root)
73M
PM2 daemon (ubuntu)
69M
PostgreSQL live300db · 13 MB
16 tables
user_settings
3.2M
filter_results
240K
sent_emails
112K
creators
96K
open_events
80K
Other 11 tables
336K
2、Centralized migration plan(5 phases)
Week 1 Phase 1:PostgreSQL Deploy + Mac Mini Migrate(Highest Priority)
1.1 Tencent Cloud setup PostgreSQL,Create 300live_db Database and user
1.2 Mac Mini Export gamecreator-hub PostgreSQL Data → pg_dump → scp Transfer to Tencent Cloud
1.3 Tencent Cloud execution pg_restore Import creator DB data
1.4 gamecreator-hub Deploy to Tencent Cloud,Modify .env Point to local PostgreSQL
Week 2 First half Phase 2:SQLite → PostgreSQL Migrate
in 300live_db Create unified table structure:sent_emails / webhook_events / open_events / click_events / tracked_links / outreach_replies / youtube_filter_results
Write Node.js Migration script migrates one by one 4 SQLite DB + JSON FileData
Backup all before migration SQLite File(rename .bak),Post-migration row count check
Week 2 Second half Phase 3:Backend service refactoring
storage-api:Remove Mac Mini Proxy,Direct local connection PostgreSQL
email-server:Remove better-sqlite3,Switch to pg drive
track-server:Remove better-sqlite3,Switch to pg drive
youtube-storage:JSON File read/write changed to youtube_filter_results table(30-day retention cleanup logic)
Week 3 First half Phase 4:Frontend localStorage To Cloud
gchub_creators
High Priority → Real-time API query
gchub_outreach
High Priority → outreach APItable
email_send_history
Medium Priority → sent_emailstable
email_api_token
Medium Priority → Server-side session
gchub_tag_params
Low Priority → Keep local
gchub_filter_history
Low Priority → Keep local
Week 3 Second half Phase 5:Nginx Config Adjustment + cleanup
api.300live.com proxy_pass from Tailscale 100.68.146.94 Change pointer 127.0.0.1:3000
Merge duplicate services:track-server / email-tracking / youtube-storage-server / storage-api eachKeep1
cleanup Mac Mini Tailscale Dependency,Can be taken offline after confirming no dependencies
3、Post-migration target architecture
Tencent Cloud mailer300(43.130.49.17)
├── Nginx :443
│ ├── ai.300live.com → /var/www/ai-tools/
│ ├── api.300live.com → 127.0.0.1:3000 (Local,No longer via Tailscale)
│ ├── youtube.300live.com → :3080 / :3082
│ └── track.300live.com → :3081
├── gamecreator-hub :3000(LocalDeploy)
└── PostgreSQL :5432 — 300live_db
    ├── creators(Creator DB)
    ├── sent_emails / webhook_events
    ├── open_events / click_events / tracked_links
    ├── outreach_replies
    └── youtube_filter_results
Mac Mini → Can take offline(No longer depended on by any services)
4、Risk Assessment & Rollback Plan
Risk impact Mitigation
PostgreSQL MigrateDatalosthighBackup all before migration SQLite File,Post-migration row count check
Mac Mini Going offline causes service interruptionhighRun in parallel on Tencent Cloud first,Switch after verification Nginx
localStorage Data not syncedinKeep localStorage As fallback plan,Progressive Migration
50G Insufficient disk spaceinCurrently used 9.3G,PostgreSQL + Data Estimate < 2G,Low Risk
Concurrent write conflictlowSQLite Originally single write,PostgreSQL Better concurrency support
Rollback Plan:Original files and configs are retained at each stage — SQLite DB File rename .bak,Nginx Modify after config backup,Mac Mini Service does not stop until fully validated。
System Plans · Multi-language verification
Comment Language Verify — Server-side detection scheme(v2)
Planned
1、Architecture Overview
BrowserFrontend                 Tencent Cloud Server                                    External
───────────               ────────────────                                  ─────
                            ┌─ gamecreator-hub (:3000)
click"Comment Lang Verify" ──→ │  POST /api/lang-check                  │
                            │    1. call YouTube API Fetch comments        │──→ YouTube Data API v3
                            │    2. call Python fasttext Detect Language │
                            │    3. 60%Rule-based determination → Write PG + Back │
                            └────────────┬───────────────────┘
                                           │
                                  PostgreSQL
                                comment_lang / lang_verified_at
Core Changes:YouTube API Call + Language detection is fully server-side,Frontend only sends one request。API Quota:12 units / times
2、Language determination rules(Core)
Condition comment_lang value FrontendShow
certainLanguageShare > 60%thisLanguage Code(like th、en)Display on right of country code ✅ th
No Language over 60%Display on right of country code ✅ ❓
No comments / CommentsClosenullDisplay on right of country code
Not Verifiednull(lang_verified_at also empty)No marker on right of country code
TH Channel,Comments 70%Thai → TH ✅ th
US Channel,45%English+40%Spanish → US ✅ ❓
JP Channel,Not Verified → JP
KR Channel,Comments disabled → KR —
3、DB changes
-- creators Table adds two columns
ALTER TABLE creators ADD COLUMN comment_lang text;
ALTER TABLE creators ADD COLUMN lang_verified_at timestamptz;
col Type Description
comment_langtextnull=Not verified or no comments;Language Code=Over 60%;❓=No language over 60%
lang_verified_attimestamptzLast verification time,null=Not Verified
4、Backend addition API(gamecreator-hub :3000)
4.1 Download fasttext Model
cd /var/www/gamecreator-hub
wget -q https://dl.fbaipublicfiles.com/fasttext/supervised-models/lid.176.bin \
     -O /var/www/gamecreator-hub/lid.176.bin
4.2 Python Language detection script(/var/www/gamecreator-hub/lang_detect.py
#!/usr/bin/env python3
import sys, fasttext
model = fasttext.load_model('/var/www/gamecreator-hub/lid.176.bin')
for line in sys.stdin:
    t = line.replace(' ',' ').strip()
    if t:
        pred = model.predict(t, k=1)
        print(pred[0][0].replace('__label__',''))
    else: print('und')
4.3 POST /api/lang-check — Process Flow
Request Body:{ "channelId": "UCxxxxxx", "apiKey": "AIzaSy..." }
① channels.list → uploadsPlaylistId② playlistItems → Latest 10 video IDs③ commentThreads → each3(total30)④ fasttextDetect⑤ 60%Rule-based determination → Write PG
4.4 Backformat
{ "channelId": "UCxxxxxx",
  "comment_lang": "th",
  "lang_verified_at": "2026-04-23T12:00:00Z",
  "detail": { "totalComments":30, "langDistribution":{"th":22,"en":5,"ko":3},
             "topLang":"th", "topLangRatio":0.73, "rule":"th 73% > 60% → th" } }
4.5 Exceptions
• CommentsClose / 0 comments → comment_lang = nulllang_verified_at = now()
• YouTube API Error → HTTP 500 + Error Message
• PUT /api/creators allowed Extension:Add comment_lang, lang_verified_at
5、Frontend changes
5.1 New Button
in「Remove」Added after button 「Comment Lang Verify」 Button:
• Default dimmed(Gray semi-transparent),SelectedCreatorthen activate
• Each timeonlyAllowSelected 1 CreatorperformVerify
• Showing during verification loading Rotate icon
5.2「Country」Column display changes(Append marker to right of country code)
Not Verified:TH
Verified with primary language:TH ✅ th
Verified no primary language:TH ✅ ❓
Verified no comments:TH —
5.3 New JS Function langCheckCreator()
① Check selected creator count(Must be exactly 1)
② Fetch selected creator's channelId
③ Select API Key with lowest quota
④ POST /api/lang-check { channelId, apiKey }
⑤ Update local data after success + Re-render list
⑥ Button restore state
6、Execution Steps(12 step)
# Action File / Position
1Download fasttext lid.176.bin ModelServer
2Create lang_detect.py Script/var/www/gamecreator-hub/
3Test Python ScriptServer CLI
4PG Add column comment_lang + lang_verified_atServer psql
5server.js Add child_process + detectLanguages()Server
6server.js New POST /api/lang-check RouteServer
7server.js PUT allowed ExtensionServer
8pm2 restart gamecreator-hubServer
9Frontend UI + JS Changeai-tools/index.html
10SyncChangeyoutube-tools/index.html
11node --check Syntax ValidationServer
12End-to-end testBrowser
7、Risks & Alternatives
Risk Response
lid.176.bin Downloadfailedscp Transfer
YouTube VideoNo commentscomment_lang=null,Show TH —
Comments disabledsame"No comments"process
API Key Quota ExhaustedFrontend selects lowest quota Key,Notify user when exhausted
System Plans · ApiPlan
4core tables × Frontend Feature × APIEndpoint Association Mind Map — Click "Read Field" to view all referencing features
Database 4 core tables verified
channels(Creator Basic Data) 15 Field
channel_id PK · channel_name · country · subscribers · avg_views_30 · play_rate · engagement_rate · last_published_at · has_sponsorship · email · game_type enum · creator_type enum · content_type · activity_30d · imported_at
outreach(Outreach Log) 7 Field
id PK · channel_id →channels · sent_at · opened_at · replied_at · deal_started_at · campaign_id
users(Account System) 5 Field
id PK · email · password_hash · role admin/viewer · created_at
sync_logs(Sync Log) 5 Field
id PK · source email_tool/google_api · synced_at · records_count · status
Database、Frontend feature and YouTube API Endpoint association mind map
clickRead FieldTags → View all frontend features referencing this field | clickFeature row → View data lineage description
channels
outreach
users
sync_logs
Calculate locally(0 units)
System Plans · Creator tag params
Matching keywords for content direction and creator type/Determination Rules — Auto-classify at import,Supports manual correction
Content Direction Game Type — Matching keyword examples
Scan all videos at import(~50),Count keyword-matched videos per category,Tag with the most-matched category。
Creator Type Matching keyword examples
Scan all videos at import(~50),Count keyword-matched videos per creator type,Tag with the most-matched type。
Tagging logic description · Scoring system
At import, for each creator ~ 50 videos scanned one by one,Count per category/Number of keyword-matched videos for this type,Tag with the type having the most matched videos(Rather than tagging on first match)。On tie, take earlier list item。Fallback when no match"Other"。Manual correction supported after auto-tagging。