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.CFrame.UpVector * -1000,
	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(
		GroundY + 3,
	) + (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()

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