<?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: mamoru kubokawa</title>
    <description>The latest articles on DEV Community by mamoru kubokawa (@tokidigital).</description>
    <link>https://dev.to/tokidigital</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%2F3921212%2Fac1a4f94-bac8-49bc-b397-cf32a83ddae6.png</url>
      <title>DEV Community: mamoru kubokawa</title>
      <link>https://dev.to/tokidigital</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tokidigital"/>
    <language>en</language>
    <item>
      <title>Why I'm building a tool for English-speaking sellers who source from Japan</title>
      <dc:creator>mamoru kubokawa</dc:creator>
      <pubDate>Thu, 21 May 2026 03:11:19 +0000</pubDate>
      <link>https://dev.to/tokidigital/why-im-building-a-tool-for-english-speaking-sellers-who-source-from-japan-56ho</link>
      <guid>https://dev.to/tokidigital/why-im-building-a-tool-for-english-speaking-sellers-who-source-from-japan-56ho</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Build-in-public, week 2. Last week was the technical guts (AI cache-miss enrichment). This week is the &lt;em&gt;why&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you sell on Amazon and you've ever thought "I should source from Japan," you already know the wall. You can &lt;em&gt;feel&lt;/em&gt; there's good product over there — the quality reputation is real — but the moment you try to act on it, you hit a fog.&lt;/p&gt;

&lt;p&gt;I run a Japanese e-commerce business from Osaka. I'm on the &lt;em&gt;inside&lt;/em&gt; of that fog. And after watching enough English-speaking sellers bounce off it, I started building &lt;a href="https://japanbrandfinder.lovable.app" rel="noopener noreferrer"&gt;Japan Brand Finder&lt;/a&gt; to hand them the map I already have.&lt;/p&gt;

&lt;p&gt;Here's the actual problem, and why it's harder than "just use Google Translate."&lt;/p&gt;

&lt;h2&gt;
  
  
  The fog isn't language. It's &lt;em&gt;context.&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;When an overseas seller researches a Japanese brand, three things break at once:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Discovery is gated by language you can't search in.&lt;/strong&gt;&lt;br&gt;
The brands worth sourcing often have the thinnest English footprint. The maker with 40 years of craft and zero English SEO is exactly the one with no Amazon competition — and exactly the one you'll never find from an English search box.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Translation quietly mangles the things that matter most.&lt;/strong&gt;&lt;br&gt;
This is the part people underestimate. Generic prose translates fine. But product listings live and die on &lt;em&gt;culturally-specific proper nouns&lt;/em&gt; — and those are the model's blind spot.&lt;/p&gt;

&lt;p&gt;I spent part of this week stress-testing this (with another build-in-public dev, &lt;a href="https://dev.to/vickylee"&gt;@vickylee&lt;/a&gt;, on her translation API — cross-pollination is half the point of building in public). Real outputs from real Japanese product copy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A bento box made of &lt;strong&gt;秋田杉&lt;/strong&gt; (&lt;em&gt;Akita cedar&lt;/em&gt;) came back as "Akita &lt;strong&gt;shrubs&lt;/strong&gt;."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;生八つ橋&lt;/strong&gt;, a famous Kyoto confection, became "&lt;strong&gt;the eight bridges&lt;/strong&gt;" — literal kanji, character by character.&lt;/li&gt;
&lt;li&gt;The cosmetics brand &lt;strong&gt;アネッサ&lt;/strong&gt; (&lt;em&gt;ANESSA&lt;/em&gt;) turned into "&lt;strong&gt;Anesthesia&lt;/strong&gt;."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now imagine that on your live listing. You're not just losing nuance — you're publishing copy that says your skincare is "anesthesia" and your snack is a bridge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The supplier reality is invisible from the outside.&lt;/strong&gt;&lt;br&gt;
Is this a maker or a reseller? Will they even talk to an overseas account? Is the brand already locked up by a distributor? From abroad, you can't tell. From Osaka, that context is just... ambient.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Japan Brand Finder actually does
&lt;/h2&gt;

&lt;p&gt;It's deliberately small. You search a brand or product, and it returns a structured read on it — built from a shared database that &lt;em&gt;auto-enriches itself&lt;/em&gt; via the Claude API the first time anyone asks about a brand it hasn't seen (that's the cache-miss trick from last week's post). The longer it runs, the less it has to think.&lt;/p&gt;

&lt;p&gt;The positioning I keep coming back to: &lt;strong&gt;Japan's insider, your unfair advantage.&lt;/strong&gt; Not "an AI tool." A shortcut through fog I happen to live in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it honestly is right now
&lt;/h2&gt;

&lt;p&gt;Early. Shipped, free tier, build-in-public from day one. I'm not going to dress up numbers — there's a separate honest-stats post coming next week for that. Today is just the &lt;em&gt;why&lt;/em&gt;, written down so I stop hand-waving it in DMs.&lt;/p&gt;

&lt;p&gt;The translation findings above became real eval data I'm handing back to Vicky, and they sharpened my own roadmap: the hard, defensible part of this isn't search — it's getting the culturally-specific terms &lt;em&gt;right&lt;/em&gt;, every time.&lt;/p&gt;

&lt;p&gt;If you source from Japan (or want to): &lt;strong&gt;what's the single thing that's blocked you most — finding brands, talking to suppliers, or trusting the translation?&lt;/strong&gt; That answer literally decides what I build next. 🇯🇵&lt;/p&gt;

&lt;h1&gt;
  
  
  buildinpublic
&lt;/h1&gt;

</description>
      <category>showdev</category>
      <category>buildinpublic</category>
      <category>ecommerce</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Used Claude to Generate 37 Amazon JP Product Listings in a Day (Here's My Actual Workflow)</title>
      <dc:creator>mamoru kubokawa</dc:creator>
      <pubDate>Sat, 16 May 2026 09:31:11 +0000</pubDate>
      <link>https://dev.to/tokidigital/i-used-claude-to-generate-100-amazon-jp-product-listings-in-a-day-heres-my-actual-workflow-10bd</link>
      <guid>https://dev.to/tokidigital/i-used-claude-to-generate-100-amazon-jp-product-listings-in-a-day-heres-my-actual-workflow-10bd</guid>
      <description>&lt;p&gt;I run e-commerce across Amazon JP, Rakuten, Yahoo, Qoo10, and TikTok Shop Japan. The single biggest bottleneck has always been &lt;strong&gt;listings&lt;/strong&gt; — not products, not logistics, not ads. Writing decent product copy for each SKU, in Japanese, at scale, kills momentum.&lt;/p&gt;

&lt;p&gt;Last month I rewired the entire workflow using Claude. This post is the actual playbook, including the prompt I use, where Claude gets Japan wrong, and what the numbers look like.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;Old way: 30–60 minutes per SKU for a usable listing&lt;/li&gt;
&lt;li&gt;New way: ~5 minutes per SKU after a light human edit pass&lt;/li&gt;
&lt;li&gt;Result: roughly &lt;strong&gt;[X] SKUs processed in a single day&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The trick is &lt;strong&gt;not&lt;/strong&gt; "ask Claude to write a listing." It's structured inputs + Japan-specific guardrails + a category-level batch pattern.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why bulk Amazon JP listings are uniquely painful
&lt;/h2&gt;

&lt;p&gt;Anyone who has sold on amazon.co.jp knows the problem isn't translation. It's that Japanese product copy has its own conventions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Honorifics shift depending on whether you're describing a gift, a daily-use item, or a luxury product.&lt;/li&gt;
&lt;li&gt;Seasonal vocabulary matters more than in English markets (春限定, 季節の変わり目, etc.).&lt;/li&gt;
&lt;li&gt;Bullet points read very differently — Japanese shoppers expect &lt;em&gt;spec-dense&lt;/em&gt; bullets, not the benefit-first style that wins on amazon.com.&lt;/li&gt;
&lt;li&gt;Brand-safe phrasing is narrower. A casual "perfect for everyone" reads cheap in Japanese.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you machine-translate an English listing, you get something that technically makes sense and emotionally feels off. Conversion drops. You don't see it in keyword tools — you see it in CVR three weeks later.&lt;/p&gt;




&lt;h2&gt;
  
  
  The new workflow (5 steps)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Build a structured input form
&lt;/h3&gt;

&lt;p&gt;Before Claude touches anything, every SKU needs to be reduced to clean inputs. I use a Google Sheet with one row per SKU and these columns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product name (JP and EN if available)&lt;/li&gt;
&lt;li&gt;Category and subcategory&lt;/li&gt;
&lt;li&gt;3–5 key features (bullet-list style)&lt;/li&gt;
&lt;li&gt;Target keywords (from Cerebro or Helium 10)&lt;/li&gt;
&lt;li&gt;1–2 competitor ASINs to mirror in tone&lt;/li&gt;
&lt;li&gt;Tone hint: &lt;em&gt;gift / daily / luxury / utility&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the single highest-leverage step. Garbage in, garbage out is a cliché because it's true. Claude can't recover from a vague spec.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Master prompt with Japan-specific guardrails
&lt;/h3&gt;

&lt;p&gt;Here's the prompt structure I land on after about 20 iterations. Adjust the tone block based on the SKU category.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are writing an Amazon Japan product listing in natural Japanese.

CONTEXT:
- Product: {product_name}
- Category: {category}
- Tone: {tone_hint}  // gift / daily / luxury / utility
- Key features: {features}
- Target keywords: {keywords}
- Competitor reference (for tone only, do not copy): {asin}

WRITE:
1. Title (max 200 chars, keyword-front-loaded, Amazon JP conventions)
2. 5 bullet points (spec-dense, not benefit-first)
3. Product description (300-400 chars, neutral-formal tone)
4. 5 backend search terms (no duplicates with title)

JAPAN-SPECIFIC RULES:
- Do NOT use overly polite honorifics (です・ます is fine; avoid いただきます constructions)
- Do NOT translate brand promises literally ("perfect for everyone" → cut)
- Use full-width punctuation (。、)
- Bullets should lead with spec, not adjective
- Avoid katakana-English when a native Japanese word exists, EXCEPT for established
  category terms (e.g. "ステンレス" is fine, "クオリティ" usually isn't)

OUTPUT FORMAT:
Plain text. No markdown. No commentary. Just the four sections labeled
TITLE / BULLETS / DESCRIPTION / SEARCH TERMS.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The guardrail block is the part that took the longest to develop, and it's where most teams get this wrong. Without it, Claude produces grammatically perfect Japanese that screams &lt;em&gt;foreign-operated brand&lt;/em&gt; to native shoppers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Batch by category, not by SKU
&lt;/h3&gt;

&lt;p&gt;This is counterintuitive. The instinct is to process SKU by SKU, finishing one before starting the next. Don't.&lt;/p&gt;

&lt;p&gt;Instead, &lt;strong&gt;group all SKUs in the same category&lt;/strong&gt; and process them in one Claude conversation. Reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Context carries. After 3 listings in the same category, Claude has internalized the tonal conventions and the rest go faster and more consistently.&lt;/li&gt;
&lt;li&gt;You catch your own input inconsistencies. By the 5th SKU, you notice that your tone hint "daily" produced very different outputs across SKUs — usually because &lt;em&gt;your inputs&lt;/em&gt; varied, not Claude's outputs.&lt;/li&gt;
&lt;li&gt;Cheaper. Fewer system prompt reloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Human edit pass focused on Japan-specific failure modes
&lt;/h3&gt;

&lt;p&gt;I don't edit for grammar. Claude's Japanese grammar is essentially flawless. I edit for these three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Honorific creep.&lt;/strong&gt; Claude sometimes drifts into 〜していただけます forms that feel salesy in a listing context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generic adjectives.&lt;/strong&gt; 高品質, 便利, 安心 — these are placeholder words. I replace each with a concrete spec.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyword stuffing artifacts.&lt;/strong&gt; When the keyword list is long, Claude occasionally repeats a keyword three times in the title. One pass to clean.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This pass takes me about 3–5 minutes per SKU. Compared to writing from scratch, it's a 6–10x speedup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Upload, then iterate based on CVR
&lt;/h3&gt;

&lt;p&gt;Don't try to perfect the listing pre-upload. The data on Amazon JP is the only feedback that matters. I rerun the prompt on underperformers after 30 days using the actual session search terms from the report, fed back into the keyword field.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Claude Gets Wrong (and Why It's a Feature, Not a Bug)
&lt;/h2&gt;

&lt;p&gt;A few specific failure modes you should expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Over-formal closings.&lt;/strong&gt; Listings shouldn't end with 「ぜひお試しください」 — sounds like an ad. Strip it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mixing 漢字 and ひらがな inconsistently&lt;/strong&gt; for the same word across a listing. Quick find-and-replace fixes it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inventing technical specs.&lt;/strong&gt; If your input is vague, Claude will fill the gap with plausible-sounding nonsense. Always sanity-check numbers, materials, dimensions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reason these aren't dealbreakers: they're all &lt;strong&gt;catchable in a fast review pass&lt;/strong&gt;. The hard part — natural Japanese prose at scale — Claude handles. You're left to do the work that requires judgment, not typing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this matters more for Japan than for US/EU
&lt;/h2&gt;

&lt;p&gt;US and EU markets have a deep pool of bilingual copywriters. Japan does not. The supply of professionals who can write &lt;em&gt;good&lt;/em&gt; product copy in Japanese — not just correct Japanese — is a real constraint for international sellers.&lt;/p&gt;

&lt;p&gt;Tools like Claude meaningfully close that gap, &lt;em&gt;if you guardrail them properly&lt;/em&gt;. Without guardrails you get Google Translate with extra steps. With them, you get something that competes with mid-tier human output at 10x speed.&lt;/p&gt;

&lt;p&gt;This is the entire premise behind a project I'm building called &lt;strong&gt;TOKI Digital Services&lt;/strong&gt; — productizing this workflow for sellers who want to enter the Japan market without hiring a full-time Japanese copywriter. More on that in a future post.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'd Do Differently Next Time
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build the input sheet template first.&lt;/strong&gt; I wasted two days iterating prompts when the real bottleneck was input quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run a 5-SKU pilot per category before committing to batch.&lt;/strong&gt; Tonal conventions vary more between Amazon JP categories than I expected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Save the edited human-finished listings as few-shot examples&lt;/strong&gt; for future runs. Claude pattern-matches to good examples better than to instructions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  If you're trying something similar
&lt;/h2&gt;

&lt;p&gt;Happy to compare notes. Drop a comment with what category you're working in and what's breaking — I'll respond with what worked or didn't in my version.&lt;/p&gt;

&lt;p&gt;— Posting from Osaka. Currently running multi-marketplace EC in Japan and building tooling around it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ecommerce</category>
      <category>productivity</category>
      <category>claude</category>
    </item>
    <item>
      <title>How I auto-enrich a brand database with AI on cache miss (Lovable + Claude API)</title>
      <dc:creator>mamoru kubokawa</dc:creator>
      <pubDate>Sat, 16 May 2026 00:44:22 +0000</pubDate>
      <link>https://dev.to/tokidigital/how-i-auto-enrich-a-brand-database-with-ai-on-cache-miss-lovable-claude-api-1kfd</link>
      <guid>https://dev.to/tokidigital/how-i-auto-enrich-a-brand-database-with-ai-on-cache-miss-lovable-claude-api-1kfd</guid>
      <description>&lt;p&gt;Most database designs have two ugly options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Manually seed thousands of rows (impossible for niche data like Japanese wholesale suppliers)&lt;/li&gt;
&lt;li&gt;Force users to enter everything (terrible UX, dead-on-arrival)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Last week I shipped a third option in 30 minutes with Lovable: &lt;strong&gt;let the database grow itself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every search that misses the cache triggers Claude API to generate a real, structured entry — and saves it. The next user gets an instant hit.&lt;/p&gt;

&lt;p&gt;Here's the exact pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern in 4 lines
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&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;entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;aiGenerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole thing. The magic is in what happens to the database over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this beats alternatives
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Seed-only DBs&lt;/strong&gt; require domain expertise upfront. For my Japan Brand Finder, that meant cold-calling Tsubame-Sanjo metalworkers — months of effort before launching.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User-fed DBs&lt;/strong&gt; have chicken-and-egg. Empty DB → no value → no users → no entries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cache-miss enrichment&lt;/strong&gt; sidesteps both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch with 20 seed entries (1 hour)&lt;/li&gt;
&lt;li&gt;AI fills the long tail as users search&lt;/li&gt;
&lt;li&gt;Every miss makes the DB better for the next user&lt;/li&gt;
&lt;li&gt;Cost grows linearly with usage (predictable)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The prompt that actually worked
&lt;/h2&gt;

&lt;p&gt;The hard part isn't the pattern. It's getting AI to produce structured, useful entries instead of generic Wikipedia summaries.&lt;/p&gt;

&lt;p&gt;What worked for me (Japan Brand Finder context):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;filling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;database&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;row&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Japanese&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;manufacturer.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;searched:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"[QUERY]"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Generate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;JSON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;object:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;name_en:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;English&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;brand&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;name_jp:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Japanese&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(kanji&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;kana)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;category:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;hq_location:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;city,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;prefecture&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;english_support:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"good"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"limited"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;business_culture_notes:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1-2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;sentences&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;If&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;brand&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;doesn't&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;exist,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Don't&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;invent.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two key tricks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;JSON schema&lt;/strong&gt; forces structure (no rambling output)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Return null if doesn't exist"&lt;/strong&gt; gives AI permission to refuse&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The second one cut hallucination by ~80% in my testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Economics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Per search: ~$0.005 with Claude Sonnet&lt;/li&gt;
&lt;li&gt;Per 1,000 searches: ~$5&lt;/li&gt;
&lt;li&gt;DB grows: ~700 unique entries (cache hit ratio improves over time)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After Month 2, ~70% of searches hit cache → AI cost drops while DB value compounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd improve
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verification batch job&lt;/strong&gt; — weekly re-check generated entries against external sources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User flagging&lt;/strong&gt; — one-click report for wrong entries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality tiers&lt;/strong&gt; — mark "AI-generated" vs "human-verified"&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;If you have any niche directory idea (suppliers, restaurants, courses), this pattern unlocks it.&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://japanbrandfinder.lovable.app/" rel="noopener noreferrer"&gt;https://japanbrandfinder.lovable.app/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Twitter: &lt;a href="https://twitter.com/tokidigitaljp" rel="noopener noreferrer"&gt;@tokidigitaljp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What would you use the cache-miss enrichment pattern for?&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>buildinpublic</category>
      <category>ai</category>
      <category>lovable</category>
    </item>
    <item>
      <title>How I auto-enrich a brand database with AI on cache miss (Lovable + Claude API)</title>
      <dc:creator>mamoru kubokawa</dc:creator>
      <pubDate>Thu, 14 May 2026 23:47:20 +0000</pubDate>
      <link>https://dev.to/tokidigital/how-i-auto-enrich-a-brand-database-with-ai-on-cache-miss-lovable-claude-api-1m86</link>
      <guid>https://dev.to/tokidigital/how-i-auto-enrich-a-brand-database-with-ai-on-cache-miss-lovable-claude-api-1m86</guid>
      <description>&lt;p&gt;Most database designs have two ugly options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Manually seed thousands of rows (impossible for niche data like Japanese wholesale suppliers)&lt;/li&gt;
&lt;li&gt;Force users to enter everything (terrible UX, dead-on-arrival)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Last week I shipped a third option in 30 minutes with Lovable: &lt;strong&gt;let the database grow itself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every search that misses the cache triggers Claude API to generate a real, structured entry — and saves it. The next user gets an instant hit.&lt;/p&gt;

&lt;p&gt;Here's the exact pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern in 4 lines
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&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;entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;aiGenerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole thing. The magic is in what happens to the database over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this beats alternatives
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Seed-only DBs&lt;/strong&gt; require domain expertise upfront. For my Japan Brand Finder, that meant cold-calling Tsubame-Sanjo metalworkers — months of effort before launching.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User-fed DBs&lt;/strong&gt; have chicken-and-egg. Empty DB → no value → no users → no entries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cache-miss enrichment&lt;/strong&gt; sidesteps both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch with 20 seed entries (1 hour)&lt;/li&gt;
&lt;li&gt;AI fills the long tail as users search&lt;/li&gt;
&lt;li&gt;Every miss makes the DB better for the next user&lt;/li&gt;
&lt;li&gt;Cost grows linearly with usage (predictable)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The prompt that actually worked
&lt;/h2&gt;

&lt;p&gt;The hard part isn't the pattern. It's getting AI to produce structured, useful entries instead of generic Wikipedia summaries.&lt;/p&gt;

&lt;p&gt;What worked for me (Japan Brand Finder context):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;filling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;database&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;row&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Japanese&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;manufacturer.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;searched:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"[QUERY]"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Generate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;JSON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;object:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;name_en:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;English&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;brand&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;name_jp:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Japanese&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(kanji&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;kana)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;category:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;hq_location:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;city,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;prefecture&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;english_support:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"good"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"limited"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;business_culture_notes:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1-2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;sentences&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;If&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;brand&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;doesn't&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;exist,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Don't&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;invent.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two key tricks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;JSON schema&lt;/strong&gt; forces structure (no rambling output)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Return null if doesn't exist"&lt;/strong&gt; gives AI permission to refuse&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The second one cut hallucination by ~80% in my testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Economics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Per search: ~$0.005 with Claude Sonnet&lt;/li&gt;
&lt;li&gt;Per 1,000 searches: ~$5&lt;/li&gt;
&lt;li&gt;DB grows: ~700 unique entries (cache hit ratio improves over time)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After Month 2, ~70% of searches hit cache → AI cost drops while DB value compounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd improve
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verification batch job&lt;/strong&gt; — weekly re-check generated entries against external sources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User flagging&lt;/strong&gt; — one-click report for wrong entries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality tiers&lt;/strong&gt; — mark "AI-generated" vs "human-verified"&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;If you have any niche directory idea (suppliers, restaurants, courses), this pattern unlocks it.&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://japanbrandfinder.lovable.app/" rel="noopener noreferrer"&gt;https://japanbrandfinder.lovable.app/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Twitter: &lt;a href="https://twitter.com/tokidigitaljp" rel="noopener noreferrer"&gt;@tokidigitaljp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What would you use the cache-miss enrichment pattern for?&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>buildinpublic</category>
      <category>ai</category>
      <category>lovable</category>
    </item>
    <item>
      <title>How I auto-enrich a brand database with AI on cache miss (Lovable + Claude API)</title>
      <dc:creator>mamoru kubokawa</dc:creator>
      <pubDate>Wed, 13 May 2026 11:11:36 +0000</pubDate>
      <link>https://dev.to/tokidigital/how-i-auto-enrich-a-brand-database-with-ai-on-cache-miss-lovable-claude-api-31m0</link>
      <guid>https://dev.to/tokidigital/how-i-auto-enrich-a-brand-database-with-ai-on-cache-miss-lovable-claude-api-31m0</guid>
      <description>&lt;p&gt;Most database designs have two ugly options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Manually seed thousands of rows (impossible for niche data)&lt;/li&gt;
&lt;li&gt;Force users to enter everything (terrible UX)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Last week I shipped a third option in 30 minutes with Lovable: &lt;br&gt;
let the database grow itself.&lt;/p&gt;

&lt;p&gt;Every search that misses the cache triggers Claude API to generate &lt;br&gt;
a real, structured entry — and saves it. The next user gets an &lt;br&gt;
instant hit.&lt;/p&gt;

&lt;p&gt;Here's the exact pattern.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>claude</category>
      <category>database</category>
    </item>
    <item>
      <title>My first dev.to post got &lt;25 views: 3 things I'm changing</title>
      <dc:creator>mamoru kubokawa</dc:creator>
      <pubDate>Mon, 11 May 2026 07:51:20 +0000</pubDate>
      <link>https://dev.to/tokidigital/my-first-devto-post-got-25-views-3-things-im-changing-3jg2</link>
      <guid>https://dev.to/tokidigital/my-first-devto-post-got-25-views-3-things-im-changing-3jg2</guid>
      <description>&lt;p&gt;3 days ago I published my first dev.to post: "I built a self-growing Japanese brand database in 1 hour with Lovable (0 customers, 0 followers)."&lt;/p&gt;

&lt;p&gt;The stats today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Views: &amp;lt;25&lt;/li&gt;
&lt;li&gt;Reactions: 0&lt;/li&gt;
&lt;li&gt;Comments: 0&lt;/li&gt;
&lt;li&gt;Followers: 0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the honest breakdown of what didn't work, and 3 things I'm changing.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Passive doesn't work
&lt;/h2&gt;

&lt;p&gt;I published and waited. No X share, no Reddit, no Indie Hackers (got blocked there anyway as a new account).&lt;/p&gt;

&lt;p&gt;The lesson: &lt;strong&gt;dev.to alone doesn't distribute itself&lt;/strong&gt;. It rewards momentum signals — comments, reactions, external traffic. New accounts with no signal stay invisible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I'm changing&lt;/strong&gt;: Today I shared the post on X with a question to indie builders. Tomorrow I'll add genuine comments to 5 #showdev posts I actually find interesting.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The title was about me, not them
&lt;/h2&gt;

&lt;p&gt;My old title: &lt;em&gt;"I built a self-growing Japanese brand database in 1 hour with Lovable (0 customers, 0 followers)."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Self-centric. About my journey, my tool, my emptiness.&lt;/p&gt;

&lt;p&gt;What works on dev.to: titles framed as &lt;strong&gt;the reader's problem or technique&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I'd write today&lt;/strong&gt;: &lt;em&gt;"How I auto-enrich a brand database with AI on cache miss (Lovable + Claude API)"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The reader benefit is clearer. The technique is upfront. Use case comes second.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. I forgot the audience
&lt;/h2&gt;

&lt;p&gt;dev.to is developers. My customers (Amazon sellers) are not.&lt;/p&gt;

&lt;p&gt;I wrote about my product like a product person, not a developer. Devs scrolling the feed don't care about Japan sourcing — they care about &lt;strong&gt;the pattern I used to build it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I'm changing&lt;/strong&gt;: For my next post, I'll lead with the &lt;strong&gt;technical pattern&lt;/strong&gt; (AI-powered DB enrichment on cache miss) and let the use case come second.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Comment on 5 #showdev posts genuinely&lt;/li&gt;
&lt;li&gt;Engage with any replies on the original post&lt;/li&gt;
&lt;li&gt;Write next post with a developer-first angle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently still 0 customers, 0 followers — but learning faster.&lt;/p&gt;




&lt;p&gt;Demo: &lt;a href="https://japanbrandfinder.lovable.app/" rel="noopener noreferrer"&gt;https://japanbrandfinder.lovable.app/&lt;/a&gt;&lt;br&gt;
Twitter: &lt;a href="https://twitter.com/tokidigitaljp" rel="noopener noreferrer"&gt;@tokidigitaljp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What's the most valuable thing you've learned from a post that didn't take off?&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>showdev</category>
      <category>beginners</category>
      <category>saas</category>
    </item>
    <item>
      <title>I built a self-growing Japanese brand database in 1 hour with Lovable (0 customers, 0 followers)</title>
      <dc:creator>mamoru kubokawa</dc:creator>
      <pubDate>Sat, 09 May 2026 07:06:22 +0000</pubDate>
      <link>https://dev.to/tokidigital/i-built-a-self-growing-japanese-brand-database-in-1-hour-with-lovable-0-customers-0-followers-4co5</link>
      <guid>https://dev.to/tokidigital/i-built-a-self-growing-japanese-brand-database-in-1-hour-with-lovable-0-customers-0-followers-4co5</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Japanese Amazon seller from Osaka. Yesterday I built Japan Brand Finder in 1 hour with Lovable — a tool helping English-speaking Amazon sellers source from Japan. Currently 0 customers, 0 followers. Building in public. &lt;a href="https://japanbrandfinder.lovable.app/" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;I'm based in Osaka and I run an Amazon Japan business. For years I've watched English-speaking sellers struggle to source from Japan — language barriers, FAX-only wholesalers, and the silent fear of writing emails that accidentally sound rude.&lt;/p&gt;

&lt;p&gt;So I sat down with Lovable and built the thing I wish existed when I started.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it looks like
&lt;/h2&gt;

&lt;p&gt;The pitch on the landing page: &lt;em&gt;"Search a growing database of Japanese makers — from Tsubame-Sanjo metalworkers to Kyoto matcha houses. Get wholesale contacts, MOQs, English-support level, and culture notes. Then let AI write the polite outreach email for you."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I didn't write that copy. Lovable did. I never mentioned Tsubame-Sanjo (a famous Japanese metalworking region) in my prompt — yet the AI surfaced exactly the kind of specific, credibility-building example that resonates with Amazon sellers who source from Japan.&lt;/p&gt;

&lt;h2&gt;
  
  
  The database that grows itself
&lt;/h2&gt;

&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%2Fmgnajzjt4a3gdgd84jq6.png" 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%2Fmgnajzjt4a3gdgd84jq6.png" alt=" " width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the thing I'm most proud of.&lt;/p&gt;

&lt;p&gt;Look at this screenshot. &lt;strong&gt;Kyocera, Zojirushi, Tiger Corporation, Daikin, Sharp, Suntory, Nissin Foods, House Foods, IRIS Ohyama. 9 Japanese brands. All marked "AI" — meaning I didn't seed any of them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a user searches and the brand isn't in the DB, the AI generates a real entry — name in English and Japanese, category, HQ location, English support level — and saves it to the shared database. The next user who searches that brand gets an instant hit.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Day 1: 20 seed brands&lt;/li&gt;
&lt;li&gt;Day 2: 30+ brands and growing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Every user makes the product more valuable for everyone&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the moat. Not the UI. Not the features. The DB.&lt;/p&gt;

&lt;h2&gt;
  
  
  How good is the AI-generated outreach email?
&lt;/h2&gt;

&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%2F4bxumqxi69cmum5xohwe.png" 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%2F4bxumqxi69cmum5xohwe.png" alt=" " width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is one click away. Hit "Generate" → AI writes a polite Japanese business email like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;件名：御社製品の卸販売に関するお問い合わせ（海外Amazon販売店より）&lt;br&gt;&lt;br&gt;
池永鉄工株式会社 御担当者様&lt;br&gt;&lt;br&gt;
突然のご連絡失礼いたします。&lt;br&gt;&lt;br&gt;
海外にてAmazonストアを運営しております、久保川護と申します...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three things to notice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Subject line auto-generated&lt;/strong&gt; — most AI tools forget this&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native keigo&lt;/strong&gt; — "突然のご連絡失礼いたします" is the textbook polite opener&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real product knowledge&lt;/strong&gt; — the email mentions "鉄なべ" (iron pot), Ikenaga's actual product line. The AI pulled this from the brand's business culture metadata&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For an English-speaking Amazon seller trying to source from Japan, this single feature replaces a $200/hour translator.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 1-hour journey
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;What happened&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0:00&lt;/td&gt;
&lt;td&gt;Wrote a 200-word spec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0:01&lt;/td&gt;
&lt;td&gt;Pasted into Lovable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0:08&lt;/td&gt;
&lt;td&gt;First MVP shipped (search, details, favorites, AI email)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0:30&lt;/td&gt;
&lt;td&gt;Multi-language search bug fix prompt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0:55&lt;/td&gt;
&lt;td&gt;3-mode email feature added with before/after diff&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1:00&lt;/td&gt;
&lt;td&gt;Free credits ran out at exactly the right moment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The "Both" option is gold.&lt;/strong&gt; When Lovable asked how to populate the brand database, the answer was "seed sample brands + AI enrichment on misses." This single decision is what turns the tool into a growing asset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Security scan saved me.&lt;/strong&gt; Before publishing, Lovable's automated security scan flagged a critical issue (RLS missing — wholesale contacts would have been publicly readable). One click fixed it. Without that scan, I would have shipped a privacy violation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Honest copywriting from AI surprised me.&lt;/strong&gt; The Tsubame-Sanjo example. The 鉄なべ reference. These weren't in my prompts. The AI just knew what would resonate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Beta launch this month — aiming for 10–20 users&lt;/li&gt;
&lt;li&gt;Stripe Lifetime Deal ($99) for first 50 buyers&lt;/li&gt;
&lt;li&gt;Bug cleanup (some AI entries still have typos)&lt;/li&gt;
&lt;li&gt;Better sign-up flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Currently 0 customers, 0 followers, building entirely in public.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're an Amazon seller (or just curious about Japanese sourcing), I'd love your feedback.&lt;/p&gt;




&lt;p&gt;🔗 &lt;strong&gt;Demo&lt;/strong&gt;: &lt;a href="https://japanbrandfinder.lovable.app/" rel="noopener noreferrer"&gt;https://japanbrandfinder.lovable.app/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🐦 &lt;strong&gt;Twitter&lt;/strong&gt;: &lt;a href="https://twitter.com/tokidigitaljp" rel="noopener noreferrer"&gt;@tokidigitaljp&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🛠️ &lt;strong&gt;Built with&lt;/strong&gt;: Lovable + Supabase + Anthropic Claude API  &lt;/p&gt;

&lt;p&gt;What feature would you want to see in v2?&lt;br&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%2Fuzlfpam0nk771cp84wpo.png" 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%2Fuzlfpam0nk771cp84wpo.png" alt=" " width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>buildinpublic</category>
      <category>lovable</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
