GiddyUp
Booking marketplace for travelers with horses
- Built at
- Crea Inc.
- Period
- 2022 - 2024
- Role
- Backend engineer
What it is
GiddyUp is a booking marketplace for people who travel with horses. Hosts list farms, ranches and boarding facilities with sites for horses (stalls, paddocks, pasture) and for people (housing or trailer hookups). Guests search by place or along a driving route, request a stay, pay, message the host and leave reviews.
The backend is a NestJS service on PostgreSQL with PostGIS, built by the Crea Inc. team for a US client. I worked on it as a backend engineer during the Crea engagement between 2022 and 2024.
System overview
- Layered codebase (API, application, domain, infrastructure) with commands and queries, one folder per use case.
- Read models as SQL views that separate published listings from host drafts.
- PostgreSQL with migrations run at startup, soft delete and transactions around property, site and reservation writes.
- Redis cache with per-key expiry and pattern invalidation; a distributed lock around reservation creation.
- Auth0 for identity; Stripe Connect accounts for hosts with manual capture and verified webhooks.
- Image uploads validated and stored in S3; Mapbox for routes; a hosted chat service for guest and host messaging; structured logs with request ids.
Engineering
Search along a route
Plan a trip takes a start and an end, fetches the driving route from Mapbox and queries PostGIS for properties within a configurable distance of the road, with amenity filters applied in SQL.
Booking and pricing
A booking manager checks availability per site, applies date-based price overrides and blocked dates, adds fees and enforces the marketplace rules for a valid stay.
Reservation lifecycle
Reservations move through payment, approval, decline and cancellation states. Transitions come from Stripe webhooks, host actions and a scheduled job that closes requests left unanswered.
Drafts and published versions
Properties and sites keep a draft next to the published version. Publishing runs in a transaction and invalidates caches; unchanged content is detected and skipped.
No double bookings
Reservation creation takes a distributed lock per property, so concurrent requests for the same dates cannot both succeed.
Testing and delivery
- End-to-end tests with Jest and Supertest; every run creates a throwaway PostgreSQL database, runs migrations and seeds, and mocks payment, storage, chat and identity services.
- Pull requests run the suite with a coverage gate; load test plans target staging.
- GitHub Actions deploys develop, staging and production to Heroku; hooks run type checks and lint before every commit.
- OpenAPI documentation and a health check endpoint.
Stack
GiddyUp stack: NestJS, TypeScript, PostgreSQL, PostGIS, TypeORM, Redis, Stripe Connect, Auth0, AWS S3, Mapbox, Heroku
My part
- Backend engineer on the Crea Inc. team building the service for the client, 2022 to 2024.
- Worked across the NestJS codebase: modules, PostgreSQL schema and query optimization, Redis caching, REST endpoints and AWS integrations.