尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A playful, mobile-first personal growth prototype (Next.js App Router + TypeScript). Friends, partners and small groups answer tiny daily questions, earn XP, and move through a shared 21-day journey.
Requires Node.js 20.9+ and the linked Vercel project (Neon + Clerk are provisioned through the Vercel Marketplace).
npm install
vercel env pull .env.local --yes
ALLOW_PRODUCTION_DB=1 npm run db:migrate # the only database is production; back it up first
npm run dev
Then open http://localhost:3000, sign up, and create a circle.
middleware.ts, /sign-in, /sign-up). Clerk's screens use the app language through the kozos-locale cookie.lib/db/schema.ts, and the migration is drizzle/0000_init.sql. Tables: users, circles, circle_members, custom_questions, circle_questions, saved_questions, answers, answer_reactions, daily_quests, participations, shared_journey_days, xp_events, achievements, circle_milestones, circle_events, user_prefs.lib/server/actions.ts (server actions: authenticate, then delegate) → lib/server/service.ts (all circle logic) → lib/server/snapshot.ts (the privacy-filtered data a member may see).lib/domain/rules.ts, used by both server and client: daily quest pick, journey availability, individual vs. shared completion, XP, achievements and milestones. lib/domain/view.ts derives the display state from a snapshot.daily_quests. Each member completes it on their own; participation is a participations row.shared_journey_days once every member of a circle with 2+ members has completed the day. It is never removed.xp_events has a unique (circle_id, ref), so no reward can be granted twice. Shared rewards (user_id null) go to the circle. Deleting an answer keeps its participation record, XP and badges./join/<code>. The invitee signs in and taps Join. Owners can create a new link (the old one stops working) and remove members; members can leave.ALLOW_PRODUCTION_DB=1 npm run verify:shared # 30 end-to-end checks against the database with temporary users
npm run lint && npm run typecheck && npm run build
The verify:* scripts and db:migrate refuse to run against a remote database (for
Berripop that is production) unless ALLOW_PRODUCTION_DB=1 is set (scripts/db-guard.ts).
Test users and their analytics events are deleted at the end of each run.
POST /api/clerk/webhook (event user.deleted; renewal of a paid subscription is turned off first). It needs a webhook endpoint in the Clerk dashboard and CLERK_WEBHOOK_SIGNING_SECRET in Vercel (Production); without it the route answers 503.npm run db:migrate); add them to the deploy pipeline.Free stays useful forever. Premium adds more room and more AI help. Payments use Stripe, provisioned as a test-mode sandbox through the Vercel Marketplace: no real money moves until a live Stripe account is connected.
lib/billing/plans.ts)| Free | Premium | |
|---|---|---|
| Active growth goals | 1 | 5 |
| AI follow-up questions / week | 5 | 60 |
| Own circles (joining is unlimited) | 1 | 5 |
| Weekly AI growth summary | – | ✓ |
| Price | 0 Ft | 2 990 Ft / month or 23 990 Ft / year |
Everything else (daily quest, 21-day shared journey, sharing, XP, badges, Inner World, viewing, editing and deleting your own data) is free. Premium never unlocks other people's private answers. The pricing page lists features that aren't built yet (adaptive journeys, AI exercises, Berripop cosmetics) under "Planned", never as included.
consumeAiAllowance), so parallel requests can't exceed the limit; a failed AI call is refunded. Basic daily quests never use the allowance.openai/gpt-5-mini by default, called with minimal reasoning (override with AI_GATEWAY_MODEL). It is chosen because the team's free AI Gateway credit covers it; Claude and Gemini models need paid credit. The Gateway catalog marks it no_training for all providers. The member's draft is sent only when they ask, isn't stored, and only token counts are logged (ai_calls).以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗