Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A reusable trip planner
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
以 Google Sheets 為資料來源的歐洲蜜月旅行日誌。React 前端與 API 由同一個 Cloudflare Worker 提供,支援桌面與手機瀏覽。 • Website: honeymoon-journal.ab889721.workers.dev • Runtime: Cloudflare Workers + Static Assets • Database: Google Sheets API • Authentication: Google Identity Services + signed session cookie • AI: Google Gemini API • Deployment: Cloudflare Workers Builds from main • public:read: anonymous itinerary and public planning content • private:read: tickets and private links • private:write: itinerary, todo, expense and chat mutations • private:ai: Gemini generation and assistant chatREADME 전문 보기 ↗
以 Google Sheets 為資料來源的歐洲蜜月旅行日誌。React 前端與 API 由同一個 Cloudflare Worker 提供,支援桌面與手機瀏覽。
mainReact SPA
-> /api/auth/* Google login and session
-> /api/rpc/* trip operations
-> Cloudflare Worker
-> Google Sheets API
-> Gemini API
The Worker enforces the access boundary:
public:read: anonymous itinerary and public planning contentprivate:read: tickets and private linksprivate:write: itinerary, todo, expense and chat mutationsprivate:ai: Gemini generation and assistant chat待辦的「連結」欄可放訂票、訂單管理與票券網址,僅授權帳號登入後才會取得並顯示。
網址只接受 http 或 https;訪客只能讀取不含連結的待辦文字。
.codex/skills/ project-local honeymoon planning workflows
src/ React application
components/ pages, modals and controls
config/ trip-specific frontend settings
utils/apiClient.ts HTTP and authentication transport
utils/tripClient.ts trip API facade
shared/ frontend/Worker API contracts
worker/ auth, policy, Sheets and Gemini backend
worker/__tests__/ Worker behavior and authorization tests
docs/deployment.md production deployment runbook
wrangler.jsonc Worker and Static Assets configuration
Requirements: Node.js 20.19+ (20.x) or 22.12+, and npm.
npm install
npm run dev
npm run dev opens http://localhost:5173 with Vite HMR and proxies /api/*
to the production Cloudflare Worker. Google Sheets, authentication and Gemini
therefore use the production services without local secrets or mock data.
When the current branch adds or changes Worker API operations that are not
deployed yet, use npm run dev:cloudflare instead. It builds the current branch
and starts a temporary remote Cloudflare development session on the same port,
using the live Worker bindings without deploying the branch to production.
Add http://localhost:5173 to the Google OAuth Web client's Authorized
JavaScript origins. Local edits, AI requests and other mutations affect the
production Sheet immediately.
npm run type-check
npm test -- --run
npm run build
npx wrangler deploy --dry-run
npm run build:cloudflare runs the high-value test suite before the production build. Cloudflare Builds uses this command as the promotion gate.
Cloudflare Workers Builds watches main:
npm run build:cloudflarenpx wrangler deploy/Every push to main deploys a new version to the same production URL.
For a manual deployment:
npm run deploy
Runtime credentials are encrypted Worker secrets. See docs/deployment.md for setup, verification and rollback.
| Tab | Purpose | Main fields |
|---|---|---|
| 行程 | Web 的每日行程主資料,包含時間線與行前提醒 | Day, Date, Weekday, City, Content, Transport, Ticket, Reference Link, Hotel |
| 住宿 | 集中管理飯店訂單、設施、取消與付款資訊 | Dates, City, Hotel, Platform, Amenities, Nights, Payment/Cancel, Amount/Tax/Card, Notes |
| 費用 | 旅費預算、分類明細、已付狀態與匯率,供花費總覽讀取 | Category summaries, accommodation/transport/dining/ticket details, Paid, Exchange rates |
| 票券 | 索引已購票券與 Drive 文件,供授權帳號在票券庫查看 | Day, Date, City, Item, Type, Provider, File URL, Notes |
| 待辦 | 管理行前預約與準備任務,Web 可篩選並同步完成狀態 | Section, Item, Detail, Done, Links |
| 攜帶 | 分類管理行李數量、必要性與準備狀態 | Category, Item, Quantity, Notes, Necessity, Done |
| 記帳 | 儲存旅途中的實際與額外支出,Web 可新增、修改與刪除 | Timestamp, Item, Amount, Currency, Category |
| 參考資料 | 依國家整理交通、景點、票券與攻略連結,供實用連結頁使用 | Country sections, Item, Link, Notes |
| 旅程介紹 | 儲存序章、各城市故事與結語,供旅程頁顯示 | Type (intro, city:*, closing), Content, UpdatedAt |
| 美食推薦 | 每天一筆整合推薦,以 Day 更新;內容包含各餐選擇、價位與地圖連結 | Day, City, Content, Preferences, UpdatedAt |
| 導航 | 提供每日景點的 Google Maps 搜尋目標 | Day, Name, Google Maps Query |
| 景點規劃 | 由 Sheet 維護每日故事、動線與提醒;網站只提供閱讀 | Day, Title, Content |
| AI秘書對話 | 保留授權使用者與旅遊助理的對話紀錄 | Timestamp, Question, Answer |
The live Sheet is the source of truth. 費用 is the read-only plan and payment view; 記帳 is the editable spending ledger. The Worker normalizes currencies and per-person or two-person totals for the Web. 住宿 and 攜帶 remain Sheet-only management tabs.
Ticket and private booking URLs require an authorized website session. Google Drive permissions independently protect the underlying files.
See SETUP.md for the Cloudflare, Google Cloud, Sheet and OAuth setup.
美食推薦 uses exactly five columns: Day, City, Content, Preferences, UpdatedAt.
Each non-empty Day must be unique. Preferences is optional dining guidance from the last update;
UpdatedAt is an ISO timestamp. Empty days display the generation entry point for editors.
The API returns a map keyed by day with { city, content, preferences, updatedAt } values.
generateFoodRecommendations accepts [day, city, itineraryContent, preferences?] and replaces that day's recommendation.
Map URLs render as buttons; other source URLs remain separately labelled.