ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證AI Native Free High-Quality Learning Platform (K-12 to University)
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Nakafa is a source-available educational platform for structured learning, assessments, Quran study, and political analysis. The production site is nakafa.com.
This repository owns the React applications on TanStack Start, design system,
transactional Convex backend, renderer implementations, user state, and
product integrations. The separate
Aksara repository owns authored content
and signed publication artifacts for every content scope. packages/contents
contains only live Nakafa product, formatting, and agent contracts. It is not an
authored content source or publication path.
package.json is the toolchain source of truth:
Do not add .npmrc, .node-version, .nvmrc, or another package-manager
contract unless the repository gains a measured need that package.json
cannot express.
git clone https://github.com/nakafaai/nakafa.com.git
cd nakafa.com
bun install --frozen-lockfile
cp apps/www/.env.example apps/www/.env.local
Fill in the application environment and use the main dev deployment selected
in packages/backend/.env.local (see
packages/backend/AGENTS.md). Content routes
need a populated, verified Aksara signed runtime. An empty backend is not a
complete content fixture.
Nakafa uses Portless HTTPS URLs for local development. Google rejects
.localhost subdomains as OAuth redirect URIs, so configure the proxy with
Nakafa's owned development suffix before testing Google sign-in:
bunx portless proxy start --tld local.nakafa.com
Stop an existing proxy before changing its suffix. This setting is shared by local projects. Portless listens on port 443, creates and trusts a local certificate authority, and registers local DNS entries for running apps.
Run bun run dev for hot reload. The canonical checkout serves
https://nakafa.local.nakafa.com; worktrees receive their own prefix, such as
https://ci.nakafa.local.nakafa.com. The web and email preview servers
receive separate names. CAS runs as Cloudflare Workers, so it has no local server. Use bunx portless list to inspect active routes,
bunx portless get nakafa to obtain this checkout's web URL, and
bunx portless doctor to check the proxy, DNS, and certificate trust.
Set SITE_URL in apps/www/.env.local and the selected development backend
to that exact web origin. Set VITE_CONVEX_URL and
VITE_CONVEX_SITE_URL to the same main dev deployment. The shared
deployment carries one SITE_URL, which backs auth and checkout, so a
worktree on its own origin must use an isolated development deployment
instead of the shared one. Google's client configuration must include the
web origin under authorized JavaScript origins and
<web-origin>/api/auth/callback/google under authorized
redirect URIs. A worktree needs its exact callback registered separately;
Google does not accept wildcard callbacks. See the
Portless OAuth guidance.
Acceptance databases use inert authentication credentials. Real sign-in requires
a development backend configured with the Google client credentials.
Ordinary bun run build and bun run start use your configured nonproduction backend.
For a reproducible production-mode acceptance run, use:
bun run acceptance:prepare
bun run acceptance:build
bun run acceptance:start
Preparation creates a private native Convex database under .cache/acceptance,
checks out the reviewed Aksara revision pinned in
packages/backend/scripts/content/acceptance/source.json, and publishes its
fixed acceptance selection through Aksara's normal signed publication protocol.
It uses an ephemeral local signer and needs no production deployment or signing
credentials. Aksara owns every authored source and validates complete lesson
groups, exam sets, locales, and structured snapshots before activation.
The acceptance build and start commands run ordinary app commands with that
isolated backend. They preserve your normal Convex selection and stop the owned
backend when the operation ends. Production Convex runs functions on dedicated
hosts, so the local backend runs at most one active isolate per core and the
build runs below its CPU priority. Prerender bursts then queue for a core
instead of spending Convex's one-second query limit waiting for one. Start also
serves a stand-in for PostHog ingestion on a loopback port that preparation
reserves, because the build bakes that address into the app's analytics proxy.
It accepts and discards every event, so analytics never leaves the machine and
the proxy logs no failures. Start serves the app on http://localhost:3000,
without Portless.
Run the browser suites from the repository root in a second terminal:
bun --filter www test:browser
Each checkout prepares its own runtime, and its backend takes free ports. To
serve a second runtime beside another one, name the app's port with
ACCEPTANCE_PORT in every acceptance command and in the browser suites.
Preparation records the origin and bakes it into the backend, the build bakes it
into the app, and build and start refuse a port other than the recorded one:
ACCEPTANCE_PORT=3100 bun run acceptance:prepare
ACCEPTANCE_PORT=3100 bun run acceptance:build
ACCEPTANCE_PORT=3100 bun run acceptance:start
ACCEPTANCE_PORT=3100 bun --filter www test:browser
Stop acceptance services before bun run acceptance:clean removes their database,
source checkout, signer, logs, and the web app's cached signed fetch responses.
Cleanup verifies filesystem ownership and refuses a database whose identity
changed. To refresh the fixture, clean it and repeat preparation. Update the
pinned Aksara revision deliberately when the acceptance contract needs new
reviewed examples.
Production deploys run from GitHub Actions only after a merge to main. The
deploy workflow deploys the Convex backend with its deploy key, then runs
alchemy deploy for the stage. The Alchemy stack in apps/www/alchemy.run.ts
builds the web app and deploys it to Cloudflare Workers. App builds query bounded
real published samples and verify the signed content with the current renderer.
They do not export or import production tables or release history. Full corpus
validation remains in Aksara's publication and renderer compatibility checks.
See ADR 0037.
apps/www: main TanStack Start application at https://nakafa.local.nakafa.comapps/mcp: Cloudflare Worker edge for the Convex MCP runtimeapps/api: Cloudflare Worker edge for the Convex REST runtimeapps/cas: CAS math engine, a Python Durable Object behind a TypeScript front at https://cas.nakafa.comapps/email: email preview application at https://email.nakafa.local.nakafa.compackages/backend: Confect schema, functions, workflows, native Agent capabilities, and integrationspackages/design-system: shared React components and renderer implementationspackages/contents: Nakafa product, formatting, route-context, learner, and
agent contractspackages/testing: shared Vitest configurationpackages/utilities: generic cross-domain primitivesrepos/effect: read-only Effect source pinned to the installed versionRead the nearest AGENTS.md before working. Convex changes also require
packages/backend/AGENTS.md and the generated Convex guidelines. Effect work
requires reading repos/effect/.agents/AGENTS.md plus the relevant implementation,
tests, type-level tests, module structure, and API design in the vendored source.
bun run dev
bun run dev:all
bun run build
bun run start
bun run test
bun run lint
bun run security:audit
bun run format
bun run boundaries
bun run effect:source:check
There is no root typecheck script. Run the typecheck owned by each changed workspace, for example:
bun --filter www typecheck
bun --filter @repo/backend typecheck
bun --filter @repo/design-system typecheck
Tests use Vitest config files owned by each workspace. Keep tests colocated as
name.test.ts, import the Vitest APIs they use, and preserve the per-file
coverage gate that every workspace inherits from packages/testing. Final tests only target real colocated .ts
Modules. Do not commit tests for .tsx Modules, rename React tests to hide them
as .test.ts, create __tests__ folders, or add duplicate test-only source
Modules. Verify rendered React behavior through production Browser or E2E
acceptance.
Do not add substitute content or duplicate Aksara-owned source to this
repository. Authored educational content changes belong in nakafaai/aksara.
Nakafa consumes only authenticated current Aksara contracts and signed
publication artifacts.
The shared @nakafa/aksara-contracts/locale module is the only locale source
of truth. English, Indonesian, and German are active. TanStack Start routing, API
validation, Convex validators, AI language handling, date formatting, checkout
localization, and sitemap generation derive from that contract. Do not add a
second app-local locale list.
Aksara's signed page family owns public legal and company documents. Nakafa
uses the same verified Page projections and artifacts for human routes, footer
navigation, sitemap entries, and Markdown or LLM delivery. Do not restore local
legal MDX, hard-coded legal route catalogs, or another publication path.
Renderer and component implementations remain in Nakafa. Aksara content refers to reviewed renderer contracts and never carries duplicate React or TSX implementations.
Read AGENTS.md and
.github/CONTRIBUTING.md. Submit a ready pull request
from a branch, keep it current with main, resolve review conversations, and
run the relevant checks on the exact head before merge.
Nakafa uses a source-available license model and is not open source under the Open Source Definition.
| Area | License or policy |
|---|---|
| Software source code | Nakafa Source Available License 2.0 |
| Educational content, articles, exercises, datasets, and media | Nakafa Content License 2.0 |
| Names, logos, domains, product names, UI identity, and brand assets | Nakafa Trademark and Brand Policy 2.0 |
Commercial, hosted, redistribution, modification, white-label, rebrand, and AI-training uses require prior written permission from PT. Nakafa Tekno Kreatif. See the license files for the complete terms.
Reference material:
For commercial licensing inquiries: [email protected]