<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: İlyas Özkurt</title>
    <description>The latest articles on DEV Community by İlyas Özkurt (@ilyasozkurt).</description>
    <link>https://dev.to/ilyasozkurt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F747778%2F9ce55376-b0ef-4901-adc1-8eb83e4d021e.jpeg</url>
      <title>DEV Community: İlyas Özkurt</title>
      <link>https://dev.to/ilyasozkurt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ilyasozkurt"/>
    <language>en</language>
    <item>
      <title>Why I Built Another Uptime Monitoring Tool as a Solo Developer</title>
      <dc:creator>İlyas Özkurt</dc:creator>
      <pubDate>Sat, 04 Apr 2026 09:17:25 +0000</pubDate>
      <link>https://dev.to/ilyasozkurt/why-i-built-another-uptime-monitoring-tool-as-a-solo-developer-1d9f</link>
      <guid>https://dev.to/ilyasozkurt/why-i-built-another-uptime-monitoring-tool-as-a-solo-developer-1d9f</guid>
      <description>&lt;p&gt;There are already many uptime monitoring tools on the market.&lt;/p&gt;

&lt;p&gt;Some are powerful. Some are mature. Some offer almost every feature you can imagine.&lt;/p&gt;

&lt;p&gt;So naturally, one question comes first:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why build another one?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For me, the answer started with a simple frustration.&lt;/p&gt;

&lt;p&gt;Over time, I noticed that many monitoring products were growing in complexity faster than in clarity.&lt;br&gt;
A user often needs only a few things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;know when a service is down&lt;/li&gt;
&lt;li&gt;understand what failed&lt;/li&gt;
&lt;li&gt;receive alerts quickly&lt;/li&gt;
&lt;li&gt;avoid false alarms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yet many dashboards feel overloaded before you even create your first monitor.&lt;/p&gt;

&lt;p&gt;As someone who has spent years building software products, I wanted a monitoring tool that stays technically capable while remaining clean and understandable.&lt;/p&gt;

&lt;p&gt;That is how &lt;strong&gt;UptimeTick&lt;/strong&gt; started.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem I Wanted to Solve
&lt;/h2&gt;

&lt;p&gt;The biggest issue was not checking whether a website responds.&lt;/p&gt;

&lt;p&gt;That part is simple.&lt;/p&gt;

&lt;p&gt;The real challenge is deciding whether a failure is real.&lt;/p&gt;

&lt;p&gt;A single failed request does not always mean downtime.&lt;/p&gt;

&lt;p&gt;It may be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;temporary packet loss&lt;/li&gt;
&lt;li&gt;DNS delay&lt;/li&gt;
&lt;li&gt;regional routing issue&lt;/li&gt;
&lt;li&gt;a slow backend response&lt;/li&gt;
&lt;li&gt;a short CDN hiccup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If alerts trigger too early, trust drops quickly.&lt;/p&gt;

&lt;p&gt;That is why I focused heavily on retry logic and signal quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Designed the Monitoring Flow
&lt;/h2&gt;

&lt;p&gt;Each check goes through a decision process before creating an incident.&lt;/p&gt;

&lt;p&gt;A failed request does not immediately become downtime.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retries happen automatically&lt;/li&gt;
&lt;li&gt;response times are measured&lt;/li&gt;
&lt;li&gt;status history is evaluated&lt;/li&gt;
&lt;li&gt;health transitions are controlled carefully&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduces false positives significantly.&lt;/p&gt;

&lt;p&gt;In practice, this matters more than adding dozens of extra features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure Choices
&lt;/h2&gt;

&lt;p&gt;The backend uses a distributed architecture designed for lightweight but scalable checks.&lt;/p&gt;

&lt;p&gt;Core parts include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Laravel queues&lt;/li&gt;
&lt;li&gt;isolated check jobs&lt;/li&gt;
&lt;li&gt;cloud-based execution layers&lt;/li&gt;
&lt;li&gt;custom response handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For HTTP checks, I also needed consistent request identity, so requests use a dedicated monitoring user agent.&lt;/p&gt;

&lt;p&gt;That sounds small, but it helps with transparency and filtering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Simplicity Matters More Than Feature Count
&lt;/h2&gt;

&lt;p&gt;A lot of products compete by adding more options.&lt;/p&gt;

&lt;p&gt;I tried to think differently:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if fewer decisions create a better product?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clear monitor creation&lt;/li&gt;
&lt;li&gt;readable incidents&lt;/li&gt;
&lt;li&gt;understandable alerting&lt;/li&gt;
&lt;li&gt;no unnecessary noise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Especially for solo founders and small teams, clarity often wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building as a Solo Developer
&lt;/h2&gt;

&lt;p&gt;One advantage of building alone is speed.&lt;/p&gt;

&lt;p&gt;One disadvantage is that every decision belongs to you.&lt;/p&gt;

&lt;p&gt;Infrastructure, UX, alerts, pricing logic, mobile behavior, failure handling — everything moves through the same brain.&lt;/p&gt;

&lt;p&gt;That creates pressure, but it also keeps product decisions very consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Monitoring is not only a technical problem.&lt;/p&gt;

&lt;p&gt;It is also a trust problem.&lt;/p&gt;

&lt;p&gt;Users must believe alerts are meaningful.&lt;/p&gt;

&lt;p&gt;If the signal feels unreliable, even the best infrastructure loses value.&lt;/p&gt;

&lt;p&gt;That lesson shaped almost every decision I made.&lt;/p&gt;

&lt;h2&gt;
  
  
  Still Improving
&lt;/h2&gt;

&lt;p&gt;The product continues evolving.&lt;/p&gt;

&lt;p&gt;Some improvements happen in infrastructure.&lt;/p&gt;

&lt;p&gt;Some happen in interface details.&lt;/p&gt;

&lt;p&gt;Some happen because users interact differently than expected.&lt;/p&gt;

&lt;p&gt;That feedback loop is one of the best parts of building publicly.&lt;/p&gt;

&lt;p&gt;If you use monitoring tools regularly, I would genuinely like to hear:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the one thing most uptime monitoring tools still get wrong?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>sass</category>
      <category>uptime</category>
    </item>
    <item>
      <title>I Built Offday.app — A Small Tool That Helps You Plan Longer Holidays with Fewer Leave Days</title>
      <dc:creator>İlyas Özkurt</dc:creator>
      <pubDate>Sun, 23 Nov 2025 22:05:11 +0000</pubDate>
      <link>https://dev.to/ilyasozkurt/i-built-offdayapp-a-small-tool-that-helps-you-plan-longer-holidays-with-fewer-leave-days-15b0</link>
      <guid>https://dev.to/ilyasozkurt/i-built-offdayapp-a-small-tool-that-helps-you-plan-longer-holidays-with-fewer-leave-days-15b0</guid>
      <description>&lt;p&gt;I’ve been experimenting with side projects for years, usually to solve small personal problems. Offday.app started exactly like that: a tiny tool I needed for myself, but it gradually turned into something people from many countries began using. So I thought it might be worth sharing here.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem I Wanted to Solve
&lt;/h2&gt;

&lt;p&gt;Every year, I try to maximize my holidays by combining annual leave with public holidays. Doing this manually is tedious: checking calendars, calculating date ranges, and tryinga to see which combinations create the longest break.&lt;/p&gt;

&lt;p&gt;The idea behind Offday.app is straightforward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Select your country → the app analyzes that year’s public holidays → it suggests date ranges where a few leave days turn into surprisingly long holidays.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s simple, but it saves a lot of time and catches opportunities you probably wouldn’t notice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Global Usage
&lt;/h2&gt;

&lt;p&gt;I initially built it only for Turkey. After refining the holiday logic, I made it work for every country. Since then, users from more than 50 countries have generated hundreds of holiday plans, even though I barely promoted it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;Since this is dev.to, here’s what’s under the hood:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; Vue 3, Vite, Tailwind&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt; Laravel&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Infrastructure:&lt;/strong&gt; AWS (CloudFront, S3, EC2)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Logic:&lt;/strong&gt; holiday parsing, date-range scoring, caching, multi-locale output&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The date engine doesn’t brute-force all combinations. Instead, it focuses on identifying “peak opportunity windows” around existing public holidays.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I’m Sharing It
&lt;/h2&gt;

&lt;p&gt;I enjoy seeing other developers’ weekend projects here, so I wanted to contribute mine. Offday.app is simple, but it genuinely solves a small, real problem. If it helps someone squeeze a few extra days into their next holiday, that’s more than enough motivation for me.&lt;/p&gt;

&lt;p&gt;You can try it here:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;a href="https://offday.app" rel="noopener noreferrer"&gt;https://offday.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m currently working on improvements such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;plan sharing without accounts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;exportable holiday cards&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;more detailed country-specific rules&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;better UX for country selection and date review&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have suggestions or feedback, I’d be happy to hear them.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>vue</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Turkish Food Recipe Scraper</title>
      <dc:creator>İlyas Özkurt</dc:creator>
      <pubDate>Thu, 29 Sep 2022 07:18:39 +0000</pubDate>
      <link>https://dev.to/ilyasozkurt/turkish-food-recipe-scraper-2a04</link>
      <guid>https://dev.to/ilyasozkurt/turkish-food-recipe-scraper-2a04</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/ilyasozkurt/turkish-food-recipes" rel="noopener noreferrer"&gt;Turkish Food Recipes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A scrapper allows you to scrape 20000+ Turkish food recipes and export them to JSON files.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to install and use Scrapper?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git clone https://github.com/ilyasozkurt/turkish-food-recipes &amp;amp;&amp;amp; cd turkish-food-recipes/scrapper&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;composer install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;php artisan scrape:recipes --force-download&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;code&gt;--force-download&lt;/code&gt; option downloads all sitemaps instead of reading from the cache.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use the dataset?
&lt;/h2&gt;

&lt;p&gt;After you run the command &lt;code&gt;php artisan scrape:recipes --force-download&lt;/code&gt; you'll be able to see &lt;code&gt;/data/&lt;/code&gt; directory at the root of the project. &lt;/p&gt;

&lt;p&gt;The dataset is in JSON format. &lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

</description>
      <category>scrapper</category>
      <category>php</category>
      <category>dataset</category>
      <category>laravel</category>
    </item>
    <item>
      <title>Automobile Manufacturers, Models, And Specs Database</title>
      <dc:creator>İlyas Özkurt</dc:creator>
      <pubDate>Wed, 08 Dec 2021 21:13:17 +0000</pubDate>
      <link>https://dev.to/ilyasozkurt/automobile-manufacturers-models-and-specs-database-42ch</link>
      <guid>https://dev.to/ilyasozkurt/automobile-manufacturers-models-and-specs-database-42ch</guid>
      <description>&lt;p&gt;A database which includes automobile manufacturers, models and engine options with specs.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to install and use Scrapper?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git clone https://github.com/ilyasozkurt/automobile-models-and-specs &amp;amp;&amp;amp; cd automobile-models-and-specs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;composer install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Get a copy of &lt;code&gt;.env.example&lt;/code&gt; and save it as &lt;code&gt;.env&lt;/code&gt; after configuring database variables.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;php artisan migrate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;php artisan scrape:automobiles&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Data Information
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;119 Brand&lt;/li&gt;
&lt;li&gt;6681 Model&lt;/li&gt;
&lt;li&gt;28400~ Model Option (Engine)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Brand Specs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Name&lt;/li&gt;
&lt;li&gt;Logo&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Model Specs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Brand&lt;/li&gt;
&lt;li&gt;Name&lt;/li&gt;
&lt;li&gt;Description&lt;/li&gt;
&lt;li&gt;Press Release&lt;/li&gt;
&lt;li&gt;Photos&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Engine Specs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Name&lt;/li&gt;
&lt;li&gt;Engine -&amp;gt; Cylinders&lt;/li&gt;
&lt;li&gt;Engine -&amp;gt; Displacement&lt;/li&gt;
&lt;li&gt;Engine -&amp;gt; Power&lt;/li&gt;
&lt;li&gt;Engine -&amp;gt; Torque&lt;/li&gt;
&lt;li&gt;Engine -&amp;gt; Fuel System&lt;/li&gt;
&lt;li&gt;Engine -&amp;gt; Fuel&lt;/li&gt;
&lt;li&gt;Engine -&amp;gt; CO2 Emissions&lt;/li&gt;
&lt;li&gt;Performance -&amp;gt; Top Speed&lt;/li&gt;
&lt;li&gt;Performance -&amp;gt; Acceleration 0-62 Mph (0-100 kph)&lt;/li&gt;
&lt;li&gt;Fuel Economy -&amp;gt; City&lt;/li&gt;
&lt;li&gt;Fuel Economy -&amp;gt; Highway&lt;/li&gt;
&lt;li&gt;Fuel Economy -&amp;gt; Combined&lt;/li&gt;
&lt;li&gt;Drive Type&lt;/li&gt;
&lt;li&gt;Gearbox&lt;/li&gt;
&lt;li&gt;Brakes -&amp;gt; Front&lt;/li&gt;
&lt;li&gt;Brakes -&amp;gt; Rear&lt;/li&gt;
&lt;li&gt;Tire Size&lt;/li&gt;
&lt;li&gt;Dimensions -&amp;gt; Length&lt;/li&gt;
&lt;li&gt;Dimensions -&amp;gt; Width&lt;/li&gt;
&lt;li&gt;Dimensions -&amp;gt; Height&lt;/li&gt;
&lt;li&gt;Dimensions -&amp;gt; Front/rear Track&lt;/li&gt;
&lt;li&gt;Dimensions -&amp;gt; Wheelbase&lt;/li&gt;
&lt;li&gt;Dimensions -&amp;gt; Ground Clearance&lt;/li&gt;
&lt;li&gt;Dimensions -&amp;gt; Cargo Volume&lt;/li&gt;
&lt;li&gt;Dimensions -&amp;gt; Cd&lt;/li&gt;
&lt;li&gt;Weight -&amp;gt; Unladen&lt;/li&gt;
&lt;li&gt;Weight -&amp;gt; Gross Weight Limit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you.&lt;/p&gt;

</description>
      <category>database</category>
      <category>laravel</category>
      <category>scraping</category>
    </item>
  </channel>
</rss>
