WhosClimbing
Abstract
As rock climbing continues to grow more people find themselves searching for compatible climbing partners. WhosClimbing aims to provide a scalable software application that connects climbers based on their location and provides information on surrounding crags and gyms. Geolocation technologies will allow users to find partners and new climbing spots on a built in map. Client side rendering ensures the availability of data, allowing users to be notified of their friends activities live! Interoperability is highlighted by robust APIs which integrate real-time data from popular climbing applications (moon, kilter, tension, theCrag, Stókt) into users profiles.
Author
Name: Callum Reilly
Student number: 45804889
Functionality
We provide a medium for users to create customisable climbing events, indoor or outdoor, and share climbing related achievements. Users can notfify wether they are attending climbing locations on a map which features live updates, and view others accounts displaying information related to their climbing.
Features
In a completed application the following features would be available:
Account:
- Users must create an account in order to interact with the application,
supplying basic information (username, password, email, phone, etc)
- A users account will be encapsulated within a customisable dashboard
- Account creation will be handled by laravel backend using RESTful API.
Dashboard:
- After making an account users will be directed to a customisable personal dashboard, made possible by the integration of client side rendering (CSR)
- Dashboards will display various widgets that can be moved and toggled by the user
- Widgets include:
- Friends online / climbing now
- Stats about your climbing (see Statistics)
- Favourited crags (inside or outside of radius)
- New Crags or routes that have been developed
- Dashboard will include all nav routing throughout application
Friends:
- Users can follow their friends accounts
- Message friends within the application about upcomming dates
- Friend’s notifications have unique priorities over other users, including being displayed on your dashboard
Map:
- Interactable map will display icons which represent climbing locations
- Locations will be categorised with unique icons depending on whether they are:
- Indoor gym
- Bouldering crag
- Sport Climbing crag
- Trad Climbing crag
- Users will be able to adjust their radius (from their current location) which indicates the climbs an API will fetch information on. Data will come from global climbing database TheCrag.
Attendance:
- Users can express interest in going to crags on certain dates by interacting with
locations of interest on the map
- Users can filter to see where their friends are going or anyone in their current radius.
- Climbers can also select locations from around the world and see activiity occuring in them, real time. A great feature for savvy climbers interested in getting the scoop on cutting edge ascents.
Statistics:
- Backend will track information about where users are climbing to be displayed on users dashboards
- This information will be processed by the backend to display useful insights:
- Users total days climbed (year/month/week)
- Users days climbed in a row
- Most climbed at locations in radius
- Most climbed with friends
- API will retrieve data logged on popular indoor system board applications including:
- Stokt
- MoonBoard
- KilterBoard
- TensionBoard
Scope
The intended scope for the minimum viable provduct (MVP) is as follows:
Account Creation:
- Allow a mock user to register and create an account with basic information (username, password, email, phone, etc.)
- Account creation using laravel as a backend framework
Dashboard:
- Dashboard will be developed using a React.js frontend (Integration with RESTful APIs and MapBox) connected to laravel using inertia.
- Personalized user dashboards displaying key information
- Development of at least 2 widgets, one displaying friends activity and another displaying attendance stats
Friends:
- Ability to follow and connect with friends
- See friedns activity on map
Geolocation Features:
- Integration of an interactive map displaying climbing locations with real-time updates
- Develop API which fetches data from theCrag to display on map
- Will leverage MapBox to create map services and PostGIS for storing geospatial data in PostgreSQL
Attendance Tracking:
- Users can mark their interest in visiting a climbing location
- Visibility of friends’ planned climbs and general community activity
Quality Attributes
Interoperability -
The application will be designed to integrate seamlessly with popular climbing apps such as Stokt, MoonBoard, KilterBoard, and TensionBoard. A robust API will allow real-time retrieval of climbing session data. By ensuring adherence to standard API protocols (RESTful), our system will be able to communicate effectively with external services. This will enhance user experience by providing a centralized platform where climbers can access and analyze their progress across multiple climbing tools without switching between different applications.
Scalability -
The application must be scalable to account for increased user traffic, both as the application increases in popularity and during seasonal climbing periods. Making use of client side rending (CSR) means the server handles data fetching; leaving page rendering to the client. A good scalable system will improve user experience during high load periods. It will also be developed in a way that allows components to be scaled independantly when they are needed, reducing redundancy.
Availability -
The availability of data is defined as real-time updates across the application without the need for total page reloads. This will be achieved through CSR. Client Side Rendering (CSR) enables the dyncamic loading of content to create a rich, interactive experience for users. This facilitates live notifications within the app for new ascents from friends, and who is attending certain climbing areas. It also gives the option for dashboard customisation, brining the application to life with a personalised touch.
Evaluation
Each quality attribute will be evaluated thoughroughly to ensure the application complies
Interoperability Testing -
- Verify API integration with climbing platforms by retrieving and displaying user data accurately
- Unit testing will ensure API is retrieving expected data values and working as intended
- Conduct end-to-end testing to ensure data consistency across systems using Selenium WebDriver to a mock a user interacting with the website
- Perform error handling tests to confirm the system gracefully handles API failures
- jscoverage will ensure at least 80% code coverage throguhout
Scalability Testing -
- Conduct load testing to simulate high traffic conditions and evaluate system performance using testing software JMeter
- Utilize stress testing to determine system limits and optimize performance bottlenecks
- Monitor server response times under increased user load to validate CSR efficiency
- Ensure each aspect of the application is developed modularly such that single components can be scaled in a lightweight manner when needed.
Availability Testing -
- Perform real-time update checks to confirm that live notifications and map updates function without requiring full-page reloads
- Use latency testing to measure the speed of data updates across different network conditions
- Implement automated monitoring tools to track uptime and detect potential downtime issues
- Unit testing will ensure the expected data is being rendered accurately