ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Read real Arabic books in-app, tap any word to translate, and build a vocabulary that sticks.
EducationTypeScript · PLpgSQLGitHub @faysalabdiOnlineOwner 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
An app where I am able to track my Arabic stats, gain xp, level up and improve my reading / comprehension abilities. Levels where I start from beginner books and work my way up to scholarly books by ibn qayyim ibn taymiyyah etc.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Get through real Arabic books.
Tap any word to translate, save it to a spaced-repetition deck, and finish books.
Reading Arabic is hard because one unknown word breaks the flow and you never
finish the book. Maqraa removes the dictionary friction — tap a word, get the
lemma + meaning in context, keep reading — and measures real outcomes (books
finished, words mastered, days in a row) instead of an abstract level.Read the full README ↗Reading Arabic is hard because one unknown word breaks the flow and you never finish the book. Maqraa removes the dictionary friction — tap a word, get the lemma + meaning in context, keep reading — and measures real outcomes (books finished, words mastered, days in a row) instead of an abstract level.
/review)
with tap-to-flip flashcards and Again / Hard / Good / Easy grading. /words groups
every saved word by strength (New → Mastered)..epub; it's parsed in the browser into real
chapters, and one click of AI fills difficulty, genre, and blurb and regroups
badly-split EPUBs. Low-quality OCR scans are detected and flagged before import.Curated books are grouped by a coarse tier shown to the reader — Beginner /
Intermediate / Advanced (tierFor in components/book/BookCover.tsx, derived from
the advisory books.level). The tier is a signal and a shelf, not a ladder you must
climb: progress is measured by books finished, words mastered, and streak.
The curated catalogue is famous public-domain and original work only — an original graded reader (رحلة سامر), Juha folk tales, the Arabian Nights frame, al-Nawawi's 40 Hadith, Forty Hadith Qudsi, Kalila wa Dimna. (In-app text is always public-domain, original, or a reader's own private upload — never fabricated copyrighted text.)
Maqraa is freemium, billed through Stripe.
| Free | Pro | |
|---|---|---|
| Curated Beginner shelf | ✅ | ✅ |
| Intermediate & Advanced books | — | ✅ |
| Bring your own EPUBs | — | ✅ |
| Spaced-repetition deck | up to 50 words | unlimited |
| Daily AI limits (lookups / quizzes / tests) | modest | high |
lib/entitlement.ts is the single source of truth (getPlan / canReadTier); every
gate is enforced server-side (book page, reader route, test route, upload action,
AI quota). Emails in ADMIN_EMAILS are auto-Pro. A Stripe webhook
(/api/stripe/webhook) keeps the subscriptions table in sync.
type=signup). No magic-link sign-in.app/globals.css @theme) · Framer
Motion · lucide-reactlib/db/schema.ts, migrations in db/migrations/pnpm install
cp .env.example .env.local # Supabase, DATABASE_URL/DIRECT_URL, ANTHROPIC_API_KEY, (Stripe optional)
pnpm db:push # apply the Drizzle schema
pnpm db:seed # difficulty bands, curated on-ramp books + chapters, achievements
pnpm dev # http://localhost:3000
Supabase from a laptop: the direct DB host (db.<ref>.supabase.co) is IPv6-only
and often won't resolve locally — point DATABASE_URL / DIRECT_URL at the session
pooler (aws-<n>-<region>.pooler.supabase.com:5432, user postgres.<ref>).
Admin / curated uploads: add your email to ADMIN_EMAILS (comma-separated). Admins
are auto-Pro and their uploads become public catalogue books; everyone else's
uploads are private to them.
Scripts: pnpm db:generate, pnpm db:studio, pnpm test (Vitest), pnpm lint, pnpm build.
Billing is optional — without Stripe env the app runs free-only and /upgrade shows
"coming soon". To enable Pro:
STRIPE_SECRET_KEY=sk_… pnpm tsx scripts/stripe-setup.ts — idempotently creates the
Maqraa Pro product + monthly/annual prices; prints the price IDs.https://YOUR_DOMAIN/api/stripe/webhook, events
checkout.session.completed + customer.subscription.*; copy its signing secret.STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRICE_MONTHLY,
STRIPE_PRICE_ANNUAL, and NEXT_PUBLIC_APP_URL.scripts/stripe-backfill.ts reconciles the subscriptions table with Stripe if a
webhook delivery is ever missed. Use test keys locally, live keys only on the host.
/upload → drop an .epub:
lib/books/epub.ts, jszip). Reads the OPF for metadata,
then the book's own TOC (EPUB3 nav / EPUB2 toc.ncx) for real chapter
boundaries, merging spine pages between them; falls back to one chapter per spine
document. OCR accuracy banners are stripped and bad scans flagged (lib/books/quality.ts).lib/ai/book-analyze.ts). Claude reads only short
excerpts and returns a difficulty band, genre, blurb, and a page→chapter grouping
that drops front/back matter. Whole books are never sent to the model.createBookWithChapters writes the book + chapters and stamps
owner_id.| Route | Purpose |
|---|---|
/ | Signed-out landing |
/sign-in | Password sign-in · code-confirmed sign-up |
/path | Read — Continue hero, tier shelves (Beginner/Intermediate/Advanced), your library |
/book/[slug] | Book detail: cover, chapters, start reading, optional test |
/book/[slug]/read/[chapter] | The page-by-page reader + tap-to-translate |
/book/[slug]/test | Optional whole-book comprehension test |
/words · /review | Saved words · SM-2 flashcards |
/upload | Add a book (EPUB importer + AI) — Pro |
/upgrade | Pricing + Stripe checkout |
/settings · /stats | Plan & profile · reading stats |
/privacy · /terms | Legal |
lib/db/schema.ts — data model (books.owner_id, user_books, book_chapters,
vocab_items, streaks, subscriptions, …)lib/entitlement.ts — plan / Pro gates · lib/stripe/* — Stripe client, checkout, webhook synclib/books/{epub,split,quality}.ts — EPUB → chapters, OCR-scan detectionlib/ai/{word-lookup,chapter-quiz,test-generator,book-analyze,quota}.ts — Claude features + rate limitscomponents/reader/ChapterReader.tsx · components/upload/AddBook.tsxapp/(app)/path/page.tsx — the Read catalogue · app/(auth)/sign-in/page.tsx — authlib/srs/sm2.ts — pure SM-2 (unit-tested) · lib/xp/{rewards,grant}.ts — XP mathfont-arabic utility and dir="rtl" (Noto Naskh Arabic, Amiri
fallback). The logo is the Arabic wordmark مقرأ in Amiri.tailwind.config.ts — tokens live in app/globals.css.