CIWEI Job Board
Design jobs from multiple sources, filtered and organized into one daily board.

The project
I designed, built, and continue to run a design job board. It checks more than ten sources each night, filters for design roles, and publishes the results in one readable table.
My role
Solo creator · design & engineering
Status
Live · operated daily
Thirty minutes a day spent re-reading the same listings
I built this while job-hunting. The routine was half an hour every morning across LinkedIn, BOSS Zhipin, Lagou, Maimai, and a handful of company boards — and most of that half hour was not reading jobs. It was recognizing the ones I had already rejected yesterday, translating four different ways of writing a salary, and scrolling past engineering roles that matched on the word “design”.
The goal was to spend less time cleaning up listings and more time deciding which roles fit.
Loading image…
Loading image…
Spend attention on deciding whether the role fits. The curation example below explains how rows become comparable. It is a reconstruction with illustrative data, not an earlier design version.
The problem
A useful job board needs to remove irrelevant listings, not just collect more of them.
Stage 01
The pipeline
A crawl, three judgments, and a static page
Each night, a scheduled job checks the sources, classifies design roles and normalizes the retained listings. It publishes a static file, keeping the daily board independent of an application server.
What happens between midnight and the morning read
What happens between midnight and the morning read
Collect
Nightly, unattended
- Scheduled crawl
- 10+ sources
Judge
Where the board earns its keep
- Design role?
- Duplicate?
Normalize
One shape, five columns
- Pay & location
- Metro grouping
Publish
No server to keep alive
- Sheet as CMS
- Static page
What each stage is built from
Puppeteer under GitHub Actions for the crawl; an AI pass for role classification; a Google Sheet as the store, exported as CSV and parsed in the browser with PapaParse; DataTables for the table itself; PDF.js to read an uploaded résumé entirely client-side. Deployed on Netlify at no running cost.
Stage 02
Curation
Filter roles, normalize listings and highlight possible matches
Aggregation is the part people notice and the part that matters least. What makes a board worth opening is what it refuses to show, and how much of a posting it is willing to read on your behalf. Turn the three judgments off — keep design roles once each, normalize pay and place, and match the résumé — and the board becomes the thing it was built to replace.
Six of 12 sample rows are shown. Excluded rows stay faintly visible so you can inspect what was removed.
| Company | Job title | YOE | Salary | Location |
|---|---|---|---|---|
| PayPalLinkedIn | ★Sr Experience Designer Full-time 3 yrs experience · $130.5k – $212.8k · Austin · Hybrid | 3 yrs | $130.5k – $212.8k | Austin · Hybrid |
| ByteDanceBoss 直聘 | 资深交互设计师 Full-time 5 yrs experience · ¥40k – 70k · 15 mo · Beijing · Haidian | 5 yrs | ¥40k – 70k · 15 mo | Beijing · Haidian |
| StripeLinkedIn | Software Engineer, Frontend Full-time 4 yrs experience · $180,000 – $250,000 · Remote (US) Engineering | 4 yrs | $180,000 – $250,000 | Remote (US) |
| MeituanMaimai | 设计项目经理(PMO) Full-time 6 yrs experience · 面议 · 北京 Programme mgmt | 6 yrs | 面议 | 北京 |
| FigmaGreenhouse | ★Product Designer, Growth Full-time 4 yrs experience · Not disclosed · SF · NYC | 4 yrs | Not disclosed | SF · NYC |
| Unnamed startupBoss 直聘 | 设计师(急招急招急招) Full-time 1 yr experience · 8-12K · 杭州 Reposted, 14 days | 1 yr | 8-12K | 杭州 |
Résumé matching needed a cautious role. It marks possible matches with a star rather than hiding other jobs, because a missed opportunity is harder for the reader to recover than an extra row to review.
Stage 03
The build
Choose an architecture one person can maintain
A side project’s real constraint is the day it stops being interesting. I designed for that day: no database to migrate, no server to patch, no account system to support, and editable data I can fix from a phone.
Google Sheet as the store
- What it bought
- Edit a listing directly from a phone.
- What it cost
- A hard ceiling on data volume, and no relational structure.
Static export, no backend
- What it bought
- Zero running cost and nothing to keep alive.
- What it cost
- No personalized feed; everything per-reader happens in the browser.
Résumé parsed client-side
- What it bought
- No one has to trust me with their résumé — it never leaves the tab.
- What it cost
- Matching quality is limited to what the browser can read.
Scheduled crawl, no queue
- What it bought
- One moving part, one log to read when it breaks.
- What it cost
- A source that changes its markup is silently missing for a day.
| Choice | What it bought | What it cost |
|---|---|---|
| Google Sheet as the store | Edit a listing directly from a phone. | A hard ceiling on data volume, and no relational structure. |
| Static export, no backend | Zero running cost and nothing to keep alive. | No personalized feed; everything per-reader happens in the browser. |
| Résumé parsed client-side | No one has to trust me with their résumé — it never leaves the tab. | Matching quality is limited to what the browser can read. |
| Scheduled crawl, no queue | One moving part, one log to read when it breaks. | A source that changes its markup is silently missing for a day. |
A daily board with returning readers
Checking CIWEI every morning has become a habit. Much more convenient than browsing several sites myself.
The board has operated since 2023, with a few hundred monthly users, dozens of mailing-list subscribers and a majority of visits from returning readers. Return visits help me judge whether the daily updates remain useful.
What I would change: the classifier is a single judgment with no appeal, and I have no way to see the roles it wrongly discarded. The next version should log its own rejections so the filter can be argued with.
More case studies
All workReturning to the Old Summer Palace
Stage visuals and motion for Renwen Tsinghua’s lecture on the palace’s reconstruction.
Animated stickers for a veterinary brand
Five WeChat characters, each built around one of the brand’s products.
Land access for Chicago growers
I researched, designed, and built a live directory helping Chicago growers compare land providers and understand how to apply.