Skip to content
d.nikolaev
All projects
Personal projectProduct

Car listings aggregator

A full-stack pet project: parsers, API, deal scoring, a Telegram bot and a web interface

Role
TProject author: frontend, backend, parsers, infrastructure
Period
Apr 2026 — Jun 2026
Company
Personal projects
Materials coming soon

A monorepo where I own every layer: marketplace parsers, an API, a database, deal scoring, Telegram notifications and a Next.js web interface.

What I did

  • A monorepo of four applications and three shared packages
  • Playwright-based marketplace parsers: resilient to markup changes and bot protection
  • Deal scoring: comparing an offer against the history of similar listings
  • A Telegram bot: saved searches and notifications about new matching listings
  • A Next.js App Router web interface with server-side requests to my own API
  • Database schema and types in a shared package: one data model for all applications

Context

Why

I wanted to solve my own problem — finding good car deals without browsing marketplaces by hand — and at the same time try a full stack with no split between “my” and “someone else’s” part.

At work I own the frontend, so here I deliberately took on the backend, the parsers and the infrastructure as well.

Solution

How it works

Parsers live in a separate package and are run by a worker on a schedule. Each marketplace is described by its own adapter behind a shared contract, so adding a new one does not touch the others.

Collected listings go into the database through a shared data access layer. Scoring compares a listing’s price with the history of similar cars by model, year and mileage — turning “a good deal” into a number rather than a feeling.

The web interface is built on the App Router and fetches data on the server, while the Telegram bot works from saved searches and only sends new matches.

Outcomes

  • 4 applicationsAPI, worker, bot and web in one repository
  • 3 marketplacesconnected through parsing adapters
  • full stackfrom parser to deployment

Interface

Screenshots for this project are not published yet.

Related projects