Giter VIP home page Giter VIP logo

windsurf-session-log's Introduction

Windsurfer - Windsurfing Training Log App

The Purpose of the Project

Most wearable tech devices have features to record various sporting activities - running, cycling, yoga etc. However, there is no feature to record watersports sessions, apart from swimming. This app is designed to be used by windsurfers to log their training sessions which will allow them to track their progress on the water.

User Stories

  • Home page: As a visiting user, I want be able to see a navigation bar with links to the various pages of the site. And I want to be directed to the sign in page quickly and easily.

  • About page: As a visiting user, I want to learn more about the app and its purpose. And then be redirected to the sign up page quickly and easily.

  • Sign Up page: As a visiting user, I want to be able to fill in a sign up form quickly and easily, and receive confirmation that I have been successfully signed up.

  • Sign In page: As a visiting user, I want to be able to sign into the app quickly and easily, and receive confirmation that I have been successfully signed in.

  • My Sessions page: As a visiting user, I want to see a list of all the sessions I have logged so far and be able to log a new session quickly and easily.

  • Create Session page: As a visiting user, I want to be able to fill in a form with all the details about my training session. I want to receive confirmation that my session has been logged successfully.

  • Session Detail page: As a visiting user, I want to be able to see the details I have logged about a particular training session.

  • Edit Session page: As a visiting user, I want to be able to fill in a form that will update any or all elements of a particular training session. And receive confirmation that my session has been updated successfully.

  • Delete Session page: As a visiting user, I want to able to confirm that I want to delete the selected training session. And I want to receive confirmation that the session has been deleted successfully.

  • Log Out page: As a visiting user, I want to be able to log out of my profile and return to the home page. And receive confirmation that I have been signed out successfully.

  • Django Admin access: As admin of the app, I want to be able to access the admin page and edit/delete a particular session and/or edit/delete a user and all of their logged sessions.

Features

  • Nav bar - for non-authenticated users and for authenticated users.
    The app displays a nav-bar across all pages of the site. Prior to signing in, the user can see links to the home page, the about page, the sign in page and the sign up page.

After signing in, the user will see a link to the My Sessions page which displays a list of their logged sessions, and a link to sign out.

  • Log a session button - the user can see a button inviting them to log a session. The user will be redirected to sign in, if they haven't already done so. Otherwise they will be directed to their My Sessions page.

  • Footer - The app displays the same footer across all pages of the site. The user can see links to social media sites and the developer's GitHub and LinkedIn profiles.

  • Description of the app and link to sign up - the user can learn about how the app functions and then navigate to the sign up form.

  • Sign up form - The user can fill in their personal details to create a profile on the app.

  • Sign in form - The user can fill in their username and password and be signed into their profile.

  • Sessions list - The user can view their logged sessions list and click a button to log another session. A maximum of 5 logged sessions will be displayed per page.

  • Create session form - The user can fill in a form with all the details of their training session including what they did, how the wind was and how they would rate their time on the water.

  • Session detail - The user can click the session they want to view and the see the details they've logged.

  • Edit Session form - The user can easily update any section of the session's details.

  • Delete session confirmation button - The user can either confirm they want to delete a session or cancel the deletion process.

  • Sign out button - The user can confirm that they want to be signed out of the profile.

  • Success Messages - The user will see success messages on Siging up/in/out and on creating, updating and deleting a session log.

Future Features

  • Total Hours Tally - I would like to have a tally of all the training hours logged by the user displayed on their personal My Sessions page. This would further add to the purpose of the app and benefit the user in their windsurfing training journey.

  • Star rating - I would like the user to be able to see their session rating as stars rather than numbers. This would add to the UX/UI and create a positive user experience.

  • A map of locations - I would like to add a page to the site with a Google map of locations where there are decent windsurfing conditions.

  • A location suggestion form - I would also like to add an input feature where an app user can send a location suggestion to the app owner to review and then add to the map of locations. This would make the app a community-led feature and further encourage windsurfing training sessions.

  • Change password feature - I would like to implement an option for the user to update or change their password if they have forgotten it. Currently there is a link that takes the user to a page informing them to contact the app's fictional support team to change their password. A feature allowing the user to do this themselves would be more user friendly and in line with standard authentication features.

Typography and Color Scheme

Google Fonts:

  • For logo and headlines
  • For all other text

Colour palette generated by Coolers, using colours from the hero image on the Home page.

Wireframes

ERD

User Model:

Django built-in model for authentication purposes Fields:

  • user_id (primary key)
  • username
  • email (optional)
  • password
Session Model:

Custom model for the purpose of this project Fields:

  • Title
  • Created On (date field)
  • Date of Training
  • Slug
  • Author(foreign key linking to the User model)
  • Updated On (date field)
  • Details (User can add details about their training session e.g what they were learning/working on, comments from the coach, goals for the next session)
  • Time Logged on the Water (maximum of 6 hours)
  • Session Rating (out of 5, to rate how the user felt on the water during the session)
  • Wind Conditions (user selects how they would describe the wind during their session)

Meta:

  • Logged sessions ordered by most recent date
  • Unique_together for author and date

Technology

Languages

  • Python
  • HTML
  • CSS
  • JavaScript

Frameworks

  • Django and Django libraries: allauth, active link, autoslug, crispy forms, summernote
  • Bootstrap - for responsive styling

Database

  • ElephantSQL - a PostgreSQL database as a service

Other

  • Cloudinary - for image storage
  • Heroku - to deploy the site
  • Git - version control
  • GitHub - to host the project repo. Also used GitHub's Agile Project Board feature to plan the development of the project.

Testing

Follow this link to the testing results page.

Deployment

Fork the repository on GitHub

  • On the Windsurfer GitHub Repository page, click "Fork" in the top right of the page. A forked version of the project will appear.

  • Next Clone the forked repository by clicking the green "<> Code" button. Copy the URL and load it into your preferred IDE to set up the local environment and connect it with the GitHub repo.

Deploy on Heroku

  • When the forked repo of the project is ready to be deployed, create a Pipfile.
  • In the terminal enter the command "pip3 freeze > requirements.txt". A file with all the requirements for the app will be created.
Setting up Heroku
  • Navigate to the Heroku website
  • Login to Heroku and click on "Create App"
  • Click "New" and "Create a new app"
  • Choose a name and select your location
  • Navigate to the Resources tab
  • From the Resources list select "Heroku Postgres"
  • Navigate to the "Deploy" tab
  • Click on "Connect to Github" and search for your repository
  • Navigate to the Settings tab
  • Reveal Config Vars and add your Cloudinary and Database URL (from Heroku-Postgres) and Secret key

Deploy on Heroku

  • Navigate to the Deploy tab
  • Choose the main branch for deploying and enable automatic deployment
  • Select manual deploy to build the App for the first time and check your build log for any issues

Agile Process

  • The app was planned a developed following the Agile approach.

  • The GitHub Kanban project board feature was used to set up the various stages of the project development.

  • The project was split into several Epics, which were then split into User Stories with tasks.

  • The user stories were labelled following MoSCoW prioritization aiming to achieve a viable MVP.

  • As the project is public on GitHub, it is open to other users to view and try to contribute to. I had an interesting incident when another GitHub user asked to be assigned to a User Story #9. I want to clarify that there were no contributors to the project apart from myself.

Credits

For Roadblock Solutions and Explanations

CI Walk-through projects and other PP4s for examples/inspiration on structure

  • CI Hello Django and I think therefore I blog - video tutorials
  • Kim Bergstroem - PP4 - for inspiration on blog-like features
  • Christian Goran - Dome Restaurant - for inspiration for My Sessions table display feature.

Media

windsurf-session-log's People

Contributors

barty-s avatar

Watchers

 avatar

windsurf-session-log's Issues

README

Continuously add to README as project develops

USER STORY: Sign up/in redirect

As a user I can sign up/in so that see 'My sessions' page

Acceptance Criteria

  • Acceptance Criteria 1 - user is redirected to a page listing their logged sessions
  • Acceptance Criteria 2 - this page is only accessible to authenticated users
  • Acceptance Criteria 3

Tasks

  • Task 1 - set up view for my sessions list
  • Task 2 - set up template for my sessions
  • Task 3 - link up urls for my sessions

USER STORY: Create sessions

As a registered user I can log a new training session record so that keep track of my training sessions

Acceptance Criteria

  • Acceptance Criteria 1 - Button to 'add session' functions
  • Acceptance Criteria 2 - User directed to add session form
  • Acceptance Criteria 3 - On save, session is logged and displayed in session list

Tasks

  • Task 1 - create view code for add session
  • Task 2 - Build 'add session' form page template + link url
  • Task 3 - link add session button to the form page

USER STORY: Customize Django default pages

As a user I can access the sign up/in/out pages and have a positive emotional experience

Acceptance Criteria

  • Acceptance Criteria 1 - the default pages follow the design concept of the site
  • Acceptance Criteria 2 - the forms and buttons are easy to use without excess text and content on the page
  • Acceptance Criteria 3 -

Tasks

  • Task 1 - import the django account files to the local ide
  • Task 2 - extend the pages from the base template
  • Task 3 - edit the content and check forms/buttons function

USER STORY: Update Session

As a user I can click on edit button so that I can update the content of a logged session

Acceptance Criteria

  • Acceptance Criteria 1 - edit button links to the update session page
  • Acceptance Criteria 2 - update session page displays the session form
  • Acceptance Criteria 3 - any edits that are made are stored in the database

Tasks

  • Task 1 - create update session form
  • Task 2 - create update session view, template + link the url
  • Task 3 - link the edit button on the list of sessions page to the edit session page

Create ERD

Entity Relationship Diagram - use LucidChart - how models related to each other eg zero to many, many to many etc.

USER STORY: Styling session log pages

As a user I can access the session log pages and see a consistent colour scheme and design stylee

Acceptance Criteria

  • Acceptance Criteria 1 - create session page looks good
  • Acceptance Criteria 2 - edit session page looks good
  • Acceptance Criteria 3 - delete session page looks good

Tasks

  • Task 1 - apply styling to create session page
  • Task 2 - apply styling to edit session page
  • Task 3 - apply styling to delete session page

USER STORY: Locations map

As a user I can see a map on the locations page so that learn about recommended places to windsurf

Acceptance Criteria

  • Acceptance Criteria 1 - user can see a map with pins
  • Acceptance Criteria 2 - the map is zoomed in on the area of Vigo, Spain
  • Acceptance Criteria 3

Tasks

  • Task 1 - add pins to the map
  • Task 2 - set the coordinates to zoom in to Vigo
  • Task 3

USER STORY: Manual Testing

As a developer I can perform manual testing so that I can ensure the app works well

Acceptance Criteria

  • Acceptance Criteria 1 - sign up/in/out work correctly
  • Acceptance Criteria 2 - CRUD functionality works correctly
  • Acceptance Criteria 3 - results are recorded in the README

Tasks

  • Task 1 - test sign up/in/out forms and buttons
  • Task 2 - test session log creae/read/update/delete forms
  • Task 3 - record results in the README

USER STORY: Python Automated Testing

As a developer I can create tests for the python files so that I can make sure the app functions correctly

Acceptance Criteria

  • Acceptance Criteria 1 - test file for each python file exists
  • Acceptance Criteria 2 - tests for classes/fuctions/methods are carried out
  • Acceptance Criteria 3 - results are recorded in the README

Tasks

  • Task 1 - create test files
  • Task 2 - carry out tests
  • Task 3 - fix any issues arising from the tests
  • Task 4 - record results in the README

USER STORY: Bug fixes

As a developer I can fix any bugs that appear on the site so that it can be deployed succesfully

Acceptance Criteria

  • Acceptance Criteria 1 - all buttons work correctly
  • Acceptance Criteria 2 - all forms work correctly
  • Acceptance Criteria 3 - all links work correctly

Tasks

  • Task 1 - disable the submit button onclick so duplicates aren't made
  • Task 2 - test that data submitted in the forms is logged in the db
  • Task 3 - test that external links all open in a new window

USER STORY: Templates

As a user I can see the webpage so that interact navigate to sign up/sign in pages

Acceptance Criteria

  • Acceptance Criteria 1 - basic html is rendered on the page, no styling yet
  • Acceptance Criteria 2 - buttons/links to sign up/sign in/sign out are visible + functioning
  • Acceptance Criteria 3 - the signed out/unregistered user is redirected to the index page

Tasks

  • Task 1 - set up index view
  • Task 2 - set up base template
  • Task 3 - set up index template + url

USER STORY: Create Session Model

As a developer I can see the session model so that I can add it to the Django admin page

Acceptance Criteria

  • Acceptance Criteria 1 - the model is added to models.py
  • Acceptance Criteria 2 - the model is migrated to the db
  • Acceptance Criteria 3

Tasks

  • Task 1 - create model in models.py in the session app
  • Task 2 - migrate the changes
  • Task 3 - access the model in the admin page

USER STORY: Delete session

As a user I can click on delete button so that I can delete the record of a logged session

Acceptance Criteria

  • Acceptance Criteria 1 - delete button links to the delete session confirmation page
  • Acceptance Criteria 2 - delete session page has buttons to confirm deletion or to return to list of sessions page
  • Acceptance Criteria 3 - database is updated accordingly

Tasks

  • Task 1 - create delete session view, template + link the url
  • Task 2 - link the delete button on the list of sessions page to the delete session confirmation page
  • Task 3 - create deletion success message and revert user back to list of sessions page

USER STORY: View sessions

As a registered user I can see a list of my sessions so that I can click on one and view the session detail

Acceptance Criteria

  • Acceptance Criteria 1 - my-sessions page displays a list of user's logged sessions
  • Acceptance Criteria 2 - each list item is clickable and takes the user to the session detail page
  • Acceptance Criteria 3

Tasks

  • Task 1 - Fix for loop to loop through the user's sessions
  • Task 2 - Fix table to display the sessions
  • Task 3 - Make each session on list a link to the sesssion detail page

USER STORY: View Session Details

As a user I can click the session listed in the table so that I can see the detailed view of the session

Acceptance Criteria

  • Acceptance Criteria 1 - the session details are rendered on a html page after the title is clicked in the list
  • Acceptance Criteria 2 - the page has a link back to the session list page
  • Acceptance Criteria 3 - the session has buttons to edit/delete

Tasks

  • Task 1 - create session detail view + template
  • Task 2 - link up the url for session_detail
  • Task 3

USER STORY: Create Django superuser/admin

As an admin I can access the Django db so that I can CRUD the users and their logged sessions

Acceptance Criteria

  • Acceptance Criteria 1 - Admin is created in local IDE
  • Acceptance Criteria 2 - Can access the admin login and dashboard by adding '/admin' to the local host URL

Tasks

  • Task 1 - install the django admin feature
  • Task 2 - create login details - name/password
  • Task 3 - test it works by adding '/admin' to local host URL

USER STORY: Locations page

As a user I can navigate to the Locations page so that I can see windsurfing locations pinned on a map

Acceptance Criteria

  • Acceptance Criteria 1 - link in nav bar navigates to the Locations page
  • Acceptance Criteria 2 - user can see a google map on the page
  • Acceptance Criteria 3

Tasks

  • Task 1 - create view, template and link url
  • Task 2 - add link to nav bar
  • Task 3

USER STORY: Location Suggestion Box

As a user I can submit a location suggestion to the owner of the website so that they can review my suggestion and add it to the map

Acceptance Criteria

  • Acceptance Criteria 1 - suggestion input box and button is visible on the page below the map
  • Acceptance Criteria 2 - suggestion is submitted to a database that only the admin can see, modify
  • Acceptance Criteria 3

Tasks

  • Task 1 - create model for suggestions
  • Task 2 - create form for suggestions
  • Task 3 - create view, display form on Locations page

USER STORY: Authentication

As a user I can create a new account so that I can start logging sessions

Acceptance Criteria

  • Acceptance Criteria 1 - sign up form appears
  • Acceptance Criteria 2 - add name and password with input validation
  • Acceptance Criteria 3 - success message appears on sign up completion

Tasks

  • Task 1 - install allauth module
  • Task 2 - set up the sign up form/view
  • Task 3 - set up success message

USER STORY: Responsiveness

As a user I can access the site on a small screen device and have a positive emotional experience

Acceptance Criteria

  • Acceptance Criteria 1 - no scrolling horizontally on small screen devices
  • Acceptance Criteria 2 - navbar/footer areas don't dominated the screen space
  • Acceptance Criteria 3 - buttons and inputs respond to the size of the screen

Tasks

  • Task 1 - put session list in a responsive grid
  • Task 2 - check all elements of the site are responsive on a variety of screen sizes
  • Task 3 -

USER STORY: About page

As a user I can navigate to the About page so that I can learn more about the app

Acceptance Criteria

  • Acceptance Criteria 1 - link appears in nav bar
  • Acceptance Criteria 2 - information about the app is displayed following the style of the site
  • Acceptance Criteria 3 - link to get started will link user to the sign up page

Tasks

  • Task 1 - create view, template, link url for the About page
  • Task 2 - create content about how the app works and who it's for
  • Task 3 - add a button to link to the sign up page

USER STORY: Favicon

As a programmer I need to add a favicon to the site so that the UX is improved

Acceptance Criteria

  • Acceptance Criteria 1 - favicon is visible in the user's brower tab
  • Acceptance Criteria 2
  • Acceptance Criteria 3

Tasks

  • Task 1 - create favicon
  • Task 2 - add image to project file
  • Task 3 - load in head of base.html

USER STORY: Error pages

As a user I can see an error message if I am redirected to an error page

Acceptance Criteria

  • Acceptance Criteria 1 - the page follows the general colourscheme and styling of the site
  • Acceptance Criteria 2 - the message is clearly displayed
  • Acceptance Criteria 3 - there is a button for users to click to return the home page

Tasks

  • Task 1 - create 403, 404, 405, 500.html pages
  • Task 2 - extend pages from base.html
  • Task 3 - add a link in a button to return the user to the home page

USER STORY: Code Validation and Accessibility Testing

As a developer I can test the app and code base using 3rd party testing apps so that I can ensure the app is adhering to best practice standards and is fully accessible to all users

Acceptance Criteria

  • Acceptance Criteria 1 - code base is tested with W3C Markup Validation, W3C jigsaw, PEP 8
  • Acceptance Criteria 2 - app is tested with WAVE for accessibility
  • Acceptance Criteria 3 - app is tested with Lighthouse for Performance rating

Tasks

  • Task 1 - test code base, html pages
  • Task 2 - make any neccessary changes to optimize the results
  • Task 3 - record results and improvements in the README

USER STORY: Fonts + colours + images

As a user I can access a coherently designed site so that I can have a positive emotional experience while using the site

Acceptance Criteria

  • Acceptance Criteria 1 - each page of the site follows a cohesive design
  • Acceptance Criteria 2 - colours are contrast sufficently for user friendly experience
  • Acceptance Criteria 3 - fonts and images aren't distracting

Tasks

  • Task 1 - choose fonts for the title/content
  • Task 2 - choose a colour scheme for the site, implement across all pages
  • Task 3 - source images from open-source websites

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.