Creating a Truncated Icosahedon via scripts

Im trying to make a truncated icosahedron via code buuut i keep having orientation issues
I need it to have a mesh per face and to be generated via code.

local sphereRadius = 1.8

local function placeShape(type, position)
	local shape = script[type]:Clone()
	local normal = position.unit
	local upVector = Vector3.new(0, 1, 0)

	local rightVector = upVector:Cross(normal).unit
	if rightVector.X < 0 then
		rightVector = -rightVector
	end

	shape.CFrame = CFrame.fromMatrix(position, rightVector, normal)
	shape.Parent = workspace
end

local function create(radius)
    local phi = (1 + math.sqrt(5)) / 2  
    local scale = radius / math.sqrt(1 + phi^2)

	local faceCenters = {}
	local pentagonCenters = {}
	local vertexToFaceCenters = {}

    local vertices = {
        Vector3.new(-1,  phi, 0) * scale,  Vector3.new(1,  phi, 0) * scale,
        Vector3.new(-1, -phi, 0) * scale,  Vector3.new(1, -phi, 0) * scale,
        Vector3.new(0, -1,  phi) * scale,   Vector3.new(0,  1,  phi) * scale,
        Vector3.new(0, -1, -phi) * scale,   Vector3.new(0,  1, -phi) * scale,
        Vector3.new(phi, 0, -1) * scale,    Vector3.new(phi, 0,  1) * scale,
        Vector3.new(-phi, 0, -1) * scale,   Vector3.new(-phi, 0,  1) * scale,
    }

    local faces = {
        {1, 12, 6}, {1, 6, 2}, {1, 2, 8}, {1, 8, 11}, {1, 11, 12},
        {2, 6, 10}, {6, 12, 5}, {12, 11, 3}, {11, 8, 7}, {8, 2, 9},
        {4, 10, 5}, {4, 5, 3}, {4, 3, 7}, {4, 7, 9}, {4, 9, 10},
        {5, 10, 6}, {3, 5, 12}, {7, 3, 11}, {9, 7, 8}, {10, 9, 2}
    }
	
    for i, face in faces do
        local a = vertices[face[1]]
        local b = vertices[face[2]]
        local c = vertices[face[3]]
        local center = (a + b + c) / 3
        center = center.unit * radius 
        faceCenters[i] = center
	end
	
    for i = 1, #vertices do
        vertexToFaceCenters[i] = {}
	end
	
    for i, face in faces do
        for _, vertexIndex in face do
            table.insert(vertexToFaceCenters[vertexIndex], faceCenters[i])
        end
    end

    for i, centers in vertexToFaceCenters do
        if #centers == 5 then
            local sum = Vector3.new(0, 0, 0)
            for _, center in centers do
                sum = sum + center
            end
            local avg = sum / 5
            avg = avg.unit * radius
            table.insert(pentagonCenters, avg)
        end
    end

    for _, center in faceCenters do
        placeShape("Hexagon", center)
    end

    for _, center in pentagonCenters do
        placeShape("Pentagon", center)
    end
end

create(sphereRadius)