Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

68 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Helpet logo

Helpet

Dehradun's home services platform β€” book a verified professional in under a minute.

Live Next.js React FastAPI PostgreSQL

Live site Β· API docs Β· Report an issue


Helpet connects households in Dehradun with vetted professionals for cleaning, plumbing, electrical work, AC repair, carpentry and 120+ other services. Customers browse a curated catalogue, pick a slot, and pay after the job is done. Admins run the whole catalogue, booking pipeline and payment ledger from a built-in dashboard.

This repository is the full product: a Next.js 16 storefront and admin panel, a FastAPI REST backend, and a PostgreSQL database.

Helpet landing page

Service catalogue Service detail page
Catalogue β€” every category, searchable Service detail β€” options, pricing, what's included

Booking flow β€” slot picker, address and live total

Booking β€” 7-day slot picker, geolocated address, and a running total that already includes the platform fee

Mobile home Mobile service detail Mobile booking
Mobile-first throughout β€” the same flows at 390Β px

Highlights

Feature What it does
πŸ” Passwordless-first auth Email OTP login via Resend, JWT sessions, and password reset β€” with role-based access for customers, providers and admins
πŸ—‚ Deep service catalogue Categories β†’ services β†’ sub-services, each with its own pricing, discount and platform fee, reorderable by drag-and-drop
πŸ“… Real booking flow 7-day slot picker that hides past times, one-tap address fill from device geolocation, and notes per booking
πŸ’Έ Transparent pricing Platform fee computed server-side and folded into the booking total, so the quote a customer sees is the amount that is recorded
⭐ Reviews & notifications Ratings gated on completed bookings the reviewer actually owns, one per booking, plus an in-app notification feed
πŸ›  Admin dashboard Manage users, services, categories, bookings and payments with pagination and status controls
πŸ–Ό Runtime OG images Every page renders its own 1200Γ—630 social/search thumbnail via next/og, using the real service photo when one exists
πŸ”Ž SEO built in JSON-LD (LocalBusiness, Organization, WebSite, Breadcrumb, Service), dynamic sitemap with image extensions, and robots.txt

Architecture

flowchart TB
    subgraph client["Client"]
        UI["Next.js 16 Β· App Router<br/>React 19 Β· Tailwind v4"]
    end

    subgraph vercel["Vercel"]
        RSC["Server Components Β· ISR<br/>sitemap Β· robots Β· OG images"]
    end

    subgraph backend["FastAPI Β· /api/v1"]
        AUTH["Auth<br/>JWT + OTP"]
        CORE["Services Β· Bookings<br/>Payments Β· Reviews"]
        ADMIN["Admin<br/>stats Β· moderation"]
    end

    subgraph data["Data & Providers"]
        PG[("PostgreSQL<br/>Supabase")]
        CLOUD["Cloudinary<br/>image CDN"]
        MAIL["Resend<br/>transactional email"]
    end

    UI --> RSC
    RSC -->|"REST"| CORE
    UI -->|"REST Β· axios"| AUTH
    UI -->|"REST Β· axios"| CORE
    UI -->|"REST Β· axios"| ADMIN
    AUTH --> PG
    CORE --> PG
    ADMIN --> PG
    AUTH --> MAIL
    CORE --> CLOUD
Loading

Tech stack

Layer Choice
Frontend Next.js 16 (App Router, Turbopack), React 19, TypeScript 5
Styling Tailwind CSS v4, Framer Motion, Lucide icons
Backend FastAPI, SQLAlchemy, Alembic, Pydantic v2
Database PostgreSQL (Supabase)
Auth JWT (python-jose), bcrypt via passlib, email OTP
Media Cloudinary, with f_auto,q_auto transforms applied at request time
Email Resend
Analytics Microsoft Clarity
Hosting Vercel (frontend) Β· containerised FastAPI (backend)

Quick start

Prerequisites β€” Node 20+, Python 3.13, and a PostgreSQL database.

1. Backend

cd backend
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

# create backend/.env β€” see "Environment variables" below
alembic upgrade head
python seed.py            # optional: loads demo catalogue + users

uvicorn app.main:app --reload

API runs at http://localhost:8000 β€” interactive docs at /docs, ReDoc at /redoc.

2. Frontend

cd frontend
npm install

# create frontend/.env.local β€” see "Environment variables" below
npm run dev

App runs at http://localhost:3000.


Environment variables

backend/.env

Variable Required Notes
DATABASE_URL βœ… PostgreSQL connection string
SECRET_KEY βœ… JWT signing secret
APP_NAME β€” Defaults to Helpet
DEBUG β€” Defaults to true
ACCESS_TOKEN_EXPIRE_MINUTES β€” Defaults to 20160 (14 days)
RESEND_API_KEY β€” Omit in development β€” OTPs print to the console
RESEND_FROM_EMAIL β€” Defaults to the Resend onboarding sender
CLOUDINARY_CLOUD_NAME β€” Required only for image uploads
CLOUDINARY_API_KEY β€” Required only for image uploads
CLOUDINARY_API_SECRET β€” Required only for image uploads
FRONTEND_URL β€” Extra CORS origins, comma-separated

frontend/.env.local

Variable Required Notes
NEXT_PUBLIC_API_URL βœ… e.g. http://localhost:8000/api/v1
NEXT_PUBLIC_APP_URL βœ… Canonical site URL β€” drives metadataBase, sitemap and JSON-LD
NEXT_PUBLIC_CLARITY_ID β€” Analytics; omitted in development
API reference

All routes are prefixed with /api/v1.

Auth β€” /auth

Method Path Description
POST /register Create an account
POST /login Password login β†’ JWT
GET /me Current user from token
POST /otp/send Send a one-time code
POST /otp/verify-login Exchange OTP for JWT
POST /otp/verify-email Confirm email ownership
POST /password-reset/request Β· /password-reset/confirm Reset flow

Services β€” /services

Method Path Description
GET /categories Β· / Β· /{id} Public catalogue reads
POST PUT DELETE /categories, /, /{id} Admin catalogue writes
PUT /categories/reorder Β· /reorder Persist drag-and-drop order
POST PUT DELETE /{id}/sub-services/… Manage sub-services

Bookings β€” /bookings

Method Path Description
POST / Create a booking (server computes the platform fee)
GET /my Β· /{id} Customer's bookings
PUT DELETE /{id} Update or cancel
GET / All bookings (admin)

Payments β€” /payments Β· Reviews β€” /reviews Β· Notifications β€” /notifications

Method Path Description
POST /payments/offline Confirm a COD/UPI booking
GET /payments/my Β· /payments/{id} Payment history
POST /reviews/ Review a completed booking
GET /reviews/my Β· /reviews/provider/{id} Read reviews
GET PUT /notifications/my Β· /{id}/read Β· /read-all Notification feed

Admin β€” /admin

Method Path Description
GET /stats Dashboard counters
GET PUT DELETE /users… Paginated users, status and role changes
GET PUT /bookings… Β· /payments… Paginated pipelines with status updates

Project structure

Helpet/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ api/v1/endpoints/   # auth Β· services Β· bookings Β· payments Β· reviews Β· admin
β”‚   β”‚   β”œβ”€β”€ core/               # config Β· security Β· email Β· dependencies
β”‚   β”‚   β”œβ”€β”€ db/                 # engine Β· session Β· base
β”‚   β”‚   β”œβ”€β”€ models/             # SQLAlchemy tables
β”‚   β”‚   β”œβ”€β”€ schemas/            # Pydantic request/response contracts
β”‚   β”‚   └── services/           # auth Β· booking Β· notification Β· storage
β”‚   β”œβ”€β”€ alembic/versions/       # migrations
β”‚   β”œβ”€β”€ tests/                  # pytest suite
β”‚   └── seed.py                 # demo data
β”‚
└── frontend/
    β”œβ”€β”€ src/app/
    β”‚   β”œβ”€β”€ (public pages)      # home Β· categories Β· services Β· book Β· payment
    β”‚   β”œβ”€β”€ admin/              # dashboard Β· users Β· services Β· bookings Β· payments
    β”‚   β”œβ”€β”€ opengraph-image.tsx # runtime social/search thumbnails
    β”‚   β”œβ”€β”€ sitemap.ts          # dynamic sitemap with image extensions
    β”‚   └── robots.ts
    β”œβ”€β”€ src/components/         # shared UI
    └── src/lib/                # api client Β· og-image Β· seo-data Β· image resolver

Testing

The backend ships a pytest suite covering auth, services, bookings, payments, reviews, notifications and admin routes. Tests run against a dedicated helpet_test database β€” created and torn down per session, never your development data.

cd backend
source .venv/bin/activate
pytest

Deployment

The frontend deploys to Vercel, wired to this repository β€” every pull request gets its own preview deployment, and merges to master ship to production. The backend runs as a container (Dockerfile + start.sh), applying migrations on boot before serving with Gunicorn/Uvicorn workers.


License

No open-source licence is granted. Β© Helpet India β€” all rights reserved.


Built in Dehradun, Uttarakhand πŸ”

About

Dehradun's home services platform β€” book a verified professional in under a minute. Next.js 16 storefront + admin panel, FastAPI backend, PostgreSQL/Supabase database. πŸ‘¨β€πŸ”§

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages