
I wanted my inner thoughts mirror to really go against what we see nowadays. We are being pushed happiness and optimism so much. In the spirit of being a realist, I wanted to create something that reflected one’s actual inner thoughts back to them. In a way, I sometimes think taking optimism too far can skew one’s vision. I wanted to create something real – that perhaps adds a bit of a shock factor. When our thoughts are actually materialized and put in front of us, will we start being more aware and perhaps start reframing?

Tools
- Soldering iron
- Solder wire
- Wire cutters / strippers
- Hot glue gun
- Scissors
- Black tape(will become your best friend! I used an electrical one)
MATERIALS / COMPONENTS
- Arduino Nano ESP32
- 2.4″ OLED screen(I used an affordable one from Amazon, I would suggest looking one up on Adafruit for better quality and reliability)
- Wires
- Solderable breadboard
- USB-C cable (to program the ESP32)
- 6×6 inch two – way see through mirror
- 6 x 6 inch Shadow box frame
- Cardboard/ Old box

This is an AI – generated image I created for my wiring. This was definitely the hardest part. Choosing to buy a more affordable version of my OLED screen was perhaps not the best idea. Understand the difference between I2C and SPI also was hard. But, thanks to Becky, I got the screen to work!
Arduino code
For my code, I initially thought my OLed screen would be controlled by a pushbutton but I realized having it move automatically added to the shock factor and horror experience. My code showed ten different “inner thoughts” of the negative things people say to themselves. I wanted the thoughts to kind of glitch – so there’s a little glitch between each thought where the words scramble and we also see glimpses of words like STOP, HELP, VOID etc. The thoughts are also paced differently to add to the surprise factor.
#include <U8g2lib.h>
#include <SPI.h>
U8G2_SSD1309_128X64_NONAME2_F_4W_HW_SPI u8g2(
U8G2_R0,
/* cs=*/ 8,
/* dc=*/ 9,
/* reset=*/ 10
);
// Short inner-thought mirror quotes (5 words each)
const char* quotes[] = {
"I am not enough",
"I feel so flawed",
"Everyone looks better",
"I hate what I see",
"Why can't I change",
"I'm not worthy",
"I wish I was different",
"Nothing feels right",
"I don't like myself",
"Why do I feel wrong"
};
const int numQuotes = sizeof(quotes) / sizeof(quotes[0]);
int currentQuote = 0;
// Creepy glitch filler words
const char* glitchWords[] = {
"ERROR", "??", "NOISE", "LOOK", "WHY", "#!%", "0000", "VOID", "STOP", "HELP"
};
void drawCentered(const char* text) {
int w = u8g2.getStrWidth(text);
int x = (128 - w) / 2;
u8g2.drawStr(x, 35, text);
}
// Fast glitch flashes
void glitchEffect() {
int flashes = random(4, 10); // random amount to feel alive
for (int i = 0; i < flashes; i++) {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_6x10_tr);
int r = random(0, 10);
drawCentered(glitchWords[r]);
} while (u8g2.nextPage());
delay(random(20, 80)); // erratic timing
}
}
unsigned long nextChange = 0;
void setup() {
u8g2.begin();
randomSeed(analogRead(0));
// set first auto-change time
nextChange = millis() + random(2000, 6000);
}
void loop() {
// time to update quote?
if (millis() > nextChange) {
glitchEffect(); // horror glitch
currentQuote++; // next quote
if (currentQuote >= numQuotes) currentQuote = 0;
// schedule next change (2–6 seconds randomly)
nextChange = millis() + random(2000, 6000);
}
// show the current quote
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_6x10_tr);
drawCentered(quotes[currentQuote]);
} while (u8g2.nextPage());
}

I then bought my materials and realized my 6×6 mirror sat at the back of my shadow box and wouldn’t lean against the inner glass. This led to a big breakdown since my back panel wouldn’t close anymore

So for my next step, I decided to follow Becky’s mirror tutorial on Instructables and tape down my OLED to the bottom right. But, the breadboard was still hanging out.

And, that’s where my black tape and old amazon box came in handy!

With that, I created a mini bread box (as I like to call it) at the back. This had a little peak for me to connect and disconnect my wire and have easier access to the electronics. I intended for my mirror to be more of a stand alone piece than mounted so this ended up working out for me!
In the future perhaps, I will plan out my steps before buying materials to avoid mishaps (even though they might be inevitable). My mirror did end up showing fingerprints – this is something I am going to be more careful about next time too. To also take this to the next level, 3d printing the bread box could be fun too but I do enjoy this look too!
Instructables Link
https://www.instructables.com/Easy-Smart-Mirror-With-a-Twist-/
Video
I hope we all have the courage to face our inner demons and meet ourselves genuinely from a kinder place.
Thank you 💖