Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions web/content/journal/i-hope-it-works-out.en.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
title: "I Hope It Works Out"
date: "2026-07-18T00:30:00+09:00"
excerpt: "When all I can do is pray"
cover: "/journal/i-hope-it-works-out/crowd-supply-subscribers.png"
coverCaption: "Crowd Supply subscriber graph"
hideCover: true
featured: true
highlight: true
draft: false
---

Over three days I made a short two-minute video introducing Patternflow. It's a video I'll use for the Crowd Supply launch too, and I made it hoping the views would come in on YouTube. Looking at where things stand a day after posting, that hope has collapsed miserably. The view count isn't even in the hundreds. Is it the thumbnail, or the title? Still, the saving grace is that the Instagram version, which I uploaded as-is thinking of it as a bonus, is doing decently. Thanks to that, I dodged the absolute worst.

<figure className="journal-md-figure">
<iframe width="100%" height="405" src="https://www.youtube.com/embed/BPMhTChY9vg" title="Patternflow intro video" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowFullScreen />
<figcaption>The Patternflow intro video I spent three days on.</figcaption>
</figure>

Today the GitHub stars passed 200. Later than I'd expected. As far as I could feel, the star growth had stopped entirely this past week. It felt like hitting some kind of wall, and the same went for the Crowd Supply pre-launch. Right now, thanks to the new video, it's climbed a bit to 93. Of the 150 needed to prepare for the next stage, the launch, about a third is left. Whether I can fill it fast is anyone's guess. My wish is to fill it within a month, but I can see the growth stalling, so I have no confidence.

<figure className="journal-md-figure">
<img src="/journal/i-hope-it-works-out/crowd-supply-subscribers.png" alt="Crowd Supply subscriber graph" />
<figcaption>The Crowd Supply subscriber graph. 93 people, with about a third left to reach 150.</figcaption>
</figure>

Still, I'm doing what I can. Making the video was part of that effort, and I also tweaked the CTA on mobile. I wondered whether a mechanism I'd added in the past to drive funding sign-ups was actually backfiring, so I removed it. Normally you shouldn't go on gut like this; you should test everything and work from data, I know, but it's too much of a pain. No, it isn't that it's a pain, it's that I can't. I don't have the energy for it. I barely have enough for the other worries and the flailing to make them go away.

Once I'd made the project video, I ended up starting the documentation I'd been putting off. Honestly it's less that I'd been putting it off and more that I wasn't sure. Testing, fixing, failing, improving again, over and over, and all I can see is what still needs fixing. Doing a bit of the documentation, I got the feeling that even this much is enough. No. It isn't enough. But I'm doing it anyway.

I feel like Patternflow is functioning as open source, to some degree. For one, quite a few people are building it themselves, and it's become the spark for entirely new projects, not just the device. Since I started it wanting other people to create their own things, the projects with the most variation are the ones that encourage me most. It's good. I hope everyone makes their own like that and tells me about it. That's when I get the reassurance that I'm doing okay after all.

Someone asked whether they could commercialize Patternflow and sell it. Of course they can. At this stage, of course, building it exactly from the materials I've shared and selling it isn't allowed. That's because my contract with Crowd Supply has a no-pre-sale clause, and once a batch is done, even that becomes possible. For large-scale sales, naturally, they'd talk with me and, if needed, do something like a license agreement. And even for small runs, telling me in advance like this is just good manners. That said, I have no intention of enforcing it or blocking anyone from selling. No, honestly, I'd rather like it. It means more Patternflow users. In the end my goal isn't to sell devices but to build an ecosystem, so someone is doing my job for me. And the profit that comes from it is, of course, the reward for their effort.

A few museums have reached out wanting to buy a Patternflow. They're all the same. They won't tell me their budget or their purchase price, and insist I be the only one to name a figure. Then they knock it down, saying they don't have that kind of money. Seriously, it pisses me off. It doesn't feel like negotiation, it feels like being assessed, and the email exchanges drag on so long that the uncertainty over that stretch dries me out. I need to make a few things definite. First, the one that can represent Patternflow, the very first model I built, which by now is a keepsake. If you want to buy it, it's one million dollars. Which is to say I'm not selling. And for editions, if they don't name a price up front, I should just ignore it.

Annoying. There's a lot of stress in my relationships lately too. I can't understand other people's behavior at all. If there'd been no contact between us at all, I wouldn't have cared this much. I know it shouldn't be this way, but getting close to people is starting to scare me. Ah, I don't know. It just feels like some kind of mental illness.

Keep going, I guess. Whatever comes of it, I have to do it first. Whether the outcome is good or bad, I don't know. All I can do is pray it's good. Should I look into religion? I've been an atheist my whole life, but I feel like if I had a religion, life might be easier. If I made something bigger than myself and believed in it, wouldn't about half the pointless worrying disappear? I want to live long and healthy. Physically, I just have to exercise steadily, eat well, and sleep well. Ah, I haven't been sleeping well, actually. Anyway, that's something I can control. Mentally, on the other hand, there's no controlling it. They say stress is the root of all illness, and living like this, it feels like I'll die young. Thinking that way, I feel like I have to take some measure just to stay alive. As for therapy, I've done it several times without much improvement. People say to just date someone, and that looks hard too. What's left, in the end, seems to be religion. But personally religion doesn't sit well with me, so I don't know. Ah, maybe I should try meditation again.
39 changes: 39 additions & 0 deletions web/content/journal/i-hope-it-works-out.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
title: "잘 되면 좋겠다"
date: "2026-07-18T00:30:00+09:00"
excerpt: "할 수 있는 게 기도뿐이라"
cover: "/journal/i-hope-it-works-out/crowd-supply-subscribers.png"
coverCaption: "크라우드 서플라이 구독자 수 그래프"
hideCover: true
featured: true
highlight: true
draft: false
---

3일 동안 패턴플로우를 소개하는 2분짜리 짧은 영상을 만들었다. 크라우드 서플라이 런칭에도 사용할 영상이며, 유튜브에서 조회수가 잘 나오길 바라며 만들었다. 게시한 지 하루가 지난 지금 상황을 보았을 때, 그 기대는 처참히 무너졌다. 조회수가 백 단위도 되지 못한다. 썸네일이나 제목이 문제인가. 그럼에도 다행인 점은, 보너스라 생각하고 그대로 올린 인스타 영상이 나쁘지 않은 성과를 보이고 있다. 덕분에 아주 최악은 면했다.

<figure className="journal-md-figure">
<iframe width="100%" height="405" src="https://www.youtube.com/embed/BPMhTChY9vg" title="패턴플로우 소개 영상" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowFullScreen />
<figcaption>3일 동안 만든 패턴플로우 소개 영상.</figcaption>
</figure>

오늘 깃허브 스타 수 200개를 넘겼다. 생각보다 늦었다. 내 체감으로는 최근 일주일 동안 스타 수 증가세가 아예 멈추었었다. 무언가 벽을 마주한 기분이었고, 그건 크라우드 서플라이 프리런칭도 마찬가지였다. 지금은 새로운 영상 덕분에 조금 늘어 93명이 되었다. 다음 단계인 런칭을 준비하기 위한 150명 중 1/3 정도가 남은 셈이다. 빠르게 채울 수 있을지는 미지수다. 바람으로는 한 달 안에 채우고 싶은데, 증가세가 주춤해지고 있는 게 보여서 자신이 없다.

<figure className="journal-md-figure">
<img src="/journal/i-hope-it-works-out/crowd-supply-subscribers.png" alt="크라우드 서플라이 구독자 수 그래프" />
<figcaption>크라우드 서플라이 구독자 수 그래프. 93명, 150명까지 1/3 정도가 남았다.</figcaption>
</figure>

그래도 할 수 있는 것들을 해가고 있다. 그 노력의 일환으로 영상을 제작한 것이고, 모바일에서의 CTA도 조금 수정했다. 펀딩 참여를 유도하기 위해 과거에 추가했던 장치가 오히려 역효과를 일으키고 있는 건가 싶어 없앴다. 원래는 이렇게 감으로 하면 안 되고, 테스트를 전부 하고 데이터로 해야 함을 알지만 너무 귀찮다. 아니, 귀찮은 게 아니라 못하는 거다. 그럴 에너지가 없다. 다른 걱정들과, 이를 없애기 위한 발버둥에 쓰기에도 부족하다.

프로젝트 소개 영상을 만들고 나니, 그동안 미뤄왔던 문서화 작업을 시작하게 됐다. 사실 미뤄왔다기보다는 확신이 없었다. 테스트하고 고치고 실패하고 다시 개선하고를 반복하다 보니 고쳐야 할 부분들만 보인다. 문서화를 조금 해보니까 이 정도도 충분하다는 느낌을 받았다. 아니다. 충분하지 않다. 그럼에도 그냥 하는 거다.

패턴플로우가 어느 정도 오픈소스로서 기능을 하고 있다고 느낀다. 우선 직접 만들고 있는 사람들이 꽤 생겼고, 기기뿐만 아니라 아예 새로운 프로젝트의 발화점이 되기도 했다. 다른 사람들이 자신만의 것을 창작하기를 바라는 마음에서 시작한 것이라, 그만큼 많은 변형이 일어난 프로젝트가 내게 더욱 고무적이다. 좋다. 다들 그렇게 자신만의 것을 만들어서 알려주면 좋겠다. 그럴 때 내가 그래도 잘 하고 있구나 라는 안심이 든다.

누군가는 패턴플로우를 사업화해서 판매해도 되냐고 물어보더라. 당연히 된다. 물론 현재 단계에서, 내가 공유해둔 자료들을 기반으로 그대로 만들어 판매하는 건 안 된다. 그 이유는 크라우드 서플라이와의 계약에 선판매 금지 조항이 있기 때문이고, 한번 배치가 끝나고 나면 그것도 가능하다. 당연히 대량 판매의 경우엔 나와 이야기를 하고, 필요시 라이선스 계약 비슷하게 해야 한다. 소량이더라도 나에게 이렇게 미리 알려주고 하는 건 예의이고. 다만 이를 강제하거나 판매하는 걸 막을 생각은 없다. 아니, 나는 솔직히 오히려 좋다. 패턴플로우 사용자가 더 많이 늘어난다는 거니까. 결국에 나는 기기를 파는 게 아니라 한 생태계를 만드는 게 목표기에, 내가 해야 할 일을 누군가 대신 해주는 거다. 거기서 생기는 이익은 당연히 그 사람의 노력에 대한 대가인 것이고.

몇몇 미술관에서 패턴플로우를 구매하고 싶다는 연락도 왔다. 하나같이 똑같다. 자신들의 예산이나 구매 가격을 알려주지 않고 나에게만 제시하라고 한다. 그러곤 그만한 돈이 없다고 깐다. 진짜 개짜증난다. 협상이 아니라 평가당하는 기분이고, 이메일로 소통하는 기간도 길어서 그 기간 동안 불확실성이 나를 메마르게 하더라. 몇 가지를 확실하게 해두어야겠다. 우선 패턴플로우를 대표할 수 있는, 맨 처음 만들었던 이젠 소장용이 된 첫 번째 모델. 사려면 100만 달러다. 사실상 팔지 않겠다는 거다. 그리고 에디션의 경우에는, 가격을 선제시하지 않는다면 무시해야겠다.

짜증난다. 요즘 인간관계에서도 스트레스가 많다. 다른 사람의 행동을 도무지 이해할 수 없다. 차라리 아예 접점이 없었다면 이렇게 신경 쓰지도 않았을 테다. 그래선 안 된다는 걸 알지만, 다른 사람이랑 친해지기가 무서워지고 있다. 아 모르겠다. 그냥 정신병 같다.

계속 해야지. 뭐가 되건 일단은 해야 한다. 그 결과가 좋을지 나쁠지는 모른다. 그저 좋기를 기도할 뿐이다. 종교를 좀 알아볼까? 평생 무신론자였는데, 종교가 생긴다면 어쩌면 인생이 더 편할 수 있을 거라 느껴진다. 나보다 더 큰 무언가를 만들고 믿는다면 쓸데없는 걱정의 절반 정도는 사라지지 않을까. 건강하게 오래 살고 싶다. 신체적으로는 꾸준히 운동하고 좋은 걸 먹고 잘 자면 되는데, 아 잘 못 자고 있긴 하구나. 어쨌든 내가 통제할 수 있다. 반면 정신적으로는 도저히 통제가 안 된다. 스트레스가 만병의 근원이라는데, 이렇게 살다간 젊어서 단명할 것만 같다. 이렇게 생각하니 살기 위해선 뭐라도 조치를 취해야겠다 느껴진다. 심리상담의 경우에는 수차례 해봤지만 크게 개선된 바가 없고, 뭐 연애를 하면 된다 하는데 그것도 어려워 보이고. 결국엔 남아 보이는 게 종교다. 근데 개인적으로 종교가 달갑진 않아서 모르겠다. 아, 명상이나 다시 해볼까.
1 change: 1 addition & 0 deletions web/content/journal/me-and-patternflow.en.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ title: "Me and Patternflow"
date: "2026-05-17T14:30:00+09:00"
excerpt: "How far have you come?"
cover: "/journal/me-and-patternflow/instagram-grid.png"
highlight: true
draft: false
---

Expand Down
1 change: 1 addition & 0 deletions web/content/journal/me-and-patternflow.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ title: "나와 패턴플로우"
date: "2026-05-17T14:30:00+09:00"
excerpt: "어디까지 왔니."
cover: "/journal/me-and-patternflow/instagram-grid.png"
highlight: true
draft: false
---

Expand Down
1 change: 1 addition & 0 deletions web/content/journal/nam-june-paik-me-patternflow.en.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ title: "Nam June Paik, Me, Patternflow"
date: "2026-06-07T20:00:00+09:00"
excerpt: "On being together."
cover: "/journal/nam-june-paik-me-patternflow/pattern-30.png"
highlight: true
draft: false
---

Expand Down
1 change: 1 addition & 0 deletions web/content/journal/nam-june-paik-me-patternflow.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ title: "백남준, 나, 패턴플로우"
date: "2026-06-07T20:00:00+09:00"
excerpt: "함께한다는 것."
cover: "/journal/nam-june-paik-me-patternflow/pattern-30.png"
highlight: true
draft: false
---

Expand Down
1 change: 1 addition & 0 deletions web/content/journal/v1-30-days.en.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ title: "Patternflow in 30 days"
date: "2026-04-29T20:41:00+09:00"
excerpt: "From tangled wires to open source."
cover: "/journal/v1-30-days/patternflow-v1-complete.jpg"
highlight: true
draft: false
---

Expand Down
1 change: 1 addition & 0 deletions web/content/journal/v1-30-days.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ title: "패턴플로우 30일"
date: "2026-04-29T20:41:00+09:00"
excerpt: "엉킨 전선에서 오픈소스까지."
cover: "/journal/v1-30-days/patternflow-v1-complete.jpg"
highlight: true
draft: false
---

Expand Down
1 change: 1 addition & 0 deletions web/content/journal/what-is-patternflow.en.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ date: "2026-06-29T21:30:00+09:00"
excerpt: "Where am I headed"
cover: "/journal/what-is-patternflow/crowd-supply-pre-launch.png"
coverCaption: "The recently opened Crowd Supply pre-launch page"
highlight: true
draft: false
---

Expand Down
1 change: 1 addition & 0 deletions web/content/journal/what-is-patternflow.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ date: "2026-06-29T21:30:00+09:00"
excerpt: "어디로 가는 중인가"
cover: "/journal/what-is-patternflow/crowd-supply-pre-launch.png"
coverCaption: "최근 오픈한 크라우드 서플라이 프리런칭 페이지"
highlight: true
draft: false
---

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions web/src/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -2040,6 +2040,13 @@
background: var(--cream-2);
cursor: zoom-in;
}
.journal-md-figure iframe {
display: block;
width: 100%;
aspect-ratio: 16 / 9;
height: auto;
border: 0;
}
.journal-md-figure figcaption {
margin-top: 10px;
font-family: var(--mono);
Expand Down
11 changes: 2 additions & 9 deletions web/src/components/journal/JournalIndex.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@ type JournalIndexProps = {
lang: JournalLang;
};

const featuredSlug = "shaking-it-off";

export default function JournalIndex({ posts, lang }: JournalIndexProps) {
const hero = posts.find((post) => post.slug === featuredSlug) ?? posts[0];
const hero = posts.find((post) => post.featured) ?? posts[0];
const archive = posts;
const postNumbers = new Map(
[...posts]
Expand All @@ -20,11 +18,6 @@ export default function JournalIndex({ posts, lang }: JournalIndexProps) {
);
const newestSlug = posts[0]?.slug;
const getPostHref = (slug: string) => lang === "en" ? `/journal/${slug}/en` : `/journal/${slug}`;
const isAnchorPost = (slug: string) =>
slug === "v1-30-days" ||
slug === "me-and-patternflow" ||
slug === "nam-june-paik-me-patternflow" ||
slug === "what-is-patternflow";

return (
<main className="journal-index">
Expand Down Expand Up @@ -71,7 +64,7 @@ export default function JournalIndex({ posts, lang }: JournalIndexProps) {
{archive.map((post) => (
<li key={post.slug}>
<Link
className={`pf-row${isAnchorPost(post.slug) ? " journal-anchor-post" : ""}`}
className={`pf-row${post.highlight ? " journal-anchor-post" : ""}`}
href={getPostHref(post.slug)}
>
<span className="pf-ghost">{postNumbers.get(post.slug)}</span>
Expand Down
4 changes: 4 additions & 0 deletions web/src/lib/journal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ export type JournalFrontmatter = {
series?: string;
draft?: boolean;
hideCover?: boolean;
featured?: boolean;
highlight?: boolean;
};

export type JournalPost = JournalFrontmatter & {
Expand Down Expand Up @@ -82,6 +84,8 @@ function readPost(slug: string, lang: JournalLang): JournalPost {
series: data.series,
draft: data.draft,
hideCover: data.hideCover,
featured: data.featured,
highlight: data.highlight,
content,
readingTime: getReadingTime(content, lang),
};
Expand Down
Loading
Loading