So this is one of those interesting concoctions that turn up in the places where East meets West.
I believe it’s found in both Singapore and Malaysia and possibly other parts of South-East Asia as well.
“Roti” is Malay for bread, and “John” presumably a convenient catch-all name to refer to Westerners that local hawkers could pronounce.
The story is that some enterprising Malay hawker had a Caucasian customer, possibly called John, who always loved to order an onion omelette to go along with his french loaf when he patronized the stall.
One day, said hawker decided to fuse the omelette with the bread itself, and Roti John was born.
These days, besides merely onions, the omelette will contain some type of minced meat – mutton, chicken or sardines usually, as it’s primarily served by Malay or Indian hawkers that serve halal Muslim food.
It also comes drenched with plenty of oil that the bread gets fried in, and plenty of cheap chili sauce and mayonnaise, and is sort of like that sinful (yet ridiculously tasty) indulgence of a cheap hot dog drowning in more condiments and sauce than actual sausage.
The slightly less unhealthy solution is to make it at home, of course.
Take a baguette loaf.
The authentic version uses a softer inexpensive type of bread, probably more like a Vietnamese baguette than a crusty French one, but meh, I like crusty bread.
Slice it up, preferably going for maximum surface area to be exposed to the eggy goodness.
Make your egg batter with 1-3+ beaten eggs, depending on how much bread you have to coat.
Stir in already-cooked minced meat of your preference. For authenticity, try minced beef, chicken or mutton, flavored with salt and curry powder.
Lazy people like me may prefer to just mash in some sardines or tuna, or in this case, luncheon meat aka SPAM – which being pork, immediately turns it non-halal. Whoops. Good thing I’m not serving it, just eating it all like a glutton. (There goes the low-carb diet for this meal. Two steps forward, one step back.)
If you weren’t starving like me and ready to get to cooking, chopping in some onions and green chili would definitely make it more tasty. Me, I clean forgot.
If you lack curry powder for that authentic feel, just spice it up like your favorite omelette – black pepper, herbs, whatever.
Dip your bread in the egg, dunking one side like French Toast, and spoon some of the meat mixture on that side.
Then toss it onto a frying surface, with as much or as little oil / butter as you dare to use:
Let the omelette side cook through till it doesn’t stick to the pan, then flip it to toast the other side.
When it’s all crispy and toasty, it’s done.
Essentially, it’s savoury French Toast.
For that truly authentic touch, feel free to drown it in sweet chili sauce and mayonnaise.
But really, it tastes fine without it too.