Single Source of Truth

ข้อมูล master ของงานวิ่ง Race Up Work — ใช้ร่วมกันใน hub, no, ops, racepack subdomains

📦 Static Files (Cloudflare Pages CDN)

Pathคำอธิบาย
/data/events.js22 events + 4 helper functions (RACEUP_EVENTS)
/data/categories.jsRace Pack categories + status flow
/data/staff.js22 staff (RACEUP_STAFF) + nickname/email/phone helpers
/data/project-assign.jsPer-event team assignment (RACEUP_PROJECT_ASSIGN)
/data/sponsors.jsSponsors per event + tier + brand colors (RACEUP_SPONSORS)
/data/suppliers.jsSuppliers by category (RACEUP_SUPPLIERS)

🔗 Apps Script API (ดึงผ่าน Web App URL)

ActionEndpointStatus
events?action=events
categories?action=categories
event เดียว?action=event&code=KSMH26
staff?action=staff🛠 Need deploy
projects?action=projects🛠 Need deploy
project เดียว?action=project&code=KSMH26🛠 Need deploy
sponsors?action=sponsors[&event=XX]🛠 Need deploy
suppliers?action=suppliers[&category=medal]🛠 Need deploy
events.js direct?action=js
ping?action=ping

📖 ใช้งานใน subdomain อื่น

วาง script tag ลงในหน้า HTML:

<!-- โหลดทั้ง 6 ไฟล์ master -->
<script src="https://master.raceup.co.th/data/events.js"></script>
<script src="https://master.raceup.co.th/data/categories.js"></script>
<script src="https://master.raceup.co.th/data/staff.js"></script>
<script src="https://master.raceup.co.th/data/project-assign.js"></script>
<script src="https://master.raceup.co.th/data/sponsors.js"></script>
<script src="https://master.raceup.co.th/data/suppliers.js"></script>
<script>
  const event   = window.getEventByCode('KSMH26');
  const staff   = window.getStaffByNickname('ก๋อย');
  const team    = window.getProjectByEvent('KSMH26');
  const title   = window.getTitleSponsor('KSMH26');
  const medals  = window.getSuppliersByCategory('medal');
</script>

🔄 Sync Strategy

เลือกได้ 2 แบบ — ดูรายละเอียดใน SYNC_DESIGN.md:

v1.0.0 · Race Up Work Co., Ltd. · 2026