masato

120 posts

masato banner
masato

masato

@masatobuilds

shipping AI products solo. next.js · supabase · claude api @USCviterbi MSCS · ACL 2025 co-author Tokyo → Los Angeles, the long way around. ↓ https://t.co/9OydJg8rb8

Tokyo, Japan เข้าร่วม Mart 2026
90 กำลังติดตาม35 ผู้ติดตาม
ทวีตที่ปักหมุด
masato
masato@masatobuilds·
I'm Masato, a software engineer based in Tokyo. Heading to LA for grad school this fall. I grew up in Tokyo, spent a year in Australia, worked as a data engineer, then quit my job to study computer science in Budapest on a scholarship. Now I'm back in Tokyo, freelancing and building my own products on the side. I want to share what I'm building, what I'm learning along the way, and the life decisions I'm figuring out in real time. Nice to meet you.
English
2
0
3
207
masato
masato@masatobuilds·
end of day: 1 product getting all my attention now. 1 feature shipped to staging. 1 cold message sent. 0 paying users still. day 33 done. tomorrow again. #buildinpublic
English
0
0
0
6
masato
masato@masatobuilds·
@AIGrowthCoach yeah, the wall-of-conditions version doesn't even hit you until ~5 tables. by then it's painful to refactor. setting the pattern from day one saves a future weekend.
English
0
0
0
4
AI Growth Coach
AI Growth Coach@AIGrowthCoach·
@masatobuilds this is the trick i wish someone told me on day one with supabase. modeling RLS per access pattern keeps the policy file readable instead of becoming a wall of conditions per table. saving this.
English
1
0
1
31
masato
masato@masatobuilds·
supabase pattern: write 1 RLS policy per access pattern, not per table. "users see their own rows" applies to read, write, update, delete across most tables. abstract early. RLS is part of the data model. #supabase #postgres
English
1
0
0
38
masato
masato@masatobuilds·
@rivestack stealing "they can't fake their own behavior from last tuesday." that's the whole mom test compressed. specific past > hypothetical future, every time.
English
0
0
0
13
Rivestack
Rivestack@rivestack·
@masatobuilds the time machine question is the killer. people answer the hypothetical wrong, but they can't fake their own behavior from last tuesday
English
1
0
1
5
masato
masato@masatobuilds·
reading the mom test before user interviews this week. the rule: never ask "would you use this?" people lie to be nice. ask "when was the last time you had this problem?" watch if they can even remember one. #indiehackers
English
1
0
0
11
masato
masato@masatobuilds·
@rivestack the silence vs feedback gap is huge. one thing that helped: treating cold outreach replies as the metric, not the message itself. brain handles "sent 5, got 1 reply" better than "maybe nobody read it."
English
0
0
0
13
Rivestack
Rivestack@rivestack·
@masatobuilds shipping has a clear feedback loop, cold outreach has a delayed mostly silent one. brain learns to avoid the silent thing even when it's the higher leverage move
English
1
0
1
17
masato
masato@masatobuilds·
the gap that keeps showing up: i can ship a feature in an hour. i'll postpone sending one cold message for a week. skill is not the bottleneck. something else is. #indiehackers
English
1
0
0
7
masato
masato@masatobuilds·
what's working in my own posting: technical posts → quiet but useful build log posts → loud opinion posts → silence people don't follow you for being right. they follow you for being there. #buildinpublic
English
2
0
1
16
masato
masato@masatobuilds·
week so far: picked 1 of 4 products. shipped the smallest version of it. tried (badly) to email potential users. posted ~100 things across platforms. mom test interviews next. small steps. #buildinpublic
English
0
0
0
6
masato
masato@masatobuilds·
postgres index tip i learned the hard way: multi-column indexes work left to right. if your index is (a, b, c) and you query WHERE b = x AND c = y, the index doesn't help. column order = query pattern. #postgres
English
0
0
0
7
masato
masato@masatobuilds·
the unsexy part of shipping: every product is "almost ready" for 6 weeks. the last 20% takes 80% of the time. learning to ship at 80% and fix the rest in production. #buildinpublic
English
1
0
1
10
masato
masato@masatobuilds·
stripe webhook handler pattern: every handler stores event.id first. returns 200 immediately if seen. stripe retries on any non-2xx. without idempotency, you process the same payment multiple times. #stripe #devlife
English
0
0
0
12
masato
masato@masatobuilds·
the gap that keeps showing up in my own work: i can ship a feature in an hour. i'll postpone sending one cold message for a week. skill is not the bottleneck. something else is. #indiehackers
English
0
0
0
12
masato
masato@masatobuilds·
closed 3 product folders today. kept 1 open. the closed ones aren't dead. they're paused. they wait for the open one to find users. permission to do less. #buildinpublic
English
0
0
0
6
masato
masato@masatobuilds·
claude api thing i missed for months: prompt caching auto-applies to system messages over 1024 tokens. moved instructions to system. ~90% reduction on repeated calls. docs said it. i hadn't read carefully. #claudeai
English
0
0
0
14
masato
masato@masatobuilds·
the builders i actually learn from: post once a week. ship something concrete. don't tell you how to think. the ratio is the lesson. 80% building. 20% sharing. not the other way around. #indiehackers
English
3
0
2
28
masato
masato@masatobuilds·
tried to write a cold message to a potential user this morning. opened the editor. closed it. opened again. sent. message took 5 minutes. decision took 30. #buildinpublic
English
0
0
0
13
masato
masato@masatobuilds·
next.js 15 routing pattern: co-locate components with routes. app/dashboard/page.tsx app/dashboard/_components/chart.tsx app/dashboard/_lib/utils.ts deletion stays safe. discovery stays obvious. #nextjs #webdev
English
0
0
0
7
masato
masato@masatobuilds·
my X engagement went up. my product MRR didn't. these are different funnels. following ≠ buying. attention ≠ conversion. still figuring out where the bridge is. #buildinpublic
English
1
0
1
25
masato
masato@masatobuilds·
supabase RLS pattern that's been working: 1 policy per access pattern, not per table. "users see their own rows" applies to read, write, update, delete across most tables. abstract early. RLS is part of the data model. #supabase #postgres
English
0
0
0
12
masato
masato@masatobuilds·
shipping the smallest version of one product today. not a launch. not a flagship. just one feature, end to end, working in production. momentum > perfection. #buildinpublic
English
0
0
0
10
masato
masato@masatobuilds·
my actual stack (3 products in production, 0 paying users): next.js supabase claude api stripe vercel resend monthly cost: ~$20. revenue: $0. build is solved. distribution isn't. #buildinpublic #saas
English
1
0
0
29
masato
masato@masatobuilds·
the muscle solo dev is hardest to build: deciding what NOT to build. every feature i ship is one i maintain forever. cutting feels like loss. it's actually focus. #indiehackers
English
0
0
0
10