To Do: All (Pending)

/
Priority Project #
1 CyrpusVillasDirect #: 12
1.01

Villa import from Airbnb

  • Can we extract the GPS location?
Pending
1.02

Villa description

  • Need to translate the “About this villa” text into every language.  
    • Should we use the Translation entity or multiple entities in the Villa entity? I think the Translation entity. Agree?
Pending
1.03

New Booking (when not logged in, ie as consumer user, not admin or user)

  • Apply the phone Analyser to the Guest phone field
  • Hide the Language field, but store it (records what language they looked at the website in)
    • Make the confirmation in English and their preferred language
    • bcc sjwn71@gmail.com in all confirmations (as we test)
Pending
1.04

Emails

  • Check that the emails are working (cc'ing the 3 recipients defined in the  villa )
  • Save the emails in database and show link in booking
Pending
1.05

Owner

  • Test logging in as non-Admin, but as an owner and see what you can do.
  • Owners (non-Admin) should be able to edit their villa(s) including the text, rates and see bookings for their villa only.
Pending
1.06

Villa Photos

  • Photos not filling the page very well and being top/tailed on homepage
Pending
1.07

Multi-lingual

  • How do i handle the option that different villas want different languages?
Pending
1.08

Stripe

  • Set up Stripe to take payments
Pending
1.09

"Owner" entity

  • Objective is to define which User (or Users) have admin rights to each villa
  • This entity has two fields:  Villa and User
    • Both are relational fields and the User one is multi
    • Villa field cannot be null
    • Sort each dropdown by fullName (User) and name (villa) respectively. 
    • In the index show some of the key villa_details as a lookup into the Villa entity
      • Address
      • Contact First/Last name
      •  Wesbite URL (which launches in new window)
  • Admin rights enables those permitted users to:
    • Administer the “Villa” settings
    • Set Seasonal Rates
    • See and reply to bookings
  • Have link to it on the Standard Dashboard, say near the seasonal rates
Pending
1.10

Voucher scheme

  • Establish a discount code system for returner
Pending
1.11

Version of Calendar

  • Create a table view of the Calendar so Users, Admin and Owners can see multiple villas in one view
  • See attached xls to illustrate what it should look like
  • Filter buttons for Month and City of Villa
Pending
1.12

1. Market Intelligence — highest development priority

Your current scraper collects valuable raw observations: 30 different stay durations for each arrival date, repeated across villas.

But owners won't want to look at 30 columns of numbers. They want to know whether they're charging the right price, how their competitors are performing and what they should change.

Daily price reconstruction

P0- Convert total stay prices into understandable daily rates: Minimum stay and discount detection

P0 - Identify 3-, 7-, 14- and 28-night restrictions or discounts Competitor comparison dashboard

P0 -  Compare similar villas over the same dates. Scheduled scraping

P0 - Automatically build historical price data. Availability change tracking

P1 -Identify newly blocked or reopened dates.Pricing recommendations

P1 -Highlight where an owner appears expensive or cheap.Historical pricing charts

P1 - Show how prices change as arrival dates approach. Automated owner reports

P2 - Send weekly insights by email

 

A. Daily pricing reconstruction

This is probably the most intellectually interesting part of the project.

Your existing T+1 to T+30 observations are total stay prices, not daily prices. The task is to infer underlying nightly rates and distinguish them from length-of-stay discounts.

  • Ordinary nightly rates, potentially varying by day.
  • Minimum stay requirements.
  • Weekly and monthly discounts.
  • Additional cleaning and service fees.
  • Inconsistent or incomplete observations.
  • Prices that cannot be reliably decomposed.

My suggestion: Create a derived DailyRate dataset while preserving the original PriceHistory observations. Assign a confidence level to estimated nightly rates rather than assuming every price can be explained perfectly.

B. Competitor comparison

I would let an owner select their villa and see comparable properties within the same resort.

Importantly, compare like with like. A beachfront four-bedroom villa with a heated pool isn't directly comparable to an inland three-bedroom property.

C. Availability and estimated occupancy

Because you'll collect snapshots over time, you can observe when previously available dates become unavailable.

That gives you a potentially valuable occupancy indicator.

However, unavailable does not necessarily mean booked. The owner may have blocked dates for personal use, maintenance or bookings through another channel.

I would distinguish between:

  • Confirmed bookings on your own platform.
  • Dates unavailable on Airbnb.
  • Estimated booking activity inferred from changes.
  • Uncertain or missing observations.

Market these as estimated occupancy and booking signals, not verified competitor revenue.

2. Direct Booking Platform — what still needs doing

I would concentrate on six areas. You already have pieces of several of these, so the objective is to close the gaps rather than rebuild them.

A. Villa onboarding and website generation

P0 - Make it possible for a new owner to go from an Airbnb listing to a usable direct-booking website with minimal manual work.

Import or enter descriptions, photographs, facilities, bedrooms, occupancy, check-in rules, location and seasonal prices. Add a publication-readiness checklist and website preview.

 

B. Booking and availability reliability

P0 - Ensure the pricing engine handles seasonal boundaries, Saturday-to-Saturday restrictions, gap nights, cleaning fees, deposits, discounts and cancellation rules.

Test overlapping bookings, delayed calendar synchronisation, simultaneous booking requests and failed payments. Provide a booking confirmation and modification workflow.

 

C. Owner portal

P0 -  Owners should be able to update their own photographs, descriptions, rates and blocked dates, view upcoming bookings, and see enquiries and customer details.

Keep permissions restricted to their own properties, with straightforward navigation rather than a large administrative CMS.

 

D. Direct booking conversion

P0-  Add a clear booking quote, mobile-friendly date selection, visible total pricing, WhatsApp enquiry, guest reviews where legitimately available, and a simple reservation process.

Crucially, show the customer the benefit of booking directly rather than through an OTA.

 

E. Repeat-customer marketing and CRM

P1 - You already have Return Clients and discount functionality. Extend this to guest history, discount codes, repeat-booking links, targeted offers and scheduled campaigns.

Include consent/marketing preference records, unsubscribe functionality and access controls.

 

F. Owner financial reporting

P1 - Show booking income, occupancy, average daily rate, revenue per available night and estimated commission savings.

This creates a tangible financial explanation of why owners should continue using CyprusVillasDirect.

One particularly important point is calendar synchronisation. Airbnb currently states that imported calendars refresh automatically every three hours, rather than instantaneously. Your system therefore needs to handle the double-booking risk inherent in iCal synchronisation, especially if you offer instant booking.

 

3. Commercial features — potentially more important than further coding

You need a repeatable way of acquiring and retaining villa owners.

I would build a simple owner acquisition funnel:

Identify villa owners -  Target villas in Pissouri, Aphrodite Hills, Coral Bay and Polis -  Show an individual market report -  How their villa compares with similar local properties -  Offer a direct-booking website -  Demonstrate commission savings and repeat-customer benefits - Convert to paying customer

Booking commission, intelligence subscription or combined package

I'd add an internal sales CRM to track the owner, villa, location, contact status, demonstration, activation and first booking. Keep it very simple.

Potential revenue models

Direct booking

5% of bookings generated

Market Intelligence Basic - €19/month

Market Intelligence Pro -  €49/month

Combined package - 5% booking commission + €29/month

 Your previous assumption was that 100 villas might be achievable and that perhaps 20% of their bookings could migrate away from Airbnb.

The commercial question I'd test first is whether owners will pay for Market Intelligence without first receiving additional bookings. That would make it a much more attractive standalone business.

4. Infrastructure and product risks

There are several areas I'd address before investing heavily in scale.

Airbnb data access. Airbnb's current European terms prohibit unauthorised automated scraping. Your batch scraper therefore has a genuine contractual and business-continuity risk.1

Before making the entire Market Intelligence product dependent on it, evaluate licensed short-term-rental datasets or authorised integration arrangements. Providers such as AirROI advertise market and calendar data products, but coverage, reliability and commercial usage rights need validation.

 

Data integrity. Save observation timestamps, query parameters, currency, guest count, fee treatment, failures and the source of each price. Otherwise, historical price comparisons can easily be misleading.

Scalability. Move bulk acquisition into queued jobs with retries, checkpoints, request limits and monitoring. Keep historical snapshots instead of overwriting earlier observations.

Privacy and payment security. Protect guest contact records, handle consent correctly, use a payment service provider rather than storing payment-card details, and implement role-based access and audit trails. For marketing, existing-customer relationships do not automatically permit unrestricted promotional emailing.

 

5. My recommended development sequence

Given your limited development resources, this is the order I would follow.

Development priorities

Check items off as you implement them

0/12 complete

 

Phase 1 — Make the existing data useful

Daily price reconstruction

Normalise total stay quotes and identify discounts

Competitor comparison screen

Show prices for comparable villas and dates

Scrape scheduling and monitoring

Automate reliable, permitted data acquisition

Initial owner report

Produce a useful, understandable pricing report

Phase 2 — Complete the booking proposition

Villa onboarding

Import or enter a villa and publish it quickly

Booking reliability

Test pricing, payments, synchronisation and double bookings

Owner self-service

Allow owners to maintain their listings and availability

Mobile booking flow

Make guest enquiry and booking straightforward

Phase 3 — Commercialise

Owner acquisition CRM

Track prospective owners and conversion

Pricing and subscriptions

Test paid Market Intelligence plans

Guest marketing

Repeat-customer campaigns and discounts

Owner analytics

Measure bookings, revenue and commission savings

Copy checklist

6. What I would deliberately not build yet

I would postpone native mobile apps, elaborate AI chatbots, sophisticated dynamic-pricing automation, full accounting integrations, multi-country expansion and extensive property-management functionality.

You don't yet need to compete with established property-management systems feature-for-feature.

Your advantage could be a much narrower proposition: a villa owner gets a website for direct bookings, can market to their previous guests, and receives better local competitor intelligence.

I would aim for an initial pilot of 10 real villa owners in Pissouri or Aphrodite Hills. Measure how many activate their websites, whether anyone receives direct bookings, and — most importantly — whether owners find the competitor reports useful enough to pay for.

That will tell you far more about the project's prospects than adding another dozen technical features.

My strongest priority would be the Market Intelligence comparison screen. You already have much of the difficult data-collection work underway; turning those observations into an immediately useful report is the shortest path to determining whether the intelligence product has commercial value.

Pending
2 ATS Template #: 10
2.01

Bat file to update all projects at once

  • Assumes that each project is saved in c:\dev
Pending
2.02

Header

  • Include image in header. Like Olivios
Pending
2.03

Cms copy

  • Ability to be able to add a CmsCopy and insert it as desired - effectively a re-number button 
Pending
2.04

User

  • Button when no email/mobile to ask for via WhatsApp or email respectfully. 
  • Show last login and or no address or gps. 
Pending
2.05

Homepage on iPhone screen

  • When one adds the URL link to a site on your iPhone, it would be great if the icon on the homepages had some sort of icon
  • Ability to resend the homescreen
  • Waze button from map directions (check if works from GPS or Address)
Pending
2.06

Product/Sub Product

  • A way to control the URL for Interests
Pending
2.07

CMS

  • Ability to click to the point on the page 
  • SEO optimisation

Business Contacts

  • Check count

Translation export

  • Finish export of Translation text for upload into ChatGPT and import into Translations

Stripe integration

Pending
2.08

Contact form responses

  • Link permanently the record  in Translation with the record in Company Details (ie avoid them getting out of sync)
Pending
2.09

WeatherService still active and causing a deprecation

  • [2025-02-07T12:25:03.392918+00:00] deprecation.INFO: Deprecated: Creation of dynamic property App\Services\WeatherService::$companyDetailsRepository is deprecated {"exception":"[object] (ErrorException(code: 0): Deprecated: Creation of dynamic property App\\Services\\WeatherService::$companyDetailsRepository is deprecated at /var/www/html/atstemplate2/src/Services/WeatherService.php:111)"} []
  • ubuntu@vps-90142977:/var/www/html/atstemplate2$ tail -n 100 var/log/dev.log
Pending
2.10

Live server set up

  • Automate the process to give read/write access to the public/administration
    • sudo chmod -R 775 /var/www/html/stephennurse/public/administration/Attachments/
    • sudo chown -R www-data:www-data /var/www/html/stephennurse/public/administration/Attachments/
  • Write a batch file that will copy the Map-Icon and Language-Icon files,  to all the projects (or have them uploaded in the git process)
Pending
3 AX Tools #: 19
3.01

On AXTools-> Book Now

  • Once you type in a flight manually, it still shows the “Can’t find flight? Enter time manually”

Pending
3.02

Partner website 

  • Similar to the aggregator functionality in CyprusVillasDirect I want to be able to offer individual taxi drivers their own website that feeds into the same booking engine  
    • Partner ATS URL field
    • Partner CMS and ancillary fields
Pending
3.03

Updated Transfer Arrival time and Driver Snail trail

On the day of a transfer, the system should continuously update the driver's estimated arrival time (ETA) using their live GPS location and Google's traffic-aware routing.

Rather than relying on a fixed journey duration (e.g. Verbier → Geneva Airport = 2 hours), the system should use the driver's current position together with the destination to request a live ETA from Google Maps (or the Google Routes API). This automatically takes into account current traffic conditions, road closures and delays.

Example

  • Standard journey time: Verbier → Geneva Airport = approximately 2 hours.
  • On a busy Sunday evening, Google may predict a journey time of 3 hours due to congestion.
  • The system should display this live ETA rather than the scheduled duration.

ETA Refresh

  • Refresh the driver's location approximately every [10] minutes while the transfer is in progress.
  • After each location update:
    • Request a new Google traffic-adjusted ETA.
    • Update the expected arrival time shown throughout the system.
    • If the ETA changes materially (e.g. by more than 10–15 minutes), highlight the change so operations staff can react if necessary.

Journey Tracking ("Snail Trail")

From the Calendar, provide a Track Journey button for active transfers.

Selecting this should display:

  • The driver's current location.
  • The route driven so far ("snail trail").
  • The planned route to the destination.
  • Current traffic conditions.
  • Current Google-estimated arrival time.

The tracking should only display data for the current transfer, from the moment the journey started until it is completed. It should not show the driver's movements before the pickup or after the transfer finishes.

This provides operations staff with a live view of exactly where the vehicle is, how the journey is progressing, and whether any delays are likely to impact the scheduled arrival time.

Pending
3.04

Booking - checking phone numbers (backend system, Book Now is ok already)

  • Install the PhoneAnalyser (to check phone is good) in the New Booking and Booking Index
Pending
3.05

Homepage

  • Design homepage with links etc
  • Description of: 
    • Private transfers from anywhere.   You will be given the name, tel number of your driver 1 day in advance
    • Introduce the concept of a Shared taxi.  For arrivals at an airport/train station you must be on the exact same flight/train (not juts expected times, as flight delays can introduce large delays) and travelling to the exact same resort – so there is mimimal extra delay.  The trip price will be split with afunction of passengers/drop off locations with a bias towards the person that offered to share. 
  • Pages for each resorts (Verbier, Veyzsonnaz, La Tsmoumaz, Nendaz)
    • Town Map (ie chalet location finder), Train times, useful Business contacts (Restaurants, shops, pharmacies, doctors, businesses like ski hire and rental, chalet compnaies etc),    what else should I add/
  • Transport links pages
    • Flight times (including latest info)
    • Train times
  • Business contacts shouldn’t have VCF as want to drive traffic to the site

 

Confirmations

  • Why does the map logo for a chalet with no GPS location go to Accommodation id 1001 etc
  • Test the Edit my Booking
Pending
3.06

Confirmation emails and clients amending bookings themselves

  • The idea is that it would be nice if clients could edit/correct some details in their booking directly.
  • In my old company clients had to call or email in to make ANY changes to their booking,  but it would be much more efficient if they could amend bookings themselves 
  • However, we can't let them make changes (without us ok'ing them) if they critically change the program for the driver after it is too late.
  • The key concept is that clients shouldn't be able to amend things that mess up the day (if they make last minute changes).  So they can't change the destination or number of passengers (beyond the capacity of the car), or times at the last minute
  • Issue is security - how do we give non-login access to edit a booking without exposing the database? Do we add a specific link to a page that is not login protected that allows changes, and only works for some fields with 24hours notice?  
    • At ANY time (even last minute) they should be able to:
      • Add/correct phone numbers or emails
      • Additional passengers names/details
      • Add address within the resort/cities
      • Reduce baby/child seats (not increase)
      • Change passenger numbers so long as it doesn't change the price (ie the vehicle)
      • Add flights number so long as it doesn't change the time  (probably not allow that change)
    • With more than [36] hours they should be able to change things that make a difference to the driver's program (eg destinations, dates, add trips)
Pending
3.07

Flight scraper

Populate Kayak data

  • Add a button (under Actions) that ROLE_ADMIN can run to populate flights (Kayak) for all active airports serving GVA, for a period of dates. 
    • Use same date schedule as in the Settings

Populate GVA.CH data

  • On morning of T+1, run the GVA.CH scrape for ‘tomorrow’, on all flights
    • This is a one-off check, mainly to confirm that the scheduled times from Kayak match the times from gva.ch.  ie ScheduledDepartureTimeGvach === ScheduledArrivalTimeGvach
      • Chron: Run at 8am, on T+1 (ie on Monday 8am, run Tuesday's GVA.CH Overview and Details flight scraper) 
  • Throughout T+0, the ‘detailed' refresh should run on “selected” individual flights, where the criteria for selection is:
    • Arrivals:
      • actualArrivalTime is null and
      • scheduledArrivalTimeGvach is after ‘now’ - 1hour 
    • Departures
      • actualDepartureTime is null and
      • status is not cancelled
      • scheduledDeparturelTimeGvach is after ‘now’ - 1hour 

Code-share

  • Code share is no longer a relational field (linked to FlightTrips). 
  • The Codeshare entity has a flightNumber and the record stores the associated other flights. 
    • This enables mutliple flightTrips with the same flightNumber to be linked to the CodeShare
      • So the determination has to be a lookup on a matching flight number
  • The objective is to combine multiple entries for the same flight and return the code-share data in the flight details in the transfer bookings (so a user can search for their flight by any of the flight numbers)
  • Check the scrape functionality on the "Operated by" to identify “child” flights (ie the ones that are going to be deleted)
  • Establish a view  of all flights where there are more than one flight departing at the same time to the same location.
  • Build up a list of code-shares -   question, the gva.ch notes scrape concatenates the flight numbers.  Should we maintain that array or separate into individual code-share identifiers - which will allow us to identify ones to delete?)
  • Write a service that identifies the duplicates and delete
Pending
3.08

Shuttle: Edit Screen

  • Remove at the bottom the SBBTrain dropdown list and the Uphill/Downhill field.  DONE
  • List of Transfers includes ALL trips (PT and Shared), admittedly restricted to that day.   But doesn't show name of Passenger, or Address.  DONE??
  • When you edit a shuttle and press Save, it should go back to the Shuttle page from that shuttle (ie 26-8-2025 in this case).  DONE??
Pending
3.09

“Shared” Private Transfers

  • Pricing, there should be a discount for the first taker as they are taking the no-share risk. 
  • Create a view of all Private transfers where the IsShared = true, sorted by Departure Destination and Arrival Destination and a flag if there is a match 
    • Match is when…
      • Date, and To/From destination (city) is the same
      • For pickups at the Airport or Train, that all customers on the same flight/train
      • For dropoff at the Airport/Train, that the train/flight time are within [10] minutes of each other  (where the 10 is controllable in Settings - but hard code for now)
      • That the total pax combined is <8
  • We should think about if we can automate the matching and we should publish the possible matches on our public website
Pending
3.10

Accommodation

  • Ability for the user to add a new address
Pending
3.11

Background/rational

  • Taxi companies and individual taxi drivers all share the same software and I will be able to see across the various competing taxi drivers and re-allocate trips or new trips to whoever is best placed to offer them.
    • In truth this is to match drivers who are going back empty with a customer who needs taking
    • Do you think this makes sense that there are [20-50] taxidrivers sharing the same database -or should i clone it?
  • Offer each taxi driver their ‘own’ website, so they can give their clients that site and book trips there themselves  (as an incentive to use the system). Assume there are 50 ‘individual’ taxi drivers. 
    • Can I control 50 x CMS (CMS_Copy and CMS_Photo and Product) inputs centrally (ie each CMS page would need to be linked to a taxi driver)
    • Can I point their own URL to my code (eg. www.johnstaxi.com) but where all the bookings go to AXTools?
    • So in each Partner company I would include their URL link if they are adopting my system
    • I think it is ok for ‘their’ link to use the same URL if that is impossible
  • Intro fee for referrals
  • New drivers sign up and need to send bank details, driving license and car details
    • Automate the on-boarding email - in English and French
  • Driver's location is tracked in their response
    • Can we do this via the website or do we need an IOS/Android app?
  • For all bookings the driver's time at location is tracked to prove they were on time and to whatsapp the customer
Pending
3.12

Taxi partners

There are different levels of Partners

  • “Independent drivers” who only have 1 car and work for themselves
    • Can login and accept available trips 
  • Larger companies with multiple cars and multiple drivers

Trips to Outsource view

  • Create a "Available trips” 
    • Understand the starting point of each driver and attempt to offer pairs of trips that start/end at their chosen venue
    • But show all trips in case they have a natural offset
    • Press button to accept (how do we refresh first?
Pending
3.13

Public pages (non-protected)

  • Add links from the HomePage to the following public information - to drive more traffic to the website  (will this adversely affect our performance)
    • Train times (DONE)
    • Flight board (DONE)  
    • Business Contacts (eg restaurants, shops, hotels)  (DONE)
    • Chalet map (DONE)
    • Shuttle available seats (WIP)
    • List of Private+ trips (ie those trips with free seats available)
  • Enure they are optimised for mobile and desktop views
Pending
3.14

Client confirmations

  • Launching Client Confirmations from the Booking Index…. Non editable emails (thunderbolt icon) still launch in new window DONE
  • In emails, the %Total price% is not getting displayed DONE
  • Sender field is at the bottom of the page.  Let's put it at top, to the right of the Subject DONE

Email import

  • No pending emails - is that right? DONE?

New booking

  • Client lookup seems a lot faster, but not instant.  Fair? DONE
  • Transfer: Remove from Destination drop-down list any inactive destinations  NOT DONE
  • Prices are not rounding to the nearest CHF5  (eg 300, 305, 320, 405, 450……   not 302, 452, 519) DONE
  • Pricing parameters now include 14, 20, 23, 26, 32 passenger parameter…. DONE
Pending
3.15

Management: XLS exports:

  • Transfers 
  • Bookings
  • Driver transfers
  • By Affiliate
  • By Private/Private+/Shared
  • Accommodations
  • Revenue reporting
  • Include reports by CreatedBy/CreatedOn
  • Work out how to handle view the revenue comparison across seasons
  • Control start date from an input in Systems Settings
    • Perhaps have a single button that opens multiple versions 
  • Create a service that count/revenue of all private/shared transfers by Client Name (in Client list)
Pending
3.16

Private + bookings

  • We should create a page showing the Private+ bookings that can be seen externally. 
  • Recap: A Private+ booking is one that the original client (first) has opted to allow others to travel with them, to share the cost, so long as the times and destinations work.
  • The criteria are:
    • Drop-off to an airport - they have to be on flights that leave within [20 - controllable in settings] mins of each other and departing from the same Destination (eg Verbier)
    • Pickup at an airport -  they have to be on the exact same flight…. and obviously going to the same ‘Destination’ (eg Verbier, Chamonix etc)
      • FYI, the 20min rule doesn't apply for pickup at the airport as 1 flight might be early/later and the waiting period could easily extend from 20mins to hours. But for dropoffs that doesn't apply (as we don't know about delayed flights until too late to influence the taxi journey)
  • So, the page should reflect that:
    • Date
    • Seats taken
    • Seats left (assume 7 seats in the car)
    • Pickup (from(
      • If airport, then flight number
    • Drop-Off (to)
      • Don't show the address (eg Ch de la Tinte, 5), but show ‘Verbier’
    • Price for 1,2,3… people  
      • We will work on the formula for that.
Pending
3.17

Customer Emails Fragment

  • In the first section of the email, where you give the reference number (e.g. “Booking reference: VBC-1234”), create a link from the reference number, so when the client replies to the email we can launch the booking from the email
    • It won't work for clients or be a security risk:  For users (ie clients) without Admin/Staff access the link shouldn't work, and it should just take them to the homepage 
    • For office/admin, it should open the booking
  • Create a new fragment for Baby/Child seats.  If booking has a Baby or a Child then add the fragment to the booking.  Unlike the other fragments the need for it is not a function of Type (Shared/Private) or Destinations, but rather the existence of a baby/child seat

Customer Booking Confirmation

  • At top include status - Confirmed/Enquiry/Cancelled
  • Should include EVERYTHING in the booking that the customer gives us (not driver or actual pick up times)
    • Flight details (Airline, Flight Number, and times (arrival times and dep airport for arrivals, opposite for departures)
    • Chalet name, address and our link too (which should have the map once we had logged all the locations)
  •  Add in the Fragments any Destination specific PickUp or DropOffInstructions (Private Only - Not Shared)
  • And finally add all relevant Fragments at end of Confirmation (eg Company Footer etc)

 

Customer Emails Template

  • New email template required.  It will be used for Shared passengers (arrivals only -ie Uphill).
  • The purpose of the email is to check that they are on the expected train, and if not to get the information as to what train they are actually on. 
  • Roughly, the email should say "We are expecting you on the [11:17] train from GVA to LeChable.. Please click below to confirm you made that train, or if you did not make that train, please confirm which train
    • And present a list of possible other train times.  That button should then reassign the client to the correct train (and pick up shuttle).
      • There is a case where there is no space (or not enough space) available on the adjusted bus - and if so we need to think about the solution for that.  In a sense that is not our problem as they missed their original shuttle
      • Furthermore we should create a public page showing the number of seats available on the buses. (I worry that this gives competitive info away, but let's build it for now
Pending
3.18

Accommodation: Index

  • Compute the number of transfers, and the value of the transfers, in the “Reporting Period”
  • Create a service called “FinancialReportingService” that has two functions that compute these statistics (placeholder for now)
    • TransferCountByAccommodation
    • TransferValueByAccommodation
  • In the Systems Settings entity add a ReportingStartDate and ReportingEndDate fields that is used in this service.
  • This service will also do 
    • TransferCountByUser
    • TransferValueByUser

Accommodation: Street map 

  • Sizing of map looks wrong.  Take an example with 2 chalets in Rue Barmete….
  • There should be a maximum zoom setting 
  • Filters on Accommodation Index:
    • City (i.e. destination)
    • By “type” in a given Destination (e.g. hotel, restaurant, shop etc in Verbier)  
  •  Map - by Affiliate  (ie show all <<Bramble Ski>> properties
    • Link from the Affiliates page.  Or from the Resort contacts page 
Pending
3.19

Driver's page 

  • The driver's schedule should detail THEIR trips for the day and allow them to move forward/back to future days. 
    • Background colours to represent past, tomorrow, today, future 
  • Links to helpful notes.
  • Launch the “Meet & Greet” page for airport/train pickups with the client details/affiliate logo
  • Buttons to register events
    • Non-transfer
      • Driver wake-up / Awake
      • Left home
    • Transfer specific
      • At pickup (including GPS location)
      • ‘Found client’
      • Leaving now
      • Arrived
      • WhatsApps/emails to clients
  •  Essential that this page is optimised for mobile.  Should also be the login-direction for users that are Drivers
Pending
4 Payroll #: 3
4.01

Employee

  • Derive the Impot classification from Married/Single/Divorced and Children
Pending
4.02

Review the Service that checks whether all fields are populated (before generating a form)

  • Check this service:   CheckEmployeeDataByDocumentTemplateService.checkDataComplete(employee.id, document_template.id)
    • It is used in “index_create_forms.html.twig”
  • It appears that this gives a ‘Incomplete’ even when both the Employee and Employer has all the fields populated
  • Make the service popup (tooltip) with the missing field(s) to be filled in.   Hide the generate button until ‘Complete’ criteria is met
Pending
4.03

Response from Website Inquiry Contact Form process (in Payroll Project)

  • As in ATS, the process of submitting an inquiring will create a new User.  Ensure that the role of that new user include ROLE_EMPLOYER
  • New Employers can choose the services they want to avail themselves of
    • Monthly payroll
    • Employment contract negotiations
    • Health insurance set-up
    • Employee permits (including managing capturing and checking the data from the employees)
    • Employee admin (housing, transport, training)
    • Ski hire for the season
      • Use the Product entity to control the text for each service (including pricing)
      • Check box for each Product that each Employer wants to take up
  • When a User logs in, if they are ROLE_EMPLOYER but do not have an associated Employer details set up, it will show a page designed to walk them through setting up an Employer. 
    • Employer page should include a question as to what services they would like to use. (See above)
  • If an Employer has been set up, it will direct them to their own dashboard page with their Employer(s) (likely 1 but can cater for others) with the links to their various pages with some sort of summary info.
  • If a a ROLE_EMPLOYEE or ROLE_USER, then design a dashboard page for an Employee
    • Access to their personal details
    • Store of permits
    • Payslips
    • General information and help
  • When uploading an Employee, be sure to track Default Language

 

Payroll – Other tasks 

  • Create a Pricing entity
    • Product (relational field)
    • # Employee and price (thoughts – single entry of multiple entries per product)?
  • Create a Communications Template entity
    • Name
    • Text in EN, FR, DE etc
  • When uploading a new Employee be sure to include their country so the User Default language can be set.
    • Edit the Employee upload function (New or Edit or Import) to check the employee language setting 
Pending
5 LinkSync #: 5
5.01

Analyse phone book

  • User uploads their phone book and LinkSync compares which are connections already and which are not.  Shows link to connect to the others in 1 go. 
Pending
5.02

SetUp file

  • Remove the warning messages for users

Single connections - Full Scrape

  • Add a button to update a single connections Full details or Contact Details

Languages

  •  Split languages with a comma into multiple languages

Make work for MacOs (not yet unless easy) 

Pending
5.03

Exports

  • For the PartnerFirm export add extra columns to the XLS export
    • Name of PartnerFirm Users who is connected to the LinkedInContact

Search-Results 

  • In the Ownership section, only show the owners if they are in the same partner firm, and then just initials 
Pending
5.04

Tracking profile changes

  • Think about how I can track a change to the profile and flag it is as a change

 

Handling a change of  LinkedInURL

  • Consider a way to address when someone changes their LinkedIn URL (one of the suggestions)
    • If URL link fails, send to a separate view for manual correction
    • Include a flag for failed LinkedInURL
    • Cron for updates/refreshing stale profil
    • Add a page to search for Users that have updated their profile
    • First Name and Last Name the same
    • Different URL
Pending
5.05

CRM  (SN will do this)

  • Create a User/Firm level set of comments on a Connection.
Pending
6 Immigration Services #: 5
6.01

Immigration Services site

  • Include the ability to upload an email into a “New Client” form
  • Complete
    1. MEU1 form (partially complete) population
    2. MEU3 form 
    3. Bank of Cyprus form 
  • Check all the customer pages work on a mobile
    1. Need to upload scans via camera on phone
  • Not all the forms (passport, driving licenses etc) have the Controller built to upload files (and delete files)
Pending
6.02

User Dashboard

  • Create a transaction for each product. 
  • Create a user_dashboard 
Pending
6.03

Other

  • Review site in mobile mode. Currently the following screens do not look great:
    • When a user is logged in:
      • Show a transaction (eg http://localhost:8000/transaction/19/show)
        • And editing each Document (eg Passport, Birth Cert, Driving License etc)
  • Security
    • The My Availability page needs to be security protected (just the specific-user and staff)
  • PriceList page
    • This should cycle through the Services Offered and show the summary and price
  • Complete MEU1, MEU3 and Bank of Cyprus forms
    • Complete the code to show the questionnaire titles in either English or Greek (or both) in the MEU1 and MEU3 forms
    • Ensure that the forms ‘import’ the necessary information in the right place (eg from User, or Passport or Employment Contracts etc)
Pending
6.04

Forms

  • Share the MEU3 form
  • Design how the responses to an input error is emails to the user upon verification 
Pending
6.05

Process of reviewing docs (e.g. Passport, Utility bill, Tenancy etc).

  • Client upload the respective document and fills in the details required.
    • Clients should only see the first column; not the column(s) for the Review process or the reasons for failure….. 
    • Clients should not be able to edit the review section
    • Status should be set to default
  • GRTS review the doc and show comments.
    • And send comments to client
  • Client then ‘corrects’ the error.
    • How do we track this?
    • Can we have a history entry that tracks the changes? A non-editable field that tracks the date of the change, who made it and what was made.  
    • If a revised scan is uploaded, do we keep the old one (rename it?), and link to it in the history field?
    • Client amending should reset to Pending.  
    • Errors before should still be visible to staff members
Pending
7 Criminal Record Checks #: 3
7.01

Enable Credit Card Payments

  • Integrate Stripe etc 
Pending
7.02

Timelines

  • Create a single page that show all the attachments
    • Can this open in a new instance of Firefox or other browser (needs to login)
Pending
7.03

Checked By

  • Edited field only to be visible to ROLE_ADMIN
  • Create a standard list of replies
Pending
9 Tennis Finder #: 18
9.01

Booking completion

  • Complete the ClubSpark scraping functionality
    • One-click booking
    • Cancellations 
Pending
9.02

When booking an Aceify 

  • When making a booking for an Aceify client, check the Aceify credit available 
    • Malcolm to check how to access a client’s balance, and if there is a unique URL  - via the client’s email or client’s ID
Pending
9.03

Payments

Pending
9.04

Meet new players 

  • E-mail functionality test
  • To make contact with a new player, the system should not show their email/phone number, but rather wait until the recipient has accepted the request  
    • Show list of reach-outs in my Connections list as Pending.
      • Mark contacts as Agreed(tick), Pending (?), or Rejected (cross). 
  • Ability to download a Outlook contact file
Pending
9.05

Scraping courts 

  • MyCourts  (generic code that will then apply to all the MyCourts clubs)
  • Duke’s Meadow – requires a bespoke scrape
  • Aphrodite Hills
Pending
9.06

Email functionality

  • Work on the confirmation emails
    • Punter confirmation
    • Complex reservation
    • Aceify booking
Pending
9.07

Tennisfinder 

  • Tennis Venue entity:
    • For the 129 MyCourts clubs, can you try to convert the Longitude and Latitude data that we captured into the “embedded html” needed for the maplink, so the map-marker icon works?  
    • Can you run the postcode distance calculator for one player across all the MyCourt clubs to see if they all ok compute
    • The Map All button (showing the position of all the Active Courts on a single page) doesn’t seem to include the MyCourts clubs  
  • MyCourt Scraper
    • Can you build a scraper to extract the Court (whether tennis, squash or badminton) Availability for the “MyCourts” clubs
    • Can you bring in the data as to whether it is available and the price if it is a given
  • Booking a Court (ClubSpark)
    • Can we test the client emails when you book a court
    • Can you look to see if you can complete the single-click book for the courts?
  • Complex reservation (multiple days where we book the first court that comes available)
    • Can we create a chron that runs through all the complex reservations and makes a booking (and cancels others) that meet the criteria. For example,
      • If the #1 preference is free it books that and cancels the others
        • Question:  Do  we wait for all the first choices to be available before ‘hitting’ a second choice?  Or do we go through each hour and hitting the best one?  (Do you see the problem?)
          • Perhaps we should make that a question :  “Would you like us to immediately book a non-first preference option if there are some courts at your first preference still to be released? Be aware if we then wait those second/third/fourth choice options might have gone?”
    • We also have to think about how we use the bidding process...  
      • For a single venue/hour…. Do we give them a choice of court, or any court?
      • And do we charge the full bid price, or the next best bid +£1? How will the client know? Do we show the current highest bid  to encourage a higher bid- Yes?  And do we tell the first bidder that they have been out-bid?
      • I think we just take the full amount and the client
Pending
9.08

Splitting the court cost bill

  • One person will have to first buy the court, but the functionality I want is for that person to then be able to split the bill across the other players
    • Create a “My Bookings” link - that shows the bookings where the logged-user is one of the players (either player1, player2, player3 or player 4).  
    • This view shows who has currently paid for the court (and the split after some reallocation) and includes a button that “Pays my share”,
    • That process involves the non-paying player(s) to send their share of the cost to the kitty of the person that paid the bill.  It will shows as a like a TopUp on the account of the recipient and a debit on the Account of the sender 
    • Email functionality to send a reminder to the non-payers
Pending
9.09

Hit with me

  • Players upload a video of their game
  • Gets rated by a coach (£2 charge)
  • Grid of pricing for player vs others for relative standards Punter playing brings the balls and the court. 
  • No show - cost of court and a fine of 5quid 
Pending
9.10

ClubSpark

  • Buy smart card per venue. Limit bookings to one per day and 5 per week per smart card to avoid scrutiny. 
Pending
9.11

Tennis coaches

  • Create an user-type of “Aceify Coach”
  • When selecting a user, also select their chosen coach
  • Show the coaches bookings on the court screen.  
  • Book court in name of coach, and cc the player
Pending
9.12

Management statistics

  • History of court usage
  • The states of the court are:
    • No data => 1
    • Available => 2
    • Booked => 3
    • Closed => 4
  • Lifecycle (assuming not closed): 1>2>3
  • What do you need to know
    • New fields:
      • A) timeFirstScrape - Done
      • B) timeCourtReleased - Done
      • C) timeCourtTaken (ie time on a scrape  when the court was Available before but is now Booked) - Done
    • Compute
      • SnapUpTime:  (C-Max(A,B))
      • LeadTime: (PlayTime-C)  - Done
Pending
9.13

Overcome the IP blocking issue

  • Proposed solution is to scrape using a local copy of the site that posts the results to the live site
  • Question: How do we overcome the IP block that is applied to our site for the making of bookings?  is the IP address already blocked?  Note this will be far less frequent than the scrape, so we could use a dynamic IP address for that component of the site as the volumes will be far lower?
Pending
9.14

Complex reservations

  • Allow users to book repeat reservations targeting mutliple venues, where their choice will prioritise either the venue or the times or the time on court 
Pending
9.15

Scraping

  • Solve how to “prompt” a court availability scrape from the live site
  • Scrape history view not working
Pending
9.16

Bookings

  • Allow non-logged in users to book (ie straight to CC provider, take email)
  • Email confirmation
Pending
9.17

Cancellations

  • Re-use a cancelled court?
  • Setting up a 1st reserve for any cancellations 
Pending
9.18

Handling a VIP booking (e.g. Jamie Delgado)

Pending
10 Whistles & Bells #: 1
10.01

CMS Copy

  • Transfer over copy from Word file
Pending
10.02 Tennis Club #: 14
10.03

Payment

  • Stripe set-up
  • Handling of visitors - visitor fee applied to members Tournie and leagues Platinum vs good memberships
Pending
10.04

Management reporting stats pages 

Pending
10.05

Other

  • Approach public schools to ‘rent’ their tennis courts over the summer
  • Simultaneously book a Court(s) for Coaches and for Group Sessions. 
    • What happens if the court is not free?
  • For a coaching session book a clay and a hard court and release one when booked.  And release the backup 24 hours before the lesson
    • When adding a tennis Group Session that is chaperoned by a coach, add that to the coaches calendar too. 
    • Cancellations of a coaching booking would free up the coach/court (or back to the ‘bagsy’)
      • Q:  When should the system release a court if the coach is not booked and there is demand for the court (ie when does the bagsy run out)?
      • Q:  Should the coach reserve a hard or clay court.  How should you handle a client who wants to choose (suggestion - the coach bagsies a hard court and if available at the time of booking then it can move to a clay).  Do you want to differentiate between courts (eg 8v 9 etc)?
  • Add calendar invite when someone makes a coach or session of court booking
  • Have a tennis coaches view that shows today and tomorrow, that is not password protected (but hidden link) allowing the coaches to see their calendar with 1 click.  Make it work on phones
    • Q: What phone do Wyn, Steve, Elena have?
  • Decide order of priority for court usage
  • Show account balance/kitty in Header 
  • Improve ergonomics of the the coach bio page.
    • Ask Wyn for a bio, 2-3 photos and a video  for him Steve and Elena
  • Track no-shows
    • Q: Should a “no-show” prevents new bookings for [x] weeks.  On the first/second/third strike?
  • Track canclled bookings? 
    • Cancel bookings should be saved in a new entity and perhaps tracked.  What limit to put on that?
  • Flexi memberships: Track number of flexi court vouchers remaining
  • Compute/summarise:
    • Court stats by month (# $$$)….. Hard, clay by hour - broken down by the DoW and hour.   ie should you change prices at different times of the day to balance the loads better
    • Coach stats by month (# $$$)
    • Member stats by month
      • Number of court booiings, number of coaching and group sessions. 
      • Which members break-even vs their membership cost etc?  Should you increase/decrease the annual subscription?
  • Membership reminders
  • Excel import/export of all users to upload members for the admin - test
  • Ability to process emails into a booking easily.
Pending
10.06

Users

  • Have ability to create a user from an Outlook lookup.  ie press a button to call up Outlook and search your VCFs and import in the necessary fields
Pending
10.07

Bugs to fix

  • Group Session Index - how do I sort them differently if logged in or not (different column count)
  • My availability grid and the  “I am away button” (line 110 in Index).  Seem to have lost the functionality on these buttons altogetherPayroll
Pending
10.08

Tournament

  • Create the draw and the matches 
    • Including scheduling futures rounds
  • Show the contact details of one's next opponent
Pending
10.09

New entity with Courtey rankings vs User

  • Import/export function or ability for user to edit their own ranking points
Pending
10.10

Users - Delete All

  • Doesn't work
Pending
10.11

Box leagues/ladder

  • Add ability to  run a box league 
  • Look at https://boxleague.net
  • == entity: tennisClub
  •       Name, address, tel, notes, administrator, toilet, GPSlocation, parking, bar, changing rooms, showers 
  • == entity:   boxLeague
  •       tennisClub (relation), box league number (1, 2…. x), sets, promotion count, demotion count, date for completion 
  • == players
  •       Member of a specific box league at a specific club(s)
  •  Box league then creates a list of fixture (grid), allows the users to enter their own score and.or the administrator. Includes walkover 
  • Computer the winner/loser 
  • Computes next season starting point. 
Pending
10.12

Tennis Court Availability

  • Future bookings count - had to change
Pending
10.13

Formatting

  • Photo handling on the Interests page
  • Background colour on footer and header
  • Height of the header, overshadowing the content
Pending
10.14

Premiership table view of players

  • Show last 5 wins/losses
  • Button for Single or Doubles
  • However over for date, player, score

Scrape ITF player rankings weekly 

 

Pending
10.15

User

  • When you register for the club as if permanent or temporary login.  
    • Have feature that emails logged members with expired memberships to remove them from the main list. 
  • Field.  Temp membership - date.  And remove those from the drop-down menus etc. 
  • Prepare a confirmation email to be sent to all bookings (each night and upon making the booking).  In terms of the reference I don’t think we can use the court availability I’d as that changes if they change court. For the coaching booking that can work though?
  • When a new user logs in, have a field that asks if they are a temporary visitor or a long-term member
    • Field:
  • Add Google Analytics
Pending
10.16

Create a unique page for a user, that doesn't require a login and allows them to sign up for sessions 

Pending
11 Financial Advisor #: 3
11.01

Podcasts episode

  • Looks like the dates look wrong (a lot the same)
  • https://financialadvisor.atts-systems.com/podcast/episodes/index
Pending
11.02

Mortgage

  • Build mortgage comparison tool
  • Inputs:
    • LTV
    • New/Remortgage
    • Cost of Finance
    • Maximum early repayment
    • Odds of moving within fixed term
    • Flexibility to pay if rates increased a lot
Pending
11.03

Updating Podcasts

  • Can you scrape the Transcript
  • Idea is to push the Transcript into ChatGPT for a summary (but not now)
Pending
12 Stephen-Nurse #: 1
12.02

Investments, Tax etc needs overall

  • Basic failures
    • http://localhost:8000/investments/edit/22 
Pending
16 Yasser Physio #: 7
16.01

Booking Day

  • New page looks good.   Minor improvements
    • If the date= Today, put “(Today)” after the date and make background colour yellow
    • If the date= Tomorrow, put “(Tomorrow)” after the date and make background colour yellow
    • Add a button , after “>>”  that takes the user back to “Today”

When logged in as ROLE_ADMIN

  • Looks great
  • When you take a payment, then revert the user to the Day page 

Check on mobile

Pending
16.02

Calendar messages

Pending
16.03

Time slots

  • 1 hour, 1.5 hour, 2 hours
  • Always Lunch - time variable
  • Gap between appointments: 15’ at office.  30 otherwise
  • Starts in Pathos and can be volatile. 
  • Addresses not stored. 
Pending
16.04

Add a client history page

  • Shows bookings and payments by date for a given client
  • By date range (eg month)
  • League table: List of clients and number of bookings and total €
  • Total number of bookings per day graph and total for month
  • Break out of home/studio
Pending
16.05

Create business stats page

  • By date range (eg month)
  • League table: List of clients and number of bookings and total €
  • Total number of bookings per day graph and total for month
  • Break out of home/studio
Pending
16.06
  • Add a “Venue” field to each booking, which is either the “Pathos studio” or “Client home”  (background:  Yasser either travels to the home of the client, or the client comes to his studio).  DONE- Show Client address in the form and also the in Day view 
  • Allow clients to cancel appointments themselves (eg X hours before the appointment).  Control “X” in Settings DONE
  • When showing the list of available slots, each client would only see appointments you are happy for them to take (eg if you are in Peyia, it won’t show an empty slot after to me as I am too far away
    • Calculate realistic travel times between appointments so your schedule reflects operational reality rather than simply appointment duration.
    • You could set rules as to how you control this (eg set certain days as “AH zone” or “Limassol zone” etc) – “Geolocation rules”.  
  • Allow clients to quickly rebook repeat appointments (eg weekly), which probably increases overall bookings and convenience. DONE
    • Button that “Book Same Time Next Week” - it checks to see if available before booking
    • Button “Book for X weeks” 
  • Upon booking, in the confirmation, include an ICS file to add to calendar. DONE
  • Send automatic WhatsApp/email reminders and confirmations to reduce no-shows  Email Done and WHatsapp Pending
    • Set up a Chron that emails and whatsapps clients the day before appointments to remind them of date, time, venue.
    • Control time to resend reminders in Settings (eg day before at 9am, day-of at 9am, one day T-2hours).  Ok for multiple
  • If the User does not have a GPS co-ordinates, include in the Day View a button (to be pressed by ROLE_ADMIN) that takes the current location and adds that to the User DONE
    Send reminders, ‘haven’t seen you in a while’ messages, offers etc to clients who haven’t used you for a while
    • Create a view and allow Yasser to trigger sending (don't want to over send)
  • Track payments, balances and treatment packages automatically.   DONE  
    • This requires a payment entity with three fields
      •  Date
      • Payment amount
      • Booking ID which can be null (if clients want to pay each booking as it comes, rather than run a kitty system  (https://www.worldwidewords.org/qa-kit2.html)

 

Pending
16.07

The very basic solution

A simple “billboard’ website advertising your business would be straightforward and could get it up and running for you in 1–2 days:

Other than a contact me button, that site wouldn’t “do anything “   (i.e. could not organise a calendar, store names/addresses of clients, track payments etc) so while cheap to do is only real value is on online business card. But quick and cheap to do for you if that’s all you want.

 

 

A proper website that include booking and intelligence

My sense is that the real value is building a proper booking and operational platform specifically around how your business actually works, and automate your admin and booking

 

The website/platform could do the following for you and your customers:

  • Allow clients to see your availability live and book appointments themselves online rather than exchanging multiple WhatsApp messages backwards and forwards.
  • Each client would only see appointments you are happy for them to take (eg if you are in Peyia, it won’t show an empty slot after to me as I am too far away
    • Calculate realistic travel times between appointments so your schedule reflects operational reality rather than simply appointment duration.
    • You could set rules as to how you control this (eg set certain days as “AH zone” or “Limassol zone” etc) – “Geolocation rules”.  
  • Allow clients to quickly rebook repeat appointments, which probably increases overall bookings and convenience.
  • Allow clients to reschedule appointments themselves (for example up to 24 hours beforehand) without needing manual coordination (again subset to the geolocation rules)
  • Send automatic WhatsApp/email reminders and confirmations to reduce no-shows and administration.
  • Send calendar invites automatically so appointments appear directly in the client’s phone calendar.
  • Provide direct Google Maps / Apple Maps directions to your Paphos studio.
  • Save client names, emails, telephone and addresses  - launch navigation apps (Waze) directly from your phone on your daily schedule
    • Sync client contacts to your phone too
  • Send reminders, ‘haven’t seen you in a while’ messages, offers etc to clients who haven’t used you for a while
  • Send Xmas, birthday wishes automatically and any offers

 

Manage driving time and therefore know what appointment is ‘available’ to each client

This is probably one of the most valuable features.

For a mobile professional, the challenge is not really managing a diary — it is managing geography and driving efficiently between appointments.

The system could maintain a client location database and calculate driving times between all customer locations.

With approximately 250 clients, the platform could effectively maintain a travel-time relationship matrix between all customer addresses (ie compute 250 x 250 combinations)

This allows the system to:

  • avoid impossible adjacent bookings (ie clients too far from each other)
  • group appointments geographically
  • create “zone days” (Aphrodite Hills day, Sea Caves day etc)
  • reduce wasted driving
  • reduce stress/fatigue
  • potentially fit more appointments into each day
  • The objective is simple: more treatment time and less driving time.

 

 

Other features

  • Allow quick one-click operational messages such as:
  • “Sorry - Running 10 mins late”
  • “I’ve arrived”

•     Support referral rewards and vouchers.

•     Allow clients to scan a QR code to:

  • save your contact details
  • book instantly
  • Fast links to leave Google reviews
  • recommend you to friends
  • Support multiple languages
  • English
  • Greek
  • Russian
  • Israeli etc

•     Track payments, balances and treatment packages automatically.

 

Taking Payments

I actually think it probably makes sense for you to continue mainly using cash and/or Revolut rather than forcing card payments as much as you can, as this avoid paying unnecessary fees.  However, it does create problems when you don’t have change etc.

However, the platform could still recognise cash payments as well as credit cards (usually 1-2% fee) or Revolut (free):

  • track who has paid
  • track prepaid balances/packages
  • maintain client credit (“kitty”) balances
  • reduce the need to remember everything manually

 

What’s available on the market (ie off the shelf) as comparison

I also looked properly at systems already “in the market”  - ie essentially off the shelf where you benefit from economies of scale.   The market leader is called “Fresha”, which seems to be used by a number of salons, podiatrists etc in Pathos… My podiatrist in Pathos uses it for example.  To be clear Fresha is not their site but just the calendar/payment system embedded in it.   But you test it here -> https://www.nynpodiatry.com/   Start to make a booking (but don’t confirm it obviously!)    

 

From the reviews, Fresha is good as a generic booking platform for salons and clinics.  Fresha changes about €2.50 per booking, once payment processing and messaging/SMS reminder costs are included. For you doing approximately 40 appointments per week,  and if all are on line  that’s around €400/month. Plus they charge 20% on the first booking for new clients and their first appointment.   Plus you still need to build the simple website to plug into it.  

 

The other problem with Fresha is that it is designed around fixed-location businesses rather than mobile therapists driving between appointments all day. So it will not be able to optimise across geographies and plan an optimal day including driving.  Think of a barber similar business. So ito does not really give you:

  • your own bespoke operational system
  • your own fully customised website
  • your own independent platform
  • reviews are internal and not google specific

 

Instead, you are effectively operating inside somebody else’s ecosystem and pricing structure.

 

The platform I am proposing would instead be:

  • your own branded system
  • multilingual
  • specifically designed around mobile massage/physio work
  • operationally focused around geography, travel time and scheduling efficiency
  • fixed predictable monthly cost
  • no marketplace commissions (ie 20% commission on new clients)
  • fully adaptable as the business evolves

 

 

Realistically, I think this is 4–6 weeks of development work (I have 2 guys in India who help me) and if priced commercially would likely cost ~€10k.  That’s a lot, I know. 

 

Here’s my proposal, I think the fairest structure is probably:

  • I will pay all the upfront development costs
  • Use it for free for 1–2 months as a live pilot period while we refine the workflow around how you actually operate in practice.  
    • If you don’t like it and don’t think it offers you any value we can dump the project, at no cost to you;  I am confident it will make a difference and you will want to take it.   
    • During our sessions you can give me feedback on the system and I can improve it.  
  • Then, after the trial and you accept it:  monthly fee: €200-250 month depending on what you want (so I am assuming you will run it for 5yrs for me to break even)
    • Includes platform/support fee, your own website URL (you should pick something that will drive more business to you – e.g. paphosmobilemassage.com)
    • Includes maintenance and software upgrades
Pending
18 News-scrapper #: 5
18.01

News Lists

  • Issue is that the buttons trigger a refresh and slow.
  • Can one overcome this with a javascrpt flag and a press to do all button at the end

Users

  • Centrally scrape the content of the articles.  Check once the login of the user at their login stage, and track if good.  Then show in the title page if the login is confirmed as valid
Pending
18.02

Scrape content

  • Check that the scraping of all the news sites works
  • Also ensure that the content and not just the headline are scraped saved in the ‘fullContent’ field in the news entity.
  • In the view, hovering over the title will display the full content
  • For websites where the content is behind a firewall, then login and scrape where available.
Pending
18.03

Set up a Payment gateway- Stripe? 

Pending
18.04

Deleting LinkedIn Users

  • Delete MY Linkedin contacts should not delete them but mark them as hidden
  • How to handle when we have a contact shared with multiple "owners"?
Pending
18.05

User Password checks

  • Need to develop an algorithm to check the passwords upon login
Pending
19 ITF Proposal #: 1
19.01

Searching for tournaments (https://www.itftennis.com/en/tournament-calendar/world-tennis-masters-tour-calendar/)

  • When searching, you can filter/sort by date or country….. but not by Category, or Surface
  • The Name of the Tournament is always a concatenation of the City and the Category, so in effect is superfluous 
  • Some of the Cities are in CAPS, some not.
  • The Country filter doesn't work terribly well.  Specifically, if I am searching for "Cyprus"  yet have selected a month where there are no tournaments in Cyprus, then the search fails to recognize Cyprus.  In addition your search function can be configured to capture structured to look for other a couple of ways of spelling a country.  For example, I looked for “England”, and found nothing.   It should suggest Great Britain.   Similarly United States doesn't trigger, the code is USA.  However you can easily configure where your country database has 2 or 3 alternative search names (hidden) that will then show “Great Britain” if I were to type any of the following "UK, GB, England, Wales, Scotland, Northern Ireland etc)

Registering/Applying for a tournament

Checking out the draw for tournament (this page→https://www.itftennis.com/en/tournament/mt400-limassol/cyp/2024/s-mt400-cyp-2024-004/draws-and-results/) 

  • Each tournament has a single URL for all the draws (Mens, Womens, Mixed…. All age groups), and they control the display with Javascript 
    • Example: https://www.itftennis.com/en/tournament/mt400-limassol/cyp/2024/s-mt400-cyp-2024-004/draws-and-results/
  • That means you can't share the URL to direct family/friends/partners for specific draw. You have to tell them to navigate to say "Mens / Singles, Over 45)
  • Moreover, the site doesn't remember anything about the user, so refreshing the Age category resets the gender of the user. 
    • I would recommend tracking the default with a cookie or alternatively providing a unique URL (trade-off is that it is slightly to flick between tournaments, but most users are not doing that)
  • The order of play page doesn't optimally use the screen width. On high resolution screens you could see 12 courts simultaneously, rather than clicking across screens
    • Similarly the court numbering at the top is confusing. 
    • Granted on a phone it needs to be swipe right for 
Pending
21 Ski Jobs #: 1
21.01

Objective

  • To create an improved version of https://www.ski-jobs.co.uk/, which we started before (the ‘recruitment’ site).  
  • We can restart looking at that in parallel to #1 and #2 as I think once this is working I can do a lot of the development work myself.  I want to first make the workflow superior to this site and then I want to scrape all the jobs from this site and a few others.   
  • It will become evident as we build this , but first priority is to get it working with fresh (manually entered) data. 

Competitor sites

Search fields:

  • Location: French Alps/ Swiss Alps
  • Season: Summer/ Winter/ All-year
  • Duration: 3 months or Start and End date:
  • Jobs: Chalet Host/ Chalet Couple/ Chalet Chefs/ French-speaking PA/ Resort Manager/ housekeeper/ 
  • Salary: Competitive/ 1,700 Euro net per month (French contract; food and ski hire included) – Chalet Hosts? Driver & hospitality assistant @ Meriski/ 2,100 Euro net per month for Chalet Chefs (working 5 days a week)
  • Workdays: 6/ 4 (driver & hospitality assistant @ Meriski)
  • Nationality:  EU passport or Carte de sejour/ New Zealand, Australian, Canadian, or South African passport holders who have obtained a working holiday visa for France

For candidates

  • Candidate CV review
  • Referal fees

For employers:

  • Ask clients what they want
  • Success based (no hires, no fees)
  • Target audience may be France
  • Transport from UK to France/Austrai( check fllght costs with lots of luggage in early dec)
  • Contract generation
  • University fayres
  • Visa, Tax

Clients

Pending
23 Flight Database #: 3
23.01

Separate out the Flight scraping software from the AX Tools and the StephenNurse site and consolidate into a single site. 

Scrape all flights to/from PFO and Larnaca airports and tracks prices over time as well as flight times and actual arrival and depart times

 

Pending
23.02

Flight database

  • The objective is to build up a database of all future airline/flight numbers/departure/arrival times for a given airport (eg PFO).
  • The objective is to get data about every flight scheduled in to/out of Pathos airport (or Geneva airport).  So each day going forward, i want to see the flight number, airline, destination/departure airports, schedule time and actual departure/arrival times.
  • The flight database is designed to provide data to the AXtools and the ParkNRide projects.
  • To do this I want to list all the destinations served by an airport (eg for PFO it is LGW, FRA, LHR,  LSN, etc) 
    • For each date and route (eg LGW-PFO), return the flight details.
    • Look for direct (non-stop) flights only
      • Return the list of flights (date, airline, take-off and landing time, price)
    • We will match that to a database of flights (airline, route, time) to get a flight number.   If a new flight, add a new record to look up the flight number.

The source could be either kayak.com or aviationstack.com (Login: nurse_stephen@hotmail.com; Password: Descartes99)

Pending
23.03

Add Flights/Destinations

  • Include Flight prices.
    • Copy from Stephen-nurse.com
    • Allow users to add a new airport; Show if flights need refreshing
    • Add a view with dates with flight prices and villa availability
Pending
30 Personal Admin #: 6
30.01

Kimberly admin

  • Ax -Keys and license, miscellaneous papers 
  • Nicolas.  Tell him about the funeral and let him know about keys and driving license
Pending
30.02

Admin

  • Car MOT, service and tires 
  • Car keys cut - MS Locksmith
  • Toasty picture frame - Mondart Framing & Art Supplies or Kings Mall
  • Hygeniest - Farfaras Dentist Hygenist
  • Cosmetic dentist
  • Health MOT
  • Book RAK Flights
  • Ozempic
Pending
30.03

James

  • Prepare summary of EIS loan
  • Think about EIS loan and call option idea
Pending
30.04

TechArete

  • Write a tech contract for Malcolm
Pending
30.05

Personal Admin

  • Will
  • Health insurance
  • Physio exercises
  • IT course 
    • iOS; Buy Mac
  • Facebook list
    • e-bike. 
    • Padel board 
  • Whey powder / Creatine
Pending
30.06

Pension

  • Call Towers and Reassure to ask about drawdown (one time or multiple)

UK Tax

  • Loan interest and Scion
Pending