Hashlogics
Case study · Out-of-Home Advertising · United States

Rent A Screen

Billboard trucks booked and paid for without a phone call.

You pick a city and a 4 to 8 hour slot, pay by card, and upload your ad. Operators approve each campaign from one console.

Client
Rent A Screen
Industry
Out-of-home advertising / mobile LED billboards
Region
United States
Engagement
Web app · Customer booking portal · Admin operations console
Overview

Rent A Screen runs a fleet of truck-mounted LED screens. Businesses and event organizers rent them by the hour to show their ads in specific cities. Each booking used to run on phone calls and email: which truck was free, which day, who had paid, where the artwork was. Nobody had one clear view of it, so double-bookings and payment mix-ups were always a risk. Hashlogics built the platform that moved the whole booking online.

The challenge

The problem we set out to solve.

01

Customers couldn't see which screens and time slots were free without contacting the team.

02

Nothing stopped two customers from booking the same truck for the same hours.

03

Payment happened offline, with no link between a payment and its booking.

04

Ad artwork often arrived in the wrong size or format and had to be chased.

05

Refunds for rejected or cancelled bookings were done by hand and were easy to get wrong.

06

Trucks, cities, operating hours, and days off weren't managed in one place.

What success needed to look like

  • A customer books, pays, uploads, and gets approved without help from staff.
  • One screen is never booked twice for the same hours.
  • Every change in booking status sends an email.
  • An admin can reject a booking and refund it in one click.
  • Each code push passes lint, tests, a build, and a SonarQube scan.
Our approach

How we delivered it.

  1. 01

    Map the booking before the screens

    We wrote down the booking journey, every booking status, the pricing rules, and what admins needed.

  2. 02

    Design both sides as one product

    The customer booking flow and the admin console were designed together, in light and dark themes.

  3. 03

    Let the server decide

    Before Stripe opens a checkout, the server checks the slot again and works out the price itself.

  4. 04

    Tie each payment to its booking

    Stripe webhooks confirm a payment or its expiry and update the booking. Each event is signature-verified and processed only once.

  5. 05

    Test on every push

    41 automated test files, SonarQube analysis, and Stripe test-mode payments ran next to manual QA rounds.

  6. 06

    Watch it in production

    Sentry tracks errors, and Uptime Kuma polls a health endpoint that checks 6 services.

The solution

What we built.

Rent A Screen is one web platform with two sides: a customer portal and an admin console. As a customer, you choose a city, a date, and a start time, and hours that are busy or blocked never show up as options. You pick a duration of 4 to 8 hours and a free screen unit. Then you say where the truck should park and choose your own power or the on-site generator. Bookings open up to 90 days ahead, and the price updates as you go.

Payment comes first. A booking isn't confirmed until you've paid by card, and an abandoned checkout gives the slot back after 30 minutes. Once you've paid, you upload your ad creative for review. An admin then approves it, asks for new photos, or rejects it, and a rejection refunds your card automatically. Card details stay with Stripe and never reach the platform.

How one booking moves through the platformLive
  1. Availability checkBusy and blocked hours are hidden from the customer.
  2. Server pricingThe server re-checks the slot and sets the price.
  3. Stripe paymentA webhook confirms the payment or its expiry.
  4. Creative uploadFile type, size, and dimensions are checked.
  5. Admin reviewApproved and confirmed, or rejected and refunded.

From payment onward, each step updates the booking status and sends an email, so nobody has to follow up by hand.

Self-service booking by city, date, time, duration, and screen unit, with a live price.
Stripe Checkout that expires unpaid sessions on its own.
Server-side conflict checks, so one screen can't be sold twice for the same hours.
Creative upload into a private bucket, shown only through short-lived signed links.
A booking timeline with 8 statuses that customers and admins both see.
Fleet controls for trucks, screens, and their specs.
Service cities, default operating hours, per-day overrides, and blocked hours, all set by the operator.
User management: search, suspend, reactivate.
Invoices for every paid and refunded booking.
A showcase gallery of past campaigns for new customers.
Admin and customer roles enforced in the database, on the server, and in the interface.
How it's built

Tech stack

  • React 18
  • TypeScript
  • Vite
  • Tailwind CSS
  • React Router
  • TanStack Query
  • TanStack Table
  • Supabase PostgreSQL
  • Supabase Auth
  • Supabase Storage
  • Supabase Edge Functions
  • Vercel

Integrations

  • Stripe Checkout
  • Stripe webhooks
  • Stripe refunds
  • Email via SMTP (Brevo), SendGrid, or Resend
  • Sentry
  • Uptime Kuma

Testing and delivery

  • GitHub Actions
  • Jest
  • React Testing Library
  • SonarQube
  • ESLint
  • Prettier
  • Husky
The takeaway

The hard part of a booking platform is the gap between a slot that looks free and a card that has been charged. Two customers can want the same truck for the same hours. A checkout can be abandoned halfway, and a payment notice can arrive twice. So the server checks every slot again before it takes payment, and an unpaid hold lapses after 30 minutes. On Rent A Screen, payments and refunds are built so that a retry is safe.

By , CEO, HashlogicsUpdated
Start

Let’s deploy working AI into your business.

We build AI agents and automation, ship them into the tools you already run, then stay on under an agreed service level. A senior engineer reads every brief, and your call gets scheduled within 24 hours.

What happens next

  1. 01

    You send a brief or book a call

    Two minutes, whichever you prefer.

  2. 02

    A senior engineer replies within 24 hours

    Not a sales rep.

  3. 03

    Honest scoping, in writing

    And if we’re not the right fit, we say so.

Abdul Basit, CEO of Hashlogics

“I started Hashlogics because too many teams ship a demo, get paid, and disappear. We build to a standard we’d run ourselves — and we stay to keep it running.”

Abdul Basit · CEO · a direct line

Not ready to talk? Take the checklist.

12 questions to ask any AI agency before you sign. They separate a demo shop from a team that ships to production.

Get the checklist

Free · no newsletter