<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Projects on Rustam Garifulin</title>
    <link>https://n69.in/projects/</link>
    <description>Recent content in Projects on Rustam Garifulin</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <copyright>Copyright © 2025, Rustam Garifulin.</copyright>
    <atom:link href="https://n69.in/projects/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Makersew</title>
      <link>https://n69.in/projects/makersew/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://n69.in/projects/makersew/</guid>
      <description>&lt;h1 id=&#34;makersew&#34;&gt;Makersew&lt;/h1&gt;&#xA;&lt;p&gt;A B2B catalog of sewing manufacturers in Kazakhstan, Kyrgyzstan, and&#xA;Uzbekistan. Clothing brands, marketplace sellers, and corporate clients use&#xA;it to find workshops for contract manufacturing; workshops get targeted&#xA;leads without having to run social media accounts.&lt;/p&gt;&#xA;&lt;p&gt;A solo side project — product, code, data collection, and outreach. Hundreds&#xA;of workshops collected and verified by hand, published card by card.&lt;/p&gt;&#xA;&lt;p&gt;Stack: Next.js (App Router) on Vercel, Directus headless CMS over PostgreSQL&#xA;on Railway, Cloudflare R2 for photos.&lt;/p&gt;</description>
    </item>
    <item>
      <title>oh-just-another/diagram</title>
      <link>https://n69.in/projects/oh-just-another-diagram/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://n69.in/projects/oh-just-another-diagram/</guid>
      <description>&lt;h1 id=&#34;oh-just-anotherdiagram&#34;&gt;oh-just-another/diagram&lt;/h1&gt;&#xA;&lt;p&gt;An open-source diagram editor library. The name is honest: yet another&#xA;diagramming tool nobody asked for — Excalidraw exists, tldraw exists, drawio&#xA;will outlive us all. I built mine anyway, to understand how these things work&#xA;from the inside.&lt;/p&gt;&#xA;&lt;p&gt;The public API is one React component:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-tsx&#34; data-lang=&#34;tsx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;import&lt;/span&gt; {Editor} &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;@oh-just-another/editor&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;@oh-just-another/react-ui/styles.css&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;default&lt;/span&gt; &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;function&lt;/span&gt; Diagram() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;return&lt;/span&gt; &amp;lt;&lt;span style=&#34;color:#062873;font-weight:bold&#34;&gt;Editor&lt;/span&gt; &lt;span style=&#34;color:#4070a0&#34;&gt;style&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;{{position&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;fixed&amp;#34;&lt;/span&gt;, inset: &lt;span style=&#34;color:#902000&#34;&gt;0&lt;/span&gt;}}/&amp;gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;6&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Five lines on the surface. Underneath: 26 published npm packages in a&#xA;monorepo, organized into nine layers with one-way dependencies (enforced by&#xA;dependency-cruiser, not just declared in the README), 63K lines of code plus&#xA;270 test files.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
