<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Junyoung Choi</title>
    <description>The latest articles on DEV Community by Junyoung Choi (@rokt33r).</description>
    <link>https://dev.to/rokt33r</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F19094%2Ff2391eb6-a23a-46a3-8228-6594e1bfac64.png</url>
      <title>DEV Community: Junyoung Choi</title>
      <link>https://dev.to/rokt33r</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rokt33r"/>
    <language>en</language>
    <item>
      <title>I built an app and some skills. Dev speed doubled, token usage halved.</title>
      <dc:creator>Junyoung Choi</dc:creator>
      <pubDate>Mon, 20 Jul 2026 08:50:00 +0000</pubDate>
      <link>https://dev.to/rokt33r/i-built-an-app-and-some-skills-dev-speed-doubled-token-usage-halved-iek</link>
      <guid>https://dev.to/rokt33r/i-built-an-app-and-some-skills-dev-speed-doubled-token-usage-halved-iek</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;It is about my experience making an OSS app, &lt;a href="https://naholo.app/" rel="noopener noreferrer"&gt;naholo&lt;/a&gt;, &lt;a href="https://github.com/rokt33r/naholo" rel="noopener noreferrer"&gt;Github Link&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faftla5i4epj3t2or5tbm.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faftla5i4epj3t2or5tbm.jpeg" alt="boys"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm the CTO of a product security company, and I have two boys, zero and two years old. My days are full of meetings, my evenings belong to the kids so my wife can get a break, and every so often a security story breaks at some random hour, a supply-chain attack targeting react2shell, litellm, or tanstack, and I have to check whether any of our clients are exposed. Life is hectic as hell.&lt;/p&gt;

&lt;p&gt;So I built myself a memo tool, nothing fancy, just somewhere to drop a short idea or a bit of feedback the moment I had it, from my clients or my team. It was basically a simple thread-based chat app where I talked to myself. I'd take a memo, review the pile when I finally had a long stretch of free time, and tackle each issue when I had the energy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fztxlqijpwiodkum1g823.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fztxlqijpwiodkum1g823.png" alt="chat style memo ui in naholo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I started pointing it at itself. Every time the app annoyed me, I dropped a memo about it. Every time I had an hour, I fixed an issue. At some point I thought, "If I just wired an MCP server to pull those ideas straight into VS Code, I wouldn't need to deal with the context switching." &lt;strong&gt;So I built a small CLI that hosts the MCP server and wires my whole config up to the web app.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That part worked. But the planning is where it fell apart.&lt;/p&gt;

&lt;p&gt;Claude Code's &lt;code&gt;/plan&lt;/code&gt; felt like a gamble every single session. I was fighting two dials at once: context size and context density. If I added too much context, the agent starts hallucinating. If I added too much detail, it had to read a novel to change a few lines. &lt;strong&gt;Just preparing that first context had become a job in itself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I decided to backtrack. Every ticket, idea, piece of feedback, or plan has a fundamental source of pain buried in it, and they reveal those roots at wildly different levels of detail. The first move is to normalize that, so &lt;strong&gt;for each ticket, I get the agent to answer one question: I want to make this, but why?&lt;/strong&gt; Summarizing is the one thing AI is genuinely good at no matter how big the context is, so it is great at isolating the original problem back out of a messy ticket. That extracted dilemma became the baseline of the context.&lt;/p&gt;

&lt;p&gt;Next I tried doing the conceptual work of figuring out what solution would actually fit. On its own, that was just daydreaming. It was fine for the obvious tasks, but when one needed a slightly complex approach, the abstract plan didn't hold up. I had to keep reversing decisions every time I hit blockers forming when making detailed plans or even during implementation. So I added another step after forming the concept to make the idea real enough to act on. That's when I &lt;strong&gt;borrowed the idea of &lt;a href="https://adr.github.io/" rel="noopener noreferrer"&gt;Architecture Decision Records&lt;/a&gt; and started writing Constraints.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But another problem surfaced, mostly on small tasks: &lt;strong&gt;the agent would force constraints out of thin air, and those fussy little constraints got in the way of the next plan and code change.&lt;/strong&gt; So I capped their density with hard length limit: each constraint is two sentences, one for what it is and one for why it needs to exist, and I told it to skip file names and actual code unless that was the only way to say it. After several extra iteration, the agents stopped squeezing out architectural plans, and it held a steady density no matter the context size. Although it sometimes failed a bit because the right size/density of context heavily depended on my understanding of the topic, I have much more control now. &lt;strong&gt;If a constraint was too tight I'd lift it; if it was too vague I'd dig in,&lt;/strong&gt; and either learn something new or catch slop early. Since no concrete plan or code had happened yet, iterating stayed cheap. Depending on task size, the whole shape usually fit in 200 to 400 words at a glance, so reviews got stress-free and genuinely easy.&lt;/p&gt;

&lt;p&gt;Once I had the shape, I had it write the implementation plan. &lt;strong&gt;I split tasks into single-commit-sized chunks, shipping one at a time.&lt;/strong&gt; That worked okay, and changes of about four or five files kept code review easy, but it kept hiccupping. &lt;strong&gt;The agent often wrote the plan at nearly the level of the code changes itself, and the burden of reading the same thing twice kept growing until I couldn't ignore it.&lt;/strong&gt; At that moment, I'd rather just read the code. But skipping the plan entirely would just become blind vibecoding, back to the same problem again.&lt;/p&gt;

&lt;p&gt;So what is a good plan? &lt;strong&gt;A good plan gives clear contracts.&lt;/strong&gt; It says how each module talks to the next one. So I made the skill focus only on the top level: exported functions and interfaces. Describe only the change to a contract, in one sentence. We don't care how the work happens inside a module, only how modules meet at the edges. Since then, I could focus purely on designing responsibilities.&lt;/p&gt;

&lt;p&gt;Of course, some changes need more than one sentence. So I added a window for the agents. If the change is about the contract, the agents write pseudocode spotlighting only the contract change. If it's internal flow, the agents sketch it as an ascii diagram. Same for UI, the agents draw an ascii wireframe. Some people might ask how anyone's supposed to mock a screen in ascii, but once a task is one commit big, the surface I can touch is tiny, so a rough wireframe is more than enough. Here's the actual snippets my agents generate when working on this app.&lt;/p&gt;

&lt;p&gt;Pseudocode for a module-level contract change&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/lib/operation-search.ts&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;OperationSearchConditions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="na"&gt;exactOperationNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="c1"&gt;// was: operationNumber: string | null&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;toggleSearchToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&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;assignee&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// new — append the token when absent, strip it when present&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Function flow preview&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;active polar sub? ──yes──► usedSeats &amp;gt; seat cap ? seats-exceeded : active
        └────────no──────► usedSeats &amp;gt; 1        ? suspended      : free
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Layout mockup #1 - Operation page structure change (task 1)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;before                       after
┌───────────┬───────────┐    index route             detail route
│ list panel│ detail /  │    ┌──────────┐           ┌─────────────────┐
│ (always)  │ "select…" │ →  │nav │list │ row click │nav │bread crumb │
│           │           │    │    │     │ ────────► │    │op detail   │
└───────────┴───────────┘    └──────────┘           └─────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Layout mockup #2 - Operation page navigation (task 2)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────┐
│ ⬡ Operations   ✎ │
│ All operations   │  → ?search cleared
│ ASSIGNEES        │
│  (RO) rokt33r(me)│  → ?search=assignee:rokt33r
│  (JC) junyoung   │
│ LABELS           │
│  «bug»           │  → ?search=label:bug
│  «infra»         │
└──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The &lt;code&gt;nav&lt;/code&gt; region shown in task 1 gets fleshed out in the next task.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Layout mockup #3 - Operation list item (task 3)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;◉  #275  Renew operations page      «infra»        (RO)(JC)   11:38
▲status ▲num ▲title (truncates)     ▲label pills   ▲avatars   ▲date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The &lt;code&gt;list&lt;/code&gt; region shown in task 1 gets fleshed out in a later task.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then a new problem showed up. &lt;strong&gt;Agents love to build the small pieces first and wire everything together at the very end.&lt;/strong&gt; To know how the journey goes, I'd have to read every task. And it was much worse for UI. The agents built the leaf components first, and I couldn't even review them until the whole page existed. Then I realized: agents don't work like people. &lt;strong&gt;They optimize for one-shotting everything at once, while we don't. When a person builds, we start from the big shape and fill in the detail as we need it,&lt;/strong&gt; like drawing. Most people start a rough sketch first, then draw more detail, and more, until it looks right to them.&lt;/p&gt;

&lt;p&gt;So I flipped the order. I pinned domain level contracts first. Then I built the big pieces, a whole endpoint or a whole page, while leaving some placeholders or skeleton components. Next I filled in the detail until it looked satisfying. Now I read the big picture as I ship it. I don't need to read every task up front. &lt;strong&gt;The code change itself becomes the preview of the next task.&lt;/strong&gt; I read the first one, and it previews the second. The second previews the third and the fourth.&lt;/p&gt;

&lt;p&gt;Lastly, I gave another small window for the agents. Every task has a small goal, and &lt;strong&gt;sometimes the goal requires more than the plan.&lt;/strong&gt; So I let the agents improvise, but made them flag in the plan doc with the same format as the plan. To differentiate tasks, &lt;strong&gt;I called the improvising a Deviation.&lt;/strong&gt; Also I made it log not just the agent's Deviations but mine too. So there are two kinds: the agent was wrong, or I was. Studying both kept sharpening how I review the plan itself, and the whole experience got more pleasant.&lt;/p&gt;

&lt;p&gt;With the whole flow in place, I can handle any context. The agents now work at a fixed density no matter how big the context gets, so even a large task still fits in a five-minute review window. &lt;strong&gt;All I have to do is follow the steady path.&lt;/strong&gt; The agent's output stays that limited, so I can't really burn out. It even tells me where to chop a task: more than 20 constraints or 10 tasks is usually a good sign to split. So my agents and I both keep our sanity, reviewing everything from idea to plan to code, &lt;strong&gt;with &lt;del&gt;no&lt;/del&gt;minimal hallucination and no burnout.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm9x66vy0e81nokyyd5mr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm9x66vy0e81nokyyd5mr.png" alt="token usage stats in naholo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also started measuring the token cost of each phase, so I&lt;br&gt;
could judge it by objective numbers instead of just my gut. Across hundreds of tickets, the rough average came out like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;concept and constraint decisions: 7.3%&lt;/li&gt;
&lt;li&gt;cutting tasks: 17.1%&lt;/li&gt;
&lt;li&gt;implementing code: 65.4%&lt;/li&gt;
&lt;li&gt;other: 10.2%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which makes the whole thing obvious. When I catch a problem in the 7.3% or the 17.1%, &lt;strong&gt;fixing it costs a ninth of the tokens before I've made the tasks, or a third before I've made any code changes.&lt;/strong&gt; And because each task only describes module-level contracts, changing the plan later costs far less. It all adds up: my token usage dropped a lot. During work hours I run three agents at once, each on its own project and worktree, and &lt;strong&gt;I still can't manage to use more than 30% of my $100 Claude x5 plan.&lt;/strong&gt; (Before my parental leave last year I'd blow through even the x20 plan every time, and I was reaching for Sonnet.)&lt;/p&gt;

&lt;p&gt;So now I'm really enjoying coding again. Even with a CTO's load of meetings and clients' security incidents to deal with, I still ship my own code consistently, fully reviewed. And this side project I ship after work, whittling the plan and code down in the gaps while I look after my two boys. The agent still slips sometimes, but every step has a hard limit, so I roll it back before it grows out of control. And following the workflow, the agent tames itself within the session, so even when it strays I nudge it back easily. Even when the context gets too big to be recovered, it's no big deal: since a ticket's whole context lives in one plan file, I can just start a fresh agent without &lt;code&gt;/compact&lt;/code&gt;. It already understands the workflow, so loading the file once is enough to carry on. And with no &lt;code&gt;/compact&lt;/code&gt;, there's no wait for it, and no more hallucinations from a bad summary that drops the important parts and keeps the useless ones.&lt;/p&gt;

&lt;p&gt;This month I finally talked my team into using it. They were skeptical, which is fair. The workflow is based on a web app, a set of skills and a CLI that hands tools and commands to agents, and it's genuinely hard to say in one sentence what it even is. Then they tried it. The changes were dramatic. Their throughput became double or triple, mostly because the stress dropped and they stopped getting fried, and the schedule buffer, the extra time they tack onto every estimate to cover the unexpected, went unused. &lt;strong&gt;A five-day task landed in a day and a half, and their token usage dropped 30 to 60% per task, most dramatically on the bigger ones.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxh00d6jrftjflnvchwvt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxh00d6jrftjflnvchwvt.png" alt="naholo in Claude Code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The other thing the people notice is that &lt;strong&gt;there's almost nothing to learn up front.&lt;/strong&gt; The flow is simple and the agent guides them through it. I've seen "AI heroes" share dozens of skills for dozens of scenarios. I give five core skills, and they cover almost everything, from a rough idea or a raw complaint all the way down to shipped code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# core skills&lt;/span&gt;
/infil   &lt;span class="o"&gt;(&lt;/span&gt;Infiltration&lt;span class="o"&gt;)&lt;/span&gt; pull context down from the web app
/warno   &lt;span class="o"&gt;(&lt;/span&gt;WARNING ORDER&lt;span class="o"&gt;)&lt;/span&gt; lock the concept and the constraints
/opord   &lt;span class="o"&gt;(&lt;/span&gt;OPERATION ORDER&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;cut &lt;/span&gt;the tasks
/splash  &lt;span class="o"&gt;(&lt;/span&gt;the call &lt;span class="k"&gt;for &lt;/span&gt;an artillery or air strike, &lt;span class="s2"&gt;"splash out / splash over"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; implement each task
/exfil   &lt;span class="o"&gt;(&lt;/span&gt;Exfiltration&lt;span class="o"&gt;)&lt;/span&gt; push context back up to the web app

&lt;span class="c"&gt;# extra skills&lt;/span&gt;
/recon   draft a plan change
/chop    &lt;span class="nb"&gt;split &lt;/span&gt;an issue
/fob     &lt;span class="o"&gt;(&lt;/span&gt;Forward Operating Base&lt;span class="o"&gt;)&lt;/span&gt; file a ticket straight from the codebase
/frago   &lt;span class="o"&gt;(&lt;/span&gt;FRAGMENTARY ORDER&lt;span class="o"&gt;)&lt;/span&gt; change constraints and tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And why the military words?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;My ROK army experience just popped into my head. (I don't miss it at all though.)&lt;/li&gt;
&lt;li&gt;I love Call of Duty. Honestly can't wait for "Modern Warfare 사" at the end of the year.&lt;/li&gt;
&lt;li&gt;The military decision making process (MDMP) handed me all sorts of hints, so I swapped the vocabulary over too.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The mapping ended up like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;issue → operation&lt;/li&gt;
&lt;li&gt;member → operator&lt;/li&gt;
&lt;li&gt;concept and constraints → WARNING ORDER (WARNO)&lt;/li&gt;
&lt;li&gt;tasks → OPERATION ORDER (OPORD)&lt;/li&gt;
&lt;li&gt;epic → campaign (WIP)&lt;/li&gt;
&lt;li&gt;milestone → rallypoint (WIP)&lt;/li&gt;
&lt;li&gt;plan change → FRAGMENTARY ORDER (FRAGO)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another bonus is that my team now talks in this ridiculous tacticooool way in meetings. &lt;strong&gt;"For this op, I've got the WARNO ready, mind reviewing it?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So if you're stressed, or you just want to enjoy building again, leaning back but without the irresponsible vibecoding, &lt;a href="https://naholo.app" rel="noopener noreferrer"&gt;give it a shot&lt;/a&gt;. It's free for a solo user. If you like it, share it with your team, and the collaboration features are getting stronger too. And it's all open source, so come by the &lt;a href="https://github.com/rokt33r/naholo" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;, star it, fork it.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://naholo.app/ja/blog/1-built-naholo" rel="noopener noreferrer"&gt;日本語&lt;/a&gt;&lt;br&gt;
&lt;a href="https://naholo.app/blog/1-built-naholo" rel="noopener noreferrer"&gt;English&lt;/a&gt;&lt;br&gt;
&lt;a href="https://naholo.app/ko/blog/1-built-naholo" rel="noopener noreferrer"&gt;한국어&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>vibecoding</category>
      <category>aicoding</category>
    </item>
    <item>
      <title>Weekly report #3</title>
      <dc:creator>Junyoung Choi</dc:creator>
      <pubDate>Sun, 26 Apr 2020 10:51:09 +0000</pubDate>
      <link>https://dev.to/rokt33r/weekly-report-3-2hig</link>
      <guid>https://dev.to/rokt33r/weekly-report-3-2hig</guid>
      <description>&lt;h1&gt;
  
  
  ✅ What we did this week
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The legacy app
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Release v0.15.3&lt;/li&gt;
&lt;li&gt;Merged horizontal split mode (It will be shipped in v0.16)
&lt;a href="https://github.com/BoostIO/Boostnote/pull/2936" rel="noopener noreferrer"&gt;https://github.com/BoostIO/Boostnote/pull/2936&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The new app
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Released v0.4.0 and v0.4.1 of the desktop app&lt;/li&gt;
&lt;li&gt;Rolled out v0.4.1 of the mobile app (In review now. It’ll be published in 3 days)&lt;/li&gt;
&lt;li&gt;Fixed Navigating UX (Shipped in v0.4.0)&lt;/li&gt;
&lt;li&gt;Fixed Emoji bug (Shipped in v0.4.1)&lt;/li&gt;
&lt;li&gt;Fixed app crash after editing (Shipped in v0.4.1)&lt;/li&gt;
&lt;li&gt;Refined UI coloring (This issue has been resolved partially in v0.4.0, but I still need to work more to completely finish it)&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  🏃 What we will do next week
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The legacy app
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Review and merge opening a note in a new window
&lt;a href="https://github.com/BoostIO/Boostnote/pull/3110" rel="noopener noreferrer"&gt;https://github.com/BoostIO/Boostnote/pull/3110&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Opening a note in a separate window is really awesome, but the pull request is affecting the electron main processor, so I need to check that the auto updater is compatible with this feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  The new app
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Improve cloud storage sync speed and authentication flow&lt;/li&gt;
&lt;li&gt;Re-implement Bookmark&lt;/li&gt;
&lt;li&gt;Support i18n completely&lt;/li&gt;
&lt;li&gt;Implement initial prototype of File System based storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The list isn’t changed from last week because I was working on fixing some critical bugs in both the mobile app and the desktop app. But this week, I think I can fully focus on these issues.&lt;/p&gt;

&lt;h1&gt;
  
  
  🆘 Featured issues
&lt;/h1&gt;

&lt;p&gt;From this week, we want to introduce some issues and pull requests that anyone can tackle and review. If you would like to contribute to our project, please consider the list below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Issues to resolve
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Implement synced scrolling for split view
&lt;a href="https://github.com/BoostIO/BoostNote.next/issues/247" rel="noopener noreferrer"&gt;https://github.com/BoostIO/BoostNote.next/issues/247&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Implement PDF export
&lt;a href="https://github.com/BoostIO/BoostNote.next/issues/243" rel="noopener noreferrer"&gt;https://github.com/BoostIO/BoostNote.next/issues/243&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Improve default preview CSS style (Easy)
&lt;a href="https://github.com/BoostIO/BoostNote.next/issues/435" rel="noopener noreferrer"&gt;https://github.com/BoostIO/BoostNote.next/issues/435&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Improve storage deleting message (Easy)
&lt;a href="https://github.com/BoostIO/BoostNote.next/issues/434" rel="noopener noreferrer"&gt;https://github.com/BoostIO/BoostNote.next/issues/434&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Implement option to show notes only in a folder, not in its sub folders
&lt;a href="https://github.com/BoostIO/BoostNote.next/issues/419" rel="noopener noreferrer"&gt;https://github.com/BoostIO/BoostNote.next/issues/419&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pull requests to review
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduce Italian locale &lt;a href="https://github.com/BoostIO/BoostNote.next/pull/436" rel="noopener noreferrer"&gt;https://github.com/BoostIO/BoostNote.next/pull/436&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>boostnote</category>
      <category>markdown</category>
      <category>weeklyreport</category>
      <category>noteapp</category>
    </item>
    <item>
      <title>Update Notes v0.4.0(new) and v0.15.3(legacy)</title>
      <dc:creator>Junyoung Choi</dc:creator>
      <pubDate>Mon, 20 Apr 2020 09:32:00 +0000</pubDate>
      <link>https://dev.to/rokt33r/update-notes-v0-4-0-new-and-v0-15-3-legacy-28a3</link>
      <guid>https://dev.to/rokt33r/update-notes-v0-4-0-new-and-v0-15-3-legacy-28a3</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxgl9lsyfurlo91x86xeb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxgl9lsyfurlo91x86xeb.png" alt="Update Notes v0.4.0(new) and v0.15.3(legacy)" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We released a new version for both the new and legacy app today.&lt;/p&gt;

&lt;h1&gt;
  
  
  The new app(v0.4.0)
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/BoostIO/BoostNote.next/releases/tag/v0.4.1" rel="noopener noreferrer"&gt;https://github.com/BoostIO/BoostNote.next/releases/tag/v0.4.1&lt;/a&gt;&lt;br&gt;
(v0.4.1 has been released Apr 23, 2020 to fix some critical bugs. Please check changes in the link.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Emoji shortcut support
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjx3df7gmvrtqgghpiels.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjx3df7gmvrtqgghpiels.gif" alt="Emoji demo" width="799" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is implemented by &lt;a href="https://github.com/AWolf81" rel="noopener noreferrer"&gt;@AWolf81&lt;/a&gt;. Now you can use emoji more easily like in Github.&lt;/p&gt;

&lt;h2&gt;
  
  
  Clickable checkboxes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F805v7cqxs464aakd9x3d.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F805v7cqxs464aakd9x3d.gif" alt="Clickable checkboxes demo" width="799" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is implemented by &lt;a href="https://github.com/pfftdammitchris" rel="noopener noreferrer"&gt;@pfftdammitchris&lt;/a&gt;. Now you can click checkboxes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better Side Navigator
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fybagcekitbracjwl4cv2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fybagcekitbracjwl4cv2.gif" alt="Side navigator demo" width="382" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’ve improved the side navigator.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Show syncing status&lt;/li&gt;
&lt;li&gt;Refine UI coloring&lt;/li&gt;
&lt;li&gt;Replace custom icons with material design icons&lt;/li&gt;
&lt;li&gt;Hide “Tags”, “Trash” and “Attachments” nav link if they are empty
(We’re going to make this behavior configurable in the next update)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other changes
&lt;/h2&gt;

&lt;p&gt;We’ve disabled tutorial, bookmark and import pages temporarily because they look broken, but we will implement them again. We will implement the bookmark feature first and include it in v0.5.0. Others will be implemented along with File System based storage.&lt;/p&gt;

&lt;h1&gt;
  
  
  The legacy app(v0.15.3)
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/BoostIO/boost-releases/releases/tag/v0.15.3" rel="noopener noreferrer"&gt;https://github.com/BoostIO/boost-releases/releases/tag/v0.15.3&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scheduled theme
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwn1v10x8ufdaq9j35x0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwn1v10x8ufdaq9j35x0b.png" alt="Scheduled theme demo" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can now configure the app to change theme automatically based on time. This feature is implemented by &lt;a href="https://github.com/gregueiras" rel="noopener noreferrer"&gt;@gregueiras&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Other improvements
&lt;/h2&gt;

&lt;p&gt;We’ve fixed some minor bugs and improved the UI a little bit.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improve inline code block style
(BoostIO/Boostnote#3473 by &lt;a href="https://github.com/arcturus140" rel="noopener noreferrer"&gt;@arcturus140&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix attachment paths when exporting a note as a markdown or a html file.
(BoostIO/Boostnote#3549 by &lt;a href="https://github.com/dredav" rel="noopener noreferrer"&gt;@dredav&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Improve Taiwanese Mandarin locale(zh-TW)
(BoostIO/Boostnote#3537 by &lt;a href="https://github.com/xatier" rel="noopener noreferrer"&gt;@xatier&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix adding a Storage that you have unlinked once
(BoostIO/Boostnote#3168 by &lt;a href="https://github.com/hikerpig" rel="noopener noreferrer"&gt;@hikerpig&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  What’s next?
&lt;/h1&gt;

&lt;p&gt;For v0.5.0, we’re going to focus on 2 main issues&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initial File System based storage&lt;/li&gt;
&lt;li&gt;Faster cloud storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;File system based storage of the new app will have better structure than the one of the legacy app. We plan to make it more stable and efficient. In v0.5.0, we will try to introduce the initial version of it. Once it has settled down, we’re going to working on reliable data migration and ship it into v0.6.0. Once it’s done, users using the old app can adopt the new app much more easily.&lt;/p&gt;

&lt;p&gt;Also, we’ll improve the current cloud storage. Its syncing is painfully slow. Each api call takes a second. But we’ve already figured out the reason now. So it will be fixed in 1~2 weeks.&lt;/p&gt;

&lt;p&gt;In addition, there will be other UX/UI improvements/fixes. We’re still working on improving UI coloring and layouts. Also some tiny features like coloring each folder are going to be implemented by our community! Please check our Github issue tracker or weekly report!&lt;/p&gt;

&lt;p&gt;And that’s all for now. Thank you for reading! If you’re interested in our work, please follow us. You can follow us from medium, reddit, facebook page and twitter account. Also it would be really awesome if you can share your idea from our slack and Github repository.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Github(New) : &lt;a href="https://github.com/BoostIO/BoostNote.next/issues" rel="noopener noreferrer"&gt;https://github.com/BoostIO/BoostNote.next/issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Github(Legacy) : &lt;a href="https://github.com/BoostIO/BoostNote/issues" rel="noopener noreferrer"&gt;https://github.com/BoostIO/BoostNote/issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Slack : &lt;a href="https://join.slack.com/t/boostnote-group/shared_invite/zt-cun7pas3-WwkaezxHBB1lCbUHrwQLXw" rel="noopener noreferrer"&gt;https://join.slack.com/t/boostnote-group/shared_invite/zt-cun7pas3-WwkaezxHBB1lCbUHrwQLXw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Reddit : &lt;a href="https://www.reddit.com/r/Boostnote/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/Boostnote/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter : &lt;a href="https://twitter.com/boostnoteapp" rel="noopener noreferrer"&gt;https://twitter.com/boostnoteapp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook : &lt;a href="https://www.facebook.com/groups/boostnote/" rel="noopener noreferrer"&gt;https://www.facebook.com/groups/boostnote/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>boostnote</category>
      <category>markdown</category>
    </item>
    <item>
      <title>Weekly report #2</title>
      <dc:creator>Junyoung Choi</dc:creator>
      <pubDate>Sun, 19 Apr 2020 09:13:19 +0000</pubDate>
      <link>https://dev.to/rokt33r/weekly-report-2-7d1</link>
      <guid>https://dev.to/rokt33r/weekly-report-2-7d1</guid>
      <description>&lt;p&gt;Sorry for the late report. We really wanted to publish this report after we release the next version of both legacy(v0.15.3) and the new app(v0.4.0). But I’m still working on them now. So both of them will be released tomorrow morning.(10 AM JST, Apr 20, 2020)&lt;/p&gt;

&lt;h1&gt;
  
  
  ✅ What we did this week
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The legacy app
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fixed inline code block style
&lt;a href="https://github.com/BoostIO/Boostnote/issues/2373"&gt;https://github.com/BoostIO/Boostnote/issues/2373&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Fixed attachment paths in exported notes
&lt;a href="https://github.com/BoostIO/Boostnote/pull/2897"&gt;https://github.com/BoostIO/Boostnote/pull/2897&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The new app
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;(WIP) Improved Navigating UX
&lt;a href="https://github.com/BoostIO/BoostNote.next/issues/403"&gt;https://github.com/BoostIO/BoostNote.next/issues/403&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;(WIP) Refined UI coloring&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BoostIO/BoostNote.next/issues/392"&gt;https://github.com/BoostIO/BoostNote.next/issues/392&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;(WIP) Fixed broken bookmarks
&lt;a href="https://github.com/BoostIO/BoostNote.next/issues/318"&gt;https://github.com/BoostIO/BoostNote.next/issues/318&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;(WIP) Implemented exporting a markdown note with optional front matter
&lt;a href="https://github.com/BoostIO/BoostNote.next/pull/398/files"&gt;https://github.com/BoostIO/BoostNote.next/pull/398/files&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m working on the top 3 tasks in this PR. Please check if you’re interested. It includes tons of style refactoring.&lt;br&gt;
&lt;a href="https://github.com/BoostIO/BoostNote.next/pull/412"&gt;https://github.com/BoostIO/BoostNote.next/pull/412&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🏃 What we will do next week
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The legacy app
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Release v0.15.3&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The new app
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Release v0.4.0&lt;/li&gt;
&lt;li&gt;Implement initial prototype of File System based storage.&lt;/li&gt;
&lt;li&gt;Improve cloud storage sync speed&lt;/li&gt;
&lt;li&gt;Support i18n completely&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>boostnotemarkdownnote</category>
    </item>
  </channel>
</rss>
