RPGJS Studio
Choose a playable world, customize maps and events visually, then press Play. Start free in your browser and export your RPGJS source.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Discover games shared on r/aigamedev and follow their progress
翻译准备中
正在加载完整 README。
查看完整 README ↗Discover games, explore their history, and help the next version take shape
Playtrace collects games shared on r/aigamedev so players can discover a project, inspect its source history, and leave useful public feedback. An optional “Your ideal price” field lets visitors share a pricing suggestion. Reading and contributing require no account.
Live: playtrace.neorgon.com · API: service status
Public feedback uses a random browser edit key so visitors can update or remove their contribution. Favorites save on your device without login. The star filter in Browse shows your saved games, and signing in reconciles them with your private account list. Existing private account price responses stay private. See account activation.
The bundled snapshot is dated local exploration data; the live catalogue grows separately. No votes, demand figures, or user accounts are seeded.
The static publisher creates the directory routes and versioned assets. From this directory:
make serve
This builds _site/ from the saved catalogue before serving it. After editing source files, run make build again and reload. For a current catalogue build, run node scripts/build-site.mjs, then serve _site/ directly.
Open http://localhost:8900. js/config.js pins the production API address, whose CORS policy does not allow localhost. To explore the bundled snapshot, set apiBase to an empty string in your local checkout. Guest feedback and account features will then show as unavailable. Restore the pinned value before publishing. A configured API failure never switches silently to the bundled snapshot. For interactive local feedback, use the disposable Worker setup in the runbook.
The Worker uses Cloudflare D1 and R2. See the Worker configuration, the database migrations, and the API modules. Operator credentials belong in Worker secrets, never in js/config.js, a commit, or browser storage. The visitor's random edit key is intentionally browser-local. Local server secrets belong in an ignored worker/.dev.vars file. Authenticated account testing requires an HTTPS origin permitted by both Clerk and ALLOWED_ORIGINS.
node --test tests/*.test.mjs
node --test worker/tests/*.test.mjs
python3 worker/tests/schema.test.py
Client tests cover source validation, shared filters, progressive pagination, incomplete loads, guest posting and removal, storage failure, escaping, and stale responses. Backend tests use synthetic signed sessions, a SQLite-backed D1 adapter, and controlled archive/media responses. Use a Node runtime with node:sqlite. They cover guest ownership, moderation, rate limits, privacy separation, collections over 2,000 projects, resumable historical/recent collection, stable project identity, atomic imports, removal, and media validation. They do not manufacture activity in the live database.
| Area | Files | Responsibility |
|---|---|---|
| Browser shell | index.html, browse.html, profile.html, css/campaign.css | Focused landing page, catalogue, favorites and project dialogs |
| Research | research.html, js/question-flow.js, worker/src/research.mjs | Reusable guest playtests, versioned forms and private metrics |
| Editorial queue | js/admin-campaign.js, worker/src/jobs.mjs, worker/src/insights.mjs | URL/store checks, source references and cited review drafts |
| Client behavior | js/state.js, js/render.js, js/events.js | Validated collection state, filtering, navigation, rendering |
| Feedback client | js/feedback.js, js/api.js | Public notes, optional ideal prices, browser edit keys and guest controls |
| Account client | js/accounts.js, js/challenge.js | Optional authenticated follows and legacy private data controls |
| Collection | worker/src/archive.mjs, worker/src/ingestion.mjs | Archive normalization, conservative categorization, cursors and scheduling |
| Trust and storage | worker/src/feedback.mjs, worker/src/auth.mjs, worker/src/limits.mjs, worker/src/store.mjs, worker/src/media.mjs | Public contributions, identity, quotas, D1 records and consented R2 previews |
| Initial data | data/catalog.json | Dated, reviewed source snapshot for local exploration and initial import |
The interface uses pale slate, navy type, and warm amber actions, with system dark preference support. Archivo headings and Source Sans 3 body text are self-hosted with their font licenses. css/report.css owns the visual layer; vendored Neorgon kits provide shared header, footer, auth, persistence, and navigation behavior.
Arctic Shift is a third-party archive and may be delayed or incomplete. Original Reddit posts remain the primary source. A listed author, game stage, or AI-use claim is not independently verified. Clear showcases can publish automatically; ambiguous candidates require operator review. Earlier posts can extend a matching timeline while its original source anchor and project ID remain unchanged. “Historical” means checking available archived posts, not claiming every project or deleted post can be recovered. Reddit discussion remains linked at its source; it is not copied into the visitor feedback feed.
Guest writes require a 256-bit browser edit key and a server HMAC secret, with independent browser/network quotas. The server stores only an HMAC of the edit key. Public responses contain the contributor's chosen name, note, and optional price; they never include keys, network identifiers, or private account prices. The separate legacy account API uses server-verified sessions and its own configured protection mode.
Catalogue pages contain up to 200 projects. There is no 2,000-project public collection cap; individual imports remain bounded to 2,000 records and each game's timeline to 1,000 posts. Excess or ambiguous timeline candidates remain pending for review. Public preview storage is not an open upload endpoint. Endpoint details and rollback constraints are in the API contract.
The production Clerk domain connection and encrypted Worker secret are configured. Open the admin desk and sign in with the verified primary owner email. Real owner sign-in binds that account on its first successful request. No Clerk secret is stored in this checkout.
The live sign-in form is verified and accountsReady: true is published in js/config.js. Admin edits, account authorization and persistence are covered with signed fixture sessions; the owner's real Google account has not been used in automated checks. Guest notes and ideal prices remain independent of sign-in. The browser flag controls availability only; the Worker always verifies sessions for private endpoints.
The Pages workflow in .github/workflows/pages.yml builds _site/ from a complete live catalogue hourly, on pushes to main and on manual dispatch. It publishes permanent /games/<id>/ pages, a crawlable directory and sitemap.xml. Project metadata and JSON-LD are present without JavaScript. The artifact allowlist excludes Worker code, private files and editorial analysis documents. An incomplete fetch fails without replacing the last deployment. The Pages repository must use GitHub Actions as its build source.
For a local snapshot build: node scripts/build-site.mjs --catalog data/public-catalog.json. For current production reads: node scripts/build-site.mjs. _site/ is generated and ignored. Search Console ownership and sitemap submission require the property owner; generating a sitemap does not guarantee indexing.
Community Insights provides catalogue trends, model announcement comparisons, source inspection, CSV export and a separate Steam release timeline. Its hourly public snapshot is built from the allowlisted /insights endpoint. Admin desk → Insights adds community choices and anonymous usage counts through protected endpoints. Private questionnaires, identities and editorial jobs are never exported. See the dashboard methodology and 100-project enrichment pilot. Apply all migrations through 0014_feedback_context.sql before deploying this version. Accepted source-linked facts survive imports; explicit admin edits and approved images take precedence.
Reddit net-score snapshots refresh Sundays at 12:50 UTC for the previous 35 days: eight archive calls maximum, up to 100 IDs each, no hidden HTTP retries. Missing and older observations do not replace a good score. Initial source imports can seed a missing observation. The :50 hourly trigger dispatches this task on Sundays; five cron definitions are retained. Weekly picks use the explicit SAT weekday (Cloudflare numbers weekdays from Sunday).
Jev uses the encrypted JEV_API_KEY and https://api.typesafe.ai/v1/systemone. Feedback jobs combine public Playtrace notes with archived Reddit comments, bound the sample, preserve explicit/unknown experience and retain source citations. Private questionnaire analysis stays separate. Admin → Evidence queue shows integration/schedule status and lets editors change draft prose and labels before publishing. New written public feedback receives queue priority over store maintenance; Sunday maintenance adds up to eight recent projects. Both obey the existing daily job budget, cooldowns and a feedback backlog cap. No automatic publication occurs.
GET /feedback-patterns exposes recent public quick-answer counts and already-published citation labels, never draft classification or private research. Responses are uncached so removals apply immediately. GET /games/:id/feedback/:feedbackId resolves an individual public citation even beyond the first feedback page. Public notes have optional experience (preview, played, unspecified); older clients preserve prior values. Updating, hiding or deleting a copied note withdraws its derived review, including protection against jobs finishing after a removal.
See feedback operations and methodology for definitions and review workflow.
Local Jev post research, timing-data limitations and shorter public routes are documented in the post research guide.
Insights now groups its catalogue evidence into topic views with shared genre/platform/device/stage filters. Pie slices, legends, distribution labels and trend bars expose their underlying projects or source records. Technique and resource extraction runs on retained public source text; js/technique-evidence.js defines the explicit vocabulary. Counts describe mentions, not verified adoption. Source excerpts, original dates, missing classifications and model-comparison limitations remain visible.
Store summaries deduplicate by Steam app or itch.io listing. The Steam calendar separates exact planned dates from month/quarter/year-only and unknown announcements; past dates on still-upcoming listings need rechecking, not an inferred release. Itch.io minimum prices are collected from unambiguous JSON-LD offers during normal bounded store maintenance. Existing observations without a price stay unknown. The calendar and past-release timeline have distinct semantics.
Home image hints are generated from the actual published picks. Desktop preloads start in the document head; mobile retains lazy loading beyond the first image. showcase-images.js coordinates decoded artwork with a bounded, reduced-motion-aware reveal. Live refreshes reconcile unchanged panels rather than replacing them. Approved media's withdrawal and no-store behavior are preserved; loading improvements do not create a second persistent copy of uploaded artwork.