Classifieds & Advertising Platform — Go Rebuild
An ongoing Go rebuild of my Laravel classifieds platform, with a React dashboard, incremental listing updates and background jobs handled through NATS JetStream. It preserves the existing platform’s behaviour while changing how the application processes and serves its data.

Images
About Classifieds & Advertising Platform — Go Rebuild
This is the Go rebuild of my Classifieds & Advertising Platform. The Laravel version has roughly two years of development behind it, including advertiser accounts, payments, listing management, chat and administration. That gives the rebuild quite a lot of existing behaviour to preserve.
The Go version is still in development and has not replaced the live application.
I’m changing how the application handles work as well as changing the language. Public pages are rendered by Go using prepared listing data. The advertiser dashboard and administration interface use React, TypeScript and Mantine. MySQL remains the main application database, with Meilisearch for search and Valkey for caching and temporary coordination.
One substantial change is how individual listing updates are processed. Editing, pausing or renewing an ad can update the affected listing and search records without rebuilding the whole location’s catalogue.
In a local test using a database clone containing 164,356 ads, pausing one ad took 17 milliseconds through the incremental update, compared with 1,673 milliseconds for a full location rebuild. Both produced the same resulting listing data. Those measurements compare two update methods within the Go application and apply to that specific local test.
Background jobs run through NATS JetStream, with separate workers for tasks such as media processing, search indexing, imports and sitemap generation. The job handling includes acknowledgements, retries and handling for work that repeatedly fails. Realtime features use a Go WebSocket gateway with NATS for internal messaging.
The migration itself is a substantial part of the project. Existing listings need to keep the right visibility and ordering. Payments still need to activate the right purchases. Search results, public pages and sitemaps need to agree about what is published.
There are import tools, data comparisons, route checks and browser tests against the Laravel application to check those behaviours. Screenshots help with the interface, but the same-looking page also needs to show the right records and perform the right actions.
The source is private, and the screenshots shown here are redacted or use demo data. The original Laravel platform provides the background to the project; this page follows the work of rebuilding it in Go.



















