First of all - Thank you for your answer.

I agree that having orthographic projects makes alot of stuff easiere as I can just extend the clipspace vertices directly. The problem lies in HOW much to extend. The article outlines that you'll need to extend along the worst-case semidiagonal. The author uses the fact that a line in clipspace can be represented as a plane through the camera (0,0,0) in projected space and then dilutes along the plane normal - Then to find the new vertex positions they do a plane - plane intersection using a cross product.

I just don't think this works for orthographic projects as all points on a direction vector from the origin doesn't project to a single point.

For reference here my geometry code for the impl.

// Triangle bounding box.
vec4 f4AABB;
// Compute v0.
vec4 f4CSV0 = m4ViewProj * RF_WORLD * gl_in[0].gl_Position;
f4AABB.xy = f4CSV0.xy;
f4AABB.zw = f4CSV0.xy;
// Compute v1.
vec4 f4CSV1 = m4ViewProj * RF_WORLD * gl_in[1].gl_Position;
f4AABB.xy = min(f4AABB.xy, f4CSV1.xy);
f4AABB.zw = max(f4AABB.zw, f4CSV1.xy);
// Compute v2.
vec4 f4CSV2 = m4ViewProj * RF_WORLD * gl_in[2].gl_Position;
f4AABB.xy = min(f4AABB.xy, f4CSV2.xy);
f4AABB.zw = max(f4AABB.zw, f4CSV2.xy);
// Extend and set AABB.
f4AABB.xy -= vec2(fHalfPixel);
f4AABB.zw += vec2(fHalfPixel);
OUT.f4AABB = f4AABB;
// Compute dialated edges.
vec3 f3Plane[3];
f3Plane[0] = cross(f4CSV0.xyw - f4CSV2.xyw, f4CSV2.xyw);
f3Plane[1] = cross(f4CSV1.xyw - f4CSV0.xyw, f4CSV0.xyw);
f3Plane[2] = cross(f4CSV2.xyw - f4CSV1.xyw, f4CSV1.xyw);
f3Plane[0].z -= dot(vec2(fHalfPixel), abs(f3Plane[0].xy));
f3Plane[1].z -= dot(vec2(fHalfPixel), abs(f3Plane[1].xy));
f3Plane[2].z -= dot(vec2(fHalfPixel), abs(f3Plane[2].xy));
// Compute plane intersections.
f4CSV0.xyw = cross(f3Plane[0], f3Plane[1]);
f4CSV1.xyw = cross(f3Plane[1], f3Plane[2]);
f4CSV2.xyw = cross(f3Plane[2], f3Plane[0]);
// Emit vertex data.
OUT.f3CSPosition = m3Rotation * (f4CSV0.xyz / f4CSV0.w);
OUT.f3Color = f3Color;
gl_Position = f4CSV0;
EmitVertex();
OUT.f3CSPosition = m3Rotation * (f4CSV1.xyz / f4CSV1.w);
OUT.f3Color = f3Color;
gl_Position = f4CSV1;
EmitVertex();
OUT.f3CSPosition = m3Rotation * (f4CSV2.xyz / f4CSV2.w);
OUT.f3Color = f3Color;
gl_Position = f4CSV2;
EmitVertex();
EndPrimitive();