go-auction
Sistem lelang online berbasis web — dibangun untuk kegiatan Unduh-Unduh Bulan Keluarga, GKI Sepanjang (Panitia Hari Besar Gerejawi / PHBG), tapi cukup generik untuk dipakai di acara lelang lainnya.
Backend ditulis dengan Go, disajikan server-side (dengan bantuan htmx untuk interaktivitas) dan Server-Sent Events untuk dashboard publik yang update secara real-time tanpa reload halaman.
Fitur
- Dashboard publik — menampilkan barang yang sedang dilelang (gambar, harga tertinggi, nama penawar) secara real-time lewat SSE, dengan tampilan kosong saat belum ada barang aktif
- Panel kontrol lelang — operator bisa memilih barang aktif dari antrean, menambahkan tawaran (nama + harga), dan menutup sesi lelang untuk barang yang sedang berjalan
- Manajemen barang — form tambah barang lengkap dengan upload & crop gambar (atur dimensi crop secara presisi langsung di browser)
- Katalog publik — daftar barang yang akan dilelang (layout card di desktop, list di mobile) beserta halaman detail per barang, lengkap dengan Open Graph meta tags untuk preview saat dibagikan
- Hasil lelang — tabel barang yang sudah terjual dengan fitur pencarian, sort per kolom, dan edit inline
- Autentikasi — halaman login dengan htmx dan notifikasi toast saat gagal masuk
- Mode SSR statis — bisa men-generate seluruh halaman menjadi file statis untuk hosting tanpa server (lihat perintah
ssr-gen / ssr-serve)
Tumpukan Teknologi
| Layer |
Teknologi |
| Backend |
Go |
| Database |
SQLite (glebarez/go-sqlite, driver tanpa cgo) |
| Frontend interaktivitas |
htmx + htmx-ext-sse |
| Styling |
CSS murni — custom design system ("Balai Lelang"), token warna, Fraunces (serif) + Inter (sans) |
Arsitektur
Proyek ini mengikuti pola hexagonal / ports & adapters:
internals/
├── core/
│ └── service/ # business logic (AuctionService, AuthService)
└── adapter/
├── inbound/
│ ├── http/ # HTTP handler + template (Go html/template) + static assets
│ └── ssr/ # static-site generator & server untuk mode SSR
└── outbound/
└── sqlite/ # implementasi repository (Stock, Auction, User) via SQLite
Service di core/service tidak bergantung pada detail HTTP maupun database — keduanya diinject sebagai interface (repository), sehingga logic lelang bisa diuji maupun diganti adapter-nya tanpa mengubah core.
Menjalankan Secara Lokal
Prasyarat
- Go 1.21+ (sesuaikan dengan versi di
go.mod)
- Tidak perlu instalasi SQLite terpisah — driver yang dipakai (
glebarez/go-sqlite) berjalan tanpa cgo
Instalasi
git clone https://github.com/galaparadi/go-auction.git
cd go-auction
go mod download
Menjalankan server HTTP (mode utama)
go run main.go
Secara default server berjalan di http://localhost:9999 dengan database data.db di direktori kerja.
Flag yang tersedia
| Flag |
Default |
Keterangan |
-port |
9999 |
Port HTTP server |
-ip |
localhost |
IP/host yang di-listen |
-assets |
./internals/adapter/inbound/http |
Path ke view & static assets |
-dbpath |
data.db |
Path file database SQLite |
Contoh menjalankan di port lain dengan database berbeda:
go run main.go -port=8080 -dbpath=./storage/lelang.db
Mode SSR (static site)
Selain berjalan sebagai server, aplikasi ini juga bisa men-generate halaman statis — berguna untuk hosting di layanan static hosting (mis. GitHub Pages):
# Generate seluruh halaman menjadi file statis di folder ssr/
go run main.go ssr-gen
# Jalankan hasil generate sebagai server statis (untuk preview lokal)
go run main.go ssr-serve -ssrport=5500 -ssrip=localhost
Struktur Route (UI)
Beberapa route yang dipakai oleh halaman-halaman di atas:
| Route |
Keterangan |
GET / |
Dashboard publik (live, via SSE di /dashboardsse) |
GET /login, POST /login |
Halaman & proses login |
GET /stocks |
Daftar barang (admin) |
GET /stock, POST /stock |
Form tambah barang & submit (multipart, termasuk foto) |
GET /dashboard-control |
Panel kontrol lelang |
POST /dashboard-control |
Update tawaran berjalan |
POST /dashboard-control/activate |
Set barang aktif dari antrean |
POST /dashboard-control/close |
Tutup sesi lelang barang aktif |
GET /hasil-lelang |
Tabel barang yang sudah terjual |
Build untuk Produksi
go build -o bin/go-auction main.go
./bin/go-auction -port=9999 -dbpath=./data.db
Lisensi
MIT