Skip to content
Alper Soy

All work

GiddyUp

Booking marketplace for travelers with horses

Built at
Crea Inc.
Period
2022 - 2024
Role
Backend engineer
Links
Product site (opens in a new tab)

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.