work details

Kamanİlan — Local Classifieds and Marketplace Platform

A local marketplace connecting producers, sellers and buyers in Kaman and Kırşehir through category, location, store, membership and listing management.

Client

Kaman Ilan

Start

16 Dec 2025

Completed

Kamanİlan — Local Classifieds and Marketplace Platform interface and project preview
Description

A local marketplace connecting producers, sellers and buyers in Kaman and Kırşehir through category, location, store, membership and listing management.

Case study

Challenge

In Kaman and Kırşehir, listings were either lost on national sites or stuck in unsearchable social media groups. With listings meant to stay free, the platform needed content that brings regular visits so it could earn from local advertising.

Approach

Listings, stores, news, announcements and ads were combined in one Fastify API and MySQL data model. An ad engine with targeting, frequency capping and reporting and a news pipeline with an editorial filter were built, with SEO designed in from the start.

Outcome

Kaman İlan is live at kamanilan.com and its ad slots are ready to sell. Paid featured listings and product sales are planned as the next phases, and much of the infrastructure for them is already in the code.

Tools

Next.js, React, TypeScript, Fastify, Bun, Drizzle ORM, MySQL, Cloudinary, Iyzico

Key Features
  • Free listings with category, location and per-city pages

  • Step-by-step posting, favourites and on-site messaging

  • Store applications, store showcase pages and seller panel

  • 14 ad slots targeted by province, district, category, store

  • Ad rotation, frequency capping and campaign reports

  • AI-assisted local news pipeline with an editorial filter

  • NewsArticle schema, news sitemap, RSS and IndexNow

  • Excel/CSV bulk listing import and scheduled XML feeds

  • Sign-in with email or Google account

Technologies Used
  • Next.js

  • React

  • TypeScript

  • Fastify

  • Bun

  • Drizzle ORM

  • MySQL

  • Cloudinary

  • Iyzico

Design Highlights
  • Listings are free; revenue comes from targeted, reportable local ads

  • News suggestions never go live without editor approval

  • News images produced without an AI image service, WebP variants generated

  • Ads can be targeted separately for desktop and mobile

  • Conversion events and sponsor attribution recorded once per user action

Details

Kaman İlan is a local classifieds, news and announcements platform for Kaman and the wider Kırşehir province in central Turkey. It connects private sellers, local shops and producers with buyers, and gives local businesses a measurable place to advertise. Listings are free for individuals; the platform's revenue model is built on advertising space sold to local businesses.

Context and requirements

In a small district, people either post on national classifieds sites or in social media groups. On national sites a local listing gets lost; groups offer no search, no categories and little trust. A local showcase was needed for regional products such as Kaman walnuts, as well as property, vehicle and job listings. The second challenge was the business model: if listings stay free, the platform has to sell targeted, reportable advertising to local businesses, which in turn requires fresh content that brings visitors back regularly.

Solution and scope

Browsing listings

The homepage highlights categories such as property and rentals, cars and motorcycles, tools and equipment, animals and agriculture, jobs, and tradespeople and services. Visitors search by category, location and keyword, and category pages also have separate URLs per city. A listing page shows images, attributes, seller details and related listings.

Posting and user accounts

Posting a listing follows a step-by-step flow: category, details, location and photos. In their account, users manage their listings, favourites, recently viewed items, addresses, notifications and support requests; buyers and sellers talk through on-site messaging. Users can sign in with email or a Google account.

Stores

Shops and producers who sell regularly can apply for a store. Once approved, the store gets its own showcase page, and the owner manages the profile, listings and campaigns from the seller panel.

News and announcements

The platform is more than a classifieds site; local news and announcements keep visitors coming back. The news pipeline collects suggestions from selected sources, turns those that pass the editorial filter into original, locally framed articles with AI, and keeps the source link. The filter removes content that is unrelated to the region, politically partisan or overly promotional before it reaches an editor. Editors have the final say: nothing is published without approval in the panel.

Advertise

Businesses submit requests through the advertising page; requests for a new slot, an extension or a creative change arrive in the panel for review.

Admin panel

At the core of the panel are listings, categories and subcategories, brands, units, variants and attribute definitions. The following areas are managed as well:

  • Ad engine: 14 defined ad slots across the site; ads can be targeted by page type, province, district, category, store or listing, with separate desktop and mobile options. The full lifecycle from draft to live to archived, rotation and frequency capping, campaign reports and an audit log are all in the panel.
  • Newsdesk: news sources, news suggestions, the news image queue and articles.
  • Bulk data: bulk listing import via Excel and CSV, XML feeds fetched on a schedule, and a retry queue for failed photos.
  • Sellers and users: store applications, users, roles and permissions.
  • Content and site: announcements, sliders and banners, homepage layout, menu and footer sections, custom pages, FAQ, pop-ups, theme and site settings.
  • Communication: email templates, newsletter, notifications and contact messages.

Technical architecture

The platform consists of three applications: a customer site built with Next.js 16 and React 19, a separate Next.js admin panel and a Fastify API running on Bun. Data lives in MySQL, managed with Drizzle ORM and validated with Zod. The interface uses Tailwind CSS, Radix UI and Framer Motion, with React Query for data fetching. Authentication uses JWT, and admin endpoints are protected by permissions. Common modules come from a shared backend package used by other projects on the same infrastructure.

Search engines and AI search were considered from the start: news articles are published with NewsArticle structured data, there is a dedicated news sitemap and RSS feed, and new content is submitted to search engines via IndexNow. The Google Search Console index status of articles can be checked from the panel. Marketing conversion events go to GA4 and Google Ads, while sponsored ad interactions are written to a separate attribution log, each sent once per user action.

No AI image service is used for news images: the panel exports image briefs, and when the finished images are imported, cover, square and thumbnail WebP versions are generated automatically.

Integrations

  • Google OAuth: sign-in with a Google account.
  • Cloudinary: listing and store images.
  • Nodemailer: account, notification and newsletter emails.
  • AI providers: a fallback chain of providers for news rewriting.
  • IndexNow, Search Console, GA4 and Google Ads: indexing and measurement.
  • Iyzipay: payment infrastructure already in the code for future product sales and paid featured listings.

Outcome

Kaman İlan is live at kamanilan.com. Listings, stores, news, announcements and advertising run on one data model, and ad slots are ready to sell with targeting and reporting. The roadmap continues with paid featured listings and then product sales with a cart and online payment; much of the infrastructure for both phases is already in the code.