活动管理:创建、编辑和发布带富文本故事、封面图、目标金额、截止日期和分类的众筹活动,支持浏览筛选、发布动态和关闭活动
crowdup — Vite 企业官网模板
作者 design-sparx
CrowdUp 是一个基于 React Router、Supabase 和 Stripe Connect 的开源众筹平台模板,支持发起活动、接收捐赠和管理后台。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 2
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
Stripe Connect 直接收款:组织者连接自己的 Stripe 账户,捐赠直接在其账户扣款,平台不持有资金,可选平台费
Supabase 认证与数据:邮箱密码登录、密码重置、可选 Google 登录,Postgres 行级安全、Auth 和 Storage
管理后台:举报处理、活动与用户暂停(含原因和审计记录)、审批队列,支持自动或人工审批发布模式
服务端渲染:React Router 框架模式 SSR,提供真实 404 状态和按路由的 meta 标签
滥用举报与法律模板:任何人均可举报在线活动并带速率限制,附带可调整的服务条款、隐私和安全页面模板
模板详细介绍
CrowdUp 是一个可自托管的众筹平台,面向个人项目、慈善机构和非政府组织。组织者可以创建、编辑并发布带有富文本故事、封面图、目标金额、截止日期和分类的众筹活动,公众站点支持浏览和筛选;活动所有者可以发布纯文本动态并关闭活动。捐赠通过 Stripe Connect(Standard)直接进入组织者自己的 Stripe 账户,平台不持有资金,可选收取平台费。认证基于 Supabase Auth,支持邮箱密码、密码重置和可选的 Google 登录。管理后台提供举报处理、活动与用户暂停(含原因和审计记录)以及审批队列;通过 PUBLISHING_MODE 可切换自动发布或人工审批模式。任何人都可以举报在线活动,并带有速率限制。应用为服务端渲染,提供真实的 404 状态和按路由的 meta 标签。README 同时列出多项限制:Stripe Connect 并非所有国家可用;数据库测试、Playwright 测试以及 Stripe 和 Supabase 流程尚未在真实服务上运行;v1 不发送捐赠收据或组织者通知等应用邮件;每个活动仅支持一种货币;举报速率限制保存在内存中;审批模式下数据库本身不感知发布模式;搜索抽屉字段未接入数据,首页推荐语和页脚链接来自静态 JSON;法律页面仅为模板,需律师审阅。README 还说明目前没有公开演示站点,截图和演示 GIF 尚未提供。
适合你的项目吗?
适用场景
- 为个人项目、慈善机构或非政府组织搭建自托管的众筹网站
- 需要捐赠直接进入组织者 Stripe 账户、平台不托管资金的筹款场景
- 需要活动审核、举报处理和用户管理的众筹平台运营
- 基于 Supabase 和 Netlify 部署服务端渲染的众筹应用原型或内部测试
适合人群
- 希望自行部署众筹平台并接入 Stripe Connect 的开发团队或运营方
- 需要活动发布、捐赠和管理后台完整流程参考的开源项目使用者
- 使用 Supabase 作为数据库与认证、Netlify 作为托管平台的技术团队
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
本地开发需要 Node.js 当前 LTS、pnpm 9、Docker 和 Supabase CLI,依次执行 pnpm install、supabase start、supabase db reset、配置 .env 后运行 pnpm dev
- 2
种子数据包含示例活动和用户,但不设置密码,需自行注册账户,并通过 SQL 将 profile 的 role 设为 admin 以获得管理员权限
- 3
捐赠功能需要 Stripe 测试密钥,具体配置见 docs/stripe.md;完整部署步骤见 docs/self-hosting.md
- 4
Netlify 部署按钮会克隆仓库并提示环境变量,但 README 注明尚未验证通过该按钮部署全新 fork,且不会创建 Supabase 项目或 Stripe webhook
- 5
README 说明数据库测试、Playwright 测试及 Stripe 和 Supabase 流程尚未在真实服务上运行,首次部署应视为测试
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- Stripe Connect 并非在所有国家可用;组织者和平台账户必须位于 Stripe 支持的国家,选择此技术栈前需核对 Stripe 当前列表。
- 数据库测试、Playwright 测试以及 Stripe 和 Supabase 流程均未在真实服务上运行过,首次部署应视为测试。
- v1 不发送捐赠收据或组织者通知等应用邮件,仅发送 Supabase Auth 邮件;生产环境需要配置自定义 SMTP。
- 每个活动仅支持一种货币,取自组织者 Stripe 账户并在活动上线后固定,不支持多币种或货币转换。
- 举报速率限制保存在内存中,按服务器实例计算且重启后重置,在无服务器环境下作用有限。
- 数据库本身不感知发布模式;在审批模式下,使用 service role 的服务端代码若出错仍可能直接发布草稿。
- 部分 UI 未接入数据:搜索抽屉字段无效,首页推荐语和页脚链接来自 src/data/ 中的静态 JSON。
- 法律页面仅为模板,必须由律师审阅后方可使用。
- 种子数据中的示例用户未设置密码,需自行注册账户,并通过 SQL 将 profile 的 role 设为 admin 才能获得管理员权限。
- 捐赠功能需要 Stripe 测试密钥,配置方式见 docs/stripe.md。
- Netlify 部署按钮尚未验证可成功部署全新 fork,且不会创建 Supabase 项目或 Stripe webhook,需先手动完成。
- 目前没有公开演示站点,README 中演示链接仍为待办占位。
- 截图和演示 GIF 尚未提供,README 中标注为即将推出。
- 本地开发需要 Node.js 当前 LTS、pnpm 9、Docker 和 Supabase CLI 才能运行本地数据库。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
- **Stripe Connect is not available in every country.** Organisers and the platform account must be in a [Stripe-supported country](https://stripe.com/global); Kenya is not a general Connect country at the time of writing. Check Stripe's current list before choosing this stack.
README 原文
- **Nothing has been run against real services.** The database tests (`pnpm test:db`), the Playwright specs and the Stripe and Supabase flows were written without being executed against a database or Stripe; they first run when the CI workflows do. Treat your first deployment as a test.
README 原文
- **No application emails in v1.** Only Supabase Auth emails (confirmation, password reset) are sent. There are no donation receipts or organiser notifications. Production needs custom SMTP ([guide](docs/self-hosting.md#1-supabase-project)).
README 原文
- **One currency per campaign**, taken from the organiser's Stripe account when the campaign goes live and fixed afterwards. No multi-currency campaigns or conversion.
README 原文
- **Report rate limit is in memory:** per server instance and reset on restart; on serverless it is a speed bump ([docs/reports.md](docs/reports.md)).
README 原文
- **The database is not publishing-mode aware:** in `approval` mode, server code running with the service role could still publish a draft directly if app code were wrong ([docs/moderation.md](docs/moderation.md)).
README 原文
- **Some UI is not wired to data:** the search drawer fields do nothing, and home-page testimonials and footer links come from static JSON in `src/data/`.
README 原文
- **Legal pages are templates** and must be reviewed by a lawyer ([docs/operators-legal.md](docs/operators-legal.md)).
README 原文
The seed creates sample campaigns and users (`admin@`, `amara@`, `liam@`, `sam@`, `dana@` at `crowdup.example`) but sets no passwords, so sign up with your own account. To make it an admin, run `update public.profile set role = 'admin' where id = '<your user id>';` in Studio or `psql`. Donations need Stripe test keys: see [docs/stripe.md](docs/stripe.md). Every environment variable is listed in [docs/self-hosting.md](docs/self-hosting.md#environment-variables).
README 原文
The seed creates sample campaigns and users (`admin@`, `amara@`, `liam@`, `sam@`, `dana@` at `crowdup.example`) but sets no passwords, so sign up with your own account. To make it an admin, run `update public.profile set role = 'admin' where id = '<your user id>';` in Studio or `psql`. Donations need Stripe test keys: see [docs/stripe.md](docs/stripe.md). Every environment variable is listed in [docs/self-hosting.md](docs/self-hosting.md#environment-variables).
README 原文
The button clones the repository into your Netlify account and, through the `[template.environment]` section of `netlify.toml`, prompts for the required variable names. **Deploying a fresh fork through this button has not been verified.** It does not create the Supabase project or the Stripe webhook; do those first as described in the guide.
README 原文
**Live demo:** TODO(ticket 24): add the demo URL once the operator has deployed it (see [docs/demo.md](docs/demo.md)). There is no public demo yet.
README 原文
**Screenshots coming soon.** A demo GIF will be added here once a running instance exists.
README 原文
https://github.com/design-sparx/crowdup/blob/main/LICENSEhttps://github.com/design-sparx/crowdup/blob/main/README.mdRequirements: Node.js (current LTS), pnpm 9 (`corepack enable`), Docker and the [Supabase CLI](https://supabase.com/docs/guides/local-development) for the local database.
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-17。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 92 / 100
- 技术栈
- Vite · React
- 网站类型
- 企业官网
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-10-17
- 截图检查日期
- 2026-10-17
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Vite。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: codex-user-requested-batch-review-20261018 · 2026-10-18
查看当时使用的来源资料
SHA-256: d4560188644adafbfd8d6d11ab5b1ca4313fe58d06d16b7f62027d845c1ad82b
2026-10-17T09:58:30.462Z
来源文件 / 仓库# CrowdUp
[](https://github.com/design-sparx/crowdup/actions/workflows/ci.yml)
[](LICENSE)
An open-source, self-hostable crowdfunding platform for personal projects, charities and NGOs. Organisers publish campaigns and receive donations straight into their own Stripe account; you run the platform on Supabase and Netlify.
**Live demo:** TODO(ticket 24): add the demo URL once the operator has deployed it (see [docs/demo.md](docs/demo.md)). There is no public demo yet.
<!-- PLACEHOLDER: screenshots and a demo GIF could not be produced in the repository tooling. A maintainer should add them under docs/images/ and link them here. -->
**Screenshots coming soon.** A demo GIF will be added here once a running instance exists.
## Features
What is built today (see [Known limitations](#known-limitations) for what is not):
- **Campaigns:** create, edit and publish campaigns with a rich-text story, cover image, goal, end date and category. Browse and filter on the public site. Owners can post plain-text updates and close campaigns.
- **Donations only:** no rewards, perks or equity. Donors can give as guests or signed in, anonymously if they wish. Signed-in donors get a donation history.
- **Stripe Connect (Standard), direct charges:** each organiser connects their own Stripe account and donations are charged on it. The platform never holds funds. An optional platform fee (`PLATFORM_FEE_PERCENT`, default 0) can be taken. See [docs/stripe.md](docs/stripe.md).
- **Auth:** email and password with password reset, optional Google sign-in, via Supabase Auth.
- **Admin area:** `/admin` for reports, campaign and user suspension (with reasons and an audit trail) and the approval queue. See [docs/moderation.md](docs/moderation.md) and [docs/reports.md](docs/reports.md).
- **Approval mode:** `PUBLISHING_MODE=approval` holds new campaigns for an administrator to approve or reject. The default `auto` publishes once the organiser has finished Stripe onboarding.
- **Abuse reporting:** anyone can report a live campaign, with rate limiting.
- **Legal templates:** Terms, Privacy and Security pages to adapt ([docs/operators-legal.md](docs/operators-legal.md)). Not legal advice.
- **Demo mode:** an optional banner, demo accounts and a guarded scheduled reset for a public demo ([docs/demo.md](docs/demo.md)).
- **Server-rendered**, with real 404 status and per-route meta tags.
## Tech stack
- [React Router 8](https://reactrouter.com/) framework mode (SSR), React 19, TypeScript 6, Vite 8
- [Mantine 9](https://mantine.dev/), Tiptap editor, ApexCharts
- [Supabase](https://supabase.com/): Postgres with row-level security, Auth, Storage
- [Stripe](https://stripe.com/) Connect
- Netlify (SSR via `@netlify/vite-plugin-react-router`)
- Vitest, Playwright, pgTAP; pnpm
## Architecture
```mermaid
flowchart LR
Browser -->|HTML and form posts| App["React Router SSR app (Netlify)"]
App -->|user session, RLS| DB[(Supabase: Postgres, Auth, Storage)]
App -->|service role: publish drafts, record donations| DB
App -->|Connect onboarding, Checkout Sessions| Stripe
Stripe -->|webhook /api/stripe/webhook| App
Browser -->|hosted Checkout| Stripe
```
Loaders and actions run on the server and read configuration from `process.env`; nothing is exposed to the browser. A map of the code is in [AGENTS.md](AGENTS.md).
## Quick start (local development)
Requirements: Node.js (current LTS), pnpm 9 (`corepack enable`), Docker and the [Supabase CLI](https://supabase.com/docs/guides/local-development) for the local database.
```sh
git clone https://github.com/design-sparx/crowdup.git
cd crowdup
pnpm install
supabase start # local Postgres, Auth and Storage; applies migrations
supabase db reset # re-applies migrations and loads supabase/seed.sql sample data
cp .env.example .env # fill SUPABASE_ANON_KEY and SUPABASE_SERVICE_ROLE_KEY from `supabase status`
pnpm dev # http://localhost:5173
```
The seed creates sample campaigns and users (`admin@`, `amara@`, `liam@`, `sam@`, `dana@` at `crowdup.example`) but sets no passwords, so sign up with your own account. To make it an admin, run `update public.profile set role = 'admin' where id = '<your user id>';` in Studio or `psql`. Donations need Stripe test keys: see [docs/stripe.md](docs/stripe.md). Every environment variable is listed in [docs/self-hosting.md](docs/self-hosting.md#environment-variables).
## Scripts
| Script | What it does |
| --- | --- |
| `pnpm dev` | React Router dev server |
| `pnpm build` | typegen, `tsc`, production build |
| `pnpm lint` | ESLint, zero warnings allowed |
| `pnpm test` | Vitest unit tests |
| `pnpm test:db` | `supabase db reset` then pgTAP tests (needs local Supabase) |
| `pnpm test:e2e` | Playwright against the production build (build first; needs local Supabase) |
| `pnpm preview` | Serve `build/client` with Vite |
## Deploy and self-host
Follow [docs/self-hosting.md](docs/self-hosting.md): Supabase project, Stripe, Netlify and every environment variable.
[](https://app.netlify.com/start/deploy?repository=https://github.com/design-sparx/crowdup)
The button clones the repository into your Netlify account and, through the `[template.environment]` section of `netlify.toml`, prompts for the required variable names. **Deploying a fresh fork through this button has not been verified.** It does not create the Supabase project or the Stripe webhook; do those first as described in the guide.
## Documentation
See the [docs index](docs/README.md).
## Known limitations
- **Stripe Connect is not available in every country.** Organisers and the platform account must be in a [Stripe-supported country](https://stripe.com/global); Kenya is not a general Connect country at the time of writing. Check Stripe's current list before choosing this stack.
- **Nothing has been run against real services.** The database tests (`pnpm test:db`), the Playwright specs and the Stripe and Supabase flows were written without being executed against a database or Stripe; they first run when the CI workflows do. Treat your first deployment as a test.
- **No application emails in v1.** Only Supabase Auth emails (confirmation, password reset) are sent. There are no donation receipts or organiser notifications. Production needs custom SMTP ([guide](docs/self-hosting.md#1-supabase-project)).
- **One currency per campaign**, taken from the organiser's Stripe account when the campaign goes live and fixed afterwards. No multi-currency campaigns or conversion.
- **Report rate limit is in memory:** per server instance and reset on restart; on serverless it is a speed bump ([docs/reports.md](docs/reports.md)).
- **The database is not publishing-mode aware:** in `approval` mode, server code running with the service role could still publish a draft directly if app code were wrong ([docs/moderation.md](docs/moderation.md)).
- **Some UI is not wired to data:** the search drawer fields do nothing, and home-page testimonials and footer links come from static JSON in `src/data/`.
- **Legal pages are templates** and must be reviewed by a lawyer ([docs/operators-legal.md](docs/operators-legal.md)).
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md), including [good first issue ideas](docs/good-first-issues.md). Report security issues privately as described in [SECURITY.md](SECURITY.md).
## License
MIT. See [LICENSE](LICENSE).
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

business-website-template
Modern UI/UX business website design made with React.
Vite · 企业官网

kiaalap
Free admin dashboard template focused on education, online course and school management. Build using Bootstrap…
Vite · 后台

saasboard
Free and open-source SaaS dashboard template for startups, businesses, and AI Tools. | Built with Meku, React,…
Vite · 后台

vite-react-ts-shadcn-ui
Boilerplate template designed to quickly bootstrap a React.js Web App, SPA, website or landing page with React…
Vite · 企业官网

vite-vanilla-ts
Start a Vanilla TS Web App, SPA, website or landing page using TypeScript, Tailwind CSS 4, ESLint, Husky, Vite…
Vite · 企业官网

free.website.templates
Free OpenSource Website Page Templates Collection by Vontext: Vite + React + TypeScript + TailwindCSS
Vite · 后台
