Every project is at least a little bit different and as a freelance designer without your own in-house development team, you often have to adjust to whoever you’re working with. It’s a really good idea to ask some questions before you even start doing any work. Questions such as:
Usually, knowing answers to these questions will help you, the designer, too. For example, I am using Figma for most of my projects, however if the developer that I’m working with is much more used to using Adobe XD or Invision studio when handling design assets, I may save some time and effort for myself and start creating the design in one of those tools. Or, if we can’t find a common ground, find an easiest solution that works for both of us.
If the developer is using a front-end framework in the development process, then you can prepare your design files to be more suitable for that framework. That can, again, save you some time and energy, and will definitely speed up the overall process. If you’re new at design and you’re thinking “What on Earth is a front-end framework?”, trust me - most popular frameworks have a lot of templates and explanations of their grid systems at their websites.
“Asking these questions may be daunting, but ultimately it saves you a lot of time and effort if you know answers to them.”
This can be a bit daunting at the very beginning of your career, however in my opinion, it’s better to ask these questions sooner rather than later. It will give you much more time to research what’s the best way to prepare design for some of these systems, and will save you time in the end if the developer asks for revisions.
With that information in mind, you can start preparing your file. How and when in the design process you’re going to do some of these steps is fully up to you, but in the end, you should include them somewhere in your design file:
Typography
Any UI design tool allows you to save some style guides one way or another, so use that to your own advantage. However, to make the developers job easier, I also like to do this separate page that lists all of the typography styles and where to use them.

To prepare typography styles well for the development, it's important to use the common phrases or categories those styles typically fall into (H1, H2... through H6 or H7, Caption, Body, Button, Link, Subtitle... can depend on framework).
Behavior
Any good design includes some elements of UI behavior - or different states of various objects, depending on the interaction or responsiveness. This can be explained in various different ways - most commonly by either text or prototype.
In some of my first projects, I’d fail to properly explain these things to the developer. For example, I would create two frames: homepage 1 and homepage 2, where homepage 2 would have one thing changed, and I would think it’s clear enough that this behavior happens as a person is hovering over that element (because i named that element: hover).
Looking at that from a perspective of someone who has not been involved in my mind process while making the design, it’s incredibly difficult to notice that small difference between two artboards. So, don’t take things like that for granted and simplify them however you can.

These things would be the starting point on how to prepare your designs for development. I am, for one, excited to learn more about this topic as I'm continuing to work as a freelance designer, and I hope to be able to share more of my advice in the future.
How about you? I'd be more than happy to read your own tips - or just thoughts about the ones I've shown. The designer-developer relationships have more room to grow and the more information we share, the better we can prepare ourselves for our future cooperation.