← All work
Product · 2019–23

Backend API for a Carpooling & Local-Places Community App

A seaside-town tourism / community app

Overview

This is the server-side API powering a seaside-town tourism and community mobile app, combining ride-sharing (carpooling) coordination with a directory of local places and offers. It is built on AdonisJS with a relational data model and realtime group chat.

The Challenge

A small coastal community needed a single backend to coordinate shared rides between residents and visitors, surface local places and offers, and let travel groups communicate in real time, all behind authenticated, mobile-friendly endpoints.

What We Built

A structured AdonisJS API organized into Controllers, Models, Services, Middleware and Commands. HTTP controllers cover the core domains: Users, PlaceListings, Offers, Map, Rooms (travel rooms) and Notifications. The Lucid migration history models users and auth tokens, place categories and place listings, travel rooms, travel offers, travel intentions and the room/user join tables, plus a notification store. Realtime group chat for travel rooms is delivered through Pusher ChatKit. The service ships with a Dockerfile and build script, and supports both PostgreSQL (production) and SQLite (local/dev).

Technologies & Approach

AdonisJS (framework, auth, bodyparser, CORS, Ignitor) with the Lucid ORM over PostgreSQL, SQLite for local development, and @pusher/chatkit-server for chat. Axios and jsonpath support outbound integrations and payload shaping. The MVC structure keeps routing, business logic (Services) and data access cleanly separated.

Outcome / Impact

Provided the authenticated backbone for the companion mobile app and admin dashboard, exposing rides, places, offers, invitations and notifications through a single consistent API and powering in-app group conversations.

Capabilities Demonstrated

  • Designing a domain-rich REST API (rides, places, offers, notifications) on AdonisJS
  • Relational schema design and migrations with Lucid ORM
  • Integrating third-party realtime messaging (Pusher ChatKit)
  • Dual-database setup (PostgreSQL / SQLite) with Docker packaging
  • Token-based authentication and middleware-driven request handling
More work See all →