Pulls, processes, and serves news from multiple sources — automatically.
The name is Bulgarian — новини (novini) means "news", and the "-4ka" suffix gives it a playful, familiar feel. Small name, serious architecture.
novini4ka is a full-stack ASP.NET Core news aggregation platform that automatically collects articles from multiple news sources on a scheduled basis, stores them, and presents them in a clean browsable interface — no manual curation needed.
At its core is a pipeline: scheduled cron jobs trigger news source adapters, which fetch and normalise articles into a unified data model, persisted via Entity Framework Core. The web layer then serves that content to users in real time.
The project follows the same layered, production-grade architecture as AYN — complete with StyleCop code quality enforcement and a GitHub Actions CI pipeline.
- Cron job scheduler — background jobs run on a configurable schedule to fetch fresh news automatically
- Multiple news source adapters — the
NewsSourcesservice layer abstracts each external source behind a common interface, making it trivial to add more - Normalised data model — articles from different sources are mapped into a consistent structure before storage
- Browse aggregated articles by source, category, or date
- Clean, readable article listings with metadata (title, source, date, summary)
- Paginated results for navigating large article sets
- ASP.NET Core Identity — registration, login, role management
- User preferences and saved articles
- StyleCop with custom ruleset — consistent, enforceable code style across the entire solution
- Unit tests — service layer covered by an isolated test suite
- GitHub Actions CI — build and test pipeline runs on every push to
main
novini4ka is built on a clean layered architecture mirroring industry patterns:
novini4ka/
├── .github/workflows/ # CI/CD — GitHub Actions pipeline
├── Novinichka.Common/ # Shared constants and utility helpers
├── Novinichka.Services.CronJobs/ # Scheduled background jobs (news fetching)
├── Novinichka.Services.NewsSources/ # News source adapters & normalisation logic
├── Data/
│ ├── Novinichka.Data/ # DbContext, EF Core configuration & migrations
│ └── Novinichka.Data.Models/ # Domain entities (Article, Source, Category…)
├── Services/ # Core business logic services
├── Tests/ # Unit tests for the service layer
└── Web/ # ASP.NET Core MVC — controllers, views, areas
The NewsSources and CronJobs layers are deliberately separated — sources define how to fetch and normalise data; jobs define when to trigger that process. This makes the system easy to extend with new sources without touching scheduling logic.
| Layer | Technology |
|---|---|
| Framework | ASP.NET Core MVC |
| Language | C# (.NET) |
| ORM | Entity Framework Core |
| Auth | ASP.NET Core Identity |
| Background Jobs | Cron-based scheduler |
| Database | MS SQL Server |
| Code Quality | StyleCop + custom ruleset |
| CI/CD | GitHub Actions |
| IDE | Visual Studio |
- .NET SDK
- SQL Server (local or remote)
- Visual Studio or JetBrains Rider
-
Clone the repository
git clone https://github.com/georgidelchev/novini4ka.git cd novini4ka -
Configure the connection string in
Web/appsettings.json:{ "ConnectionStrings": { "DefaultConnection": "Server=.;Database=Novinichka;Trusted_Connection=True;" } } -
Apply migrations and run
cd Web dotnet ef database update dotnet run -
The cron jobs will begin fetching news automatically on their configured schedule. Open
https://localhost:5001to browse articles.
Georgi Delchev
This project is licensed under the MIT License.