ViteReact企业官网

crowdup — Vite 企业官网模板

作者 design-sparx

CrowdUp 是一个基于 React Router、Supabase 和 Stripe Connect 的开源众筹平台模板,支持发起活动、接收捐赠和管理后台。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

2 个预览视图
桌面端首页1 / 2
桌面端截图首屏预览

由服务器浏览器实际访问页面后截取。

全部页面与视图 2

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-17查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

活动管理:创建、编辑和发布带富文本故事、封面图、目标金额、截止日期和分类的众筹活动,支持浏览筛选、发布动态和关闭活动

02

Stripe Connect 直接收款:组织者连接自己的 Stripe 账户,捐赠直接在其账户扣款,平台不持有资金,可选平台费

03

Supabase 认证与数据:邮箱密码登录、密码重置、可选 Google 登录,Postgres 行级安全、Auth 和 Storage

04

管理后台:举报处理、活动与用户暂停(含原因和审计记录)、审批队列,支持自动或人工审批发布模式

05

服务端渲染:React Router 框架模式 SSR,提供真实 404 状态和按路由的 meta 标签

06

滥用举报与法律模板:任何人均可举报在线活动并带速率限制,附带可调整的服务条款、隐私和安全页面模板

模板详细介绍

CrowdUp 是一个可自托管的众筹平台,面向个人项目、慈善机构和非政府组织。组织者可以创建、编辑并发布带有富文本故事、封面图、目标金额、截止日期和分类的众筹活动,公众站点支持浏览和筛选;活动所有者可以发布纯文本动态并关闭活动。捐赠通过 Stripe Connect(Standard)直接进入组织者自己的 Stripe 账户,平台不持有资金,可选收取平台费。认证基于 Supabase Auth,支持邮箱密码、密码重置和可选的 Google 登录。管理后台提供举报处理、活动与用户暂停(含原因和审计记录)以及审批队列;通过 PUBLISHING_MODE 可切换自动发布或人工审批模式。任何人都可以举报在线活动,并带有速率限制。应用为服务端渲染,提供真实的 404 状态和按路由的 meta 标签。README 同时列出多项限制:Stripe Connect 并非所有国家可用;数据库测试、Playwright 测试以及 Stripe 和 Supabase 流程尚未在真实服务上运行;v1 不发送捐赠收据或组织者通知等应用邮件;每个活动仅支持一种货币;举报速率限制保存在内存中;审批模式下数据库本身不感知发布模式;搜索抽屉字段未接入数据,首页推荐语和页脚链接来自静态 JSON;法律页面仅为模板,需律师审阅。README 还说明目前没有公开演示站点,截图和演示 GIF 尚未提供。

ViteReact企业官网

适合你的项目吗?

适用场景

  • 为个人项目、慈善机构或非政府组织搭建自托管的众筹网站
  • 需要捐赠直接进入组织者 Stripe 账户、平台不托管资金的筹款场景
  • 需要活动审核、举报处理和用户管理的众筹平台运营
  • 基于 Supabase 和 Netlify 部署服务端渲染的众筹应用原型或内部测试

适合人群

  • 希望自行部署众筹平台并接入 Stripe Connect 的开发团队或运营方
  • 需要活动发布、捐赠和管理后台完整流程参考的开源项目使用者
  • 使用 Supabase 作为数据库与认证、Netlify 作为托管平台的技术团队

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    本地开发需要 Node.js 当前 LTS、pnpm 9、Docker 和 Supabase CLI,依次执行 pnpm install、supabase start、supabase db reset、配置 .env 后运行 pnpm dev

  2. 2

    种子数据包含示例活动和用户,但不设置密码,需自行注册账户,并通过 SQL 将 profile 的 role 设为 admin 以获得管理员权限

  3. 3

    捐赠功能需要 Stripe 测试密钥,具体配置见 docs/stripe.md;完整部署步骤见 docs/self-hosting.md

  4. 4

    Netlify 部署按钮会克隆仓库并提示环境变量,但 README 注明尚未验证通过该按钮部署全新 fork,且不会创建 Supabase 项目或 Stripe webhook

  5. 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 原文

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.

README 原文
https://github.com/design-sparx/crowdup/blob/main/LICENSEhttps://github.com/design-sparx/crowdup/blob/main/README.md

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

[![CI](https://github.com/design-sparx/crowdup/actions/workflows/ci.yml/badge.svg)](https://github.com/design-sparx/crowdup/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](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.

[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](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).
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。