Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
Jetsetters 팀의 맞춤 전문가 지원으로 고급 항공·호텔·크루즈·여행 패키지를 계획
Plan luxury flights, hotels, cruises, and vacation packages with personalized expert support from the Jetsetters travel team.
라이프스타일JavaScript · CSSGitHub @Sahi0045온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
🚀 Jetsetters (JETSET13) — Travel Booking Platform
A full-stack travel booking platform covering flights, hotels, cruises, vacation packages, visas, and rentals, plus an admin / quote / inquiry workflow. Built with a React (Vite) frontend and a Node.js / Express backend, backed by Supabase (auth + Postgres) and a range of travel/payment integrations.README 전문 보기 ↗A full-stack travel booking platform covering flights, hotels, cruises, vacation packages, visas, and rentals, plus an admin / quote / inquiry workflow. Built with a React (Vite) frontend and a Node.js / Express backend, backed by Supabase (auth + Postgres) and a range of travel/payment integrations.
Jetsetters lets users search and book travel across multiple surfaces and gives staff an admin panel to manage quotes, inquiries, and bookings. The codebase is ES modules throughout ("type": "module") and ships as a single Express app that can run as a monolith server, a dev backend, or a Vercel serverless function.
A companion React Native (Expo) mobile app lives in a sibling repository and consumes the same backend API.
| Layer | Technology |
|---|---|
| Frontend | React 18, React Router 7, Vite 7, Tailwind CSS 3, Headless UI, Lucide / FontAwesome / React Icons |
| Backend | Node.js, Express 4 |
| Auth & DB | Supabase (Postgres + Auth); Firebase (legacy); local SQLite for some scripts |
| Inventory | Amadeus (flights / hotels) |
| Payments | ARC Pay |
| AI | Google Gemini (@google/genai), LangChain |
| Messaging | Resend (email), Twilio (SMS) |
| Caching | Redis via ioredis |
| PDF / Files | jsPDF, html2canvas, Puppeteer, Multer, XLSX, PapaParse |
| Testing | Vitest (frontend / backend / integration), Testing Library, Supertest |
| Deploy | Vercel (primary), Render, Docker |
JETSET13/
├── server.js # Production monolith server (npm start) — serves dist/ + /api/*
├── frontend/
│ ├── main.jsx # App entry
│ └── src/
│ ├── app.jsx # Root app (BrowserRouter, Supabase/Location providers)
│ ├── Pages/
│ │ ├── Common/ # Booking flows: cruise, flights, hotels, packages, visa, rentals, login
│ │ ├── Admin/ # Admin panel
│ │ ├── Profile/ # User profile
│ │ └── Request/ # Quote / inquiry requests
│ ├── components/ # Reusable UI
│ ├── contexts/ # React contexts
│ ├── hooks/ # Custom hooks
│ ├── Services/ # Frontend API/service clients
│ └── utils/ # Helpers
├── backend/
│ ├── server.js # Dev backend (nodemon, extra middleware + jobs)
│ ├── api/index.js # Vercel serverless handler (re-exported by api/index.js)
│ ├── routes/ # Express routers (flights, hotels, cruise, quote, inquiry, …)
│ ├── controllers/ # Request handlers
│ ├── services/ # Integrations (amadeus, gemini, email, cache, sms, cdn, …)
│ ├── models/ # Supabase-backed data models
│ ├── middleware/ # auth (Supabase JWT), audit logging
│ ├── jobs/ # Background jobs (workflow engine, data retention, quote expiry)
│ └── config/ # supabase.js, chatbot.js
├── api/index.js # Vercel entry → re-exports backend/api/index.js
├── scripts/ # Dev/build/start helpers, db SQL, maintenance
├── supabase/migrations/ # SQL migrations
├── tests/ # Vitest suites
├── vite.config.js # Vite config + manualChunks + @ aliases
├── vitest.config.js # Three test projects (frontend/backend/integration)
├── vercel.json # Vercel routing (/api/* → single function)
├── render.yaml # Render deploy config
└── dockerfile / docker-compose.yml
This is the most important thing to know before editing routes:
server.js (root) — production monolith (npm start). Mounts /api/*, serves the built SPA from dist/, and has its own direct /api/send-email endpoint.backend/server.js — the dev backend (launched by scripts/start-dev.js via nodemon). Adds audit logging, redaction, and background jobs.backend/api/index.js — the Vercel serverless handler. Mounts every route twice (/api/* and /*) because Vercel rewrites /api/(.*) to this one function (12-function limit).When adding a route, register it in all three places. The route file itself lives in
backend/routes/.
# 1. Clone
git clone https://github.com/Sahi0045/JETSET13.git
cd JETSET13
# 2. Install dependencies
npm install
# 3. Configure environment
cp .env.example .env
# then fill in the values (see Environment Variables below)
# 4. Start the dev environment
npm run dev
npm run dev spawns the backend on :5004 and the Vite dev server on :5173; Vite proxies /api requests to the backend.
npm run build # vite build → dist/, then copy-public-assets
npm start # NODE_ENV=production node server.js
# Dev
npm run dev # backend (:5004) + Vite (:5173) with /api proxy
npm run server # backend only (nodemon)
npm run client # Vite dev server only
# Build / prod
npm run build # production build into dist/
npm start # run the production monolith
# Tests (Vitest — three projects)
npm test # all projects
npm run test:frontend # jsdom (React)
npm run test:backend # node (controllers/services)
npm run test:integration # serial, supertest-driven API tests
npm run test:watch # watch mode
npm run test:coverage # coverage report
npx vitest run tests/path/to/file.test.js # single file
npx vitest run -t "behavior name" # filter by test name
# Standalone integration scripts (hit real APIs, not Vitest)
npm run test:hotel-api / test:direct-amadeus / test:supabase / test:chatbot ...
There is no lint or typecheck script — this is a JS project with
jsconfig.jsononly.
Copy .env.example to .env and fill in your credentials. Key groups:
# Supabase (primary auth + database)
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
# Amadeus (flight/hotel inventory)
VITE_AMADEUS_CLIENT_ID=your_amadeus_client_id
VITE_AMADEUS_CLIENT_SECRET=your_amadeus_client_secret
# ARC Pay (payments)
ARC_PAY_MERCHANT_ID=your_merchant_id
ARC_PAY_API_PASSWORD=your_api_password
ARC_PAY_API_VERSION=100
ARC_PAY_BASE_URL=https://api.arcpay.travel/api/rest/version/100
# Email (Resend)
RESEND_API_KEY=your_resend_api_key
[email protected]
# App
VITE_API_URL=http://localhost:5004/api
FRONTEND_URL=http://localhost:5173
# Firebase (legacy auth flows — optional)
VITE_FIREBASE_API_KEY=...
VITE_FIREBASE_AUTH_DOMAIN=...
VITE_FIREBASE_PROJECT_ID=...
Twilio (SMS) and Gemini (chatbot) keys are also required if you use those features. Many services fail silently if misconfigured —
server.jslogs the presence of Amadeus keys on startup.
Supabase Postgres is the system of record. SQL schemas live in scripts/db/*.sql and supabase/migrations/; a local database/database.sqlite is used by some scripts.
Migrations are not auto-applied — apply them manually via Supabase or by running scripts in
scripts/maintenance/. Never reset or drop the database; use migrations for schema changes.
vercel.json. Builds with npm run build, serves dist/, and routes /api/* to the single serverless function api/index.js. Long-running jobs / background workers belong in the backend/server.js path, not the serverless handler.render.yaml and render-setup.js (npm run render-build).dockerfile, docker-compose.yml, and Makefile run the full server.js monolith.A separate React Native (Expo SDK 54, RN 0.81, React 19) client lives in a sibling directory (its own git repo) and consumes the same backend API. Backend changes that affect auth response shape, payment flows, or cruise/flight/hotel/request payloads should be sanity-checked against that repo's src/services/* layer.
git checkout -b feature/your-feature)is/has/should/can, no hardcoded secrets, parameterized DB queries)npm testSee CLAUDE.md and .cursor/rules/software-engineering-standards.mdc for the full architecture notes and engineering standards.
ISC. See package.json for details.
Built by the Jetsetters team.