ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Türkçe konuşan öğrenciler için doğru İngilizce öğretmenini bul. Online birebir İngilizce dersi, ücretsiz deneme dersiyle başla.
Translation pending
EducationHTML · TypeScriptGitHub @armussOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
ARMUS — Turkish English learning marketplace
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗ARMUS (armus.com.tr) is a Turkish marketplace that connects students with online English teachers: browse teachers, book a paid lesson or a discounted trial, meet over video, pay by card via iyzico, and manage everything (schedule, messages, reviews, teacher payouts) from role-specific dashboards.
This file is a map of the codebase for anyone picking it up cold. It
describes the architecture as it actually is, not as originally
prototyped — README.txt (removed) described an early static-mockup
phase with no real backend; that is no longer true.
*.js files
(see below) and is included via <script src="..."> tags.create-payment + payment-callback.send-* edge
function.mobile/ with its
own CLAUDE.md/AGENTS.md — not covered further here.There is no build step for the web app: any static file server works.
python3 -m http.server 8000
Then open http://localhost:8000/index.html. The Supabase project
itself (schema, edge functions, secrets) is managed through the
Supabase Dashboard, not from this checkout.
npm test
Runs tests/*.test.js with Node's built-in test runner (Node 18+, no
extra dependencies). These are regression tests for the pure business
logic in bookings.js/reviews.js/i18n.js — timezone conversion,
slot availability, trial-to-paid conversion, commission tiers, and the
output-sanitization helpers — loaded into an isolated vm context the
same way a <script> tag would, without a browser or a live Supabase
project. They exist specifically to catch regressions of bug classes
that have shipped before in this codebase (the
toISOString()-vs-local-date timezone trap above all). There is no
browser/e2e test suite yet; anything involving a real page render,
Supabase, or a payment flow is still manually tested.
supabase/schema.sql is the canonical, current combined schema —
tables, RLS policies, triggers, functions, as they exist today.supabase/migration_N.sql files are the history: each one is a
standalone, idempotent-where-possible SQL script that was actually
run against the live project, in order, to reach the current state.
Every migration also gets folded into schema.sql so that file never
goes stale. When adding a new migration, do both: write
migration_<next number>.sql and update the matching section of
schema.sql to match.Row Level Security is the real authorization boundary — every table a
browser can query directly is protected by policies in schema.sql,
not by client-side checks. Client-side role checks (e.g. hiding an
admin button) are a UX nicety only; assume any request can be replayed
directly against Supabase with arbitrary parameters, and verify server
enforcement accordingly.
supabase/functions/)Deno functions, each independently deployed. One-line purpose:
| Function | Purpose |
|---|---|
create-payment | Starts a paid booking or package purchase (re-derives price/teacher identity server-side, never trusts the client) |
payment-callback | iyzico's redirect target — the only place a paid booking or credit batch is actually created |
cancel-booking | Cancels a booking, issuing an iyzico refund when the canceller is eligible |
delete-account | Permanently deletes a user's account and data |
get-teacher-busy-times | Returns a teacher's already-booked slots for the picker |
verify-email-code | Confirms an email verification code at signup |
send-verification-email | Sends the signup verification code |
send-lesson-reminder | Scheduled: reminder emails before an upcoming lesson |
send-review-reminder | Scheduled: nudges a student to review a completed lesson |
send-message-notification | Emails a user about a new chat message |
send-teacher-status-email | Emails a teacher when their application is approved/rejected |
send-contact-email | Backs the public contact form (iletisim.html) |
site-chat | The FAQ-grounded AI chat widget on every page |
auth.js — session/profile helpers (armusUpdateOwnProfile, etc.)bookings.js — booking domain logic shared across pages: timezone
conversion (armusZonedTimeToUtc, armusFormatSlotTimeRangeForViewer),
slot availability (armusSlotsForDate), trial-to-paid conversion
rules (armusTrialCountsAsEarned), commission tiers
(armusCommissionForHours), booking cancellation.attendance.js — teacher no-show / late reports (student-initiated)disputes.js — general booking dispute reports, admin-triagedi18n.js — armusT(key, fallback) translation lookup,
armusEscapeHtml/armusSafeUrl output-sanitization helpers, and the
site-chat widget bootstrapmarketplace.js — teacher listing/filtering (hides unapproved/banned
teachers)messages.js, reviews.js, favorites.js, testimonials.js,
teacher-notes.js, student-extras.js, site-settings.js — one
feature area each, same pattern (thin wrappers around Supabase
queries, RLS does the real enforcement)teacher_timezone
column (migration_37.sql). Never compare that raw string against
another timezone's "today" directly — convert through
armusZonedTimeToUtc() first, then compare real instants. Never use
new Date(...).toISOString().slice(0, 10) for a "today" key — it's
the UTC date, not the viewer's local date, and silently drifts a day
near local midnight for any positive-UTC-offset viewer (Turkey is
UTC+3). Use local getFullYear()/getMonth()/getDate() instead
(several pages have a small localDateKey() helper for this).innerHTML/insertAdjacentHTML must go through armusEscapeHtml()
first (i18n.js).create-payment always re-derives the real price from the teacher's
profile server-side; follow that pattern for anything new that moves
money.bookings.js is the usual home) and be imported by
every page that needs them — not copy-pasted, which has caused real
drift bugs before.