Summary: since you are new, charge fixed but add buffer on your gut instinct. Referrals are amazing. You likely aren't good at estimating, so you don't want to have to come back to them later and ask for more money. That sours the relationship.

You have to look at it from both perspectives (yours and the client's), the market price and your competition.

I've been doing web dev for 10+ years so I'm pretty accurate without having strict requirements upfront. I also make them understand that new scope is not a problem, but something must give - we change the way we do something else, remove another thing, or it will cost more. Most of the time we just compromise on low priority items. So throughout the development, I'm also managing a lot of pieces to make sure we end up near my estimate while remaining flexible to feedback and getting the client both what they need and want.

I've done very well fixed bid. It gives me an incentive to be more efficient. Clients need to know approximately what the all-in cost is at the end of the day. If you asked someone to build you a pool, you would want a fixed cost, even though there are some unknowns. Would you say, yes I'll pay your $50/hr with no end in sight? No, you would need to know a full budget. Otherwise - how do you evaluate multiple bids effectively?

I do time and materials for rescue efforts and maintenance. I can't risk someone else's code killing my margins (and them claiming stuff used to work and now it doesn't). They will try that.

If you know your competition - they may be inflating hours at a low rate which can look good to a client. If you do hourly, they might not understand that your all-in cost is likely lower than the more junior competition. However, if you are both under a fixed scenario, you could be $8k and they could be $7k. The client can fluff out experience and you can still win even though you are more. You can probably do it quicker for a little more if you are more senior. If it's hourly and you are $100/hr and they are $35, it can be very hard to compete. Then those low end devs nickel and dime the client to death over the course of a year and the client comes back to you.

If you aren't good at estimating, you should do fixed and buffer your gut instinct a little (1.25 - 1.5x) when you traffic the numbers. Then you won't have a client who feels burned if you end up spending way more time and $ from your estimate.

Never do a capped bid but only bill for hourly. Some sneaky clients will try to get you to do this. Someone always bears the risk. When it's fixed, you bear the risk. When it's hourly they bear the risk. Whoever bears the risk deserves any upside. They don't get to have a cap which hoses you if it takes longer and also pay way less if you are super efficient. Seems simple, but most people don't understand this.

briandear makes some very good points about billing. I've also seen clients prevent milestones from happening in order to delay payment. Ask for 50% upfront and the rest on a timed schedule. You can always settle on payments in thirds or some other fair structure.

Scope creep can be prevented by you however. Clients don't understand how development works and they aren't good at hitting deadlines like seasoned devs. When they say "can you do this little thing?" - you never say no. You just say, this is outside of the original scope and in order to maintain schedule, I'd like to put it in a "Nice to Have" bucket. Then you fit in those nice to haves at the end if time permits. If time doesn't permit, you have your next month's maintenance effort ready to go. I've put a team at a large automotive company on a Trello board and told them to:

1) File "Nice to Haves" appropriately
2) Only log items into Trello. Any emergencies should be made by cell or text. I don't want email requests.
3) Maintain the tickets in priority

They love it.

You have to program them into YOUR process. Otherwise they will own you.

I have no idea on your skill-set but from what you wrote and the scope, I would guess the market would be somewhere between $30-50/hr if you boiled the project down hourly.