Open-Source Cold Email & Warmup Platform
Warmbly 是開源的冷郵件平台:溫暖您的收件箱、發送活動、並對每個回覆進行分流。可在我們的雲端運行或自行託管整個系統。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證☕ Digital loyalty stamp cards for coffee shops — Apple Wallet & Google Wallet. One poster, one tap, no app.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Digital loyalty stamp cards for coffee shops — delivered to Apple Wallet and Google Wallet.
Live app → perk.junadesign.co.nz · Watch the 50-second teaser檢視完整 README ↗Digital loyalty stamp cards for coffee shops — delivered to Apple Wallet and Google Wallet.
Live app → perk.junadesign.co.nz · Watch the 50-second teaser
A shop signs up with a magic link, configures its card (logo, colour, stamps, reward, stamping mode), and gets a URL like perk.junadesign.co.nz/your-shop. Customers open that link, tap once, and the card is in their wallet — no app, no account. Baristas scan the pass to stamp and redeem; passes update live on the customer's phone via APNs and the Google Wallet API. Owners get a dashboard with counters, a customer list with manual adjustments, an activity ledger, and printable counter posters.
Built for a real café in New Zealand — and free for any shop to use. If there's enough interest it stays free and keeps growing.
| Customer landing | Web card | Staff scanner |
|---|---|---|
| Marketing site | Owner dashboard | Printable poster |
|---|---|---|
Next.js 16 (App Router) · React 19 · Tailwind 4 · Drizzle ORM + Postgres (Supabase in prod, @electric-sql/pglite in tests) · Auth.js v5 magic links via Resend · passkit-generator + APNs for Apple Wallet · Google Wallet Objects API · Supabase Storage for logos · Vitest · Playwright.
docs/brand/BRAND_IDENTITY.md — palette, type scale, the mark, and the rules that keep Perk out of a shop's own branding. Tokens live in app/globals.css.docs/superpowers/specs/2026-08-31-perk-v1-design.mddocs/superpowers/plans/2026-08-31-perk-v1.mddocs/manual-testing.mdnpm install
cp .env.example .env # fill in DATABASE_URL at minimum
npm run db:migrate # applies drizzle/ migrations
npm run dev # http://localhost:3000
brew install postgresql@17 && brew services start postgresql@17 && createdb perk). For Supabase use the Transaction pooler URL (port 6543); the client already sets prepare: false.AUTH_RESEND_KEY empty and magic links / card-backup links are printed to the dev server console.WALLET_DRY_RUN=1 locally. Apple routes return the unsigned pass.json, Google/APNs calls are logged instead of sent. The web card works fully.SUPABASE_URL + SUPABASE_SERVICE_ROLE_KEY and a public bucket named logos.npm test # Vitest — domain, queries, security, wallet builders (in-memory Postgres via pglite)
npm run typecheck # next typegen && tsc
npm run e2e:seed && npm run e2e # Playwright smoke test against the dev server
pass.app.perk.card) and a certificate for it. Export the cert + private key as PEM; download Apple's WWDR G4 intermediate..p8) — used to tell devices a pass changed.APPLE_PASS_CERT_PEM, APPLE_PASS_KEY_PEM, APPLE_WWDR_PEM, APNS_KEY_PEM. Set APPLE_TEAM_ID, APPLE_PASS_TYPE_ID, APNS_KEY_ID, APNS_TEAM_ID.NEXT_PUBLIC_APP_URL must be public HTTPS — passes embed ${APP_URL}/api/wallet/apple as their web service.GOOGLE_WALLET_ISSUER_ID, GOOGLE_WALLET_SA_EMAIL, GOOGLE_WALLET_SA_KEY_PEM (base64 of the key's private_key field).Import the repo, set every variable from .env.example (unset WALLET_DRY_RUN), and point DATABASE_URL at Supabase's transaction pooler. Run migrations against the production database once. Native modules (sharp, @resvg/resvg-js, passkit-generator) are already marked as server externals in next.config.ts.
app/ routes — (marketing), login, onboarding, dashboard/*, [slug]/{card,scan,staff}, api/*
lib/db Drizzle schema, client, queries (every function takes shopId first)
lib/domain card lifecycle: create / stamp / redeem / adjust — transactional, event-sourced
lib/wallet WalletProvider interface; apple.ts (+ apns.ts), google.ts, strip-image.ts
lib/security HMAC scan tokens, staff cookie signing, DB-backed rate limits, short codes
components/ UI primitives, StampGrid, QR, wallet buttons
drizzle/ SQL migrations · tests/ Vitest · e2e/ Playwright