OpenWRT is a free open source Linux based operating system aimed at networking hardware.
Every time the system is upgraded to a newer version using the so called Sysupgrade BIN image every package the user manually installed gets lost; this makes the upgrade process very tedious especially if one does not properly write down all the customization he has made.
I don’t use many custom packages but QoS, DNS-over-HTTPS, USB support and vnstat are must have.

Securing LuCI with HTTPS

Install luci-ssl and luci-app-uhttpd and restart uhttpd with /etc/init.d/uhttpd restart.

QoS

Install qos-script and luci-app-qos

USB support

Install kmod-usb-storage, usbutils, block-mount.
Mount points can be specified from LuCI’s menu System -> Mount Points; in case the drive is a flash drive it probably is a good idea to specify noatime in the advanced mount options.

vnStat

Install luci-app-vnstat.
vnStat temp files target path can be configured by editing the following file:

$ vi language=/etc/vnstat.con

DatabaseDir "/mnt/usb/vnstat"

Wake on LAN

Install etherwake.
To send magic packets use the following command:

# replace ff:ff:ff:ff:ff:ff with a wake-on-LAN enabled server NIC MAC address #
etherwake -b -i br-lan ff:ff:ff:ff:ff:ff

DNS over HTTPS

Install dnsmasq, https-dns-proxy and luci-app-https-dns-proxy.
Navigate to LuCI -> Network -> DHCP and DNS to configure Dnsmasq.
Navigate to LuCI -> Services -> HTTPS DNS Proxy to configure https-dns-proxy.