WGT STUDIO / OWNER GUIDE / v1.0

From enquiry
to a considered proposal.

WGT Client Desk is a self-hosted enquiry and quotation workspace for a single independent studio. Includes complete source, an enquiry form, a password-protected dashboard, quote approval and printable PDF output, follow-up scheduling and optional Telegram notifications.

這是可自行部署的源碼工具。不是 AI 文案生成器,也不是付款平台。詢價存到 SQLite,報價需商家確認;不會自動向客人發信或收款。主機、網域、通知機器人設定與客製服務不包含在源碼內。示例服務價格不是此軟體售價;此軟體源碼售價為 US$199,一次性購買,一間工作室商用部署授權。

1 / Try it locally · 本機試用

Install Node.js 24 LTS from nodejs.org. Open a terminal in this folder. No npm packages are required.

npm run demo

Open http://127.0.0.1:8770 for the enquiry form and /admin for the dashboard. Demo password: wgt-demo-local-only. The demo binds only to your computer and uses a separate data/demo.sqlite. Sample people and companies are fictional. External notifications are disabled. Do not publish this demo server.

2 / Configure your studio · 正式設定

  1. Copy .env.example to .env.
  2. Set a unique ADMIN_PASSWORD of at least 16 characters. Keep it private. There is no production default password.
  3. Set PUBLIC_URL to your actual website origin. Local example: http://127.0.0.1:8770. Live example: https://desk.your-domain.com.
  4. Run npm start, open /admin and sign in. Production uses data/desk.sqlite, not the demo database.
  5. Open Studio settings. Enter your brand, real contact email, services, prices and quote currency. This email is used for deletion requests and quote contact details. Replace all sample prices and terms before accepting real enquiries.

中文:先改商家名稱、聯絡信箱和價目,再公開表單。USD / EUR / GBP 是報價顯示幣別,不會自動換匯。舊報價會保留建立當時的價格與商家資料;需要重做時,建立新草稿並重新確認。

3 / A complete workflow · 日常操作

  1. Share the public enquiry link. Your client chooses a service, enters a brief and consents to being contacted.
  2. Open the dashboard. Review the enquiry; add internal notes and set a follow-up time. All displayed times use your browser’s local timezone; storage uses UTC.
  3. Select services and quantities. Apply an optional fixed discount. Add specific scope, deliverables, revisions, exclusions, payment terms and quote validity.
  4. Create draft → Preview → Approve for sharing. Printing a draft is allowed but visibly labelled Draft. Replacing a quote resets approval.
  5. Copy the approved quote, print/save PDF using your browser, or open an email draft. Review and send it manually. No email is sent by this app. Long proposals may exceed a mail application's URL limit; use PDF or copy instead.
  6. After sending, mark the enquiry Quoted. Mark Won or Closed when appropriate. These are merchant-maintained statuses, not proof of payment.

Reporting shows counts, not invented revenue. Deleting an enquiry permanently removes its quote and notification tasks. Export/print any quote you need to keep first. This version keeps the latest quote only, not revision history.

4 / Telegram reminders · 選用通知

Create your own bot through Telegram's official @BotFather. Start a conversation with it from your merchant account. Follow Telegram's official Bot API guide to identify your chat ID. Add the token and your own merchant chat ID to .env:

TELEGRAM_BOT_TOKEN=your_private_bot_token
TELEGRAM_CHAT_ID=your_merchant_chat_id

Restart the server. The worker checks every 30 seconds. New enquiries and due follow-ups go only to the configured merchant chat. The notification contains name, service and reference, not the client's complete brief or email. Pending tasks created before setup will also be delivered after configuration; review them before enabling. Delivery retries up to 5 times with backoff; failed tasks appear in Studio settings. If a delivery times out after Telegram accepted it, a retry can create a duplicate notification. There is no guarantee of exactly-once delivery.

中文:不設定 Telegram 也能用,待跟進會顯示在後台。設定後只通知商家,不會替你聯絡客戶。伺服器關閉時不能即時通知,重新啟動後才會處理待辦;電腦本機示範不發外部訊息。

5 / Deploy · 部署要求

This app needs a continuously running Node.js 24 server and persistent disk. A static Netlify drag-and-drop upload is not enough. Use a Node-capable server with an HTTPS reverse proxy, set HOST=0.0.0.0 only when required by your host, and set PUBLIC_URL to its HTTPS origin. Forward requests to PORT, enable automatic restart, and mount DATA_DIR on persistent storage. HTTPS enables Secure session cookies. Run one application process per database; this version is not designed for multiple replicas or many merchant tenants.

Use a host you control. Configure HTTPS, backups and spam protection at the edge before sharing with real customers. The in-app limit uses the connecting IP, so clients behind one reverse proxy share that limit; tune or replace it with a trusted-proxy aware limiter for your deployment. Never blindly trust X-Forwarded-For. No claim of a security audit is made.

Embed/link from your existing website with a normal link to the public enquiry form. Example: <a href="https://desk.your-domain.com/">Start a project</a>. The app blocks iframe embedding; link to it instead.

6 / Backups, privacy & maintenance

Stop the app, copy the entire DATA_DIR to a secure backup, then restart it. Restore with the app stopped. SQLite may have accompanying WAL/SHM files, so do not copy only a live database file. Back up .env separately as a secret. Sessions expire after eight hours. To revoke all sessions, stop the app and clear the sessions table using an SQLite tool, then restart. Changing the password alone does not revoke existing sessions.

The studio controls retention. Review and delete enquiries no longer needed. Database backups can still contain deleted data until rotated. The built-in consent text covers responding to enquiries; add your own privacy policy and any jurisdiction-specific terms before real use. No third-party analytics, remote fonts or model APIs are included.

7 / Files & customisation

FilePurpose
public/style.cssColours, typography, responsive layout
public/index.html / client.jsPublic enquiry form
public/admin.html / admin.jsMerchant workspace and printable quotes
lib/desk.mjsSQLite records, server-side prices, quote snapshots
server.mjsAuthentication, API, notification worker
tests/desk.test.mjsRun with npm test

Need different colours, sections or integrations? Contact @QiDaxiaojie88888 for a separate quote. Custom work is not included in the source package.

Version 1.0 · US$199 · one studio commercial deployment licence. See LICENSE.txt for full terms.