<?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: zhaochangbo888</title>
    <description>The latest articles on DEV Community by zhaochangbo888 (@zhaochangbo888).</description>
    <link>https://dev.to/zhaochangbo888</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4046410%2Ffd7cc2c5-006c-4135-af36-7de6ff2e7d25.jpg</url>
      <title>DEV Community: zhaochangbo888</title>
      <link>https://dev.to/zhaochangbo888</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zhaochangbo888"/>
    <language>en</language>
    <item>
      <title>I Built a Chair Recommendation Tool Using Real Reddit Feedback — Here's What I Learned</title>
      <dc:creator>zhaochangbo888</dc:creator>
      <pubDate>Sat, 25 Jul 2026 13:45:13 +0000</pubDate>
      <link>https://dev.to/zhaochangbo888/i-built-a-chair-recommendation-tool-using-real-reddit-feedback-heres-what-i-learned-19k3</link>
      <guid>https://dev.to/zhaochangbo888/i-built-a-chair-recommendation-tool-using-real-reddit-feedback-heres-what-i-learned-19k3</guid>
      <description>&lt;p&gt;A few months ago, I was stuck in a frustrating loop. My back hurt after long workdays, and I kept buying and returning office chairs that felt fine in the showroom but became unbearable after a week. The problem wasn't the chairs themselves — it was that every "best chair" review out there was written for some generic average person, not for me.&lt;/p&gt;

&lt;p&gt;I'm 6'0". My girlfriend is 5'2". We sit completely differently. But all the top‑10 lists and Wirecutter reviews treated us like the same person. So I went down a rabbit hole: I started reading thousands of Reddit comments from real people — short, tall, heavy, light, with back pain, tailbone pain, people who sit cross‑legged, people who recline all day. And it hit me that the best recommendations were already out there. They were just buried in threads.&lt;/p&gt;

&lt;p&gt;So I built a tool to organize that chaos. Here's how it works and what I learned along the way.&lt;/p&gt;




&lt;h2&gt;
  
  
  The data: no scraping, just a lot of reading
&lt;/h2&gt;

&lt;p&gt;I didn't write a scraper or use any API. I just spent weeks reading &lt;code&gt;r/OfficeChairs&lt;/code&gt; and &lt;code&gt;r/Ergonomics&lt;/code&gt;, collecting real quotes from real users. Every time someone said something like &lt;em&gt;"I'm 5'2 and this chair hurts my thighs after an hour"&lt;/em&gt;, I added it to a spreadsheet.&lt;/p&gt;

&lt;p&gt;Over time, patterns emerged. For example, shorter users almost universally complained about chairs with non‑adjustable seat depth. The Herman Miller Aeron — one of the most recommended chairs on the internet — got a ton of complaints from people under 5'5" because the seat frame digs into their legs.&lt;/p&gt;

&lt;p&gt;Taller and heavier users, on the other hand, loved the Aeron. The consensus was shockingly consistent once you filtered by body type.&lt;/p&gt;

&lt;p&gt;This spreadsheet eventually became my chair database — about 10 chairs, each with tags for height range, weight range, pain points, sitting styles, and "community sentiment" based on how real people actually felt about them.&lt;/p&gt;




&lt;h2&gt;
  
  
  The algorithm: hard filters and community sentiment
&lt;/h2&gt;

&lt;p&gt;Instead of a generic "best chair" ranking, I built a recommendation engine with two layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hard filters&lt;/strong&gt; — these automatically exclude chairs that the community has proven won't work for someone like you. If you're under 5'5" and a chair doesn't have adjustable seat depth, it's out. If you need a headrest and a chair doesn't support one, it's out. No debate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Community sentiment weighting&lt;/strong&gt; — for chairs that pass the filters, I score them based on how well they match your specific profile. Height and weight matches get the most weight. Pain point relief gets a big boost. And I add a "community sentiment" score based on what real users with similar body types have said about each chair.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole thing runs as a static HTML page. No backend, no database — just a JSON‑like object and some vanilla JavaScript.&lt;/p&gt;




&lt;h2&gt;
  
  
  The tech stack: boring but intentional
&lt;/h2&gt;

&lt;p&gt;I wanted this tool to be fast, free to run, and easy to maintain. So I went with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plain HTML, CSS, and JavaScript — no frameworks, no build step&lt;/li&gt;
&lt;li&gt;Cloudflare Pages for hosting — free, global CDN, automatic HTTPS&lt;/li&gt;
&lt;li&gt;GitHub for version control — private repo, free&lt;/li&gt;
&lt;li&gt;Cloudflare Workers + KV for storing user feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole site costs me $0/month to run. The only expense was the domain name. For a personal project that might get a few thousand visitors a month, this setup is hard to beat.&lt;/p&gt;




&lt;h2&gt;
  
  
  Things I got wrong (so far)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;I underestimated mobile dropdown menus.&lt;/strong&gt; On iOS Safari, the native &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; shows a spinner with "Done" and "Cancel" buttons in whatever language your phone is set to. If your phone is in Chinese, the tool showed Chinese prompts. I had to build a custom dropdown component in JavaScript to keep everything in English.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;I initially wrote the "About" story like a marketing page.&lt;/strong&gt; It felt polished and professional — and totally wrong. A friend pointed out it sounded like a startup pitch, not a person sharing a real struggle. I rewrote it in a more casual, first‑person voice, and the feedback immediately improved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;My first attempt at SEO was bad.&lt;/strong&gt; I had no structured data, no sitemap, no meaningful meta descriptions. Adding JSON‑LD, a sitemap.xml, and fixing the page titles took maybe 30 minutes and made a huge difference in how Google sees the site.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What I'm doing next
&lt;/h2&gt;

&lt;p&gt;The chair tool is live and working. I'm now collecting user feedback (via a simple form that stores responses in Cloudflare KV) to improve the recommendations and add more chairs.&lt;/p&gt;

&lt;p&gt;I'm also publishing &lt;strong&gt;research notes&lt;/strong&gt; on the site — basically my raw data‑digging logs, written in a casual notebook style. The first few are about tailbone pain, the Aeron vs Leap debate, and what short users actually recommend. These aren't polished articles; they're messy, honest, and built from real community feedback.&lt;/p&gt;

&lt;p&gt;Eventually, I want to apply this same model to other "hard to choose" products — standing desks, pet food, maybe mattresses. The core idea is the same: real people already know what works. The job is just to organize what they've said.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it (and tell me what sucks)
&lt;/h2&gt;

&lt;p&gt;The tool is live at &lt;a href="https://truechoose.com" rel="noopener noreferrer"&gt;truechoose.com&lt;/a&gt;. It's completely free, no ads, no sign‑up.&lt;/p&gt;

&lt;p&gt;If you try it and something feels off — a bad recommendation, a confusing question, a weird UI quirk — I'd genuinely love to hear about it. This is a one‑person project, and every piece of feedback helps me make it better.&lt;/p&gt;

&lt;p&gt;You can also check out my research notes at &lt;a href="https://truechoose.com/notes" rel="noopener noreferrer"&gt;truechoose.com/notes&lt;/a&gt; if you're curious about the raw data behind the recommendations.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you built a recommendation tool or worked with messy community data? I'd love to hear your approach — drop a comment below.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built an API That Writes Code Documentation in 13 Languages — Here's How</title>
      <dc:creator>zhaochangbo888</dc:creator>
      <pubDate>Sat, 25 Jul 2026 06:05:55 +0000</pubDate>
      <link>https://dev.to/zhaochangbo888/i-built-an-api-that-writes-code-documentation-in-13-languages-heres-how-46e2</link>
      <guid>https://dev.to/zhaochangbo888/i-built-an-api-that-writes-code-documentation-in-13-languages-heres-how-46e2</guid>
      <description>&lt;p&gt;I’ve always disliked writing documentation. Not because it’s hard, but because it’s repetitive. You write a function, you describe what it does, you give an example, and then you realize you need the same thing in another language because half your users don’t speak English.&lt;/p&gt;

&lt;p&gt;So I decided to automate it.&lt;/p&gt;

&lt;p&gt;The result is an API that takes source code as input and returns a clean Markdown README, API reference, or inline comments — in any of 13 languages. No templates, no manual translation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://ai-code-documentation-generator.p.rapidapi.com/demo"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-rapidapi-host: ai-code-documentation-generator.p.rapidapi.com"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-rapidapi-key: YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"code":"def add(a,b): return a+b","code_language":"python","doc_language":"en"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"documentation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"# Add Utility&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;## Overview&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;A simple function to add two numbers..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"quality_score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target_language"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"en"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It auto-detects the programming language (Python, JavaScript, Go, Rust…) and spits out a polished doc. The English output is solid, but seeing it generate accurate Japanese or German READMEs from the same code still feels like magic.&lt;/p&gt;

&lt;p&gt;The Tech Behind It&lt;br&gt;
Backend: Python + FastAPI, hosted on Northflank.&lt;/p&gt;

&lt;p&gt;AI Model: DeepSeek (via API). The model actually understands code structure, so generated docs aren’t just generic wrappers.&lt;/p&gt;

&lt;p&gt;Language Detection: Pygments for syntax highlighting + language guessing.&lt;/p&gt;

&lt;p&gt;Caching: 24-hour cache to avoid redundant calls and save cost.&lt;/p&gt;

&lt;p&gt;Security: Sensitive strings (API keys, passwords) are automatically redacted from the output.&lt;/p&gt;

&lt;p&gt;The whole thing is open source:&lt;br&gt;
&lt;a href="https://github.com/zhaochangbo888/docgen-api" rel="noopener noreferrer"&gt;https://github.com/zhaochangbo888/docgen-api&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why I Didn’t Just Use ChatGPT&lt;br&gt;
You could absolutely paste your code into ChatGPT and ask for docs. But integrating an LLM directly into a CI/CD pipeline, or a VS Code extension, or a platform that needs programmatic access gets messy with rate limits, authentication, and output consistency.&lt;/p&gt;

&lt;p&gt;This API gives you a predictable JSON schema, reliable caching, and optional overrides for detail level and format. It’s designed to be called by other tools, not just by humans.&lt;/p&gt;

&lt;p&gt;What It Cost Me to Run&lt;br&gt;
DeepSeek’s pricing is absurdly cheap. A 2,000-word README costs less than $0.001. Even with the free tier (50 req/month), I’m not worried about losing money while people test it.&lt;/p&gt;

&lt;p&gt;Try It Yourself&lt;br&gt;
There’s a demo endpoint with no subscription required (5 requests/day). Just grab a free RapidAPI key and start playing:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://rapidapi.com/zhaochangbo0/api/ai-code-documentation-generator" rel="noopener noreferrer"&gt;https://rapidapi.com/zhaochangbo0/api/ai-code-documentation-generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Plans:&lt;/p&gt;

&lt;p&gt;Free: 50 requests/month&lt;/p&gt;

&lt;p&gt;Basic: $9.99/month for 5,000 requests&lt;/p&gt;

&lt;p&gt;Pro: $49/month for 50,000 requests&lt;/p&gt;

&lt;p&gt;All plans include all 13 languages and all doc formats (readme, api_doc, inline comments).&lt;/p&gt;

&lt;p&gt;What I’d Love Feedback On&lt;br&gt;
I’m actively improving the output quality. If you try it on your own code, let me know:&lt;/p&gt;

&lt;p&gt;Does the generated doc actually save you time?&lt;/p&gt;

&lt;p&gt;What languages or doc formats are missing?&lt;/p&gt;

&lt;p&gt;Does the quality hold up for larger, real-world codebases?&lt;/p&gt;

&lt;p&gt;Drop a comment or open an issue on GitHub. I’ll be hanging out in the replies.&lt;/p&gt;

</description>
      <category>api</category>
      <category>documentation</category>
      <category>python</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
