Sunday 7 February 2021

Sprints 21 & 22 Going Live with V1

Presentation to Committee

On the 17th Novemember, I made a presentation to the committee of Tower Hamlets Canoe Club (THCC).  The purpose of the presentation was less of a demonstration of the application itself (the committee members had already seen the application during trialling) and more about values and motivators behind it.

BoatTrippy will always be an application that aims to make the administration side of organising club and private boating activities easier for the club members.  If it doesn't meet this aim, we need to understand why and make the application easier to use.  The tagline for the presentation was 'less admin, more fun'!

The presentation content was an 'overview' of the following areas:

  • Scope of the application - what it does (an what it it doesn't and shouldn't)
  • What is the Minimum Viable Product (MVP) and what have we developed
  • What next.  Going Live.
  • Support & Maintenance.  Low maintenance approach.
  • The future of BoatTrippy.  What new features could be added?

Deployment into THCC Subscription - We're Live!!

On 7th December, we (myself, the THCC webmaster and treasurer) created the new THCC Azure subscription and deployed the application to the subscription.  The responsibilities are now:

  • Treasurer is responsible for the Azure billing
  • Webmaster is responsible for administration oft he subscription and the availability of the app
Security

During this period, I have been learning more about web application security.  I've been working through some of the content on the OWASP site including working through the vulnerabilities in the Juice Shop App.  One area I applied to BoatTrippy was to resolve known vulnerabilities in the open source dependencies.  These were mostly in the development dependencies, but still needed to be resolved.

Monitoring And Alerts

Three monitoring alerts were added to a the application:

  • Availability Test -  This checks that the application can be loaded every 5 minutes from 5 different locations globally.  This has a nice side effect that the application is kept alive on the server, so will load almost instantly at any time.
  • Health Alerts -  This notifies if any of the Azure services that are used by the application are affected by down-time
  • Failure Anomalies -  This checks the application insights and looks for exceptions and other events that would indicate that the application had failed.
Notifications are sent by email to the users in the notification group.  Currently, this group just contains me, but once the application has been used for a while and can confirm that we are not getting too many false positives, the webmaster and others could be added.

Saturday 31 October 2020

Sprint 20 More work on expenses

Completing the expenses workflow

Added a way for the treasurer to view expenses and mark them as noted.  After talking to the club treasurer it was decided that there shouldn't be two types of expense, so I consolidated by removing the fuel expense submission form the car.  I extended the trip expenses to provide a category, so now all expenses can be submitted from the same place, removing any confusion.

Here is the screen to submit the expenses:


And here is the screen that the treasurer can use to view expenses and mark them as noted.


Application Icons

I noticed that the application icons were not being displayed on some platforms.  On Windows based browsers, it was fine, but missing on MacOS, iOS and Android.

I found this great website that automatically generates all of the icons needed for each platform and all the supporting files.  It also had a test facility that check that everything was in place.  

Open Trialling

The open trialling has been going for nearly a month now and has been a really good source of feedback about the app.  All three section reps have created a trip and advertised it on the forum.  37 members have signed into the app.  Here are some statistics.

Business:

No of trips created: 5
No of groups: 10
No of members on trips: 25
No of cars: 19
No of club boats booked: 23

Transactional:

Requests: 3.3k
Dependency Hits: 38k




Sunday 25 October 2020

Sprint 19 Treasurer features

Deposits

Added a feature where groups can be set up as needing a deposit.  The treasurer can then approve the user once the deposit has been received.

Below, the 'beginners' group has been set up as needing a deposit.


The deposit icon will remain 'unlit' until the treasure marks as paid.


Here is the screen that the treasurer uses to mark a deposit as paid.



Expenses

Added two types of expenses:

  1. Fuel expenses.  These can be added to a vehicle by the diver
  2. Trip expenses.  These can be added to the trip by anyone that was on the trip
These will be then made available to the treasurer when doing the accounts for the trip.

Links in the description

Angular automatically sanitises any html that is injected into the page.  Here is an article about the security implications of this approach.  For simplicity, users can add html anchors to add links.



Add a tag to the additional details


Embeds a link into the additional details.


Friday 16 October 2020

Sprint 18 Bug fixing and fine tuning

Open Trialling

This month saw the open trialling of the application.  Section Reps created trips which they advertised on the club forum.  Members could then sign up for these 'imaginary' trips.  The forum threads were then left open for feedback.  

This has been a successful and valuable exercise.  As well as identifying and fixing a couple of bugs, I also identified a number of functional fine tunings that would make the app easier to use, simpler and more intuitive.

Fine Tunings

  • Links to trips on the access report.  This was requested my the equipment officer as it is now not as simple to just find the trip.
  • Move miscellaneous kit booking to the equipment booking tab.  This was requested by a couple of members and I agree that this location makes more sense.
  • Automatically add boat to car for the driver.  I noticed that drivers were not doing this additional step which would be the correct action most of the time.
  • Set general stars to the highest discipline specific stars.  There are a couple of members that have discipline specific star awards but no general awards.  This looks strange on general paddling trips so put in some logic address this.
  • Add 'Full' status bars to trip and groups that are full.  This was requested by a member who took the last place on a group.
  • Altered the working for travelling independently to only be used when no basin access is required.  This should encourage those travelling from non-nearby locations to still put there car into the car share.
Bugfixes

  • Login failed when user had a certain combination of star awards.  This was a straightforward coding bug.
  • User joined a trip but didn't display the updated trip.  This was a specific scenario that has now being fixed.

Saturday 3 October 2020

Sprint 17 Boat Image Uploads and Live Trialling

Boat Image Uploads

I've tried to keep this very simple for the time being.  It allows equipment officers to upload a single image for a boat and will replace an existing image.   This is to keep the image storage as small as possible.  I've also not included any image manipulation.  This will be the responsibility of the equipment officers to crop the images so that they have a 16:9 aspect ratio.  I felt that it would be better to let the officers do this manually and verify that the results show the boats correctly than rely on an automated crop.

Live Trialling

I've sent an email out to the section reps with instructions on how to create an imaginary trip.  The plan is for the reps to create a 'typical' trip that the members can sign up for and try out all the features.  The reps can then 'advertise' the trip on the forum so we can see how the application handles the trip planning process, identify an issues or missing features

I've set up an advertised an example imaginary trip and posted on the forum.  Awaiting the section reps' trips to be advertised. 

Boat Image Uploads Update

Switched to using an image cropper component to ensure that images are uploaded as 16:9 aspect ratio.

To use this I needed to be able to convert from a data URI to an IFormFile (Blob).  This article contains function code to do this. 

For the test I used a blank image.

Friday 25 September 2020

Sprint 16 Adding groups, cancel trips and booking non club boats

Adding Groups

Two feature requests were made to extend groups so that new groups could be added and/or groups could have unlimited numbers.  I decided to just implement the add a group feature as this would effectively give unlimited groups.

Cancel Trip

This is a feature that I hope wouldn't be used, but is required in the cases that the weather is not good or other out of our control events that require the trip to be cancelled.

Booking a non-club boat

I've added non-club (SBOAC) boats to the inventory so that they can be booked.  A confirmation pops up to remind the member that they need to pre-arrange bookings of these craft.

Uploading Pictures

I've decided to use Azure Storage to store pictures rather than use a 3rd party image storage and manipulation service.  I'll design it is such a way that this can be replaced at a later date if necessary.  I want to stay within the Azure ecosystem to keep the deployment simple with terraform.


Saturday 19 September 2020

Sprint 15 Forum integration, Private Trips and Miscellaneous Kit

Forum Integration

First of all I needed to introduce login redirect so that once the member has logged in, it would automatically redirect to the page specified by the link. This was achieved quite simply by storing the url and then routing to it after a successful login.

The next step was to isolate specific parts of the system so that they are self contained and didn't leak into each other.  When a data load failed, rather than redirect to the trips page, it would redirect to an error landing page that said 'try again later'.

Finally, I needed to restrict the trips page to just the club officials.  This would then force members to look at the forum to find out about new trips.  Instead of this being the logged in home page, a new console page was created to provide default links to the isolated parts of the system.

Private Trips

Private trips are a cut-down version of club trips.  The differences are as follows:

  • Members cannot join a private trip, they are added by the organiser
  • Managing groups is not provided in private trips
  • Providing additional trip information is not provided in private trips
  • Car share is provided so that basin access can be requested

Screen to create a new private trip:


Once the private trip has been created, the organiser can then add members in as participants:




Miscellaneous Kit

After discussing this with one of the equipment officers, we decided to handle this with a free text field that the participant can edit. A new field has been added to the participant notes edit form.

And displayed on the participant summary:


What next

The next step is to do a full club trial with this version of the application.  This will be a forum integrated test where I ask the club reps to create 'imaginary' trips that can then be advertised on the forum and all club members can sign up for.  This will be taking the trialling to the next level and ironing out any issues with the app or the processes.