Irvan← Selected work

Jabar Digital Service · Case study

A job board that goes live with the Governor.

Bursa Kerja is the public job board for Nyari Gawe, West Java’s official employment app. Governor Dedi Mulyadi uses it in Wednesday live job fairs on TikTok, reading out openings and sending viewers to apply. I built the web board and the filter APIs behind it in September 2026, as a freelance engagement.

Role: Freelance full-stack engineerFocus: job board, filter APIs & releaseJabar Digital Service

The assignment

Make every opening in West Java easy to find, on a phone, during a live broadcast.

Product
Nyari Gawe · Bursa Kerja
Engagement
Freelance, project-based
Timeline
Built from 4 Sep 2026 · Depok broadcast 23 Sep 2026
Contribution
Web app, filter & stats APIs, deployment path
Primary tools
Next.js, Go (Echo), PostgreSQL
Nyari Gawe Bursa Kerja landing page with a search bar for positions, companies, or cities over a Gedung Sate backdrop.
The Bursa Kerja landing page: one search for positions, companies, or cities across West Java.

Live on TikTok · Wednesday, 23 September 2026

What one Wednesday broadcast looked like.

18,000+
people watched the Depok broadcast live on the Governor’s TikTok
2,054
openings from 16 companies, as counted by the Depok city government
2,000+
applications through Nyari Gawe for 50 Indomaret roles, during the stream
~1,700
applications to Alfamart before the broadcast ended

Depok job fair at PT YKK, broadcast on @dedimulyadiofficial. Viewers and openings from the Depok city government; applications from IDN Times and Majalah Sora, which reported 1,057 openings. Full coverage below.

The product

A public window onto jobs from across the province.

Job listings in West Java come from several places, including the provincial manpower office (Disnaker Jabar) and the Ministry of Manpower’s Karirhub. Bursa Kerja puts them in one searchable board, organised around the five regional areas people actually think in: Bogor, Purwakarta, Cirebon, Garut, and Bandung.

The board is where people browse. Applying happens in the Nyari Gawe app or on the listing’s original portal, so every job card leads to one of those two places.

Visit Bursa Kerja

Challenge

There is no soft launch when the Governor is on air.

A live broadcast changes the brief. Traffic arrives all at once, mostly on phones, from viewers who have one question: what is open near me, and how do I apply? If search is slow or filters disagree with each other, people leave while the stream is still running.

The audience is not local either. In Depok, companies reported applicants from Bandung, Bogor, and Sukabumi. So the board had to make the regional picture obvious and still let someone look across several areas at once.

And the timeline was short. The repository’s first commit was on 4 September. By 11 September the team had production deployments in place, with the board served under a /bursakerja path on the provincial domain.

01 / The viewer’s path

Watch.
Find. Apply.

I designed the board around the few seconds between hearing about a job on the stream and acting on it.

01

Search

One field for position, company, or city, right in the hero.

02

Narrow

Pick one or more Wilayah and a job type. Counts update with each choice.

03

Compare

See which roles are in demand and which employers are hiring most.

04

Apply

Go to the right app store for your device, or open the original portal.

02 / The API decision

One filter contract

One filter.
Every number agrees.

The page shows a job list, company rankings, and regional counts side by side. If each one read the filters its own way, the numbers would drift apart as soon as someone picked two regions.

Shared query?search=operator
&employment_type=contract
&regional=Wilayah I,Wilayah V

Parsed once in Go, then turned into the same SQL WHERE clause for every endpoint.

/job-openingPaginated list

Feeds the job list and its infinite scroll.

/job-opening/statsCompany ranking

Totals, open positions, and the employers hiring most.

/regionsRegional counts

How many openings each Wilayah has under the current filter.

The benefit

Multi-select regions, search, and job type work the same in the list, the stats, and the regional counts. Adding a filter means changing one parser, not three.

The trade-off

The role-demand chart still pages through matching listings in the browser. It works at today’s volume, but it is the first thing I would move into its own aggregate endpoint.

Reading the market

Show where the jobs are, not only what they are.

Above the list, the board summarises the current search: openings per Wilayah, positions needed by role, open positions in total, and the companies hiring most. A viewer who hears “600 openings at Alfamart” on the stream can check it in a couple of taps.

Bursa Kerja insight panels: openings per regional area, positions needed by role, summary totals, and a ranking of companies by open positions.
Regional counts, role demand, summary totals, and company rankings all follow the same filters as the job list.

Built for the phone in their hand

Most viewers arrive from a livestream on their phone.

On mobile, filters sit in a bottom sheet behind a floating button, the list loads more as you scroll, and a Hotline Jabar WhatsApp button stays within reach. The install prompt checks the device, so Android users see Play Store, iPhone users see App Store, and anyone can still open the original portal.

Three mobile screens of Bursa Kerja: the search hero, the job list with filter and WhatsApp buttons, and the install dialog showing only the Play Store button on Android.
Mobile search, the job list, and the device-aware install prompt as seen on Android.

My freelance role

From an empty repo to production in a week.

This was a freelance engagement, not a full-time role: the team needed an extra full-stack engineer to get the board live, and I was brought in for the build. I worked alongside a backend engineer, who owned the job postings API, data, and migrations, and a DevOps engineer, who owned the CI/CD pipelines. I set up the Next.js frontend on 4 September and built the public experience on top of it, then added the Go endpoints for regional counts and company statistics.

The release work mattered as much as the features. The board had to run under a sub-path on a shared government domain, so I made the base path configurable across Docker, the Next.js config, the build workflow, and every image and asset reference.

  • Built the landing page, search, multi-select region filter, mobile bottom sheet, and infinite-scroll job list.
  • Added the Go /regions and /job-opening/stats endpoints and multi-region filtering, with tests.
  • Built the company ranking chart, role-demand view, and job analytics dashboard.
  • Made the install dialog device-aware and kept the original-portal link for every listing.
  • Configured the base path, trailing slashes, Node runner image, and image cache headers for production.

Outcome

A product the Governor points people to on air.

Live, in public

More than 18,000 people watched the Governor and the Mayor of Depok present openings from 16 companies on TikTok, with viewers told to apply through Nyari Gawe while the stream was running.

Real applications

During the broadcast, more than 2,000 people applied for 50 Indomaret roles and about 1,700 applied to Alfamart, whose 600 roles included 100 for people with disabilities. XL Axiata recorded 206 applicants for 200 roles.

Beyond the broadcast

Openings stayed searchable after the stream ended, so people who missed it could still apply. The Governor then asked regents and mayors to adopt the format, and Bekasi committed to a weekly live job fair.

“For residents of Depok and nearby areas, use this job fair and apply through the Nyari Gawe app.” Dedi Mulyadi, Governor of West Java, via IDN Times and Majalah Sora

In the press

Covered by the city, regional, and local press.

All four stories ran on Wednesday, 23 September 2026, the day of the Depok broadcast.

What I can build for you

The same approach, applied to your launch.

Bursa Kerja is a pattern I can repeat for other teams: a public product that has to work on day one, for a large audience, with real people depending on the result. I join as a freelancer, take ownership of the full-stack slice, and work alongside your backend and DevOps people rather than around them.

01

Public launches on a fixed date

From an empty repository to production in about a week, with the release path settled early so launch day is not the first real deploy.

02

Search and filters over messy data

Listings from several sources, one filter contract in the API, and counts that stay consistent across every view.

03

Mobile-first flows that hand off cleanly

Pages built for people arriving from social media on a phone, with a clear next step into an app or partner portal.

04

Delivery into existing infrastructure

Docker, CI/CD, sub-path deployments, and caching that fit a client’s domain and pipeline instead of replacing them.

How I work: agree the data contract first, ship the production path early, then spend the remaining time on the moment a real user arrives.

Reflection

When your launch is a live broadcast, reliability is the feature.

Nyari Gawe’s board taught me to scope for the moment of use. Viewers do not care about the architecture. They care that the region they picked shows the jobs they heard about, on the phone they are holding, right away.

That pushed me to settle the shared filter contract and the production path early, then spend the rest of the time on the job seeker’s journey. Next, I would move the remaining browser-side aggregation into the API and add caching tuned to how often listings change.