The best way is Pickit3 in my opinion, but if you want to learn..... hier my proposal for the HW interface:
1) There are many desings online to program icsp through serial port (RS232), look for some one you like it, next step will be to modify it. Hier an example.
2) Depend on how big are the HEX file that you want to load, look for some PIC in the market with enougth EEPROM and two UARTs ( Microchip has cheap PIC with 1024 or more with two UARTs like the PIC18F25K80). Connect the uart1 to the serial port to the computer and the UART2 to the circuit from 1).
3) Add to the circuit a battery supply ( for example with four AA bateries to get more than 5V, if your Mcus allow programming with lower voltage, the adjust it, may be you need to add a voltage regulator LM7805 or similar)
4) Add a swicht to one of the free i/o pins of the PIC to generate a INT_X interrupt to ativate the icsp programming reading the EEPROM and sending throug UART2. (PIC Rutine must be programed)
5) You need to program or look for a rutine to send the file from PC the PIC_EEPROM (INT_RDA). (PC rutine and PIC rutine must be defined)
May be if you copy binary data into the EEPROM from PC (listening MPLAB IPE Microchip aplication or similar) and later load directly this data in the ICSP circuit in the same way it could work, but I suspect it is very unlikely, on other hand you must load the HEX file into the EEPROM and implement the ICSP "protocol" according manufacturer especifications into the PIC-EEPROM ( it would be probably a huge effort) , for example for Microchip PIC24 the intructions for ICSP implementation are in section 3.0 datasheet.