You wouldn't believe how common it is for Web designers to buy the domain names for their clients and then never get reimbursed. The problem is that most clients don't want to learn what it takes to set up a domain name, they want you to do it. And you'd probably be surprised at how many clients don't realize that you have to pay for domain names. So, as "Mr. GooRoo" says: always write a contract, or get them to pay for the domain.
I design and maintain the site for my workplace that is nonprofit. Another nonprofit saw the page and liked it so they contacted me. On the side I do site design and more so I figured it would be a great way to get the ball rolling.
I told the other nonprofit that I would do the site for an extremely low price as I knew they were on a budget. The company told me the web server they wanted to use and I had to do the rest. I went out and bought the domain name they wanted and put it on my credit card. When it came time to upload the site, it was a dial-in (through a modem) only server and all I had was high-speed. First I tried to get a family member to upload it for me but I guess with a BSIT they don't teach FTP so I bought a phone line and did it myself. The nonprofit wanted some changes and I would make them and wait 2 or 3 months for feed back.
(and I was only going to charge $150)
Long story short ....
A) Make a contract
B) Don't pay for anything - the client needs to pay
C) Make a time contract
D) Have full access to the server


