All posts
New post
CancelBatch import (→ drafts)
Back
Paste an array of posts (max 200). Each item needs type (news / story / article) and title.
Optional bilingual fields: titleZh, excerpt, excerptZh, body, bodyZh, image. Imported items land as
draft by default so you can review before publishing. Example:
[{ "type":"article", "title":"...", "titleZh":"...", "body":"...", "bodyZh":"..." }]
AI generate draft
Back
Generates a bilingual (English + Simplified Chinese) draft via the server's configured LLM.
Requires GEN_API_KEY (or OPENAI_API_KEY) on the server. The draft is NOT saved — review and edit it in the editor, then Save.
Visitor analytics
Tracks visitor IP, region, time, page and referrer. Raw IP is stored server-side only (max 90 days); region is resolved on demand when you open this page (free IP lookup; shows “—” if offline).
Recent visitors
| Time | IP | Country | Page | From (referrer) | Source | Browser |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Top pages
Traffic source
Visits by day
Browser
Security & blocked IPs
Auto-blocked IPs (login brute-force escalation, attack-probe signatures) and manually banned IPs are listed here. Blocked visitors get a 403 and cannot reach the site or the admin login. Auto-blocks expire; manual blocks stay until you remove them. Your own local/private IP is never auto-blocked.
Add a block
Blocked IPs
| IP | Reason | Source | Added | Expires | |
|---|---|---|---|---|---|
| Loading… | |||||
Recent security events
| Time | IP | Action | Reason | Source |
|---|---|---|---|---|
| No events yet. | ||||
Two-factor authentication (2FA)
Adds a time-based code from an authenticator app (Google Authenticator, Authy, 1Password…) on top of your password. Optional — turn it on when you are ready. Once enabled you'll need the code at every login; keep the one-time backup codes safe in case you lose the device.
Checking…
2FA is enabled.
Add this account to your authenticator app by typing the secret below (or pasting the setup link), then enter the 6-digit code to confirm.
Setup link:
Save these one-time backup codes now — each works a single time if you lose the device:
Recent sign-ins
The last times this account was signed into successfully, newest first. Failed attempts are not listed — those are counted and locked out instead. If a time or a network looks unfamiliar, change the password.
Loading…
Feedback inbox
Messages from the public feedback popup (error reports, registration requests, questions, stories). Visitors leave a name + email so you can reply. Spam and link-farms are filtered at submit time (max 3/day per visitor). Each message shows the visitor's email, region and IP for follow-up and abuse checks; raw IP is never shown publicly. Reply, mark read, or delete as you handle them. Error reports carry the page that is wrong — filter to Bug reports and work down the list.