The Most Effective Way To Learn TokenVesting For Public/Private Token Sale?

I have been learning how to release my own testnet token with the most up-to-date token sale mechanism. usually new IDOs have their own token vesting mechanism (private sale claim through frontend page while public sale claim through IDO). Since my understanding about solidity is still basic, I dont want to make an overcomplicated testnet token. I have been trying to find different sources to learn but I find it difficult to understand.

I just want to know how can I implement the basic vesting token mechanism with claim token on the frontend for the private sale participants. To put it simply:

Let's say I create token XYZ on rinkeby testnet. The private round price for this token XYZ is 1 ETH = 100 XYZ.

Private round participants will have vesting mechanism as follow: TGE: 10% at listing, after that cliff for 1 month, and then 90% block-by-block linear release over 7 month.

And each private round participant will have to go to my frontend web3 page to "claim" the unlocked tokens and connect their metamask just like how you claim your IDO tokens from launchpad platforms. How do I do this and which openzeppelin code I can import?

I've been trying to learn from various sources, including EatTheBlocks and DappUniversity, but EatTheBlocks doesn't have any specific course material for vesting token like this while DappUniversity actually has a very good youtube playlist about this but their videos are from 2018 which still use old openzeppelin codebase. For example, DappUniversity still use crowdsale/Crowdsale.sol from openzeppelin but I figured out that SC is already outdated and I dont know how to properly use the same SC to be up-to-date with the current solidity version (there are tons of error every time I do truffle compile).

Does anybody know where can I learn more about this effectively? and which openzeppelin code is used for vesting like this?