Tulip Landcare: a landscaping website and back office in one Next.js app
Tulip Landcare is a landscaping and outdoor-living contractor in Orange County, California. We rebuilt its WordPress/Elementor site from scratch as one Next.js app: a fast public website plus a back office for leads, estimates, jobs and invoices. Visit tuliplandcare.com.
A landscaping company's WordPress site rebuilt in Next.js, plus a back office for leads, estimates, jobs and invoices.
What we built
Every page migrated from WordPress/Elementor, keeping the original URLs
301 redirect map so legacy URLs resolve in a single hop
Service and city pages, a blog, structured data and llms.txt
Quote form that saves each lead first and merges repeat enquiries
Next.js
PostgreSQL
Fly.io
Screenshots
Real screenshots of the live project, taken in October 2026.
Homepage hero with a pool and patio photo, quote and call buttons, and trust badges
Homepage on a phone, with full-width quote and call buttons
Outdoor Living service page with breadcrumbs and a free-quote card
Costa Mesa city page with local copy and a free estimate card
The starting point
The company had a WordPress site built with Elementor, with service and city pages that already showed up in local searches. The rebuild had to keep those URLs working. It was also a chance to give the team one place to handle leads, from the first call to the final invoice.
The public website
We migrated the content, kept the structure that was already working in search, and rebuilt everything underneath it.
Every page of the old site (copy, metadata and images) moved into typed content modules
Service pages, city landing pages on their original URLs, a blog and an RSS feed
A 301 redirect map, so legacy WordPress URLs resolve in a single hop; the sitemap lists only live pages
Structured data for LandscapingBusiness, Service, FAQPage, BlogPosting and BreadcrumbList, plus an llms.txt summary for AI assistants
A quote form that saves the lead to the database before sending any notification, with a honeypot, rate limiting and phone-number normalization
The back office
Behind a sign-in, the team gets an admin built around how a landscaping company runs. Repeat enquiries from the same phone number or email merge into one lead instead of creating duplicates.
Dashboard, leads and a call queue with follow-up cooldowns
Bookings, estimates, jobs and invoices
Reviews, email campaigns and templates, and ad spend
Content editing for the blog, services, projects and service areas
Inbox, chat sessions, tasks and team
SEO and visibility panels
Stack
Next.js and TypeScript with a PostgreSQL database. Production runs on Fly.io, and we keep a preview copy on our own server.
Can you rebuild a WordPress site without losing Google rankings?
Nobody can promise rankings, but you can avoid throwing them away. On this project we kept the URLs that already ranked, moved the copy and metadata over, and redirected every legacy URL in a single hop.
Why put the website and the admin in one app?
One codebase means one sign-in system, one database and one place to fix things. Leads from the quote form land directly in the admin, with no plugin or third-party form service in between.
What happens when someone sends the quote form?
The lead is saved to the database first, then the team is notified. If the same person writes again with the same phone number or email, the new enquiry merges into their existing lead.
Is the site hosted on your servers?
Production runs on Fly.io today. We also run a preview copy on our own server.