Lace Up & Lead The Way is a pre-race training app designed to be a companion and social platform for runners interested in running Midnattsloppet. This project is a collaborative effort by group 71 to design and develop a complete mobile app from scratch. The project is part of the PVT 7.5 course at DSV. The project includes a frontend, UI and a corresponding backend microservice architecture.
- Edwin Sundberg — Project manager & Scrum master — @Edwinexd
- Alfred Berggren — Backend & Database design — @alfredberggren
- Thea Ekmark — UX, UI Design & Backend — @theaekmark
- Johan Berg Engstrand — Frontend & Backend — @Johan-Berg-Engstrand
- Enes Ihsan Celik — Frontend — @enesihsancelik
- Daniel Wiklund — Frontend — @LuhhDW
- Axel Andersson — UX, Frontend & UI Design — @oltan53
- Noor Abo Hasan — UX & Frontend — @nooorab
- Sofia Sundin — UX & UI Design — @SofiaSundins
Our backlog was managed through a Github Project
- Frontend: Flutter
- UI Design: Figma
- Backend: FastAPI, SQLAlchemy, SQLModel
- Database: PostgreSQL, Redis
- Passwords are irreversibly obfuscated and safely stored in an authentication database
- Authentication and session handling
- Each user can create their own profile
- Profile can be made private
- Users can join or leave them
- Groups can be private or public
- Can be created by group members
- Can be scheduled to specific dates
- Can include planned completion of challenges
- Can be completed in activities by linking the activity to a certain challenge
- Example: "Run 2,5km with 100m of elevation change!"
- Rewarded by completing challenges
- Or by importing health data from phone
- Completed achievements will be displayed on users profiles
- Ability to upload images to:
- User profiles
- Groups
- Activities
- and more...
- Implemented using a microservice connected to S3 Storage
- Users can share completed achievements or activities
- The app generates an image specific to each user whenever they complete something
- This image can be shared to social media (e.g. Instagram or Facebook)
- Implemented using Python PIL
Documentation of our REST APIs is generated using Swagger UI, through usage of FastAPI, and can be viewed by deploying respective service, and accessing its /docs
endpoint.
dsv-pvt/
├── authentication/ # a microservice handling user authentication
├── backend/ # a microservice handling general user data
├── flutter_application/ # a client app, sends requests to backend
├── .github/ # workflows and github related things
├── .gitignore
├── images/ # a microservice handling image storage
├── LICENSE
├── proxy/ # proxy coniguration
├── README.md
└── sessions/ # a microservice handling login session tokens
Microservices are to be run in separate processes independently. A few environment variables need to be set in order for them all to function properly.
- Docker — to deploy microservices
- PostgreSQL — a database server where RDBMS data can be stored
- Redis — a database server where bearer tokens can be stored
- Access to S3 storage
Enironment variables:
API_KEY
— The API that this service requires from external requests to create admin usersSESSIONS_URL
— URL to the deployed sessions microservice. No trailing slashes!AUTH_URL
— URL to the deployed authentication microservice. No trailing slashes!IMAGES_API_KEY
— The API Key required in images microservice to upload images to S3IMAGES_URL
— URL to the deployed images microservice. No trailing slashes!DATABASE_URL
— URL to your PostgreSQL database for your general user data
Environment variables:
DATABASE_URL
— URL to your PostgreSQL database for authentication data
Environment variables:
API_KEY_ID
— backblaze keyIDAPI_KEY
— backblaze applicationKeyKEY_NAME
— blackblaze key nameAWS_ENDPOINT_URL
— backblaze endpointBUCKET_NAME
— backblaze bucket nameAPI_KEY_SELF
— API key that this service will require to upload images to S3
Environment variables:
PRIVATE_KEY_BYTES
— Ed25519 PrivateKey in bytes
Run the flutter application with the following environment variables set:
BACKEND_API_URL
— URL to backend service.IMAGES_API_URL
— URL to images service.GOOGLE_APPLE_CLIENT_ID
— clientID to google for iOS devices. This is used for auth with google.GOOGLE_WEB_CLIENT_ID
— clientID for to google for web sessions.
Alternatively, all services can be run locally using uvicorn. In this case, make sure to install all dependencies first!
- Friend list
- Reward system
- Displaying groups on a map
- FastAPI tutorial for being an excellent resource on API design
Lace Up & Lead The Way is open source and released under the GPL 3.0 license. See LICENSE for more information.
For any questions or concerns, please reach out to @Edwinexd.