...Google will move all website to mobile-first index until the end of this year.
My understanding is that this is already done, all sites are now moved to mobile-first indexing.
I want to add a "Read more" button and hide some of the text (the visible part will contain the main keyword). What is your opinion on this practice and what is the best approach?
It is unclear as to how Google treats this situation. On one hand they have said that hidden text will be demoted, on the other hand they have said that it will be indexed. The general idea is that if a user clicks a link from search and is expecting information about a widget, then the page should show the information without the need for additional user interaction. As such, I would be very reluctant to hide text that is main content of the page, regardless of whether or not Google will index it. If the page is about widgets, then that should be shown. You should instead look to "hiding" secondary content.
The read more button will be made with Javascript I guess.
You can't "guess" you need to be sure, JS implementation of these types of UI patterns are varied, you need to know and fully understand how this is implemented. The minimum is that the critical content should appear in the browser (not necessarily, to the user) before page load. Anything else, makes things considerably more complicated in terms of ensure that Google bot will see, crawl and index the content.
Ideally a simple read more, show less button can be implement in pure CSS.
Another common approach to product descriptions is to show leading paragraph that summarizes the product, which should contain the main "keywords", the use a show more button that goes into more detail.
Note "keyword" in quotes, I write this because I am of the opinion that the concept of "keyword" is dead. Google and most other search engines have moved past this, using NLP concepts to derive meaning from webpages. One no longer needs to have pages with every single word variation with the same meaning (eg: vehicle, car, automobile). Write a clear natural description that is understandable by your users and Google will do the rest. Example with a description like "Our exotic sports car are the fastest available on the market", Google will know that your site is about luxury automobiles, you do not need to add another line saying "These luxury automobiles provide the best performance". My point is that uf your description has been written to include several possible variations of the same search terms, then you can likely eliminate this and make your description more succinct and no longer require show more buttons at all, thus making it easier for both humans and bots.
One final, addition, if you really want to be sure that Google knows what your page is about then you can implement schema markup, which will be hidden to users and remove most of the guess work for the bots.
My website frequently gets traffic for "keywords" that are related to my content but do not appear anywhere on my site.