Open comments for this post
Hardware fidelity pass — “wait, is this actually what the real Enigma looks like?”
After the electrical signal path was rendering, I pulled up real Kriegsmarine M4 photos to compare — and the 3D model didn’t hold up. So before adding anything new, this one is a “make it historically accurate first” pass.
What was wrong
-
Floating letters. The rotor alphabet was hovering in mid-air beside each wheel instead of being on it. On the real machine the letters are engraved around the rotor’s circumference and you read one through a small window.
-
The reflector and entry wheel looked fake. They were basically copy-pasted rotors with the letters wiped off. In reality the reflector (UKW) and entry wheel (ETW) are fixed and tucked inside the housing — there are no spinning lettered drums there at all.
-
Lopsided UI. A huge dead zone under the input field was squashing the 3D view into a thin strip.
-
Input/output drift. The I/O readout was center-aligned, so every keypress shoved the existing letters further left. Genuinely uncomfortable to type on.
What I did
- Wrapped the alphabet onto the rotor circumference with engraved grooves, contact rings, and brass window bezels, so you read it through the top window like the real thing.
- Rebuilt the reflector and ETW as smaller dark drums seated in the housing, and set them to stay hidden in the normal view — they’ll surface later in X-ray mode, where the internal wiring belongs.
- Set the 3D viewport to
flex: 1 so it fills the space, and re-framed the camera.
- Switched the I/O readout to a fixed-width, left-anchored layout, so input and output line up and grow rightward instead of sliding around.
A lesson paid for in blood
Squashed a stack of messy single-digit commits into one clean commit — then ran git reset --hard with an uncommitted layout fix still in the working tree and watched it evaporate. Re-did it in two minutes, but the takeaway stands: run git status before --hard. Always.
Next up: the X-ray translucent mode that exposes the internal wiring and lights up the live signal path through the rotors. That’s the part I actually started this whole thing for.
Open comments for this post
I really agonized over how to add UI elements to meet the requirements. I originally intended to create this for display purposes, and the HUD I had made for a school assignment was already somewhat inconvenient. It was quite challenging due to the requirement to add more UI, but I found a way to incorporate features without compromising the aesthetics. I modified the code so that clicking the key descriptions located below the HUD immediately activates the functions. Additionally, instead of using the automatically generated readme.md, I wrote it myself based on my own ideas. While the content might seem AI-driven, I wrote it out by hand since it is also being used for a school assignment presentation.
Open comments for this post
Electrical signal implementation
Open comments for this post
I created an initial version to beautifully implement the existing CLI Enigma on the web.
Open comments for this post
I added details, removed minor bugs, and made it prettier.
Open comments for this post
I installed Fusion to design a case for the PCB; I calculated the dimensions and entered them into the parameters list to streamline future work.
Open comments for this post
I have finished designing the PCB board. It was my first time doing this, so it was tough constantly searching and asking AI, but I am glad to have completed it anyway.
Open comments for this post
Start PCB layout — Create a 19.05mm custom grid and arrange 9 switches in a 3x3 configuration, placing diodes D1 through D9 below each switch in the same direction. Place the XIAO, encoder (SW10), and OLED header (J1) around the grid (detailed positioning in progress).
Open comments for this post
Initially, I designed it more simply than planned, but when I modified it to fit the plan, there were so many errors that fixing them was very difficult. I will wrap up here for today and focus on details and optimization tomorrow.
Open comments for this post
I implemented formulas for the trajectories and masses of the planets, created individual objects to form their orbits, and implemented the UI. The formulas were the most difficult part.