All configuration is loaded at application boot viaDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/vruizz22/innova-backend-serverless/llms.txt
Use this file to discover all available pages before exploring further.
@nestjs/config and validated before the NestJS module graph is assembled — a missing required variable causes a hard startup failure rather than a silent runtime error. Never commit a .env file to source control. Use .env.example as your template: copy it to .env, fill in the values for your environment, and keep secrets out of version control.
Database
Supabase Postgres connection string used by Prisma. In local development point this at a local Postgres instance (the
.env.example default is postgresql://postgres:innova_secret@localhost:5433/innova_dev_db?schema=public). In production you must use the Supabase transaction pooler on port :6543 with the PgBouncer flags appended.MongoDB Atlas (or local Mongo) connection string for the telemetry store. Example:
mongodb://root:innova_mongo_secret@localhost:27017/innova_telemetry_local?authSource=admin. In production, use the Atlas SRV URI.Supabase Auth
Your project’s Supabase base URL, e.g.
https://<project-ref>.supabase.co. Used to validate JWKS tokens and by the service-role client.The server-only service role key from your Supabase project dashboard. This key bypasses Row Level Security and must never be exposed to the browser or a public client.
The public anon key from your Supabase project dashboard. Optional in most server-side contexts but required for any endpoint that needs to act on behalf of an anonymous caller.
AWS
AWS region where all resources are provisioned. The canonical value for this project is
us-east-1. Must match the region in serverless.yml.URL of the FIFO telemetry queue (
attempt-stream.fifo). Every ingested attempt is published here for durable, ordered delivery to the telemetry worker that persists events to MongoDB.URL of the standard LLM classification queue. Attempts the rule engine cannot classify are forwarded here for async classification by Claude in
innova-ai-engine.URL of the OCR queue. Student photo submissions are pushed here and processed by the OCR worker backed by Gemini.
URL of the attempt-reprocess queue. After OCR, graded submission results are reprocessed here to create
Attempt records and trigger BKT updates.URL of the guide-ingest queue (v9 guides pipeline). Required in production for the teacher-worksheet flow. The consumer lives in
innova-ai-engine.URL of the solution-generation queue (v9 guides pipeline). Required in production; triggers Claude to produce step-by-step solution keys for each guide question.
URL of the submission-grading queue (v9 guides pipeline). Required in production; triggers the submission grader worker in
innova-ai-engine.URL of the ad-hoc solve queue (v9 guides pipeline). Required in production for on-demand single-question solve requests. The consumer lives in
innova-ai-engine.URL of the exercise-generation queue. Required in production; triggers the
innova-ai-engine worker that generates new exercises on demand when a teacher requests LLM-authored items.Name of the S3 bucket that stores teacher worksheet PDFs. Required in production. Example:
innova-backend-serverless-prod-guides.Name of the S3 bucket that stores student photo submissions. Required in production. Example:
innova-submissions-prod.Lifetime in seconds for presigned PUT URLs used when uploading worksheet PDFs to S3. Defaults to
600 (10 minutes) if not set.Lifetime in seconds for presigned GET URLs used when serving worksheet PDFs from S3. Defaults to
300 (5 minutes) if not set.When running locally with
docker compose up -d, LocalStack emulates both SQS and S3 on port 4566. Set your queue URLs to the LocalStack endpoint format so the async pipeline works without a real AWS account:AI Providers
API key for Anthropic Claude. Required in production for LLM classification (unclassified errors), solution-key generation, and submission grading. Leave blank locally to skip these features.
API key for Google Gemini. Required in production for the OCR worker that transcribes student handwritten photos. Leave blank locally if you are not exercising the OCR pipeline.
Resend API key for transactional email. Required in production for password-recovery flows. Can be left blank in development to skip email sending entirely.
The
From address used on all outgoing emails. Must be a verified sender domain in your Resend account. Example: Innova <no-reply@superprofes.app>.Application
Public browser-facing URL of the main web application. Used in email links and redirects. Production value:
https://superprofes.app.Public URL of this API. Used in self-referencing links and email templates. Production value:
https://api.superprofes.app.Public URL of the student practice application. Used in email links and redirects. Production value:
https://practica.superprofes.app. Corresponds to the PUBLIC_PRACTICE_URL key injected into Lambda by serverless.yml.Comma-separated list of browser origins that are allowed to make cross-origin requests to the API. Production example:
https://superprofes.app,https://app.superprofes.app. In development: http://localhost:3001,http://localhost:3002,http://localhost:3004,http://localhost:8081.Pino log level threshold. Accepted values:
debug, info, warn. Defaults to info when not set. Use debug locally to see detailed request traces.