All work

What's Happening Australia

A community platform where Australians find local businesses and events, book services and buy tickets.

Client
SunyaVerse
My role
Sole full-stack developer, design to deployment
When
Jan 2026 – present
Links
whaustralia.com (opens in a new tab)
What's Happening Australia home page, with a search bar for services, map area and time above a featured event banner.
Live site, captured October 2026.

The problem

Local businesses needed one place to be found, take bookings for their staff, and sell tickets to their events. Customers needed to search by service, place and time, then book or pay without phoning anyone.

What I built

  • Business listings, deals and reviews, with search by service, map area and time.
  • A booking system that knows each employee's weekly shifts, one-off changes and days off, and only offers times when someone is free.
  • Event ticketing: ticket types and promo codes, Stripe payments, QR tickets, and a door scanner that checks tickets in.
  • A business dashboard with today's and upcoming bookings, appointments and paid sales for the last seven days, and ticket redemptions.
  • A versioned mobile API for the React Native and Expo app, which shares the same backend as the website.

How it holds up

Faster

  • Location search runs on a MongoDB geospatial index, so the database sorts results by distance.
  • TanStack Query caches responses in the browser and avoids repeat requests.
  • Images are stored in Amazon S3 and resized by next/image before they reach the visitor.

Safer

  • Every API route is rate limited with Upstash Redis, keyed per signed-in user on mobile and per IP otherwise.
  • Stripe webhooks are rejected unless their signature checks out.
  • Mobile refresh tokens are stored hashed, rotate on every use and can be revoked. Passwords are hashed with bcrypt.
  • Forms and APIs are protected against CSRF and XSS.

More reliable

  • A booking takes a short-lived lock backed by a unique index, so two customers can never take the same staff member's slot.
  • Tickets are held for five minutes during checkout, then released automatically if payment does not finish.
  • Payment confirmation is safe to run twice: whichever of the webhook or the browser finishes first creates the purchase, and the other is ignored.
  • Multi-step writes run in MongoDB transactions, and the server writes structured JSON logs with pino.

Outcome

Live at whaustralia.com, built by me alone across frontend, backend and infrastructure. The mobile app is in progress on the same API.

Stack

  • Next.js
  • React
  • TypeScript
  • Node.js
  • MongoDB
  • NextAuth
  • Stripe
  • AWS S3
  • Upstash Redis
  • TanStack Query
  • Zustand
  • Tailwind CSS
  • React Native
  • Expo