Axto
A marketplace platform for auto parts. Mobile app for buyers, web dashboard for sellers, all backed by Supabase.
What it does
Axto connects auto parts buyers and sellers. Buyers browse listings through a React Native app; sellers manage inventory, process orders, and track analytics through an Astro web dashboard. Vehicle compatibility matching ensures you only see parts that fit your car.
Architecture
Two frontends, one backend:
- Mobile app — React Native (Expo). Browse by vehicle, search by part, save favourites, direct messaging with sellers. Push notifications for price drops and saved searches.
- Admin dashboard — Astro with React islands. Inventory management, order fulfilment, sales analytics. Responsive — works on desktop and tablet.
- Backend — Supabase handles auth, Postgres with Row Level Security, storage for part images, and real-time subscriptions for messaging.
Key decisions
Vehicle compatibility as a graph problem. Instead of tagging every part with make/model/year (which is thousands of combinations), we modelled it as a compatibility matrix — each part has a set of "fits" rules, and the query engine walks the graph. More work upfront, but adding a new vehicle doesn't require retagging every part.
Supabase RLS for multi-tenant data. Every row in the database has a seller_id, and Row Level Security policies enforce that sellers only see their own orders and inventory. Buyers see only public listing data. This means the mobile app queries Postgres directly — no custom API layer needed for reads.
Scope management is a skill, not a constraint.
The hard parts
Search. Postgres full-text search is fine for text, but auto parts have VIN-specific queries, OEM numbers, and fuzzy brand matching. We ended up with a hybrid: Postgres tsvector for full-text + a custom matching layer for compatibility queries.
Image moderation. Users upload part photos. We built an automated moderation pipeline using a third-party API, but the false-positive rate on engine parts vs. prohibited items was… educational.
Screenshots
What I learned
This was my first full-stack marketplace and the project where I learned that scope management is a skill, not a constraint. The feature list kept growing — reviews, messaging, notifications, analytics — and each one taught me something about state management across platforms, real-time data sync, and why you don't skip writing integration tests for your Stripe webhook handler.
Also: React Native's FlatList performance with 10,000+ parts listings is genuinely impressive. Astro's partial hydration meant the dashboard felt instant despite having React components embedded in static pages.