The Idea
Most people will never visit most places on Earth.
But everyone can have a conversation.
That thought sparked Meridian – an app that connects you with random people from any country, in any language. Think Omegle meets Duolingo meets a digital passport.
How It Works
Pick a place – Tap anywhere on the map
Get matched – Connect with someone who actually lives there
Chat in any language – Real-time translation handles the rest
Collect stamps – Build your digital passport with every conversation
The Tech Stack
I just shipped the waitlist landing page and wanted to share the stack:
Backend API
- .NET 8 Minimal APIs
- PostgreSQL on Render
- Entity Framework Core for data access
Frontend
- Vanilla HTML/CSS/JS (no framework needed for a landing page)
- CSS custom properties for theming
- Intersection Observer for scroll animations
Infrastructure
- Render for hosting (API + static site + database)
- Auto-deploy from GitHub
Some Code Highlights
Spam Protection
Instead of adding reCAPTCHA (which hurts UX), I implemented invisible protection:
// Honeypot field - bots fill it, humans don't see it
if (!string.IsNullOrEmpty(request.Website))
{
Console.WriteLine($"🤖 Bot detected: {ipAddress}");
// Return fake success to not tip off the bot
return Results.Ok(new WaitlistResponse(true, "Success", 999));
}
// Rate limiting - 3 signups per IP per hour
if (rateLimiter.IsRateLimited(ipAddress))
{
return Results.BadRequest(new WaitlistResponse(false, "Too many requests"));
}
UTM Tracking
To see which platforms drive signups, I capture the source from the URL:
const urlParams = new URLSearchParams(window.location.search);
const utmSource = urlParams.get('utm_source') || 'landing-page';
// Later, in the fetch request:
body: JSON.stringify({
email: email,
source: utmSource
})
Now I can share links like mysite.com?utm_source=devto and track conversions by platform.
Lessons Learned
- Render's free tier works great for MVPs, but the cold start (50+ seconds) is rough
- Proxy IPs are tricky – I had to use X-Forwarded-For header for rate limiting
- Honeypot fields are surprisingly effective against basic bots
- Vanilla CSS with custom properties is all you need for a polished landing page
What's Next
- Building the core chat experience with SignalR for real-time messaging
- Integrating translation APIs
- Designing the passport/gamification system
Try It Out
I'd love early feedback! Join the waitlist:
👉 https://meridian-landing.onrender.com?utm_source=devto
And if you're curious about the code, drop a comment – happy to share more details.
Building in public. One commit at a time.
Top comments (0)