175k+ Live Ads: Laravel to Go Platform Rebuild by Niko Minadze175k+ Live Ads: Laravel to Go Platform Rebuild by Niko Minadze

175k+ Live Ads: Laravel to Go Platform Rebuild

Niko Minadze

Niko Minadze

175k+ Live Ads: Laravel to Go Platform Rebuild

I rebuilt and expanded a private client's classifieds and advertising platform over three-plus months and moved it from Laravel to the new system in production. It now runs with 175k+ live ads, Go-rendered public pages and three React dashboards.
I had already spent roughly two years building and maintaining the Laravel application. The work combined migration with a substantial expansion of the product: three dashboard areas, owner-level operations, staff task management and AI-assisted review, alongside the public website, payments, search and background processing.
My GTmetrix checks went from B–C on the Laravel version to A on the rebuilt site. I also checked performance with web.dev.

Go rendering, prepared data and warmup

Go renders the public HTML from prepared listing data. The public server handles geographic routes, listing pages, search, metadata, canonical URLs, redirects and sitemaps. React and TypeScript power the dashboards.
The performance work includes how data becomes ready to serve. The deployment process builds city, state and country listing data, then prewarms home and location snapshots, search indexes and sitemaps before switching traffic. Expensive catalogue preparation runs outside visitor requests.
Full listing rebuilds prepare a new generation before activating it. Routine changes take a smaller path: editing, pausing, approving, renewing or paying for a listing updates the affected records and search documents. Scheduled reconciliation remains available to repair drift.
In a local test on an earlier 164,356-ad database clone, pausing one ad took 17 ms through the incremental path, compared with 1,673 ms for a full location rebuild. Both produced the same resulting listing data. These are processing timings within the Go application, separate from the public-page performance checks.
Local test: 17 ms incremental update versus 1,673 ms full location rebuild, on a 164,356-ad database clone. Both methods ran in Go.
Local test: 17 ms incremental update versus 1,673 ms full location rebuild, on a 164,356-ad database clone. Both methods ran in Go.

Three dashboards for different jobs

Member dashboard: listing creation and editing, media uploads, publication and renewal, paid visibility, token purchases, invoices, transaction history, verification, notifications and support.
Admin panel: moderation, account and payment administration, support conversations, configurable listing fields, and a staff task board with assignments, recurring tasks, comments, attachments and notifications.
Finances & SEO console: owner-level revenue reporting, analytics, source ingestion, duplicate review, media processing and AI-assisted content preparation, with run history and retry controls.
All three use React, TypeScript and Mantine. Permissions are enforced by the Go API as well as reflected in navigation.
The source-processing workflow can collect media, check candidates and prepare rewritten copy for review. Staff deliberately approve publication. The rewrite history records the source, prompt, model, token use and cost, so operators can inspect what happened.
Invoice administration during development; identifying details redacted.
Invoice administration during development; identifying details redacted.

Payments, realtime updates and background work

The system connects payment settlement to account balances and paid listing actions. Repeated webhook deliveries are handled without applying the same credit twice. Committed events feed notifications and live updates to balances, invoices and listings through an authenticated Go WebSocket gateway.
NATS JetStream runs durable background jobs with acknowledgements, retries and failed-job recovery. Queued workers handle media, imports, search, sitemaps and account work. The supporting stack includes MariaDB, Meilisearch, Valkey and S3-compatible media storage, with separate handling for public images and private documents.

Moving the working platform

Migration tools handle legacy records, references, media and URL mappings. Checks compare listing visibility and order, routes, redirects, canonical tags and public-page behavior against the original application.
Blue/green deployment starts and checks the next application stack before moving traffic. The previous stack remains available for application rollback.
For a similar rebuild, send me the existing application, the workflows it must preserve and the performance problems you need to solve.
Like this project

Posted Oct 4, 2026

Rebuilt client's platform from Laravel to Go, enhancing performance and adding React dashboards.