For my final year capstone project, my group of three students, under the supervision of Dr. Wolfram Kahl, built a VNC (Virtual Network Computing) remote desktop viewer in Haskell. A VNC viewer is a client application that allows a user to access and control a remote desktop over a network.
The VNC viewer was written purely in Haskell. We followed the Remote Framebuffer (RFB) protocol and communicated with the server over TCP. We interfaced with the user using the Unix X11 windowing system, using it to display graphics and receive user inputs. I've used the project as a playground to learn Haskell concepts such as monad transformers, typeclasses and concurrent threads.
The whole development process was documented using LaTeX. We generated engineering documents for proposals, requirements, specifications, test plans, test report, and a user guide. We generated source code documentation using literate programming. Several presentations were given throughout the process.