Travel with confidence, not confusion.
A comprehensive travel companion web application built with React, TypeScript, and Vite. Tenjiku empowers travelers to plan trips across India, manage group expenses, and access emergency supportβall in one beautiful, intuitive platform.
Tenjiku is an all-in-one travel management platform designed to simplify every aspect of your journey. Whether you're planning a spiritual pilgrimage, heritage tour, adventure trip, organizing expenses for group travel, or facing an emergency situation, Tenjiku has you covered.
- Smart Trip Planning: Discover curated destinations, intelligent budget estimation, and detailed itineraries
- Budget Intelligence: Category-based destination recommendations with transparent cost breakdowns
- Expense Splitting: Flexible expense management with multiple split options for group travel
- Emergency SOS: One-tap access to emergency services with location sharing
- Trip Management: Archive previous trips and manage complete travel history
- Features
- Tech Stack
- Project Structure
- Installation
- Running the Application
- Features in Detail
- Architecture
- Usage Guide
- Development
- Welcoming splash screen with animated flight path across India map
- Login/authentication flow with smooth transitions
- Quick navigation to Trip Planning, Split Money, and SOS Emergency
- Beautiful glassmorphism UI with gradient backgrounds and dynamic animations
- Tagline: "Explore the Sacred" & "Travel with confidence not confusion"
- Destination Categories:
- Spiritual India (temples, pilgrimage sites like Shravanabelagola, Udupi)
- Heritage India (historical landmarks like Bangalore Palace, Mysuru)
- Adventure India (outdoor activities and nature escapes)
- And more curated categories...
- Personalized Planning:
- Solo vs. Group trip selection
- Group size adjustment
- Starting city input
- Budget range specification
- Intelligent Destination Matching:
- Recommends destinations within your budget
- Calculates travel costs based on distance
- Includes accommodation and food estimates
- Provides daily cost per person
- Groups destinations by budget level (low/mid/high)
- Detailed Trip Results:
- Specific destination information with photos
- Travel duration and distance
- Rating and reviews
- Cost breakdown (travel, stay, food, activities)
- Multi-day itinerary planning
A complete expense management system for group travels:
Core Features:
- Trip Management: Create and manage multiple trips with custom names
- Participant Management: Add/remove participants and track individual balances
- Expense Tracking: Record who paid for what with flexible splitting:
- Equal split among all participants
- Percentage-based custom splits
- Individual amount-based splits
- Real-time Balance Tracking:
- Shows who owes money (negative balance)
- Shows who gets money back (positive balance)
- Updates instantly as expenses are added
- Payment Recording: Log payments between participants with dates and descriptions
- Settlement Tracking: Mark payments as settled and maintain settlement history
- Trip History: Archive completed trips and access full historical data with restore option
Dashboard Views:
- Split Home: Overview of current trip with participants, total expenses, and balance summary
- Participants: Manage participants, view their current balance and status
- Expenses: Add expenses with payer and split details, view complete expense list
- Payments: Record settlements between participants, track payment history
- Settlements: View all completed settlements with dates and amounts
Quick access to critical emergency resources:
Emergency Categories:
- Medical (Red) - Ambulance: 102
- Disaster (Amber) - Disaster Management: 108
- Accident (Blue) - Police: 100
- Security (Red) - Tourist Police: 1363
- General Help (Purple) - General assistance
Features:
- Color-coded emergency categories for quick identification
- One-tap calling directly to emergency services
- Location sharing capability for emergency responders
- Quick access to all major Indian emergency hotlines
- Dark-themed UI optimized for high-stress situations
- Accessible from any screen via QuickSOS button
- Local storage integration for all user data
- Automatic trip archival
- Complete transaction history
- Session persistence for seamless experience
Tenjiku (倩竺 - "Heaven's Land") is not just a travel app. It's your intelligent travel companion that understands the complexities of group travel in India:
- Deep India Knowledge: Curated destinations across spiritual, heritage, and adventure categories
- Confidence in Planning: Transparent, detailed budget breakdowns remove travel uncertainty
- Seamless Group Management: Split expenses without the arguments or confusion
- Emergency Ready: Access emergency services instantly when you need them most
- Completely Local: Works entirely on your deviceβno internet dependency for core features
Tagline: "Travel with confidence, not confusion"
Frontend Framework:
- React 19.2.0
- TypeScript 5.9
- React Router DOM 7.11 (Routing)
Styling & Animation:
- Tailwind CSS 4.1 (with Vite integration)
- Framer Motion 12.23 (Advanced animations)
- Custom CSS with responsive design
3D & Graphics:
- Three.js 0.182
- React Three Fiber 9.4
UI Components:
- React Icons 5.5 (Icon library)
- Custom component library (Accordion, Alert, Dialog, etc.)
Development Tools:
- Vite 7.2 (Build tool)
- ESLint 9.39 (Code quality)
- TypeScript ESLint (Type checking)
Build & Runtime:
- Node.js
- npm/yarn package management
Tenjiku/
βββ src/
β βββ components/ # Reusable UI components
β β βββ Navbar.tsx # Navigation bar
β β βββ Footer.tsx # Footer component
β β βββ Layout.tsx # Layout wrapper
β β βββ Modal.tsx # Modal dialog component
β β βββ Login.tsx # Login interface
β β βββ LoginPage.tsx # Full login page
β β βββ IntroSplash.tsx # Intro splash screen
β β βββ QuickSOS.tsx # Quick SOS button
β β βββ FloatingSOS.tsx # Floating SOS widget
β β βββ Loader.tsx # Loading spinner
β β βββ IndiaMap.tsx # Interactive map
β β βββ fonts.css # Font definitions
β β βββ Cursor/ # Custom cursor components
β β
β βββ features/ # Feature modules
β β βββ planning/ # Trip planning feature
β β β βββ components/
β β β β βββ DaySelector.tsx # Select trip duration
β β β β βββ MapView.tsx # Map visualization
β β β β βββ PeopleCounter.tsx # Group size selector
β β β β βββ StyleSelector.tsx # Category selector
β β β βββ hooks/
β β β β βββ useBudgetCalc.ts # Budget calculation hook
β β β βββ lib/
β β β β βββ budgetLogic.ts # Budget logic & destination data
β β β βββ pages/
β β β βββ PlanningHome.tsx # Planning dashboard
β β β βββ BudgetInput.tsx # Budget input page
β β β βββ PlanResult.tsx # Results page
β β β βββ TripResultPage.tsx # Trip details
β β β
β β βββ sos/ # Emergency SOS feature
β β β βββ components/
β β β β βββ LocationShare.tsx # Location sharing
β β β βββ lib/
β β β β βββ sosHelpers.ts # SOS utility functions
β β β βββ pages/
β β β βββ SOS.tsx # SOS main page
β β β
β β βββ split/ # Expense splitting feature
β β βββ SplitContext.tsx # Context & state management
β β βββ components/
β β β βββ AddExpense.tsx # Add expense form
β β β βββ BalanceChart.tsx # Balance visualization
β β β βββ ExpenseList.tsx # Expenses list
β β β βββ ParticipantForm.tsx # Participant management
β β β βββ ui/ # UI components (shadcn-style)
β β β βββ accordion.tsx
β β β βββ alert.tsx
β β β βββ button.tsx
β β β βββ dialog.tsx
β β β βββ form.tsx
β β β βββ ... (30+ UI components)
β β βββ hooks/
β β β βββ useExpenses.ts # Expense management hook
β β βββ lib/
β β β βββ balanceCalc.ts # Balance calculations
β β β βββ splitLogic.ts # Split logic
β β βββ pages/
β β βββ SplitHome.tsx # Dashboard
β β βββ SplitLanding.tsx # Landing page
β β βββ Participants.tsx # Participant management
β β βββ Expenses.tsx # Expense management
β β βββ Payments.tsx # Payment tracking
β β βββ Settlements.tsx # Settlement tracking
β β
β βββ pages/ # Main application pages
β β βββ Home.tsx # Home dashboard
β β βββ History.tsx # Trip history
β β βββ NotFound.tsx # 404 page
β β
β βββ assets/ # Static assets
β βββ App.tsx # Root component
β βββ main.tsx # Application entry point
β βββ router.tsx # Route definitions
β βββ App.css # App styles
β βββ index.css # Global styles
β
βββ public/ # Public assets
β βββ exe/ # Destination images
β βββ bg.jpg # Background image
β
βββ Configuration Files
β βββ package.json # Dependencies & scripts
β βββ tsconfig.json # TypeScript configuration
β βββ tsconfig.app.json # App-specific TypeScript config
β βββ tsconfig.node.json # Node-specific TypeScript config
β βββ vite.config.ts # Vite build configuration
β βββ eslint.config.js # ESLint rules
β βββ README.md # This file
- Node.js (v16 or higher)
- npm or yarn package manager
- Clone the repository
git clone <repository-url>
cd Tenjiku- Install dependencies
npm install- Verify installation
npm run lintnpm run devThe application will start at http://localhost:5173 (default Vite port).
npm run buildThis creates an optimized production build in the dist/ directory.
npm run previewPreviews the production build locally before deployment.
npm run lintRuns ESLint to check code quality.
The trip planning feature uses intelligent algorithms to recommend destinations across India based on user input:
Budget Calculation Algorithm:
- Base daily cost per person per destination (varies by location)
- Travel cost = Distance Γ βΉ5/km (approximate travel rate)
- Total trip cost = (Daily cost per person Γ Days Γ Group size) + Travel cost
- Includes pre-calculated accommodation and meal estimates
- Groups destinations by budget level: Budget (βΉ1-2k), Mid-range (βΉ2-4k), Premium (βΉ4k+)
Destination Database: Includes 50+ curated destinations across India:
- Name & Location: GPS coordinates for accurate travel calculations
- Daily Cost Per Person: Transparent pricing per person per day
- Budget Level: Low/Mid/High classification for easy filtering
- Images & Descriptions: Beautiful photos and detailed descriptions
- Ratings: User ratings (4-5 star scale)
- Travel Duration: Estimated travel time from starting city
- Detailed Cost Breakdown: Itemized costs (travel, stay, food, activities)
Example Destinations:
- Spiritual: ISKCON Temple, Shravanabelagola, Melukkote, Dharmasthala
- Heritage: Bangalore Palace, Tipu Sultan's Palace, Mysuri, Srirangapatna
- Adventure: Various outdoor and nature-based experiences
Personalization:
- Filters by budget constraints
- Group size adjustments (affects total but not daily rates)
- Calculates from user's starting city
- Recommends based on trip type (solo vs. group)
Architecture: Uses React Context API for centralized state management:
- Global trip context accessible from any component
- Automatic state persistence to localStorage
- Real-time updates across all pages
- Session-based data refresh
Data Structures:
interface Participant {
name: string;
amount: number; // Signed: +ve = gets back, -ve = owes
status: "owes" | "gets back" | "settled"
initial: string;
}
interface Expense {
title: string;
payer: string;
date: string;
timestamp: string;
amount: number;
splitType: 'equal' | 'percentage' | 'custom'
}
interface PaymentEntry {
from: string;
to: string;
amount: number;
date: string;
timestamp: string;
description: string;
}Balance Calculation:
- Tracks positive balance (gets money back) and negative balance (owes money)
- Updates in real-time as expenses are added
- Supports three split methods:
- Equal: Divides amount equally among all participants
- Percentage: Assigns specific percentages to each person
- Custom: Assigns exact amounts to specific people
- Provides settlement suggestions (who pays whom and how much)
Data Persistence:
- All data saved to browser's localStorage
- Keys:
split_trips,split_participants,split_expenses,split_payments - Automatic trip archival with restore functionality
- Complete transaction history with timestamps
Quick Access Design:
- Floating SOS button accessible from all pages
- One-tap launching of full SOS interface
- Color-coded for quick visual identification
Supported Services:
- Police: 100 (General emergency)
- Ambulance: 102 (Medical)
- Fire Department: 101 (Fire/rescue)
- Disaster Management: 108 (Natural disasters)
- Tourist Police: 1363 (Traveler-specific assistance)
Features:
- Direct calling integration (tel: protocol)
- Location sharing capability for emergency responders
- Dark-themed interface (easier on eyes in emergencies)
- Emergency category visualization with icons
- Accessible from any screen in the app
App
βββ Router
βββ Home
β βββ IntroSplash (conditional)
β βββ LoginPage (conditional)
β βββ Dashboard (after login)
β βββ QuickSOS
β βββ Feature Cards
β
βββ PlanningHome
β βββ TripType Selection
β βββ Destination Selection
β βββ Budget Input
β βββ TripResultPage
β
βββ SOS
β βββ Emergency Categories
β βββ Quick Call Buttons
β βββ LocationShare
β
βββ Split (with SplitProvider)
βββ SplitLanding
βββ SplitHome (Dashboard)
βββ Participants
βββ Expenses
βββ Payments
βββ Settlements
Global State (Context API):
- Trip data and participants
- Expenses and payments
- Trip history and archives
Local State (Component State):
- Form inputs
- UI visibility (modals, dropdowns)
- Animation states
Persistent State (localStorage):
- All user data persists across sessions
- Automatic data recovery on page refresh
- Open the App: Visit
http://localhost:5173 - Intro Animation: Watch the animated flight path across India map (first visit only)
- Login: Mock login with any email/password (session-based)
- Home Dashboard: See three main options - Trip Planning, Split Money, SOS Emergency
- Navigate to Trip Planning
- Choose trip type (Solo or Group)
- Select destination category (Spiritual, Heritage, Adventure, etc.)
- Enter budget and starting location
- View recommended destinations based on your criteria
- See detailed trip breakdown with costs, travel time, and descriptions
- Navigate to Split Money
- Create a new trip with a custom name
- Add participants (names)
- Record expenses with:
- Expense title/description
- Amount paid
- Who paid (payer)
- How to split (equal, percentage, or custom)
- View real-time balances (who owes/gets back)
- Record payments between participants
- Mark payments as settled
- Archive trip when complete
- Access trip history and restore previous trips
- Click SOS Emergency on home or QuickSOS button on any page
- Select emergency type (Medical, Disaster, Accident, Security, General)
- See the recommended hotline number
- Share location with emergency services if needed
- Tap to call emergency services directly
- TypeScript: Strict type checking for safety
- ESLint: Enforces code quality and consistency
- Tailwind CSS: Utility-first responsive styling
- Component Architecture: Feature-based folder structure
- Naming Conventions: Clear, descriptive names for components and functions
Edit src/features/planning/lib/budgetLogic.ts and add to the destination array:
{
name: "Destination Name",
lat: 12.9716, // Latitude
lng: 77.5946, // Longitude
dailyCostPerPerson: 3500,
image: "https://image-url.jpg",
description: "Detailed description of the destination",
rating: "4.8",
category: "Spiritual India",
budgetLevel: 'mid',
details: "Distance: Xkm | Travel: βΉY | Stay: βΉZ | Food: βΉA | Total: βΉB-C"
}- Create feature directory under
src/features/ - Organize by concern:
components/- React componentspages/- Full page componentshooks/- Custom React hookslib/- Utility functions and logic
- Use TypeScript interfaces for type safety
- Follow existing patterns for consistency
- Update router.tsx with new routes
- Styling: Use Tailwind CSS classes + inline styles for dynamic values
- Animations: Use Framer Motion for smooth transitions
- State: Use Context API for global state, useState for local state
- Responsive Design: Test on mobile (320px), tablet (768px), desktop (1024px+)
localStorage.getItem("split_trips") // Archived trips array
localStorage.getItem("split_current_name") // Current trip name
localStorage.getItem("split_participants") // Participant list
localStorage.getItem("split_expenses") // Expense records
localStorage.getItem("split_payments") // Payment historyuseBudgetCalc (Planning):
const { calculateTripCost } = useBudgetCalc();
const cost = calculateTripCost(groupSize, days, destination);useExpenses (Split):
const { calculateBalances, splitExpense } = useExpenses();
const balances = calculateBalances(expenses, participants);The application is fully responsive and optimized for:
- Mobile (320px and up)
- Tablet (768px and up)
- Desktop (1024px and up)
Uses fluid typography and flexible layouts for optimal viewing on all devices.
- All data stored locally in browser
- No server/cloud storage required
- Users have full control over their data
- Clear session management with login system
Potential features for future versions:
- Backend Integration: Real-time sync across devices
- Cloud Backup: Secure cloud storage for user data
- Collaborative Features: Real-time collaboration for group trips
- AI Recommendations: Machine learning-powered destination matching
- Advanced Analytics: Budget trends and spending patterns
- Payment Integration: UPI, card payments, digital wallets
- Social Features: Share trips, invite friends, social sharing
- Offline Support: Full functionality without internet
- Multi-language: Support for regional Indian languages
- Maps Integration: Interactive maps with directions
- Budget AI: Personalized budget suggestions based on spending
- Glassmorphism Design: Modern frosted glass effect UI
- Smooth Animations: Framer Motion for delightful interactions
- Dark Theme: Eye-friendly dark interface optimized for travel
- Responsive Layouts: Perfect on mobile, tablet, and desktop
- Accessible Colors: High contrast, colorblind-friendly palette
- Intuitive Navigation: Clear information hierarchy and CTAs
- Loading States: Beautiful loaders and transition animations
- Error Handling: User-friendly error messages and recovery
- Local-First Architecture: All data stored on user's device
- No Server Storage: No cloud dependencies or backend servers
- Complete User Control: Users own and manage their data
- Session Management: Login/logout with session persistence
- Data Transparency: Clear breakdown of all calculations
- No Tracking: Zero analytics or user tracking
Destination Matching Logic:
1. Filter destinations by category (Spiritual, Heritage, etc.)
2. Adjust daily cost for group size (group discount logic)
3. Calculate total cost = (Daily cost Γ Days Γ Group size) + Travel cost
4. Filter by user's budget range
5. Sort by best value (lowest cost in budget)
6. Return top 3-5 recommendations
Travel Cost Calculation:
Travel Distance = Google Maps distance (hardcoded for demo)
Travel Cost = Distance Γ βΉ5/km (average Indian travel rate)
Includes: Bus/train/vehicle fare
Excludes: Internal sightseeing within destination
While Tenjiku is a personal project, contributions are welcome:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please ensure:
- Code follows TypeScript strict mode
- Components are responsive
- ESLint passes without warnings
- Commit messages are descriptive
For issues, bug reports, feature requests, or feedback:
- Create an issue in the GitHub repository
- Include steps to reproduce bugs
- Suggest features with use cases
- Share your travel experiences with Tenjiku!
This project is proprietary software. All rights reserved. Β© 2026 Tenjiku.
- React Community: For the amazing ecosystem
- Framer Motion: For beautiful animations
- Tailwind CSS: For utility-first styling
- India: For the inspiring destinations
Tenjiku - Where travel meets confidence
"Explore the Sacred. Travel with confidence, not confusion."
Happy travels! π