A clean, fast iOS app for staying up to date with the latest developer and technology news — powered by the Hacker News Algolia API.
DevDigest delivers a curated feed of top Hacker News stories with a minimal, distraction-free experience. Stories are cached locally so you can browse even when offline, and favourites are always just one tap away.
- Trending Feed — Paginated list of top stories with pull-to-refresh and infinite scroll
- Search — Debounced, real-time search across Hacker News stories
- Favourites — Bookmark articles; favourited stories rise to the top of the feed
- Offline Support — Full local caching via CoreData; content is available without a connection
- Auto-Refresh — Automatically refreshes when network connectivity is restored
- In-App Reading — Articles open in Safari without leaving the app
- Light & Dark Mode — Fully adaptive UI
Built on Clean Architecture with three distinct layers:
Presentation → Domain → Data
- Presentation: UIKit ViewControllers, MVVM ViewModels, Combine bindings
- Domain: Use cases, repository protocols, pure Swift models,
DomainError - Data: URLSession API client, CoreData local store, repository implementation
Dependency injection is handled manually through AppContainer with no third-party libraries.
Hacker News API → NewsRemoteDataSource → NewsRepositoryImpl → CoreData
CoreData → NSFetchedResultsController → Combine Publisher → ViewModel → ViewController
| Category | Technology |
|---|---|
| Language | Swift |
| UI | UIKit — 100% programmatic |
| Async | Swift Concurrency (async/await) |
| Reactive | Combine |
| Persistence | CoreData |
| Networking | URLSession |
| Network Monitoring | Network framework (NWPathMonitor) |
| External Dependencies | None |
| Minimum iOS | 15.0 |
| Screen | Description |
|---|---|
| Trending | Paginated news feed with pull-to-refresh, search, and favourite toggle |
| Favourites | Saved articles sorted by favourite status then recency |
| Detail | Article metadata with open in Safari |
DevDigest/
├── App/ # AppContainer (DI), AppConfig
├── Core/
│ ├── Constants/ # Strings, SFSymbols
│ ├── Design/ # Theme (colors, typography, layout)
│ └── Extensions/ # UIViewController toast, String timeAgo
├── Domain/
│ ├── Entities/ # News
│ ├── Repositories/ # NewsRepository (protocol)
│ ├── UseCases/ # ObserveTrending, ObserveFavourite, Refresh,
│ │ # LoadNextPage, Search, ToggleFavourite
│ ├── Services/ # NetworkMonitoringProtocol
│ └── Error/ # DomainError
├── Data/
│ ├── Network/ # APIClient, HackerNewsEndpoint,
│ │ # NetworkMonitorService, NetworkErrorMapper
│ ├── Remote/ # NewsRemoteDataSource
│ ├── Local/ # CoreDataStack, NewsLocalDataSource
│ ├── Dto/ # NewsDTO, NewsResponseDTO
│ └── Repositories/ # NewsRepositoryImpl
└── Presentation/
├── trending/ # TrendingNewsViewController + ViewModel
├── favourites/ # FavouriteNewsViewController + ViewModel
├── newsdetail/ # NewsDetailViewController
└── common/ # NewsCell
Uses the public Hacker News Algolia API — no API key required.
| Endpoint | Description |
|---|---|
GET /search?tags=front_page&page={n} |
Trending front page stories |
GET /search?query={q}&tags=story&page={n} |
Search stories by keyword |
- Clone the repository
- Open
DevDigest.xcodeprojin Xcode 15+ - Select a simulator or device and run
No additional setup required.