ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
A free, open record of what AI models do when a choice has moral weight, next to what they say is right. Written for everyone: try the dilemmas, learn what AI alignment means, and talk about it.
EducationTypeScript · JavaScriptGitHub @rminlaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
What do frontier models SAY and DO when they faced with ethical problems?
Loading the full README.
Read the full README ↗Private repo: rminla/moral-gradient. This folder is the repo root.
A free, open record of what AI models do when a choice has moral weight, next to what they say is right. Written for everyone, so anyone can follow it, try it and talk about it.
Mission. Raise public awareness of, and conversation about, AI alignment and safety among regular people, not only researchers. Academics get open data and methods; everyone else gets plain-language results, dilemmas to try (/try), an explainer (/learn) and an email when there are new findings.
It is an open tracker of whether AI models act on the values they state. It covers three pillars (Say vs Do, Values under pressure, Self-interest) plus a baseline layer (MFQ-2, MFQ-30, OUS, Awad 2020 trolley dilemmas) with human data where it exists. The site is descriptive only: it never publishes a "right answer".
The name is one config value: NEXT_PUBLIC_SITE_NAME (default "Moral Gradient").
| Area | Where |
|---|---|
| Try it: answer a dilemma (Switch, Footbridge), then see people (Awad 2020) and each model; the answer stays in the browser, never sent | app/try, components/TryClient.tsx |
| Learn: plain-language explainer, discussion questions, glossary, curated outside reading | app/learn |
| New findings by email: double opt-in signup (Learn, Try, Results, donate thanks, opt-in box on donate), confirm and one-click unsubscribe | components/Subscribe.tsx, lib/subscribers.ts, app/api/subscribe/*, app/subscribe/* |
| Privacy | app/privacy |
| Home: purpose, live budget, next-milestone progress bar ("$X left before running the full suite on …"), pillars, shareable findings, leaderboard | app/page.tsx |
| Results: Say/Judge/Do table, self-interest charts, pressure flip rates, baseline vs human data, findings, run log (superseded and excluded runs listed, never charted) | app/results |
| Per model / per scenario pages (donor-gated prompts and reasoning traces on scenario pages) | app/models/[slug], app/scenarios/[id] |
| Share page and auto-generated 1200×630 OG image per finding; X and LinkedIn buttons | app/f/[id], app/f/[id]/opengraph-image.tsx, components/Share.tsx |
| Costs and funding: live ledger spend, donations, fees, pool, milestone queue, launched runs, leaderboard | app/costs |
| Donate (anonymous or named; a name can link to your account), Stripe Checkout or mock checkout, thank-you page | app/donate, app/api/donate, app/api/stripe/webhook |
| Magic-link sign-in and account (display name, profile link) | app/signin, app/account, app/api/auth/* |
| Methodology | app/about |
Stack: Next.js 15 (App Router) + Tailwind v4, libSQL (local SQLite file; Turso in production), Stripe Checkout, Resend for email. Runs on Vercel's free tier.
git clone [email protected]:rminla/moral-gradient.git site # or work in moral-compass/site on the box
cd site
npm install
cp .env.example .env.local # then set SESSION_SECRET and INGEST_TOKEN to long random strings
# for a local preview without Stripe/Resend, also set ALLOW_MOCK_PAYMENTS=1 and ALLOW_DEV_LOGIN=1
npm run bundle # adapt ../results into data/site-bundle.json (+ donor-only data/site-traces.json)
npm run db:init # schema + milestone queue (add --reset-local to clear local test donations)
npm run build && npm start # http://localhost:3000
npm run screenshots # optional: PNGs of the key pages into screenshots/
On the box the site re-runs the adapter automatically whenever ../results/public/index.json changes, and it reads spend live from ../pilot/data/ledger.sqlite.
Priority for results:
/api/ingest (production).RESULTS_DIR (scripts/build_site_bundle.py, reading the results bundle schema v1.0.0).data/sample-bundle.json (EXAMPLE DATA, labelled as such on every page).Adapter rules:
validity: exploratory runs are charted.superseded runs are listed in the run log. Their traces carry a "Superseded run" tag, and they are never charted.excluded runs (probes, aborted runs) are listed only.Rates are expressed relative to the option the model's own stated view implies. If the model disagreed with the SAY statement on a binary dilemma, the shares are mirrored.
Spend priority:
LEDGER_PATH, when readable./api/ingest.Vercel can't read the box, so push from the box after each export:
npm run bundle
SITE=https://your-domain INGEST_TOKEN=... npm run push:results
This sends the bundle, the donor-only traces and the ledger spend summary.
This is the beginning of the README. Read the rest at the original. Read the full README ↗