TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A research workspace for a scholar's day: a Today plan you work through with Focus Studio, plus a library of papers, notes, ideas, and topics — synced to Supabase.
Status: Alpha — functional but evolving. Canonical live demo: research-quest-wine.vercel.app. Custom domain rq.arudchayan.com is an alias on the same Vercel project (research-quest). A second historical Vercel project exists; do not delete it without checking aliases.
feed_items and promote leads into papers, tasks, or notes. Feed source/RSS management UI and scheduled ingest are still incomplete..nvmrc)corepack enable or npm install -g pnpm@10)# Clone
git clone https://github.com/Arudchayan/ResearchQuest.git
cd ResearchQuest
# Install dependencies
cd researchquest && pnpm install
# Configure (optional for demo)
cp .env.example .env
# Edit .env with your Supabase project credentials:
# VITE_SUPABASE_URL=https://your-project.supabase.co
# VITE_SUPABASE_ANON_KEY=your-anon-key
# Start dev server
pnpm run dev
# Opens at http://localhost:5173
ResearchQuest ships with a fully local demo workspace. It seeds papers, notes, ideas, topics, tasks, focus sessions, XP, streaks, quests, and achievements into an in-memory Supabase-compatible client. Feeds are intentionally empty in demo (no orphan inbox).
Easiest path: run pnpm run dev, then click Use demo workspace on the
auth screen (or the config-error screen if Supabase env vars are missing).
Or set the flag explicitly:
cd researchquest
cp .env.example .env
# Set VITE_DEMO_MODE=1 in .env
pnpm run dev
Sign in with any email and password once demo mode is active.
Without credentials and without demo mode, the app shows a config screen with a
demo CTA and setup instructions. Set PLAYWRIGHT_TEST_NO_SUPABASE=1 to force
this mode in tests.
| Command | Description |
|---|---|
pnpm run dev | Start dev server with hot reload |
pnpm run build | TypeScript check + production build |
pnpm run build:prod | Production build (type-check + vite build) |
pnpm run lint | ESLint check |
pnpm run lint:fix | ESLint auto-fix |
pnpm run test | Vitest watch mode |
pnpm run test:run | Run all tests once |
pnpm run test:coverage | Run tests with coverage |
pnpm run test:e2e | Playwright E2E tests |
pnpm run preview | Preview production build |
pnpm run clean | Full clean of node_modules |
| Layer | Choice |
|---|---|
| Framework | React 19 + TypeScript |
| Build | Vite 6 |
| UI | Radix UI primitives + Tailwind CSS 3 |
| State | Zustand (client) + Supabase (server) |
| Auth | Supabase Auth (email/password) |
| Database | PostgreSQL via Supabase |
| Editor | CodeMirror 6 |
| Tests | Vitest + Testing Library + Playwright |
ResearchQuest/
├── researchquest/ # Frontend app
│ ├── src/
│ │ ├── components/ # React components by domain
│ │ │ ├── auth/ # Authentication screens
│ │ │ ├── dashboard/ # Dashboard view
│ │ │ ├── editor/ # Markdown editor
│ │ │ ├── entities/ # Entity CRUD (papers, ideas, notes)
│ │ │ ├── focus/ # Focus workspace
│ │ │ ├── ideas/ # Ideas board
│ │ │ ├── layout/ # App shell, sidebar, command palette
│ │ │ ├── notes/ # Notes view
│ │ │ ├── papers/ # Papers view
│ │ │ ├── settings/ # Data management
│ │ │ ├── tasks/ # Task manager
│ │ │ ├── topics/ # Topics view
│ │ │ └── ui/ # Reusable primitives
│ │ ├── hooks/ # Custom React hooks
│ │ ├── store/ # Zustand stores
│ │ ├── types/ # TypeScript types
│ │ ├── utils/ # Utilities (security, gamification, etc.)
│ │ └── test/ # Test files
│ └── e2e/ # Playwright E2E tests
└── supabase/ # Database
├── functions/ # Edge functions (Deno)
├── migrations/ # Schema migrations
└── tables/ # Table definitions
All config is through environment variables. Copy .env.example to .env.
| Variable | Required | Description |
|---|---|---|
VITE_SUPABASE_URL | Yes (for DB) | Supabase project URL |
VITE_SUPABASE_ANON_KEY | Yes (for DB) | Supabase anon/public key |
VITE_DEMO_MODE | No | Set to 1 for local seeded demo (no Supabase) |
PLAYWRIGHT_TEST_NO_SUPABASE | No | Force config-error screen for E2E |
The app is a Vite SPA. Canonical production is Vercel project
research-quest, which serves both https://research-quest-wine.vercel.app
and https://rq.arudchayan.com. Prefer the wine URL as the public live demo
in docs and GitHub homepage. A second Vercel project (research-quest-wine)
exists historically — do not delete it without confirming aliases and DNS.
| Setting | Value |
|---|---|
| Root Directory | researchquest |
| Framework preset | Vite |
| Build command | pnpm run build |
| Output directory | dist |
Client-side routes (e.g. /topics/topic-ai-agents) survive a full-page
refresh via the SPA fallback rewrite in researchquest/vercel.json
(/(.*) → /index.html).
| Variable | Description |
|---|---|
VITE_SUPABASE_URL | Supabase project URL (https://your-project-id.supabase.co) |
VITE_SUPABASE_ANON_KEY | Supabase anon/public key |
The api, fetch-paper, and deep-research functions only accept browser
origins listed in ALLOWED_ORIGINS (comma-separated). After each deploy, set
it to the deployed app origin, e.g.:
ALLOWED_ORIGINS=https://research-quest-wine.vercel.app
Without this, the functions fall back to the production app origins
(https://research-quest-wine.vercel.app, https://rq.arudchayan.com) plus
localhost. This is a server-side secret — it is not a VITE_* variable and
must not be added to Vercel.
Exact format: ALLOWED_ORIGINS="https://app.example.com,https://preview.example.com"
scheme://host with no path and no wildcard (deployed
apps use https://). In the api gateway shared helper, anything else is
malformed: it is ignored and logged loudly in the function logs, and fails
check:cors (a fully-malformed value is treated the same as unset).
fetch-paper and deep-research still use their legacy per-function parsing
with the same unset fallback plus a loud unset warning.requireAllowedOrigins() from
supabase/functions/api/_shared/cors.ts instead of getAllowedOrigins().researchquest/, with the secret exported):
ALLOWED_ORIGINS="..." pnpm run check:cors -- --strict.See SECURITY.md for private vulnerability reporting. Do not commit
.env files, credentials, or service-role keys. Vite embeds every VITE_*
value in the browser bundle, so client configuration must never contain account
passwords or privileged secrets. The create-admin-user edge function is a
410 Gone stub (verify_jwt = true); keep it deployed so a catch-all
deploy cannot revive the old Admin API. Create users from the Supabase
Dashboard or CLI.
contain: layout style paint for layout isolation.useShallow to prevent unnecessary re-renders.content-visibility: auto.Modern browsers (Chrome, Firefox, Safari, Edge). No IE11 support.
21 PostgreSQL tables with Row-Level Security (RLS). Schema snapshots live in
supabase/tables/ (one file per table, including the four topic_* junction
tables). Apply supabase/migrations/ in filename order for the live schema.
Edge functions in supabase/functions/ (Deno runtime):
api — Agent API gateway for scoped entity, feed, and key managementfetch-paper — Crossref DOI/query searchdeep-research — Deep research orchestrationcreate-admin-user — 410 Gone stub (keep deployed; verify_jwt = true)# Unit + integration
pnpm run test:run
# With coverage
pnpm run test:coverage
# E2E (requires build first)
pnpm run test:e2e
~90 test files covering unit, integration, security, accessibility, performance, and E2E.
Use demo workspace or VITE_DEMO_MODE=1)pnpm run test:run and pnpm run buildSee CONTRIBUTING.md and CODE_OF_CONDUCT.md.
Sequenced Trust → Loop → Palette → Scale → Moat → Polish. Each phase
lands only when the previous phase's exit checks stay green
(test:run + build + chromium e2e + axe sweep).
Quality gates that ship with every phase:
pnpm run test:e2e:axe — systematic axe sweep (all main views +
focus-trap/tab-order/contrast/reduced-motion).pnpm run test:e2e — chromium e2e (CI-fast default).pnpm run test:e2e:matrix — nightly Firefox/WebKit/mobile matrix
(RQ_E2E_MATRIX=1; on Windows PowerShell use
$env:RQ_E2E_MATRIX=1; pnpm exec playwright test).MIT — see LICENSE.
Built with React, Supabase, and lots of coffee.