ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Next.js frontend, FastAPI backend, Supabase Postgres persistence, Flutterwave checkout, and the
shared Premium subscription service used by the Enchiridion Android app.
Accounts are Supabase Auth users shared with the app: one email and password work on both.
Website records live in the enchiridion_web schema and subscriptions in billing.
Browser storage holds only the Supabase session, referral attribution, and interface state.
Use the same Supabase project as the Android app. In the SQL editor, paste and run the whole of
supabase/enchiridion_master.sql. It is the only schema file,
is safe to re-run, and archives the earlier FastAPI Users website schema instead of dropping it.
Then configure Auth as described in docs/subscriptions.md.
Copy the transaction pooler URI from Connect > Transaction pooler, using port
6543, into the backend's SUPABASE_DB_URL. URL-encode special characters in the
database password. The backend requires TLS and disables prepared statements for
transaction-pooler compatibility. Never place this URI in a NEXT_PUBLIC_* variable.
The enchiridion_web and billing schemas have RLS enabled and grant no browser-role access.
Earlier website accounts (FastAPI Users password hashes) cannot become Supabase Auth logins.
If any real partners registered before this change, ask them to sign up again with the same
email, then copy balances from the archived legacy_enchiridion_web_* schema.
Backend:
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements-dev.txt
cp .env.example .env
# Fill SUPABASE_DB_URL, SUPABASE_URL, SMTP and Flutterwave/Google test settings in .env.
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000
Frontend in a second terminal:
cd frontend
npm ci
cp .env.example .env.local
# Set the Supabase URL/anon key and the Flutterwave test public key in .env.local.
npm run dev
App: http://localhost:3000. API documentation: http://127.0.0.1:8000/docs.
GET /health/ready verifies database connectivity and schema availability.
Missing database credentials return errors; there is no mock persistence fallback.
Supabase Auth sends verification and password-reset email; backend SMTP sends billing
notices and the consent-gated offer email. Referral rewards and Premium checkout require a
verified email.
Promote a registered administrator using the Supabase SQL editor:
UPDATE enchiridion_web.partners SET is_superuser = true
WHERE email = '[email protected]';
The default deployment is one Vercel Services project, configured by the root
vercel.json. Follow the combined deployment guide.
Use repository root ./ and application preset Services; do not manually set
BACKEND_URL, which is injected by the frontend service binding.
The instructions below are the alternative two-project deployment:
| Project | Root directory | Framework |
|---|---|---|
| Backend | backend | FastAPI |
| Website | frontend | Next.js |
The backend exports app from app/main.py, a supported Vercel entrypoint.
It writes no local files and awaits persistence within the request. Database
transactions commit before successful API responses; connections close afterwards.
Do not set a long-running Uvicorn start command in Vercel.
Backend environment variables:
SUPABASE_DB_URL: your existing project's transaction-pooler URI.SUPABASE_URL (and SUPABASE_JWT_SECRET only for legacy HS256 projects).GOOGLE_PLAY_PACKAGE_NAME, GOOGLE_PLAY_SERVICE_ACCOUNT_JSON, GOOGLE_RTDN_AUDIENCE,
GOOGLE_RTDN_SERVICE_ACCOUNT, CRON_SECRET (see docs/subscriptions.md).FRONTEND_URL=https://enchiridion.site.CORS_ORIGINS=https://enchiridion.site,https://www.enchiridion.site.FLUTTERWAVE_SECRET_KEY, FLUTTERWAVE_WEBHOOK_SECRET.BOOK_PRICE_NGN=10000 (existing book price; adjust deliberately).backend/.env.example.Frontend environment variables:
BACKEND_URL=https://YOUR-BACKEND-PROJECT.vercel.app (no trailing API path).NEXT_PUBLIC_FLUTTERWAVE_PUBLIC_KEY: matching test/live Flutterwave public key.NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY: the shared Supabase project.NEXT_PUBLIC_PLAY_STORE_URL: the app's Play listing, used after website purchases.Configure Preview separately with test payment keys and test data. Redeploy the frontend after changing its public key. Ensure Vercel deployment protection permits the frontend proxy and Flutterwave webhook to reach the production backend.
Configure this webhook URL in Flutterwave:
https://YOUR-BACKEND-PROJECT.vercel.app/api/v1/payments/flutterwave/webhook
(the older /referral/flutterwave/webhook path is an alias for the same handler).
Set its secret hash to the backend's FLUTTERWAVE_WEBHOOK_SECRET and enable retries.
The backend validates HMAC-SHA256 signatures (or the legacy v3 verif-hash header),
then independently re-verifies the transaction with Flutterwave's API.
Checkout creates an order in Supabase first. Amounts are in naira, not kobo. Only matching successful NGN payments with the expected reference, email and amount are accepted. Both the browser callback and webhook use the same idempotent payment handler. A failed confirmation can be retried without starting another payment. Guest payments are retained and associated with an account when that email signs up. Old unsigned payment and mock-credit routes are retired.
enchiridion.site and www.enchiridion.site to the frontend Vercel project.www CNAME to the
exact values Vercel displays for this project. Avoid copying stale generic IPs.enchiridion.site as canonical and redirect www in Vercel.You can keep Hostinger as registrar and DNS provider. No nameserver transfer is required. No Vercel deployment or DNS changes have been made by this code change.
cd backend
python -m pytest tests -q
cd ../frontend
npm run build
Persistence and billing tests require a disposable local PostgreSQL database named
enchiridion_test built from backend/tests/supabase_stub.sql and the master schema
(see docs/database.md).
Set TEST_DATABASE_URL=postgresql://[email protected]:PORT/enchiridion_test to include
them. These tests clear website tables and reject remote database URLs. Without the
variable they are skipped, while API smoke tests still run.