Initial project import
This commit is contained in:
62
README.md
Normal file
62
README.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# WanderQ Travel
|
||||
|
||||
万趣旅行贵州网站是一个代码维护内容的双语 React 前台。内容修改通过 TypeScript 文件完成,构建后直接发布,不提供管理后台或 CMS 写入接口。
|
||||
|
||||
## Stack
|
||||
|
||||
- React + TypeScript + Vite frontend
|
||||
- Code-defined bilingual content in `src/siteContent.ts`, `src/guizhouContent.ts`, and `src/guizhouEnContent.ts`
|
||||
- CMS-shaped static view model assembled by `src/cms.ts`
|
||||
- Minimal Node HTTP API for inquiry notification delivery
|
||||
|
||||
## Scripts
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
npm run api
|
||||
npm run dev:full
|
||||
npm run lint
|
||||
npm run build
|
||||
npm run preview
|
||||
```
|
||||
|
||||
`npm run dev:full` starts the Vite frontend and the inquiry API together. The frontend proxies `/api` to `http://127.0.0.1:5174` during local development.
|
||||
|
||||
## Inquiry notification API
|
||||
|
||||
The public form posts to `POST /api/inquiries`. The API does not store inquiries. It validates the request and forwards an `inquiry.submitted` event to the configured notification webhook. If no webhook is configured, or the webhook rejects the event, the API returns an error so the frontend does not report a lost inquiry as successful.
|
||||
|
||||
Configure the deployment with:
|
||||
|
||||
```bash
|
||||
INQUIRY_NOTIFICATION_URL="https://notification.example.com/inquiries"
|
||||
INQUIRY_NOTIFICATION_AUTH_HEADER="Bearer optional-token"
|
||||
INQUIRY_ALLOWED_ORIGIN="https://www.wanderq.com"
|
||||
INQUIRY_API_PORT=5174
|
||||
```
|
||||
|
||||
The webhook receives JSON in this shape:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "inquiry.submitted",
|
||||
"occurredAt": "2026-07-23T00:00:00.000Z",
|
||||
"data": {
|
||||
"id": "inq-example",
|
||||
"receivedAt": "2026-07-23T00:00:00.000Z",
|
||||
"name": "Guest name",
|
||||
"contact": "guest@example.com",
|
||||
"interest": "Classic Guizhou landscapes · USD 3,000-5,000",
|
||||
"travelMonth": "October 2026",
|
||||
"guests": "2",
|
||||
"message": "Additional notes",
|
||||
"locale": "en"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Use `GET /api/health` to verify the API and whether a notification destination is configured.
|
||||
|
||||
## Maintaining content
|
||||
|
||||
Production raster images are hosted in OSS and referenced from `src/guizhouContent.ts`; local `public/` assets are limited to SVG/HTML files and the OSS manifest. Edit the tracked TypeScript content, then run `npm run lint` and `npm run build` before deploying.
|
||||
Reference in New Issue
Block a user