Some design goals:

An LTSpice simulation circuit is shown below:

Notes about the schematic:

Below is a simulation trace:

At the very beginning of the trace, the input cap C1 is charging, and the circuit is not switching because the input voltage is below the MPP voltage, which in this circuit is set to ~5V.  Once 5V is reached, the switcher built around the 555 starts.  There is no timing cap in the circuit, the timing is derived from the input voltage going above MPP level (THRS rises above CV) and falling below the MPP level (TRIG goes below CV/2).  The hysteresis is created by R1 and R2 having slightly different values.  The actual switching frequency is dependent on incoming power, input cap size, output cap size and load).

As you can see in the trace, from 4 to ~30 ms, the input voltage stays around the MPP level of 5V, and the output voltage (the blue trace) goes up as the "battery" charges.

When the output voltage reaches 3.6V (battery full level for LiFePO4), the voltage VFB generated by divider R7/R8 reaches 2.5V, which makes reference U3 conduct.  This pulls THRS low, preventing its voltage level from going above CV and this prevents M1 from being turned on, effectively causing charge termination.

So why do we still see switching after ~30 ms?  Because load R6 is discharging the battery, so the voltage drops below 3.6V which re-enables the switcher.  As you can see, the input voltage is not held at around 5V anymore but is allowed to go higher, switching just happens as needed to keep the voltage stable at 3.6V.

In the trace below, we have increased the load by a factor 1000x to 500K:

Because it is not being discharged while also charging, the small battery reaches the "full" level of 3.6V much quicker, and because the load is low, there are much less switching cycles when the battery is full because it is being discharged much slower.

If using a LiFePO4 cell, the battery voltage can be used to power 3.3V circuitry directly, IF the circuitry goes into a low power mode when the voltage falls below 2.9V or so to prevent the battery from over discharging.

If a different "full" voltage for the battery is desired, divider R7/R8 can be adjusted accordingly.

R3 can be adjusted to set a different MPP voltage for the solar panel you use.  You can calculate R3 this way for a desired MPP voltage: R3 = (VMPP * (R1 + R2) / 2.5) - (R1 + R2 + R9)

I hope you enjoy this unusual, "creative" use of a 555 timer in a useful circuit!