Open with the problem you are solving, .net vs laravel not your preferred technology. What kind of user will use this, with what frequency, and how is the job done today? A vendor who grasps the purpose can propose a simpler way to reach it; a team that receives only a list of screens can only web development outsourcing price your assumptions along with the work.
Set out the scope as short scenarios: a walk through each important path. Just as important, state explicitly what is out of scope. An explicit list of exclusions saves more friction later than almost anything else in the document. Indicate as well which decisions are settled and which are still open — honest teams price those differently, and pretending everything is fixed helps no one.
List the constraints. These include systems you must integrate with, existing databases and their quality, security and compliance rules, traffic expectations, target platforms and stacks you cannot change. Where a date is genuinely fixed, say what depends on it: a good team can often cut the right scope to meet it, but only if they know it exists.
Say what the word done means for each item. Testable acceptance criteria do not require formal language: a short list stating what must be true when the feature works is enough. That one addition reduces the review at the end by a surprising margin and removes the most common source of disputes.
To close, state what you want in the response. Ask for an itemised estimate, the assumptions used, the risks the team sees and a low number and a high number. Take a broad range as useful information rather than evasion: it usually points to where your description is thin. Then clarify that area and ask for a new estimate — the second estimate will be far closer to reality.