Well, if you want to make it yourself, I would say make it as bright as you want.
You will light up either one row out of 7 at a time, or you'll light up one column at a time out of 5...
So any led will light up 1/7 or 1/5 of time, which means you can run the leds at currents higher than default current, because they'll have time to cool down.
For example, lots of leds rated for 20mA will also be rated for 100mA at 1/10 duty cycle (ex run for 10ms, off for 90 ms or something like that) so you could configure the default current at 40-50mA and as long as you don't screw up your code and keep looping through the leds, you'd be fine.
A slightly better solution would be to use led driver chips.
The easiest would be to use chips designed to run seven segment digits... lots of chips are designed to control between 4 and 16 "digits" , with anything between 7 and 16 "segments". You just tell the chip which segments to light up, and the chip will take care of looping through the digits updating the segments.
So in your 7 x 5 matrix , you could treat each group of 7 leds as the segments of a digit, and therefore you have 5 digits with 7 "segments" each.
TM (Shenzen Titan Micro) makes a bunch of seven segment led drivers that are very easy to use.
For example
TM1640B can do 16 digits, each with 8 segments :
https://www.lcsc.com/product-detail/TM-Shenzhen-Titan-Micro-Elec-TM1640B_C2962200.htmlYou could literally have 3 8x5 matrixes controlled by a single chip, or you could link together 3 "grid" pins at a time so that each of the 5 rows/columns will light up 3/16 of the time.
TM1638 can do 8 digits, each with 10 segments :
https://www.lcsc.com/datasheet/lcsc_datasheet_2401261512_TM-Shenzhen-Titan-Micro-Elec-TM1638-TA2009B_C20611979.pdfSo you'd have 16 5 led columns, basically 2 7x5 matrixes.
TM1629B can do 8 digits, each with 14 segments :
https://www.lcsc.com/datasheet/lcsc_datasheet_1809191914_TM-Shenzhen-Titan-Micro-Elec-TM1629B_C46800.pdf So you could use 14 segments to control 2 rows of 7 leds .... basically you have 16 7 led lines, so you could control 3 7x5 matrixes with a single chip
All these are super cheap, like 10-20 cents ... cheaper than buying the pnp transistors and resistors and use much less space on a circuit board. They're also not that hard to solder on a prototyping board, you could just bend the leads or use a small soic / tssop to DIP adapter board..
There's also DIP versions but more limited ex TM1637 (6 digits, 8 segments per digit) :
https://www.lcsc.com/datasheet/lcsc_datasheet_2401261512_TM-Shenzhen-Titan-Micro-Elec-TM1638-TA2009B_C20611979.pdf or TM1630 (5 digits x 7 segments or 4 digits x 8 segments ) :
https://www.lcsc.com/datasheet/lcsc_datasheet_2209231730_TM-Shenzhen-Titan-Micro-Elec-TM1630_C5174529.pdfThere's also dot matrix" led driver chips. For example, have a look at
IS31FL3738 :
https://www.digikey.com/en/products/detail/lumissil-microsystems/IS31FL3738-ZLS4-TR/14308389It's a 8 x 6 matrix driver, so you could easily do a 7x5 or 8x5 or 8 x 6 matrix - you may want 8 pixels because it makes it easier to make custom "fonts" / "characters"
Compared to the previous drivers, this driver lets you compare the maximum current through a single resistor, then you can set the brightness of each individual led to whatever level you want. So you can for example set the maximum current to something like 40mA because the actual average current on a led will be 1/6 or 1/8 of that)