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。 以下为已保存的摘录。
A Typeform-style form builder. Creators build, theme and publish
one-question-at-a-time forms; respondents fill them in anonymously,
with progress saved as they go. Creators see responses (including
unfinished ones), export CSV, and send completions to webhooks or
Google Sheets.
Built with Next.js (App Router), TypeScript, Tailwind + shadcn/ui and
Supabase (Postgres, Auth, Storage). See ARCHITECTURE.md
for how it fits together and DECISIONS.md for why.
Prerequisites: Node.js 20+, Docker, and the
Supabase CLI.查看完整 README ↗A Typeform-style form builder. Creators build, theme and publish one-question-at-a-time forms; respondents fill them in anonymously, with progress saved as they go. Creators see responses (including unfinished ones), export CSV, and send completions to webhooks or Google Sheets.
Built with Next.js (App Router), TypeScript, Tailwind + shadcn/ui and
Supabase (Postgres, Auth, Storage). See ARCHITECTURE.md
for how it fits together and DECISIONS.md for why.
Prerequisites: Node.js 20+, Docker, and the Supabase CLI.
npm install
supabase start # local Postgres/Auth/Storage + all migrations
cp .env.example .env.local # then fill in the Supabase values below
npm run db:seed-templates # optional: the template gallery
npm run dev # http://localhost:3000
supabase status -o env prints the local API_URL, ANON_KEY and
SERVICE_ROLE_KEY for NEXT_PUBLIC_SUPABASE_URL,
NEXT_PUBLIC_SUPABASE_ANON_KEY and SUPABASE_SERVICE_ROLE_KEY.
Everything else in .env.example is optional locally — integrations
that aren't configured show a "not set up" state instead of failing.
Emails sent by local Auth (signup confirmation, password reset) are caught by Inbucket at http://localhost:54324.
| Command | What it does |
|---|---|
npm run dev | Dev server |
npm run lint | ESLint |
npm run typecheck | Route types + tsc --noEmit |
npm run format:check | Prettier check (CI runs this) |
npm run test | Unit tests (Vitest) |
npm run test:integration | Integration tests against local Supabase |
npm run e2e | Playwright E2E against a production build |
npm run db:migrate | Push supabase/migrations to the linked project |
npm run db:types | Regenerate src/lib/supabase/database.types.ts |
First E2E run: npx playwright install chromium webkit. See
docs/testing.md for what each suite covers.
npm run db:migrate against it.
Set regions in vercel.json to the Vercel region nearest that
project (it's sin1, for a Singapore database) — pages make several
database calls each, so a far-away region makes everything slow..env.example in the host's secret store;
NEXT_PUBLIC_APP_URL must be the public origin (no trailing slash).<origin>/auth/confirm to Redirect URLs.
Signup-confirmation and password-reset links land there; if it's
missing, Supabase silently redirects to the Site URL instead and
the links never sign anyone in.vercel.json (Vercel Cron sends
Authorization: Bearer $CRON_SECRET automatically): webhook,
Google Sheets and custom-domain sweeps run daily (Vercel Hobby's
limit; on Pro, or any scheduler that can call the paths, run the
webhook and Sheets retry sweeps every 5 minutes and the domain check
every 30), plus the daily retention job that deletes expired unfinished responses and old rate-limit
rows. On other hosts, call the same /api/cron/* paths (GET or
POST) with that header.RESEND_API_KEY and EMAIL_FROM for owner notifications.X-Forwarded-For entry (visitors write it). On Vercel nothing is
needed. Elsewhere set CLIENT_IP_HEADER to a header your host
overwrites (cf-connecting-ip, fly-client-ip, …), or
TRUSTED_PROXY_HOPS to the number of proxies in front of the app.GET /api/cron/health with
Authorization: Bearer $CRON_SECRET: 200 healthy, 503 when
scheduled retries are overdue or uploads are stuck, with the reasons
in the body.src/domains/* — business logic per domain (forms, responses,
logic, webhooks, …); UI never bypasses these.src/app — routes: marketing, auth, dashboard, builder, the public
respondent runtime (/f/[slug]) and API handlers.supabase/migrations — the only source of schema truth (with RLS).docs/ — database, form schema, API and testing references.