I'm stuck on a voxel game. it's alot harder than i expected!

so like for the past couple weeks, I was working on a voxel game like minecraft. Problem is, i have no idea how to do it optimally. im not gonna through out scripts in here right now, but here’s the basic idea:

the client walks into an unexplored chunk and a chunk needs to load
so it fires a remote event to the server
the server loads the chunk in a folder with all the blocks (parts) inside to workspace
that’s automatically replicated to the client.
i don’t want it automatically replicated to the client

here’s another method i tried:

same as the first one but chunks are loaded into replicated storage, allowing the client to load chunks so the client workspace is different than the server workspace
an issue i got from this is that on the client, the unloaded chunks in replicated storage build up over time, and i go look at each chunk and check if it should load into workspace

the second method sems more methodical but it’s not performant, but as seen in this post i also made a while ago which nobody answered, i need culling!!!

i want my blocks to be completely transparent, and only show decals on visible faces. me trying to do that kinda doesn’t work. this is because all the parts are in replicated storage, and my method i wanna use is workspace:GetPartBoundsInBox(). that can only be done in workspace.

that method is also better explained this post.

i just need help!! i’m very confused. i’m almost gonna give up. can someone drop a method or try to help? im like very desperate.