Property management app for landscaping business -- Ruby on Rails + Hotwire
  • Ruby 56.6%
  • HTML 23.7%
  • CSS 14.4%
  • JavaScript 5.1%
  • Dockerfile 0.2%
Find a file
Lucas Draney 0cc70e54f3
Some checks are pending
CI / scan_ruby (push) Waiting to run
CI / scan_js (push) Waiting to run
CI / lint (push) Waiting to run
ci/woodpecker/push/woodpecker Pipeline was successful
Update ios-dev-builds.md to clarify xcodebuild vs Fastlane (#252)
2026-06-18 23:40:07 +00:00
.github Initial scaffold: Rails 8.1.3 with PostgreSQL, Hotwire, RSpec, and CI pipeline 2026-05-23 18:11:13 -06:00
app Add DayExclusion model and remove-from-list button (#245) 2026-06-17 11:36:03 +00:00
bin Timezone-aware completion timestamps and location-based time (#184) 2026-06-09 02:08:14 +00:00
config Fix OmniAuth redirect_uri to resolve dynamically from request host (Closes #246) (#247) 2026-06-17 12:30:09 +00:00
db Add DayExclusion model and remove-from-list button (#245) 2026-06-17 11:36:03 +00:00
docs Update ios-dev-builds.md to clarify xcodebuild vs Fastlane (#252) 2026-06-18 23:40:07 +00:00
keycloak-theme/landscaping/login Add Keycloak login theme source files (#174) 2026-06-08 04:13:10 +00:00
lib/tasks Gate schedule digest behind feature flag, add Week tab upload button (#213) 2026-06-14 11:48:38 +00:00
log Update gitignore: add .claude/, fix vendor pattern, track .keep files 2026-05-24 11:37:21 -06:00
public Initial scaffold: Rails 8.1.3 with PostgreSQL, Hotwire, RSpec, and CI pipeline 2026-05-23 18:11:13 -06:00
script Initial scaffold: Rails 8.1.3 with PostgreSQL, Hotwire, RSpec, and CI pipeline 2026-05-23 18:11:13 -06:00
spec Add DayExclusion model and remove-from-list button (#245) 2026-06-17 11:36:03 +00:00
storage Initial scaffold: Rails 8.1.3 with PostgreSQL, Hotwire, RSpec, and CI pipeline 2026-05-23 18:11:13 -06:00
tmp Initial scaffold: Rails 8.1.3 with PostgreSQL, Hotwire, RSpec, and CI pipeline 2026-05-23 18:11:13 -06:00
vendor Update gitignore: add .claude/, fix vendor pattern, track .keep files 2026-05-24 11:37:21 -06:00
.current-issue Initial scaffold: Rails 8.1.3 with PostgreSQL, Hotwire, RSpec, and CI pipeline 2026-05-23 18:11:13 -06:00
.dockerignore Fix Kaniko layer cache miss on bundle install (#153) 2026-06-07 04:21:36 +00:00
.env.example Add schedule image digestion via Claude Vision API (#208) 2026-06-14 02:31:15 +00:00
.gitattributes Initial scaffold: Rails 8.1.3 with PostgreSQL, Hotwire, RSpec, and CI pipeline 2026-05-23 18:11:13 -06:00
.gitignore Add env_file support for Keycloak auth in docker-compose dev (#165) 2026-06-07 18:45:17 +00:00
.rspec Initial scaffold: Rails 8.1.3 with PostgreSQL, Hotwire, RSpec, and CI pipeline 2026-05-23 18:11:13 -06:00
.rubocop.yml Initial scaffold: Rails 8.1.3 with PostgreSQL, Hotwire, RSpec, and CI pipeline 2026-05-23 18:11:13 -06:00
.ruby-version Initial scaffold: Rails 8.1.3 with PostgreSQL, Hotwire, RSpec, and CI pipeline 2026-05-23 18:11:13 -06:00
.woodpecker.yaml Fix CI: remove dead volume config, add Kaniko push retry (#200) 2026-06-12 03:57:49 +00:00
CLAUDE.md Add CLAUDE.md symlink and complete docs/ table of contents (#221) 2026-06-14 13:29:39 +00:00
config.ru Initial scaffold: Rails 8.1.3 with PostgreSQL, Hotwire, RSpec, and CI pipeline 2026-05-23 18:11:13 -06:00
docker-compose.yml Add env_file support for Keycloak auth in docker-compose dev (#165) 2026-06-07 18:45:17 +00:00
Dockerfile Pipeline optimization: single-stage Dockerfile + gem cache (#188) 2026-06-10 01:40:10 +00:00
Gemfile Add schedule image digestion via Claude Vision API (#208) 2026-06-14 02:31:15 +00:00
Gemfile.lock Add schedule image digestion via Claude Vision API (#208) 2026-06-14 02:31:15 +00:00
Rakefile Timezone-aware completion timestamps and location-based time (#184) 2026-06-09 02:08:14 +00:00
README.md Update ios-dev-builds.md to clarify xcodebuild vs Fastlane (#252) 2026-06-18 23:40:07 +00:00

Landscaping Assistant

Property management app for landscaping crews and their clients. Built with Rails 8.1 + Hotwire, deployed on k3s, available as a web app and iOS app (turbo-ios).

Environment URL
Production https://landscaping-assistant.app
Dev https://landscaping-dev.tail5b443a.ts.net
Local http://localhost:7143

Quick Start

git clone <repo-url> && cd landscaping-assistant
docker compose run --rm web bundle install
docker compose up -d
# App available at http://localhost:7143

Documentation

App

Doc Description
App Architecture Data model, auth flow, navigation, Rails structure
Auth Strategy Authorization Code + PKCE decision record, ROPC revert rationale
Keycloak Setup Realm design, programmatic config, secrets wiring
Feature Flags Flag philosophy, rake tasks, per-flag documentation
Service Requests Client request model: package changes, one-off projects, admin approval
Hotwire Stimulus controllers, Turbo patterns, CSS conventions
Security Input validation, auth enforcement, controller hardening

Infrastructure & Deploy

Doc Description
Pipeline Full lifecycle: local dev, prod deploy, iOS builds, App Store
iOS Pipeline Turbo Native build, signing, App Store Connect, TestFlight
Infrastructure Three-repo deployment model, Woodpecker CI, kustomize overlays
Networking Custom domain routing, Tailscale Funnel, DNS, Keycloak URLs
Multi-Database Solid Cable/Cache/Queue database setup
DORA Metrics Pipeline performance and deployment health measurements
Alerting PrometheusRule alerts, AlertManager routing, Telegram notifications
Observability Roadmap Datadog-equivalent gap analysis, six-phase rollout plan

Development

Doc Description
Local Dev Setup Arch Linux prerequisites, rbenv, docker compose, vendored gems
iOS Dev Builds Local dev builds, wireless install, Fastlane reference
Testing Strategy Endpoint-first philosophy, no browser tests

User Stories

Doc Description
User Stories (Auth) Role definitions, tab layout, onboarding flow, multi-tenancy
User Stories (Original) Historical: tickets 1-3 acceptance criteria
Address Entry Design Historical: quick-address-entry architecture and user story

Roles

Role Tabs Description
Client Person Homeowner. Views own property, makes requests. Default on signup.
Crew Member Today, Person Works for a business. Builds own daily list, read-only on properties.
Crew Lead Today, Person, Properties Creates/edits properties, captures GPS addresses in the field.
Admin Today, Week, Person, Properties, Crew Assigns work, tracks weekly completion, manages crew.