Skip to content
This repository was archived by the owner on Jun 9, 2026. It is now read-only.
 
 

Repository files navigation

SwapIt Development Report

Welcome to the documentation pages of SwapIt!

This Software Development Report, tailored for LEIC-ES-2024-25, provides comprehensive details about SwapIt, from high-level vision to low-level implementation decisions. It’s organized by the following activities.

Contributions are expected to be made exclusively by the initial team, but we may open them to the community, after the course, in all areas and topics: requirements, technologies, development, experimentation, testing, etc.

Please contact us!

Thank you!


Business Modelling

Business modeling in software development involves defining the product's vision, understanding market needs, aligning features with user expectations, and setting the groundwork for strategic planning and execution.

Product Vision

For eco-conscious individuals, who seek a sustainable and cost-effective way to exchange unused items, SwapIt is an innovative community-driven item-exchange platform, that promotes responsible consumption by enabling users to trade items they no longer need for things they do.

Unlike traditional marketplace apps that focus on monetary transactions, our product creates a unique, zero-cost, trust-based exchange system that encourages reuse and sustainability.

The Problem

In today's consumer-driven world, people often accumulate items they no longer use, contributing to unnecessary waste. Many of these items, such as clothes, electronics, and household goods, still have value and could be repurposed by others instead of being discarded. However, there is often no easy way to exchange these items with people who need them.

Our application promotes the principles of the 3 Rs (Reduce, Reuse, Recycle) by encouraging the exchange of second-hand items, reducing waste and the demand for new products. By facilitating item exchanges, our platform aligns with two key Sustainable Development Goals (SDGs):

  • SDG 11: Sustainable Cities and Communities – Encouraging a culture of reuse helps reduce urban waste and promotes more sustainable consumption habits in communities.
  • SDG 12: Responsible Consumption and Production – By extending the life cycle of products, we help minimize environmental impact and promote a more circular economy.
Target Audience

Our application is designed for individuals who have accumulated items they no longer use and would like to exchange them for something they need. This includes:

  • Individuals interested in sustainable living and reducing waste.
  • Students and young adults looking for affordable alternatives to purchasing new items.
  • Anyone who enjoys discovering second-hand treasures while reducing their environmental footprint.

Features and Assumptions

  • Marketplace Feed: Browse a list of available items for exchange.
  • Category Filters: Quickly find items by selecting specific categories.
  • Personal Profile: Manage your listed items, exchanges, and personal information.
  • Item Wish List: Specify the types of items you want in return for your listings.
  • Save Items: Bookmark interesting items to view them later.
  • Chat: Communicate directly with other users to arrange exchanges.
  • Reputation System: Earn trust through reviews and level up from Bronze to Gold.
  • Multi-Item Exchange: Propose trades involving more than one item at a time.

Initial list of requires APIs

  • Firebase: Backend, database, file storage and chat system.
  • Google Maps: Location-based search, map view for exchange locations.
  • Email/SMS: For sending user confirmation and notifications.

Elevator Pitch

Have you ever thought about how many items you have at home that you no longer use, but that could be useful to someone else? And that desire that hits you in the chest to have something new, but without spending money? SwapIt will help you with this so that you can exchange the objects in your closet for other items that interest you. Unlike other marketplaces, where you need to pay to get something new, on SwapIt you only need to have an item you want to exchange. It's simple, sustainable and economical! Furthermore, by exchanging items, you contribute to a more ecological world, avoiding waste and giving your objects a second life. How about giving your items a new life, helping the planet and still getting something in return? So, shall we exchange?

Requirements

User Stories

  1. As a user, I want to be able to chat with the trader so that I can ask questions, bargain and schedule the trade.
  2. As a user, I want to filter the articles by name, categories and location so that I can find what I want easier.
  3. As a user, I want to publish an article so that I can exchange it for something more useful.
  4. As a user, I want to add an item to my wishlist so that I easily find it later and offer a trade.
  5. As a user, I want to be able to review an item/trader so that other people can know if it's trustful.
  6. As a user, I want to receive push notifications so that I'm aware of messages and new publications of items I might be interested in.
  7. As a user, I want to have access to a map showing nearby listings so that I can visually explore the items available in my area.
  8. As a user, I want to log in into the app so that I can access its private features.

Domain model

Domain model UML

The domain model represents a system where users can publish articles for exchange and engage in trades through offers. A User can publish multiple Articles, each categorized under predefined types such as books, clothes, or electronics. Users can also write Reviews about trades, providing feedback through ratings, descriptions, and pictures. Communication between users is done via Messages, which are always linked to a Trade, allowing discussions about exchanges.
Trades are formed through Offers, where one user proposes an exchange, and another user accepts or rejects it. A Trade involves at least two articles and has a status, such as open, completed, or canceled. Offers are connected to a Trade and have their own status, including pending, accepted, or rejected. This structure ensures that exchanges are clearly tracked, and user interactions—whether through messages, trades, or reviews—are well-defined within the system.

Architecture and Design

Logical architecture

Logical architecture UML

The logic architecture represents the structure of our application, illustrating the main components and their interactions. Each component's UI interacts with its logic, which is linked to Firebase (excluding the map), used to store and retrieve data. For the map feature, we will use the Google Maps API to fetch and display map data.

Physical architecture

Physical architecture UML

The physical architecture shows the main components of our app and not ony how they connect with each other but also how they interact with the API's. Our application will have an Authentication Service and a Logical Service, both depending on the Firebase to retrieve data. The Logical Service will also communicate with the device gallery and camera service. The Local Storage will be responsible to save and retrieve data from the User's device that is specific to it's use. Finally, the Location Services will depend on the Google Maps API to retrieve the relevant data.

Vertical prototype

In this initial version of the app, we have focused on establishing its core structure and foundational functionalities. Our primary goal was to define a scalable and maintainable architecture, which is why we adopted the MVVM (Model-View-ViewModel) pattern, as recommended by the Flutter team.

The implemented features in this vertical prototype include app routing with mock screens, a simple navigation bar and the main app theme. We have also developed the home page widget, that displays articles with it's basic attributes.

Project management

You can find below information and references related with the project management in our team:

  • Backlog management: Product backlog and Sprint backlog in a Github Projects Board
  • Release management: v0, v0.1, v0.2, v0.3, v1.0
  • Sprint planning and retrospectives:
  • Happiness Meters: each member fills the column associated with his number (the M3 fills the third column , e.g.).
  • Changelog: we keep a changelog to keep track important changes in each version released. It follows the format specified at Keep a Changelog.
  • Git Workflow: Feature-branches workflow based on the main branch. Each feature or fix is developed on its own branch and merged via a pull request. Code reviews are required (using branch protection) to ensure code quality and consistency.
  • CI/CD - Github Actions: Every pull request triggers a workflow that verifies code formatting and linting rules. This helps maintain code consistency and prevents errors from reaching the main branch.

Sprint 0

Project Board

Start of Sprint 0

End of Sprint 0

Sprint Retrospective

  • Did well:
    • Good team work and organization.
    • Well defined product vision with clear user stories.
    • Organized the foundations of the project management (Github scrum board) and from the app itself (MVVM architecture).
  • Do differently:
    • Manage the time better, starting the iteration as soon as possible to avoid delays due to unexpected problems.
    • Establish a git workflow, creating pull requests for each of the specific tasks assigned.
    • Schedule sessions of pair programming so we can help each other and follow up on the progress of the project.
  • Puzzles:
    • Getting familiar with the tech stack (Flutter, Firebase).

Sprint 1

Project Board

Start of Sprint 1

End of Sprint 1

Sprint Retrospective

  • Did well:
    • Good advance in the app development.
    • Balanced distribution of the work load.
  • Do differently:
    • Don't underestimate the effort of the tasks.
    • It's preferable to implement all tasks from top to bottom, so we should only pick the Features that we know, for sure, that will be done.
    • Implement tests for each feature.
  • Puzzles:
    • Manage the time due to multiple exams.

Sprint 2

Project Board

Start of Sprint 2

End of Sprint 2

Sprint Retrospective

  • Did well:
    • We improved our task estimation. Most tasks were correctly scoped and aligned with our capacity.
    • All product backlog items were completed and accepted.
    • Time management improved significantly. Most features were implemented before the sprint deadline.
  • Do differently:
    • Increase the number of short sync meetings during the sprint to avoid blockers and clarify doubts early.

Sprint 3

Project Board

Start of Sprint 3

End of Sprint 3

Sprint Retrospective

  • Did well:
    • Successfully implemented the chat feature, one of our most complex technical challenges.
    • Significantly enhanced the UI/UX quality to match our design mockups.
    • Achieved proper refinement of the sprint backlog.
  • Do differently:
    • Begin implementation earlier in the sprint cycle to allow more time for testing and refinement.
    • Allocate more time for peer code reviews to ensure higher code quality.
  • Puzzles:
    • Balancing time commitments across multiple simultaneous academic projects.

Final Release

Goal

In the final release, we have focused on correcting minor bugs and improving the user experience in our app, such as page navigation errors. No new major functionality was implemented. The record of all changes made is well documented at our changelog and also at the release versioning description.

Testing

We have implemented unit tests to ensure code quality, reliability, and maintainability of our application. Our testing strategy focuses on the core business logic components of the app.

Our test suite includes 13 test files covering: ArticleRepository, UserRepository, WishlistRepository, AuthService, DatabaseService, MessageService, Article, User, Message, Wishlist, Attachment. We use mockito for creating mock objects and dependency injection.

Running Tests

Basic test execution:

# Run all tests
flutter test

# Run a specific test file
flutter test test/data/repositories/article_repository_test.dart

# Run tests for a specific directory
flutter test test/data/services/

Project Board

Start of the Final Release

End of the Final Release

Sprint Retrospective

  • Did well:
    • Significantly enhanced user experience by fixing small bugs.
    • All the planned final refinements were properly implemented.
  • Puzzles:
    • Balancing time commitments across multiple simultaneous academic projects deliveries and presentations.

About

An innovative community-driven item-exchange platform that promotes responsible consumption by enabling users to trade items they no longer need for things they do. Developed for the Software Engineering (ESOF) course - Bachelor in Informatics and Computing Engineering @ FEUP

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages