Making reliable estimates is quite tough, at least for me. What helps most is experience - e. g. if I have done app X in time Y, then doing app XZ might take YZ.
If I need to make an estimate for a project which I never have done before even not a similiar one I usually talk to more experienced developers and ask them what might be the main difficulties etc. and then I ask myself how long it would take me based on my current work experience and skills. So, after all it really depens on your personal skills / the skills of your team members and their experience.
On large projects I try to break it down in the smallest pieces, then estimate each of them, add them, then think about how much boilerplate code must be written, how long it takes e. g. to get the enviroment set (setting up server etc.).
I know that are very vague hints on how to do this, but imho your best bet is asking some experienced dev to help you with this task.