尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A self-publishing platform for digital ebooks — authors upload and sell,
readers browse and buy. Built with Next.js, TypeScript, Tailwind CSS, and
Supabase (database, auth, file storage), deployed on Vercel.
Production deployment (pre-launch): https://librumal.vercel.app — a
hosted build, not a completed controlled launch (see ROADMAP.md Phase 20).
See ROADMAP.md for full status, sequencing, and what's
still open — this file only covers what exists and how to run it.
The core platform is substantially built, not an early MVP:檢視完整 README ↗A self-publishing platform for digital ebooks — authors upload and sell, readers browse and buy. Built with Next.js, TypeScript, Tailwind CSS, and Supabase (database, auth, file storage), deployed on Vercel.
Production deployment (pre-launch): https://librumal.vercel.app — a
hosted build, not a completed controlled launch (see ROADMAP.md Phase 20).
See
ROADMAP.mdfor full status, sequencing, and what's still open — this file only covers what exists and how to run it.
The core platform is substantially built, not an early MVP:
payment_events, immutable
payments, author_ledger_entries, sale/refund accounting primitives,
transactional book/bundle payment finalizers, and author financial
reporting, independent of any specific payment provider.For what's still open, see ROADMAP.md.
src/app/, split into a public route group and an admin route group.supabase/schema.sql with incremental changes under
supabase/migrations/.src/lib/pok.ts; see POK_STAGING.md). Buying stays off unless the
server-side checkout flags allow it.src/app/api/internal/payouts/run/),
registered in vercel.json: a monthly payout run. Vercel invokes it on
schedule, but the endpoint itself must stay a no-op unless
PAYOUT_SCHEDULER_ENABLED is explicitly set — the cron existing does
not by itself mean payout execution is active.NEW_CHECKOUT_REGIME=librum_ledger_v1 and LEDGER_PAYMENT_PROVIDER=pok
are both set (src/lib/checkout-regime.ts) and the paid-checkout
capability allows it (src/lib/paid-readiness.ts). Any other
configuration fails closed: buying is unavailable.BANK_PAYOUT_SETUP_ENABLED,
PAYOUT_SCHEDULER_ENABLED). Enabling either is a deliberate, gated
decision described in ROADMAP.md.Signup and password-recovery confirmation links work via Supabase Auth's
PKCE ?code= flow, and the app also supports the direct
?token_hash=...&type=signup|recovery verification path — but that second
path is currently dormant: Supabase Auth is still on its default email
templates with no custom SMTP configured, so nothing emits a link in that
shape yet. Cross-browser/cross-device email confirmation (the scenario that
path exists for) is not active until custom SMTP and coordinated templates
are configured and tested. See ROADMAP.md's "Current authentication/email
state" for details.
Before you start: a repository-level guard (
src/lib/supabase/env-guard.ts, PHASE-1A) fails closed against the application itself (local dev, local builds, tests, and any non- Production Vercel deployment) ever connecting to the production Supabase project. It does not cover ad hoc CLI/admin scripts outside the app's own client constructors — those need their own, independent target check (seescripts/staging-fixtures/guard.mtsfor the one PHASE-1C's staging fixture scripts use). Still verify manually that any script or tool you point at Supabase resolves to an isolated project of your own — never the production Supabase ref.
Go to supabase.com and create a project. From Project Settings > API you'll need the Project URL, the anon public key, and the service_role key (server-only — never expose this to the browser).
In the Supabase SQL Editor, run the entire contents of
supabase/schema.sql. If you're updating an
existing project instead, only run the migration files under
supabase/migrations/ newer than what you last
applied, in order.
Skip this if you don't need purchase-receipt / sale-notification emails locally. Sign up at resend.com and create an API key under API Keys.
cp .env.local.example .env.local
Then fill in .env.local. The variable names, verified against
.env.local.example, are:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
NEXT_PUBLIC_SITE_URL=http://localhost:3000
RESEND_API_KEY= # optional — emails are skipped if unset
EMAIL_FROM= # optional, defaults to a shared Resend test address
CRON_SECRET= # shared secret for the internal cron route
npm install
npm run dev
Open http://localhost:3000. Other scripts:
npm run build # production build
npm run start # run a production build locally
npm run lint # ESLint
npm run test # vitest run
Supabase requires email confirmation before login by default. For local testing, either disable Authentication > Providers > Email > Confirm email in the Supabase dashboard, or check the inbox you signed up with.
src/
app/
(public)/ public site + author/reader dashboards
page.tsx author-pitch homepage
bookstore/ reader storefront
books/[id]/, bundles/[id]/, series/[id]/, authors/[id]/
blog/ public blog
dashboard/ author-only area (protected)
books/, bundles/, discounts/, series/, sales/, balance/, payouts/, profile/
account/, library/, wishlist/, following/
auth/, login/, signup/, forgot-password/, reset-password/
admin/(protected)/ staff-only back office
staff/, reports/, refunds/, finance/, audit/, blog/
api/
books/[id]/download/, books/[id]/sample/
internal/payouts/run/
components/ shared UI (site header, icons, etc.)
lib/
supabase/ browser/server/middleware/admin clients
pok.ts, pok-checkout.ts POK sandbox client + checkout
checkout-regime.ts checkout provider selector (POK or disabled)
payout-scheduler.ts dormant payout scheduler logic
docx-converter.ts DOCX -> EPUB conversion
email.ts, pricing.ts, safe-redirect.ts, recovery-session.ts, types.ts
supabase/
schema.sql full database schema
migrations/ incremental changes, in order
This README intentionally doesn't restate the full roadmap — see
ROADMAP.md for phase-by-phase status, completion
criteria, and what's explicitly deferred or blocked. No secrets, real
credentials, or private user data are included in this repository's
documentation.