Projects

Necdet Şanlı Welcome Under construction

Projects

A curated list of things I built — full-stack, systems, ML, and embedded.

Do Not Ghost Me – Anonymous Recruitment Ghosting Tracker

Do Not Ghost Me is an open-source, privacy-first platform that collects anonymous reports about recruitment ghosting and aggregates them into company-level statistics. The goal is to give candidates more transparency about how companies behave during hiring processes and to encourage more respectful communication practices.

  • Designed and implemented a full-stack web application using Next.js (App Router) and TypeScript, with a PostgreSQL database accessed via Prisma.
  • Built an anonymous reporting flow with structured fields (stage, seniority, role category, country, days without reply) and a public “Top companies” page that ranks companies by ghosting reports with rich filtering.
  • Implemented a hardened API layer with strict Zod validation, CSRF protection, salted IP hashing, honeypot fields, and per-IP / per-company rate limiting to prevent abuse while avoiding storage of raw IP addresses.
  • Developed an admin dashboard for moderating reports (flagging, soft delete, hard delete) while keeping public statistics based only on active, non-deleted entries.
  • Set up a devcontainer-based local environment (Docker + PostgreSQL) and reproducible scripts for database setup, migrations, and realistic dummy data seeding.
  • Added a comprehensive testing setup with Vitest (unit & integration tests) and Playwright (end-to-end tests), plus linting, type-checking and CI-friendly verification scripts.
  • Documented the system with a detailed README, PRIVACY and CONTRIBUTING guidelines, and JSDoc-based internal documentation for core library modules.

EyeRest – Windows Tray App for the 20–20–20 Rule

EyeRest is a lightweight Windows tray application that helps users follow the 20–20–20 rule for eye health (every 20 minutes, look at something 20 feet away for 20 seconds). It runs quietly in the notification area and shows periodic desktop notifications so regular eye breaks become a natural part of screen-heavy workdays.

  • Built with C# and .NET Framework 4.8 as my first C#/.NET project, focusing on a small, polished utility for everyday use.
  • Uses a WinForms ApplicationContext and NotifyIcon to run as a background tray application integrated into the Windows notification area.
  • Relies on System.Threading.Timer to schedule recurring reminders at 20-minute intervals in a resource-efficient way.
  • Displays Windows 10/11 toast notifications with a classic tray balloon fallback to support older or restricted environments.
  • Includes a small configuration dialog that allows users to enable or disable reminders for the current session without restarting the app.
  • Open source on GitHub and shipped as an MSIX-packaged desktop app on the Microsoft Store for easy installation and updates.
  • Additionally distributed via Chocolatey and winget, with both package definitions created and actively maintained by me to ensure smooth installs and upgrades.
  • Follows semantic versioning and includes thorough project documentation, including README, LICENSE, CHANGELOG, CONTRIBUTING guidelines, and a privacy policy.
  • Designed to be privacy-friendly: does not collect telemetry, usage analytics, or any personal data.

Automatic Expiration Date Extraction from Product Images

Developed an image-processing pipeline that detects and reads expiration dates from product images and stores the results in a structured database. Implemented preprocessing steps (cropping, noise reduction, contrast enhancement) to make date regions more readable, then applied OCR to extract the expiration date text. Designed basic validation logic to filter out invalid or ambiguous dates and linked each extracted date to the corresponding product record for later querying and analysis.

  • Built an end-to-end workflow from raw product images to cleaned, structured expiration-date records.
  • Used image preprocessing techniques to improve OCR accuracy on low-quality or noisy images (e.g., blur, reflections, small fonts).
  • Implemented OCR-based date extraction and parsing to standardize different date formats (DD/MM/YYYY, MM/YYYY, etc.).
  • Added validation and error-handling logic to detect invalid dates and reduce false positives before saving to the database.
  • Designed a simple data model to associate each product with its extracted expiration date for further reporting or alerts.

ESP32-Based Wi-Fi Room Intrusion Alert System

Developed an ESP32-based alarm system, programmed with the Arduino framework, that detects unauthorized entry into my room and sends real-time notifications to my phone over Wi-Fi. The system continuously monitors door/motion sensors and triggers an alert when someone enters without my knowledge. Implemented basic filtering and debouncing logic to reduce false positives and used a simple cloud/API integration to deliver notifications to my mobile device.

  • Designed and implemented a network-connected alarm system using an ESP32 board and the Arduino ecosystem.
  • Integrated door/motion sensors to monitor room access and detect intrusions.
  • Programmed the ESP32 in C/C++ (Arduino framework) to process sensor signals and decide when to trigger an alarm.
  • Sent intrusion alerts to my phone over Wi-Fi via a lightweight web/API or messaging/notification service.
  • Tuned sensor thresholds and logic to minimize false alarms and improve reliability in everyday use.

Fuzzy Logic Buy / Hold / Sell Signals

Developed a fuzzy logic–based decision support system that analyzes historical stock price data and generates Buy / Hold / Sell signals. Modeled market behavior with fuzzy sets and membership functions (e.g., price trend, volatility, and volume) and encoded trader heuristics as fuzzy rules. Implemented the inference engine and defuzzification in Python/MATLAB and backtested the strategy on real market data to evaluate its performance against simple baseline strategies.

  • Designed a rule-based fuzzy inference system to transform noisy market inputs into interpretable trading signals.
  • Defined and tuned fuzzy sets, membership functions, and rule base to reflect common trading intuition.
  • Implemented data preprocessing, signal generation, and backtesting pipeline using Python/MATLAB.
  • Focused on explainability by making the reasoning behind each Buy/Hold/Sell recommendation transparent.

Real Estate Price Estimation & Fair-Price Classification (Istanbul)

Built a machine learning model on a real-estate dataset of Istanbul apartments containing features such as location, square meters, number of rooms, and floor level. The system predicts the expected market price of a property and, given a listing price, classifies it as underpriced, fair, or overpriced. Focused on cleaning the dataset, engineering meaningful features, and evaluating model performance with appropriate regression and classification metrics.

  • Collected and cleaned structured housing data including district/neighborhood, size (m²), room count, and floor information.
  • Engineered features (e.g., location encoding, floor category, price per m²) to improve model performance and interpretability.
  • Trained and evaluated regression models to estimate the fair market price of a given apartment.
  • Built a classification layer that compares the predicted price with the actual listing price to flag properties as underpriced, fair, or overpriced.
  • Analyzed model performance using metrics such as MAE/RMSE for regression and accuracy/precision/recall for the classification task.

Sentiment Analysis of User Comments with Weka

Built a sentiment analysis pipeline on a dataset of user comments to automatically classify each comment as positive or negative. Used Weka to handle data preprocessing, feature extraction, model training, and evaluation. Compared multiple machine learning algorithms (e.g., Naive Bayes, Decision Trees, SVM) and tuned hyperparameters to improve classification performance based on metrics such as accuracy, precision, recall, and confusion matrices.

  • Cleaned and preprocessed raw text data (tokenization, stop-word removal, basic normalization).
  • Transformed comments into numerical feature vectors using bag-of-words / TF-IDF representations in Weka.
  • Trained and compared multiple supervised learning models for binary sentiment classification.
  • Evaluated model performance and selected the best-performing classifier based on validation results.
  • Interpreted common patterns in misclassified samples to understand model limitations and data quality.

Local / GMT