ai-startup-skills
创业公司做 AI 产品的 7 步 Agent Skill 合集:验证 → BP → 政策 → 路演 → 获客 → 定价 → 注册。
Translation pending
A returning donor sees the pantry's page rearranged around what their gift did. Records and estimates never look alike.
OtherJavaScript · TypeScriptGitHub @ComradevnnOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A personalization layer that any charity can drop onto its own website. Online shops remember you: your last order is front and center when you return. Chartitable gives returning donors the same experience. When a donor comes back to a charity's site, the page rearranges itself around them: what their gift has done since their last visit, a thank-you, and one helpful next step. Charities also get a staff dashboard.
Built at Cal Hacks 13.0 (Oct 23–25, 2026) by a two-person team. Live at https://www.chartitable.biz (domain registered through GoDaddy, hosted on Vercel, with a Convex dev deployment behind it). Hosts and the API are also reachable at https://chartitable.vercel.app. This README describes what exists and what doesn't.
Staff pages are PIN-protected. Demo PIN: 6767 (demo data only, test mode, no real payments).
Picture giving $25 to a small charity. A month later you get the same website, the same photo and the same Donate button, with no sign your gift did anything. Small charities usually have no fundraising staff to write back, so donors quietly drift away.
We built for two groups at small, under-resourced charities:
<script> tag and a few marked regions to the site it already has. No redesign.Donations are pooled, so we cannot claim a specific dollar bought a specific thing. Therefore:
claude-sonnet-5-5 turns a donor's structured facts into a headline, a short story and a next step, constrained to a JSON schema. The facts payload is a whitelist: no email, no donor ID and nothing about other donors. The prompt requires every estimate to be introduced with "about" and described as an estimate of a pooled share, and never to add records into a total. The guard checks every output before a donor sees it, and the first view after a data change shows the template while Claude's version is generated for the next view. Where Claude could go wrong (invented numbers, inflated impact, invented names, pressure) is exactly what the guard and the tests target.
docs/handoff/.layer.js embed (reads the signed ?ct= token, stores it per charity, fills the hero, since-last-visit and next-step slots from the donor-view endpoint), the staff impact-update page and four fictional test-host sites, using Impeccable for automated design checks. The test hosts are fixtures for testing the layer, not the polished demo. Later layer work (regions, live updates, motion) came back through Claude Code. Cursor activity and screenshots are logged in docs/cursor-grok-log.md and docs/cursor-shots/.Works, tested, and live on the dev deployment:
/donor-view API (first view template, later views Claude), visits and "since last visit", test-mode donate page, staff update page with photos, milestone emails with an allowlist, and a health page. Engine and seed logic are covered by Vitest unit tests; scripts/e2e-smoke.mjs runs the donation → staff update → donor view path against the live backend.layer.js (about 8.5 KB gzipped) with conditional regions, several layouts per donor state, live polling and motion, running on the Vercel-hosted fictional charity sites./dashboard) with a live mode that reads from Convex (set VITE_CONVEX_URL) and a sample-data fallback if the backend is unavailable.Not done:
<script src="https://chartitable.vercel.app/layer.js" data-charity="<charity-id>" defer></script>
<section data-impact-slot="hero"></section>
<section data-impact-slot="since-last-visit"></section>
<section data-impact-slot="next-step"></section>
<a data-impact-donate href="#donate">Donate</a>
v1 slots stay empty for unrecognized visitors. v2 (additive) lets a site author its own regions with <template> variants per donor state; the layer fills data-ct-* fields with text only, never HTML. Donor links carry only a signed opaque ?ct= token; no personal data appears in URLs. Theming uses --ct-* CSS variables. Full contract: PROGRESS.md, rationale in docs/PLAN_DYNAMIC_SITE.md.
| Folder | What |
|---|---|
engine/ | Pure TypeScript: allocation, facts, prompt, guard, template fallback, tokens, donor state, milestones. Vitest. |
convex/ | Backend: schema, narrative action, /donor-view HTTP endpoint, donations, impact logs, milestones and email, dashboard queries, health. |
layer/ | The embeddable layer.js (esbuild IIFE): regions, conditions, live updates, motion. |
staff/ | Test-mode donate page and staff update page (static). |
demo-sites/ | Fictional charity host sites (test fixtures and contract-v2 hosts). |
dashboard/ | Charity dashboard (Vite + React + TypeScript), live Convex mode with sample-data fallback. |
frontend/ | First-pass static pages (landing, donor view, staff donors). |
seed/ | Fictional charities, donors, donations, expenses and impact logs. |
scripts/ | build-site.mjs (assembles what Vercel serves), e2e-smoke.mjs. |
docs/ | Specs, research, design, prompts, handoffs. |
TypeScript, JavaScript, HTML, CSS, React 19, Vite, esbuild, Vitest, happy-dom, npm workspaces, Convex, the Anthropic API (Claude Sonnet 5.5), Resend, Vercel, GoDaddy (domain), Figma, Impeccable, Cursor, Grok, Claude Code.
layer.js, the staff and donate pages and the demo sites. Only built static files are served.npm install
npm test # engine and seed tests
npm run typecheck
npm run build # layer/dist/layer.js
npm run build:site # assembles dist-site/ exactly as Vercel serves it
npm run dev:layer # serves the layer on http://localhost:5174
Copy .env.example to .env and fill in keys (ANTHROPIC_API_KEY, RESEND_API_KEY, TOKEN_SECRET, DEMO_INBOXES, STAFF_PIN). Never commit .env. The backend needs your own Convex account (npx convex dev); environment variables are set with npx convex env set.
localStorage for 30 days. Production use would need real authentication.Two people at Cal Hacks 13.0: the lead (product engineering, deploys, orchestration of the Claude Code agents) and a teammate (dashboard, design, Figma, Impeccable).