What happens: your app runs behind Replit's proxy, so every request's direct IP is the proxy's IP. All users look like one user → one shared limit → 429 for everyone.
trust proxy tells Express to read the real client IP from X-Forwarded-For. But true means 'trust the whole header', and a client can put anything in it, so an attacker rotates fake IPs and bypasses your limit.
Use a number instead, the count of proxies in front of you:
app.set('trust proxy', 1)Then verify: add a temporary /ip route that returns req.ip, open it from your phone and laptop, you should see two different real IPs.