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]