<?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: Tanishq</title>
    <description>The latest articles on DEV Community by Tanishq (@codedbytan).</description>
    <link>https://dev.to/codedbytan</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%2F3768283%2F31668ce5-3403-4d35-afd2-c1a54279ac91.png</url>
      <title>DEV Community: Tanishq</title>
      <link>https://dev.to/codedbytan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codedbytan"/>
    <language>en</language>
    <item>
      <title>I read X's open-sourced ranking algorithm. Here's what actually decides who sees your posts.</title>
      <dc:creator>Tanishq</dc:creator>
      <pubDate>Tue, 21 Jul 2026 17:46:30 +0000</pubDate>
      <link>https://dev.to/codedbytan/i-read-xs-open-sourced-ranking-algorithm-heres-what-actually-decides-who-sees-your-posts-2411</link>
      <guid>https://dev.to/codedbytan/i-read-xs-open-sourced-ranking-algorithm-heres-what-actually-decides-who-sees-your-posts-2411</guid>
      <description>&lt;p&gt;I ship products solo, which means I'm also the marketing department, which I'm bad at. So instead of guessing, I did the thing a developer does when the docs are bad: I read the source. X open-sourced its ranking algorithm, and the engagement weights are sitting right there, and they explain almost everything about why a new account gets zero views.&lt;/p&gt;

&lt;p&gt;Here's the part that matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The weights
&lt;/h2&gt;

&lt;p&gt;X scores posts for your timeline using a set of engagement weights. The relevant ones:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;like                     = 0.5
retweet                  = 1.0
reply                    = 13.5
reply + author replies   = 75.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(these are the widely-referenced values from the open-sourced ranking. treat them as the shape of the system, not gospel to the decimal.)&lt;/p&gt;

&lt;p&gt;A reply is worth 27x a like. A reply the original poster answers is worth 150x. That is not a rounding artifact. It's the entire design philosophy compressed into three numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the numbers look like that
&lt;/h2&gt;

&lt;p&gt;The weights are a proxy for one metric: time on app. X makes money when you stay. Model each action as a session-length signal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a like is a ~500ms interaction, then you keep scrolling. low retention value.&lt;/li&gt;
&lt;li&gt;a reply is you stopping to type. higher.&lt;/li&gt;
&lt;li&gt;a reply the author answers is a live two-person conversation that can run ten minutes and pulls both users back repeatedly. this is the jackpot, and the 75 weight says so out loud.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you read the ranking as "maximize time-on-app," every piece of folk wisdom about the algorithm either falls out of it cleanly or turns out to be wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for a small account
&lt;/h2&gt;

&lt;p&gt;The standard advice is "post consistently." For a new account that's backwards. If you have 30 followers, your posts enter almost no timelines, so posting is writing to /dev/null. But every large account in your niche already has the distribution, and their reply section is an open endpoint.&lt;/p&gt;

&lt;p&gt;So the highest-EV action for a small account isn't posting, it's replying under bigger accounts, because a reply borrows their distribution and is weighted 27x a like while doing it. That's the boring mechanical reason the "reply guy" strategy works. It isn't a growth hack, it's just reading the objective function and acting on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 2026 changes: recency and originality
&lt;/h2&gt;

&lt;p&gt;Two more things shifted. X started scoring content quality with Grok, and it cut creator payouts for recycled and clickbait content. Payout policy telegraphs ranking policy: the behaviors a platform stops paying for are the ones it's learning to bury. Net effect, the system now favors original and timely over frequent and templated. Being first to react to news in your niche beats posting five reformatted threads a day.&lt;/p&gt;

&lt;h2&gt;
  
  
  The engineering problem I actually cared about
&lt;/h2&gt;

&lt;p&gt;Here's where it got interesting to build. If the winning move is "reply and post in your own voice, fast, all day," the bottleneck is that doing it by hand is a part-time job. The obvious fix (pipe it through an LLM) produces exactly the generic slop the new quality scoring demotes. So the real problem isn't generation. It's a filter.&lt;/p&gt;

&lt;p&gt;I ended up building a scoring layer that runs on every draft before I see it. It penalizes the tells: em dashes, hashtags, the "delve / leverage / game-changer" vocabulary, reflexive three-item lists, generic openers, passive voice, false-agency phrasing ("the data tells us"). A draft that scores below a threshold gets rewritten or dropped, never shown. That gate turned out to be the actual product. Anyone can call an LLM. The work is making the output not read like one, which is the same problem X's own quality scoring is attacking from the other side.&lt;/p&gt;

&lt;p&gt;That tool is [&lt;a href="https://voicepo.st" rel="noopener noreferrer"&gt;VoicePost&lt;/a&gt;] if you want to see it: an AI X (Twitter) growth tool that watches your niche (Hacker News, GitHub, Product Hunt, Google News, Reddit, etc (basically the whole internet)) and drafts timely posts and replies in your trained voice with that scoring gate on top. It also runs a separate Reddit engine for the promote-without-getting-banned problem, which is a genuinely different beast, Reddit bans on account-age-weighted promotion rather than karma, so that side is a warmup schedule and a 9:1 ratio, not a generator. But you don't need the tool to use any of the above. The weights are public and the strategy is free.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;X's ranking weights a reply at 27x a like, and a reply the author answers at 150x, because it optimizes for time-on-app.&lt;/li&gt;
&lt;li&gt;small accounts grow by replying under bigger ones, not by posting into the void.&lt;/li&gt;
&lt;li&gt;2026 added Grok-based quality scoring and killed payouts for recycled content, so original and timely beats frequent and templated.&lt;/li&gt;
&lt;li&gt;if you automate any of this, the hard part is the anti-slop filter, not the generation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Go read the weights yourself. It's all open source, which is more than you can say for most things that quietly decide your reach.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>marketing</category>
      <category>startup</category>
    </item>
    <item>
      <title>How I Shipped 3 Production SaaS Backends in 30 Days Using Claude Code (Without Context Loss Destroying Everything)</title>
      <dc:creator>Tanishq</dc:creator>
      <pubDate>Sat, 14 Feb 2026 19:08:30 +0000</pubDate>
      <link>https://dev.to/codedbytan/how-i-shipped-3-production-saas-backends-in-30-days-using-claude-code-without-context-loss-2fnm</link>
      <guid>https://dev.to/codedbytan/how-i-shipped-3-production-saas-backends-in-30-days-using-claude-code-without-context-loss-2fnm</guid>
      <description>&lt;p&gt;I've been using Claude Code for the last 4 months to build SaaS backends. Love it. Until I don't.&lt;/p&gt;

&lt;p&gt;You know the pattern. Day 1: Claude writes beautiful auth logic. You're impressed. Day 3: Ask it to add Stripe webhooks. Day 5: Auth is broken. No idea what changed. Day 7: Context window full. Start new session. Day 8: "Wait, what database schema are we using again?"&lt;/p&gt;

&lt;p&gt;Every. Single. Time.&lt;/p&gt;

&lt;p&gt;I'd spend more time re-explaining my project than actually building it. The "brilliant colleague with amnesia" metaphor is painfully accurate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Context Loss Problem Nobody's Solving
&lt;/h2&gt;

&lt;p&gt;Here's what I kept hitting:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mid-session drift.&lt;/strong&gt; Claude would start with async/await, then randomly switch to .then() chains 200 lines later. Why? Context degradation. The model "forgets" earlier patterns as the conversation grows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schema amnesia.&lt;/strong&gt; I'd define a users table with specific columns in message 5. By message 40, Claude's suggesting queries for columns that don't exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security regression.&lt;/strong&gt; RLS policies carefully set up in Phase 1? Completely ignored when adding features in Phase 3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Groundhog Day effect.&lt;/strong&gt; Close laptop Friday. Open Monday. Spend 30 minutes re-explaining the entire project before Claude can write a single line.&lt;/p&gt;

&lt;p&gt;I tried everything the internet suggested:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✗ Longer prompts with full context (hit token limits, quality degraded anyway)&lt;/li&gt;
&lt;li&gt;✗ Custom instructions (too vague, didn't persist across sessions)
&lt;/li&gt;
&lt;li&gt;✗ Separate chats for each feature (lost the big picture, broke dependencies)&lt;/li&gt;
&lt;li&gt;✗ Manual "memory dumps" (exhausting, error-prone)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing worked. The fundamental issue is that &lt;strong&gt;LLMs have working memory, not long-term memory&lt;/strong&gt;. They're brilliant in the moment, terrible at maintaining state.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Fixed It: Multi-Agent Orchestration
&lt;/h2&gt;

&lt;p&gt;I realized the problem isn't the AI. It's the workflow.&lt;/p&gt;

&lt;p&gt;Human developers don't keep entire codebases in their heads either. They use documentation. Design docs. Database schemas. API specs. &lt;strong&gt;External references that persist.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I built a system that orchestrates Claude through specialized agents, each with fresh context windows and specific jobs.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Four Files That Maintain State
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. PROJECT.md&lt;/strong&gt; - The vision document&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Problem being solved (plain English)&lt;/li&gt;
&lt;li&gt;Target users and workflows
&lt;/li&gt;
&lt;li&gt;Core value proposition&lt;/li&gt;
&lt;li&gt;Success criteria&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. REQUIREMENTS.md&lt;/strong&gt; - Traceable feature definitions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every requirement has a unique ID (AUTH-01, PAY-02, etc.)&lt;/li&gt;
&lt;li&gt;v1 scope (must have), v2 scope (future), out-of-scope (won't do)&lt;/li&gt;
&lt;li&gt;Acceptance criteria for each&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. ROADMAP.md&lt;/strong&gt; - Phased execution plan&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phase 0: Infrastructure
&lt;/li&gt;
&lt;li&gt;Phase 1: Core feature&lt;/li&gt;
&lt;li&gt;Phase 2: Supporting features&lt;/li&gt;
&lt;li&gt;Phase 3: Polish&lt;/li&gt;
&lt;li&gt;Each requirement mapped to specific phases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. STATE.md&lt;/strong&gt; - The living memory&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Completed phases (locked from modification)&lt;/li&gt;
&lt;li&gt;Current phase (only modifiable code)&lt;/li&gt;
&lt;li&gt;Database schema (exact DDL)&lt;/li&gt;
&lt;li&gt;API routes built (paths, methods, business logic)&lt;/li&gt;
&lt;li&gt;Architectural decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These files are &lt;strong&gt;sized to avoid context degradation&lt;/strong&gt; (under 10k tokens each) and serve as a single source of truth for both humans and AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Multi-Agent System
&lt;/h3&gt;

&lt;p&gt;Instead of one long Claude conversation, the system spawns &lt;strong&gt;specialized parallel agents&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Research agents&lt;/strong&gt; (4 running in parallel before coding):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stack researcher → best technologies for your domain&lt;/li&gt;
&lt;li&gt;Features researcher → table stakes vs differentiators
&lt;/li&gt;
&lt;li&gt;Architecture researcher → system design patterns&lt;/li&gt;
&lt;li&gt;Pitfalls researcher → common mistakes to avoid&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Execution agents&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Planner → creates verified task plans&lt;/li&gt;
&lt;li&gt;Executor → runs plans with atomic commits&lt;/li&gt;
&lt;li&gt;Verifier → tests and auto-debugs&lt;/li&gt;
&lt;li&gt;Mapper → analyzes existing codebase&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each agent gets fresh context. No degradation. No drift.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Workflow Cycle
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. INITIALIZE
   Describe vision → AI creates PROJECT.md, REQUIREMENTS.md, ROADMAP.md

2. DISCUSS (each phase)
   Shape implementation preferences before committing

3. PLAN  
   Research domain patterns → create verified execution plan

4. EXECUTE
   Run plans in parallel waves with fresh contexts → atomic git commits

5. VERIFY
   User acceptance testing with automatic debugging

Repeat 2-5 for each phase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Critical rule:&lt;/strong&gt; Completed phases are locked. The AI can only modify code in the current phase. This prevents the "adding payments breaks auth" problem entirely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Boilerplate-Aware Intelligence
&lt;/h3&gt;

&lt;p&gt;The AI knows what's already built in the boilerplate (auth, Stripe, Razorpay, Supabase, multi-tenancy, emails, admin panel). It only plans what's custom to your domain.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Zero time wiring auth to database&lt;/li&gt;
&lt;li&gt;Zero time setting up payment webhooks&lt;/li&gt;
&lt;li&gt;Zero time building admin panels&lt;/li&gt;
&lt;li&gt;Pure focus on your unique business logic&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Results (Why I'm Sharing This)
&lt;/h2&gt;

&lt;p&gt;Last 30 days, I built 3 production SaaS backends using this system:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analytics Dashboard&lt;/strong&gt; (13 hours total, across 4 sessions)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom analytics schema (metrics, data_points, aggregations)&lt;/li&gt;
&lt;li&gt;Ingestion API with validation&lt;/li&gt;
&lt;li&gt;Time-series calculations (daily, weekly, monthly)&lt;/li&gt;
&lt;li&gt;CSV export with date filtering&lt;/li&gt;
&lt;li&gt;Now has 8 paying users making $96/month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Feedback Widget&lt;/strong&gt; (11 hours, 3 sessions)  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feedback schema with metadata&lt;/li&gt;
&lt;li&gt;Widget embedding API (iframe + script tag)&lt;/li&gt;
&lt;li&gt;Admin CRUD with filtering&lt;/li&gt;
&lt;li&gt;Email notifications on submission&lt;/li&gt;
&lt;li&gt;Webhook system for integrations&lt;/li&gt;
&lt;li&gt;5 signups in first week&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Content Calendar&lt;/strong&gt; (9 hours, 2 sessions)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content schema with scheduling&lt;/li&gt;
&lt;li&gt;CRUD API with role-based access&lt;/li&gt;
&lt;li&gt;Publishing logic with timezone handling&lt;/li&gt;
&lt;li&gt;Calendar view backend&lt;/li&gt;
&lt;li&gt;En route to production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All production-ready. All built with AI orchestration. All using persistent state across weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Commands That Run It
&lt;/h2&gt;

&lt;p&gt;After building this system for myself, I packaged it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/propelkit:new-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This master command:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Asks deep questions about your project&lt;/li&gt;
&lt;li&gt;Spawns research agents for your domain&lt;/li&gt;
&lt;li&gt;Creates PROJECT.md, REQUIREMENTS.md, ROADMAP.md&lt;/li&gt;
&lt;li&gt;Generates phased execution plan&lt;/li&gt;
&lt;li&gt;Hands you off to phase-by-phase building&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then for each phase:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/propelkit:discuss-phase 1    &lt;span class="c"&gt;# Shape your preferences&lt;/span&gt;
/propelkit:plan-phase 1       &lt;span class="c"&gt;# Research + create execution plan  &lt;/span&gt;
/propelkit:execute-phase 1    &lt;span class="c"&gt;# Build with parallel agents&lt;/span&gt;
/propelkit:verify-work        &lt;span class="c"&gt;# Test with auto-debugging&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system maintains STATE.md automatically. Close laptop. Come back days later. Resume exactly where you left off.&lt;/p&gt;

&lt;h2&gt;
  
  
  PropelKit - The Packaged System
&lt;/h2&gt;

&lt;p&gt;After the third project, I productized it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you get:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Production Next.js boilerplate (saves 100+ hours):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auth (email, OAuth, sessions)&lt;/li&gt;
&lt;li&gt;Stripe + Razorpay payments
&lt;/li&gt;
&lt;li&gt;Supabase (PostgreSQL with RLS)&lt;/li&gt;
&lt;li&gt;Multi-tenancy (organizations, teams, roles)&lt;/li&gt;
&lt;li&gt;Credits system (usage-based billing)&lt;/li&gt;
&lt;li&gt;Email templates (8 pre-built)&lt;/li&gt;
&lt;li&gt;Admin panel (user management, analytics)&lt;/li&gt;
&lt;li&gt;26 AI PM commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Next.js 16, TypeScript, Supabase, Stripe, Razorpay&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-time purchase.&lt;/strong&gt; You own the code. Build unlimited products.&lt;/p&gt;

&lt;p&gt;The AI PM uses the exact multi-agent orchestration system described above. Persistent state. Parallel research. Boilerplate-aware. Atomic commits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo:&lt;/strong&gt; &lt;a href="https://propelkit.dev" rel="noopener noreferrer"&gt;propelkit.dev&lt;/a&gt; (watch the AI questioning, research, roadmap generation, and execution)&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Approach Works
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Context engineering&lt;/strong&gt; - Separate files under degradation thresholds, not one massive chat&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-agent orchestration&lt;/strong&gt; - Fresh contexts per agent, no drift accumulation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Boilerplate awareness&lt;/strong&gt; - AI knows what exists, only builds what's custom&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Atomic commits&lt;/strong&gt; - One feature per commit, precision rollback&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase locking&lt;/strong&gt; - Completed code stays completed, no random rewrites&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Domain research&lt;/strong&gt; - AI understands your industry before writing code&lt;/p&gt;

&lt;p&gt;This isn't just for PropelKit. The principles work anywhere - you need persistent state files and fresh context windows per task.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What's your experience with AI code context loss? Have you found other systems that work?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>typescript</category>
      <category>productivity</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
