Hoverboard physics are quite janky and unreliable

I have an issue with hoverboard that I want to just be able to fly around smoothly, however it can get stuck in things, flung into the air and become infinitely stuck
ezgif.com-gif-maker (72)

function HoverboardController:Update()
	if not self.Board then return end
	
	local Character = Player.Character
	if not Character then return end
	
	Params.FilterDescendantsInstances = {self.Board, Character}
	
	local Raycast = workspace:Raycast(
		self.Board.Position,
		self.Board.CFrame.UpVector * -1000,
		Params
	)
	if not Raycast then return end
	
	local Part = Raycast.Instance
	local GroundY = Part.Position.Y + (Part.Size.Y / 2)
	
	self.Board.BodyPosition.Position = Vector3.new(
		self.Board.Position.X,
		GroundY + 3,
		self.Board.Position.Z
	) + (self.Board.CFrame.RightVector * self.Movement.Value)
	
	self.Board.BodyGyro.CFrame = self.Board.CFrame * CFrame.Angles(0, self.Rotation.Value, 0)
	
	Character.HumanoidRootPart.Velocity = Vector3.new()
end

I dont know much about making something like this but. You could try clamping the rotation value.