At the bottom there is a PCB I designed which is basically a carrier board, an I2C OLED screen fits on to that as well as the LPCXpresso 1114 board There are some buttons and a little slider pot for changing dates and speeds and so on. This PCB also has an array of FETs on it (to drive the LEDs) and some power management stuff (5V and 3.3V from 12V).
This board is connected directly with wires (urgh!) to the LED board. A round PCB which is home to 8 rings of 5 SMT LEDs. The LED board fits around the HDD motor spindle and is held in place with a few dabs of silicone - it's secure but I could get it off again if I had to.
On top of that PCB there are some diffusers and baffles to get the light to go where I want, they were 3D printed by Shapeways. The diffusers have little recesses in them so they snap over the LEDs on the board. The baffles then friction fit between them.
The HDD platter has been replaced with a circle of 1mm black plastic. The black disk has 8 holes cut in it, positioned so they sit above the diffuser rings. The plastic disk was CNC'd by a friend of mine and its held in place using the same screw cap and clamping rings which would hold the regular platter in place.
So the holes in the platter rotate above the illuminated rings at a known speed - I've got the LEDs connected to the LPCXpresso board so they sit across one byte of a hardware I/O port. In software, each rotation of the disk is split in to 360 1-degree slices. If I update the LEDs quick enough then single spots appear on the face of the display as all you see is a flash of light from that ring through the mask.