Stage: Pre-Release
App images below
An app for rock climbers by a rock climber.
Easily build, edit, share, and track boulders on a spray wall.
View and filter through other user published boulders on a spray wall, switch between spray walls in a gym, or search for other gyms.
Full stack application:
- React Native
- Expo
- Redux
- Django
- PostgreSQL
- Amazon S3 Buckets
- AWS RDS
- Heroku
- Google Maps API: Geocoder and Places
Secure authentication with Django sessions and CSRF tokens.
Search for your gym or home wall via Apple Maps and Google geocoder API.
Add a new gym or home wall - edit the name, type, and location.
Add new spray walls to that gym - edit each spray wall's name and default image.
Home screen with a clean UI/UX that immediately displays the gym's name, spray walls, and a list of all published boulders in that spray wall.
Filter between spray walls in that gym or filter boulders through categorical filters or text inputs for specificity.
Add new boulder - options to use the default spray wall image, camera, or upload an image.
Edit and paint the boulder using your chosen image - green paint: starting hand holds, purple paint: foot holds, blue paint: hand and foot holds, red paint: finishing hold.
Can zoom and paint small holds whilst editing the boulder.
Using Python Imaging Library to manipulate the image by gray-scaling the entire image except for painted holds - leave the painted holds the color they are.
Storing all images in an Amazon S3 bucket and receiving the url to that image to send to the frontend and store in PostgreSQL database.
Add a boulder name, description, and more to your newly created boulder.
Publish or leave your boulder as a draft.
View any boulder - its name, grade, rating, image, setter name, date created, description, etc.
View the boulder image as a full screen with zoom and pan capabilities.
Optimistic updating when liking or bookmarking the boulder.
Log a repeated or first time ascent of a boulder - adding the number of attempts, grade and rating suggestion.
View overall statistics of that boulder - how many people have climbed the boulder, distribution graph of all suggested grades from users, and more.
View your personal statistics on that particular boulder - date ascended, suggested, grade, and number of attempts.
Add the boulder to your circuits.
Add a new circuit to your circuit list and place any boulders in that circuit (that exist on that spray wall).
Activity screen that displays and time stamps your significant activities - publishing a new boulder, ascending a boulder, repeating an ascent of a boulder, liking a boulder, bookmarking a boulder, adding a boulder to a circuit, and creating a new boulder.
Activity list are paginated to improve performance.
Profile screen that beautifully displays username profile image, current gym, current spray wall, categorical boulder data, statistics, and circuits.
Can freely change spray walls in your gym through the profile screen which changes all your boulder info (boulder info tied to each spray wall).
View all your logged boulders that displays a graph of quantity of boulders climbed at each grade difficulty, and a section list of all boulders logged in a particular spray wall for each session (day).
View liked, bookmarked, and created boulders for a particular spray wall.
View all the boulders in particular circuits you custom made.
Edit profile by changing your profile image, editing your nick name, username, email, signing out, or deleting your profile.
When changing your profile image, you can crop the image in aspect ratio 1:1, whilst also zooming and panning to desired region of the image.
Switch to a different gym in your profile that which you have shown activity in previously.
Django as a backend utilizing its model-template-view architectural pattern as well as Django's rest_framework.
7 Django models: Gym, SprayWall, Person, Boulder, Circuit, Like Send, Bookmark, and Activity.
Amazon S3 bucket for storing all images and using boto3 SDK for Python to retrieve those image urls for frontend use or storing in the database.
PostgreSQL as a relational database management system to sort and find related data based on primary keys, such as certain boulders in a particular spray wall, displaying user data, user boulder statistics, etc..
Over 35 API calls.
CRUD operations in all areas of data posting - boulder creations, custom profile editing, gym and spray wall editing, circuits, etc.
Organized code via categorized views, utils, helper functions, common functions, and common imports.
Login Create Account Home Boulder Add Boulder Edit Boulder Zoom and paint boulder NOT NEEDED NOT NEEDED Edited Boulder Preview Published Boulder Full Screen Image of Boulder Log Ascent of Boulder Add Boulder to a created circuit NOT NEEDED Boulder Statistics of all user on particular boulder User's logged ascents on a particular boulder Boulder settings (only author of boulder can delete boulder) Gym settings (only for gym owners / spray wall owners) Edit gym, spray walls for that gym, or delete gym entirely Change gym type Change gym name Particular spray wall settings to change spray wall name or image Change spray wall name Filter list of boulders in chosen spray wall in the home screen Map to search for gyms near you Map search results Map search results for a chosen gym (gym's info) Activity of user (created boulder, sent boulder, etc) Profile Home screen alternate spray wall chosen Alternate spray wall's boulder chosen (different image aspect ratio) Profile switching to a different spray wall in a gym Profile user's logbooked boulders Profile user's liked boulders Profile (scrolled down) Profile user's top grade boulder(s) Profile user's flahsed boulders (successfully ascended a boulder for the first time on user's first attempt) Profile user's circuit boulders Profile options pop up Profile option switch to a different gym (only gyms that user has had activity in) Edit profile Crop image (zoom or pan. Works for any aspect ratio) Change user's nickname in edit profile Add new spray wall to a gym (only gym owners/admins can do this) Home screen custom search in text input for particular boulders in that spray wall