<?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>Forem: WeRDyin</title>
    <description>The latest articles on Forem by WeRDyin (@joe223).</description>
    <link>https://forem.com/joe223</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%2F252478%2Fbb10c8d7-e838-45c9-99fe-ee5ebe76b58d.jpeg</url>
      <title>Forem: WeRDyin</title>
      <link>https://forem.com/joe223</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/joe223"/>
    <language>en</language>
    <item>
      <title>AriaType - Local first &amp; Privacy first voice input built on the top of Tauri and llama.cpp</title>
      <dc:creator>WeRDyin</dc:creator>
      <pubDate>Wed, 08 Apr 2026 03:33:56 +0000</pubDate>
      <link>https://forem.com/joe223/ariatype-local-first-privacy-first-voice-input-built-on-the-top-of-tauri-and-llamacpp-1nap</link>
      <guid>https://forem.com/joe223/ariatype-local-first-privacy-first-voice-input-built-on-the-top-of-tauri-and-llamacpp-1nap</guid>
      <description>&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%2Fvdq368jblf1ixod9bvhn.jpeg" 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%2Fvdq368jblf1ixod9bvhn.jpeg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The Backstory
&lt;/h1&gt;

&lt;p&gt;This Spring Festival, I was working on a web coding project. About 3 days in, I had an epiphany:&lt;/p&gt;

&lt;p&gt;The biggest challenge in web coding isn't the cost of API calls. It's my stamina.&lt;br&gt;
The constant cycle of writing prompts, communicating with AI models, and iterating corrections — that mental load is exhausting.&lt;/p&gt;

&lt;p&gt;So I decided to build myself a voice input tool. Not because other options were bad, but because I wanted something that felt native.&lt;/p&gt;

&lt;p&gt;I looked at TypeLess. The subscription fee was steep — almost matching my AI Sub plan. I wasn't willing to pay that much for something I could build for myself.&lt;br&gt;
So I did.&lt;/p&gt;

&lt;p&gt;Two hours. MVP.&lt;/p&gt;

&lt;p&gt;LLaMA CPP + Whisper. Rough around the edges, but functional. Good enough for personal use.&lt;/p&gt;

&lt;p&gt;Then the feedback loop started.&lt;/p&gt;

&lt;p&gt;After showing it to colleagues post-holiday, I got real feedback. &lt;/p&gt;

&lt;p&gt;Some of it stung, but all of it was valuable. So I spent the following weekends and holidays polishing it.&lt;/p&gt;

&lt;p&gt;Today, AriaType 0.1 is officially released.&lt;/p&gt;

&lt;h1&gt;
  
  
  What AriaType does:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Local STT models — runs whisper-based models on your machine. For English, I recommend Vesper. For Chinese/CJK users, Sense Voice (by Alibaba) has noticeably better accuracy and speed&lt;/li&gt;
&lt;li&gt;Polishing — local small models (under 2B params) for grammar correction, filler word removal, and formatting&lt;/li&gt;
&lt;li&gt;Cloud service mode — use your own AI subscription for Polish. No separate payment required&lt;/li&gt;
&lt;li&gt;Noise reduction &amp;amp; silence detection — skips silent audio chunks to save costs&lt;/li&gt;
&lt;li&gt;100+ languages supported&lt;/li&gt;
&lt;li&gt;Privacy by default — your voice data never leaves your machine unless you explicitly use cloud services&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  The tech stack:
&lt;/h1&gt;

&lt;p&gt;I did zero "traditional" coding. Everything was AI-assisted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primary: GLM-5.1 and MiniMax-M2.7&lt;/li&gt;
&lt;li&gt;Complex problem-solving: Claude OPUS 4.6 and ChatGPT 5.4 (used sparingly)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real challenge no one talks about:&lt;/p&gt;

&lt;p&gt;The gap between an AI-generated MVP and a real product is 80% of the work.&lt;br&gt;
As the codebase grew, the challenge shifted from "can AI write this feature" to "can AI accurately modify and iteratively improve a complex, growing codebase without breaking things."&lt;/p&gt;

&lt;p&gt;That's the engineering problem I now call harness engineering — building the systems and patterns that let AI reliably extend and maintain a project over time.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why open source?
&lt;/h1&gt;

&lt;p&gt;I enjoy the process. It's challenging, but the feedback loop is rewarding. I figured others might have similar needs — wanting local/offline STT, wanting their data to stay private.&lt;/p&gt;

&lt;p&gt;So I registered a domain, built a website, and open sourced the project.&lt;/p&gt;

&lt;h1&gt;
  
  
  Links:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Website: &lt;a href="https://ariatype.com" rel="noopener noreferrer"&gt;https://ariatype.com&lt;/a&gt; (&lt;a href="https://ariatype.com" rel="noopener noreferrer"&gt;https://ariatype.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;💻 GitHub: &lt;a href="https://github.com/SparklingSynapse/AriaType" rel="noopener noreferrer"&gt;https://github.com/SparklingSynapse/AriaType&lt;/a&gt; (&lt;a href="https://github.com/joe223/AriaType" rel="noopener noreferrer"&gt;https://github.com/joe223/AriaType&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>rust</category>
    </item>
    <item>
      <title>Create really fluid loop slide with Tiny-Swiper</title>
      <dc:creator>WeRDyin</dc:creator>
      <pubDate>Wed, 23 Dec 2020 15:32:38 +0000</pubDate>
      <link>https://forem.com/joe223/create-really-fluid-loop-slide-with-tiny-swiper-1218</link>
      <guid>https://forem.com/joe223/create-really-fluid-loop-slide-with-tiny-swiper-1218</guid>
      <description>&lt;p&gt;Slide me 👇&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/tiny-swiper2-demo-freemode?embed=1&amp;amp;view=preview&amp;amp;" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/joe223/tiny-swiper"&gt;Tiny-Swiper&lt;/a&gt; is an ingenious open-source JavaScript Carousel powered by wonderful plugins with native-like experience. &lt;/p&gt;

&lt;p&gt;It's lightweight yet extensible. You can import plugins as needed, no more, no less. Just like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Swiper&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;SwiperPluginLazyload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;SwiperPluginPagination&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tiny-swiper&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# via npm&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;tiny-swiper &lt;span class="nt"&gt;--save&lt;/span&gt;

&lt;span class="c"&gt;# via yarn&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;yarn add tiny-swiper
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you prefer CDN&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://unpkg.com/tiny-swiper@latest"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Initialization
&lt;/h3&gt;

&lt;p&gt;Html code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Slider main container --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"swiper-container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- Additional required wrapper --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"swiper-wrapper"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- Slides --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"swiper-slide"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Slide 1&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"swiper-slide"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Slide 2&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"swiper-slide"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Slide 3&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        ...
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- If we need pagination --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"swiper-pagination"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;JavaScript/TypeScript code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Swiper&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;SwiperPluginLazyload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;SwiperPluginPagination&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tiny-swiper&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;Swiper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt; &lt;span class="nx"&gt;SwiperPluginLazyload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SwiperPluginPagination&lt;/span&gt; &lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;swiper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Swiper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;swiperContainer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;HTMLElement&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;TinySwiperParameters&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;new Swiper()&lt;/code&gt; - initialize swiper with options.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Swiper.use()&lt;/code&gt; - Register plugin.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;swiperContainer&lt;/code&gt; - HTMLElement or string (with CSS Selector) of swiper container HTML element. Required.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;parameters&lt;/code&gt; - object with Swiper parameters. Optional.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You also can load full-featured Tiny-Swiper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Swiper&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tiny-swiper/lib/index.full.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://unpkg.com/tiny-swiper@latest/lib/index.full.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Demos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Default Setup
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/tiny-swiper2-basic-demo?embed=1&amp;amp;view=preview&amp;amp;" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Loop mode
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/tiny-swiper2-demo-loop-mode?embed=1&amp;amp;view=preview&amp;amp;" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Pagination
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/tiny-swiper2-demo-plugin-pagination?embed=1&amp;amp;view=preview&amp;amp;" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Lazyload
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/tiny-swiper2-demo-plugin-plugin-lazyload?embed=1&amp;amp;view=preview&amp;amp;" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;BTW, I'm Planing to create Vue/React/Svelte version of Tiny-Swiper. &lt;br&gt;
You can find me on &lt;a href="https://github.com/joe223/tiny-swiper"&gt;Github&lt;/a&gt; Or &lt;a href="https://joe223.com/"&gt;Homepage&lt;/a&gt; if there are some ideas and suggestions :)&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>github</category>
      <category>webdev</category>
      <category>html</category>
    </item>
  </channel>
</rss>
