Hi @zam,
Welcome to the community.
If you are creating an ERC20 I suggest looking at Points to consider when creating a fungible token (ERC20, ERC777)
OpenZeppelin Contracts include Crowdsales in v2.x (Crowdsales were removed in v3.x)
You could look at extending/modifying a Crowdsale along the lines of PostDeliveryCrowdsale
Alternatively you could create a TokenTimelock for each beneficiary, though you would likely want to create minimal proxies to reduce the gas cost of deploying multiple contracts.