The database of supaboards.com
This is a data repository for managing VTuber, AVTuber information using JSON-based structured data. The repository contains metadata and member information for various VTuber, AVTuber groups, which can be synced to a Supabase database.
- Node.js
npm installCopy .env.sample to create your environment files:
# For development
cp .env.sample .env.local
# For production
cp .env.sample .env.productionThen fill in the following values:
SUPABASE_URL=your_supabase_project_url
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
YOUTUBE_API_KEY=your_youtube_api_keyAfter adding or modifying group data, update the metadata files:
npm run update-metadataThis automatically generates/updates:
data/jobs.json: List of all job categoriesdata/{job_name}/groups.json: List of groups within each job category
Generate a consolidated file containing all member data:
npm run update-masterThis creates:
data/master.json: Flattened list of all members across all jobs and groups
Useful for bulk operations, data analysis, and external integrations.
npm run validate -- data/{job_name}/{group_name}/members.jsonAutomatically syncs all VTuber/AVTuber data to Supabase:
Development:
npm run sync-data:developmentProduction:
npm run sync-data:productionThe sync script:
- Detects all
members.jsonfiles across all job and group directories - Creates new threads or updates existing ones
- Handles YouTube channel info, avatars, and tags automatically
- Displays progress per group and overall summary
- Fork this repository
- Create or edit JSON files in
data/{job_name}/{group_name}/members.json - Before committing, run the following commands:
npm run update-metadata npm run update-master
- Validate your changes:
npm run validate -- data/{job_name}/{group_name}/members.json - Commit all changes (including generated files)
- Submit a pull request
Note: CI will automatically verify that metadata files are up-to-date. If you forget to run the update commands, the CI checks will fail and prompt you to run them.
Each members.json follows this schema:
{
"metadata": {
"job": "Job Name",
"group": "Group Name",
"options": ["Optional tags"],
"source": "Official website URL"
},
"members": [
{
"name": "Name",
"youtube_id": "UC... or @handle",
"options": ["Optional tags"]
}
]
}YouTube Channel Handling:
- Members with
youtube_id: Will be synced to Supabase with channel info and avatar - Members with empty
youtube_id(""): Will be skipped during sync (no YouTube channel exists or not yet discovered)
- Channel ID:
UCxxxxxxxxxxxxxxxxxxx(22 characters after UC) - Handle:
@username
youtube_idmust match:^(UC[a-zA-Z0-9_-]{22}|@[a-zA-Z0-9_-]+)?$(can be empty string)- Required fields:
metadata.job,metadata.group,member.name,member.youtube_id - Optional fields:
metadata.options,metadata.source,member.options
data/
├── schema.json # JSON Schema definition
├── members.template.jsonc # Template for new groups
├── jobs.json # Auto-generated list of job categories
├── master.json # Auto-generated consolidated member list
├── {job_name}/
│ ├── groups.json # Auto-generated list of groups
│ └── {group_name}/
│ └── members.json # VTuber/AVTuber member data
data/schema.json: JSON Schema defining the structure for all member data filesdata/members.template.jsonc: Template for creating new group data filesdata/jobs.json: List of job categories (auto-generated byupdate-metadata)data/master.json: Consolidated flat list of all members (auto-generated byupdate-master)data/{job_name}/groups.json: List of groups per job (auto-generated byupdate-metadata)data/{job_name}/{group_name}/members.json: Per-group member data files
|
dotkarenas |
nasufuu |
yasainet |