Inspiration

ShareCircle was inspired by a simple observation: local communities often have both unused resources and unmet needs at the same time.

Someone may have an extra textbook, a spare household item, or a skill they can offer, while someone nearby is actively looking for that exact thing. Existing platforms often treat these as separate problems — one person posts something for sale or donation, while another searches for it.

We wanted to create a system where the two sides naturally meet.

ShareCircle turns "I need this" and "I can offer this" into meaningful local matches. The goal is not just to exchange things, but to make mutual aid easier, reduce unnecessary consumption, and help people solve everyday problems through their own communities.

How we built it

ShareCircle is a full-stack web application built with Python and Flask, with a lightweight architecture designed around the core mutual-aid workflow.

  • Backend: We use Flask Blueprints to separate authentication, main application routes, APIs, and judge/demo functionality. Database interactions use SQL with a structured schema and migrations.
  • Frontend: The interface uses Jinja2 templates, custom CSS, and vanilla JavaScript. We built responsive flows for posting needs and offers, discovering nearby opportunities, managing matches, and tracking community impact.
  • Matching: The core of ShareCircle is its matching system. It considers factors such as category, location, and urgency to connect relevant needs with available offers.
  • Location: Users can discover relevant opportunities based on proximity, while also having the ability to provide their location manually.
  • Trust & completion: The platform uses an OTP-based flow to help verify exchanges and provide a clear transition from a match to a completed interaction.
  • Impact: ShareCircle tracks completed matches and community activity so that users can see the tangible impact created through mutual aid.
  • Testing & tooling: We use Git for version control and automated tests with pytest to validate important matching and database functionality.

Our approach was to keep the technology lightweight and dependency-efficient while putting most of the effort into making the core need → match → exchange flow actually usable.

Challenges we ran into

1. Designing the matching system

The biggest challenge was deciding what makes two users a "good match."

A match based only on category could produce irrelevant results, while a system that was too strict could produce no matches at all. We therefore had to balance multiple signals, including what is needed, what is offered, proximity, and urgency.

2. Database design

Needs and offers have different lifecycles, but they eventually converge into the same exchange workflow. Designing the database around those relationships — while keeping migrations manageable as the project evolved — required several iterations.

3. Building trust into the exchange

A mutual-aid platform needs more than just a matching algorithm. Users need to know when a match has been accepted, when an exchange is ready, and when it has actually been completed.

Designing the OTP verification and completion flow helped us turn a simple "match" into a more concrete and trackable interaction.

4. Balancing functionality with usability

There are many features we could add to a platform like this, but adding features is not the same as solving the core problem.

We had to repeatedly prioritize the experience around one fundamental flow:

Post a need → find a relevant offer → connect → verify → complete the exchange.

That helped us focus our development effort on making the central experience reliable instead of building a large collection of disconnected features.

What we learned

Building ShareCircle taught us that a useful product is often more about connecting a few systems correctly than adding as many features as possible.

We learned how to structure a larger Flask application using Blueprints, design database schemas that can evolve with the product, and connect server-rendered interfaces with dynamic JavaScript interactions.

We also learned that matching systems require constant iteration. The technically easiest solution is not necessarily the most useful one — the quality of the result depends on choosing the right signals and presenting the match clearly to the user.

Most importantly, we learned how to take a broad idea like "help people help each other" and turn it into a concrete product workflow that can be tested, measured, and improved.

What's next for ShareCircle

We want ShareCircle to evolve from a matching platform into a more intelligent local mutual-aid network.

Our next steps include:

  • Real-time chat between matched users.
  • Smarter recommendations that learn which needs and offers are most relevant to each user.
  • Improved location-based discovery for finding useful resources nearby.
  • Better impact analytics showing how many exchanges were completed and what categories have the greatest unmet demand.
  • A mobile experience so users can post or respond to needs quickly while on the move.

The long-term goal is simple:

Make it easier for people to discover that the thing they need may already exist — in their own community.

Built With

Share this project:

Updates

Submission history