If you are genuinely interested in creating a working shell, take a look at POSIX shell specification[1] and list of and functionality of command-line utilities[2].
If you implement most of it then you would be able to call your project a POSIX shell.