About
FieldFrog is my company's field service software for lawn care and pest control, rebuilt from the ground up by C&F Solutions LLC, in English and Spanish from the first screen. Owners run the day from a web app, customers pay and reschedule in their own portal, and native iOS and Android apps are in progress.
Platforms
Web now, mobile in progress
Field service platform
Built with
- TypeScript
- Next.js
- Fastify
- PostgreSQL
- Drizzle
- Zod & OpenAPI
- WebSocket
- Stripe
- MapLibre
- Kotlin Multiplatform
What I built
A garden crew of six bots, Remi the frog, Skip the turtle, Penny the bee, Stella the ladybug, Boomer the bunny and Tally the dragonfly, handle reminders, rescheduling, billing, reviews, win-back and a weekly summary. They follow fixed rules rather than AI, and the owner sets each action to do it, ask first, suggest, only note it or never.
Next.js owner web app, customer portal and internal staff portal on a TypeScript Fastify API, with PostgreSQL row-level security per company that fails closed, and live updates over a WebSocket.
A modular monolith: every write goes through one command that checks permission, idempotency and status rules and writes the audit row and event in one transaction, and a Postgres-backed queue delivers events and runs jobs.
Outside services sit behind swappable providers with fakes for tests: Stripe Connect payments, Census geocoding, OpenFreeMap maps, and Tomorrow.io or OpenWeatherMap weather.
Industry packs for lawn and pest, including product application records per visit, and TypeScript, Swift and Kotlin clients generated from one API contract for a Kotlin Multiplatform core with native SwiftUI and Compose screens.
Screens
How it fits together
Clients
- Web appNext.js, for owners and office
- Customer portalNext.js, sign in by code, pay, reschedule
- Staff portalNext.js, MFA, audit log
- iOS & AndroidIn progress: Kotlin Multiplatform core, native screens
generated clients, HTTPS and a live WebSocket
API (TypeScript, Fastify)
- ModulesCustomers, plans, schedule, billing, bots
- command()Permission, idempotency, audit, event
- Live hubWebSocket topics per role
- Auth guardSessions, roles, rate limits
one transaction per write, events in the same commit
Data & jobs
- PostgreSQLRow-level security per company
- EventsPartitioned by month
- WorkerPostgres queue, listeners, scheduled jobs
- Industry packsLawn and pest, English and Spanish
provider interfaces, with fakes in tests
Outside
- StripeConnect payments and subscriptions
- CensusGeocoding
- OpenFreeMapMap tiles for MapLibre
- WeatherTomorrow.io or OpenWeatherMap