To Do: Top Priorities (Top Priority)

/
Priority Project #
1 ATS Template #: 1
1.07

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 AX Tools #: 8
2.02

Client site (public pages)

  • The “Book Now” page on the public site collect a basic booking (One-way or Return to the same routes -  ie only 1 or 2 journeys, same combinations).   
    • The backend can be used for more complex ones.
    • Unlike a backend booking, we should sequence the collection of data….  ie the client wants to know prices and options first, before typing in their details and payment details. 
  • This site does it brilliantly:  https://www.mountaindropoffs.com.  
    • Please try making a fake booking (don't save anything, just click out before payment - they are nice people) their site.  
    • It is amazing and super well thought out site. Best in the business. 
  • This is what you will see.  All on one page but with tabs to make it quick 
    • Step 1 is picking the dates and destinations
      • Number of pax
      • Destination list
        • Nice details: Return date can't be before Outbound date
        • Second journey defaults to the reverse of First journey
          • Dates remembered if you unclick Return and back again
    • Step 2 is flight data or address and then the service type/price
      • If airport: flight
      • if non airport:  Address
        • Then picking the Shared/Private/Private+ with price 
    • Step 3 is collecting contact details, names/emails/telephone/babies etc and luggage
      • Nice way to get international codes
      • Look at the extras (babies, luggage)
    • Step 4 payment
  • The design of this is 100% optimal (the owner is very experienced and logical) and we did exactly the same, but my old site has been changed so I can't show you that

 

Now all of this is the same as the booking entity and the (1 or 2) transfers in that booking.  Make senses?

 

 

Pending
2.03

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
2.04

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
2.06

Ops Warnings

  • Build out a list of Transfers (not bookings) where certain aspects are unclear on the booking
    • Accommodation unknown
    • Flight unknown
    • Follow-up flag marked 
    • Missing client emails or phone numbers
    • Phone number check
      • Email link to client for confirmation
Pending
2.08

Client phone numbers

  • Including details of the tel number (country code, PhoneAnalyser - confirm if the number is “verified”) 
Pending
2.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
2.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
2.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 LinkSync #: 1
4.03

CRM  (SN will do this)

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

Forms

  • Share the MEU3 form
  • Design how the responses to an input error is emails to the user upon verification 
Pending
6 Criminal Record Checks #: 3
6.01

Enable Credit Card Payments

  • Integrate Stripe etc 
Pending
6.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
6.03

Checked By

  • Edited field only to be visible to ROLE_ADMIN
  • Create a standard list of replies
Pending
7 Tennis Club #: 9
7.01

Payment

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

Management reporting stats pages 

Pending
7.03

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
7.04

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
7.05

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
7.08

Users - Delete All

  • Doesn't work
Pending
7.12

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
7.13

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
7.14

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

Pending
8 Tennis Finder #: 11
8.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
8.03

Payments

Pending
8.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
8.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
8.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
8.10

ClubSpark

  • Buy smart card per venue. Limit bookings to one per day and 5 per week per smart card to avoid scrutiny. 
Pending
8.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
8.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
8.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
8.15

Scraping

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

Bookings

  • Allow non-logged in users to book (ie straight to CC provider, take email)
  • Email confirmation
Pending
10 Financial Advisor #: 1
10.02

Mortgage

Background (Non-Technical Explanation)

  • A mortgage is a loan used to buy a property (house or apartment).
  • The borrower repays the loan over time with interest.

Key Concepts

1. Interest Rate

  • This is the cost of borrowing money, expressed as a percentage per year.
  • Example: 5% means you pay 5% of the loan amount per year as interest

2. Fixed vs Variable Mortgages

Fixed Rate Mortgage

  • The interest rate is locked (fixed) for a set period

Common fixed periods:

  • 2 years
  • 3 years
  • 5 years
  • 10 years

Example:
“5-year fixed at 4.5%”
→ Rate stays 4.5% for 5 years, then changes

Variable Rate Mortgage

  • The rate moves over time (can go up or down)
  • Often linked to central bank rates or market rates

3. Fees, Cashback, Legal/Valuation Frees/Other terms

Mortgages often include upfront costs:

  • Fixed fee (e.g. £999)
  • Or % of loan (e.g. 1%)
  • Cashback (essentially a negative fee)
  • Maximum Loan-to-Value (LTV)

These must be included when comparing deals.

4. Why Compare Mortgages?

The goal is to find the cheapest total cost, not just the lowest rate.

 

======================================================================

2. “Swap Rates?” (Important Context)

  • Swap rates are market interest rates used by banks.
  • They represent the true cost of fixed-rate lending in financial markets.

Why They Matter

Banks price mortgages based on swap rates

If:

5-year swap = 3%

Mortgage = 5%
👉 Bank margin ≈ 2%

This allows us to:

  • Compare banks
  • Identify overpriced or cheap mortgages

3. System Objective

Build a system that:

  • Collects mortgage offers from aggregators (e.g. MoneySuperMarket)
  • Stores them in a structured format
  • Collects daily swap rates
  • Enables mathematical comparison of mortgage deals vs market rates

 

CODING TO DO

4. Mortgage Rates Scraper

See: http://localhost:8000/mortgage/rates/

This page contains buttons:

  • 2-year
  • 3-year
  • 5-year
  • 10-year

Each button leads to a page showing mortgage offers for that maturity term

What to Scrape (Per Mortgage Product)

For each mortgage on the page, extract:

  • Link on moneysupermarket
  • Bank Name
  • Term (ie fixed period in years (eg 2yr, 3yr, 5yr or 10yr)
  • Interest Rate (%)
  • Rate Type 
  • Fees
  1. Fixed amount (£)
  2. Percentage (%) if available
  3. Cashback
  • Maximum LTV
  • Free Legals 
  • Free Valuation

Storage

Create a new record via:  http://localhost:8000/mortgage/rates/new

Scraper Logic

For each term (2, 3, 5, 10):

  • Open the page (2yr, 3yr, 5yr, 10yr)
  • Loop through all mortgage deals available
  • Extract required fields
  • Save one record per mortgage deal available

Maintaining a record over time…  (let's tackle handling versioning over time after we have the scrape working)

  • If the Mortgage Deal already exists in the database (same Lender, same maturity term, same rate, same fees, status=Active) then don't create a new one record
  • If it is a Mortgage Deal, set “DateLaunched” as today and set status as Active
  • If a mortgage record (Active) is no longer present, mark the date "DateWithdrawn" as today

 

5. Swap Rate Scraper Specification

See:  http://localhost:8000/swap/rates/

What to Extract

For each tenor:

  • 2-year
  • 3-year
  • 5-year
  • 10-year

Extract:

  • Rate (%)
  • Tenor
  • Date (today’s date)

Execution

Run once per day (cron job) 

6. End Goal (Why This Matters)

This system allows  comparison of mortgage deals on a like-for-like basis.  I can explain why to you, but not important for the coding exercise

 

Pending
15 Thea Vista Pissouri #: 2
15.01

Translation

  • Translate copy and all headings into required languages (to be agreed with John and Catherine)
Pending
15.03

Calendar synchronisation with Airbnb

  • Managing availability between the website and Airbnb is not completely trivial, but there is a standard solution that works well, so my research tells me.
  • Both systems support iCal calendar synchronisation. In practice this means the two calendars exchange availability information automatically:
    • The website will publish a calendar feed showing dates that are already booked or blocked. Airbnb can read this and automatically mark those dates as unavailable on Airbnb.
    • Airbnb also provides its own calendar feed. 
    • The website will read that feed regularly and automatically block those dates on the website if an Airbnb booking is made.
  • This avoids double bookings between the two platforms. There is usually a small delay (typically a couple of hours), but this is the normal way independent property websites operate alongside Airbnb.
  • I have made that link in the TheaVistaPissouri project to make bookings made on our site available to AirBnB, but not the reverse – can you research?

 

Pending
16 News-scrapper #: 3
16.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
16.03

Set up a Payment gateway- Stripe? 

Pending
16.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
29 Personal Admin #: 3
29.02

Taxi app

  • As you know, we haven’t yet managed to get the Alpex software to work standalone, but once we have that working I would like to adapt it in a number of ways.  My first objective is to enable it to work for at a number of new airports and more strategically I want to move away from the owner-operator model (where I own the cars and employ the drivers) to an aggregator model where we outsource to other single driver operators. This will be quite a build change.   In addition I want to build a iPhone (and maybe Android) version of the client website so we can use the client tracking features.  

Park-To-Fly

  • I have seen a company here in Cyprus that could benefit from most of the functionality of the Alpex software.  The company essentially provides a car park close to the airport, where passengers can park their cars near the airport while they are on holiday, and the company drops them to/from the airport in small buses. 
  • In essence, from an IT perspective, their business is very similar to my Swiss bus company (Alpex), so I was proposing to strip down the Alpex system to automate that business.  The key is that it requires the company to track flights, and move people on/off a shared bus to/from the airport.   So there are lots of synergies. 

Accommodation software

  • I was going to buy a house in Cyprus and rent it out in the summer months.  I would like to build a website for to advertise that house and others around.  Similar to booking.com

Kids Travel Lite

  • I met the owner of a company called KidsTravelLite.com. In short, that company hires children’s equipment to tourists while they are holiday (e.g. prams, cots, toys).  Her site is aesthetically beautiful but very simple, and I offered to improve it. It does not do inventory management or track flights and this could synch into the taxi app.  One idea is to integrate the hiring with the taxi to/from the airport

Recruitment site

Overall app

  • I thought I would ultimately combine all the with the tennis club website into a single offering (single resort app) as they all rely on some similar info (e.g. accommodation details, flight details)and I can see synergies if customers only have 1 login.  In future I can add restaurant bookings, baby sitters etc.  Perhaps that ‘single login’ is something we should talk about at the start?

BreaksToLove app 

 

Pending
29.05

Personal Admin

  • Sell unused bikes 
  • Will
  • Health insurance
  • Physio exercises
  • IT course 
    • iOS; Buy Mac
  • Mum plans 
    • Power of Attorney 
    • Money via the company
  • Facebook list
    • e-bike. Peloton. Golf clubs. Kitchen equipment (coffee machine. Orange juicer). Padel board 
  • Whey powder - how to use?  
  • Flying lessons. 
    • Website to summarise notes
Pending
29.06

Pension

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

UK Tax

  • Loan interest and Scion

Mum

 

Pending