Automotive / Security hardware

Bull Horn GPS Alarm: one-tap SMS commands for an alarm

A Flutter app that works as a remote control for GPS vehicle and asset alarms. Each alarm is saved once with its phone number and password, and every command after that is one tap.

Our role: Client project for a GPS vehicle-alarm company, built by Simon Dziak, who made all 17 commits. The source lives in the App369 GitHub organization.

The Problem

What Bull Horn GPS Alarm Needed to Solve

These alarms are controlled by text message. Each command is a code, such as *password*S# to arm the alarm, and every alarm has its own password. The README states the problem plainly: without the app, users must remember or keep a cheat sheet of passwords and commands for each alarm.

The Build

How We Built It

The app stores each alarm on the phone and shows large buttons for the common commands. A tap builds the exact command text and opens the phone's own SMS composer with the alarm's number and the message already filled in, so the person sees the text and presses send. The siren command asks "Are you sure you want to sound the alarm?" first.

Features

What the Product Does

Saved alarms

Add, edit and delete alarms, each with a name, a location, a phone number and a password. The list is sorted by name.

One-tap commands

Arm, Disarm, Check GPS Location and Check Status, each as a single button on the alarm's page.

Quick Siren Locate

The siren command sits behind a YES / NO confirmation, so it cannot be set off by a stray tap.

Contact picker

Choose the alarm's number from the phone's contacts instead of typing it.

Architecture

The Stack, Layer by Layer

Client app
Flutter and Dart with Provider for state and flutter_screenutil for sizing. Four main views: dashboard, alarm page, add alarm and edit alarm.
Local storage
sqflite with one Alarms table: id, name, location, phone number and password. Nothing leaves the device.
Sending commands
url_launcher opens an sms: link with the number and body filled in, with a small difference between the Android and iOS link formats. The command text follows the pattern *password*TYPE#.
Tooling
The Flutter version is pinned with FVM (3.7.8 for the production build).
By the Numbers

Verifiable Facts

Mar 2021
First commit to the repository
May to Aug 2023
Production build commits (May 9 to August 8)
17
Commits, all by one author
5
Commands: arm, disarm, GPS location, status and siren

Counted from the source repository on October 13, 2026. This page makes no claims about store releases, installs or revenue.

Lessons

What We Learned Shipping It

Let the phone send the text

The dependency list still has a commented-out SMS-sending package. Opening the composer instead means the person sees exactly what will be sent and to whom. For a command that can set off a siren, that visible step is a feature.

Put a confirm in front of the loud command

The siren is the loud command, and it is the only one with the YES / NO step.

Empty tables break MAX(id)+1

Adding the very first alarm threw an "invalid int" error because the next id came from MAX(id)+1 on an empty table. The fix was one null fallback to 1, shipped in August 2023 along with a fix for the alarm list reloading every time the app reopened.

The password has to be readable

The alarm only accepts the password in clear text inside the SMS, so the app keeps it in the device database rather than hashing it. That is a property of the hardware's protocol, and the app cannot fix it.

Technologies Used
Flutter•Dart•sqflite•Provider•url_launcher•FVM
Timeline
First commit in March 2021; production builds from May to August 2023

Planning Something Similar?

We build Flutter and Firebase apps for startups and small businesses. Get a ballpark with our app cost calculator, see Flutter development, or tell us about your project.

More Case Studies

SaaS / Business software

Workspace369: a Flutter and Firebase SaaS for client work

An all-in-one workspace for freelancers and small service businesses: CRM, proposals, invoicing and payments, scheduling, a shared email/SMS/voice inbox, accounting and AI, in one Flutter app on iOS and the web.

Read Case Study →
Consumer / Music

3693: a private music app in Flutter and Firebase

A private music app built with Flutter: search, a now-playing screen with lyrics, a queue, playlists, liked songs, a cloud library, listening stats and light and dark themes, on a typed Firebase backend.

Read Case Study →
AI / Image processing

Deep Dream: a Flutter app and a PyTorch queue behind it

A Flutter app sends a photo to a Python API. A Redis queue hands the job to a PyTorch worker that runs DeepDream on a convolutional neural network, and the dreamed image comes back to save to the gallery.

Read Case Study →
Consumer / Collectibles

DG Card: scan a trading card and match it on the device

A Flutter app for trading card players. Point the camera at a card, on-device text recognition reads it, and the app matches it against a synced card database. From there you track a collection, build decks and trade with other players.

Read Case Study →
Landscaping / Field sales

Artificial Grass Masters: a field estimator and job sign-off app

A Flutter app for an artificial-turf installer. A rep measures a yard on a map, prices the grass, delivery and dumpster on the spot, and closes the job with photos, a customer signature and a rating. The company gets a text message when a new rating comes in.

Read Case Study →
AI integration / Open source

saas-mcp-connector: a safe MCP server for a SaaS API

An MCP server that lets Claude Desktop, Claude Code and other MCP clients use a SaaS product's API safely. Every call is scoped to one user's workspace, writes need explicit confirmation, and the HTTP transport is rate limited.

Read Case Study →