All case studies
Ops PlatformFeatured

Cascadia Forestry Platform

Cascadia & Ramos, Forestry Services

Role

PM-builder lead · contract engagement

Duration

In production since Q1 2026 · engagement ongoing

Status

Active engagement · runs the business daily

The problem

Two related forestry-services companies were running side-by-side on paper timesheets, an Excel payroll spreadsheet held together by one person's institutional memory, and a stack of AppSheet tools that nobody on the field side could keep working. Foremen submitted hours on paper, the office re-keyed them into Excel, and partial payments against 16+ active contracts were tracked across three different systems.

The work happens in remote Pacific Northwest forests where cell signal is unreliable. Crews are bilingual EN/ES. The owners wanted one system that the field could actually use, and that the office could trust for payroll without the weekly reconciliation marathon.

The approach

Discovery first. Two weeks shadowing foremen, office staff, and ownership before writing any code. The asked-for feature (a cleaner AppSheet rebuild) was wrong. The real problem was data fragmentation across three systems and the office's lack of trust in field submissions.

Built mobile-first as a PWA so foremen install it like an app on Android phones. Offline submission queue with conflict-resolution on reconnect. Bilingual UI driven by a single content table. EN and ES rows side-by-side, swap by toggle.

Role-based dashboards (admin / owner / foreman / office / employee) with hard RLS enforcement at the Supabase layer. The office sees all of one company; the owner sees both. Foremen only see their crew. Employees see their own hours.

What shipped

Offline-First Field Timesheet

A five-step wizard (project, units, crew, hours, review) a foreman completes on a phone in a clearcut with no signal. Voice-to-text notes in Spanish or English, photo attachments, production auto-calculated from bags to trees. Fully offline via service worker and local queue; syncs the moment signal returns.

Why it mattersReplaced paper timesheets carried down a logging road at week's end. Hours land the same day, from the field, with or without service.

Bid Engine: Scrape, Score, Propose

15+ scrapers pull opportunities from federal, state, tribal, and subscription sources (SAM.gov, OregonBuys, WA WEBS, BLM, USFS). A smart-bid needle scores each bid green, yellow, or red; every loss logs the winner and their price into a competitor leaderboard that feeds back into scoring. Won bids convert to a live project in one click.

Why it mattersThe company finds work it never saw before, prices it against what competitors actually won, and turns an award into a running project without re-typing a thing.

Unit Data Ingest: Drop a File, Walk Away

Seven parsers cover the major landowners' formats, including scanned PDFs via OCR (acres, county, GPS, elevation, species). A nightly job scans every active project's Drive folder and lands anything new as structured units; ambiguous rows queue for review instead of guessing.

Why it mattersUnit data used to be hand-typed off PDFs one row at a time. Now the file gets dropped in the folder it was always going in, and the data appears.

Expenses That Assign Themselves

Weekly card spend cross-references cardholders against timesheets and project keywords, landing roughly two thirds of expenses with no human touch. The rest queue for a one-click assign, and every night the backlog re-checks itself against the newest timesheets.

Why it mattersExpenses arrive before the timesheets that prove which crew used the card. The backlog clears itself overnight instead of piling up.

Google Drive as the File System

The platform builds and owns the full Drive folder tree, creates sub-folders for every new project, and surfaces files in-app, role-gated: office sees the shared tree, foremen see maps and specs only. Documents open natively in Docs and Sheets.

Why it mattersThe company keeps working the way it already worked, in Drive, and the app just knows where everything is.

Analytics Dashboard

Six tabs built from scratch: Expenses, Equipment, Bids, Payroll, Production, and Competitors. Project profitability, expense ratios, monthly trends, top earners, weekly overtime, and a per-project P&L chart.

Why it matters"How is the business actually doing" becomes a single page instead of four cross-referenced spreadsheets.

Overview: Everything That Needs Attention

A rebuilt landing page: Pending Decisions inbox, 14-day trends, live site weather, recently completed units, a compact overtime monitor, an active-projects grid, and a KPI strip wired to real data.

Why it mattersOpen the platform and see the state of the operation without clicking anything.

Live Weather for Every Active Site

National Weather Service forecasts for every county with active units, derived automatically from the unit records. Conditions, highs and lows, rain probability, and project counts per county, smartly cached.

Why it mattersSpray days, planting days, and fire-season calls get made from one screen instead of a weather app plus a mental map of where the crews are.

Maps: Every Unit as a Pin

Every unit with coordinates renders on a live map, color-coded by status and filterable by project or company. Click a pin for species, stock type, and exact coordinates; open turn-by-turn directions in one tap.

Why it mattersThe office and the foremen see the operation geographically, and a crew navigates to a unit without a phone call.

Six Roles, One Platform

Admin, owner, foreman, office, employee, and client each get a different application, enforced in the database rather than hidden in the interface. Foremen never see a dollar amount; the owner gets a Spanish-first, large-text dashboard with traffic-light project status.

Why it mattersOne system serves a bilingual field crew, an office team, and two owners without anyone seeing what they should not.

Historical Payroll Reconciliation

Two years of payroll across two spreadsheets in two formats, reconciled into a single source of truth: 201 timesheets, 2,464 entries, $528,699 imported and triple-checked against the accountant's year-to-date report. It reconciles to within seventeen cents.

Why it mattersProject labor costs are correct from the company's earliest data, not from the day the office started entering hours into a new system.

The App Teaches Itself

Guided tours fire on first login: office staff get a dashboard-to-timesheet walkthrough, foremen get in-context tooltips through the wizard. Every timesheet records who submitted it and who approved it.

Why it mattersNew hires ramp without a personal training session, and every payroll number has a name behind it.

Work Tracker with Telegram Built In

A kanban + deliverables board for the engagement itself, with real-time Telegram chat, a Drive files panel, and a client-side embedded board. Status updates and approvals happen from a phone, no login needed.

Why it mattersThe work, the questions, the status, and the proof of delivery live in one place instead of scattered text threads.

Staging, Backups, and a Way Back

Changes land on staging and get confirmed before the same code reaches production. Backups are restore-tested rather than assumed, database access locked down, and rollback + secret rotation documented as a runbook.

Why it mattersA business runs payroll on this. Recovery is a ten-minute procedure, not a scramble.

Stack & decisions

Next.js + TypeScript

App Router, RSC where it fits, client components for the form-heavy field surfaces.

Supabase

Postgres + RLS handles authorization. Auth is email/password with magic-link fallback for foremen who forget passwords.

TanStack Query

Aggressive caching + prefetch for offline-first UX. Reconciles cleanly with optimistic updates on reconnect.

PWA

Service worker queues submissions when offline, replays on reconnect with conflict-resolution. Field-tested on rural Oregon coverage.

Tailwind

Mobile-first across every surface. Touch targets 48px minimum. Tested on cheap Android devices the field actually uses.

What you won't see in screenshots

The walkthrough above is recorded entirely from the public demo at bobilabs.dev/forestry-demo, a clone of the real platform code running on synthetic data. Every name, dollar value, and date is fabricated, so nothing from the production system is shown. Click into the live demo yourself. Cascadia Forestry and Ramos Reforestation brand names are the real public-facing companies and are intentionally preserved. Deeper live walkthroughs of the production system available over screenshare under NDA.

Have something we should ship?

60-minute scoping call, then a clear plan for how we'd approach it.

Work with us