It is using markdowns to generate basic html formatting like h1…h2 tags.
The URL can be custom – as behind the scenes it is mapped to an ID and an ID is unique
If custom URL Name exists, it should (in theory, havent tested) complain.
URL is just a route param where at component “created” lifecycle- fetches data from database for that route param by name.
You could also offer a WSYWYG editor to the user and have them format text the way they want in gui.
Its basically a giant hashmap with unique key as IDs, value as Names
And names are mapped to html content (either in a sepaeate table or same table based on volume of data).
Hope this helps?
(I also know and am aware of dangers of offering wysiwyg editors to users, some editors are crappy, some loose support, some dont allow you to do more fancy things.. but in my opinion are a good starting point)