<?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: Nalivator3000</title>
    <description>The latest articles on DEV Community by Nalivator3000 (@nalivator3000).</description>
    <link>https://dev.to/nalivator3000</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%2F4156878%2F5875c814-0ce2-43e4-acf9-0cdf483a27e1.jpg</url>
      <title>DEV Community: Nalivator3000</title>
      <link>https://dev.to/nalivator3000</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nalivator3000"/>
    <language>en</language>
    <item>
      <title>How many German words do you actually need for B1? The numbers behind my vocabulary app</title>
      <dc:creator>Nalivator3000</dc:creator>
      <pubDate>Sun, 04 Oct 2026 13:13:40 +0000</pubDate>
      <link>https://dev.to/nalivator3000/how-many-german-words-do-you-actually-need-for-b1-the-numbers-behind-my-vocabulary-app-3np3</link>
      <guid>https://dev.to/nalivator3000/how-many-german-words-do-you-actually-need-for-b1-the-numbers-behind-my-vocabulary-app-3np3</guid>
      <description>&lt;p&gt;I am a solo developer living in Germany, and in the evenings I build LexyBooster, a German vocabulary app with spaced repetition (&lt;a href="https://lexybooster.com" rel="noopener noreferrer"&gt;https://lexybooster.com&lt;/a&gt;). Before writing any code for the word lists I had to answer one question for myself, because every expat I know asks it sooner or later: how many German words do you need for B1, and which ones first?&lt;/p&gt;

&lt;p&gt;Here is what I found, and how I turned it into data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer: about 2,400 to 2,500 words, but not all at once
&lt;/h2&gt;

&lt;p&gt;The Goethe-Institut B1 word list has roughly 2,400 entries, and most course books land around 2,500 words for B1. That number scares people, but it hides two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a large part of it is small, high-frequency words (articles, pronouns, prepositions, modal verbs) that you pick up in the first weeks anyway;&lt;/li&gt;
&lt;li&gt;the exam does not test the list word by word. It tests whether you can handle everyday situations: forms, phone calls, appointments, short letters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the useful question is not "how do I memorize 2,400 words" but "which few hundred words unlock the situations I face every week".&lt;/p&gt;

&lt;p&gt;I wrote the long version with the breakdown by level here: &lt;a href="https://lexybooster.com/how-many-german-words-for-b1.html" rel="noopener noreferrer"&gt;https://lexybooster.com/how-many-german-words-for-b1.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the situations, not the alphabet
&lt;/h2&gt;

&lt;p&gt;When I looked at what newcomers in Germany actually struggle with, the same scenes came up again and again. Each one needs a surprisingly small vocabulary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Registering your address (Anmeldung).&lt;/strong&gt; About 30 words get you through the Bürgeramt: Termin, Meldebescheinigung, Wohnungsgeberbestätigung, Einzugsdatum, Reisepass, Unterschrift, Hauptwohnsitz. If you know these, the form stops being a wall of text. My list for this scene: &lt;a href="https://lexybooster.com/german-words-for-anmeldung.html" rel="noopener noreferrer"&gt;https://lexybooster.com/german-words-for-anmeldung.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Doctor visits and health insurance.&lt;/strong&gt; Krankenkasse, Versichertenkarte, Hausarzt, Überweisung, Rezept, Krankschreibung. Most first appointments fail not on grammar but on these six words.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Work and the job center.&lt;/strong&gt; Arbeitsvertrag, Probezeit, Kündigung, Gehaltsabrechnung, Steuer-ID. You will see them in your first month whether you like it or not.&lt;/p&gt;

&lt;p&gt;I grouped the first 100 words an expat really needs into one page: &lt;a href="https://lexybooster.com/essential-german-words-for-expats.html" rel="noopener noreferrer"&gt;https://lexybooster.com/essential-german-words-for-expats.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How the app turns this into a schedule
&lt;/h2&gt;

&lt;p&gt;From the developer side, the interesting part is that the word lists are just data, and the schedule is just math:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Words live in thematic collections (everyday situations, work, health) with a CEFR level.&lt;/li&gt;
&lt;li&gt;New words come in small batches from the collection you choose, not in alphabetical order.&lt;/li&gt;
&lt;li&gt;Reviews follow a spaced repetition schedule: a word you got right comes back after longer and longer gaps; a word you missed comes back the same day.&lt;/li&gt;
&lt;li&gt;Every word has audio, because half of the problem at the Bürgeramt is recognizing a word you can read but cannot hear.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With 10 to 15 minutes a day and about 10 new words a day, the core scenes take a few weeks. The full B1 list takes months, and that is fine: by then you are already using German at the office and at the doctor, which is the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would tell a friend who just moved here
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Do not start with the full B1 list. Start with the scene you will face next week.&lt;/li&gt;
&lt;li&gt;Learn words with their article and plural (der Termin, die Termine). It costs nothing extra and saves you later.&lt;/li&gt;
&lt;li&gt;Listen to every word at least once. Reading-only vocabulary disappears in a real conversation.&lt;/li&gt;
&lt;li&gt;Review a little every day instead of a lot on Sunday. Spaced repetition only works if you show up.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are learning German in Germany, I would love to hear which situation was hardest for you in the first months. And if you build learning tools yourself: what do you use for scheduling reviews?&lt;/p&gt;

</description>
      <category>learning</category>
      <category>german</category>
      <category>showdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I run a one-person "dark factory" of AI agents for $0.015 per task. Here is what broke.</title>
      <dc:creator>Nalivator3000</dc:creator>
      <pubDate>Fri, 02 Oct 2026 09:21:24 +0000</pubDate>
      <link>https://dev.to/nalivator3000/i-run-a-one-person-dark-factory-of-ai-agents-for-0015-per-task-here-is-what-broke-2kdi</link>
      <guid>https://dev.to/nalivator3000/i-run-a-one-person-dark-factory-of-ai-agents-for-0015-per-task-here-is-what-broke-2kdi</guid>
      <description>&lt;p&gt;I am a solo developer in Germany. In the evenings I build LexyBooster, a German vocabulary app with spaced repetition (&lt;a href="https://lexybooster.com" rel="noopener noreferrer"&gt;https://lexybooster.com&lt;/a&gt;). A month ago I stopped writing most of the code myself and set up a small "dark factory": a pipeline of AI agents that picks up GitHub issues, writes the code, runs the tests, reviews the pull request and merges it when every gate is green.&lt;/p&gt;

&lt;p&gt;The setup is boring on purpose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one Hetzner VPS (4 vCPU, 8 GB RAM, about 12.60 USD a month);&lt;/li&gt;
&lt;li&gt;Archon runs the workflows, Paperclip keeps budgets and schedules, LiteLLM routes every call to the cheapest model that can do the job;&lt;/li&gt;
&lt;li&gt;free models first (Groq, Cerebras), Gemini Flash-Lite when they are not enough, and a Claude subscription for planning and review;&lt;/li&gt;
&lt;li&gt;every merge decision is made by a script, never by a model: approve from the strong reviewer, green checks, no deleted definitions, no forbidden paths.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What the numbers look like after a month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a typical task (one or two files plus a test) costs about 0.015 USD in API calls; the cheapest ones cost 0.007;&lt;/li&gt;
&lt;li&gt;the biggest saving was not a better model but smaller tasks: when an epic is cut into tasks of at most four code files, a single cheap call writes a working patch in 40 to 50 percent of tasks;&lt;/li&gt;
&lt;li&gt;the factory built six epics of a multiplayer Godot game mostly without me, plus SEO pages for the app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What broke, and how I fixed the tool instead of the task:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The prepaid model account ran dry and nobody noticed.&lt;/strong&gt; For two days every paid call failed, the pipeline silently fell back to the subscription model and kept merging. Fix: a monitor check that reads the gateway logs for "credits depleted" and pings me directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A PR waited two days for a human who never got the message.&lt;/strong&gt; The alert went into the inbox of an "agent that fixes alerts", and that agent is not allowed to merge config changes. Fix: alerts that need money or a merge decision skip the agent and go straight to me.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The improver agent kept improving the same module.&lt;/strong&gt; It saw its own commit from last night and proposed a follow-up, three nights in a row. Fix: a 14-day cooldown per module.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cheap agents looping on hard tasks.&lt;/strong&gt; When the one-call patch failed, a cheap agent kept iterating for up to 33 calls and still often needed the stronger model. Fix: after the one-call patch and two quick repairs, the subscription model takes over; the cheap agent runs only when the subscription window is closed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are building something similar, the one lesson I would keep: let models write, but let scripts decide.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Drafted with Claude; all numbers come from my own logs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>sideprojects</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
