Maybe this can help you get started. It is a JSON list I have for filenames I intend to use across multiple systems.
{
"Windows": {
"characters": "<>:\"/\\|?*",
"max_file_name_length": 255,
"max_path_length": 260,
"additional_restrictions": "Filenames cannot end with a space or a period.",
"reserved_names": [
"CON",
"PRN",
"AUX",
"NUL",
"COM1",
"COM2",
"COM3",
"COM4",
"COM5",
"COM6",
"COM7",
"COM8",
"COM9",
"LPT1",
"LPT2",
"LPT3",
"LPT4",
"LPT5",
"LPT6",
"LPT7",
"LPT8",
"LPT9"
]
},
"Mac": {
"characters": ":",
"max_file_name_length": 255,
"max_path_length": 1024,
"additional_restrictions": "Using `/` in Finder treats the file as a folder.",
"reserved_names": [
"._",
".DS_Store"
]
},
"iOS": {
"characters": "/:",
"max_file_name_length": 255,
"max_path_length": 1024,
"additional_restrictions": "Filenames cannot start with a dot (.)",
"reserved_names": []
},
"Android": {
"characters": "/",
"max_file_name_length": 255,
"max_path_length": 4096,
"additional_restrictions": "Older versions have specific restrictions depending on the file system.",
"reserved_names": []
},
"*nix": {
"characters": "/",
"max_file_name_length": 255,
"max_path_length": 4096,
"additional_restrictions": "Avoid using control characters and non-printable characters.",
"reserved_names": []
}
}