Ploy 是面向企业的 AI 工具市场。生成免费 AI 报告以了解哪些 AI 工具适合您实际要解决的问题,浏览市场,列出您自己的 AI 工具,或构建。
AI 翻译
Ploy is an AI tools marketplace for businesses. Generate a free AI Report to see which AI tools fit the problems you're actually trying to solve, browse the marketplace, list your own AI tool, or buil
电商TypeScript · PLpgSQLGitHub @searchploy在线运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Ploy 是面向企业的 AI 工具市场。生成免费 AI 报告,了解哪些 AI 工具适合您真正要解决的问题,浏览市场,列出您自己的 AI 工具,或创建 AI 咨询业务。
AI 翻译
Ploy is an AI tools marketplace for businesses. Generate a free AI Report to see which AI tools fit the problems you're actually trying to solve, browse the marketplace, list your own AI tool, or build an AI consulting business.
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Ploy — The Marketplace for AI Employees
A production-ready MVP built with Next.js 15 (App Router), TypeScript, Tailwind CSS, shadcn/ui,
Supabase, and Framer Motion.查看完整 README ↗A production-ready MVP built with Next.js 15 (App Router), TypeScript, Tailwind CSS, shadcn/ui, Supabase, and Framer Motion.
supabase/migrations/0001_init.sql — every table from the spec, with RLS
policies, triggers (auto profile creation, rating recalculation, commission math), and seed
categories.src/lib/data/* — typed functions (getEmployees(), getAgencyBySlug(),
etc.) that return realistic sample data with the exact same shape Supabase will return. Swapping
a mock function for a live Supabase query is a one-function change, not a rewrite.The environment this was built in has no access to npm, GitHub, or any package registry, so
npm install was never run here and the build was never compiled. Every file was hand-written
against known-correct Next.js 15 / React 19 / shadcn/ui APIs and then verified with static checks
(import resolution, export matching, route resolution, "use client" boundaries) — but you should
run a real build before deploying.
npm install
npm run dev # http://localhost:3000
npm run typecheck # tsc --noEmit
npm run build
If npm run build surfaces anything (a version mismatch, a missed prop), it'll almost certainly be
small — the architecture and every file are complete.
supabase link --project-ref <your-ref>
supabase db push
.env.example to .env.local and fill in your Supabase URL/keys.src/lib/types/database.ts already match the migration exactly):
npx supabase gen types typescript --project-id <id> > src/lib/types/database.ts
src/lib/data/* has a matching Supabase query
commented in-line or trivially inferable from the table/column names — e.g.
getEmployees() becomes supabase.from("employees").select("*, agency:agencies(*), ...").setTimeout + toast.success (demo requests, buy now, listing
create/edit, agency approval, etc.) have a comment above the handler explaining the Server
Action they'd call in production — wire those up once Supabase is live.Uses Supabase Auth (not Clerk). src/lib/supabase/client.ts and server.ts are the browser/server
clients; src/middleware.ts refreshes the session cookie on every request. Sign-up captures a
role (business | agency) in user metadata; a Postgres trigger (handle_new_auth_user) copies
it into public.users automatically. Dashboard layouts currently read a hardcoded demo user
(src/lib/data/users.ts) instead of the live session — swap in getServerUser() from
src/lib/supabase/server.ts once you have real accounts to test with.
Stripe is not wired up (no keys were available to configure it), but the schema and commission
math are ready for it: orders.commission_cents / agency_payout_cents are computed automatically
by a Postgres trigger, and transactions / commissions tables are designed to hold Stripe
Checkout + Connect payout references (stripe_payment_intent_id, stripe_transfer_id).
marketplace/page.tsx, employee/agency
detail pages, all dashboard pages) is an async Server Component. Interactivity (forms, filters,
dialogs) is isolated into small "use client" leaf components.src/components/layout/site-chrome.tsx
hides the public navbar/footer on /dashboard/* routes, since each dashboard renders its own
sidebar shell.formatCurrency()), matching how
Stripe represents amounts, so there's no float-rounding cleanup needed when Stripe is added.COMMISSION_PCT in src/lib/constants.ts), computed server-side by
a Postgres trigger on orders, not trusted from the client.agency_members (team accounts), messages (full inbox), analytics (event log for
recommendations/search), notifications, and nullable Stripe columns on transactions mean
subscriptions, Stripe Connect payouts, an AI chat assistant, embeddings-based search, and an
affiliate/referral system can all be added without a schema rewrite.