Open Source Self-hosted · Go + Flutter · Real-time

Every group chat
is a dispatch center.
Now it acts like one.

Project Neo automatically extracts ride requests and offers from WhatsApp and Telegram groups — no app required for senders. Structured data, matched in real-time.

3 Phases complete
8 DB tables live
E2E Pipeline verified
neo · extract → match → dispatch
WhatsApp Group
Sipho M.
08:42
Extracted Ride
need_ride
route
departs
cost
seats
status
Match Found
matched
driver
eta
status

Rides are being
coordinated blind.

📱
Data trapped in chat
Thousands of ride requests flow through WhatsApp and Telegram groups daily. Without structure, they vanish into scroll history — unmatched and unactionable.
🔍
No visibility, no matching
Drivers can't see all requests. Riders can't see all offers. People miss rides because the right message appeared while they were offline.
⏱️
Manual effort for every match
Coordinators spend hours reading messages, DMing people, and confirming rides. It doesn't scale, and it burns people out.
🚗
Downtown Riders 🏙️
247 members
Amara K.
Need ride to airport tmrw 6am anyone going that way?
Yesterday 11:32
Sipho M.
Ride available now from station to mall N$35
08:42
Tunde O.
anyone going CBD? need ride at 3:30pm today, 2 seats
11:15
Grace N.
going to uni at 7:30 tomorrow space for 3 R20 each
12:08
↑ Unstructured. Unmatched. Unreachable.

Signal from
the noise.

A five-stage pipeline turns informal group chat messages into a structured, real-time ride marketplace — without changing how anyone in the group communicates.

01 / INGEST
📨

Messages Arrive

Workers connect to WhatsApp and Telegram groups using official and community APIs. Every message is captured and stored with full metadata in real-time.

whatsmeow (Go WhatsApp lib)
go-telegram-bot-api
pg_notify for event fan-out
02 / CLASSIFY
🔎

Detect Ride Intent

Not every message is a ride. A lightweight classifier determines whether it contains a ride offer or request before any expensive parsing begins.

Keyword + pattern rules
Skip non-ride messages
parse_status flags in DB
03 / PARSE

Extract & Structure

A two-stage parser (regex → Claude Haiku fallback) extracts ride type, route, time, cost, and seats from free-form text.

Regex-first (zero latency)
Claude Haiku fallback (AI)
Typed ride record in DB
04 / RESOLVE
📍

Map Locations

Group-specific aliases ("Station", "Mall") are resolved to real GPS coordinates via the location_contexts table, giving every ride precise coordinates.

Per-group alias registry
GPS coordinate resolution
Fuzzy alias matching
05 / MATCH
🔗

Pair & Dispatch

Structured rides stream via GraphQL subscriptions to the Flutter app. Drivers see matching requests; riders see available offers. A confirmation closes the loop.

GraphQL subscriptions (gqlgen)
Route + timing match engine
Flutter mobile (iOS + Android)

Built for performance.

📱
Message Sources
WhatsApp · Telegram · Manual
Ingest
⚙️
Workers Service
Go binary · goroutines · message parser
Go 1.25
🔌
Supabase (Local)
PostgreSQL · pg_notify · Auth · Realtime
Self-hosted
🚀
GraphQL API
gqlgen · subscriptions · JWT auth
Go 1.25
📲
Flutter Mobile App
iOS · Android · Real-time subscriptions
In Progress
Why these choices?
Local-first Cloud IPs get blocked
Go backend 2-3× faster than Node
Flutter 1 codebase → iOS + Android
GraphQL subs True real-time matching
pg_notify Zero-latency DB events
Distroless images Minimal attack surface
Stack at a glance
Backend Go 1.25 + gqlgen + Bun ORM
Database PostgreSQL via Supabase
Mobile Flutter (Dart)
Infra Docker + Turborepo monorepo
CI/CD GitHub Actions + Changesets
AI Parser Claude Haiku (fallback)

Full ride-sharing.
Community-native.

Neo is not just a parser — it's a complete ride-sharing platform. WhatsApp, Telegram, and any group chat become the ingress. The destination is a smarter, community-native alternative to Uber.

In Progress
🔗

Message → Driver Matching

Once a ride is parsed from chat, Neo matches it against available drivers or riders using route, timing, and seat data. No dispatcher — the algorithm surfaces the right connection automatically and notifies both sides via the app.

Chat message Structured ride Driver matched Both notified
Coming Soon
🚗

Ride Pooling

Multiple riders heading the same direction, one driver trip. Fill every seat and split the cost automatically. Community carpooling at scale — without coordination overhead.

Coming Soon
📍

Live ETA

Real-time GPS tracking surfaces driver location and estimated arrival directly in the app. No more "5 mins" guesswork in the group chat. Know exactly when your ride arrives.

Planned
🌐

More Connectors

Discord, Slack, SMS — any community where rides are coordinated in plain text becomes a source. The ingress layer is extensible by design.

From idea
to production.

▶ Currently building
Parser error handling & retries
Flutter mobile app scaffold
Telegram connector (next)
PHASE 01
Dev Infrastructure
100% complete
Turborepo monorepo
Bun + Biome + Husky
Conventional commits
GitHub Actions CI/CD
Changesets releases
PHASE 02
Containerization
95% complete
Docker Compose (dev)
Multi-stage Dockerfiles
Distroless images
Health checks
Prod docker-compose
PHASE 03
Core Application
80% in progress
Supabase + 8 DB tables
GraphQL API (full)
WhatsApp worker + parser
E2E pipeline verified
Flutter mobile app
PHASE 04–07
Scale & Ship
Upcoming planned
Ride pooling (split-cost)
Live ETA & GPS tracking
Telegram connector
Monitoring & observability
VPS deployment + SSL

The ride is
waiting to be found.

Project Neo is being built in public. Follow the progress, contribute ideas, or just watch a ride-sharing marketplace emerge from raw group chat messages.