Variable / Setting Reference
src/constants/custom.config.ts および public/data/*.json 内で定義されている各変数が、画面 UI や各機能のどの部分に対応・影響しているかの一覧表です。
1. custom.config.ts 変数対応表
アプリ全体の基本メタデータ、ブランドカラー、各機能の表示トグルを制御する変数群です。
| 変数名 (Key Path) | 型 (Type) | デフォルト例 | 対応する UI / 影響範囲 |
|---|---|---|---|
identity.eventName | string | "FesTime 2026" | イベント名 |
identity.organizationName | string | "Organization" | イベントを運営する団体名 |
identity.appTitle | string | "FesTime App" | ブラウザの <title> |
identity.appDescription | string | "Real-time status, voting, and management" | SEO用 <meta name="description">、OGP説明文 |
identity.eventStartDate | string (YYYY-MM-DD) | "2026-05-27" | イベント開始の日付判定 (タイムテーブル Day1 連動) |
identity.eventEndDate | string (YYYY-MM-DD) | "2026-05-28" | イベント終了の日付判定 (タイムテーブル Day2 連動) |
navigation.homepageUrl | string | "https://rsu-suba.github.io/FesTime/" | イベント公式サイト URL |
navigation.basePath | string | "/FesTime" | サブディレクトリ配信時のベースパス |
theme.primaryColor.light | string (HEX) | "#1f1f1f" | ライトモード時の CSS 変数 --main-color、主要ボタン枠線 |
theme.primaryColor.dark | string (HEX) | "#f0f0f0" | ダークモード時の CSS 変数 --main-color、主要ボタン枠線 |
theme.backgroundColor.light | string (HEX) | "#ffffff" | ライトモード時の CSS 変数 --bg-color、カード背景色 |
theme.backgroundColor.dark | string (HEX) | "#18181a" | ダークモード時の CSS 変数 --bg-color、カード背景色 |
features.booth | boolean | true | 模擬店・混雑状況の有効化 |
features.vote | boolean | true | 人気投票の有効化 |
features.bus | boolean | true | バス時刻表の有効化 |
features.qa | boolean | true | Q&A 掲示板の有効化 |
features.lost | boolean | true | 落とし物の有効化 |
features.exhibition | boolean | true | 展示物一覧の有効化 |
features.event | boolean | true | タイムテーブル・ステージ進行の有効化 |
features.news | boolean | true | お知らせ配信の有効化 |
features.map | boolean | true | マップの有効化 |
features.closedOverlay | boolean | false | 終了後のオーバーレイ表示 |
bus.defaultFromStop | string | "キャンパス 発" | バスカードの初期選択「出発地」ドロップダウン値 |
bus.defaultToStop | string | "中央駅 着" | バスカードの初期選択「到着地」ドロップダウン値 |
2. 各 JSON マスターデータの変数対応表
public/data/ 配下の各 JSON ファイルで定義される変数の対応表とフォーマット例です。
1. 模擬店データ public/data/booth.json
各模擬店の基本情報、メニュー、および出店場所を定義します。
| キー名 (Key) | 型 (Type) | 設定例 | 対応する UI / 影響範囲 |
|---|---|---|---|
id | number | 1 : 連番 | 店舗一意識別 ID (Supabase データベース同期キー) |
name | string | "ポップコーン" | 模擬店一覧カードの見出し、投票フォームの選択肢名 |
team | string | "チームA" | 出店団体・クラス名 |
place | string | "テント番号1" | 出店場所・ブース番号 |
menu | Array<Item> | [{"content": "100g", "price": 200}] | 販売品目 content と価格 price の配列 |
image | string | "./img/booth/popcorn.jpg" | 模擬店の紹介画像パス |
[
{
"id": 1,
"name": "ポップコーン",
"team": "チームA",
"place": "テント番号1",
"menu": [
{ "content": "100g", "price": 200 }
],
"image": ""
},
{
"id": 2,
"name": "焼き鳥",
"team": "チームB",
"place": "テント番号2",
"menu": [
{ "content": "1本", "price": 150 },
{ "content": "3本", "price": 400 }
],
"image": ""
}
]2. タイムテーブル public/data/events.json
ステージや各会場プログラムのスケジュールを日程別に定義します。
| キー名 (Key) | 型 (Type) | 設定例 | 対応する UI / 影響範囲 |
|---|---|---|---|
day1 / day2 | Event[] | [...] | 開催日程ごとのイベント配列 |
name | string | "オープニング" | タイムテーブルカード内の企画タイトル |
start | string (HH:mm) | "10:00" | 開始時刻 (進行中ハイライト判定) |
end | string (HH:mm) | "10:20" | 終了時刻 (プログレスバー計算) |
{
"day1": [
{ "name": "オープニング", "start": "10:00", "end": "10:20" },
{ "name": "カラオケ大会", "start": "10:40", "end": "11:10" }
],
"day2": [
{ "name": "ライブステージ", "start": "10:10", "end": "12:10" },
{ "name": "吹奏楽部 演奏", "start": "12:30", "end": "13:15" }
]
}3. スマートバス時刻表 public/data/bus.json
往路 (Outbound) と復路 (Inbound) の各停留所および運行ダイヤをマトリクス形式で定義します。
| キー名 (Key) | 型 (Type) | 設定例 | 対応する UI / 影響範囲 |
|---|---|---|---|
Outbound / Inbound | RouteData | { route: [...], time: [...] } | 系統ごとの路線定義 |
route | string[] | ["キャンパス 発", "中央駅 着"] | 経由する停留所名の配列 (乗降地セレクタの選択肢) |
time | string[][] (HH:mm) | [["08:00", ...], ["08:30", ...]] | 各停留所の発着時刻配列 (インデックス順に対応) |
{
"Outbound": {
"route": ["キャンパス 発", "中央駅 着"],
"time": [
["08:00", "09:00", "10:00", "11:00"],
["08:30", "09:30", "10:30", "11:30"]
]
},
"Inbound": {
"route": ["中央駅 発", "キャンパス 着"],
"time": [
["13:00", "14:00", "15:00", "16:00"],
["13:30", "14:30", "15:30", "16:30"]
]
}
}4. 展示企画データ public/data/exhibitions.json
校内各教室や体育館で行われるクラス展示・部活動展示の情報を定義します。
| キー名 (Key) | 型 (Type) | 設定例 | 対応する UI / 影響範囲 |
|---|---|---|---|
id | number | 1 | 展示一意識別 ID (マップ・QRスポット連動キー) |
name | string | "写真展示" | 展示企画のタイトル、投票フォームの選択肢名 |
team | string | "写真同好会" | 出展クラス・部活動名 |
place | string | "教室1" | 展示場所・教室名 |
image | string | "./img/exhibition/ClassA.jpg" | 展示企画の紹介画像パス |
[
{
"id": 1,
"name": "写真展示",
"team": "写真同好会",
"place": "教室1",
"image": ""
},
{
"id": 2,
"name": "フォトスポット",
"team": "実行委員会",
"place": "フォトブース",
"image": ""
}
]5. マップ & QR現在地スポット public/data/spots.json
校内に設置された各 QR コードの ID、場所名、および周辺にある模擬店・展示の ID を定義します。
| キー名 (Key) | 型 (Type) | 設定例 | 対応する UI / 影響範囲 |
|---|---|---|---|
id | string | "1F_NW" | QR コードのクエリ ID ?spot=1F_NW |
location | string | "校舎 1階 北西" | 現在地スポットカードの見出し表示 |
nearbyStalls | number[] | [1, 2] | 現在地周辺の模擬店 ID 配列 (booth.json の id と連動) |
nearbyExhibitions | number[] | [1, 3] | 現在地周辺の展示 ID 配列 (exhibitions.json の id と連動) |
[
{
"id": "1F_NW",
"location": "校舎 1階 北西",
"nearbyStalls": [1, 2],
"nearbyExhibitions": [1]
},
{
"id": "2F_NE",
"location": "校舎 2階 北東",
"nearbyStalls": [3, 4],
"nearbyExhibitions": [2, 3]
}
]6. 投票対象マスター public/data/vote.json
人気投票の対象となる模擬店 (s) および展示 (e) の ID と名称を定義します。
注意: SQLによる自動生成のため、変更が発生すると投票機能が正しく動かない可能性があります。
| キー名 (Key) | 型 (Type) | 設定例 | 対応する UI / 影響範囲 |
|---|---|---|---|
id | string | "01" / "31" | 投票ターゲットの一意識別 ID |
name | string | "ポップコーン" | 投票画面の選択肢名および管理者集計画面の項目名 |
category | "s" | "e" | "s" (模擬店) / "e" (展示) | 投票部門のカテゴリ区分 |
[
{ "id": "01", "name": "ポップコーン", "category": "s" },
{ "id": "02", "name": "焼き鳥", "category": "s" },
{ "id": "31", "name": "写真展示", "category": "e" },
{ "id": "32", "name": "フォトスポット", "category": "e" }
]