Starting Out
I’ve created many apps from scratch, but very rarely have I made a product for myself that I could try and sell. This series of blog posts will track that process. Let’s see if I can disrupt a market with a competitive application & very competitive price point.
I’ll talk about the business side in future posts, but for now let’s actually start building the product plan and investigate the technical requirements.
Let’s build a Booking System
I’ll build this booking system using Laravel PHP and initially hook up to a Sql MariaDb . There are no license costs with this option which simplifies any startup.
Initially, I’ll be creating a booking system for use by local community sports centres. The application should be able to schedule bookings for multiple sports. Picture a local hall that hires out their indoor hall for tennis, badminton, cricket , wall climbing, football, hockey, etc…
Customers will be able to use a website or mobile app to pick and choose the sport they require, book it, and pay for it. Sounds simple 🙂
Planning
Firstly, I need to plan the application. I’ll be building a small version first so that I can quickly get a Proof of Concept (POC) example actually running. Once that’s in place I can expand the functionality.
Let’s imagine how this system would work from two points of view. Firstly from a person wanting to book a sport and secondly, the administrator who has to set up all the bookings available at their sports centre.
The Customer Process
It’s a Tuesday evening as I write this blog entry, and at 8.30pm I’ll be off playing 5-a-side football for an hour at my local community sports centre.
Last week I will have booked the football pitch online, and have paid for it. In the customer side of the app I will have booked my location, required sport, and booking time, then paid.
The Sports Centre Admin Process
For the sports centre admin – they should have a visual representation of their pitches on screen and see what customers are booked in.
They have 3 football pitches available between 18:00 – 22:00 each weekday evening.
I need to be able to represent those pitches on a screen. Although the centre has other sports available and all at different times, let’s keep to our “start small” principle and build out the options as we go.
Let’s get help from my able assistant to quickly see if we can represent that in HTML format – calling on ChatGPT….
And if I view that Html we get to see:
It’s not pretty but we’ve made a start. And it gives us an idea of what we want to show on-screen helping us figure out what we need to store in a database.
- Each Pitch needs to be stored
- Each Time for that Pitch needs to be store
- Each Booking needs to be stored with associated Time & Pitch
- A customer needs to be store for the booking
- We also need costs setup for all booking types
- Payments need to be catered for – with Billing information – Refunds
- Admin users & screens needs to be setup
What we have above in each bullet point is a description of a database table that we need. Let’s expand on those and add in the fields, then the relationships that they should have.
_company – let’s imagine that the software will work for multiple companies
- companyId – guid
- companyName – string
- companyAddress – string
- companyPostcode – string
- companyPhone1 = string
_customer
- customerId – guid
- firstName – string
- lastName – string
- email – string
- dob – date
- addressId – guid
- companyId – guid
_booking
- bookingId – guid
- bookingType – string (May be a sportId – Football, Tennis, Hockey etc…
- bookingStatus – string (Booked / Pending? / On-Hold / Cancelled etc..)
- customerId – guid
- slotId – guid
_pitch – The pitch of hall number allocated e.g. Pitch 1, Pitch 2, Hall 1, Hall 3, Wall 1
- pitchId
- companyId – guid
- pitchName – string
_slot – These are the times that are available for each pitch
- slotId – guid
- slotDate – date – the date this slot is for
- startTime – int – we’ll hold the time in seconds
- endTime – int
- duration – int
- pitchId -the pitch associated
- companyId – guid
We now have started our plan and created a front end template. We need to fill it with some test booking information, and from there we can start to add in the abilities of the application.
After a 2 minute play with the CSS this is the kind of thing we want to start off with. Once functional we’ll make the screen look pretty and pick a front end framework.