For ability to replicate switch on-off packets, I've built 433 MHz sniffer on breadboard. This subproject involved ESP32 and XY-MK receiver module. Then, I've used ShowReceivedCode.ino example to retrieve unit address and ID. It took me a while to understand protocol that was used by my remote controlled sockets, but eventually I've ended up with working prototype.
Printed Circuit Board
FS100A moudle was easy to use, but there was a problem to achieve small PCB size using this module. I've started to find an alternative. I have read a lot of various RF module's datasheets and hopefully ended with RFM110W-433S1. Theoretically I didn't know if it will work or not, but had a lot of hope.
Simultaneously, just after ordering these modules on Aliexpres, I've started KiCad schematic and PCB project. I knew that I wanted to use ESP8266 and RFM110W. I've also placed two leds, first to indicate if we are in config mode, second to indicate RF transmission, like it's done on ethernet ports in your PC.
Worst part. Waiting.
It took about three weeks from design finish to receive parcels containing RF modules from Aliexpress and fabricated PCBs from JLC-PCB. Eventually all of them arrived in excellent quality, well packed in anti-static bags.
I'm not a soldering professional, so I had to go with "trial and error" method. Hardest part was to solder USB port, because I haven't done this before. However, thin soldering iron did the job. Everything has been soldered using solderpaste (with flux included). Every other small element has been soldered with hot air gun.
The software novel
I've started with Blynk library. It was a lot of mental pain for me. It is great example how to NOT create libs. Want to use Blynk in more than one C++ class? Forget about it! Without workarounds it is not possible. Anyway, I've spent two weeks due to frequent disconnections/reconnections to Blynk cloud server.
I was about to scream "I surrender", but I realized, how good MQTT is and quickly decided to drop Blynk.
MQTT was very good, but still it was reconnecting every few hours. After trial and error with manual etharp_requests and other crazy things and hacks, I tried to compile my code with LwIP 1.4 instead of 2.0. Simultaneously I've changed MQTT broker to cloudMQTT.
These changes ended up with great reliability improvement.