I have a router but with a bearing on the bottom - it came in handy for finishing off a custom scratch plate.
I’d already routed the pickup cavity, so in effect that became my template. I cut out to approximately the correct size and shape in the scratch plate, then screwed it to the body, lowered the router bit into the cavity, and simply followed the contour of the cavity with the bottom bearing to finish off and neaten the hole in the plate.