Full Stack Web Developer

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

TYPE OF WORK

Full Time

SALARY

12.00/hour

HOURS PER WEEK

40

DATE UPDATED

Mar 16, 2026

JOB OVERVIEW

Full-Stack Web Developer (Next.js / PostgreSQL / Stripe) – Directory Platform with Name + Location Search

We are building a subscription-based professional directory for vetted boudoir photographers and supporting professionals.
Users must be able to discover professionals through:
search by name
search by city or ZIP
search within a geographic radius
category filtering
Professionals join through paid subscriptions only, and all listings must be manually approved before appearing publicly.
This is a long-term opportunity to help build and maintain the platform as it grows.

Core Features You Will Build
1. Directory Search System
The platform must support two primary search types.
Search by Name
Users must be able to search for professionals by name.
Example searches:
"Velvet Rose Boudoir"
"Sarah Thompson Photography"
"Studio Noir"
Requirements:
partial name matching
fast indexed searches
handling misspellings where possible

Location-Based Search
Users must also be able to search professionals by:
city
ZIP code
current location
service radius
Example:
Boudoir photographers near Baton Rouge
Makeup artist within 50 miles of Dallas

Search results should be ranked by:
membership tier
verification status
location relevance
profile quality

Professional Profiles
Each professional profile includes:
portfolio gallery
bio and specialties
service categories
service area radius
base location
reviews
contact form
Profiles must remain hidden until approved by an admin.

Professional Onboarding System
Professionals must be able to:
apply for membership
upload portfolio images
choose service categories
set service location and radius
create a professional profile
Applications are reviewed before publication.

Admin Dashboard
The admin panel must allow:
reviewing applications
approving or rejecting listings
editing profiles
managing subscriptions
moderating reviews and images

Subscription System
Professionals pay a monthly subscription fee to appear in the directory.
Requirements:
Stripe subscription integration
subscription status tracking
disabling listings when payment fails

Blog and SEO Pages
The platform will include:
blog articles
category landing pages
city landing pages
These pages help drive organic search traffic.

Required Skills
Applicants should have experience with:
JavaScript / TypeScript
React or Next.js
Node.js
PostgreSQL databases
building search systems
Stripe subscriptions
responsive web design

Preferred Experience
Experience with the following is a strong plus:
Supabase
geolocation search systems
directory platforms
SaaS platforms
TailwindCSS

Application Instructions
Please include:
Examples of platforms you have built
Your experience with React or Next.js
Your experience with Stripe subscriptions
Your expected hourly or monthly rate

Required Screening Questions
Please answer these questions in your application.
Applications without answers will not be reviewed.

Screening Test (Updated)
Question 1 — Database Design
What database tables would you create for a professional directory platform where users can search professionals by name and location?

Question 2 — Name Search
How would you implement search by professional name so users can find listings quickly?
Strong answers might mention:
indexed name fields
partial matching
full-text search

Question 3 — Location Search
How would you allow users to search professionals within 50 miles of their location?
Strong answers should mention:
latitude / longitude
geographic queries
PostGIS or radius queries

Question 4 — Combined Search
How would you design a search system that supports both:
search by name
search by location
search by category
in the same search page?

Question 5 — Stripe Subscriptions
If a professional's subscription payment fails, how would you prevent their profile from appearing in search results?

Final Instruction
Start your application with the word:
Directory
This helps us confirm you read the full job description.

VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0008
Controller Execution Time ( Jobseekers / Job )  0.0186
Total Execution Time  0.0199
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,511,344 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Full-Stack-Web-Developer-1602936
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0122 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0003   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1602936
 LIMIT 1 
0.0008   SELECT *
FROM `employers`
WHERE `employer_id` = 858577
 LIMIT 1 
0.0015   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1602936
AND `misc`.`idIS NULL 
0.0005   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-04-15',ej.date_added) duration_daysDATEDIFF('2026-04-15',e.rebill_date) duration_rebillej.*, e.deactivate FROM employers eemployer_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-04-15',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1602936' 
0.0007   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1602936 
0.0008   UPDATE employer_jobs SET hit_counts '***Mar-16-2026=290***Mar-17-2026=279***Mar-18-2026=90***Mar-19-2026=57***Mar-20-2026=48***Mar-21-2026=33***Mar-22-2026=13***Mar-23-2026=13***Mar-24-2026=22***Mar-25-2026=13***Mar-26-2026=11***Mar-27-2026=12***Mar-28-2026=11***Mar-29-2026=10***Mar-30-2026=4***Mar-31-2026=7***Apr-01-2026=8***Apr-02-2026=1***Apr-03-2026=8***Apr-04-2026=8***Apr-05-2026=4***Apr-06-2026=7***Apr-07-2026=9***Apr-08-2026=3***Apr-09-2026=3***Apr-10-2026=7***Apr-15-2026=1' WHERE job_id'1602936'  
0.0006   UPDATE employer_jobs SET monthly_hits '***Mar-2026=910***Apr-2026=59' WHERE job_id'1602936'  
0.0030   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1602936' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1602936 
0.0027   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '858577'
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)