Even for solo projects, there are two people to consider:
1) You, today, churning away on the code in question,
2) You, next year, going back to the same code for the first time in many months (for a bug fix, new feature, performance improvement, whatever).
Generally speaking, a class should have a single clear purpose, which is captured by the class name. The operations that the user of the class (you, today & you, next year) needs to understand to meet that purpose, should be public. Anything else the class does, should be private.
One of the key things about private functions and private member variables is that you can revise them all you want without breaking the code that uses the class (unless you introduce bugs, of course). It's only when you change the public members (or the behavior, of coures) that you have to revise the rest of the project.
As other said, stuff should be public if something else needs it. Otherwise, leave it private. That's a note to you-next-year that you're free to revise this without worrying too much about side-effects in other areas. It's also a note to you-next-month that the member in question isn't important if all you want to do is USE the class. It's stuff you can forget about when you're focused on other parts of the project and just want to use the class for whatever purpose it was designed for.