Laravel developer to build, launch and maintain Farm Directory Site

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Any

SALARY

N/A

HOURS PER WEEK

TBD

DATE UPDATED

Sep 24, 2026

JOB OVERVIEW

LARAVEL DEVELOPER TO BUILD, LAUNCH AND MAINTAIN FARM DIRECTORY SITE
Full-time for about 3 months, then part-time. Remote job.

THE PROJECT
Farm to Local is a US-wide directory that connects local farms, ranches, fishermen, bakers, home makers, nurseries, service providers and farmers markets with buyers, searchable by ZIP code. It is a directory, not a marketplace: sellers get a free shop page, buyers contact them directly, and there is no checkout. Revenue comes from paid seller tiers, tracked referrals and sponsored placements.

YOU ARE NOT STARTING FROM A BLANK PAGE
You will receive a complete build kit:
- 34 finished HTML pages with shared CSS, fonts and interactions. Every screen of the site is designed and approved.
- A product spec, full data model, hand-written Laravel migrations, URL map, and five milestones, each with acceptance criteria and required tests.
- Legal drafts, copy and sample data.
Your job is to turn this into a working, deployed application, exactly as designed, and keep it running.

STACK (FIXED)
Laravel 11, PHP 8.3, MySQL 8, Blade with Alpine.js, Filament v3, Laravel Cashier (Stripe), Pest for tests. Twilio for SMS login codes, Postmark for email, MapLibre for maps. Hosted on Laravel Forge. No WordPress, no React/Vue single-page app, no page builders. AI coding tools are welcome; you own the result.

MILESTONES (PAID ON ACCEPTANCE OF EACH)
1. Data model, admin panel, importers, seed data. Accepted when migrations run clean, the USDA farmers market importer works, and the radius search query is tested.
2. All public pages, ZIP + radius search, maps. Accepted when every page matches its design at 1280px wide and sponsored placements never appear in search results.
3. Passwordless login, 5-step seller onboarding, claim-your-listing flow, verification queue, seller dashboard, buyer account. Accepted when the full seller journey works end to end on staging.
4. Messaging, booking requests, neighbor shares with 14-day expiry, report intake. Accepted when notifications arrive by SMS and email and shares never show an exact location.
5. Pro subscriptions via Stripe, Partner tracking and monthly statements, gear affiliate links, sponsor placements, launch hardening. Accepted when Lighthouse scores 90+ on key pages, backups are tested, and production is live.
Phase 2, quoted separately after launch: responsive mobile layouts and a weekly in-season email.

TIMELINE AND PAY
- Build phase: full-time, about 12 weeks.
- After launch: about 10 hours per week for maintenance and small changes, ongoing.
- Rate: USD 5 to 12 per hour depending on experience. You propose your rate within that range and your estimated hours for each milestone.
- Paid via Wise on the 1st and 15th. Hosting, Stripe, Twilio, Postmark and any AI tool costs are on my accounts, not yours.

HOW WE WORK
I am in California and I am not a developer. You will get clear decisions, finished designs and quick answers. I do not review code. What I rely on: the acceptance criteria and tests in the kit, a screenshot comparison against the design for every public page, and clicking through the staging site myself. Staging site from week one. One fixed 30-minute video call per week and a short written update at the end of each working day. Everything lives in my GitHub repo and my hosting account from day one; you are a collaborator, never the owner. New design pages will arrive as HTML files and you wire them in without changing the design system.

YOU
- 4+ years of Laravel in production, and you have deployed and run at least one app yourself (Forge or equivalent).
- Filament, Stripe/Cashier, queues and the scheduler, each done for real at least once.
- You have converted designer-supplied HTML into Blade templates before and can show it.
- You have built a geo/radius search at least once.
- Clear written English. You raise problems early instead of working around them.
- Available full-time for the build, then part-time indefinitely. Individuals only, not agencies.

TO APPLY (all four required; applications missing any of them will be skipped)
1. A 5-minute screen recording walking through the code of a Laravel app you built. Code, not the UI.
2. In writing: how would you generate state, city and category pages so that new city pages appear automatically once listings cross a threshold?
3. Your hourly rate within the range, your estimated hours for each of the five milestones, your calendar time to reach Milestone 2, and the Pacific Time hours you can hold for the weekly call.
4. One thing in this listing you would push back on.

PAID TEST TASK BEFORE HIRING
About 6 hours, paid at your proposed rate. From the kit, convert the city results page to a Blade layout with components and implement the ZIP-radius search against 50 seeded sellers. Deliver a repo and a 5-minute video walkthrough.

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0012
Controller Execution Time ( Jobseekers / Job )  0.0252
Total Execution Time  0.0271
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,514,528 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Laravel-developer-to-build-launch-and-maintain-Farm-Directory-Site-1737633
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0163 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
= 'USD-PHP' 
0.0003   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1737633
 LIMIT 1 
0.0007   SELECT *
FROM `employers`
WHERE `employer_id` = 321096
 LIMIT 1 
0.0007   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `misc` ON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1737633
AND `misc`.`id` IS NULL 
0.0004   SELECT e.business_name, e.logo, e.website, e.rebill_date, e.date_added member_date, hits, DATEDIFF('2026-10-03',ej.date_added) duration_days, DATEDIFF('2026-10-03',e.rebill_date) duration_rebill, ej.*, e.deactivate FROM employers e, employer_jobs ej WHERE e.employer_id = ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id = '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-10-03',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != 1 AND ej.deleted = 0 AND job_id = '1737633' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1737633 
0.0006   UPDATE employer_jobs SET hit_counts = '***Sep-24-2026=418***Sep-25-2026=325***Sep-26-2026=88***Sep-30-2026=1***Oct-02-2026=1***Oct-03-2026=1' WHERE job_id= '1737633'  
0.0005   UPDATE employer_jobs SET monthly_hits = '***Sep-2026=831***Oct-2026=2' WHERE job_id= '1737633'  
0.0007   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id = '' AND job_id = '1737633' AND status LIKE 'sent%' ORDER BY id DESC  
0.0002   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1737633 
0.0110   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '321096'
AND `date_added` >= '2022-06-08' 
0.0003   select * from teasers 
0.0002   SELECT * FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)