DEV Community

shaojie gong profile picture

shaojie gong

indie dev shipping small useful web tools & apps. building in public. currently running makelineart, taplup, omniemoji + a plant care app 🌱

Joined Joined on 
NotebookBloom: Shipping analytics without collecting user content

NotebookBloom: Shipping analytics without collecting user content

1
Comments
1 min read

Want to connect with shaojie gong?

Create an account to connect with shaojie gong. You can also sign in below to proceed if you already have an account.

Already have an account? Sign in
NotebookBloom: Three CTAs, one GIF, and a cleaner way to measure intent

NotebookBloom: Three CTAs, one GIF, and a cleaner way to measure intent

2
Comments
1 min read
EmailKnow:How I stopped my own inbox from inflating my open rate — with a hash, not an IP

EmailKnow:How I stopped my own inbox from inflating my open rate — with a hash, not an IP

5
Comments
2 min read
NotebookBloom: What 559 Google impressions taught me about page-two SEO

NotebookBloom: What 559 Google impressions taught me about page-two SEO

3
Comments
1 min read
NotebookBloom: A 40% store conversion rate can still hide the real bottleneck

NotebookBloom: A 40% store conversion rate can still hide the real bottleneck

6
Comments
1 min read
EmailKnow:I hold the keys to send email as my users. Here's how I made that as un-scary as I could.

EmailKnow:I hold the keys to send email as my users. Here's how I made that as un-scary as I could.

5
Comments
2 min read
NotebookBloom: Why I stopped treating “installed” as activation

NotebookBloom: Why I stopped treating “installed” as activation

4
Comments
1 min read
EmailKnow:The follow-up that never fired: a race condition with Gmail I didn't see coming

EmailKnow:The follow-up that never fired: a race condition with Gmail I didn't see coming

3
Comments
2 min read
NotebookBloom: How to load an entire YouTube playlist into NotebookLM and ask questions across the whole course

NotebookBloom: How to load an entire YouTube playlist into NotebookLM and ask questions across the whole course

2
Comments
2 min read
EmailKnow:Apple quietly broke every "read receipt" — here's how I stopped lying about it

EmailKnow:Apple quietly broke every "read receipt" — here's how I stopped lying about it

2
Comments
2 min read
NotebookBloom: Building on an API you don't own: why I skipped Zod and made the parser fail loud instead

NotebookBloom: Building on an API you don't own: why I skipped Zod and made the parser fail loud instead

4
Comments
2 min read
EmailKnow: an honest, open-source email tracker (0 users, and here's the whole thing)

EmailKnow: an honest, open-source email tracker (0 users, and here's the whole thing)

3
Comments 2
2 min read
My VideoObject passed Google's Rich Results Test — with two warnings. Both were one missing timezone.

My VideoObject passed Google's Rich Results Test — with two warnings. Both were one missing timezone.

4
Comments
2 min read
My video was sharp on YouTube but blurry on my own site. The fix was one line of CSS.

My video was sharp on YouTube but blurry on my own site. The fix was one line of CSS.

2
Comments
2 min read
Two weeks in public: 19 installs, 21 visitors, and the whole funnel in real numbers

Two weeks in public: 19 installs, 21 visitors, and the whole funnel in real numbers

2
Comments
2 min read
My account got suspended twice this week. Here's what it taught me about building on rented land.

My account got suspended twice this week. Here's what it taught me about building on rented land.

8
Comments 4
2 min read
How to turn NotebookLM notes into Anki flashcards (free, by hand)

How to turn NotebookLM notes into Anki flashcards (free, by hand)

1
Comments
2 min read
What one week of SEO actually looks like (real numbers)

What one week of SEO actually looks like (real numbers)

2
Comments
2 min read
The Chrome Web Store rejected my extension for something it doesn't even do

The Chrome Web Store rejected my extension for something it doesn't even do

3
Comments
3 min read
A playlist has 124 videos. My tool imported 15, then 100, then finally 124.

Chasing API limits and changing JSON paths

A playlist has 124 videos. My tool imported 15, then 100, then finally 124.

9
Comments 33
3 min read
How do I start charging later without punishing the people who showed up first?

How do I start charging later without punishing the people who showed up first?

4
Comments 4
3 min read
I spent a day building the button that lets people cancel and leave me

I spent a day building the button that lets people cancel and leave me

2
Comments 4
3 min read
My billing worked. My expiry dates didn't. Here's why.

My billing worked. My expiry dates didn't. Here's why.

2
Comments 6
3 min read
My Chrome extension has no server, so I put the paywall on a remote switch

My Chrome extension has no server, so I put the paywall on a remote switch

7
Comments 12
4 min read
"I'll need a database to query this later" — the most expensive sentence in solo dev

"I'll need a database to query this later" — the most expensive sentence in solo dev

3
Comments 5
3 min read
A simple sync feature, and the five problems hiding inside it

A simple sync feature, and the five problems hiding inside it

4
Comments
3 min read
I built four products, made $0, and ended up in the ER. Here's the bug I finally found.

I built four products, made $0, and ended up in the ER. Here's the bug I finally found.

4
Comments 2
4 min read
How one lazy line turned a simple feature into a recursive DOM walker

How one lazy line turned a simple feature into a recursive DOM walker

8
Comments
3 min read
I spent a week proving a feature couldn't be built. That was the win.

I spent a week proving a feature couldn't be built. That was the win.

4
Comments 21
4 min read
Getting a flashcard out was easy. Getting it into Anki had five traps.

Getting a flashcard out was easy. Getting it into Anki had five traps.

3
Comments
3 min read
How I pulled data out of a cross-origin iframe I couldn't touch

Comments share modern browser workarounds

How I pulled data out of a cross-origin iframe I couldn't touch

22
Comments 8
3 min read
I spent a day fixing a bug that was never mine

I spent a day fixing a bug that was never mine

8
Comments
3 min read
I wrote a script to check 40 domains because every good name was taken

I wrote a script to check 40 domains because every good name was taken

1
Comments
2 min read
I fixed my scraper four times in one night. Each fix revealed a worse bug.

I fixed my scraper four times in one night. Each fix revealed a worse bug.

7
Comments
3 min read
My extension "worked" — it just quietly saved half of every conversation

Risks of hardcoding volatile CSS selectors

My extension "worked" — it just quietly saved half of every conversation

6
Comments 27
4 min read
My friend in med school kept complaining about NotebookLM, so I built the fix

My friend in med school kept complaining about NotebookLM, so I built the fix

1
Comments
2 min read
loading...