with(['technologies', 'avatarMedia']) ->withCount('projects') ->public() // Former members are kept but hidden by default; the frontend can // ask for them to build an "alumni" section. ->unless($request->boolean('include_past'), fn (Builder $q) => $q->current()) ->when($request->filled('technology'), fn (Builder $q) => $q ->whereHas('technologies', fn (Builder $t) => $t ->whereIn('slug', (array) $request->input('technology')))) ->orderByDesc('is_founder') ->orderBy('position') ->orderBy('name') ->paginate($this->perPage($request, 50)) ->withQueryString(); return PublicMemberResource::collection($members); } public function show(string $slug): PublicMemberResource { $member = Member::query() ->with([ 'technologies', 'avatarMedia', 'projects' => fn ($q) => $q->published() ->with(['technologies', 'coverMedia']) ->withCount(['calls as open_calls_count' => fn ($c) => $c->open()]), ]) ->public() ->where('slug', $slug) ->firstOrFail(); return PublicMemberResource::make($member); } }