SwapLah

Student Co-op Marketplace & CI/CD Pipeline

cd ../projects

The Problem

Polytechnic students lack a dedicated, secure platform to safely trade pre-owned campus essentials like textbooks, lab equipment, and electronics. Existing public marketplaces carry risks of scams and lack campus-specific trust mechanisms.

From a software engineering perspective, the core challenge of this academic project was to build the marketplace strictly adhering to Agile and industry-standard DevOps methodologies—moving beyond basic coding to enforce rigorous version control, automated testing, and security compliance.

The Solution & Team Dynamics

Working within a collaborative Agile development team, we engineered a full-stack solution. The platform is powered by a Python Flask REST API and an SQLite database, featuring strict NYP-student email authentication, soft-delete item listings, offer negotiations, and a review system. Because our backend codebase is secured in a private academic GitLab repository, this case study highlights the user interface and my specific technical contributions to the sprint cycles.

[ App Screenshot 1 ]

My Key Contributions

  • AI-Assisted Development: Leveraged AI coding tools for rapid frontend prototyping, demonstrating modern prompt engineering and rigorous code-review practices.
  • Automated Testing: Developed comprehensive Unit and UI test scripts using Selenium to ensure 60%+ code coverage prior to merge requests.
  • Pipeline Integration: Collaborated on configuring the `.gitlab-ci.yml` pipeline to enforce automated linting, testing, and SAST security scans.

REST API Snippet

# REST Endpoint: Create Marketplace Listing
@app.route('/api/listings', methods=['POST'])
@require_auth
def create_listing():
    data = request.get_json()
    
    if not all(k in data for k in ('title', 'price', 'category', 'condition')):
        return jsonify({"error": "Missing required fields"}), 400

    new_listing = Listing(
        id=str(uuid.uuid4()),
        seller_id=current_user.id,
        title=data['title'],
        price=data['price'],
        category=data['category']
    )
    
    db.session.add(new_listing)
    db.session.commit()

    return jsonify({"status": "success", "id": new_listing.id}), 201

Tech Stack

Python Flask SQLite GitLab CI/CD AI Code Gen Selenium REST API Bootstrap 5

Role

Full-Stack Engineer

Timeline

Apr 2026 - Present

Links

View GitHub Repo