Benson Chen's Avatar

Benson Chen

@bnyue.bsky.social

🌐 https://benson-chen.co Sr. Frontend @ Tomofun

26 Followers  |  94 Following  |  71 Posts  |  Joined: 11.02.2024  |  1.845

Latest posts by bnyue.bsky.social on Bluesky

🎯 Journey to Big Tech #54: HTTPS

Learned:
πŸ‘€ Sniffing: attacker intercepts your key
πŸ”‘πŸ”‘ Asymmetric keys: stolen public key can’t decrypt data

πŸ₯· MITM: hacker sends a fake public key to trick you
πŸ… CA: 3rd party confirm server public key is real

#Frontend #HTTPS #Security

16.11.2025 17:14 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

🎯 Journey to Big Tech #53: Python & DOM

Learned:

- Python list methods, like unpacking, join, and sorted
- use DOM property instead of DOM attribute to increase performance, preventing from HTML structure change to reduce CPU usage

#Frontend #Backend #Python

12.11.2025 17:33 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

🎯 Journey to Big Tech #52: build React

How React works βš›οΈ

πŸ”„ 1. React handle diffing calculation in the browser idle time
🌲 2. Convert every virtual DOM into a Fiber
🏰 3. After render, React commits to the real DOM

simple react:
github.com/MechaChen/re...

#Frontend #React #100DayOfCode

10.11.2025 15:50 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #51: build Data Table II

Learned
Β· Sort entire data before pagination
Β· String can use localCompare()

#Frontend #React #100DayOfCode

09.11.2025 18:05 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

🎯 Journey to Big Tech #50: build Progress Bars IV

Learned
Β· Control every bar's progress using array type state
Β· Filter to get current unfilled progress bars
Β· Incrementally updating unfilled bars under concurrency limit count

#Frontend #React #100DayOfCode

08.11.2025 15:24 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

🎯 Journey to Big Tech #49: build Image Carousel III

Learned
Β· Only require 2 images (cur, next) for smooth transition
Β· Transition is cur go left, next start at right, then go left
Β· Make DOM show first, transition happen at next frame to get smooth animation

#Frontend #React #100DayOfCode

07.11.2025 17:31 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

Astro's @sarah11918.rainsberger.ca shares practical advice on how to make impactful contributions to open-source projects, focusing on the non-code ways to get started, such as improving documentation, testing, and being a good community member.

Full video: youtu.be/bzogTYPv65M

07.11.2025 02:00 β€” πŸ‘ 11    πŸ” 2    πŸ’¬ 0    πŸ“Œ 1
Video thumbnail

🎯 Journey to Big Tech #48: build Image Carousel II

Learned
Β· translateX with -(curIndex * 100%) to shift to next image

#Frontend #React #100DayOfCode

05.11.2025 17:07 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #47: build Signup Form

Learned
Β· We can use pure HTML for powerful form validation, like `required`, `minlength`, `pattern`
Β· we can retrieve form values directly from the form DOM

#Frontend #100DayOfCode

04.11.2025 17:29 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #46: build FileExplorer III

Just a few lines to make it more performant with a flat structure:
Β· Extract the nested FileList out of FileObject
Β· Make FileList root a Fragment

#Frontend #React #100DayOfCode

04.11.2025 17:23 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #45: build FileExplorer II

A11y learned
βˆ™FileTree as role=tree
βˆ™FileList as role=group
βˆ™FileItem as role=treeitem
↳ aria-expanded=true/false when has children
↳ aria-level, aria-setsize, aria-posinset for x-y position

#Frontend #React #100DayOfCode

02.11.2025 16:19 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

🎯 Journey to Big Tech #44: build FlightBooker

Learned
Β· Date input only accept string value
Β· Date.now() return timestamp in millseconds
Β· How to write formateDate with Date object

#Frontend #React #100DayOfCode

01.11.2025 17:12 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

🎯 Journey to Big Tech #43: build Modal IV

A11y learned
Β· Trap focus inside modal
 ↳ Shift+Tab on first β†’ ❌default() + focus last
 ↳ Tab on last β†’ ❌default() + focus first
Β· Restore focus on close (Escape / button)
 ↳ Save activeElement to ref β†’ focus ref on unmount

#React #Frontend #100DayOfCode

31.10.2025 18:07 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

🎯 Journey to Big Tech #42: build Modal III

A11y learned
Β· Close modal on 'Escape' key via useOnKeyDown hook
Β· Detect if clicking outside by <modalRef>.contains(clicked element)
Β· Fixed open(button)/close conflict by registering outside click on mousedown

#React #Frontend #100DayOfCode

30.10.2025 17:28 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #41: build Modal III

A11y learned
Β· role="modal" to tell that this is a modal
Β· aria-modal="true" to tell that background is inert
Β· aria-labelledby="XXX" to find the modal title
Β· aria-describedby="XXX" to find the modal description

#React #Frontend #100DayOfCode

29.10.2025 17:54 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

🎯 Journey to Big Tech #40: build ProgressBar III

Learned
Β· How to limit the concurrency? - by adding MAX_UNFILLED_COUNT

> index > filledBarCount + MAX_UNFILLED_COUNT

(e.g. 5th bar can tolerate only 3 filled, remaining 2 unfilled, and start transitioning)

#Frontend #React #100DayOfCode

26.10.2025 06:22 β€” πŸ‘ 6    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

🎯 Journey to Big Tech #39: build ProgressBar II

Learned
Β· How to wait for previous bars to finish? - when currentIndex === filledCount, it means bars 0~currentIndex-1 are filled β€” now can fill the current one.

#Frontend #React #100DayOfCode

26.10.2025 06:10 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

🎯 Journey to Big Tech #38: build Nested Checkboxes

Learned
Β· Checkbox has `indeterminate` state
Β· Nested checkboxes state should be lift up to top
Β· Use layered indices to locate target checkbox
Β· Parent state depends on 1st layer children’s state

#Frontend #React #100DayOfCode

24.10.2025 15:59 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

🎯 Journey to Big Tech #37: build Accordion II, III

Follow WAI-ARIA best practices:
Β· Arrow keys navigate headers
Β· `aria-expanded = true` when open
Β· Header links panel id via `aria-controls`
Β· Panel links header id via `aria-labelledby`

#Frontend #React #100DayOfCode

24.10.2025 13:51 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

🎯 Journey to Big Tech #36: build Tabs III

Keyboard a11y:
- `tabIndex="-1"` make only active tab focusable
- `tabIndex="0"` make tab panel <div> focusable
- Record element via callback ref.
- Avoid `focus()` inside onFocusβ€”it can trigger twice.

#Frontend #React #100DayOfCode

23.10.2025 17:18 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #35: build Tabs II

Interesting learning about a11y for Tabs:
- each tab should have a `role`
- tab button uses `aria-controls` to link its panel
- panel uses `aria-labelledby` to reference its tab

#Frontend #React #100DayOfCode

22.10.2025 17:50 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #34: build Digital Clock

Just build a simple clock to learn how to get current `hour`, `minutes`, and `seconds` to finish

#Frontend #React

22.10.2025 06:16 β€” πŸ‘ 5    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #33: build Stopwatch

Finally find `requestAnimationFrame` useful!

Since browser frames render ~16ms apart, `setTimeout(fn, 10ms)` will not work as expected.

Instead, use browser render frame timestamps to accurately track elapsed time.

#Frontend #React

19.10.2025 16:23 β€” πŸ‘ 5    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #32: build Undoable Counter

Build a calculator which supports undo/redo.

It is interesting that what I learned from AI Google Doc project is really useful here.

#Frontend #React

19.10.2025 14:53 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #31: build TableData

Just continuing another React Component challenge

#Frontend #React

17.10.2025 15:56 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #30: build TicTacToe

Learned the TicTacToe winner algorithm, which is pretty interesting!

#Frontend #React

15.10.2025 16:23 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

🎯 Journey to Big Tech #29: build TransferList

Just continuing GFE UI question

#Frontend #React

14.10.2025 18:16 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image Post image

🎯 Journey to Big Tech #29: build FileExplorer

Practice @greatfrontend UI question, and learn a lot from the solution
- instead of tree, flat structure is more performant
- can separate comps by html tag

Also make it cleaner from the solution is satisfied!

#Frontend #React

13.10.2025 17:02 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

πŸ§‘β€πŸ’» Client-Side:

- Load the pre-bundled client hydration script and module component by URL (e.g., Product.jsx)

- Hydrate the static HTML using React hooks and client components

- Apply the initialProps to the component to ensure consistent hydration

04.10.2025 15:28 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

- Execute getServerSideProps to get initialProps

- Pre-bundle the component with the hydration script (e.g. bundled client Product component)

- Convert the Index and module React component to an HTML string by renderToString

- Respond to the client with the HTML and client hydration script URL

04.10.2025 15:27 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

@bnyue is following 20 prominent accounts