A Second-Hand Fashion Marketplace for Campus Students
PreLoved Market is a mobile app that connects students within the campus community to buy and sell second-hand fashion items. It solves the problem of students relying on chance encounters with street hawkers, unreliable WhatsApp posts, and Instagram thrift pages — where sizing is uncertain, product visibility is poor, and there is no trust mechanism between buyers and sellers.
| Item | Details |
|---|---|
| Team Name | DevLink |
| Course | Mobile Application Development (MAD) — Level 3 |
| University | University of Rwanda |
-
Asifiwe Afisa Uwitonze Project Lead, UI/UX Designer
- Field research & user interview (Emmanuel)
- DESIGN.md and Google Stitch mockups
- Section A: Dart fundamentals (helpers.dart, dummy_data.dart)
- Section B: Data models (BaseModel, Product, Searchable mixin, ProductService)
- Section C: App theme, HomeScreen, ProductDetailScreen, custom widgets
- Project setup (fonts, assets, pubspec configuration)
- GitHub repository management
-
Diane Uwamariya — Research Lead, Documentation Lead
- Field research & user interview (Kaneza Devine)
- Section B: Data models (User, Review, Rateable mixin)
- Section D: Navigation setup (main.dart, named routes, data passing)
- Section D: AddListingScreen form with validation
- Video demo coordination
Students at campus face significant challenges when buying and selling second-hand fashion items due to the lack of a centralized, reliable platform. Current methods — street hawkers, Instagram thrift pages, and WhatsApp groups — lead to trust issues, difficulty finding specific items, inability to verify size and fit, poor product visibility, and no quality assessment.
- Flutter SDK (3.7.0 or later)
- Android Studio or VS Code with Flutter extension
- Android emulator or physical device
# 1. Clone the repository
git clone https://github.com/Pelino-Courses/progressive-capstone-project-devlink.git
cd preloved_market
# 2. Install dependencies
flutter pub get
# 3. Verify your setup
flutter doctor
# 4. Run the app
flutter runpreloved_market/
├── lib/
│ ├── main.dart # App entry point + named routes (D1)
│ ├── theme/
│ │ └── app_theme.dart # Material Design 3 theme from DESIGN.md (C4)
│ ├── models/
│ │ ├── base_model.dart # Abstract base class (B3)
│ │ ├── product.dart # Product model with Searchable mixin (B1, B2)
│ │ ├── user.dart # User model with Rateable mixin (B1, B2)
│ │ ├── review.dart # Review model (B1, B2)
│ │ └── enums.dart # ProductCategory, ProductCondition enums
│ ├── mixins/
│ │ ├── searchable.dart # Search functionality mixin (B3)
│ │ └── rateable.dart # Rating calculation mixin (B3)
│ ├── services/
│ │ └── product_service.dart # Async data service with Future.delayed (B5)
│ ├── data/
│ │ └── dummy_data.dart # Sample data with List, Map, Set (A3)
│ ├── utils/
│ │ └── helpers.dart # Dart fundamentals demo (A1-A4)
│ ├── widgets/
│ │ └── product_card.dart # Reusable ProductCard + ConditionBadge (C3)
│ └── screens/
│ ├── home_screen.dart # Home screen with product grid (C1, C2)
│ ├── product_detail_screen.dart # Product detail with seller info (C2, D2)
│ └── add_listing_screen.dart # Listing form with validation (D3, D4)
├── assets/
│ └── images/ # Product images
├── fonts/
│ ├── Poppins-Regular.ttf
│ ├── Poppins-Medium.ttf
│ ├── Poppins-SemiBold.ttf
│ └── Poppins-Bold.ttf
├── design/
│ ├── 01_home_screen.png # Stitch mockup: Home
│ ├── 02_detail_screen.png # Stitch mockup: Product Detail
│ └── 03_form_screen.png # Stitch mockup: Add Listing Form
├── docs/
│ ├── field_research.md # Field research from progressive project
│ ├── app_concept.md # App concept document
│ └── team_charter.md # Team charter and roadmap
├── wireframes/ # Original wireframe sketches
├── DESIGN.md # Design system: colors, typography, rationale
├── pubspec.yaml
└── README.md
This section summarizes what was added for the Mini-Capstone submission.
- A1: Variables with
final,const,var; null-safe types using?,!,??(helpers.dart, product.dart, user.dart) - A2: Functions with named parameters, optional parameters, and arrow syntax (helpers.dart, rateable.dart)
- A3:
List,Map, andSetused in real app data structures (dummy_data.dart) - A4: Control flow with
if/else,switchexpressions, ternary operators (helpers.dart, product.dart)
- B1: 3 domain model classes:
Product,User,Review - B2: All models extend abstract
BaseModelclass (inheritance) - B3:
Searchablemixin on Product,Rateablemixin on User,BaseModelabstract class - B4: Constructors with named parameters,
required, and default values - B5:
ProductServicewithasync/awaitandFuture.delayedfor simulated data loading
- C1: Home screen displays realistic product data in a two-column grid
- C2: Layout widgets:
Column,Row,Stack,ListView.builder,GridView.builder - C3: Custom reusable
ProductCardandConditionBadgewidgets used across multiple screens - C4: Material Design 3 theme with
ColorSchememapped from DESIGN.md, PoppinsTextTheme
- D1: 3 screens connected via named routes (
/,/product-detail,/add-listing) - D2: Product object passed from HomeScreen to ProductDetailScreen via route arguments
- D3: Form with
GlobalKey<FormState>,TextFormFieldvalidators,form.validate()on submit - D4: 7 form fields with meaningful validation (length, format, range, pattern checks)
- D5: Back navigation with
Navigator.popworks correctly on all screens
- 3 Google Stitch mockups in
/design/folder - DESIGN.md with full colour palette (hex codes), typography, component styles, and design rationale
| Role | Colour | Hex Code |
|---|---|---|
| Primary | Forest Green | #2D6A4F |
| Primary Container | Soft Sage | #B7E4C7 |
| Secondary | Warm Terracotta | #C17754 |
| Background | Warm Linen | #FDF6EC |
| Surface | Off White | #FFFFFF |
| On Background | Charcoal Brown | #2C2C2C |
| Error | Warm Red | #C0392B |
Font: Poppins (Regular 400, Medium 500, SemiBold 600, Bold 700)
Full design system details are in DESIGN.md.
| # | Feature | Friction Addressed |
|---|---|---|
| 1 | Product Listings with Details | Poor visibility, no quality assessment |
| 2 | Search & Filter | No centralized platform, can't find items |
| 3 | Seller Ratings & Reviews | Trust issues, quality assessment |
| 4 | In-App Chat | Size/fit verification |
| 5 | Size Guide & Measurements | Size/fit verification |
| Technology | Purpose |
|---|---|
| Flutter | Cross-platform mobile app framework |
| Dart | Programming language |
| Material Design 3 | UI component system and theming |
| Google Stitch | AI-powered design mockup generation |
| GitHub | Version control and collaboration |
YouTube Link: https://youtu.be/m-o-ZCRqgdw
Video Title Format: [MAD] Mini-Capstone Parts A-D — PreLoved Market — Asifiwe Afisa Uwitonze & Diane Uwamariya
| Item | Value |
|---|---|
| Git Tag | mini-capstone-part-a-d |
| Commit SHA | (run git rev-parse HEAD after final commit) |
| Repository | (your GitHub URL) |
AI tools (Claude) were used to assist with:
- Document structuring and formatting
- Code scaffolding and architecture guidance
- Design system documentation
All core ideas, research, user interviews, and design decisions are original work by the team. Every team member can explain all code in their assigned sections.
