ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Asetta is a free, AI-powered academic assistant that keeps students on top of assignments, deadlines, and grades.
EducationTypeScript · CSSGitHub @P541MOnlineOwner 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
AI-powered academic planner for students that transforms course outlines into organized assessment trackers with automatic deadline extraction. Built with Next.js 15, React, TypeScript, and Firebase, it features weighted grade calculations, email reminders, calendar export, and real-time sync across devices.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
AI-powered academic planner for students that turns course outlines into organized assessment
trackers with automatic deadline extraction. Built with Next.js, React, TypeScript and Firebase,
it features weighted grade calculations, email reminders, calendar export, and real-time sync
across devices.Read the full README ↗AI-powered academic planner for students that turns course outlines into organized assessment trackers with automatic deadline extraction. Built with Next.js, React, TypeScript and Firebase, it features weighted grade calculations, email reminders, calendar export, and real-time sync across devices.
This is an npm workspaces monorepo with two independent Next.js apps, each deployed as its own Vercel project. They link to each other by URL only and share no code.
| Path | App | Domain | Stack |
|---|---|---|---|
apps/web | The platform | asetta.me | Next.js 15 (Pages Router), React 19, Tailwind v4, shadcn/ui, Firebase Auth and Firestore, Gemini 2.5 Flash, Nodemailer |
apps/landing | The marketing site | www.asetta.me | Next.js 16 (Pages Router), React 19, Tailwind v4, Motion, Nodemailer |
Other files at the root:
docs/AUDIT.md: the work tracker (checklist, open decisions, session log).docs/ops.md: deploys, the reminder cron, environment variables, Firestore rules, dependency notes.firestore.rules, firebase.json, .firebaserc: Firestore security rules and the Firebase CLI config..github/workflows/ci.yml: the CI job for both apps..github/workflows/reminders.yml: calls the reminder endpoint every 30 minutes.CLAUDE.md and each app's CLAUDE.md: rules for AI coding agents (apps/web/standards.md holds the platform's code and design standards).git clone https://github.com/P541M/asetta.git
cd asetta
npm install
Run every npm command from the repository root. There is one lockfile, at the root.
Each app reads its own .env.local. docs/ops.md explains every variable.
apps/web/.env.local:
# Firebase
NEXT_PUBLIC_FIREBASE_API_KEY=
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
NEXT_PUBLIC_FIREBASE_PROJECT_ID=
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
NEXT_PUBLIC_FIREBASE_APP_ID=
# Firebase Admin (complete service account JSON as a single line)
FIREBASE_SERVICE_ACCOUNT=
# Google Gemini
GEMINI_API_KEY=
# Email (Gmail via Nodemailer)
EMAIL_USER=
EMAIL_APP_PASSWORD=
# Auth token for /api/cron/notifications
CRON_SECRET=
# Application URL (used in email links)
NEXT_PUBLIC_APP_URL=
apps/landing/.env.local:
# Contact form (Gmail via Nodemailer)
EMAIL_USER=
EMAIL_PASS=
# Optional: Google Analytics 4
NEXT_PUBLIC_GA_MEASUREMENT_ID=
npm run dev:web # the platform on http://localhost:3000
npm run dev:landing # the marketing site (3001 if the platform is already running)
npm run lint # ESLint, both apps
npm run format:check # Prettier, both apps
npm run typecheck # TypeScript, apps/web
npm test # Vitest unit tests, apps/web
npm run build # production build, both apps
npm run test:rules # Firestore rules on the emulator (needs Java; before any rules deploy)
asetta (apps/web) and asetta-landing (apps/landing), both connected to this repository. A push to main deploys both to production; other branches get preview deployments with their own URLs. Details in docs/ops.md..github/workflows/ci.yml) runs one job, verify, on every push to main and every pull request: install, lint (web and landing), format check (web and landing), typecheck (web), unit tests (web) and build (web and landing). The build uses harmless placeholder Firebase values; real credentials stay in Vercel..github/workflows/reminders.yml) calls /api/cron/notifications every 30 minutes with the CRON_SECRET repository secret, so reminders go out at 9:30 in each user's time zone; the daily Vercel cron in apps/web/vercel.json is the backstop. Details in docs/ops.md.main (GitHub, Settings, Branches) by requiring the "CI / verify" check, so nothing broken can be merged and auto-deployed.