It's entirely possible
The colored font text and the big font title can be achieved with 'Colorful Console' and I highly recommend it.
When I'm building a console based solution and I want nice formatting that's what I'm using. Their site is nice as it demo what it can do. However there is a canveat with the maximum amount of different color you can display at any given time. That limit is 16 diferent color.
This project also allow you to use FIGlet font, that is the big title in red 'FourFort'. Some are included already but you can find more on the internet and can create your own.
http://colorfulconsole.com/
The licence type is MIT and you can find them on Github
https://github.com/tomakita/Colorful.Console/blob/master/LICENSE.md
I compile in net core for both Windows and Linux without any problem
The other part, as I see it is to override some console behavior.
You could just write to the console with Console.Write and output that char so it prepend everything.
or
You can capture the input one character at the time, in a loop that will break only if a certain sequence is entered like 'Enter'. If you erease the input after you capture and then append it to what you kept from previous iteration you could create the illusion of that prefix '>'
Update
I wrote a proof of concept describing the second idea I proposed. Any 'static' content must be added in 'historyInput' variable.
Here is the code:
using System;
namespace BeautifyConsoleSO
{
class Program
{
static void Main(string[] args)
{
char inputPrefix = '>';
bool flag = false;
string historyInput = string.Empty;
string currentInput = string.Empty;
historyInput += "Hello World!";
Console.WriteLine(historyInput);
Console.Write(inputPrefix);
while(flag != true)
{
ConsoleKeyInfo input = Console.ReadKey();
switch(input.Key)
{
case ConsoleKey.Spacebar:
currentInput += ' ';
break;
case ConsoleKey.Enter:
historyInput += Environment.NewLine;
historyInput += currentInput;
currentInput = string.Empty;
break;
case ConsoleKey.Backspace:
if(currentInput.Length > 0)
{
if (!currentInput[currentInput.Length - 1].Equals(' '))
{
currentInput = currentInput.Remove(currentInput.Length - 1);
}
else
{
currentInput = currentInput.Remove(currentInput.Length - 2);
}
}
break;
default:
currentInput += input.KeyChar;
break;
}
Console.Clear();
Console.WriteLine(historyInput);
Console.Write("{0}{1}", inputPrefix, currentInput);
}
Console.ReadLine();
}
}
}
It's not perfect however; it has some flickering effect. If I think of something better I will update it again.
Update 2
Here is a variant; Console.Clear() generate the flickering. This one limit the refresh by filing the equivalent of the console height with new line. I also added the count number in the cursor prefix, to demo it better.
using System;
using System.Linq;
namespace BeautifyConsoleSO
{
class Program
{
static void Main(string[] args)
{
char inputPrefix = '>';
bool flag = false;
int clearConsoleRefreshSpeed = 100;
int clearConsoleTick = 0;
string historyInput = string.Empty;
string currentInput = string.Empty;
string fix = string.Concat(Enumerable.Repeat(Environment.NewLine, Console.WindowHeight));
Console.WriteLine(fix);
historyInput += "Hello World!";
Console.WriteLine(historyInput);
Console.Write(inputPrefix);
while(flag != true)
{
ConsoleKeyInfo input = Console.ReadKey();
switch(input.Key)
{
case ConsoleKey.Spacebar:
currentInput += ' ';
break;
case ConsoleKey.Enter:
historyInput += Environment.NewLine;
historyInput += currentInput;
currentInput = string.Empty;
break;
case ConsoleKey.Backspace:
if(currentInput.Length > 0)
{
if (!currentInput[currentInput.Length - 1].Equals(' '))
{
currentInput = currentInput.Remove(currentInput.Length - 1);
}
else
{
currentInput = currentInput.Remove(currentInput.Length - 2);
}
}
break;
default:
currentInput += input.KeyChar;
break;
}
// attempt to fix flickering associated with Console.Clear()
Console.WriteLine(fix);
Console.WriteLine(historyInput);
Console.Write("{0}{1}", clearConsoleTick + " " + inputPrefix, currentInput);
clearConsoleTick++;
if(clearConsoleTick % clearConsoleRefreshSpeed == 0)
{
Console.Clear();
Console.WriteLine(fix);
}
}
Console.ReadLine();
}
}
}
I don't want to spam this answer but a third variant of this proof of concept could be achieved capturing each line instead of every character on a line.