Is a shell a normal CLI application, or is it different from an application that accepts input from standard input, and outputs the result on standard output?
No, a shell just reads from stdin and outputs to stdout. Obviously it does do more than that, but that's the basics.
Rather than just using stdin/stdout, a shell will often open a terminal device (/dev/console or such) so that it can do fancy things with the terminal (colors, hidden input, line editing, etc.).
But shells can also read directly from stdin and write to stdout, and if you want to start writing your own shell, that may be a good way to get started.
A shell reads standard input, writes to standard output/error as appropriate, and executes other programs. If you are interested in what it takes to write one, I would recommend reading "UNIX Systems Programming" by Kay Robbins and Steve Robbins. I haven't read this version, the original copy was named "Practical UNIX Programming". It does contain sections devoted to process management that include writing a very basic shell. If you haven't read "Advanced Programming in the UNIX Environment" by Stevens, then I would suggest reading it as well.