Project Description: I built this project with the idea of helping local MSMEs (Micro, Small and Medium Enterprises) improve their marketing and reach the right audience. Many small businesses around us make really good products but struggle to sell them because they don’t have a proper platform to showcase them locally. This project is my attempt to solve that problem using a simple and practical web application.
I got this idea after observing that many small businesses like handicraft sellers, tailors, and street vendors usually post their products on social media platforms like Instagram or YouTube. While these platforms provide visibility, they often reach people from far away places instead of nearby customers. Because of this, even if people like the product, they cannot easily buy it due to distance and delivery issues. This creates a gap between demand and accessibility.
So I tried to solve this problem by creating a web app where products are shown more locally and in a structured way. Users can scroll through a feed of products, search for specific items, and also filter them based on location. This helps in showing the right products to the right people. It also increases the chances of actual purchases instead of just views or likes.
The application is designed to be simple so that even non-technical users can use it without difficulty. The idea is not to replace large e-commerce platforms but to complement them by focusing on local-level interaction. Currently, this project is more like a prototype (MVP), but it can definitely be improved further into a fully functional marketplace with more advanced features in the future.
Features: The application allows users to sign up, log in, log out, and also change their password easily. Authentication is implemented using password hashing to ensure that user data remains secure. The login system is session-based, which allows users to stay logged in while navigating different pages of the app.
Sellers can upload product details along with images, including product name, price, and location. This makes it easy to list products in a structured format. The image upload feature is handled carefully using secure file naming to avoid any security issues.
There is a main feed where users can scroll through different product posts. This feed is dynamic and updates based on the data stored in the database. A search feature is included so users can find products by name, and a location filter helps them see items available nearby. Moreover if any user clicks on any product image, the user gets redirected to the seller’s profile where he/she can contact the seller via phone number. These features together make the browsing experience more useful and targeted.
Each user also has a profile page where they can view the products they have uploaded. This helps users keep track of their listings. I also added an option where a user can upgrade to business mode if they want to act as a seller, which adds a layer of role-based functionality to the application.
app.py: This is the main file of the project. It contains all the routes, backend logic, authentication system, database queries, and file upload handling. It connects all parts of the application together.templates/: This folder contains all the HTML files used to display pages like login, signup, profile, and the main feed. These templates are rendered dynamically using Flask and Jinja.static/: This folder stores uploaded images and CSS files used for styling the application. Keeping images here makes it easy to display them in the frontend.project.db: This is the SQLite database where user data and product data are stored. It keeps track of users, their credentials, and the products they upload.schema.sql: It defines the database structure and establishes relationships between users and their products.flask_session: It is used to manage sessions on the server side so users stay logged in securely and their session data is protected.Design Choices: (i). UI: I chose a dark theme because it looks simple, modern, and is comfortable for the eyes, especially during long usage. Instead of using a fixed grid layout, I used a masonry-style layout so that images of different sizes can fit properly without distortion. This makes the feed look more natural and similar to platforms like Pinterest.
(ii). UX: The main focus was to keep the application easy to use. I added a search bar and location filter so users can quickly find relevant products. A side navigation bar makes it easier to move between different sections of the app. The “My catalog” section helps users see all the products they have posted, which improves usability for sellers.
(iii). Security: I used Werkzeug for password hashing so that passwords are not stored in plain text. I also used secure filename handling for uploaded images to prevent unsafe file uploads. Flask-Session was used to store session data on the server side instead of cookies, which adds an extra layer of security.