Storing variables in module script

You don’t need to store it in the self. It is just unnecessary instances, you can store it in local variables, or remove them at all. For example:

local TweenService = game:GetService("TweenService")
local tweenInfo = TweenInfo.new(0.75, Enum.EasingStyle.Linear)

local Door = {}
Door.__index = Door

function Door.new(server, instance)
	local self = setmetatable({}, Door)

	self.Server = server
	self.Instance = instance
	self.Open = false

	return self
end

function Door:Init()
    -- i have removed these variables, so just using self.Instance.Hinge for example
	local hingeCFrame = self.Instance.Hinge.CFrame
	local openDoor = TweenService:Create(self.Instance.Hinge, tweenInfo, {CFrame = hingeCFrame * CFrame.Angles(math.rad(90),0,0)})
	local closeDoor = TweenService:Create(self.Instance.Hinge, tweenInfo, {CFrame = hingeCFrame})
	self.Instance.Prompt.Triggered:Connect(function()
		self.Instance.Prompt.Enabled = false
		if self.Open == false then
			self.Instance.Frame.Open:Play()
			openDoor:Play()
			openDoor.Completed:Wait()
			self.Instance.Prompt.ActionText = "Close"
			self.Open = true
		elseif self.Open == true then
			closeDoor:Play()
			closeDoor.Completed:Wait()
			self.Instance.Frame.Close:Play()
			self.Instance.Prompt.ActionText = "Open"
			self.Open = false
		end
		self.Instance.Prompt.Enabled = true
	end)
end

return Door

Also you can define types, for example:

--!strict
local TweenService = game:GetService("TweenService")
local tweenInfo = TweenInfo.new(0.75, Enum.EasingStyle.Linear)

local Door = {}
Door.__index = Door

export type Door = {
    Instance: Instance & {
        Hinge: HingeConstraint,
        Frame: Frame,
        Prompt: ProximityPrompt,
    }, -- this will add autocomplete when you type self.Instance.
    Open: boolean,
    Server: any -- idk what it is :>
}

function Door.new(server, instance): Door
	local self: Door = setmetatable({}, Door) :: any

	self.Server = server
	self.Instance = instance
	self.Open = false

	return self
end

function Door.Init(self: Door) -- this will add type autocompletion on self
	local hingeCFrame = instance.Hinge.CFrame
	local openDoor = TweenService:Create(self.Instance.Hinge, tweenInfo, {CFrame = hingeCFrame * CFrame.Angles(math.rad(90),0,0)})
	local closeDoor = TweenService:Create(self.Instance.Hinge, tweenInfo, {CFrame = hingeCFrame})
	self.Prompt.Triggered:Connect(function()
		self.Instance.Prompt.Enabled = false
		if self.Open == false then
			self.Instance.Frame.Open:Play()
			openDoor:Play()
			openDoor.Completed:Wait()
			self.Instance.Prompt.ActionText = "Close"
			self.Open = true
		elseif self.Open == true then
			closeDoor:Play()
			closeDoor.Completed:Wait()
			self.Instance.Frame.Close:Play()
			self.Instance.Prompt.ActionText = "Open"
			self.Open = false
		end
		self.Instance.Prompt.Enabled = true
	end)
end

return Door

If you don’t know what is types, check this: Guide to Type-Checking with OOP