Search
One field for position, company, or city, right in the hero.
Jabar Digital Service · Case study
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.
The assignment
Make every opening in West Java easy to find, on a phone, during a live broadcast.

Live on TikTok · Wednesday, 23 September 2026
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
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 KerjaChallenge
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
I designed the board around the few seconds between hearing about a job on the stream and acting on it.
One field for position, company, or city, right in the hero.
Pick one or more Wilayah and a job type. Counts update with each choice.
See which roles are in demand and which employers are hiring most.
Go to the right app store for your device, or open the original portal.
02 / The API decision
One filter contractThe 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.
?search=operator
&employment_type=contract
®ional=Wilayah I,Wilayah VParsed once in Go, then turned into the same SQL WHERE clause for every endpoint.
/job-openingPaginated listFeeds the job list and its infinite scroll.
/job-opening/statsCompany rankingTotals, open positions, and the employers hiring most.
/regionsRegional countsHow many openings each Wilayah has under the current filter.
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 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
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.

Built for the phone in their hand
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.

My freelance role
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.
Outcome
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.
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.
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
All four stories ran on Wednesday, 23 September 2026, the day of the Depok broadcast.
What I can build for you
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.
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.
Listings from several sources, one filter contract in the API, and counts that stay consistent across every view.
Pages built for people arriving from social media on a phone, with a clear next step into an app or partner portal.
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.