<?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>Forem: komugi</title>
    <description>The latest articles on Forem by komugi (@komugi_4236cc409d6f9157e7).</description>
    <link>https://forem.com/komugi_4236cc409d6f9157e7</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%2F3892852%2Fa128350d-1ac9-4fbf-913f-72eb1d15e012.png</url>
      <title>Forem: komugi</title>
      <link>https://forem.com/komugi_4236cc409d6f9157e7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/komugi_4236cc409d6f9157e7"/>
    <language>en</language>
    <item>
      <title>How to track GPA across 5 STEM courses in Notion without burning out (2026)</title>
      <dc:creator>komugi</dc:creator>
      <pubDate>Thu, 30 Apr 2026 01:00:03 +0000</pubDate>
      <link>https://forem.com/komugi_4236cc409d6f9157e7/how-to-track-gpa-across-5-stem-courses-in-notion-without-burning-out-2026-47fb</link>
      <guid>https://forem.com/komugi_4236cc409d6f9157e7/how-to-track-gpa-across-5-stem-courses-in-notion-without-burning-out-2026-47fb</guid>
      <description>&lt;p&gt;It's week 6 of the semester. You have a Calculus III midterm Tuesday, an Organic Chemistry problem set due Wednesday, a Physics lab report Friday, and you just realized your Linear Algebra professor moved a quiz up by a week. Your "system" is three notebooks, a Google Calendar you stopped updating in week 2, and a Discord channel where classmates post deadline reminders at 2 AM.&lt;/p&gt;

&lt;p&gt;I went through this exact spiral my sophomore year as a mechanical engineering major taking 17 credits. I ended the semester with a 3.1 GPA despite knowing the material — I was bleeding points on missed homework submissions and miscalculated exam weights. One course I thought I was getting a B+ in ended as a C because I didn't realize the final was 40% of the grade, not 25%.&lt;/p&gt;

&lt;p&gt;If you assume each letter grade drop on a single course costs you roughly 0.1 GPA across a 5-course semester, and your target scholarship or grad school cutoff is 3.5, &lt;strong&gt;missing the tracking layer can cost you a \$5,000–\$20,000 scholarship renewal, or a grad school admission entirely.&lt;/strong&gt; That's not hypothetical — NSF GRFP, Goldwater, and most REU programs filter on GPA first.&lt;/p&gt;

&lt;p&gt;This article is the system I rebuilt over three semesters. By senior year I was taking 18 credits of graduate-level courses, TAing, and running research, and I still knew my exact grade in every class within ±0.5% on any given Tuesday. Here's how.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why spreadsheets and paper planners fail STEM undergrads
&lt;/h2&gt;

&lt;p&gt;Before the system, here's what I tried:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Paper bullet journal.&lt;/strong&gt; Beautiful for one week. Dead by week 4 because rewriting weighted grade formulas by hand is miserable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Sheets per course.&lt;/strong&gt; Worked for grades. Useless for deadlines, readings, and lab prep. Five tabs, no cross-view.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Calendar + Canvas.&lt;/strong&gt; Canvas only shows what instructors bother to post. Half my chem professors posted problem sets as PDFs with due dates buried on page 3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Todoist.&lt;/strong&gt; Great for tasks. Doesn't do weighted GPA math. Doesn't tell you which assignment to prioritize when you have 6 hours and 11 open tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core problem: STEM semesters have &lt;strong&gt;four overlapping layers&lt;/strong&gt; that most tools only handle one of.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;What it tracks&lt;/th&gt;
&lt;th&gt;Tool most people use&lt;/th&gt;
&lt;th&gt;Why it fails&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deadlines&lt;/td&gt;
&lt;td&gt;Due dates, exam dates&lt;/td&gt;
&lt;td&gt;Calendar&lt;/td&gt;
&lt;td&gt;No weight/priority&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grades&lt;/td&gt;
&lt;td&gt;Assignment scores, weights&lt;/td&gt;
&lt;td&gt;Spreadsheet&lt;/td&gt;
&lt;td&gt;Not linked to deadlines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Content&lt;/td&gt;
&lt;td&gt;Lecture notes, readings&lt;/td&gt;
&lt;td&gt;Notability/paper&lt;/td&gt;
&lt;td&gt;Siloed per course&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strategy&lt;/td&gt;
&lt;td&gt;What to study, when&lt;/td&gt;
&lt;td&gt;Vibes&lt;/td&gt;
&lt;td&gt;No data behind choice&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You need one surface where all four touch. Notion is the only free-ish tool flexible enough to model this without writing an app. (I tried writing the app. Don't write the app. Finish your degree.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The 4-database architecture that actually works
&lt;/h2&gt;

&lt;p&gt;After two rebuilds, I landed on four linked Notion databases. That's it. Not ten. Not a dashboard with 40 views. Four.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Courses&lt;/strong&gt; — one row per course you're taking this semester&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assignments&lt;/strong&gt; — one row per gradable item (PSets, quizzes, labs, exams, projects)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sessions&lt;/strong&gt; — one row per study/work block you actually do&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resources&lt;/strong&gt; — textbooks, problem sets, solutions, lecture recordings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's the minimal schema. Create this in Notion right now if you want — it takes about 25 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Courses database
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Name (title)&lt;/li&gt;
&lt;li&gt;Code (e.g., MATH 241)&lt;/li&gt;
&lt;li&gt;Credits (number)&lt;/li&gt;
&lt;li&gt;Professor (text)&lt;/li&gt;
&lt;li&gt;Current Grade % (rollup from Assignments)&lt;/li&gt;
&lt;li&gt;Projected Letter (formula)&lt;/li&gt;
&lt;li&gt;Target Grade (select: A, A-, B+, ...)&lt;/li&gt;
&lt;li&gt;Syllabus URL (url)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Assignments database
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Name (title)&lt;/li&gt;
&lt;li&gt;Course (relation → Courses)&lt;/li&gt;
&lt;li&gt;Type (select: PSet, Quiz, Lab, Midterm, Final, Project, Participation)&lt;/li&gt;
&lt;li&gt;Weight % (number — what % of the course this single item is)&lt;/li&gt;
&lt;li&gt;Score (number, 0–100)&lt;/li&gt;
&lt;li&gt;Max Score (number)&lt;/li&gt;
&lt;li&gt;Due Date (date)&lt;/li&gt;
&lt;li&gt;Status (select: Not Started, In Progress, Submitted, Graded)&lt;/li&gt;
&lt;li&gt;Estimated Hours (number)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The GPA formula that removes guesswork
&lt;/h3&gt;

&lt;p&gt;This is the one piece of math most students get wrong. The formula for your current course grade (assuming percentage-based weighting) is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;current_grade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score_i&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;max_i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;weight_i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weight_i_graded&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not &lt;code&gt;sum(score_i * weight_i) / 100&lt;/code&gt;. That only works if every assignment is graded. Mid-semester, you've only completed maybe 40% of the weight, so you need to normalize by &lt;em&gt;graded&lt;/em&gt; weight to see your actual standing.&lt;/p&gt;

&lt;p&gt;In Notion, the Current Grade % rollup on Courses uses this formula across Assignments where Status = Graded. Then Projected Letter is a simple if-chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Current Grade %&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;93&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Current Grade %&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A-&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Current Grade %&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;87&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B+&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Current Grade %&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;83&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Current Grade %&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B-&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;C or below&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)))))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check your school's exact cutoffs — some use 94/90/87, some use 93/90/87. Getting this one constant wrong cost me a grade point once.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "what do I do right now" problem
&lt;/h2&gt;

&lt;p&gt;Having four databases means nothing if you open Notion on a Sunday night and still can't decide what to work on. This is where most Notion-for-students templates fall apart — they're pretty dashboards with no decision logic.&lt;/p&gt;

&lt;p&gt;I borrowed from the &lt;strong&gt;RICE framework&lt;/strong&gt; (Reach, Impact, Confidence, Effort) used in product management and simplified it for coursework:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;priority_score = (weight_percent * urgency_multiplier) / estimated_hours

where urgency_multiplier =
  4 if due within 24h
  3 if due within 72h
  2 if due within 7 days
  1 otherwise
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add a formula property on Assignments called &lt;code&gt;Priority&lt;/code&gt;. Sort your "This Week" view by Priority descending. The top item is what you work on. No more staring at the ceiling.&lt;/p&gt;

&lt;p&gt;Example from my junior year, Tuesday 7 PM:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Assignment&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;th&gt;Hours&lt;/th&gt;
&lt;th&gt;Due&lt;/th&gt;
&lt;th&gt;Priority&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Thermo PSet 6&lt;/td&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Wed 5 PM&lt;/td&gt;
&lt;td&gt;(5×4)/4 = 5.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diff Eq Quiz prep&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Thu 10 AM&lt;/td&gt;
&lt;td&gt;(10×3)/3 = 10.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Materials Lab report&lt;/td&gt;
&lt;td&gt;8%&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Fri 11 PM&lt;/td&gt;
&lt;td&gt;(8×3)/6 = 4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Senior design meeting prep&lt;/td&gt;
&lt;td&gt;2%&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Wed 3 PM&lt;/td&gt;
&lt;td&gt;(2×4)/1 = 8.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Diff Eq quiz wins, even though the thermo PSet is due sooner. 10% weight in 3 hours beats 5% weight in 4 hours. The math is unintuitive until you see it laid out.&lt;/p&gt;

&lt;h2&gt;
  
  
  A realistic week: how Maya uses the system
&lt;/h2&gt;

&lt;p&gt;Maya is a bioengineering sophomore (not real, but every detail is from students I've actually talked to). Here's a compressed week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sunday, 8 PM — Weekly planning, 20 minutes.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Maya opens the "This Week" view filtered to &lt;code&gt;Due Date ≤ today + 7 days&lt;/code&gt;. She sees 9 assignments. She checks each one's Estimated Hours — sum is 34 hours. She has about 28 hours of study time blocked. Something has to give.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;She uses the Priority sort. The bottom two items are a low-weight discussion post (1%) and an optional extra-credit problem. She marks them &lt;code&gt;Status: Deferred&lt;/code&gt; and moves on. This is the part that feels wrong the first time and correct forever after.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday, 2 PM — Between classes.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Organic chem professor announces Exam 2 is moved up one week. Maya adds it to Assignments right there on her phone. Due Date: next Tuesday. Weight: 20%. Estimated Hours: 12. The Priority score jumps to the top of her list immediately.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, 11 PM — Post-lab debrief, 5 minutes.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;She updates the Materials Lab assignment: Status → Submitted, Actual Hours → 7 (estimated 6). That one-minute log is what makes her future estimates accurate. By week 8 her estimates are within 15% of actuals.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Friday, 4 PM — Grade posted.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Diff Eq Quiz 3: 88/100. She enters Score = 88. The Courses database rollup updates automatically. Current Grade % in Diff Eq dropped from 91.2 to 89.6. She's now at A- projected, not A. She opens the course page and adds a note: "Need 92+ on Quiz 4 to recover A. Review ch.7 series solutions this weekend."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the entire loop. Plan weekly, log in the moment, review when grades post. Total overhead: about 45 minutes a week.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lecture note pattern that compounds
&lt;/h2&gt;

&lt;p&gt;Separate issue, same database system. STEM lecture notes are unique because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They're ~60% equations and diagrams that you can't usefully type in Markdown&lt;/li&gt;
&lt;li&gt;You'll reference them 4 weeks later when a PSet question is "similar to Example 3 from Oct 14"&lt;/li&gt;
&lt;li&gt;You need to link them to specific assignments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My rule: &lt;strong&gt;notes live outside Notion, metadata lives inside.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Take notes in whatever works for your handwriting (Notability, GoodNotes, paper + scanner). In Notion's Resources database, create one row per lecture with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Course (relation)&lt;/li&gt;
&lt;li&gt;Date&lt;/li&gt;
&lt;li&gt;Topic&lt;/li&gt;
&lt;li&gt;Key Concepts (multi-select — e.g., "Laplace transforms", "convolution")&lt;/li&gt;
&lt;li&gt;File URL (link to the PDF/scan)&lt;/li&gt;
&lt;li&gt;Related Assignments (relation → Assignments)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When PSet 5 asks about Laplace transforms, you filter Resources by that concept tag and get back every lecture, recitation, and office-hours note that touched it. This took me from spending 40 minutes finding the right page to 30 seconds.&lt;/p&gt;

&lt;p&gt;This is the same pattern as the &lt;strong&gt;Zettelkasten&lt;/strong&gt; method, stripped down. You don't need the full atomic-notes cult. You need tags and backlinks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exam prep: the reverse-engineering method
&lt;/h2&gt;

&lt;p&gt;Two weeks before an exam, create one Assignment row called "Exam 2 Prep — CHEM 241" with Status = In Progress. Then open a toggle block under it and run this checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] List every topic from the syllabus in the exam's scope&lt;/li&gt;
&lt;li&gt;[ ] For each topic, rate confidence 1–5&lt;/li&gt;
&lt;li&gt;[ ] Pull every related PSet problem from Resources (filter by topic tag)&lt;/li&gt;
&lt;li&gt;[ ] Identify 3 problems per low-confidence topic to redo cold (no notes)&lt;/li&gt;
&lt;li&gt;[ ] Schedule 3 Sessions in the next 10 days, each 90 minutes&lt;/li&gt;
&lt;li&gt;[ ] Book one office-hours slot for the lowest-confidence topic&lt;/li&gt;
&lt;li&gt;[ ] Day-before: one pass through your own summary sheet only, no new problems&lt;/li&gt;
&lt;li&gt;[ ] Night-before: 7+ hours sleep, no caffeine after 2 PM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The confidence rating is the part most students skip and the part that matters most. Cramming uniformly across all topics is the #1 inefficiency in undergrad studying. If you're a 5/5 on stoichiometry and a 2/5 on kinetics, every hour on stoichiometry is wasted.&lt;/p&gt;

&lt;p&gt;This is essentially a &lt;strong&gt;5 Whys&lt;/strong&gt;-style self-audit applied to knowledge gaps. Ask yourself "why am I not a 5 on this?" until you hit a concrete missing concept, then target that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "grade goal" backward pass
&lt;/h2&gt;

&lt;p&gt;Here's a trick I wish someone had told me freshman year. At the start of each semester, for each course, run this calculation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# What score do I need on remaining work to hit my target?
&lt;/span&gt;
&lt;span class="n"&gt;target_grade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt;  &lt;span class="c1"&gt;# A-
&lt;/span&gt;&lt;span class="n"&gt;current_weighted_score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;  &lt;span class="c1"&gt;# points earned so far (out of 45 weight graded)
&lt;/span&gt;&lt;span class="n"&gt;graded_weight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;45&lt;/span&gt;  &lt;span class="c1"&gt;# percent of course already graded
&lt;/span&gt;&lt;span class="n"&gt;remaining_weight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;graded_weight&lt;/span&gt;

&lt;span class="n"&gt;needed_points&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;target_grade&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;current_weighted_score&lt;/span&gt;
&lt;span class="n"&gt;needed_avg_on_remaining&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;needed_points&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;remaining_weight&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You need &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;needed_avg_on_remaining&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% average on remaining &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;remaining_weight&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% of work&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# You need 87.3% average on remaining 55% of work
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Put this as a formula on your Courses database. Call it "Required Average to Hit Target". When it says 94.2%, you know the A is basically gone and you should reallocate time to a course where the number is 82%.&lt;/p&gt;

&lt;p&gt;This is the single piece of information that would have saved my sophomore-year GPA. I was grinding equally on all five classes. Three of them were locked in either direction — only two were actually movable. I spent 40% of my effort on courses where the outcome wouldn't change.&lt;/p&gt;

&lt;h2&gt;
  
  
  What most Notion student templates get wrong
&lt;/h2&gt;

&lt;p&gt;I've bought or tried probably 15 Notion templates for students over the years. The failure patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Too many databases.&lt;/strong&gt; If your template has "Habits", "Mood Tracker", "Workout Log", "Gratitude Journal", and "Book Library", it's not a semester system. It's a lifestyle cosplay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No formulas.&lt;/strong&gt; Pretty tables that don't calculate anything. You end up doing the math in a calculator and typing the result in. That's worse than a spreadsheet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aesthetic &amp;gt; function.&lt;/strong&gt; Four colors of callout boxes, emoji headers for every section, cover images that reload every time. Notion is slow enough already.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generic assignment types.&lt;/strong&gt; "Homework / Test / Project". STEM needs PSet, Lab, Quiz, Midterm, Final, Project, Participation, and sometimes Recitation. Weight distributions differ wildly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No GPA math.&lt;/strong&gt; This is the biggest one. They'll give you a course tracker but no current-grade rollup, no projected letter, no required-average-to-target formula.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you build your own from the schema above, you'll beat 90% of paid templates. I mean that. The schema is the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup checklist: do this in one sitting
&lt;/h2&gt;

&lt;p&gt;Block 90 minutes. Coffee. No phone.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Create the four databases (Courses, Assignments, Sessions, Resources)&lt;/li&gt;
&lt;li&gt;[ ] Add all 5 courses with syllabus URLs&lt;/li&gt;
&lt;li&gt;[ ] Open each syllabus PDF. Enter every assignment you can see with weight and due date. This takes 45 min and it's the most important 45 min of your semester.&lt;/li&gt;
&lt;li&gt;[ ] Add the Current Grade % rollup on Courses&lt;/li&gt;
&lt;li&gt;[ ] Add the Projected Letter formula&lt;/li&gt;
&lt;li&gt;[ ] Add the Priority formula on Assignments&lt;/li&gt;
&lt;li&gt;[ ] Create three views: "This Week", "All Upcoming", "Needs Grade Entry"&lt;/li&gt;
&lt;li&gt;[ ] Set a recurring Sunday 8 PM reminder: "Weekly plan, 20 min"&lt;/li&gt;
&lt;li&gt;[ ] Set a recurring Friday 5 PM reminder: "Enter all grades posted this week"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the minimum viable system. Everything after this is refinement.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to upgrade your system
&lt;/h2&gt;

&lt;p&gt;Stick with the minimum for at least 4 weeks. Then, if you're feeling friction, add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;Sessions&lt;/strong&gt; view that shows actual vs. estimated hours, so you calibrate&lt;/li&gt;
&lt;li&gt;A per-course sub-page with concept tags and confidence ratings&lt;/li&gt;
&lt;li&gt;A "Scholarship / Grad School" tracker linked to cumulative GPA&lt;/li&gt;
&lt;li&gt;A TA/office hours schedule embedded in each course page&lt;/li&gt;
&lt;li&gt;Integration with Google Calendar via Notion's built-in sync&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't add any of this in week 1. You'll spend your setup energy on the wrong layer and abandon the whole thing by week 3.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest limitation
&lt;/h2&gt;

&lt;p&gt;This system assumes you're willing to spend ~45 minutes a week maintaining it. If you won't, no system works and you're better off with paper. The ROI kicks in around week 3 when the grade rollups start showing you things you didn't know — usually that one course is doing worse than you thought and another is doing better.&lt;/p&gt;

&lt;p&gt;Also: the system tracks. It doesn't study for you. Plenty of students with perfect Notion setups fail exams because the dashboard became the procrastination.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you'd rather skip the 90-minute build
&lt;/h2&gt;

&lt;p&gt;I rebuilt this system three times across my undergrad and once more when my younger sister started engineering school. After the fourth rebuild I stopped rebuilding and packaged it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEM Semester OS for Undergrads&lt;/strong&gt; is the exact Notion workspace I described above, pre-built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4 linked databases with every property, rollup, and formula from this article&lt;/li&gt;
&lt;li&gt;GPA calculator across up to 5 courses with cumulative multi-semester rollover&lt;/li&gt;
&lt;li&gt;Pre-built views: This Week, Priority Queue, Grade Entry Needed, Exam Prep&lt;/li&gt;
&lt;li&gt;The Priority formula, Projected Letter formula, and Required Average to Target formula already wired in&lt;/li&gt;
&lt;li&gt;Exam prep toggle template with the reverse-engineering checklist&lt;/li&gt;
&lt;li&gt;A 10-minute setup walkthrough so you're running before your next lecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's \$19, which is roughly the cost of one textbook chapter rental, and it saves the 90 minutes of schema building plus the inevitable 2–3 hours of formula debugging when your rollups don't calculate the way you expect. (Notion rollup syntax has edge cases. I've hit all of them.)&lt;/p&gt;

&lt;p&gt;If you'd rather build it yourself from this article, genuinely — do that. Everything you need is above. The paid version exists for people who want to skip the plumbing and start tracking grades tonight.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want the complete STEM Semester OS I used? &lt;a href="https://komugipan.gumroad.com/l/yvfge" rel="noopener noreferrer"&gt;View on Gumroad →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>notion</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>How to track net worth across USD and JPY for US-Japan couples in 2026</title>
      <dc:creator>komugi</dc:creator>
      <pubDate>Wed, 29 Apr 2026 01:00:03 +0000</pubDate>
      <link>https://forem.com/komugi_4236cc409d6f9157e7/how-to-track-net-worth-across-usd-and-jpy-for-us-japan-couples-in-2026-2n4b</link>
      <guid>https://forem.com/komugi_4236cc409d6f9157e7/how-to-track-net-worth-across-usd-and-jpy-for-us-japan-couples-in-2026-2n4b</guid>
      <description>&lt;p&gt;You and your spouse sit down on Sunday morning with coffee. One of you pulls up a Chase checking account in dollars. The other opens a Mitsubishi UFJ app showing yen. You also have a Fidelity 401(k), a NISA account in Tokyo, a Rakuten credit card bill, and a Vanguard brokerage. Someone asks the simple question: &lt;em&gt;how much are we actually worth this month?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And nobody has a clean answer.&lt;/p&gt;

&lt;p&gt;If you're a dual-income couple straddling the US and Japan, you've probably felt this. The yen dropped from 110 to 155 against the dollar in three years. That single FX move can swing your net worth by 20-30% without you buying or selling anything. I've watched couples assume they were saving $4,000/month only to realize that when converted properly, their real USD-denominated net worth went &lt;em&gt;down&lt;/em&gt; for six months straight because their yen-side assets were getting eaten by FX.&lt;/p&gt;

&lt;p&gt;This article walks through how I built a multi-currency net worth dashboard that actually works for cross-border households — the account structure, the FX handling, the monthly review ritual, and the mistakes I made before landing on something sustainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hidden cost of not tracking cross-border finances properly
&lt;/h2&gt;

&lt;p&gt;Let me put numbers on it.&lt;/p&gt;

&lt;p&gt;A couple I'll call Ken and Sarah — Ken works remote for a Tokyo firm paid in yen, Sarah works for a US tech company paid in USD — told me they were "saving around $80,000/year combined." When we actually reconstructed their 2022-2024 net worth in a single base currency:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Their yen-side savings grew from ¥8M to ¥11M (looks great)&lt;/li&gt;
&lt;li&gt;But in USD terms, those yen assets went from ~$72k to ~$71k&lt;/li&gt;
&lt;li&gt;Their actual USD-measured savings rate was closer to $52k/year, not $80k&lt;/li&gt;
&lt;li&gt;They'd been over-contributing to a Japanese savings account that was structurally losing purchasing power relative to their US retirement goals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's a $28k/year blind spot. Over a decade of compounding, that's the difference between retiring at 55 and retiring at 62.&lt;/p&gt;

&lt;p&gt;The other cost is softer but real: fights. Every couple I know with cross-border finances has had the "wait, how much do we have?" argument. Not because anyone's hiding money, but because nobody has a single source of truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why generic net worth trackers break for US-Japan couples
&lt;/h2&gt;

&lt;p&gt;I tried them all before building my own. Here's where each one fell apart:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Why it broke&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mint / Rocket Money&lt;/td&gt;
&lt;td&gt;USD-only. No Japanese bank integration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monarch Money&lt;/td&gt;
&lt;td&gt;Great for US, but cannot pull SBI, MUFG, Rakuten, or NISA accounts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Moneytree (Japan)&lt;/td&gt;
&lt;td&gt;Excellent for JP accounts, no US coverage, UI in Japanese only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YNAB&lt;/td&gt;
&lt;td&gt;Budgeting-first, not net-worth-first. Single currency.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Personal Capital&lt;/td&gt;
&lt;td&gt;US brokerages only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notion templates&lt;/td&gt;
&lt;td&gt;Flexible but no FX historical data, manual everything&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The core issue: no consumer tool assumes you have assets in two currencies that both matter. They treat foreign currency as a "holding" to be converted once. For a couple who genuinely lives in both economies — paying rent in yen, paying student loans in dollars, contributing to both 401(k) and iDeCo — you need both currencies tracked as first-class citizens.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 4-layer account structure that actually works
&lt;/h2&gt;

&lt;p&gt;Before you open any spreadsheet, get the account taxonomy right. This is the part most people skip and regret.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 1: Liquid cash (by currency)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;USD checking (Chase, BofA, Schwab)&lt;/li&gt;
&lt;li&gt;USD savings / HYSA (Marcus, Ally)&lt;/li&gt;
&lt;li&gt;JPY checking (MUFG, SMBC, Mizuho, Japan Post)&lt;/li&gt;
&lt;li&gt;JPY savings (Rakuten Bank, Sony Bank)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Layer 2: Investment accounts (by tax treatment)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;US taxable brokerage (Fidelity, Vanguard, Schwab)&lt;/li&gt;
&lt;li&gt;US tax-advantaged (401(k), Roth IRA, HSA)&lt;/li&gt;
&lt;li&gt;JP taxable (SBI Securities, Rakuten Securities 特定口座)&lt;/li&gt;
&lt;li&gt;JP tax-advantaged (NISA, iDeCo)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Layer 3: Real assets
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Property (mark-to-market, with currency of location)&lt;/li&gt;
&lt;li&gt;Vehicles (depreciating, often ignored — fine)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Layer 4: Liabilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;US credit cards, student loans, mortgage&lt;/li&gt;
&lt;li&gt;JP credit cards, 住宅ローン, 奨学金&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rule: &lt;strong&gt;every account lives in exactly one currency at the transaction level&lt;/strong&gt;, and gets converted to a base currency only at the reporting layer. Never store dual-currency balances on a single row. That's how you end up double-counting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handling FX rates without going insane
&lt;/h2&gt;

&lt;p&gt;This is where most DIY spreadsheets die. You have two reasonable approaches:&lt;/p&gt;

&lt;h3&gt;
  
  
  Approach A: Month-end snapshot rate
&lt;/h3&gt;

&lt;p&gt;Every month, pull the USD/JPY rate on the last business day and use that single rate to convert all JPY balances. Simple, reproducible, good enough for 95% of households.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=GOOGLEFINANCE("CURRENCY:USDJPY", "close", EOMONTH(TODAY(),-1))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or in Excel with a Stocks data type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=STOCKHISTORY("USDJPY", EOMONTH(TODAY(),-1), EOMONTH(TODAY(),-1), 0, 0, 1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Approach B: Cost-basis FX tracking
&lt;/h3&gt;

&lt;p&gt;Track what rate you &lt;em&gt;acquired&lt;/em&gt; each yen asset at, then compute FX P&amp;amp;L separately from market P&amp;amp;L. This is what sophisticated investors do. It lets you answer: "Did my Japanese stock fund lose money, or did the yen just weaken?"&lt;/p&gt;

&lt;p&gt;I recommend Approach A for the first year. Once you have 12 months of data, you can layer B on top.&lt;/p&gt;

&lt;h3&gt;
  
  
  The gotcha: mid-month transfers
&lt;/h3&gt;

&lt;p&gt;If you wire $10,000 from Schwab to MUFG on the 15th, don't use the month-end rate for that transfer. Record the &lt;em&gt;actual&lt;/em&gt; rate your bank gave you (usually worse than mid-market by 1-3%). Wise and Revolut give you near-mid rates; traditional bank wires do not. That spread is real money.&lt;/p&gt;

&lt;h2&gt;
  
  
  The monthly review ritual (45 minutes, once a month)
&lt;/h2&gt;

&lt;p&gt;Here's the process I run on the first Sunday of every month. Block the time on a shared calendar. No phones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checklist
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Pull balances from all US accounts (aggregator or manual)&lt;/li&gt;
&lt;li&gt;[ ] Pull balances from all JP accounts (Moneytree or manual)&lt;/li&gt;
&lt;li&gt;[ ] Grab month-end USD/JPY rate&lt;/li&gt;
&lt;li&gt;[ ] Enter balances into the snapshot sheet&lt;/li&gt;
&lt;li&gt;[ ] Review auto-calculated USD and JPY totals&lt;/li&gt;
&lt;li&gt;[ ] Check month-over-month delta in both currencies&lt;/li&gt;
&lt;li&gt;[ ] Check FX contribution vs. real contribution to the delta&lt;/li&gt;
&lt;li&gt;[ ] Update the one-line "what changed and why" note&lt;/li&gt;
&lt;li&gt;[ ] Discuss one open question with spouse (5 min)&lt;/li&gt;
&lt;li&gt;[ ] Schedule next month's review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "what changed and why" note is the single most valuable habit. Example entries from my own log:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;2024-03: Net worth up ¥890k MoM, but USD-equivalent flat. Yen weakened from 149 to 151. Real savings: ¥620k. FX: +¥270k paper gain on USD assets.&lt;/p&gt;

&lt;p&gt;2024-07: NW down $3,200 USD despite $4,800 in contributions. NISA fund dropped 6%. Nothing to act on — continuing DCA.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You'll be grateful for these notes in year three when you're trying to remember why Q2 2024 looked weird.&lt;/p&gt;

&lt;h2&gt;
  
  
  A minimal spreadsheet schema
&lt;/h2&gt;

&lt;p&gt;Here's the bare-bones version you can build in an hour. Three sheets:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sheet 1: &lt;code&gt;accounts&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;account_id&lt;/th&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;currency&lt;/th&gt;
&lt;th&gt;type&lt;/th&gt;
&lt;th&gt;owner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;US01&lt;/td&gt;
&lt;td&gt;Chase Checking&lt;/td&gt;
&lt;td&gt;USD&lt;/td&gt;
&lt;td&gt;cash&lt;/td&gt;
&lt;td&gt;joint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US02&lt;/td&gt;
&lt;td&gt;Fidelity 401k&lt;/td&gt;
&lt;td&gt;USD&lt;/td&gt;
&lt;td&gt;retirement&lt;/td&gt;
&lt;td&gt;spouse_a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JP01&lt;/td&gt;
&lt;td&gt;MUFG 普通&lt;/td&gt;
&lt;td&gt;JPY&lt;/td&gt;
&lt;td&gt;cash&lt;/td&gt;
&lt;td&gt;joint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JP02&lt;/td&gt;
&lt;td&gt;SBI NISA&lt;/td&gt;
&lt;td&gt;JPY&lt;/td&gt;
&lt;td&gt;retirement&lt;/td&gt;
&lt;td&gt;spouse_b&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Sheet 2: &lt;code&gt;snapshots&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;date&lt;/th&gt;
&lt;th&gt;account_id&lt;/th&gt;
&lt;th&gt;balance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2026-01-31&lt;/td&gt;
&lt;td&gt;US01&lt;/td&gt;
&lt;td&gt;8420.15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-01-31&lt;/td&gt;
&lt;td&gt;JP01&lt;/td&gt;
&lt;td&gt;1250000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Sheet 3: &lt;code&gt;fx_rates&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;date&lt;/th&gt;
&lt;th&gt;usdjpy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2026-01-31&lt;/td&gt;
&lt;td&gt;148.50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Then a dashboard sheet with formulas like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total USD = SUMIFS(balance, currency, "USD", date, report_date)
         + SUMIFS(balance, currency, "JPY", date, report_date) / USDJPY

Total JPY = SUMIFS(balance, currency, "JPY", date, report_date)
         + SUMIFS(balance, currency, "USD", date, report_date) * USDJPY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gets you 60% of the value in one afternoon. It will not, however, handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Historical charts in both currencies&lt;/li&gt;
&lt;li&gt;FX-attribution vs contribution-attribution&lt;/li&gt;
&lt;li&gt;Multi-year CAGR in each currency&lt;/li&gt;
&lt;li&gt;Retirement glide-path projections against dual goals&lt;/li&gt;
&lt;li&gt;Spouse-level breakdowns for 確定申告 and US tax filing&lt;/li&gt;
&lt;li&gt;Category rollups (cash vs. invested vs. real estate)&lt;/li&gt;
&lt;li&gt;Conditional formatting for "you're off target"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the 40% that took me the next 18 months to figure out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes I made so you don't have to
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mistake 1: Using a single base currency.&lt;/strong&gt; I started in USD-only. My wife, whose salary and spending were mostly yen, felt disconnected from the numbers. We switched to dual-primary display — every metric shown in both currencies side by side. Engagement doubled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 2: Ignoring tax-adjusted values.&lt;/strong&gt; $100k in a Roth IRA is worth more than $100k in a taxable brokerage, which is worth more than ¥15M in a Japanese 特定口座 (20.315% on gains). For net worth tracking, nominal is fine. For retirement planning, apply a tax haircut.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 3: Tracking too frequently.&lt;/strong&gt; I tried weekly for a month. It was noise. Monthly is the right cadence. You're measuring a slow-moving variable, and daily FX chatter will make you do dumb things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 4: Not tracking the FX contribution separately.&lt;/strong&gt; If you don't decompose your month-over-month change into (a) money you added, (b) market returns, and (c) FX moves, you cannot tell whether your plan is working. I had three straight months where our JPY savings rate looked awful — turned out we were saving fine, the yen had just strengthened and compressed our USD-denominated contributions on paper.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 5: Separate spreadsheets per spouse.&lt;/strong&gt; We did this for "privacy" reasons early on. It meant reconciliation every month took two hours. Merge them. Use an &lt;code&gt;owner&lt;/code&gt; column if you need attribution.&lt;/p&gt;

&lt;h2&gt;
  
  
  A realistic conversation this enables
&lt;/h2&gt;

&lt;p&gt;Here's what a Sunday review looks like once the system is running. Names changed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Maya:&lt;/strong&gt; Okay, January snapshot. USD total is $412,800, JPY total is ¥61.3M.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;David:&lt;/strong&gt; How much of the ¥890k jump was us actually saving?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maya:&lt;/strong&gt; Contributions were ¥540k. Market was up ¥180k on the NISA. FX gave us ¥170k because the yen weakened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;David:&lt;/strong&gt; So real progress is ¥720k. We're on track for the ¥8M annual target.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maya:&lt;/strong&gt; Yeah. But I want to talk about the Rakuten savings account. It's sitting at ¥3.2M earning 0.02%. At current inflation that's losing ~2% real per year.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;David:&lt;/strong&gt; Move ¥2M into the NISA growth slot next month?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maya:&lt;/strong&gt; Agreed. I'll add it to the action log.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That conversation is impossible without the data structure underneath it. And it took eight minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to graduate from a spreadsheet to real software
&lt;/h2&gt;

&lt;p&gt;Honest answer: most couples never need to. A well-built spreadsheet handles net worth tracking better than any SaaS tool I've tested for the cross-border case, specifically because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You control the currency logic&lt;/li&gt;
&lt;li&gt;You own your data (GDPR, APPI, nothing leaves your machine)&lt;/li&gt;
&lt;li&gt;No monthly subscription&lt;/li&gt;
&lt;li&gt;Formulas are auditable by either spouse&lt;/li&gt;
&lt;li&gt;Works offline on a plane between Narita and SFO&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only reason to graduate is if you cross into business/estate territory: multiple rental properties, a holding company, trust structures. At that point you want an accountant and proper accounting software, not a tracker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it all together
&lt;/h2&gt;

&lt;p&gt;If you've read this far, you have enough to build a working system yourself. The ingredients are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A clean account taxonomy (4 layers, single currency per account)&lt;/li&gt;
&lt;li&gt;A monthly snapshot ritual (45 min, first Sunday)&lt;/li&gt;
&lt;li&gt;A dual-currency reporting layer with FX handled correctly&lt;/li&gt;
&lt;li&gt;A decomposition of MoM change into contribution / market / FX&lt;/li&gt;
&lt;li&gt;A running "what changed and why" log&lt;/li&gt;
&lt;li&gt;Tax-adjusted values for retirement planning, nominal for net worth&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Building the Excel file from scratch took me about 40 hours over 18 months of iteration. The version I use now has 14 sheets, handles retirement glide paths in both currencies, does spouse-level breakdowns that map cleanly to both US Form 1040 and Japanese 確定申告 categories, and produces a one-page PDF summary I can send to our financial advisor.&lt;/p&gt;

&lt;p&gt;I systematized all of this — the account schema, the FX decomposition formulas, the monthly dashboard, the retirement projections, the tax-lot breakdowns — into a ready-to-use Excel file called the &lt;strong&gt;Multi-Currency Net Worth Dashboard for US-Japan Couples&lt;/strong&gt;. It's what I wish someone had handed me in 2021 instead of me reinventing it over three years.&lt;/p&gt;

&lt;p&gt;What's inside:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-built account schema for typical US-Japan household (customize in 15 min)&lt;/li&gt;
&lt;li&gt;Auto-updating USD/JPY via Excel Stocks data type&lt;/li&gt;
&lt;li&gt;Monthly snapshot sheet with validation rules&lt;/li&gt;
&lt;li&gt;Dual-currency dashboard (USD-primary and JPY-primary views)&lt;/li&gt;
&lt;li&gt;FX vs. contribution vs. market attribution&lt;/li&gt;
&lt;li&gt;Retirement glide-path with dual targets&lt;/li&gt;
&lt;li&gt;Tax-lot tracking for NISA, iDeCo, 401(k), Roth&lt;/li&gt;
&lt;li&gt;Spouse-level rollups for tax filing prep&lt;/li&gt;
&lt;li&gt;12-month trailing charts in both currencies&lt;/li&gt;
&lt;li&gt;Works in Excel desktop (Mac + Windows) and Excel for web&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you'd rather spend your weekend actually reviewing your finances than building the tool to review your finances, it's $29 — roughly what you'll save on a single bad FX conversion.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://komugipan.gumroad.com/l/dzbfh" rel="noopener noreferrer"&gt;View the dashboard on Gumroad →&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want the complete Multi-Currency Net Worth Dashboard I used? &lt;a href="https://komugipan.gumroad.com/l/dzbfh" rel="noopener noreferrer"&gt;View on Gumroad →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>excel</category>
      <category>spreadsheet</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to track 30+ FAANG interviews without losing offers in 2026</title>
      <dc:creator>komugi</dc:creator>
      <pubDate>Tue, 28 Apr 2026 01:00:03 +0000</pubDate>
      <link>https://forem.com/komugi_4236cc409d6f9157e7/how-to-track-30-faang-interviews-without-losing-offers-in-2026-261p</link>
      <guid>https://forem.com/komugi_4236cc409d6f9157e7/how-to-track-30-faang-interviews-without-losing-offers-in-2026-261p</guid>
      <description>&lt;h2&gt;
  
  
  The 2am Slack message that cost me $40k
&lt;/h2&gt;

&lt;p&gt;It was a Tuesday. I was deep into final-round loops at four companies — Google L5, Meta E5, Stripe L4, and a Series C startup. My recruiter at Meta sent a Slack message at 10pm asking for my updated salary expectations by the next morning. I saw it at 7:30am, 90 minutes too late. They'd already moved the team match conversation to another candidate.&lt;/p&gt;

&lt;p&gt;I didn't lose the offer entirely, but I lost the leverage. Without a competing same-week Meta offer, my Google recruiter had no reason to stretch on the equity band. The final delta, after I compared the actual comps: about $40,000/year I left on the table because I couldn't keep track of one follow-up thread.&lt;/p&gt;

&lt;p&gt;This article is the system I rebuilt afterwards — the one I now use every time I job hunt, and the one I've shared with ~20 senior engineers who've run parallel FAANG loops since 2023. If you're actively interviewing at 5+ companies and feel the ground slipping, read on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why spreadsheets fail at 5+ concurrent loops
&lt;/h2&gt;

&lt;p&gt;Most engineers start with a Google Sheet. That works fine for 2-3 companies. It breaks hard at 5+, and here's why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recruiter communication is multi-channel.&lt;/strong&gt; Email, LinkedIn, phone, Slack (for contract roles), sometimes WhatsApp. A flat spreadsheet can't thread conversation history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FAANG loops have 4-7 stages with branching outcomes.&lt;/strong&gt; Recruiter screen → technical phone screen → onsite (4-6 rounds) → team match → offer → negotiation → backchannel references. Each stage has its own deadline, prep material, and interviewer list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compensation data is multidimensional.&lt;/strong&gt; Base + sign-on (year 1 and year 2) + RSU (4-year vest with cliffs) + annual refresh + target bonus. Comparing offers on a single "total comp" number is how people leave six figures on the table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Follow-up timing is the #1 predictor of outcomes.&lt;/strong&gt; A 2019 Glassdoor analysis showed candidates who sent thank-you notes within 24 hours were 22% more likely to advance. Beyond thank-yous, there's the "2-week nudge," the "offer deadline extension ask," the "backchannel check-in."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's break this down into a system you can build today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Section 1: Model your pipeline as a state machine, not a list
&lt;/h2&gt;

&lt;p&gt;Stop thinking of "companies I'm interviewing with." Start thinking of each application as an instance of a finite state machine. This is how recruiters at Amazon and Google actually model their ATS internally.&lt;/p&gt;

&lt;p&gt;The canonical states I use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;APPLIED
  ↓
RECRUITER_SCREEN_SCHEDULED
  ↓
RECRUITER_SCREEN_DONE
  ↓ (branch)
TECH_PHONE_SCREEN_SCHEDULED  →  REJECTED_PHONE
  ↓
ONSITE_SCHEDULED
  ↓
ONSITE_DONE
  ↓ (branch)
TEAM_MATCH  /  HIRING_COMMITTEE  →  REJECTED_ONSITE
  ↓
OFFER_VERBAL
  ↓
OFFER_WRITTEN
  ↓
NEGOTIATING
  ↓
ACCEPTED / DECLINED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why does this matter? Because every state transition has a &lt;strong&gt;required action within a specific timeframe&lt;/strong&gt;. If your tracker doesn't enforce those, you'll miss them.&lt;/p&gt;

&lt;p&gt;Here's the action matrix I keep taped next to my monitor:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State transition&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Deadline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Recruiter screen done&lt;/td&gt;
&lt;td&gt;Send thank-you, confirm next step&lt;/td&gt;
&lt;td&gt;24h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tech phone screen scheduled&lt;/td&gt;
&lt;td&gt;Review company-specific LeetCode tag&lt;/td&gt;
&lt;td&gt;48h before&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Onsite scheduled&lt;/td&gt;
&lt;td&gt;Request interviewer names, prep system design&lt;/td&gt;
&lt;td&gt;5 days before&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Onsite done&lt;/td&gt;
&lt;td&gt;Thank-you to each interviewer (individualized)&lt;/td&gt;
&lt;td&gt;24h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5 days of silence&lt;/td&gt;
&lt;td&gt;Polite nudge to recruiter&lt;/td&gt;
&lt;td&gt;Day 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verbal offer&lt;/td&gt;
&lt;td&gt;Request written, ask for 2-week decision window&lt;/td&gt;
&lt;td&gt;24h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Competing offer received&lt;/td&gt;
&lt;td&gt;Notify all active recruiters&lt;/td&gt;
&lt;td&gt;Same day&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The last row is the one that saved me the second time around. The moment a Stripe verbal came in, I had a templated email ready to fire to Google, Meta, and the startup within the hour. Three of them moved faster as a result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Section 2: The compensation comparison sheet you actually need
&lt;/h2&gt;

&lt;p&gt;Most offer comparison templates online are garbage. They show year-1 total comp, which is meaningless when sign-on bonuses are front-loaded and RSUs vest on different schedules (Amazon's infamous 5/15/40/40 backload vs. Meta's 25/25/25/25 vs. Google's front-loaded).&lt;/p&gt;

&lt;p&gt;Here's the minimum viable comp model. Build this in Notion, Excel, or Google Sheets — doesn't matter, just build it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Normalized 4-year total comp calculator&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculateOffer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;offer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signOnY1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signOnY2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rsuTotal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vestSchedule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetBonus&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;offer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// vestSchedule is e.g. [0.25, 0.25, 0.25, 0.25] or [0.05, 0.15, 0.40, 0.40]&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rsuByYear&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;vestSchedule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pct&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;rsuTotal&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;pct&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;yearlyComp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;year&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;bonus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;base&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;targetBonus&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;rsu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;rsuByYear&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;signOn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;signOnY1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;signOnY2&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;base&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;base&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;targetBonus&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;rsuByYear&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;signOnY1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;signOnY2&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&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;fourYearTotal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;yearlyComp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&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;avgAnnual&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fourYearTotal&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;yearlyComp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fourYearTotal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;avgAnnual&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;metaOffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculateOffer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;220000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;signOnY1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;80000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;signOnY2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;rsuTotal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;600000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;vestSchedule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;targetBonus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.15&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;metaOffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;avgAnnual&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 430,000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run this against every offer. You'll be surprised. I once had a startup offer that looked 30% lower on paper actually come out ahead in year 1 because of a $200k sign-on, while lagging badly in year 4. That information changes how you negotiate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pro tip: Always model two RSU scenarios — one at current stock price, one at a -30% shock. If your offer falls apart at -30%, that's risk you need to price in.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Section 3: The interviewer intel dossier
&lt;/h2&gt;

&lt;p&gt;This is the single highest-ROI habit I picked up. For every onsite interviewer, I maintain a short dossier before the loop. It takes 15 minutes per person and completely changes the conversation.&lt;/p&gt;

&lt;p&gt;Structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name, title, team&lt;/strong&gt; (from the recruiter's email)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn summary&lt;/strong&gt; (last 2 roles, tenure at current company)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public writing&lt;/strong&gt; (blog posts, conference talks, GitHub)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Likely interview type&lt;/strong&gt; (they're a staff IC → probably system design; they're an EM → probably behavioral)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One specific question I can ask them&lt;/strong&gt; based on their background&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example from my Stripe loop:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Priya Ramanathan — Staff Engineer, Payments Infrastructure&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 years at Stripe, previously 3 years at Square on risk systems&lt;/li&gt;
&lt;li&gt;Gave a talk at QCon 2022 on idempotency keys at scale&lt;/li&gt;
&lt;li&gt;Blog post on hot partition mitigation in DynamoDB&lt;/li&gt;
&lt;li&gt;Likely interview: distributed systems design&lt;/li&gt;
&lt;li&gt;My question for her: "Your QCon talk mentioned the tension between idempotency window length and storage cost — how has that evolved as transaction volume grew?"&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;I asked that question at the end of the round. Priya lit up, we went 10 minutes over, and she later told my recruiter I was the only candidate that week who'd clearly read her work. That's how you get "strong hire" instead of "hire."&lt;/p&gt;

&lt;h2&gt;
  
  
  Section 4: Behavioral story bank with the STAR + Amazon LP mapping
&lt;/h2&gt;

&lt;p&gt;If you're interviewing at Amazon, you already know about Leadership Principles. What fewer people do is build a &lt;strong&gt;story bank&lt;/strong&gt; where each story is tagged against multiple frameworks.&lt;/p&gt;

&lt;p&gt;I keep 12-15 stories. Each one is tagged with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;STAR components&lt;/strong&gt; explicitly broken out (Situation, Task, Action, Result)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon LPs&lt;/strong&gt; it hits (usually 2-3)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google attributes&lt;/strong&gt; it demonstrates (GCA, Leadership, Role-Related Knowledge, Googleyness)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Meta signals&lt;/strong&gt; (Drives Results, Builds Relationships, Direction)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metrics&lt;/strong&gt; — always quantified&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A single story can serve 4-5 different behavioral questions depending on which lens you tell it through. Here's a checklist for a good behavioral story:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Conflict or ambiguity is explicit (no "everything went smoothly")&lt;/li&gt;
&lt;li&gt;[ ] Your specific action is 60% of the story (not "we")&lt;/li&gt;
&lt;li&gt;[ ] Result has at least one number ($, %, users, latency, etc.)&lt;/li&gt;
&lt;li&gt;[ ] Under 3 minutes when told out loud&lt;/li&gt;
&lt;li&gt;[ ] You can answer 3 follow-up "why" questions without inventing details&lt;/li&gt;
&lt;li&gt;[ ] It's from the last 2-3 years (not that one great project from 2018)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run a dry-run on yourself. Record audio. Most people's stories are 5 minutes and wander. Cut ruthlessly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Section 5: Follow-up automation without being annoying
&lt;/h2&gt;

&lt;p&gt;This is where the $40k mistake lives. You need a forcing function for follow-ups.&lt;/p&gt;

&lt;p&gt;My rule: &lt;strong&gt;every state transition creates a tickler with a hard date.&lt;/strong&gt; If 48 hours pass on a verbal offer without written confirmation, I get pinged. If 5 business days pass after an onsite without a recruiter update, I get pinged.&lt;/p&gt;

&lt;p&gt;In Notion, you can do this with a formula property that calculates &lt;code&gt;daysSinceLastContact&lt;/code&gt; and a filtered view that shows anything &amp;gt;= 5. In Linear, you'd use a scheduled issue. In a plain spreadsheet, conditional formatting on a &lt;code&gt;LAST_CONTACT&lt;/code&gt; column works.&lt;/p&gt;

&lt;p&gt;Follow-up email templates I actually send (keep them short):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight email"&gt;&lt;code&gt;&lt;span class="nt"&gt;Subject&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; Checking in — [Role] at [Company]&lt;/span&gt;

Hi [Recruiter],

Hope your week is going well. Wanted to check in on next steps 
for the [Role] position — last I heard was [specific last update] 
on [date].

I also wanted to mention I'm now in final stages with two other 
companies, with decisions expected by [date]. Happy to share 
more context if it helps with timing on your end.

Thanks,
[Name]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second paragraph is the leverage move. Never lie about competing offers, but never hide them either. Recruiters expect this. They have internal SLAs that depend on knowing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Section 6: The weekly pipeline review
&lt;/h2&gt;

&lt;p&gt;Every Sunday evening, 30 minutes. Non-negotiable. Here's the agenda:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;State check.&lt;/strong&gt; Walk every active application. What state is it in? What's the next action? Who owes whom a response?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overdue items.&lt;/strong&gt; Anything past its deadline gets actioned today or killed from the pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prep load for the week.&lt;/strong&gt; Count hours needed for upcoming loops. If it's &amp;gt;15, something has to give (push dates or drop a company).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comp spreadsheet refresh.&lt;/strong&gt; Any new data points? Any new offers to model?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New pipeline top-up.&lt;/strong&gt; If fewer than 3 companies are in active loops, apply to 5 more.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This review is what separates people who run 2 serious loops from people who run 8. The ones running 8 aren't working harder — they're running a process.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I have 6 final-round loops lined up for the next two weeks," a reader told me last month, "and for the first time I'm not panicking about losing track of anything." That's the goal state.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Section 7: Common failure modes I see
&lt;/h2&gt;

&lt;p&gt;After watching a dozen senior engineers run this play, here are the mistakes I see most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Front-loading prep at the wrong company.&lt;/strong&gt; You spend 40 hours prepping for the first onsite and burn out before the two you actually wanted. Pace yourself — spread prep evenly across the pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not asking for interviewer names.&lt;/strong&gt; Recruiters will share them if you ask. If they refuse, it's a yellow flag about the company's interview hygiene.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accepting verbal timelines.&lt;/strong&gt; "We'll get back to you next week" is not a commitment. Always ask for a specific date and confirm it in writing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Negotiating without leverage.&lt;/strong&gt; If you only have one offer, you have weak leverage. Always try to cluster your onsites so offers land within the same 2-week window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forgetting the backchannel.&lt;/strong&gt; For senior roles, 30-40% of hiring decisions involve informal reference checks. Make sure your last 2 managers know you're looking, and that they'd say nice things.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treating rejection as signal.&lt;/strong&gt; One FAANG rejection tells you almost nothing. The bar is noisy. I've seen the same candidate rejected from Meta and hired at Google in the same month.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Section 8: What I use now (and what I'm offering)
&lt;/h2&gt;

&lt;p&gt;After the $40k lesson, I spent about 3 weeks rebuilding my interview tracking system from scratch in Notion. I'd tried everything — spreadsheets, Trello, Airtable, a hand-rolled React app — and kept hitting the same walls: either too rigid, or too much maintenance overhead, or no way to link interviewer dossiers to companies to offers to follow-ups in one view.&lt;/p&gt;

&lt;p&gt;The version I landed on has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;pipeline database&lt;/strong&gt; with the full state machine above, color-coded by stage&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;compensation modeling page&lt;/strong&gt; with the 4-year vesting calculator built in as Notion formulas (no JavaScript needed)&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;interviewer dossier template&lt;/strong&gt; that links back to the company page&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;behavioral story bank&lt;/strong&gt; tagged against Amazon LPs, Google attributes, and Meta signals&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;follow-up tickler view&lt;/strong&gt; that surfaces anything overdue&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;weekly review template&lt;/strong&gt; with the 5-step agenda&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email and message templates&lt;/strong&gt; for every state transition (thank-yous, nudges, negotiation opens, competing-offer notifications)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;company research template&lt;/strong&gt; with the questions I always ask at the end of interviews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used this exact system for my most recent job search: 7 companies in active pipeline, 4 onsite loops, 3 offers, final comp ~$180k higher than my previous role. Nothing got dropped, no follow-ups missed.&lt;/p&gt;

&lt;p&gt;I systematized all of this into the &lt;strong&gt;FAANG Interview Tracker: Notion Template for Senior Engineers&lt;/strong&gt;. It's $19, one-time, and you duplicate it into your own Notion workspace in about 30 seconds. If you're actively running multiple loops right now, it'll pay for itself the first time it catches a follow-up you would have missed.&lt;/p&gt;

&lt;p&gt;If you'd rather build this yourself from the sections above, go for it — everything in this article is enough to get you 80% of the way there. The template is for the people who'd rather spend that weekend prepping system design instead of building Notion databases.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;[ ] Model your pipeline as a state machine, not a list&lt;/li&gt;
&lt;li&gt;[ ] Build a 4-year comp calculator that handles different vest schedules&lt;/li&gt;
&lt;li&gt;[ ] Build an interviewer dossier for every onsite&lt;/li&gt;
&lt;li&gt;[ ] Keep 12-15 STAR stories tagged against LPs/attributes&lt;/li&gt;
&lt;li&gt;[ ] Set up follow-up ticklers with hard deadlines&lt;/li&gt;
&lt;li&gt;[ ] Run a 30-minute weekly pipeline review&lt;/li&gt;
&lt;li&gt;[ ] Cluster onsites so offers land in the same window&lt;/li&gt;
&lt;li&gt;[ ] Always notify active recruiters the day a competing offer lands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good luck with the loops. The system matters more than the talent at this level — everyone interviewing at FAANG senior+ is smart. What separates offers from rejections is whether you ran the process or the process ran you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want the complete FAANG Interview Tracker I used? &lt;a href="https://komugipan.gumroad.com/l/ptyiek" rel="noopener noreferrer"&gt;View on Gumroad →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>notion</category>
      <category>interview</category>
    </item>
    <item>
      <title>How JP freelance devs invoice USD clients without losing ¥50k/month to FX and 適格請求書 errors (2026)</title>
      <dc:creator>komugi</dc:creator>
      <pubDate>Mon, 27 Apr 2026 01:00:04 +0000</pubDate>
      <link>https://forem.com/komugi_4236cc409d6f9157e7/how-jp-freelance-devs-invoice-usd-clients-without-losing-y50kmonth-to-fx-and-shi-ge-qing-qiu-shu-errors-2026-2ke1</link>
      <guid>https://forem.com/komugi_4236cc409d6f9157e7/how-jp-freelance-devs-invoice-usd-clients-without-losing-y50kmonth-to-fx-and-shi-ge-qing-qiu-shu-errors-2026-2ke1</guid>
      <description>&lt;p&gt;You just wrapped a three-month contract for a US startup. They paid $12,000 via Wise. Your Japanese accountant asks for the 適格請求書 (qualified invoice). You open the PDF you sent the client — it's in English, dollars only, no 登録番号, no 消費税 breakdown. You stare at it and realize you have to recreate six invoices retroactively, convert every line to JPY at the correct TTM rate for the issue date, and somehow make it all comply with the invoice system that started October 2023.&lt;/p&gt;

&lt;p&gt;This is the quiet tax on being a Japanese freelance developer with overseas clients. Nobody tells you about it at the tech meetups. You find out in March when your 税理士 sends a polite email titled 「ご確認のお願い」.&lt;/p&gt;

&lt;p&gt;I've been freelancing from Tokyo for six years, invoicing clients in USD, EUR, and JPY. The first year I lost roughly ¥600,000 in unclaimed 消費税 credits, FX slippage, and one client who refused to pay because my invoice format didn't match their AP system. This article is the system I wish I'd had on day one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real cost of getting JP freelance invoicing wrong
&lt;/h2&gt;

&lt;p&gt;Let me put numbers on it, because "be careful with invoices" is useless advice.&lt;/p&gt;

&lt;p&gt;Here's what actually bleeds money for a freelance dev billing ¥8M/year with a mix of JP and overseas clients:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mistake&lt;/th&gt;
&lt;th&gt;Typical annual cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Missing 登録番号 on invoices to JP clients&lt;/td&gt;
&lt;td&gt;¥200,000-¥400,000 (clients deduct 消費税 from your next invoice)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wrong FX rate on USD→JPY conversion for tax reporting&lt;/td&gt;
&lt;td&gt;¥50,000-¥150,000 (over-reported income)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No 消費税 line on JP client invoices&lt;/td&gt;
&lt;td&gt;¥80,000 per ¥1M invoice (client refuses to pay it separately)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Late payment because invoice format rejected by client AP&lt;/td&gt;
&lt;td&gt;30-60 day cashflow delay, sometimes write-offs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recreating invoices for 税務調査&lt;/td&gt;
&lt;td&gt;20-40 hours of your time&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The 適格請求書等保存方式 (invoice system) went live October 1, 2023. If you're not 登録事業者, your JP clients can't claim the consumption tax you charge them, and they will quietly route work to competitors who are registered. If you are registered but your invoice is missing required fields, the client can legally refuse the 消費税 portion.&lt;/p&gt;

&lt;p&gt;Meanwhile your overseas clients don't care about any of this — they want a clean PDF in USD with their PO number on it. So you need two invoice formats. Or rather, one invoice that speaks both languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a 適格請求書 actually requires in 2026
&lt;/h2&gt;

&lt;p&gt;Let's strip the bureaucracy. The National Tax Agency requires these six items on every qualified invoice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;適格請求書発行事業者の氏名又は名称 and 登録番号 (starts with T followed by 13 digits)&lt;/li&gt;
&lt;li&gt;取引年月日 (transaction date)&lt;/li&gt;
&lt;li&gt;取引内容 — and if it includes 軽減税率 items, mark them clearly&lt;/li&gt;
&lt;li&gt;税率ごとに区分して合計した対価の額 (subtotal per tax rate, tax-exclusive or inclusive)&lt;/li&gt;
&lt;li&gt;税率ごとの消費税額 (consumption tax amount per rate)&lt;/li&gt;
&lt;li&gt;書類の交付を受ける事業者の氏名又は名称 (client name)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For software dev work you'll almost always be at 標準税率 10%. 軽減税率 8% applies to food/drink and some newspapers — not your React work.&lt;/p&gt;

&lt;p&gt;Here's the minimum-viable qualified invoice structure as pseudo-schema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Invoice&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;issuer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;山田太郎&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;registration_no&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;T1234567890123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// required&lt;/span&gt;
    &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;東京都渋谷区...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;bank&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;branch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;account_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;holder_kana&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;株式会社サンプル 御中&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;invoice_no&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;issue_date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-03-31&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;line_items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;フロントエンド開発 (2026年3月分)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;unit_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;800000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;tax_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="nx"&gt;subtotal_by_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;10%&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;800000&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;tax_by_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;10%&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="mi"&gt;80000&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;880000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;payment_due&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-04-30&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;notes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;振込手数料は貴社ご負担でお願いいたします&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Miss the 登録番号 and it's not a qualified invoice. Miss the per-rate subtotal and it's not a qualified invoice. The form matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dual-currency problem nobody warns you about
&lt;/h2&gt;

&lt;p&gt;Here's the scenario that broke me in year one.&lt;/p&gt;

&lt;p&gt;Alex, a PM at a Seattle-based SaaS company, emails: "Can you invoice us $9,500 for March? Net 30, wire to your Japanese bank."&lt;/p&gt;

&lt;p&gt;Fine. You send a PDF: &lt;code&gt;INVOICE #2026-004 — $9,500.00 USD&lt;/code&gt;. They pay. Wise deposits ¥1,423,182 on April 15th.&lt;/p&gt;

&lt;p&gt;Now 確定申告 season arrives. Your accountant asks: "この売上、いつの為替レートで計上しましたか?"&lt;/p&gt;

&lt;p&gt;Correct answer per NTA rules: you should book the revenue at the TTM rate on the invoice issue date (or delivery date — there are a few acceptable methods, but you must pick one and be consistent). Not the date you got paid. Not the Wise rate. The published TTM from a major Japanese bank on the issue date.&lt;/p&gt;

&lt;p&gt;So for an invoice issued March 31, you look up MUFG's 3/31 TTM — let's say ¥149.80 — and book ¥1,423,100 as revenue. The ¥82 difference vs what actually hit your account becomes 為替差損益, reported separately.&lt;/p&gt;

&lt;p&gt;If you only stored the USD amount on the invoice, you're now reconstructing exchange rates months later for every single invoice. I did this my first year. It took a weekend.&lt;/p&gt;

&lt;p&gt;The fix: put &lt;strong&gt;both currencies on the invoice at issue time&lt;/strong&gt;. Lock the rate in writing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Subtotal:          USD 9,500.00   (JPY 1,423,100)
JCT (N/A - export):    USD 0.00   (JPY         0)
Total:             USD 9,500.00   (JPY 1,423,100)

FX rate locked at issue date (2026-03-31): 1 USD = 149.80 JPY
Source: MUFG TTM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two benefits: your accountant has everything they need on one document, and if the client disputes the JPY conversion later (rare but happens), you have a documented source.&lt;/p&gt;

&lt;p&gt;For cross-border B2B software services to a non-resident company, 消費税 is usually 0% (輸出免税) — but you still need to document it as such, and keep proof the client is non-resident. A note like &lt;code&gt;JCT: Exempt (export of services under Article 7 of the Consumption Tax Act)&lt;/code&gt; on the invoice saves arguments later.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist I run through before sending any invoice
&lt;/h2&gt;

&lt;p&gt;I taped this to the side of my monitor for a year. Still use it mentally today.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Invoice number follows a sequence (no gaps, no duplicates — NTA hates gaps)&lt;/li&gt;
&lt;li&gt;[ ] Issue date is correct and matches the period the work was delivered in&lt;/li&gt;
&lt;li&gt;[ ] My 登録番号 (T + 13 digits) is present and correct&lt;/li&gt;
&lt;li&gt;[ ] My legal name matches exactly what's registered with NTA&lt;/li&gt;
&lt;li&gt;[ ] Client name includes 御中 (for companies) or 様 (for individuals)&lt;/li&gt;
&lt;li&gt;[ ] Line items describe the work specifically (not just "consulting")&lt;/li&gt;
&lt;li&gt;[ ] Tax rate is shown per line AND subtotaled per rate&lt;/li&gt;
&lt;li&gt;[ ] 消費税額 is calculated with consistent rounding (round per rate, not per line — this changed in 2023)&lt;/li&gt;
&lt;li&gt;[ ] For overseas clients: both currencies shown, FX rate + source noted&lt;/li&gt;
&lt;li&gt;[ ] For overseas clients: 輸出免税 note included if applicable&lt;/li&gt;
&lt;li&gt;[ ] Bank details in 半角 numbers, account holder in カタカナ&lt;/li&gt;
&lt;li&gt;[ ] Payment terms explicit (Net 30, etc.) with due date calculated&lt;/li&gt;
&lt;li&gt;[ ] 振込手数料 responsibility stated&lt;/li&gt;
&lt;li&gt;[ ] PDF filename follows a pattern (&lt;code&gt;INV-2026-004_ClientName.pdf&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Saved to archive folder before sending&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one saved me during a 税務調査 preliminary inquiry. Every invoice, in order, in a folder, named consistently. The inspector asked for three specific invoices; I had them in ten seconds. The meeting was short.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building it in Excel (and why I stopped using online invoice SaaS)
&lt;/h2&gt;

&lt;p&gt;I tried Freee, MakeLeaps, Misoca, and two US-based invoicing SaaS products. They all had one of these problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Great at JP invoices, terrible at USD (or vice versa)&lt;/li&gt;
&lt;li&gt;Couldn't handle dual-currency display on one invoice&lt;/li&gt;
&lt;li&gt;Charged ¥1,000-¥3,000/month forever&lt;/li&gt;
&lt;li&gt;Lock-in: if you stop paying, your historical invoices become hard to export cleanly&lt;/li&gt;
&lt;li&gt;Couldn't customize the layout to match a specific client's AP requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Excel (or Numbers, or LibreOffice Calc) wins for freelance devs because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One file per invoice, archived forever, readable in 10 years&lt;/li&gt;
&lt;li&gt;Zero recurring cost&lt;/li&gt;
&lt;li&gt;Fully customizable — every client wants something slightly different&lt;/li&gt;
&lt;li&gt;Formulas handle tax math and FX conversion automatically&lt;/li&gt;
&lt;li&gt;Export to PDF is one click&lt;/li&gt;
&lt;li&gt;Your accountant can open it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core formulas you need are simple. Here's the 消費税 calculation that's compliant with post-2023 rounding rules:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vb"&gt;&lt;code&gt;&lt;span class="c1"&gt;' Subtotal per rate (sum of line items at that rate)&lt;/span&gt;
&lt;span class="n"&gt;B20&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SUMIF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;D5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;D15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;C5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;C15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;' Tax per rate — round DOWN at the rate level, not per line&lt;/span&gt;
&lt;span class="n"&gt;B21&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ROUNDDOWN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B20&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;' Grand total&lt;/span&gt;
&lt;span class="n"&gt;B22&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;B20&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;B21&lt;/span&gt;

&lt;span class="c1"&gt;' Dual currency display&lt;/span&gt;
&lt;span class="n"&gt;C20&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;B20&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;FX_RATE&lt;/span&gt;   &lt;span class="c1"&gt;' where $FX_RATE is the locked rate cell&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;ROUNDDOWN&lt;/code&gt; at the rate subtotal level is the post-invoice-system standard. Rounding per line item is still allowed if you're consistent, but rate-level rounding is cleaner and matches most 税理士 software.&lt;/p&gt;

&lt;p&gt;For the FX lookup, I keep a tiny reference sheet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;| Date       | USD/JPY TTM | Source |
|------------|-------------|--------|
| 2026-01-31 | 151.20      | MUFG   |
| 2026-02-28 | 150.45      | MUFG   |
| 2026-03-31 | 149.80      | MUFG   |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And a &lt;code&gt;VLOOKUP&lt;/code&gt; pulls the right rate based on the invoice date. One source, consistent method, auditable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The client-facing part nobody teaches devs
&lt;/h2&gt;

&lt;p&gt;Technical compliance is half the job. The other half is how the invoice lands in the client's AP workflow. Here's what I learned the hard way:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Japanese client AP departments&lt;/strong&gt; want: PDF attached to email, Subject line containing 【ご請求書】 and your company name, invoice filename in Japanese or ASCII (never mixed), and a polite 本文 that restates the invoice number, amount, and due date. They file emails by subject. If your subject is "March invoice", you become invisible.&lt;/p&gt;

&lt;p&gt;Example email body that gets paid on time:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;株式会社サンプル&lt;br&gt;
経理ご担当者様&lt;/p&gt;

&lt;p&gt;いつも大変お世話になっております。山田です。&lt;/p&gt;

&lt;p&gt;2026年3月分のご請求書をお送りいたします。&lt;br&gt;
ご査収のほどよろしくお願いいたします。&lt;/p&gt;

&lt;p&gt;■請求書番号:2026-004&lt;br&gt;
■請求金額:¥880,000(税込)&lt;br&gt;
■お支払期限:2026年4月30日&lt;/p&gt;

&lt;p&gt;何かご不明点がございましたらお気軽にご連絡ください。&lt;/p&gt;

&lt;p&gt;山田 太郎&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;US/EU client AP departments&lt;/strong&gt; want: invoice number in the email subject, PO number on the invoice if they gave you one, payment terms in plain English ("Net 30, due April 30, 2026"), and wire instructions formatted exactly how their bank expects. Include SWIFT/BIC, intermediary bank if needed, and IBAN-equivalent (for JP banks, the branch + account number works but label it clearly).&lt;/p&gt;

&lt;p&gt;Mix these up and you get paid 30 days late. I once sent a US client an invoice with 【ご請求書】 in the subject. Their Outlook rendered it as mojibake and it went to spam. Learned that one on day 47 of waiting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part most freelancers skip: the archive
&lt;/h2&gt;

&lt;p&gt;The NTA requires you to retain invoices (both issued and received) for &lt;strong&gt;seven years&lt;/strong&gt; — ten years if you're carrying forward losses. Post-2024, electronic invoices sent/received electronically must be stored electronically with certain searchability requirements (電子帳簿保存法).&lt;/p&gt;

&lt;p&gt;Minimum viable archive structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/invoices
  /2026
    /issued
      INV-2026-001_ClientA.pdf
      INV-2026-001_ClientA.xlsx
      INV-2026-002_ClientB.pdf
      ...
    /received
      2026-01-15_AWS_[vendor_reg_no].pdf
      2026-01-20_GitHub_[vendor_reg_no].pdf
      ...
  /_index.xlsx   ← searchable by date, amount, client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;_index.xlsx&lt;/code&gt; is the cheat code. Columns: 日付, 取引先, 金額(税抜), 消費税, 金額(税込), 登録番号, ファイル名, 支払状況. When your 税理士 asks for "that invoice from the Kyoto client in August", you filter and find it in five seconds.&lt;/p&gt;

&lt;p&gt;For received invoices from vendors, check if their 登録番号 is present. If it's missing from a vendor you regularly use, ask them politely — if they're not registered, you can't claim the consumption tax on what they charge you, and you need to plan around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it all together
&lt;/h2&gt;

&lt;p&gt;Over six years this evolved into a system with specific pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;20 Excel templates covering the variations I actually hit: domestic JP only, JP + overseas mix, USD-primary, EUR-primary, monthly retainer, milestone-based, hourly, 源泉徴収対応, 軽減税率 mixed (rare for devs but happens if you bill meals back), and a few client-specific layouts that matched common JP enterprise AP formats&lt;/li&gt;
&lt;li&gt;Pre-built 適格請求書 fields with 登録番号 placeholder and per-rate subtotaling baked into formulas&lt;/li&gt;
&lt;li&gt;Dual-currency display with FX rate lookup from a reference sheet&lt;/li&gt;
&lt;li&gt;English + Japanese labels side-by-side so one template serves both client types&lt;/li&gt;
&lt;li&gt;The archive index spreadsheet&lt;/li&gt;
&lt;li&gt;A short PDF cheat sheet covering the checklist, the email templates, and the 確定申告 mapping (which cells feed which lines on 収支内訳書)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I systematized all of this into &lt;strong&gt;Dual-Currency Invoice Templates for JP Freelance Devs&lt;/strong&gt; — 20 Excel templates, 適格請求書 ready, dual-currency built in, no subscription, works offline, yours forever. Every template I'm actually using in 2026 to invoice clients in Tokyo, San Francisco, and Berlin from the same laptop.&lt;/p&gt;

&lt;p&gt;If you're a freelance dev in Japan billing any mix of domestic and overseas clients, this saves you the weekend I lost rebuilding six months of invoices, plus the ¥600k I lost in year one to FX mistakes and missing fields. At ¥3,000-ish it pays for itself on the first invoice that doesn't get rejected.&lt;/p&gt;

&lt;p&gt;Get it here: &lt;a href="https://komugipan.gumroad.com/l/nvarbz" rel="noopener noreferrer"&gt;Dual-Currency Invoice Templates on Gumroad →&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want the complete Dual-Currency Invoice Template pack I used? &lt;a href="https://komugipan.gumroad.com/l/nvarbz" rel="noopener noreferrer"&gt;View on Gumroad →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>excel</category>
      <category>productivity</category>
      <category>solopreneur</category>
    </item>
    <item>
      <title>How couples can split bills, chores &amp; date nights fairly in Notion (2026)</title>
      <dc:creator>komugi</dc:creator>
      <pubDate>Sun, 26 Apr 2026 01:00:04 +0000</pubDate>
      <link>https://forem.com/komugi_4236cc409d6f9157e7/how-couples-can-split-bills-chores-date-nights-fairly-in-notion-2026-5gjk</link>
      <guid>https://forem.com/komugi_4236cc409d6f9157e7/how-couples-can-split-bills-chores-date-nights-fairly-in-notion-2026-5gjk</guid>
      <description>&lt;p&gt;It's 11pm on a Tuesday. Mika is folding laundry. Her partner Ren is on the couch scrolling. She's done dishes 4 nights in a row. He paid the electric bill last week and thinks they're even. Neither of them is actually keeping score — but both of them feel like they're losing.&lt;/p&gt;

&lt;p&gt;This is how most cohabiting couples fight. Not about the big stuff. About the invisible ledger that nobody agreed to but everyone is tracking in their head.&lt;/p&gt;

&lt;p&gt;I've been living with my partner for 6 years. For the first 2, we had the same fight on rotation: "I feel like I'm doing more." The cost of not fixing it was brutal — we spent maybe 3 hours a week arguing about money and chores. That's ~150 hours a year of relationship damage over something a spreadsheet could solve. One couple I know actually split a $4,200 vacation 50/50 even though one earned 3x the other, then spent the whole trip resenting each other.&lt;/p&gt;

&lt;p&gt;This article is the system I built in Notion to make it stop. I'll show you the exact databases, formulas, and weekly ritual. If you want the full pre-built template at the end, great. If you want to build it yourself from this post, also great — everything you need is below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "50/50" is the wrong default for couples
&lt;/h2&gt;

&lt;p&gt;Split-the-bill apps (Splitwise, Honeydue) assume equal contribution is fair. For roommates, that's fine. For couples with different incomes, schedules, or chore tolerances, 50/50 is often the &lt;em&gt;most&lt;/em&gt; unfair option dressed up as neutral.&lt;/p&gt;

&lt;p&gt;Three fairness models actually used by couples I've interviewed:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;How it works&lt;/th&gt;
&lt;th&gt;Best when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Flat 50/50&lt;/td&gt;
&lt;td&gt;Every expense split equally&lt;/td&gt;
&lt;td&gt;Incomes within 20% of each other&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proportional&lt;/td&gt;
&lt;td&gt;Split by income ratio (e.g., 60/40)&lt;/td&gt;
&lt;td&gt;Significant income gap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yours/Mine/Ours&lt;/td&gt;
&lt;td&gt;Each contributes fixed % to joint account&lt;/td&gt;
&lt;td&gt;You want financial independence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Notion system I'll describe supports all three. You pick one per expense category — rent might be proportional, groceries might be 50/50, streaming services might be "whoever signed up pays."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Rule I learned the hard way: the fairness model matters less than the fact that you both agreed to it explicitly. Ambiguity is the enemy, not inequality.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 1: The Shared Expense Ledger (the money half)
&lt;/h2&gt;

&lt;p&gt;The first database is an expense log. Every shared purchase goes in. Here are the properties I use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Name&lt;/code&gt; (title) — "Costco run," "Electric bill July"&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Amount&lt;/code&gt; (number, currency)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Paid by&lt;/code&gt; (select: Partner A, Partner B)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Category&lt;/code&gt; (select: Rent, Utilities, Groceries, Dining, Subscriptions, Travel, Other)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Split method&lt;/code&gt; (select: 50/50, Proportional, 100% A, 100% B)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Date&lt;/code&gt; (date)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Settled&lt;/code&gt; (checkbox)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then two formula properties do the actual math. Here's the &lt;code&gt;A owes&lt;/code&gt; formula, assuming a 60/40 proportional split where A earns more:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Split method&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;50/50&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Paid by&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Amount&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&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="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Split method&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Proportional&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Paid by&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Amount&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Amount&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.6&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Amount&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Split method&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;100% A&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Paid by&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Amount&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do the mirror version for &lt;code&gt;B owes&lt;/code&gt;. Now a rollup at the database level sums &lt;code&gt;A owes - B owes&lt;/code&gt; and tells you who owes whom, in one number, right now.&lt;/p&gt;

&lt;p&gt;The key UX detail: &lt;strong&gt;a "Settle up" button view&lt;/strong&gt; filtered to &lt;code&gt;Settled = false&lt;/code&gt;. Once a month, one partner Venmos the other the net amount, then selects all rows and checks Settled. Done. No app to download, no subscription, no data leaving Notion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real example
&lt;/h3&gt;

&lt;p&gt;Ren and Mika earn $90k and $60k respectively — a 60/40 split for rent and utilities, 50/50 for groceries and dining (they eat about the same). Month of July:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rent $2,400, paid by Ren, proportional → Mika owes Ren $960&lt;/li&gt;
&lt;li&gt;Electric $140, paid by Mika, proportional → Ren owes Mika $84&lt;/li&gt;
&lt;li&gt;Costco $220, paid by Ren, 50/50 → Mika owes Ren $110&lt;/li&gt;
&lt;li&gt;Sushi date $95, paid by Mika, 50/50 → Ren owes Mika $47.50&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Net: Mika owes Ren &lt;strong&gt;$938.50&lt;/strong&gt;. One transfer. No arguments about who got the expensive cheese.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: The Chore Fairness Tracker (the invisible-labor half)
&lt;/h2&gt;

&lt;p&gt;Money is the easy half because it's already numerical. Chores are harder because nobody logs them and the mental load is invisible. The solution isn't a punishing chore chart — it's a lightweight weight system.&lt;/p&gt;

&lt;p&gt;Build a Chores database with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Task&lt;/code&gt; (title)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Assigned to&lt;/code&gt; (select: A, B, Either)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Frequency&lt;/code&gt; (select: Daily, Weekly, Monthly, As-needed)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Weight&lt;/code&gt; (number, 1–5) — how draining/time-consuming it is&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Last done&lt;/code&gt; (date)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Done by&lt;/code&gt; (select, updated each completion)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Weight is the whole trick. Taking out the trash is a 1. Deep-cleaning the bathroom is a 4. Managing the finances, planning meals for the week, remembering the in-laws' birthdays — these are 4s and 5s even though they have no physical output. &lt;strong&gt;If you don't weight mental-load tasks, your tracker will lie to you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then a monthly rollup view groups by &lt;code&gt;Done by&lt;/code&gt; and sums &lt;code&gt;Weight&lt;/code&gt;. If A did 47 weighted points and B did 43 last month, you're within noise. If A did 60 and B did 20, you have a conversation with data instead of feelings.&lt;/p&gt;

&lt;h3&gt;
  
  
  The chore inventory checklist
&lt;/h3&gt;

&lt;p&gt;Before you start tracking, sit down together and list &lt;em&gt;everything&lt;/em&gt;. Most couples miss half of it on the first pass. Use this prompt list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Cooking (planning, shopping, prep, cleanup — four separate tasks)&lt;/li&gt;
&lt;li&gt;[ ] Laundry (wash, fold, put away)&lt;/li&gt;
&lt;li&gt;[ ] Bathroom cleaning&lt;/li&gt;
&lt;li&gt;[ ] Kitchen deep clean&lt;/li&gt;
&lt;li&gt;[ ] Floors (vacuum, mop)&lt;/li&gt;
&lt;li&gt;[ ] Trash &amp;amp; recycling&lt;/li&gt;
&lt;li&gt;[ ] Bills &amp;amp; finance admin&lt;/li&gt;
&lt;li&gt;[ ] Scheduling appointments (doctor, dentist, car)&lt;/li&gt;
&lt;li&gt;[ ] Gift buying (family, friends, each other)&lt;/li&gt;
&lt;li&gt;[ ] Social calendar management&lt;/li&gt;
&lt;li&gt;[ ] Plant/pet care&lt;/li&gt;
&lt;li&gt;[ ] Car maintenance&lt;/li&gt;
&lt;li&gt;[ ] Home repairs &amp;amp; calling contractors&lt;/li&gt;
&lt;li&gt;[ ] Mail &amp;amp; packages&lt;/li&gt;
&lt;li&gt;[ ] Tax prep&lt;/li&gt;
&lt;li&gt;[ ] Travel planning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last 8 items are almost always where imbalance hides. One partner thinks they're doing "half the chores" because they do half the dishes, while the other is running the entire operational backend of the household.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: The Date Night Engine
&lt;/h2&gt;

&lt;p&gt;Couples who've been together 3+ years stop dating. Not because they stop loving each other — because planning a date becomes another cognitive task, and both people are waiting for the other to do it. So you default to takeout and Netflix for the 200th time.&lt;/p&gt;

&lt;p&gt;Fix this with two small databases:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Date Ideas&lt;/strong&gt; (the backlog):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Idea&lt;/code&gt; (title)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Type&lt;/code&gt; (select: At-home, Restaurant, Activity, Travel, Adventurous)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Estimated cost&lt;/code&gt; (select: $, $$, $$$)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Effort&lt;/code&gt; (select: Low, Medium, High)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Suggested by&lt;/code&gt; (select: A, B)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Tried?&lt;/code&gt; (checkbox)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Rating&lt;/code&gt; (1–5, after trying)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Date Log&lt;/strong&gt; (what you actually did):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Date&lt;/code&gt; (date)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;What we did&lt;/code&gt; (relation → Date Ideas)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Notes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Planned by&lt;/code&gt; (select)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;Planned by&lt;/code&gt; field is the second trick. At month-end, if the same name appears 4 times in a row, that's a conversation. Planning is labor.&lt;/p&gt;

&lt;h3&gt;
  
  
  The rotating planner rule
&lt;/h3&gt;

&lt;p&gt;One couple I showed this to adopted a "whoever's name was on last week's date, the other plans next week" rule. Low stakes, automatic fairness, zero fights. They went from 1 date a month to 3 in the first 60 days just because the bottleneck (deciding &lt;em&gt;who decides&lt;/em&gt;) was removed.&lt;/p&gt;

&lt;p&gt;Stock the idea backlog with at least 20 items before you start. Don't try to generate ideas on Friday at 6pm — that's the exact failure mode you're solving.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: The Weekly 15-Minute Sync
&lt;/h2&gt;

&lt;p&gt;A system without a ritual rots. The ritual that holds this together is a 15-minute Sunday sync. I've run it for 4 years. Here's the agenda, which also lives in Notion as a recurring template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Sunday Sync – [Date]&lt;/span&gt;

&lt;span class="gu"&gt;### 1. Money (5 min)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Review new expenses in ledger
&lt;span class="p"&gt;-&lt;/span&gt; Current balance: who owes whom?
&lt;span class="p"&gt;-&lt;/span&gt; Any big purchases coming up this week?

&lt;span class="gu"&gt;### 2. Chores (3 min)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Glance at monthly weight totals
&lt;span class="p"&gt;-&lt;/span&gt; Anything felt unfair this week? Name it.
&lt;span class="p"&gt;-&lt;/span&gt; Swap/adjust for next week?

&lt;span class="gu"&gt;### 3. Calendar (3 min)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Each person's busy days
&lt;span class="p"&gt;-&lt;/span&gt; Shared commitments
&lt;span class="p"&gt;-&lt;/span&gt; Who's cooking which nights?

&lt;span class="gu"&gt;### 4. Us (4 min)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; One thing you appreciated this week
&lt;span class="p"&gt;-&lt;/span&gt; One friction point (no defending, just logging)
&lt;span class="p"&gt;-&lt;/span&gt; Next date night: when, who's planning?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rules for the sync:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Phones down, laptop open to the dashboard only.&lt;/li&gt;
&lt;li&gt;No interrupting during the "friction point" — the other person logs it, asks one clarifying question, and that's it.&lt;/li&gt;
&lt;li&gt;If something is too big for 15 minutes, it gets scheduled as a separate conversation, not jammed into the sync.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The sync isn't therapy. It's maintenance. Treating it like a standup instead of a heart-to-heart is why it actually happens every week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: The Dashboard (tying it all together)
&lt;/h2&gt;

&lt;p&gt;The final piece is a single Notion page — the Command Center — that surfaces the signal from all four databases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Money panel&lt;/strong&gt;: current net balance, expenses this month, button to add new expense&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chore panel&lt;/strong&gt;: this month's weight totals per person, overdue tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Date panel&lt;/strong&gt;: last date + days since, next planned date, 3 random ideas from backlog&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sync panel&lt;/strong&gt;: last sync date, next sync scheduled, template link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use linked database views, not duplicates. One source of truth per data type. Put the whole thing on the couple's home screen — literally. Notion on iPad, permanently open on the kitchen counter, works better than any app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Notion and not Splitwise + Todoist + Google Calendar
&lt;/h3&gt;

&lt;p&gt;I tried the stack-of-apps approach for a year. Four reasons it failed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Context switching.&lt;/strong&gt; Finance in one app, chores in another, dates in a third. Nobody opens three apps on a Tuesday night.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No cross-linking.&lt;/strong&gt; A date night is also an expense and also a "planned by" chore. In separate apps, you log it three times or zero times. Zero wins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your partner won't adopt a developer-y tool.&lt;/strong&gt; Notion has a visual DB view that looks like a spreadsheet. That's the line of acceptability for most non-technical partners.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No customization of fairness.&lt;/strong&gt; Splitwise can't do "60/40 on rent but 50/50 on groceries, except streaming which is 100% mine." Notion formulas can.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The tradeoff: Notion has no bank integration. You type expenses in manually or forward receipts to an email-to-database automation. For a two-person household with ~30 shared transactions a month, manual entry takes 5 minutes a week. Cheaper than a fight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Edge cases most tutorials skip
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;One partner earns way more and wants to cover everything.&lt;/strong&gt; Fine — use split method "100% A" for most categories. The ledger still logs everything, so if circumstances change later, you have the baseline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You have a joint account.&lt;/strong&gt; Add a third &lt;code&gt;Paid by&lt;/code&gt; option: "Joint." Create a formula that treats joint-paid expenses as zero-sum (neither owes the other), and track joint-account contributions as a separate monthly recurring expense.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You're saving for something together.&lt;/strong&gt; Add a Goals database with target, current, and monthly contribution. Link contributions to the expense ledger as a "Savings" category paid by each partner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One of you travels for work.&lt;/strong&gt; Add a &lt;code&gt;While traveling&lt;/code&gt; checkbox to chores. If it's checked during the month, exclude from fairness totals — the traveler wasn't home to do them and shouldn't be docked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fights about the system itself.&lt;/strong&gt; If one partner feels surveilled, dial back the chore tracking. Keep the money ledger (less emotionally charged) and the date night engine (pure upside). Add chores back in 3 months if the other two land well.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this actually changes
&lt;/h2&gt;

&lt;p&gt;After 6 months of running this, the couples I've shared it with report:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Money fights down ~80% (from "weekly" to "basically never")&lt;/li&gt;
&lt;li&gt;Date nights up 2-3x (from the planner-rotation rule alone)&lt;/li&gt;
&lt;li&gt;One partner discovering they were doing 65% of weighted chores and renegotiating&lt;/li&gt;
&lt;li&gt;One partner discovering they &lt;em&gt;weren't&lt;/em&gt; doing as much as they thought, and shutting up about it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system doesn't make the relationship — you do. But it removes the 3 hours a week of friction that was standing between you and actually enjoying each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full template
&lt;/h2&gt;

&lt;p&gt;Building everything above from scratch takes about 6–8 hours if you know Notion formulas, longer if you don't. The formulas for proportional splitting with conditional logic are where most people get stuck — one wrong bracket and your ledger tells you your partner owes you negative money.&lt;/p&gt;

&lt;p&gt;I systematized all of this into the &lt;strong&gt;Couples Command Center in Notion&lt;/strong&gt; — a pre-built template with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All 4 databases pre-wired with the formulas above (50/50, proportional, and yours/mine/ours modes all working out of the box)&lt;/li&gt;
&lt;li&gt;The Sunday Sync template with the 15-minute agenda&lt;/li&gt;
&lt;li&gt;A seeded Date Ideas backlog with 60+ ideas across all categories and price points&lt;/li&gt;
&lt;li&gt;A seeded chore library with 40+ weighted tasks you can edit&lt;/li&gt;
&lt;li&gt;The unified dashboard page with linked views&lt;/li&gt;
&lt;li&gt;Setup guide (20 minutes from duplicate to first entry)&lt;/li&gt;
&lt;li&gt;Both partners' onboarding walkthrough so the non-Notion-person isn't lost&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's $25, one-time, yours to duplicate into your workspace and customize. Cheaper than one dinner out, and designed to make the next 100 dinners out actually pleasant.&lt;/p&gt;

&lt;p&gt;If you'd rather build it yourself from this article — seriously, go for it. Everything you need is above. If you want the shortcut and the pre-seeded content, the template is below.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want the complete Couples Command Center I used? &lt;a href="https://komugipan.gumroad.com/l/dtvbkw" rel="noopener noreferrer"&gt;View on Gumroad →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>notion</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How solo web designers lose $8k/year to bad client tracking (2026 fix)</title>
      <dc:creator>komugi</dc:creator>
      <pubDate>Sat, 25 Apr 2026 01:00:04 +0000</pubDate>
      <link>https://forem.com/komugi_4236cc409d6f9157e7/how-solo-web-designers-lose-8kyear-to-bad-client-tracking-2026-fix-5884</link>
      <guid>https://forem.com/komugi_4236cc409d6f9157e7/how-solo-web-designers-lose-8kyear-to-bad-client-tracking-2026-fix-5884</guid>
      <description>&lt;p&gt;It's Tuesday at 11 PM. You just finished a landing page revision for a client, opened Gmail, and saw three unread threads from last month. One is asking for a quote you never sent. Another is a client wondering where their invoice went. The third is a referral that went cold because you never replied.&lt;/p&gt;

&lt;p&gt;I've been there. For the first two years of freelancing, I ran my web design business out of Gmail stars, a messy Trello board, and a Google Sheet called &lt;code&gt;invoices_final_v3&lt;/code&gt;. I thought I was organized. Then I did the math.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real cost of not having a client system
&lt;/h2&gt;

&lt;p&gt;I audited my 2023 pipeline and found this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;4 leads ghosted because I replied &amp;gt;72 hours late&lt;/strong&gt; — average project value $2,200 = &lt;strong&gt;$8,800 lost&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;6 invoices paid 30+ days late&lt;/strong&gt; because I forgot to send reminders — cash flow gap of ~$14k across the year&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;11 hours/week&lt;/strong&gt; spent digging through email, Figma links, and Slack DMs to find project context&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2 scope creep incidents&lt;/strong&gt; where I did ~$1,500 of unpaid work because I never wrote down what was agreed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's roughly &lt;strong&gt;$10k in missed revenue&lt;/strong&gt; plus &lt;strong&gt;~570 hours of admin&lt;/strong&gt; in one year. For a solo designer charging $75/hr, that admin time alone is worth $42k if you could bill it instead.&lt;/p&gt;

&lt;p&gt;This article is the system I wish I'd built in year one. It's a Notion-based Client OS with four connected databases, a weekly review ritual borrowed from GTD, and an invoice pipeline that actually gets paid on time. No SaaS subscriptions, no Zapier bills, no Honeybook lock-in.&lt;/p&gt;

&lt;p&gt;Let's build it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Notion (and not Honeybook, Dubsado, or a real CRM)
&lt;/h2&gt;

&lt;p&gt;Before I get emails: yes, Honeybook and Dubsado exist. I used Dubsado for 8 months. Here's why I migrated out:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Monthly cost&lt;/th&gt;
&lt;th&gt;Flexibility&lt;/th&gt;
&lt;th&gt;Learning curve&lt;/th&gt;
&lt;th&gt;Client-facing UX&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Honeybook&lt;/td&gt;
&lt;td&gt;$39/mo&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Polished&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dubsado&lt;/td&gt;
&lt;td&gt;$40/mo&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Dated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bonsai&lt;/td&gt;
&lt;td&gt;$25/mo&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;OK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notion + Stripe&lt;/td&gt;
&lt;td&gt;$10/mo&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;DIY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Airtable + Stripe&lt;/td&gt;
&lt;td&gt;$20/mo&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;DIY&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a solo designer doing 2-5 projects per month, the SaaS tools cost $400-500/year and force you into their workflow. Notion costs ~$10/mo, bends to how &lt;em&gt;you&lt;/em&gt; actually work, and lets you embed Figma, Loom, and Stripe payment links directly in project pages.&lt;/p&gt;

&lt;p&gt;The tradeoff: you have to build it. That's what the rest of this post is for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four databases every freelance Client OS needs
&lt;/h2&gt;

&lt;p&gt;At minimum, a solo designer's system needs four linked databases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Leads&lt;/strong&gt; — everyone who inquired, including cold ones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clients&lt;/strong&gt; — leads that converted, one row per company&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Projects&lt;/strong&gt; — one row per scoped engagement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invoices&lt;/strong&gt; — one row per invoice, linked to a project&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's how they relate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Lead (1) ──converts──▶ Client (1) ──has many──▶ Projects (N) ──has many──▶ Invoices (N)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key insight most people miss: &lt;strong&gt;Leads and Clients should be separate databases&lt;/strong&gt;. Why? Because 60-70% of your leads won't convert, and you don't want dead leads polluting your active client list. But you also don't want to delete them — cold leads often reheat 6 months later.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lead database schema
&lt;/h3&gt;

&lt;p&gt;Minimum fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name (title)&lt;/li&gt;
&lt;li&gt;Source (select: Referral, Twitter, Cold email, Webflow showcase, etc.)&lt;/li&gt;
&lt;li&gt;Inquiry date (date)&lt;/li&gt;
&lt;li&gt;Stage (select: New → Replied → Call booked → Proposal sent → Won / Lost / Ghosted)&lt;/li&gt;
&lt;li&gt;Project value estimate (number, currency)&lt;/li&gt;
&lt;li&gt;Next action (text)&lt;/li&gt;
&lt;li&gt;Next action date (date)&lt;/li&gt;
&lt;li&gt;Notes (text)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The two fields that changed my life: &lt;strong&gt;Next action&lt;/strong&gt; and &lt;strong&gt;Next action date&lt;/strong&gt;. Every lead always has a defined next step and a date. If it doesn't, it's not a lead — it's a wish.&lt;/p&gt;

&lt;h3&gt;
  
  
  Client database schema
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Company name (title)&lt;/li&gt;
&lt;li&gt;Primary contact (text)&lt;/li&gt;
&lt;li&gt;Email, timezone, preferred communication (Slack / email / Loom)&lt;/li&gt;
&lt;li&gt;Relationship status (select: Active, Paused, Past, Do not work with again)&lt;/li&gt;
&lt;li&gt;LTV (rollup from linked invoices)&lt;/li&gt;
&lt;li&gt;Projects (relation → Projects DB)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;Do not work with again&lt;/code&gt; tag sounds petty. It's not. Three months in, you will have a client who pays late, scope-creeps, and responds to every Figma comment with "can we jump on a call?" Flag them. Future-you will thank present-you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Projects database schema
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Project name (title)&lt;/li&gt;
&lt;li&gt;Client (relation → Clients)&lt;/li&gt;
&lt;li&gt;Status (select: Proposed, In progress, In review, Complete, On hold)&lt;/li&gt;
&lt;li&gt;Deliverables (multi-select or checkbox list)&lt;/li&gt;
&lt;li&gt;Start date, deadline&lt;/li&gt;
&lt;li&gt;Quoted amount, quoted hours&lt;/li&gt;
&lt;li&gt;Actual hours (rollup from time entries, or manual)&lt;/li&gt;
&lt;li&gt;Figma link, GitHub repo, staging URL&lt;/li&gt;
&lt;li&gt;Scope doc (text — paste the agreed scope here, dated)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Invoices database schema
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Invoice number (title, format: &lt;code&gt;INV-2026-001&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Project (relation)&lt;/li&gt;
&lt;li&gt;Amount, tax, total&lt;/li&gt;
&lt;li&gt;Issued date, due date, paid date&lt;/li&gt;
&lt;li&gt;Status (select: Draft, Sent, Paid, Overdue, Disputed)&lt;/li&gt;
&lt;li&gt;Stripe/payment link&lt;/li&gt;
&lt;li&gt;PDF (file attachment)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The SPIN-style intake form that filters bad leads
&lt;/h2&gt;

&lt;p&gt;Most solo designers book every discovery call. That's a mistake. An hour on Zoom with a tire-kicker is an hour you could've spent on billable work.&lt;/p&gt;

&lt;p&gt;Borrow from the SPIN selling framework (Situation, Problem, Implication, Need-payoff). Before booking a call, send a 6-question form:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;What does your business do? (Situation)&lt;/li&gt;
&lt;li&gt;What's not working about your current site? (Problem)&lt;/li&gt;
&lt;li&gt;What happens if it stays broken for another 6 months? (Implication)&lt;/li&gt;
&lt;li&gt;What would a successful redesign unlock for you? (Need-payoff)&lt;/li&gt;
&lt;li&gt;What's your budget range? ($2-5k / $5-10k / $10k+ / Not sure)&lt;/li&gt;
&lt;li&gt;When do you need this live?&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;Question 5 is the filter. If someone selects "Not sure" &lt;strong&gt;and&lt;/strong&gt; their business has under 5 employees, I reply with my rate card instead of booking a call. This alone saved me ~4 hours/week.&lt;/p&gt;

&lt;p&gt;Here's a Tally/Typeform redirect snippet for the &lt;code&gt;Thanks&lt;/code&gt; page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// On form submit, route based on budget&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;budget&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;formData&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;budget&lt;/span&gt;&lt;span class="dl"&gt;'&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;redirectMap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;10k+&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/book-strategy-call&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5-10k&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/book-discovery-call&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2-5k&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/rate-card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;not-sure&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/rate-card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;redirectMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/rate-card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Friday review ritual (borrowed from GTD)
&lt;/h2&gt;

&lt;p&gt;David Allen's &lt;em&gt;Getting Things Done&lt;/em&gt; has one practice that matters more than all the others combined: the &lt;strong&gt;Weekly Review&lt;/strong&gt;. For a freelance Client OS, here's the 30-minute version I run every Friday at 4 PM:&lt;/p&gt;

&lt;h3&gt;
  
  
  Friday Review checklist
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Open Leads DB, filter by &lt;code&gt;Stage != Won/Lost&lt;/code&gt; and &lt;code&gt;Next action date &amp;lt;= today&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] For each overdue lead: reply now, or move to Lost with a reason&lt;/li&gt;
&lt;li&gt;[ ] Open Projects DB, filter by &lt;code&gt;Status = In progress&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] For each active project: is the next deliverable on track? If not, message client &lt;em&gt;today&lt;/em&gt;, not Monday&lt;/li&gt;
&lt;li&gt;[ ] Open Invoices DB, filter by &lt;code&gt;Status = Sent&lt;/code&gt; and &lt;code&gt;Due date &amp;lt;= today + 7&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Send reminder for any invoice due in the next 7 days (template below)&lt;/li&gt;
&lt;li&gt;[ ] Open Invoices DB, filter by &lt;code&gt;Status = Overdue&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Send firm follow-up with late fee reference&lt;/li&gt;
&lt;li&gt;[ ] Update pipeline total in dashboard (sum of &lt;code&gt;Project value estimate&lt;/code&gt; where &lt;code&gt;Stage = Proposal sent&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;30 minutes. Every Friday. Non-negotiable. This one ritual is what turned my freelance income from "lumpy" to "predictable."&lt;/p&gt;

&lt;h2&gt;
  
  
  The invoice follow-up sequence that actually works
&lt;/h2&gt;

&lt;p&gt;Here's the dialogue that plays out with 40% of clients if you don't have a system:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You (day 0):&lt;/strong&gt; "Hey Marcus, invoice INV-2026-014 attached, due in 14 days."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Marcus:&lt;/strong&gt; &lt;em&gt;(silence)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You (day 45, awkwardly):&lt;/strong&gt; "Hey, just checking in on that invoice from last month 😅"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Marcus:&lt;/strong&gt; "Oh! I thought my assistant paid it. Let me check and get back to you."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Marcus does not get back to you. You send another email day 60. Paid day 73.)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's the sequence I run now, templated in Notion and copy-pasted into Gmail:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 0 (invoice sent):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi Marcus, invoice INV-2026-014 for the homepage redesign is attached. Amount: $3,200. Due: Feb 14. Payment link: [Stripe]. Let me know if anything looks off.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Day -2 (friendly reminder, 2 days before due):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi Marcus, quick heads up — INV-2026-014 is due this Friday. Here's the link again in case it got buried: [Stripe]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Day +3 (past due, still warm):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi Marcus, INV-2026-014 was due on Feb 14 and I haven't seen payment come through yet. Could you confirm it's queued up, or let me know if there's a blocker?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Day +10 (firm):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Marcus, INV-2026-014 is now 10 days past due. Per our agreement, a 5% late fee of $160 applies after 14 days overdue. Please settle by Feb 28 to avoid the fee.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Day +21 (final):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Marcus, this is my final notice on INV-2026-014 before I pause all active work on your account and forward this to collections. Please remit $3,360 (invoice + late fee) by end of week.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've used this exact sequence for two years. &lt;strong&gt;Zero invoices have made it to day 21.&lt;/strong&gt; The firm-but-professional day +10 message is where 90% of slow payers suddenly remember to pay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing: the RICE-style decision matrix for taking projects
&lt;/h2&gt;

&lt;p&gt;Saying yes to the wrong project costs more than saying no to a good one. I use a simple scoring rubric (loosely inspired by the RICE prioritization framework product teams use) before accepting any project above $3k:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;th&gt;Score (1-5)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project value vs. my minimum rate&lt;/td&gt;
&lt;td&gt;3x&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timeline realism (not rushed)&lt;/td&gt;
&lt;td&gt;2x&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client communication quality so far&lt;/td&gt;
&lt;td&gt;2x&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope clarity&lt;/td&gt;
&lt;td&gt;2x&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portfolio value (would I show this?)&lt;/td&gt;
&lt;td&gt;1x&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Referral potential&lt;/td&gt;
&lt;td&gt;1x&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Multiply each score by the weight, sum them up. Anything under 30/55 is a pass. Anything 30-40 is a "negotiate". Above 40, take it.&lt;/p&gt;

&lt;p&gt;This felt overly mechanical at first. After I used it to turn down a $12k project that scored 22 (vague scope, rushed timeline, client who "just wants it clean") and later heard the designer who took it ended up in a scope-creep nightmare for 4 months, I stopped questioning the rubric.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope docs: the one-pager that prevents scope creep
&lt;/h2&gt;

&lt;p&gt;Every project, before I start, gets a one-page scope doc inside the Notion project page. The structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Project: [Name]&lt;/span&gt;
&lt;span class="gu"&gt;## Agreed scope (as of [date])&lt;/span&gt;

&lt;span class="gu"&gt;### In scope&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Home, About, Services, Contact pages
&lt;span class="p"&gt;-&lt;/span&gt; Mobile responsive breakpoints at 375/768/1440
&lt;span class="p"&gt;-&lt;/span&gt; 2 rounds of revisions per page
&lt;span class="p"&gt;-&lt;/span&gt; Webflow CMS setup for blog (max 3 collection types)

&lt;span class="gu"&gt;### Out of scope (billable at $95/hr if requested)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Copywriting
&lt;span class="p"&gt;-&lt;/span&gt; Custom illustrations
&lt;span class="p"&gt;-&lt;/span&gt; SEO audit
&lt;span class="p"&gt;-&lt;/span&gt; Migrating old blog content

&lt;span class="gu"&gt;### Timeline&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Kickoff: Feb 3
&lt;span class="p"&gt;-&lt;/span&gt; Design review: Feb 17
&lt;span class="p"&gt;-&lt;/span&gt; Dev handoff: Mar 3
&lt;span class="p"&gt;-&lt;/span&gt; Launch: Mar 14

&lt;span class="gu"&gt;### Payment&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; 50% deposit ($3,200) on signing
&lt;span class="p"&gt;-&lt;/span&gt; 50% ($3,200) on launch
&lt;span class="p"&gt;-&lt;/span&gt; Late fee: 5% after 14 days overdue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The magic is the &lt;strong&gt;Out of scope&lt;/strong&gt; section. When the client says week 3, "oh, can you also migrate the 40 old blog posts?", you paste this doc back and say "happy to — that's 6 hours at $95, I'll add it to the final invoice." No arguments. It's written down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automations worth building (and ones that aren't)
&lt;/h2&gt;

&lt;p&gt;A lot of YouTube tutorials will have you wiring up Notion + Zapier + Stripe + Gmail with 15 zaps. Most of it isn't worth the setup time for a solo designer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Worth building:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stripe webhook → Notion: when invoice paid, update status automatically&lt;/li&gt;
&lt;li&gt;Notion formula: auto-calculate &lt;code&gt;Days overdue&lt;/code&gt; = &lt;code&gt;today() - due_date&lt;/code&gt; when status = Sent&lt;/li&gt;
&lt;li&gt;Calendly → Notion: new lead auto-created when someone books a call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Not worth building (for under 10 clients):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-send invoice emails (just use Stripe's built-in)&lt;/li&gt;
&lt;li&gt;Slack notifications for every Notion change (noise)&lt;/li&gt;
&lt;li&gt;Complex lead scoring (your gut works fine at this scale)&lt;/li&gt;
&lt;li&gt;Client portals with custom auth (share Notion pages publicly with view-only)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the one formula I actually recommend — it drives my weekly review:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Notion formula for "Days overdue" in Invoices DB&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Due date&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
  &lt;span class="nf"&gt;dateBetween&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Due date&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;days&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sort the invoices database by this column descending. Anything &amp;gt;0 gets a reminder that day.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dashboard view that tells you if this month is bad
&lt;/h2&gt;

&lt;p&gt;One Notion page. Four numbers. Updated live via rollups.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pipeline&lt;/strong&gt; — sum of &lt;code&gt;Project value estimate&lt;/code&gt; where Lead stage = Proposal sent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Booked this month&lt;/strong&gt; — sum of Project &lt;code&gt;Quoted amount&lt;/code&gt; where Start date is this month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invoiced this month&lt;/strong&gt; — sum of Invoice &lt;code&gt;Total&lt;/code&gt; where Issued date is this month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collected this month&lt;/strong&gt; — sum of Invoice &lt;code&gt;Total&lt;/code&gt; where Paid date is this month&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If &lt;code&gt;Pipeline&lt;/code&gt; drops below 2x your monthly target for more than 2 weeks, it's time to do outreach. Don't wait until you have no work and panic-discount yourself.&lt;/p&gt;

&lt;p&gt;I review these four numbers every Monday morning, before email. Takes 90 seconds. It's the difference between steering the ship and being steered by it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it all together
&lt;/h2&gt;

&lt;p&gt;If you build this from scratch, here's a realistic timeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Week 1:&lt;/strong&gt; Set up 4 databases with all fields and relations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 2:&lt;/strong&gt; Build intake form, connect to leads DB, write SPIN questions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 3:&lt;/strong&gt; Create invoice templates, wire up Stripe links, write the 5-email follow-up sequence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 4:&lt;/strong&gt; Build dashboard, formulas, and migrate existing clients in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;About 25-35 hours of setup. If you're charging $75/hr, that's ~$2,500 of your time — but it pays for itself within 2 months by not losing a single lead or late invoice.&lt;/p&gt;

&lt;p&gt;Or, you can skip the setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shortcut: Client OS for Solo Web Designers
&lt;/h2&gt;

&lt;p&gt;I got tired of rebuilding this for every designer friend who asked, so I packaged the entire system into a single Notion template: &lt;strong&gt;Client OS for Solo Web Designers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What's inside:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All 4 pre-built databases (Leads, Clients, Projects, Invoices) with relations wired up&lt;/li&gt;
&lt;li&gt;SPIN intake form template + redirect logic&lt;/li&gt;
&lt;li&gt;The 5-email invoice follow-up sequence (copy-paste ready)&lt;/li&gt;
&lt;li&gt;RICE-style project scoring rubric&lt;/li&gt;
&lt;li&gt;Scope doc one-pager template&lt;/li&gt;
&lt;li&gt;Friday Review checklist built as a recurring Notion task&lt;/li&gt;
&lt;li&gt;Live dashboard with pipeline / booked / invoiced / collected rollups&lt;/li&gt;
&lt;li&gt;12 pre-built invoice templates (deposits, milestones, retainers, late fees)&lt;/li&gt;
&lt;li&gt;The exact &lt;code&gt;Days overdue&lt;/code&gt; formula and Stripe integration instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's $39 one-time, not a subscription. Cheaper than one month of Honeybook, and you own it forever.&lt;/p&gt;

&lt;p&gt;I use this exact system for my own client work. The Notion template is the one I duplicate at the start of every year.&lt;/p&gt;

&lt;h2&gt;
  
  
  CTA
&lt;/h2&gt;

&lt;p&gt;If you've been running your freelance business out of Gmail stars and a messy spreadsheet, the cost isn't the hours — it's the ghosted leads and late-paid invoices you never noticed. Build your own from this guide, or grab the one I already built.&lt;/p&gt;

&lt;p&gt;I systematized all of this into &lt;strong&gt;Client OS for Solo Web Designers&lt;/strong&gt; — &lt;a href="https://komugipan.gumroad.com/l/vndmly" rel="noopener noreferrer"&gt;View on Gumroad →&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want the complete Client OS for Solo Web Designers I used? &lt;a href="https://komugipan.gumroad.com/l/vndmly" rel="noopener noreferrer"&gt;View on Gumroad →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>notion</category>
      <category>productivity</category>
      <category>design</category>
    </item>
    <item>
      <title>How to track SaaS client implementations without missing go-live dates in 2026</title>
      <dc:creator>komugi</dc:creator>
      <pubDate>Fri, 24 Apr 2026 01:00:06 +0000</pubDate>
      <link>https://forem.com/komugi_4236cc409d6f9157e7/how-to-track-saas-client-implementations-without-missing-go-live-dates-in-2026-3p0l</link>
      <guid>https://forem.com/komugi_4236cc409d6f9157e7/how-to-track-saas-client-implementations-without-missing-go-live-dates-in-2026-3p0l</guid>
      <description>&lt;p&gt;You're three weeks into onboarding a new enterprise client. The CSM pings you on Slack: "Hey, where are we on the SSO config for Acme?" You open your implementation tracker — which is actually four tabs in a Google Sheet, two Linear tickets, and a Notion page someone started and abandoned. You spend 20 minutes reconstructing the status. Then the CTO of another client emails asking why their go-live slipped. You didn't even know it slipped.&lt;/p&gt;

&lt;p&gt;If you're a PM at a mid-sized SaaS company running 5-15 concurrent client implementations, this is your Tuesday.&lt;/p&gt;

&lt;p&gt;I've spent the last four years leading implementation teams at two B2B SaaS companies. The last one had a 42-day median onboarding cycle with a contractual SLA — miss it and we refunded 15% of ARR. In one quarter we lost roughly &lt;strong&gt;$38,000 in refunds&lt;/strong&gt; because three implementations slipped without anyone noticing until the client complained. Not because the team was lazy. Because the tracking system was garbage.&lt;/p&gt;

&lt;p&gt;This article is the system I built afterwards. It's boring. It's Excel. It works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why SaaS client implementation tracking is different from normal project management
&lt;/h2&gt;

&lt;p&gt;Before we get to the system, let's name the actual problem. Regular project management tools (Jira, Linear, Asana) assume &lt;strong&gt;one project, one team, one timeline&lt;/strong&gt;. Client implementations violate every one of those assumptions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're running &lt;strong&gt;N parallel projects&lt;/strong&gt; (one per client) that share the same internal resources&lt;/li&gt;
&lt;li&gt;Each client has a different &lt;strong&gt;contractual start and go-live date&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Each client has a different &lt;strong&gt;scope&lt;/strong&gt; (SSO? custom integrations? data migration?)&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;risks are client-specific&lt;/strong&gt; but the &lt;strong&gt;bottlenecks are internal&lt;/strong&gt; (the same engineer is blocking three onboardings)&lt;/li&gt;
&lt;li&gt;Finance needs to know when revenue recognition starts — usually tied to go-live&lt;/li&gt;
&lt;li&gt;CS needs to know handoff dates so they can staff accordingly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jira will let you model this. It will also take you six weeks and a consultant. For a 4-person PMO at a 60-person SaaS company, that's absurd.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The right tool for tracking 10 client implementations is not the same tool you use for building the product. Stop trying to make it one tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The cost of "we'll just use Notion for now"
&lt;/h2&gt;

&lt;p&gt;Let me give you concrete numbers from the quarter I mentioned:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Incident&lt;/th&gt;
&lt;th&gt;Root cause&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Acme go-live missed by 11 days&lt;/td&gt;
&lt;td&gt;SSO blocker not visible on shared dashboard&lt;/td&gt;
&lt;td&gt;$12,400 refund&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BetaCo churned before go-live&lt;/td&gt;
&lt;td&gt;No one tracked that their DPA signing stalled for 18 days&lt;/td&gt;
&lt;td&gt;$48,000 ARR lost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GammaInc scope creep&lt;/td&gt;
&lt;td&gt;Scope changes logged in Slack, never pulled into timeline&lt;/td&gt;
&lt;td&gt;120 eng hours, ~$18,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeltaLtd duplicate work&lt;/td&gt;
&lt;td&gt;Two PMs both ran kickoff because handoff unclear&lt;/td&gt;
&lt;td&gt;8 hours, client trust damage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Total damage: around &lt;strong&gt;$78,000&lt;/strong&gt; for a team of four PMs. The tracking system cost us more than any of our actual tools.&lt;/p&gt;

&lt;p&gt;The problem wasn't Notion or Google Sheets specifically. The problem was that nobody had defined &lt;strong&gt;what columns must exist, what views must exist, and what the weekly ritual is&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Define the six views you actually need
&lt;/h2&gt;

&lt;p&gt;After rebuilding this three times, I converged on six views. Not five, not ten. Six. Any implementation tracker that doesn't have these is going to leak.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Client Master&lt;/strong&gt; — one row per client, current phase, health, go-live date, owner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task Board&lt;/strong&gt; — every task across every client, filterable by owner and week&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gantt / Timeline&lt;/strong&gt; — visual overlap of all client timelines on one screen&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk &amp;amp; Issue Log&lt;/strong&gt; — separate from tasks, with owner and mitigation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Load&lt;/strong&gt; — who is booked how many hours across clients this week&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status Report&lt;/strong&gt; — auto-generated weekly report, one per client, ready to send&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you only do one thing after reading this article: &lt;strong&gt;separate risks from tasks&lt;/strong&gt;. Risks are things that &lt;em&gt;might&lt;/em&gt; happen. Tasks are things that &lt;em&gt;will&lt;/em&gt; happen. When you mix them, risks disappear into the backlog and nobody mitigates them until they become incidents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Standardize the implementation phases
&lt;/h2&gt;

&lt;p&gt;Every client onboarding I've ever seen fits into five phases. Name them, put them in a dropdown, never deviate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kickoff&lt;/strong&gt; — contract signed, kickoff call scheduled, SOW confirmed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discovery&lt;/strong&gt; — technical requirements, integration scoping, data mapping&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build&lt;/strong&gt; — configuration, integrations, custom work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UAT&lt;/strong&gt; — client testing, feedback loop, sign-off&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Go-Live&lt;/strong&gt; — production cutover, training, handoff to CS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When Maya (your new PM) joins and asks "what phase is Acme in?", you need a one-word answer, not a paragraph. This also makes the Gantt readable — each client is a horizontal bar with five colored segments. You can see at a glance that three clients are stuck in UAT and one of your QA engineers is the bottleneck.&lt;/p&gt;

&lt;p&gt;Here's what the Client Master row looks like as a schema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csvs"&gt;&lt;code&gt;&lt;span class="k"&gt;Client&lt;/span&gt; &lt;span class="k"&gt;ID&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Client&lt;/span&gt; &lt;span class="k"&gt;Name&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Phase&lt;/span&gt;       &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Health&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Owner&lt;/span&gt;  &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Kickoff&lt;/span&gt;   &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Go&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="k"&gt;Live&lt;/span&gt;   &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;ARR&lt;/span&gt;    &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Notes&lt;/span&gt;
&lt;span class="err"&gt;----------|-------------|-------------|--------|--------|-----------|-----------|--------|------&lt;/span&gt;
&lt;span class="k"&gt;C&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;001&lt;/span&gt;     &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Acme&lt;/span&gt; &lt;span class="k"&gt;Corp&lt;/span&gt;   &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;UAT&lt;/span&gt;         &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Yellow&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Maya&lt;/span&gt;   &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="ld"&gt;2026-01-08&lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="ld"&gt;2026-02-19&lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="mf"&gt;84000&lt;/span&gt;  &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;SSO&lt;/span&gt; &lt;span class="k"&gt;blocker&lt;/span&gt;
&lt;span class="k"&gt;C&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;002&lt;/span&gt;     &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;BetaCo&lt;/span&gt;      &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Build&lt;/span&gt;       &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Green&lt;/span&gt;  &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Ren&lt;/span&gt;    &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="ld"&gt;2026-01-15&lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="ld"&gt;2026-03-01&lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="mf"&gt;48000&lt;/span&gt;  &lt;span class="err"&gt;|&lt;/span&gt; 
&lt;span class="k"&gt;C&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;003&lt;/span&gt;     &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;GammaInc&lt;/span&gt;    &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Discovery&lt;/span&gt;   &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Red&lt;/span&gt;    &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Maya&lt;/span&gt;   &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="ld"&gt;2026-01-22&lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="ld"&gt;2026-03-12&lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="mf"&gt;120000&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Scope&lt;/span&gt; &lt;span class="k"&gt;unclear&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Health is a 3-color flag: Green / Yellow / Red. Not 5 levels. Not a percentage. Humans are bad at 5 levels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Build the Gantt in the tool you already own
&lt;/h2&gt;

&lt;p&gt;I know. Everyone wants to reach for MS Project or Smartsheet or Monday. Don't. For 5-15 concurrent client implementations, Excel with a conditional-formatted Gantt is faster to update and zero to onboard.&lt;/p&gt;

&lt;p&gt;The trick is this formula in each date cell of the timeline grid:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IF(AND(G$2&amp;gt;=$D3, G$2&amp;lt;=$E3),
    IF(G$2&amp;lt;=TODAY(), "done", "planned"),
    "")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;G$2&lt;/code&gt; is the date column header&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$D3&lt;/code&gt; is the task start date&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$E3&lt;/code&gt; is the task end date&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then conditional formatting turns &lt;code&gt;"done"&lt;/code&gt; cells dark and &lt;code&gt;"planned"&lt;/code&gt; cells light. Instant Gantt, zero plugins, works offline, no license per seat.&lt;/p&gt;

&lt;p&gt;The Gantt should live on one sheet and show &lt;strong&gt;all clients stacked vertically&lt;/strong&gt;. This is the single most valuable view you will build. When your VP of CS walks up and says "can we take on one more client this month?", you rotate the laptop and show them the wall of overlapping bars. The conversation ends in 30 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Run the weekly ritual (this is where 80% of the value is)
&lt;/h2&gt;

&lt;p&gt;The tracker is useless without a ritual. Here's the one that worked:&lt;/p&gt;

&lt;h3&gt;
  
  
  Monday 9:30 AM — PM Sync (30 min)
&lt;/h3&gt;

&lt;p&gt;Each PM updates their clients' Health flag before the meeting. In the meeting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Walk the Gantt top to bottom&lt;/li&gt;
&lt;li&gt;For every &lt;strong&gt;Red&lt;/strong&gt; client: what's the mitigation, who owns it, when is it due?&lt;/li&gt;
&lt;li&gt;For every &lt;strong&gt;Yellow&lt;/strong&gt; client: is it trending Green or Red? Why?&lt;/li&gt;
&lt;li&gt;Any new risks to add to the Risk Log?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. No status theater. No "I'm working on X."&lt;/p&gt;

&lt;h3&gt;
  
  
  Friday 4:00 PM — Status Report Generation
&lt;/h3&gt;

&lt;p&gt;Each PM runs the status report view for each of their clients and sends it to the client's main stakeholder. Auto-generated from the tracker. If your tracker can't auto-generate a client-ready weekly status, you'll skip it, and the client will feel abandoned.&lt;/p&gt;

&lt;p&gt;Here's a checklist I tape next to my monitor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] All tasks closed last week are marked Done (not "In Progress")&lt;/li&gt;
&lt;li&gt;[ ] All new tasks this week have an owner and a due date&lt;/li&gt;
&lt;li&gt;[ ] Health flag matches reality (not wishful thinking)&lt;/li&gt;
&lt;li&gt;[ ] Risks reviewed — any stale ones older than 14 days?&lt;/li&gt;
&lt;li&gt;[ ] Resource load sheet reflects this week's actual assignments&lt;/li&gt;
&lt;li&gt;[ ] Status report sent to every client by 5 PM Friday&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 5: Handle the two conversations that always go wrong
&lt;/h2&gt;

&lt;p&gt;Two conversations will kill an implementation if you don't script them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conversation 1: The scope creep request
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Client (Jordan, VP Ops at Acme):&lt;/strong&gt; "Oh, one more thing — can we also integrate with our Workday instance before go-live?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad PM response:&lt;/strong&gt; "Let me check with the team and get back to you." &lt;em&gt;(Three weeks later, Workday is half-built, nothing else moved, go-live slips.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good PM response:&lt;/strong&gt; "That's a great addition. Let me log it as a change request. Based on our current timeline, adding Workday would push go-live from Feb 19 to March 12 because of integration testing. Would you like me to write up both options — go-live Feb 19 with Workday as phase 2, versus go-live March 12 with Workday included? I'll have it to you Friday."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The good response only works if you have a tracker that can &lt;strong&gt;actually show the impact&lt;/strong&gt; on the Gantt in under 5 minutes. That's why the tool matters — not for reporting, but for negotiation speed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conversation 2: The internal resource conflict
&lt;/h3&gt;

&lt;p&gt;Your lead backend engineer is booked on three implementations simultaneously. She's going to blow up. The Resource Load sheet should have already warned you two weeks ago. When you see a row hit &amp;gt;40 hours for the week, you escalate immediately — not when the work slips.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: The status report template that clients actually read
&lt;/h2&gt;

&lt;p&gt;Clients don't read 4-page status reports. They read 5 bullets. Here's the format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Subject: [Acme] Implementation Status — Week of Feb 5

Phase: UAT (on track for Feb 19 go-live)
Health: Yellow

Completed this week:
- SSO configuration tested in staging
- Data migration dry run #2 completed (99.2% match)

In progress:
- UAT feedback incorporation (3 of 7 items resolved)
- Production environment provisioning

Blockers / needs from you:
- Need final sign-off on user role mapping by Wed Feb 7
- Need Okta admin access (requested Jan 29, still pending)

Next week:
- Complete UAT sign-off
- Production cutover dry run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Five sections. Scannable in 20 seconds. The "needs from you" section is the most important — it's where you make blockers visible without being accusatory. Clients respect PMs who tell them what they're blocking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Know when to escalate (and to whom)
&lt;/h2&gt;

&lt;p&gt;Escalation paths have to be defined &lt;strong&gt;before&lt;/strong&gt; you need them. Here's the matrix I use:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Internal escalation&lt;/th&gt;
&lt;th&gt;Client escalation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single task slips &amp;lt;3 days&lt;/td&gt;
&lt;td&gt;PM handles&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase slips, go-live still safe&lt;/td&gt;
&lt;td&gt;PM → Head of Implementation&lt;/td&gt;
&lt;td&gt;Flag in weekly status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go-live date at risk&lt;/td&gt;
&lt;td&gt;Head of Implementation → VP CS&lt;/td&gt;
&lt;td&gt;Call with client exec sponsor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go-live missed&lt;/td&gt;
&lt;td&gt;VP CS → CEO&lt;/td&gt;
&lt;td&gt;Exec call + recovery plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contract-level risk (churn, legal)&lt;/td&gt;
&lt;td&gt;CEO + Legal&lt;/td&gt;
&lt;td&gt;CEO-to-CEO&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Print this. Put it in the tracker. When the thing happens at 4:55 PM on a Friday, nobody has time to figure out who to call.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this system doesn't solve
&lt;/h2&gt;

&lt;p&gt;Being honest: this isn't magic. It won't fix:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A product that isn't actually implementable in the quoted time (that's a sales problem)&lt;/li&gt;
&lt;li&gt;Engineering teams that don't staff implementation work (that's a leadership problem)&lt;/li&gt;
&lt;li&gt;PMs who don't update the tracker (that's a hiring problem)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it will surface all three problems within two weeks of adoption. Which is itself worth something, because right now those problems are hiding in Slack DMs and nobody can point at them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it all together
&lt;/h2&gt;

&lt;p&gt;Here's the minimum viable version you can build this afternoon:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One spreadsheet, six tabs: Clients, Tasks, Gantt, Risks, Resources, Status&lt;/li&gt;
&lt;li&gt;Five-phase dropdown, 3-color health flag&lt;/li&gt;
&lt;li&gt;The Excel formula above for the Gantt&lt;/li&gt;
&lt;li&gt;Monday sync, Friday status report&lt;/li&gt;
&lt;li&gt;Scope change script, escalation matrix pinned somewhere visible&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you build this yourself, plan on 8-12 hours over two weekends to get it right, plus another month of iteration as you figure out which columns are actually load-bearing and which are decorative.&lt;/p&gt;

&lt;p&gt;I went through that iteration process across two companies and roughly 60 client implementations. I systematized everything above — the six sheets, the conditional-formatted Gantt, the risk log with staleness tracking, the auto-generated status report, the resource load warnings, the scope change calculator — into a single Excel file called the &lt;strong&gt;Client Implementation Tracker for SaaS PMs&lt;/strong&gt;. It's six sheets, fully wired up, with sample data from a fictional SaaS company so you can see how it behaves when populated.&lt;/p&gt;

&lt;p&gt;It's built specifically for the 5-15 concurrent client load that mid-market SaaS PMOs deal with. Not enterprise (you'd outgrow it at ~30 clients), not solo consultants (overkill). If that's your range and you'd rather spend Saturday with your family than rebuilding Gantt formulas, it'll save you the weekend.&lt;/p&gt;

&lt;p&gt;You can grab it for $39 here — one-time purchase, no subscription, works in Excel and Google Sheets:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://komugipan.gumroad.com/l/vhjru" rel="noopener noreferrer"&gt;Client Implementation Tracker for SaaS PMs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whatever you do — whether you build it yourself or buy it or use something else entirely — please just pick &lt;strong&gt;one&lt;/strong&gt; tracker and make your team actually use it. The $78,000 quarter I described at the top was not because we lacked tools. It was because we had six half-built trackers and no ritual. Pick one. Run the Monday sync. Send the Friday status. The rest takes care of itself.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want the complete Client Implementation Tracker for SaaS PMs I used? &lt;a href="https://komugipan.gumroad.com/l/vhjru" rel="noopener noreferrer"&gt;View on Gumroad →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>saas</category>
      <category>excel</category>
      <category>spreadsheet</category>
    </item>
    <item>
      <title>How I stopped losing 3 hours a day to ADHD task-switching with a Notion OS (2026)</title>
      <dc:creator>komugi</dc:creator>
      <pubDate>Thu, 23 Apr 2026 01:00:04 +0000</pubDate>
      <link>https://forem.com/komugi_4236cc409d6f9157e7/how-i-stopped-losing-3-hours-a-day-to-adhd-task-switching-with-a-notion-os-2026-4p5g</link>
      <guid>https://forem.com/komugi_4236cc409d6f9157e7/how-i-stopped-losing-3-hours-a-day-to-adhd-task-switching-with-a-notion-os-2026-4p5g</guid>
      <description>&lt;p&gt;It's 2:47 PM. You opened your laptop at 9 AM to ship one feature. Instead, you have 14 browser tabs, a half-written Slack reply, a Linear ticket you started but didn't commit, and a vague panic that you forgot something important.&lt;/p&gt;

&lt;p&gt;If you have ADHD and work in tech, this is Tuesday.&lt;/p&gt;

&lt;p&gt;I tracked my own time for 6 weeks using Toggl. The results were ugly: I was losing an average of &lt;strong&gt;3 hours and 12 minutes per day&lt;/strong&gt; to context-switching, re-reading the same Jira ticket 4 times, and "quick checks" of Slack that turned into 25-minute spirals. At my contract rate, that's roughly &lt;strong&gt;$1,800 per week&lt;/strong&gt; in lost billable output. Over a year, that's a down payment on a house.&lt;/p&gt;

&lt;p&gt;This article is the system I built to claw that time back. It's not a productivity fantasy — it's the actual Notion structure, the rules, and the daily rituals I use. No "just use a Pomodoro timer" advice. We're going deeper.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why standard productivity advice fails ADHD brains
&lt;/h2&gt;

&lt;p&gt;Most productivity frameworks assume three things that are false for ADHD:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;You can predict your future energy.&lt;/strong&gt; (You can't. Today's 10 AM is not last Tuesday's 10 AM.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Motivation is consistent once you "build a habit."&lt;/strong&gt; (Dopamine regulation doesn't work that way.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A task list is enough.&lt;/strong&gt; (For ADHD, an unsorted list of 40 tasks is paralysis, not a plan.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;GTD (Getting Things Done) by David Allen is brilliant but assumes you'll do weekly reviews. I've never met an ADHD person who did 6 weekly reviews in a row. Eisenhower matrices assume you can tell urgent from important — but ADHD brains experience everything as urgent or nothing as urgent, with no middle.&lt;/p&gt;

&lt;p&gt;What actually works is a system built around three ADHD-specific realities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Energy is the constraint, not time.&lt;/strong&gt; You have 8 hours, but maybe only 2.5 of them are usable for deep work today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capture must be frictionless.&lt;/strong&gt; If logging a task takes more than 5 seconds, it won't happen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The system must assume you'll abandon it for 3 days and come back.&lt;/strong&gt; No guilt loops.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's build it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: The 3-bucket task capture (kill the mega-list)
&lt;/h2&gt;

&lt;p&gt;The #1 mistake I see ADHD developers make: one giant Notion database called "Tasks" with 200 rows. Opening it triggers instant shutdown.&lt;/p&gt;

&lt;p&gt;Instead, split capture into three explicit buckets based on cognitive load:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bucket&lt;/th&gt;
&lt;th&gt;Cognitive cost&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Where it lives&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quick Hit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;lt;15 min, no thinking&lt;/td&gt;
&lt;td&gt;"Reply to Sarah's email", "Merge the PR"&lt;/td&gt;
&lt;td&gt;Inbox view, no tags needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deep Work&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;25+ min, requires focus&lt;/td&gt;
&lt;td&gt;"Refactor auth middleware", "Write RFC"&lt;/td&gt;
&lt;td&gt;Needs energy tag + time block&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Brain Tax&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High executive function&lt;/td&gt;
&lt;td&gt;"Do taxes", "Call insurance", "Negotiate raise"&lt;/td&gt;
&lt;td&gt;Dedicated view, max 1/day&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key insight: &lt;strong&gt;Brain Tax tasks eat Deep Work energy even though they look small.&lt;/strong&gt; "Call the dentist" takes 4 minutes but kills 90 minutes of coding productivity because of the pre-call anxiety and post-call decompression. Treat it that way.&lt;/p&gt;

&lt;p&gt;Here's the Notion formula I use to auto-classify tasks by their tags:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Notion formula property: "Real Cost"&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Brain Tax&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Est Minutes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&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="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Deep Work&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Est Minutes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Est Minutes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&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;The multiplier is the honest truth: a 10-minute Brain Tax task actually costs 30 minutes of your real productivity budget. Once you start seeing tasks this way, you stop overcommitting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Energy tracking (the missing layer)
&lt;/h2&gt;

&lt;p&gt;This is the part nobody teaches. You need a simple daily log of your energy levels so you can pattern-match when you actually do your best work.&lt;/p&gt;

&lt;p&gt;I log three things, three times a day (9 AM, 1 PM, 5 PM). Takes 10 seconds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Focus&lt;/strong&gt; (1-5): Can I hold a thought?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mood&lt;/strong&gt; (1-5): Am I dreading or neutral?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Body&lt;/strong&gt; (1-5): Am I tired, wired, or steady?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After 4 weeks of data, patterns emerged I'd never have guessed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My "morning person" identity was a lie. My real peak focus is &lt;strong&gt;10:30 AM–12:15 PM&lt;/strong&gt;, not 8 AM.&lt;/li&gt;
&lt;li&gt;Mondays I'm cognitively useless until 11 AM. Scheduling deep work Monday morning was sabotage.&lt;/li&gt;
&lt;li&gt;After any meeting over 30 minutes, my focus drops by ~2 points for the next 90 minutes. Now I batch meetings into one afternoon block.&lt;/li&gt;
&lt;li&gt;Sugar after lunch = Body score drops from 4 to 2 by 2 PM. Measurable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the Notion schema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Energy Log DB
- Date (date, default today)
- Time Slot (select: Morning/Midday/Afternoon)
- Focus (number, 1-5)
- Mood (number, 1-5)
- Body (number, 1-5)
- Composite (formula: average of above)
- Notes (text, optional — "slept badly", "after standup")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then a rollup view grouped by weekday + time slot shows your real energy map. This is the single highest-ROI thing I've ever built for myself.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;After 6 weeks, I moved my deep work block from 9-11 AM to 10:30 AM-12:30 PM. My shipped-code volume went up roughly 40% with the same hours worked.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 3: The Daily Dashboard (the only page you open)
&lt;/h2&gt;

&lt;p&gt;ADHD brains cannot navigate a 40-page Notion workspace. You will get lost in your own organizational tree. The solution: &lt;strong&gt;one dashboard, opened by a pinned browser tab or a macOS Shortcut, that shows exactly 5 things.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mine shows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Today's 3&lt;/strong&gt; — the only 3 tasks that matter. Not 10. Three.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Energy check-in&lt;/strong&gt; — one-click buttons to log current energy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current quick-hit&lt;/strong&gt; — the one &amp;lt;15-min task I'm doing right now&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parking lot&lt;/strong&gt; — capture box for any stray thought (processed later)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tomorrow's 1&lt;/strong&gt; — the single most important thing for tomorrow, pre-committed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. Everything else lives behind links, not on the dashboard.&lt;/p&gt;

&lt;p&gt;The "Today's 3" rule is non-negotiable. Here's the decision tree I use at 9 AM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;For each candidate task:
  if (energy_required &amp;gt; predicted_energy_today):
    defer to tomorrow
  elif (it's Brain Tax AND I already have one Brain Tax):
    defer (max 1/day)
  elif (total estimated minutes of today's 3 &amp;gt; 4 hours):
    drop the lowest-priority one
  else:
    include

If fewer than 3 remain: that's fine. 1 real task beats 5 fake ones.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A realistic example from last week. Tuesday morning, energy prediction was medium (I slept 6 hours, coffee kicking in):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Kenji (me, 9:05 AM):&lt;/strong&gt; Okay, what am I tempted to put on today?&lt;br&gt;
&lt;strong&gt;Candidates:&lt;/strong&gt; Refactor the payment webhook (Deep Work, 3h), review Priya's PR (Quick Hit, 20min), write Q1 goals doc (Brain Tax, 90min), fix flaky test (Quick Hit, 45min), respond to recruiter (Brain Tax, 15min).&lt;br&gt;
&lt;strong&gt;After triage:&lt;/strong&gt; Refactor webhook + review PR + fix flaky test. Dropped both Brain Tax items to a single "Brain Tax Friday" block. Q1 goals doc moved to Wednesday morning when I predicted higher energy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I shipped the webhook refactor by 1 PM. On the old system I would've started the Q1 doc, gotten anxious, switched to Slack, and shipped nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: The Parking Lot protocol (stop losing ideas)
&lt;/h2&gt;

&lt;p&gt;ADHD brains generate ideas constantly, at the worst times. Mid-code, you remember you need to renew your passport. In the shower, you solve an architecture problem. At 11 PM, you panic about a client email from Tuesday.&lt;/p&gt;

&lt;p&gt;If you don't capture these in under 5 seconds, one of two things happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You lose the idea permanently (painful for good ones)&lt;/li&gt;
&lt;li&gt;You context-switch to handle it (painful for flow state)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The parking lot is a single Notion inline database on the dashboard with one input field. No tags, no categories, no priority at capture time. Just dump.&lt;/p&gt;

&lt;p&gt;Processing happens once a day, at 5 PM, for max 10 minutes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Delete&lt;/strong&gt; if it was a passing thought (60% of items)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move to task DB&lt;/strong&gt; if it's actionable (30%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move to someday/maybe&lt;/strong&gt; if it's a future idea (10%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key rule: &lt;strong&gt;if an item has been in the parking lot for 2 weeks and you haven't processed it into action, delete it.&lt;/strong&gt; It wasn't important. Your past self lied.&lt;/p&gt;

&lt;p&gt;For mobile capture, I use the Notion iOS widget bound to the parking lot DB. One tap, type, done. If Notion is too slow on your phone, use Apple Notes or a Telegram bot to yourself, and batch-import at 5 PM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: The 5-minute weekly reset (instead of a weekly review)
&lt;/h2&gt;

&lt;p&gt;GTD weekly reviews take 90 minutes. You will not do them. I tried for 3 years.&lt;/p&gt;

&lt;p&gt;What actually works: a 5-minute Sunday reset with 4 questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  The ADHD-friendly weekly reset checklist
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] What's the ONE thing I want to ship next week? (Write it in the dashboard)&lt;/li&gt;
&lt;li&gt;[ ] What's currently on my task list that I'm lying to myself about? (Delete or defer explicitly)&lt;/li&gt;
&lt;li&gt;[ ] What's my predicted low-energy day? (Block it for admin/errands, not deep work)&lt;/li&gt;
&lt;li&gt;[ ] Is there a recurring task I keep avoiding? (Either delete it or schedule it at peak energy this week)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the whole review. No processing 200 items. No reviewing projects. No "areas of responsibility."&lt;/p&gt;

&lt;p&gt;The third question is the one that changed my life. I used to schedule important writing on Mondays and wonder why it never happened. Now I know: Monday morning, I do Quick Hits. Monday afternoon or Tuesday morning, I write.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Shutdown ritual (the part that protects tomorrow)
&lt;/h2&gt;

&lt;p&gt;ADHD brains don't turn off. Without an explicit shutdown, you'll either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep working until 10 PM and burn out by Thursday&lt;/li&gt;
&lt;li&gt;Stop working but keep ruminating, destroying sleep quality&lt;/li&gt;
&lt;li&gt;Open your laptop at 9 PM "just to check one thing" and lose 2 hours&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My shutdown ritual is a 4-item checklist, done at a fixed time (6:30 PM for me):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ ] Write tomorrow's ONE task on the dashboard
[ ] Process parking lot (max 10 min)
[ ] Close all tabs and Slack
[ ] Say out loud: "I'm done for today."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The last step sounds ridiculous. It works. There's research (Cal Newport's writing on shutdown rituals, adapted from Zeigarnik effect studies) showing that verbal closure signals to your brain that open loops are parked. For ADHD specifically, the verbal cue is a stronger signal than just closing the laptop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Handling the inevitable collapse
&lt;/h2&gt;

&lt;p&gt;Here's the part productivity gurus won't tell you: &lt;strong&gt;every ADHD system collapses periodically.&lt;/strong&gt; You'll use it for 9 days, have a bad weekend, and not open Notion for 4 days. The dashboard will feel like a judgmental ex.&lt;/p&gt;

&lt;p&gt;The entire system must be designed for re-entry without guilt.&lt;/p&gt;

&lt;p&gt;My re-entry protocol:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Do not read old entries.&lt;/strong&gt; Don't scroll back through what you missed. It triggers shame spiral.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do today's 3&lt;/strong&gt; — just pick 3 things for today. That's it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear the parking lot&lt;/strong&gt; in under 10 minutes. Delete liberally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do not weekly-review the missed weeks.&lt;/strong&gt; They're gone. Move on.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The system earns its keep by being usable on day 1 after a collapse, not by being perfect for 30 days straight. If your system requires streak maintenance, it will fail you exactly when you need it most.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I systematized into a single Notion template
&lt;/h2&gt;

&lt;p&gt;Everything above is free. You can build it yourself in Notion over a weekend. I did, iteratively, over about 8 months, across maybe 15 rebuilds as I figured out what actually worked vs. what looked good on a YouTube thumbnail.&lt;/p&gt;

&lt;p&gt;After the 15th rebuild, I packaged the final version — with all the formulas, the energy tracking dashboard, the 3-bucket task system, the parking lot with auto-cleanup rules, the daily dashboard, the weekly reset template, and the shutdown ritual — into a single Notion template called &lt;strong&gt;ADHD Life OS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What's inside:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pre-built daily dashboard&lt;/strong&gt; with the 5-section layout (Today's 3, energy check-in, current task, parking lot, tomorrow's 1)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Energy tracking database&lt;/strong&gt; with pre-configured rollup views by weekday and time slot, so your energy map appears automatically after ~2 weeks of logging&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3-bucket task system&lt;/strong&gt; with the Real Cost formula already wired up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parking lot&lt;/strong&gt; with the 2-week auto-archive view&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weekly reset template&lt;/strong&gt; — the 4-question version, not the 90-minute GTD one&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shutdown ritual checklist&lt;/strong&gt; as a recurring toggle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-entry guide&lt;/strong&gt; for when (not if) you collapse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's built for people who have tried 4 other Notion templates and bounced off because they were designed for neurotypical productivity influencers with 3-hour morning routines. This one assumes you'll miss days, lose motivation, and need to rebuild trust with yourself.&lt;/p&gt;

&lt;p&gt;If you want to build it yourself from this article, please do — the principles matter more than the template. But if you'd rather skip the 8 months of iteration and start with a working system tonight, the template is $35 on Gumroad. That's roughly 1 hour of my consulting rate, or about 20 minutes of recovered productivity per week for a year.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;[ ] Split tasks into 3 buckets (Quick Hit / Deep Work / Brain Tax), not one mega-list&lt;/li&gt;
&lt;li&gt;[ ] Log energy 3x/day for 4 weeks to find your actual peak hours&lt;/li&gt;
&lt;li&gt;[ ] Build ONE dashboard with max 5 elements, ignore the rest of your workspace&lt;/li&gt;
&lt;li&gt;[ ] Capture stray thoughts in a parking lot, process once daily at 5 PM&lt;/li&gt;
&lt;li&gt;[ ] Replace weekly review with 4-question Sunday reset&lt;/li&gt;
&lt;li&gt;[ ] Add a verbal shutdown ritual at a fixed time&lt;/li&gt;
&lt;li&gt;[ ] Design for collapse and re-entry, not for streaks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system is the scaffolding. Your brain is still your brain. But with the right scaffolding, ADHD becomes a manageable operating constraint instead of a daily crisis.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want the complete ADHD Life OS Notion template I used? &lt;a href="https://komugipan.gumroad.com/l/yavbrd" rel="noopener noreferrer"&gt;View on Gumroad →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>notion</category>
      <category>productivity</category>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How Rideshare Drivers Track 1099 Income and Schedule C Deductions in 2026</title>
      <dc:creator>komugi</dc:creator>
      <pubDate>Wed, 22 Apr 2026 16:48:13 +0000</pubDate>
      <link>https://forem.com/komugi_4236cc409d6f9157e7/how-rideshare-drivers-track-1099-income-and-schedule-c-deductions-in-2026-2gaf</link>
      <guid>https://forem.com/komugi_4236cc409d6f9157e7/how-rideshare-drivers-track-1099-income-and-schedule-c-deductions-in-2026-2gaf</guid>
      <description>&lt;p&gt;It's February. You just got your 1099-K from Uber, your 1099-NEC from DoorDash, and a weekly summary from Lyft sitting in three different email threads. You open a shoebox full of gas receipts, your phone's Photos app has 400 screenshots of parking stubs, and you have no idea how many miles you actually drove for business last year.&lt;/p&gt;

&lt;p&gt;You call your CPA. She says: "Send me your mileage log and a Schedule C worksheet." You freeze. You don't have one.&lt;/p&gt;

&lt;p&gt;This is how most rideshare drivers lose between $2,800 and $6,400 a year in legitimate deductions — not because the IRS is unfair, but because they never built a tracking system that survives December 31st.&lt;/p&gt;

&lt;p&gt;I drove rideshare as a W-2 side hustle for three years while working a day job. The first year I paid $4,100 more in taxes than I needed to. The second year I built a spreadsheet. The third year I over-refined it into the system I'm going to walk you through below.&lt;/p&gt;

&lt;p&gt;This article covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why the standard mileage deduction beats actual expenses for 90% of drivers&lt;/li&gt;
&lt;li&gt;The exact fields a 1099 tracker needs to survive an IRS audit&lt;/li&gt;
&lt;li&gt;How to reconcile 1099-K vs 1099-NEC vs your bank deposits&lt;/li&gt;
&lt;li&gt;A Schedule C line-by-line map so you stop guessing&lt;/li&gt;
&lt;li&gt;A weekly 15-minute routine that makes April painless&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The real cost of not tracking: a concrete example
&lt;/h2&gt;

&lt;p&gt;Let's put numbers on it. Meet Marcus, a software QA tester by day who drove Uber and Lyft on weekends in 2024.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gross 1099 income: $28,400&lt;/li&gt;
&lt;li&gt;Miles driven for business (estimated, no log): 22,000&lt;/li&gt;
&lt;li&gt;Actual miles if he'd tracked them: 31,200&lt;/li&gt;
&lt;li&gt;2024 standard mileage rate: $0.67/mile&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without a log, Marcus claimed 22,000 miles = $14,740 deduction.&lt;br&gt;
With a proper log, he could have claimed 31,200 miles = $20,904 deduction.&lt;/p&gt;

&lt;p&gt;The $6,164 gap, at his combined marginal rate of 31% (22% federal + 7.65% SE + ~1.35% effective state after deduction), cost him roughly &lt;strong&gt;$1,910 in extra tax&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Add the parking, tolls, phone percentage, car washes, and the $200 dashcam he bought but forgot to deduct — we're talking another $900+.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you drive more than 10 hours a week and don't have a system, you are almost certainly overpaying tax by a four-figure number.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Standard mileage vs actual expenses: stop overthinking this
&lt;/h2&gt;

&lt;p&gt;Every tax thread on Reddit devolves into this debate. Here's the honest answer for 95% of rideshare drivers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;Standard Mileage&lt;/th&gt;
&lt;th&gt;Actual Expenses&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rate (2024)&lt;/td&gt;
&lt;td&gt;$0.67/mile&lt;/td&gt;
&lt;td&gt;Sum of real costs × business-use %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recordkeeping&lt;/td&gt;
&lt;td&gt;Miles log only&lt;/td&gt;
&lt;td&gt;Every receipt, depreciation schedule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works with used car bought cash&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️ depreciation limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit risk&lt;/td&gt;
&lt;td&gt;Lower (simpler)&lt;/td&gt;
&lt;td&gt;Higher (more to verify)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical winner for Toyota Prius / Corolla / Civic&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical winner for 2023 Tesla Model Y bought new&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; if your vehicle cost under $25k and gets better than 30 mpg, standard mileage wins. If you bought a new EV or luxury SUV specifically for rideshare, run both calculations.&lt;/p&gt;

&lt;p&gt;Once you pick standard mileage in year 1, you can switch later. But if you pick actual expenses in year 1, you're locked out of standard mileage for that vehicle forever. Start with standard mileage unless you have a specific reason not to.&lt;/p&gt;
&lt;h2&gt;
  
  
  The 8 fields your mileage log must have (IRS Pub 463)
&lt;/h2&gt;

&lt;p&gt;The IRS doesn't require a specific format, but in an audit they want contemporaneous records with these fields. If your log is missing any of these, an auditor can disallow the deduction entirely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Date of trip
2. Starting location (or starting odometer)
3. Ending location (or ending odometer)
4. Total miles for the trip
5. Business purpose ("Uber pickup," "Lyft en route," "deadhead to surge zone")
6. Platform / payer (Uber, Lyft, DoorDash)
7. Gross earnings for that shift (for income reconciliation)
8. Notes (tolls paid, parking, passenger incidents)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"Contemporaneous" is the key word. A log you reconstruct in March from credit card statements is weaker than one you updated the same night. Auditors know the difference.&lt;/p&gt;

&lt;h3&gt;
  
  
  The three-tier mileage you're probably missing
&lt;/h3&gt;

&lt;p&gt;Most drivers only log P3 (passenger in car) miles because that's what Uber shows them. You can legally deduct:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;P1&lt;/strong&gt;: App on, waiting for a request (deductible)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;P2&lt;/strong&gt;: En route to pick up passenger (deductible)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;P3&lt;/strong&gt;: Passenger in vehicle (deductible)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deadhead&lt;/strong&gt;: Driving home after your last ride, if you're still logged in and available (deductible per most tax pros; verify with yours)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commute&lt;/strong&gt;: First drive from home to your "first stop" (NOT deductible unless you have a qualifying home office)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uber's "on-trip" miles report dramatically undercounts your deductible miles. Lyft is slightly better. Neither is a substitute for your own log.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reconciling 1099-K vs 1099-NEC vs your bank
&lt;/h2&gt;

&lt;p&gt;Here's where side-hustlers get tripped up. In 2024+, Uber issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1099-K&lt;/strong&gt; if you did 200+ rides AND got paid $20,000+ (federal threshold; some states lower)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1099-NEC&lt;/strong&gt; for incentives, referrals, and quest bonuses over $600&lt;/li&gt;
&lt;li&gt;A "Tax Summary" (NOT a tax form) that reconciles gross fares to net payout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your bank shows &lt;strong&gt;net&lt;/strong&gt; deposits. Your 1099-K shows &lt;strong&gt;gross&lt;/strong&gt; fares. The difference is Uber's service fee, booking fee, tolls passed through, and sometimes tips.&lt;/p&gt;

&lt;p&gt;You report the &lt;strong&gt;gross&lt;/strong&gt; number on Schedule C Line 1, then deduct fees on Line 10 (Commissions and fees). This is critical. If you report net, you accidentally inflate your income when the IRS matches the 1099-K they received.&lt;/p&gt;

&lt;p&gt;Example reconciliation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1099-K gross fares (Uber):          $24,800
1099-NEC bonuses (Uber):             $1,600
1099-K gross (Lyft):                $11,200
Total Schedule C Line 1:            $37,600

Uber service fees (from summary):  -$6,100
Lyft service fees:                 -$2,800
Booking fees pass-through:           -$890
Schedule C Line 10:                 $9,790
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your net deposit to your bank will be roughly $37,600 - $9,790 = $27,810. If your bank shows $27,810 but you report $27,810 as gross income, you just overpaid tax on the fees (they're already deducted) OR you'll get an IRS CP2000 notice saying your 1099-K gross doesn't match. Both are bad.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schedule C line-by-line for rideshare
&lt;/h2&gt;

&lt;p&gt;This is the map I wish someone had handed me in year one. Not tax advice, but this is what every rideshare CPA I've talked to uses.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Line 1 — Gross receipts&lt;/strong&gt;: Sum of 1099-K + 1099-NEC gross. Include tips even if not on the form.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line 8 — Advertising&lt;/strong&gt;: Business cards, decals if you ran any.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line 9 — Car and truck expenses&lt;/strong&gt;: This is your mileage × rate OR actual expenses. Fill out Part IV of Schedule C.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line 10 — Commissions and fees&lt;/strong&gt;: Uber/Lyft service fees, booking fees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line 13 — Depreciation&lt;/strong&gt;: Only if using actual expenses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line 15 — Insurance (other than health)&lt;/strong&gt;: Rideshare endorsement on your policy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line 17 — Legal and professional&lt;/strong&gt;: CPA fees, LLC filing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line 22 — Supplies&lt;/strong&gt;: Phone mount, chargers, water bottles for pax, cleaning supplies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line 24a — Travel&lt;/strong&gt;: Out-of-town driving trips, if any.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line 25 — Utilities&lt;/strong&gt;: Business-use % of cell phone bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line 27a — Other expenses&lt;/strong&gt;: Dashcam, car washes (if standard mileage — car washes arguably not deductible; verify), parking, tolls (if not already in mileage rate — they're NOT, so deduct separately), roadside assistance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The deductions 80% of drivers miss
&lt;/h3&gt;

&lt;p&gt;Go through this checklist right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Portion of cell phone bill (I use 70% business)&lt;/li&gt;
&lt;li&gt;[ ] Phone case and replacement cables bought during driving year&lt;/li&gt;
&lt;li&gt;[ ] Dashcam + memory cards&lt;/li&gt;
&lt;li&gt;[ ] Car washes (if actual expense method)&lt;/li&gt;
&lt;li&gt;[ ] Parking fees (not your rent — actual paid parking during shifts)&lt;/li&gt;
&lt;li&gt;[ ] Tolls paid during business trips (even if using standard mileage)&lt;/li&gt;
&lt;li&gt;[ ] Water, gum, phone chargers offered to passengers&lt;/li&gt;
&lt;li&gt;[ ] Rideshare insurance endorsement (the extra $10-30/mo on top of personal)&lt;/li&gt;
&lt;li&gt;[ ] Roadside assistance / AAA (business-use portion)&lt;/li&gt;
&lt;li&gt;[ ] Health insurance premiums (if self-employed is primary; side gig with W-2 day job usually doesn't qualify)&lt;/li&gt;
&lt;li&gt;[ ] Home office — &lt;em&gt;only&lt;/em&gt; if you have a dedicated space used exclusively for dispatch/admin, which is rare for drivers&lt;/li&gt;
&lt;li&gt;[ ] Self-employed retirement contributions (Solo 401k / SEP-IRA) — huge, and most people skip it&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The 15-minute weekly routine
&lt;/h2&gt;

&lt;p&gt;This is the habit that separates people who pay $1,900 extra from people who don't. Every Sunday night:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your tracker spreadsheet.&lt;/li&gt;
&lt;li&gt;Pull the week's Uber earnings summary (gross fares + fees + tips).&lt;/li&gt;
&lt;li&gt;Pull Lyft weekly summary. Same fields.&lt;/li&gt;
&lt;li&gt;Export your mileage from whatever tool you use (more on this below).&lt;/li&gt;
&lt;li&gt;Reconcile: does &lt;code&gt;gross - fees = net deposit&lt;/code&gt;? If not, find the delta.&lt;/li&gt;
&lt;li&gt;Photograph and log any cash expenses (tolls, car wash, mount).&lt;/li&gt;
&lt;li&gt;Update running YTD totals: gross income, total miles, total expenses.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fifteen minutes. If you do this 50 weeks a year, April takes 45 minutes instead of a panicked weekend.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mileage tracking apps — honest comparison
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Auto-track&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Catches P1/P2&lt;/th&gt;
&lt;th&gt;Export&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stride&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;⚠️ needs manual start&lt;/td&gt;
&lt;td&gt;CSV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MileIQ&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;$5.99/mo&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;CSV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Everlance&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;$8/mo&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;CSV + PDF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manual log&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Depends on you&lt;/td&gt;
&lt;td&gt;Whatever you build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uber's built-in&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Only P2/P3&lt;/td&gt;
&lt;td&gt;Not a legal log&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I used Stride in year one and Everlance in years two and three. Either works. The important part is that the app's output flows into a spreadsheet where you can combine it with income data from Uber/Lyft/DoorDash. No app gives you the full Schedule C.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quarterly estimated taxes: the trap that hits side-hustlers
&lt;/h2&gt;

&lt;p&gt;If you have a W-2 day job that over-withholds, you may be fine. But if your rideshare net profit crosses roughly $5,000 and your W-2 withholding isn't covering it, you owe &lt;strong&gt;quarterly estimated taxes&lt;/strong&gt; (Form 1040-ES). Due dates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Q1: April 15&lt;/li&gt;
&lt;li&gt;Q2: June 15&lt;/li&gt;
&lt;li&gt;Q3: September 15&lt;/li&gt;
&lt;li&gt;Q4: January 15 of following year&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Underpayment penalty is small but real — usually 7-8% annualized on the shortfall. The simpler fix: bump your W-2 withholding (Form W-4, extra $ per paycheck) to cover the expected rideshare tax. Then you don't file 1040-ES at all.&lt;/p&gt;

&lt;p&gt;Quick estimate formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Estimated tax owed = (Rideshare net profit) × 0.30

Where 0.30 ≈ 15.3% SE tax + ~12-22% federal + state
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conservative. Adjust down if your marginal rate is lower.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real conversation that saved a driver $3,200
&lt;/h2&gt;

&lt;p&gt;Last March, a friend — I'll call her Priya, who drives Lyft 20 hours a week on top of a remote QA job — sent me her draft Schedule C.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Priya:&lt;/strong&gt; "My CPA says I owe $4,800. Does that sound right?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Me:&lt;/strong&gt; "What'd you put on Line 9?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Priya:&lt;/strong&gt; "$8,200. That's 12,200 miles times the rate."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Me:&lt;/strong&gt; "How'd you get 12,200?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Priya:&lt;/strong&gt; "Lyft's annual summary."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Me:&lt;/strong&gt; "Did you track P1 and deadhead?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Priya:&lt;/strong&gt; "What?"&lt;/p&gt;

&lt;p&gt;We went back through her Google Maps Timeline (which she'd had on for two years), filtered the trips that happened during her Lyft driving windows, and rebuilt a reasonable log. Actual business miles: 18,600. Extra deduction: 6,400 miles × $0.67 = $4,288. At her ~28% marginal rate, that was about $1,200 in tax.&lt;/p&gt;

&lt;p&gt;Then we added: dashcam ($180), rideshare insurance endorsement ($240/yr), 70% of her phone bill ($840), and her SEP-IRA contribution (she'd skipped it entirely — eligible for ~$3,400 at her income, saving ~$950 in tax).&lt;/p&gt;

&lt;p&gt;Final number dropped from $4,800 owed to $1,600 owed. $3,200 saved in a two-hour Sunday afternoon.&lt;/p&gt;

&lt;p&gt;The only reason we could do this was Google Maps Timeline had been running. Without some data source — any data source — we'd have been stuck.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a real tracker looks like
&lt;/h2&gt;

&lt;p&gt;At minimum, you need three connected sheets:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Daily shift log&lt;/strong&gt; — one row per driving session. Date, platform, start/end time, start/end odometer, P1 miles, P3 miles, gross fares, fees, tips, tolls, notes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expense log&lt;/strong&gt; — one row per non-mileage expense. Date, category (maps to Schedule C line), amount, vendor, receipt photo link, business-use %.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schedule C summary&lt;/strong&gt; — auto-sums the two logs above into each Schedule C line so you can hand your CPA (or TurboTax) a single clean number per line.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's the kind of formula that makes the summary sheet work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=SUMIFS(ExpenseLog[Amount], ExpenseLog[ScheduleC_Line], "Line 10", ExpenseLog[Year], 2025) 
 + SUMIFS(ShiftLog[Fees], ShiftLog[Year], 2025)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One formula per Schedule C line. When the CPA asks "what's your Line 22?" you point to a cell.&lt;/p&gt;

&lt;h2&gt;
  
  
  The system, packaged
&lt;/h2&gt;

&lt;p&gt;I spent three tax seasons iterating on this. By year three my weekly reconciliation was 12 minutes, my CPA stopped charging me the "disorganized client" hourly surcharge, and I stopped losing sleep in March.&lt;/p&gt;

&lt;p&gt;I systematized all of this — the daily shift log, the expense log with Schedule C line mapping, the income reconciliation tab that catches 1099-K vs bank deposit mismatches, the quarterly estimated tax calculator, and a Schedule C summary that outputs a single clean number per line — into a single Excel workbook called the &lt;strong&gt;1099 Tax Tracker for Rideshare Drivers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What's inside:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-built daily shift log with dropdowns for Uber / Lyft / DoorDash / Instacart&lt;/li&gt;
&lt;li&gt;Auto-calculating P1 + P2 + P3 mileage columns&lt;/li&gt;
&lt;li&gt;Expense categorizer that tags each expense to its Schedule C line&lt;/li&gt;
&lt;li&gt;1099-K / 1099-NEC / bank deposit reconciliation tab&lt;/li&gt;
&lt;li&gt;Quarterly estimated tax worksheet with 2025 + 2026 rates&lt;/li&gt;
&lt;li&gt;Schedule C summary sheet — hand this to your CPA and you're done&lt;/li&gt;
&lt;li&gt;Mileage deduction vs actual expenses side-by-side calculator&lt;/li&gt;
&lt;li&gt;Deduction checklist (the one above, but built into the workbook)&lt;/li&gt;
&lt;li&gt;Works in Excel, LibreOffice, and Google Sheets (with minor formula tweaks)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not a SaaS, not a subscription, not another app you have to log into. It's a spreadsheet you own, drop on your Desktop, and update 15 minutes a week. $25, one-time.&lt;/p&gt;

&lt;p&gt;If you drive rideshare as a side hustle and you've been recreating this logic from scratch in your head every April, you can skip three years of iteration.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want the complete 1099 Tax Tracker for Rideshare Drivers I used? &lt;a href="https://komugipan.gumroad.com/l/wqahjs" rel="noopener noreferrer"&gt;View on Gumroad →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>excel</category>
      <category>freelance</category>
      <category>productivity</category>
      <category>spreadsheet</category>
    </item>
  </channel>
</rss>
