A production-ready MVP website for a travel business offering packaged trips to Tarapith Kali Mandir area with optional side-destination tours and station pickup/drop.
This application promotes respectful, legal, and permission-based cultural tourism. The "haunted experience" is a guided folklore and storytelling night-walk - NOT occult practices or ghost hunting. All tours:
- Operate with proper permissions
- Follow local rules and regulations
- Maintain respectful distance from sacred sites
- Are designed for cultural education and storytelling
- Landing Page: Hero section, package highlights, testimonials, CTAs
- Packages Page: 3 base packages (Basic ₹5k, Standard ₹7.5k, Premium ₹10k)
- Destinations: Tarapith main + side destinations (Birchandrapur, Nitai Bari)
- Trip Customizer: Build-your-own-trip form with dynamic pricing
- Sample Itineraries: 1-day, 2-day, and 3-day schedules
- FAQ & Safety: Comprehensive safety information and disclaimers
- Contact Form: Lead capture with WhatsApp integration
- Gallery: Photo showcase (admin-managed)
- Role-based authentication (Admin/Staff)
- Package management (CRUD)
- Lead/inquiry management with status tracking
- Destination management
- Testimonials management
- Gallery management
- FAQ management
- Site settings (contact info, payment settings)
- CSV export for leads
- Framework: Next.js 14 (App Router)
- Database: PostgreSQL + Prisma ORM
- Authentication: NextAuth.js
- Styling: Tailwind CSS
- UI Components: Custom shadcn/ui-style components
- Language: TypeScript
- Node.js 18+
- PostgreSQL database (local or hosted)
- npm or yarn
-
Clone the repository
git clone https://github.com/yankeeDamn/HauntedMe.git cd HauntedMe -
Install dependencies
npm install
-
Set up environment variables
cp .env.example .env.local
Edit
.env.localwith your values:DATABASE_URL="postgresql://username:password@localhost:5432/tarapith_travel" NEXTAUTH_URL="http://localhost:3000" NEXTAUTH_SECRET="your-secret-key" ADMIN_EMAIL="admin@tarapith.travel" ADMIN_PASSWORD="your-secure-password"
-
Set up the database
npx prisma generate npx prisma db push
-
Seed the database
npx tsx prisma/seed.ts
-
Run the development server
npm run dev
-
Open the application
- Public site: http://localhost:3000
- Admin panel: http://localhost:3000/admin/login
After seeding, log in with:
- Email: admin@tarapith.travel (or value from ADMIN_EMAIL)
- Password: admin123 (or value from ADMIN_PASSWORD)
src/
├── app/
│ ├── (public)/ # Public pages (packages, destinations, etc.)
│ ├── admin/ # Admin panel pages
│ ├── api/ # API routes
│ │ ├── admin/ # Protected admin APIs
│ │ ├── auth/ # NextAuth routes
│ │ └── ... # Public APIs
│ ├── globals.css
│ ├── layout.tsx
│ └── page.tsx # Landing page
├── components/
│ ├── admin/ # Admin-specific components
│ ├── layout/ # Header, Footer
│ └── ui/ # Reusable UI components
├── lib/
│ ├── auth-utils.ts # Auth helper functions
│ ├── prisma.ts # Prisma client
│ ├── utils.ts # Utility functions
│ └── validations.ts # Zod schemas
└── types/
└── next-auth.d.ts # Type extensions
prisma/
├── schema.prisma # Database schema
└── seed.ts # Seed script
- User: Admin/Staff accounts
- Package: Travel packages with pricing, inclusions, itinerary
- Destination: Primary and side destinations
- AddOn: Optional add-ons for customization
- Lead: Customer inquiries with status tracking
- Testimonial: Customer reviews
- GalleryImage: Photo gallery
- FAQ: Frequently asked questions
- SiteSettings: Site configuration
GET /api/packages- List packagesGET /api/destinations- List destinationsGET /api/testimonials- List approved testimonialsGET /api/gallery- List gallery imagesGET /api/faqs- List FAQsGET /api/addons- List add-onsGET /api/settings- Public site settingsPOST /api/inquiry- Submit inquiry (rate-limited)
GET|POST /api/admin/packages- Package CRUDGET|PUT|DELETE /api/admin/packages/[id]GET|POST /api/admin/leads- Lead managementGET|PUT|DELETE /api/admin/leads/[id]GET|POST /api/admin/destinations- Destination CRUDGET|POST /api/admin/testimonials- Testimonial CRUDGET|POST /api/admin/gallery- Gallery CRUDGET|POST /api/admin/faqs- FAQ CRUDGET|PUT /api/admin/settings- Site settings
-
Create a Vercel account at https://vercel.com
-
Set up a PostgreSQL database
- Use Vercel Postgres, Supabase, Neon, or Railway
- Get your connection string
-
Import your repository
- Connect your GitHub repo to Vercel
- Set environment variables:
DATABASE_URLNEXTAUTH_URL(your production URL)NEXTAUTH_SECRET(generate withopenssl rand -base64 32)ADMIN_EMAILADMIN_PASSWORD
-
Deploy
- Vercel will auto-build and deploy
- Run database migrations via Vercel's CLI or dashboard
-
Seed production database
npx prisma db seed
- Verify all environment variables are set
- Run database migrations
- Seed initial data
- Test admin login
- Test inquiry form submission
- Update contact information in admin settings
- Add real images to gallery
- Customize package details
- Rate limiting on inquiry endpoint (5 requests/minute)
- Input sanitization (XSS prevention)
- Server-side validation with Zod
- Role-based access control
- Secure authentication with NextAuth.js
- Protected admin routes
- Log in to admin panel
- Go to Settings
- Update phone, WhatsApp, email, address
- Go to Packages in admin
- Edit prices, inclusions, itinerary
- Mark packages as featured/active
- Testimonials: Add customer reviews in admin
- Gallery: Upload images via admin panel
- FAQs: Add/edit frequently asked questions
- Destinations: Update distance/travel time estimates
Contributions are welcome! Please read our contributing guidelines before submitting PRs.
This project is proprietary. All rights reserved.
Disclaimer: This application is designed for legitimate cultural tourism business. All "haunted" or "mystical" experiences must be presented as guided, educational folklore tours that respect local customs, laws, and sacred sites.