I have taken three major groups: System, testing, support. Each of these will change the timeline and cost of the project. Support is an after-delivery agreement, they may want testing, or run into problems that I have the answer for. This is also the cost of producing the manual.
There is testing, I estimate this system should be tested over 5 days with different stresses.
The system is broken into hardware and software groups. Hardware expenses are quite obvious: networking, connecting devices, the server/machine it runs on. Your needs may be greater if you are in the hardware world, but all professional projects I'm involved in are software-based.
The software is broken into the OS configuration, tools related to the platform (like setting up Apache), and the application we are creating. The application will be composed of logic and storage.
The logic will require specific things such as a framework, a UI, system inputs, and debugging. The storage exists of either a DB design, a flat file design, and any reporting requirements.
I found it best to draw the above as a hierarchy. I then estimate time for each seperate component, and if there's something I don't know how to estimate I need to clear it up.
The difference? My "geek estimate" (as posted by frossie) was about two weeks, and after doing this above method, it actually is looking like 2 months and 2 weeks of time. I built the time requirements using a gantt chart.