Alpharetta, Georgia
Software that does the unglamorous work your business runs on.
Custom applications, mobile apps and AI workflows for operators — teams with a real operational problem, a payroll system that won't talk to anything, and no engineering department to throw at it.
Currently taking on new work for Q4 2026 and Q1 2027
What we do
Four things, done properly.
We are deliberately narrow. Every engagement ends in working software that is deployed, monitored and documented well enough that someone else could take it over.
Custom software
Internal tools and line-of-business applications for work currently held together by spreadsheets and memory.
- Operations dashboards
- Reporting pipelines
- Scheduling & approval flows
- Document generation
Mobile apps
iOS and Android from one codebase, including the hardware-adjacent work most shops quietly decline.
- React Native / Expo
- NFC, geofencing, offline sync
- Background & location services
- App Store & Play submission
AI workflows
Agents and pipelines pointed at specific recurring jobs, with a human approval step wherever money or filings are involved.
- Document & PDF extraction
- Reconciliation and variance checks
- Scheduled report generation
- Browser automation for systems with no API
Integrations
Making the systems you already pay for talk to each other — including the ones whose API is a locked door.
- Payroll & HRIS
- Scheduling & booking platforms
- Accounting & POS
- Webhooks, ETL, nightly syncs
Product
Clock Out
Built and owned by Mindful Solutions, because the problem kept showing up: hourly staff forget to clock out, and somebody spends the back half of every pay period fixing timesheets by hand. It runs in production today at its first deployment, and it's available to license.
Three ways in. One way out — automatically.
Staff tap an NFC tag, answer a "Clock in?" nudge a few minutes after they arrive, or get clocked in automatically for a shift already scheduled in payroll. When their phone leaves the site's geofence, Clock Out waits out a grace period and closes the shift on the server — writing the entry straight into the payroll system you already use. No kiosk, no punch corrections, no honour system.
It integrates with any modern payroll or scheduling platform. Everything Clock Out needs sits behind a single adapter — roughly a dozen operations — so a new platform is an adapter, not a rewrite. Rippling is live in production today.
- Clock in Encrypted NFC tag tap, arrival reminder, or scheduled shift
- Clock out Automatic on geofence exit, with grace period
- Integrates with Any modern payroll or scheduling platform; Rippling live in production today
- Platforms iOS and Android, with push notifications
- Hosting Dedicated AWS deployment per customer
- Status v1.1.0 running in production; store release in preparation
Case study 01 · Clock Out
Getting four fitness studios out of the timesheet-correction business
North GA Fitness Club LLC runs four boutique studios and is Clock Out's first deployment. Studio advisors move between the floor, the desk and the door all day — and the one thing that reliably did not happen was clocking out at the end of a shift.
Disclosure: North GA Fitness Club LLC and Mindful Solutions LLC share common ownership. Clock Out is owned by Mindful Solutions and licensed for use; North GA Fitness Club is the operating deployment, not a client reference.
Arrive
Tap the tag by the door — its rolling cryptographic code is verified server-side, so a photographed or cloned URL is useless. Or don't: a scheduled shift clocks itself in, and a nudge arrives if neither happens.
Shift opens
The backend matches the advisor to their payroll worker record and opens a time entry against the right job code, recording which of the three routes opened it.
Leave the building
The phone reports a geofence exit in the background — locked screen, app closed, doesn't matter.
Shift closes itself
After a configurable grace period, a server-side timer commits the clock-out. Stepping out for coffee doesn't end the shift.
The constraint that shaped the build
The obvious design was "Sign in with Rippling." That turned out to be unavailable: Rippling only offers OAuth to App Shop partner apps, and SAML requires an Identity & Access Management package most small operators don't buy. Discovering that late would have been expensive.
So sign-in became an emailed one-time code checked against active worker records, and all payroll writes moved to a single company-level API token held by the backend. A side benefit: the phone never holds a payroll credential at all. If a device is lost, there is nothing on it to revoke beyond its own session.
Treating an NFC tag as untrusted input
A sticker on a wall is a public object. Anyone can photograph it or walk off with it.
The tags are NTAG 424 DNA running SUN messaging, so every tap produces a
fresh encrypted payload and a message authentication code tied to that specific tag's key.
The server decrypts the payload, confirms the code, and refuses to process the same
tap counter twice.
Why this matters: reading the key out of one tag does not let you forge another, and a replayed URL is rejected. The alternative — a plain link in a tag — would have let anyone clock in from the parking lot.
Then we removed the tap
Version 1.1 added two quieter ways in. If an advisor has a published shift in payroll, arriving at the studio clocks them in by itself. If they don't, a push notification a few minutes after arrival asks once — capped per day, and never while they're already clocked in. The tag is still there for everyone else and for anyone who'd rather be explicit.
Each shift records which route opened it — tag, prompt, or schedule — because they aren't equally strong evidence. A tag tap is physical proof of presence; a location-based clock-in trusts the phone's GPS. Storing the difference means that distinction survives into the payroll record instead of being quietly averaged away.
On what the server is allowed to know: the app monitors only the studios themselves. It reports arriving at and leaving a known site — never a route, never a location anywhere else. Staff tracking was never the product, and the design makes it something we couldn't do even if asked.
Security and session handling
- Sign-in codes are HMAC'd, bound to the sign-in attempt, expire in ten minutes and lock after five wrong tries.
- An email that matches no worker still records a decoy, so responses never reveal who does or doesn't work there.
- Fifteen-minute access tokens with rotating ninety-day refresh tokens: staff sign in once per phone, and a replayed refresh token revokes the session.
- Sessions re-verify against payroll at most daily and disable anyone no longer active — but an unreachable payroll API never locks the whole team out mid-shift.
What it runs on
Fastify and TypeScript on AWS ECS, PostgreSQL on RDS with daily backups, and a React Native app built with Expo for both platforms. The HTTP contract is defined in OpenAPI and the backend's own test suite validates its responses against that contract, so the app and server cannot quietly drift apart.
The whole production footprint costs roughly $55 a month to operate. That number is deliberate: a small operator should not need a platform team or a four-figure monthly cloud bill to solve a four-figure annual payroll problem.
Case study 02 · Integration
Two systems that each thought they owned the schedule
A boutique fitness operator runs its classes in Mindbody and its people in Rippling. Both hold a version of who is teaching what, and neither knows about the other — so every substitution, every schedule change and every commission calculation was being re-entered by hand, twice, by someone reading one screen and typing into another.
Roster
Someone becomes an instructor in Rippling and their Mindbody staff record is created — or reactivated, if they've taught before. HR stays the single source of truth for who works here.
Schedule
Mindbody classes become published Rippling shifts, reconciled idempotently. Instructor changes update in place; cancellations unpublish and republish rather than leaving a ghost shift.
Subs
An instructor accepts a cover offer in Rippling. That alone re-teaches the class in Mindbody — the right class, resolved by start time and location, with the right substitute.
Pay
Each class's attendance becomes a piece-rate input on the instructor's matching Rippling time entry, so attendance-based commission lands in payroll without a spreadsheet in between.
Pick a winner for each thing, not for everything
The tempting design is bidirectional sync. It is also how you get two systems writing over each other at 6am. Instead each entity has exactly one owner: Rippling owns the roster, Mindbody owns the schedule. Data moves one way per entity, which makes every conflict a question with an answer rather than a race.
The join problem nobody budgets for
Mindbody and Rippling share no identifier. Matching a person across them is the entire integration, and getting it wrong means paying the wrong instructor. The fix is a mapping record per instructor, keyed on the Mindbody staff id for constant-time lookup and deduplication, with the Rippling employee id written into Mindbody's own staff field as a backstop. If the mapping is ever lost it can be rebuilt from either side.
Let payroll do the arithmetic
Attendance commission is piece rate: so many dollars per attendee. The integration could have multiplied that out and written a dollar figure. It doesn't. It writes the units — how many people attended — onto the time entry, and Rippling's own piece-rate policy computes the money.
Why that matters: the pay calculation stays inside the payroll system, where it's visible, auditable and already correct for overtime and tax. An integration that computes dollars becomes a second payroll engine nobody signed up to maintain — and the first thing an auditor asks about.
Two gates in front of the money
- The planner is a pure function. It reads classes and attendance and returns a plan, including a reason for every line it refuses to pay. It cannot write anything.
- Applying that plan requires both an explicit
applyrequest and a separate server-side setting to be switched on. Either one missing and the run reportsBLOCKEDinstead of paying. - A standalone verifier compares pay rates in Mindbody against Rippling, and a second audits the schedule in both systems independently of the sync that produced it.
No servers
The whole connector runs as Rippling Functions triggered by Workflow Studio — there is no box to patch, no host to pay for, and no long-lived credential sitting anywhere: each run mints a short-lived Mindbody token and discards it.
Status: v0.1.0 — every flow proven end-to-end against Mindbody and Rippling sandbox environments, with attendance-commission writes deliberately gated off until rates are signed off. Built for the same operator as the Clock Out deployment above; see the disclosure there.
How we work
Small, fixed, and honest about the unknowns.
Most failed software projects were mispriced before anyone wrote a line of code, because nobody checked the hard assumption first.
Find the expensive unknown, first
Every project has one assumption that decides the budget — usually whether a system you depend on will actually let you in. We test that in the first week, before the estimate, not after the contract.
Fixed-price slices
Work is cut into slices that each end in something demonstrable and each carry their own price. You can stop after any slice and still own something that runs.
Deployed, not demoed
A slice is finished when it is in production with monitoring and backups — not when it works on a laptop. Infrastructure is defined in code and lives in your cloud account, under your billing.
You own all of it
Source code, deployment scripts and written design documents are yours at the end, in your repository. No proprietary runtime you have to keep renting from us to keep the lights on.
Tell us what's breaking.
Describe the problem in a paragraph — what's manual, what it costs you, what systems are involved. If it isn't a fit, we'll say so and point you somewhere better.