Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Edupets-Studio/Edu-pets/llms.txt

Use this file to discover all available pages before exploring further.

EduPets exposes only HTTP GET routes. Every route except /health returns a full HTML page rendered by Jinja2. There are no REST API endpoints, no POST/PUT/DELETE handlers, and no JSON responses from page routes — the server’s only job is to hand the browser an HTML file with correctly resolved static asset URLs.

Page routes

RouteTemplateJavaScriptDescription
/index.htmlFondo.jsLanding / home page with animated canvas background
/indexindex.htmlFondo.jsAlias for / — same landing page
/loginlogin.htmlLogin.jsLogin form (client-side only)
/registroregistro.htmlregistro.jsRegistration form (client-side only)
/mascotamascota.htmlmascota.jsVirtual pet dashboard
/tiendatienda.html(none)In-game cosmetics store
/examenesexamenes.htmlExamen.jsMixed-operation exam mode
/ejercicio1ejercicio1.htmlSuma.jsAddition exercises
/ejercicio2ejercicio2.htmlresta.jsSubtraction exercises
/ejercicio3ejercicio3.htmlmultiplicacion.jsMultiplication exercises
/ejercicio4ejercicio4.htmldivision.jsDivision exercises
/playerplayer.html(none)Background music player (loaded via <iframe>)
/que-esque es.html(none)What is EduPets? info page
/por-quepor que.html(none)Why we built it info page
/equipoequipo.html(none)Team info page

Health check

The /health endpoint is the only route that returns JSON instead of HTML. It is intended for uptime monitors and Vercel’s infrastructure probes.
PropertyValue
MethodGET
Path/health
AuthNone
Response content-typeapplication/json
Success status200 OK
Example request and response:
curl https://your-edupets-domain.vercel.app/health
{"status": "ok"}

Legacy routes

The LEGACY_PAGES dict in main.py registers a second set of routes that map .html-suffixed paths and capitalised URL variants to the same templates. These exist so that old bookmarks and hardcoded links from earlier versions of the project continue to work without returning 404s.
Legacy pathResolves to template
/index.htmlindex.html
/login.htmllogin.html
/registro.htmlregistro.html
/mascota.htmlmascota.html
/Mascota.htmlmascota.html
/tienda.htmltienda.html
/Tienda.htmltienda.html
/examenes.htmlexamenes.html
/Examenes.htmlexamenes.html
/ejercicio1.html/ejercicio4.htmlrespective exercise templates
/player.htmlplayer.html
/que es.htmlque es.html
/por que.htmlpor que.html
/equipo.htmlequipo.html
New internal links should always use the clean paths from the PAGES dict (e.g., /mascota, not /Mascota.html).

Route registration pattern

Rather than writing a separate handler function for each page, main.py generates all handlers dynamically from the PAGES and LEGACY_PAGES dicts using app.add_api_route and a closure factory:
def page_handler(template_name: str):
    async def handler(request: Request) -> HTMLResponse:
        return render_page(request, template_name)

    return handler


for route_path, template_name in {**PAGES, **LEGACY_PAGES}.items():
    app.add_api_route(
        route_path,
        page_handler(template_name),
        response_class=HTMLResponse,
        methods=["GET"],
    )
The page_handler factory function is necessary because Python loop variables are captured by reference. Wrapping the inner handler in a factory ensures each registered handler closes over its own copy of template_name rather than the last value the loop variable held.
All routes accept only GET requests. There are no POST, PUT, or DELETE endpoints in EduPets. Form submissions on the login and registration pages are handled entirely in the browser by JavaScript calling an external Google Apps Script URL — no form data reaches the FastAPI server.

Build docs developers (and LLMs) love