All projects
Nuxt · Express BFF · OIDC
104 45+ Job Platform
2021 – 2023Commercial · Vue/Nuxt · SSR · BFF · Authentication
A two-sided job-matching platform for over-45s at 104, Taiwan's largest job platform, built by a product team of about seven engineers. It was a new product, started from nothing: a content-heavy, server-rendered job site for job seekers, and a separate posting-and-management site for employers. Because we were starting clean, the stack was an open question — I proposed Nuxt over the React we had been using, my manager signed off, and I opened the repository. The first commit is mine and it says `project init`. I stayed its main front-end owner until I left, across roughly 1,300 commits on the two sites.
Key features & challenges
- Chose Nuxt for a greenfield product and made the case for it; my manager signed off. Opened the repo with the first commit and owned the front end for two years — around 925 commits on the job-seeker site and 399 on the employer site, and the most frequent editor of `nuxt.config.js`.
- Built the Express layer that sits between the browser and the core API: the browser only ever calls same-origin `/50talent/_api/*`, and the server forwards the request, attaches the bearer token, hides the backend domain, and checks the referer to block off-site reuse.
- Built the OIDC login flow and its server-side sessions in Redis.
- Wrote most of the JSON-LD structured data for the server-rendered pages — 25 of the 45 commits in that module are mine — plus canonical and Open Graph tags on the pages I owned.
- Kept search state in the URL query rather than the store, so a filtered result set is shareable and the back button behaves.
- Mentored the junior front-end developers and reviewed their pull requests; one approval plus a green build was our merge bar.
My contributions
- Front-end owner of both sites, end to end: architecture, routing, SSR, the Express BFF, and the login flow.
- The stack choice was mine to propose and my manager's to approve. It was a greenfield product, not a migration — nothing was ported.
- The sitemap was maintained by colleagues; I have a single commit on it. The structured data is the part that was mine.