Providing such a reference validator/display is indeed on my current to-do-list.
Happy to hear that 
I already put some effort into the validator, but I realised that I need to give the rule engine for the validation one more overhaul.
I just hastily published my current state here, with an online demo here. I prioritised showing the basic workflow over implementing any correct rules from the FEP, so the annotations it currently provides are useless.
There is little documentation about the code yet, but already quite the reliable test set. At the heart of the validator stands a list of rules, that each express certain requirements and also provide test cases for the validation. See this example for validating the timezone property:
{
name: "timezone attribute",
validate: (self) => {
if (self["timezone"] === null) {
return {
"timezone": {
kind: "Violation",
id: "NoTimezoneSet",
text: "The timezone property is either null or doesn't exist",
reference: null,
},
};
} else if (typeof self["timezone"] !== "string") {
return {
"timezone": {
kind: "Violation",
id: "InvalidTimezone",
text: `The timezone {self["timezone"]} is not a string`,
reference:
"https://codeberg.org/fediverse/fep/src/branch/main/fep/8a8e/fep-8a8e.md#time-zone",
},
};
} else if (legalTimeZones.includes(self["timezone"])) {
return {
"timezone": {
kind: "Warning",
id: "InvalidTimezone",
text: `The timezone {self["timezone"]} is not a valid timezone`,
reference:
"https://codeberg.org/fediverse/fep/src/branch/main/fep/8a8e/fep-8a8e.md#time-zone",
},
};
} else {
return {
"timezone": {
kind: "Correct",
id: null,
reference: null,
text: "Valid timezone",
},
};
}
},
tests: [{
value: { timezone: null },
result: { timezone: "NoTimezoneSet" },
}, {
value: {},
result: { timezone: "InvalidTimezone" },
}],
},