Fujimod
브라우저에서 카메라 펌웨어를 시험하고 Fujimod SD 부팅 파일을 만든다
결혼·약혼·생일·집들이기용 애니메이션 양언어(크메르·영어) 초대장, 하나의 링크로 모든 휴대폰에서 열림
Create an animated, bilingual (Khmer & English) e-invitation for your wedding, engagement, birthday or house warming. One link that works on every phone.
라이프스타일TypeScript · CSSGitHub @Earbunsong온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A self-serve e-invitation platform: customers pick a plan, pay with ABA PayWay (KHQR / ABA Mobile / cards), receive an access code, design their invitation in a live editor, and share a link — one for everyone or a personal link per guest.
src/lib/plans.ts)src/templates/index.ts)/i/{slug}?g={token}), opened tracking, RSVP + wishes, CSV export/admin — orders, revenue, access codes, manual confirm, promo codesRename the brand in src/config/site.ts and the logo in src/components/site/Logo.tsx.
Invitation row = { templateId, plan, data (JSON) }
│ │ │
src/templates ──────────┘ │ └── validated by invitationDataSchema (src/lib/invitation.ts)
theme colours, fonts, cover art, │
opening animation, particles, └── src/lib/plans.ts → feature flags & limits
section order
▼
<InvitationRenderer> (src/components/invitation) renders sections from src/components/invitation/sections.tsx
— the same component powers the public page, the editor's live preview and the landing-page phone mockup.
Add a template: add an object to TEMPLATES in src/templates/index.ts (pick cover, opening, particles, sections, theme colours). For new cover art, add an SVG component in src/components/invitation/art.tsx.
Add an event type / plan: add it to EventType + PLANS in src/lib/plans.ts, to EVENT_TYPES and emptyInvitation() in src/lib/invitation.ts, and list it in a template's eventTypes.
/create?plan=… Step 1 → POST /api/orders — server validates, prices the plan (+ promo) and creates a PENDING order with a unique tran_id.POST /api/payway/purchase returns fields signed with HMAC-SHA512 (src/lib/payway.ts); the browser posts them to PayWay's hosted checkout.POST /api/payway/callback (return_url). The payload is not trusted — we call PayWay's check-transaction-2 and compare the amount before marking the order PAID (idempotent)./create/status polls GET /api/orders/{id}/status (which also re-checks PayWay), then shows the access code and signs the buyer into the editor./api/cron/expire-orders) re-checks stale pending orders and expires the rest.⚠️ Before going live, compare
PURCHASE_HASH_ORDERinsrc/lib/payway.tswith the API docs PayWay sends you with your merchant account, and test end-to-end in the sandbox.
Without PayWay keys, local development uses a simulated payment (PAYWAY_MOCK=1); this is disabled in production.
pnpm install
docker run -d --name invitely-db -e POSTGRES_USER=invitely -e POSTGRES_PASSWORD=invitely -e POSTGRES_DB=invitely -p 5544:5432 postgres:16-alpine
cp .env.example .env # then edit secrets
pnpm prisma migrate dev
pnpm db:seed # 4 demo invitations + promo WELCOME10
pnpm dev # http://localhost:3000 · demo: /i/demo · admin: /admin
pnpm test
To receive real PayWay sandbox callbacks locally, expose the app with a tunnel (cloudflared tunnel --url http://localhost:3000) and set APP_URL to the tunnel URL.
DATABASE_URL (pooled) and DIRECT_URL (direct).BLOB_READ_WRITE_TOKEN).APP_URL (your https domain), SESSION_SECRET, ADMIN_PASSWORD, CRON_SECRET, PAYWAY_BASE_URL, PAYWAY_MERCHANT_ID, PAYWAY_API_KEY, optional TELEGRAM_BOT_TOKEN, TELEGRAM_ADMIN_CHAT_ID.vercel link then vercel --prod (or import the GitHub repo in Vercel).DATABASE_URL=… DIRECT_URL=… pnpm prisma migrate deploy && pnpm db:seed.PAYWAY_BASE_URL to https://checkout.payway.com.kh with your production keys.src/config/site.ts)src/app/terms, src/app/privacy)SESSION_SECRET, ADMIN_PASSWORD, CRON_SECRETThe GitHub repo Earbunsong/invitely is connected to the Vercel project invitely:
main → Vercel builds and deploys to https://invitely-eta.vercel.app automatically (~1 min).pnpm prisma migrate dev --name <change> locally, then apply to Neon with
prisma migrate deploy using the production URLs before (or right after) pushing.