<?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: Ahmed</title>
    <description>The latest articles on DEV Community by Ahmed (@ahmedsevindik).</description>
    <link>https://dev.to/ahmedsevindik</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%2F3971198%2F13206f6a-8430-42f1-b6da-92a3e558dc1d.png</url>
      <title>DEV Community: Ahmed</title>
      <link>https://dev.to/ahmedsevindik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahmedsevindik"/>
    <language>en</language>
    <item>
      <title>I created a website specifically for my laziness.</title>
      <dc:creator>Ahmed</dc:creator>
      <pubDate>Mon, 08 Jun 2026 22:03:52 +0000</pubDate>
      <link>https://dev.to/ahmedsevindik/i-created-a-website-specifically-for-my-laziness-p7j</link>
      <guid>https://dev.to/ahmedsevindik/i-created-a-website-specifically-for-my-laziness-p7j</guid>
      <description>&lt;p&gt;I built an AI tool to write LinkedIn posts.&lt;br&gt;
&lt;a href="https://post-craft-mu.vercel.app/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsitrm7wztiepw204wjah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsitrm7wztiepw204wjah.png" alt=" " width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And nobody cared.&lt;/p&gt;

&lt;p&gt;Let me tell you the full story because I think it matters.&lt;/p&gt;

&lt;p&gt;Three months ago I was sitting in my apartment at 2 AM, convinced I had found a gap in the market. I was spending hours every week trying to write LinkedIn content for my own brand. Staring at blank screens. Rewriting the same sentence fourteen times. Watching other founders post effortlessly while I struggled to string together three coherent paragraphs.&lt;/p&gt;

&lt;p&gt;So I thought, what if I just build something to fix this. An AI-powered web app that helps people create LinkedIn posts faster. Smart templates. Tone selection. Hook generators. The whole package.&lt;/p&gt;

&lt;p&gt;I went heads down for weeks. Designed the UI. Built the backend. Integrated the AI models. Tweaked the prompts until the output actually sounded human. I was proud of it. Genuinely proud.&lt;/p&gt;

&lt;p&gt;Then I launched it.&lt;/p&gt;

&lt;p&gt;Crickets.&lt;/p&gt;

&lt;p&gt;Not the dramatic kind where you get hate or pushback. The worse kind. Silence. A few sign-ups from friends who never came back. A couple of polite messages saying it looked cool. Zero paying users in the first two weeks.&lt;/p&gt;

&lt;p&gt;Here is what I got wrong and I am sharing this because I see other founders making the same mistakes right now.&lt;/p&gt;

&lt;p&gt;First, I built in isolation. I never once asked my target audience what they actually needed. I assumed my own pain point was universal. It was not. Some people wanted help with ideas, not full posts. Some wanted editing, not generation. I built for a version of the customer that only existed in my head.&lt;/p&gt;

&lt;p&gt;Second, I launched without distribution. I had no audience. No email list. No community. I just put it out there and expected the product to speak for itself. Products do not speak. People do. And I had nobody speaking for mine.&lt;/p&gt;

&lt;p&gt;Third, I underestimated how crowded the space already was. There are dozens of LinkedIn content tools. Some backed by real teams with real budgets. I did not take five minutes to ask myself what makes mine genuinely different. The honest answer at launch was nothing.&lt;/p&gt;

&lt;p&gt;So what did I do next.&lt;/p&gt;

&lt;p&gt;I stopped building features and started having conversations. I reached out to fifty founders and content creators. I asked them to use the tool and tell me everything that was broken, confusing, or unnecessary. The feedback was brutal and exactly what I needed.&lt;/p&gt;

&lt;p&gt;I started posting on LinkedIn myself, using my own tool, sharing the messy behind-the-scenes journey. That raw honesty attracted more users than any feature ever did.&lt;/p&gt;

&lt;p&gt;Slowly things started shifting. Not overnight. Not dramatically. But the kind of slow traction that actually means something because it is built on real feedback from real people.&lt;/p&gt;

&lt;p&gt;The tool is still early. I am still figuring it out. I am not writing this as a success story. I am writing this as a founder who made every classic mistake in the playbook and is trying to learn from each one in public.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://post-craft-mu.vercel.app/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are building something right now and you have not talked to a single potential customer this week, close your code editor and open a conversation instead.&lt;/p&gt;

&lt;p&gt;That is the lesson I paid for with three months of my time.&lt;/p&gt;

&lt;p&gt;What is the biggest mistake you made early in building your product? I would genuinely love to hear it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://post-craft-mu.vercel.app/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://post-craft-mu.vercel.app/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>saas</category>
      <category>buildinpublic</category>
      <category>founderjourney</category>
      <category>aitools</category>
    </item>
    <item>
      <title>I Built a Flutter Package for Turkish-Specific Form Validation</title>
      <dc:creator>Ahmed</dc:creator>
      <pubDate>Sat, 06 Jun 2026 11:45:02 +0000</pubDate>
      <link>https://dev.to/ahmedsevindik/i-built-a-flutter-package-for-turkish-specific-form-validation-5dp4</link>
      <guid>https://dev.to/ahmedsevindik/i-built-a-flutter-package-for-turkish-specific-form-validation-5dp4</guid>
      <description>&lt;h1&gt;
  
  
  I Built a Flutter Package for Turkish-Specific Form Validation
&lt;/h1&gt;

&lt;p&gt;If you've ever built a Flutter app targeting Turkish users, you know the pain.&lt;/p&gt;

&lt;p&gt;You need to validate a &lt;strong&gt;TC Kimlik No&lt;/strong&gt; — there's no package for that. You need to format a &lt;strong&gt;Turkish IBAN&lt;/strong&gt; — you end up writing your own regex. You want a proper &lt;strong&gt;₺1.250,50&lt;/strong&gt; currency format — good luck finding something ready-made.&lt;/p&gt;

&lt;p&gt;So I built it myself: &lt;a href="https://pub.dev/packages/turkish_validators" rel="noopener noreferrer"&gt;&lt;code&gt;turkish_validators&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What's inside
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ TC Kimlik No Validation
&lt;/h3&gt;

&lt;p&gt;TC Kimlik No has a real checksum algorithm behind it — it's not just "is it 11 digits." This package validates the full algorithm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isValid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TcKimlik&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'12345678901'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Drop it straight into a TextFormField&lt;/span&gt;
&lt;span class="n"&gt;TextFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;validator:&lt;/span&gt; &lt;span class="n"&gt;TcKimlik&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;formValidator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Turkish IBAN (MOD-97)
&lt;/h3&gt;

&lt;p&gt;Validates TR IBANs using the MOD-97 standard and formats them for display:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isValid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TurkishIban&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'TR330006100519786457841326'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;formatted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TurkishIban&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'TR330006100519786457841326'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// → TR33 0006 1005 1978 6457 8413 26&lt;/span&gt;

&lt;span class="n"&gt;TextFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;validator:&lt;/span&gt; &lt;span class="n"&gt;TurkishIban&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;formValidator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Turkish Phone Number
&lt;/h3&gt;

&lt;p&gt;Handles both &lt;code&gt;0532...&lt;/code&gt; and &lt;code&gt;+9053...&lt;/code&gt; formats, plus clean formatting for display:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isValid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TurkishPhone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'05321234567'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isValid2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TurkishPhone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'+905321234567'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;

&lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;formatted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TurkishPhone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'05321234567'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// → 0532 123 45 67&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Turkish Lira Formatting
&lt;/h3&gt;

&lt;p&gt;Proper Turkish number format with dot-as-thousands and comma-as-decimal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TurkishLira&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1250.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// → ₺1.250,50&lt;/span&gt;

&lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;price2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TurkishLira&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1250.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;showSymbol:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// → 1.250,50&lt;/span&gt;

&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TurkishLira&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'₺1.250,50'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// → 1250.50&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;turkish_validators&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;^0.0.3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No extra dependencies — just Flutter.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;I kept rewriting the same validators across different projects. TC Kimlik alone has a non-trivial algorithm that I was copy-pasting between apps. IBAN formatting was always a manual job. At some point it just made sense to package it properly.&lt;/p&gt;

&lt;p&gt;The Turkish Flutter ecosystem has a lot of talented developers but not many locale-specific utilities. Hopefully this saves someone a few hours.&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;a href="https://pub.dev/packages/turkish_validators" rel="noopener noreferrer"&gt;pub.dev/packages/turkish_validators&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 &lt;a href="https://github.com/AhmedSevindik/turkish_validators" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you find it useful, a like on pub.dev goes a long way. And if something's missing — open an issue, I'm actively maintaining it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;tags: #flutter #dart #opensource #turkish #mobiledev&lt;/em&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
