Findr
On-premises system for a government agency in Bali that shortlists SMEs for trade exhibitions, with a Go backend, a Windows service installer and a SwiftUI client for Mac, iPad and iPhone.
- Year
- 2026
- Role
- Tech lead (team of 4); designed and built the backend, Windows installer and Apple client
- Kind
- Apple Developer Academy
- Status
- Shipped
- Links
- Private source, no public link
Problem
A government agency in Bali shortlisted SMEs for trade exhibitions by hand. It needed a tool that IT staff with no backend experience could install and run on their own machines.
What I built
Findr helps a government agency in Bali shortlist fashion and craft SMEs for trade exhibitions. Its Match feature ranks the whole SME database against each event's criteria: rule-based checks cover the structured criteria and Apple's on-device Foundation Models judge the free-text ones, giving a 0-100 fit score with per-criterion explanations in Indonesian, without sending data off-site. The backend is a single Go binary with an embedded SQLite database, a WinForms app installs it as a Windows service for non-technical IT staff, and the native SwiftUI client runs on macOS, iPadOS and iOS. The client team approved it after a live demo and it is in production use.
Decisions & trade-offs
- A single Go binary with embedded SQLite instead of a database server, so there is nothing else to install or maintain.
- A Windows installer that registers the server as a service, so non-technical staff never touch a terminal.
- On-device Apple Foundation Models for the free-text criteria, so SME data never leaves the agency.
- Optimistic concurrency (If-Match) and an automatic snapshot before each migration, because several people edit the same data.
Highlights
- Go backend ships as one static binary with an embedded SQLite database: no other dependencies to install
- JSON API v1 with admin / editor / user roles, one-time invite codes, access tokens that expire after inactivity, and per-client rate limiting
- Optimistic concurrency with If-Match on writes; all-or-nothing SME import (merge or replace); export as CSV ZIP or SQL
- Audit log with a row cap, automatic database snapshot before each migration, graceful shutdown that finishes in-flight requests
- Admin CLI built into the same binary (create-admin, reset-admin, delete-user)
- Windows helper installs the server as a service via WinSW, adds a firewall rule, and requires typing DELETE ALL DATA before destructive actions
- SwiftUI client keeps tokens in the Keychain, reconnects with backoff (2, 5, 10, 30 s), and allows plain http only on local-network addresses
- Notarized macOS DMG and iOS builds distributed through TestFlight
- Architecture documented in arc42, in English and Bahasa Indonesia; built spec-first with independent code audits
Stack
- Go
- SQLite
- SwiftUI
- Swift (macOS, iPadOS, iOS)
- C# / .NET Framework 4.8 (WinForms)
- WinSW
- Apple Intelligence (on-device)