Buy it. Sell it. Find everything you need β all in one place.
AYN (All You Need) is a production-grade, peer-to-peer online marketplace built from scratch as a full-stack ASP.NET Core web application. It allows users to list items for sale, discover and purchase goods from other users, communicate in real time, and complete transactions securely β all within a single, cohesive platform.
This is not a tutorial project. It is a complete, layered application built with industry-standard architecture, a rich feature set, a live CI/CD pipeline, and a professional-grade tech stack β the result of bringing together everything learned across multiple courses and personal deep-dives into the .NET ecosystem.
- Create, edit, and delete listings β title, description, price, category, subcategory, condition, and up to multiple images per ad
- Rich-text ad descriptions powered by TinyMCE with HTML sanitization via HtmlSanitizer
- Image upload & storage through Cloudinary CDN β fast, optimized, globally delivered
- Advanced search & filtering β by keyword, category, subcategory, price range, town, and sort order
- Watchlist / Favourites β save any listing and revisit it anytime from your profile
- Live messaging between buyers and sellers powered by SignalR WebSockets
- Persistent conversation history β no messages are ever lost
- Clean, responsive chat UI with unread message indicators
- Stripe integration for secure, card-based payments directly within the platform
- Smooth checkout flow with real-time validation
- SendGrid transactional email β account confirmation, password reset, and system notifications
- In-app notification system keeping users informed of activity on their listings
- Hangfire scheduled tasks β automated cleanup, periodic data processing, and recurring system operations
- Full Hangfire Dashboard for monitoring jobs in real time
- ASP.NET Core Identity β registration, login, role-based authorization
- Email confirmation flow and secure password reset
- Admin area with user management β promote, demote, ban, and unban users
- StyleCop + custom ruleset enforcing consistent, clean code across the entire codebase
- Full Admin Dashboard β manage categories, subcategories, towns, and platform users
- Data scraping powered by AngleSharp for seeding realistic category and location data
- Role-based access control β users vs. administrators
AYN follows a clean layered architecture separating concerns across distinct projects:
AYN/
βββ AYN.Common/ # Shared constants, helpers, GlobalConstants
βββ Data/
β βββ AYN.Data/ # DbContext, EF Core configuration, seeding
β βββ AYN.Data.Common/ # Repository pattern, base interfaces
β βββ AYN.Data.Models/ # Domain entities (Ad, User, Category, Messageβ¦)
βββ Services/
β βββ AYN.Services/ # Business logic β ads, users, chat, notificationsβ¦
β βββ AYN.Services.Data/ # Data-access services, AutoMapper profiles
βββ Tests/
β βββ AYN.Services.Tests/ # Unit tests with nUnit + Moq
βββ Web/
βββ AYN.Web/ # ASP.NET Core MVC β controllers, views, areas
βββ AYN.Web.ViewModels/ # Input & view models, DTOs
Every layer communicates through interfaces, enabling full testability and clean separation of concerns. The repository pattern abstracts all data access, and AutoMapper handles all object-to-object mapping between layers.
| Technology | Purpose |
|---|---|
| ASP.NET Core | Web framework β MVC, Razor views, middleware pipeline |
| Entity Framework Core | ORM β code-first, migrations, LINQ queries |
| SignalR | Real-time WebSocket communication (chat) |
| ASP.NET Core Identity | Authentication, authorization, role management |
| Hangfire | Background job scheduling and processing |
| AutoMapper | Object mapping between layers |
| AngleSharp | HTML parsing and data scraping for seeding |
| HtmlSanitizer | Sanitizes user-generated rich-text content |
| Integration | Purpose |
|---|---|
| Stripe | Payment processing |
| SendGrid | Transactional email delivery |
| Cloudinary | Image upload, storage, and CDN delivery |
| Technology | Purpose |
|---|---|
| Bootstrap | Responsive UI framework |
| jQuery | DOM manipulation and AJAX calls |
| TinyMCE | Rich-text editor for ad descriptions |
| SCSS | Custom styling and theme overrides |
| Tool | Purpose |
|---|---|
| nUnit | Unit testing framework |
| Moq | Mocking library for isolated service tests |
| StyleCop | Code style enforcement across the solution |
| GitHub Actions | CI/CD pipeline β build and test on every push |
The application is built around a rich relational domain model:
- Users β extended ASP.NET Identity user with profile image, town, phone, and activity metadata
- Ads β listings with category, subcategory, condition, price, location, images, and view count
- Categories & Subcategories β hierarchical classification of listings
- Towns β location data for filtering and discovery
- Messages β real-time chat messages between users, associated with a conversation thread
- Notifications β system and user-generated notifications
- Watchlist entries β per-user saved/favourited listings
- .NET 5+ SDK
- SQL Server (local or remote)
- Visual Studio 2019+ or JetBrains Rider
- Accounts for: Stripe, SendGrid, Cloudinary (optional β core features work without them)
-
Clone the repository
git clone https://github.com/georgidelchev/AYN-.git cd AYN- -
Configure secrets β in
Web/AYN.Web/appsettings.json(or user secrets), set your connection string and API keys:{ "ConnectionStrings": { "DefaultConnection": "Server=.;Database=AYN;Trusted_Connection=True;" }, "Stripe": { "SecretKey": "...", "PublishableKey": "..." }, "SendGrid": { "ApiKey": "..." }, "Cloudinary": { "CloudName": "...", "ApiKey": "...", "ApiSecret": "..." } } -
Apply migrations & seed the database
cd Web/AYN.Web dotnet ef database update dotnet run -
Run the tests
cd Tests/AYN.Services.Tests dotnet test
-
Open your browser at
https://localhost:5001π
AYN includes a GitHub Actions workflow that automatically builds and runs all tests on every push and pull request to main, ensuring the codebase stays green at all times.
Georgi Delchev
- Project scaffolding based on Nikolay Kostov's ASP.NET Core Template
- The entire SoftUni community for the learning environment and inspiration
This project is licensed under the MIT License.
If you found this project useful or interesting, a β goes a long way β thank you!