AlertCore is the security suite we are building: one login across web and mobile for control rooms and field teams. Nine products share the same system, covering retail security, mobile patrol, home safety, workforce, commerce and intelligence. Below is how those products are delivered with Next.js and Laravel on Google Cloud, and where Ollama fits next.
The products
From alertcore.io: nine products on one system, written for control rooms and people out on the ground. Web, iOS, Android, SSO, REST API and webhooks.
- ShopAssist: retail panic alerts and incident response on the shop floor.
- HomeAlert: home safety.
- MobilePatrol: tools for security officers in the field.
- Control: control-room operations.
- Shifts: workforce and rostering.
- Intel: intelligence sharing.
- HR: people and HR.
- Shop: commerce.
- Forms (coming soon): custom fields, publish and share, email notifications, branded PDF reports, submission management, and works with MobilePatrol.
Everything shares one account model. That is why the hosting choices below matter: one stack has to serve dashboards, APIs and real-time mobile alerts without splitting into nine separate platforms.
Next.js and Laravel, each doing what they are good at
AlertCore is not a single app. Front ends are built with Next.js: the marketing site, operator dashboards and any browser-based tooling that needs to be fast, SEO-friendly and easy to iterate on. APIs, auth, business rules, queues and integrations live in Laravel. That split matches how we build for clients as well. Next.js owns the interface and edge delivery; Laravel owns the domain logic and the long-running work that should not sit in a React tree.
Mobile products such as ShopAssist talk to the same Laravel APIs. One backend serves the web apps and the phone apps, which keeps permissions, tenancy and audit trails in one place.
Cloud Run for the applications
Both the Next.js and Laravel services run on Cloud Run. Containers scale with traffic and scale toward zero when idle, which matters for a product suite that is busy in peaks and quiet overnight. We deploy from container images, keep configuration in environment variables and secrets, and treat each service as independently releasable. Cloud Run also sits behind Google's managed HTTPS load balancing, so we are not running our own reverse proxies for TLS and routing.
Postgres on Cloud SQL
The system of record is PostgreSQL on Cloud SQL. Accounts, organisations, roles, incidents, audit logs and the structured product data all live there. Laravel talks to it through the usual Eloquent and query layer, with migrations as the source of truth for schema change. We favour Postgres over proprietary databases because the data stays portable and the tooling is familiar. Cloud SQL handles backups, patching and high availability options without us operating the boxes.
Cloud Storage for files
Cloud Storage holds uploads and generated assets: evidence attachments, exports, media and anything that should not live in the database. Objects are addressed from Laravel with signed URLs where access needs to be time-limited, and from Next.js where public or CDN-backed assets make sense. Separating blobs from Postgres keeps the database lean and makes retention policies easier to apply per bucket.
Firestore where real-time matters
Not every AlertCore workflow is a classic request/response against SQL. Panic alerts, live location and anything that must fan out in under a second sit closer to Firestore (and related Firebase messaging where the mobile apps need push). We already use that pattern on ShopAssist. Firestore is the right tool for those high-churn, listener-driven paths; Postgres remains the place for durable, queryable business state. Mixing them deliberately is better than forcing one store to do both jobs badly.
AI next: assistants on Ollama
The next piece of work is AI inside the suite. We are integrating Ollama so models can run on infrastructure we control rather than sending incident and member data to a third-party API by default. The first uses are assistants that answer from an organisation's own procedures and history, and search that ranks by meaning rather than keyword alone. OpenAI remains an option for public or non-sensitive content; for AlertCore's operational data, self-hosted models are the path we are taking.
That sits on the same Cloud Run and storage foundation: retrieval indexes and job workers as Laravel queues, interfaces in Next.js, and model inference via Ollama where the data must stay put. We will write it up properly once it is live rather than promising a demo that is not in production yet.
Why this shape
Cloud Run plus Postgres plus Storage plus Firestore is not the only way to run a multi-product suite, but it fits AlertCore: containerised Next.js and Laravel apps, an open-source database we can move if we need to, object storage for files, and a real-time store for the few paths that cannot wait on a round trip. Open source where it matters, managed services where we would rather not run our own cluster.
