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.
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.
.env.example to .env.ADMIN_PASSWORD of at least 16 characters. Keep it private. There is no production default password.PUBLIC_URL to your actual website origin. Local example: http://127.0.0.1:8770. Live example: https://desk.your-domain.com.npm start, open /admin and sign in. Production uses data/desk.sqlite, not the demo database.中文:先改商家名稱、聯絡信箱和價目,再公開表單。USD / EUR / GBP 是報價顯示幣別,不會自動換匯。舊報價會保留建立當時的價格與商家資料;需要重做時,建立新草稿並重新確認。
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.
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 也能用,待跟進會顯示在後台。設定後只通知商家,不會替你聯絡客戶。伺服器關閉時不能即時通知,重新啟動後才會處理待辦;電腦本機示範不發外部訊息。
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.
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.
| File | Purpose |
|---|---|
| public/style.css | Colours, typography, responsive layout |
| public/index.html / client.js | Public enquiry form |
| public/admin.html / admin.js | Merchant workspace and printable quotes |
| lib/desk.mjs | SQLite records, server-side prices, quote snapshots |
| server.mjs | Authentication, API, notification worker |
| tests/desk.test.mjs | Run 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.