Manizales de Pie has no Docker image or Helm chart — it is a Next.js application deployed on Vercel backed by a Supabase project. Before you can run it, you need three external services: a Node.js runtime, a Supabase project, and a Google OAuth client. Optional hardening with Cloudflare Turnstile can be layered in once the core deployment is stable.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/astrxnomo/manizalesdepie/llms.txt
Use this file to discover all available pages before exploring further.
Node.js and package manager
The app requires Node.js 20 or later, which matches the@types/node: ^20 pin in package.json. The package manager is npm.
The repository ships an .npmrc file at the root with a single line:
Supabase project
The app has a hard dependency on a Supabase project. The database is not an optional backing store — it is the map. Every pin, every work order, and every realtime update flows through it. Your Supabase project must provide:PostgreSQL + PostGIS
The schema uses geography columns, spatial indexes, and the
st_dwithin and st_distance functions. PostGIS must be enabled before the migration runs.Row-level security
Every table has RLS enabled. Published rows are readable by the
anon role; mutations require authenticated or the service role. RLS is not optional and cannot be removed.Authentication
Google is the only configured identity provider. Contributor and curator sign-in flow through Google OAuth; there is no password or SMS OTP path in this codebase.
Realtime
The map subscribes to live inserts and updates on published rows. Realtime must be enabled for the map to update without a page reload.
Storage
Animal report photos are stored in Supabase Storage and served through the CDN. The
next.config.ts image optimizer is scoped to *.supabase.co/storage/v1/object/public/**.manizales-de-pie (ref lriozoktdpkggzywimek, region us-east-1), held in the Felipe Giraldo org.
Known risk, accepted at launch: the free tier has a ceiling on compute and
realtime connections. If the app catches on during an active emergency, that
ceiling arrives at the worst possible moment. The escape route is upgrading to
Supabase Pro. This risk was weighed against the cost of Pro at launch and
accepted; if usage climbs, upgrade before the ceiling is hit.
Google OAuth client
Google is the only identity provider. Curators and contributors sign in with a Google account; no SMS OTP, no passwords.Create a Google Cloud project
Go to console.cloud.google.com, create a new project (or reuse an existing one), and enable the Google+ API (also listed as the People API in newer console views).
Create OAuth 2.0 credentials
Navigate to APIs & Services → Credentials → Create Credentials → OAuth client ID. Choose Web application as the application type.
Add the redirect URI
Under Authorized redirect URIs, add:For local development, also add
http://localhost:3000/auth/callback.Copy credentials into Supabase
In your Supabase dashboard, go to Authentication → Providers → Google. Enable the provider and paste in the client ID and client secret from the previous step.The Supabase redirect URL shown in that panel (
https://<ref>.supabase.co/auth/v1/callback) must also be added to the Google OAuth client’s authorized redirect URIs.Vercel (recommended deployment target)
The app is configured for Vercel. Thenext.config.ts sets security headers, image remote patterns, and allowed dev origins. Other Node.js-compatible platforms (Railway, Render, Fly.io) will work, but note one constraint:
proxy.ts must run in the Node runtime. In Next.js 16, the middleware file is named proxy.ts (not middleware.ts) and its export is proxy. The runtime is Node and it cannot be configured to edge. Do not set export const runtime = "edge" on this file — the Supabase SSR cookie helpers require Node APIs.
Cloudflare Turnstile (optional)
The public report forms are designed to accept a Cloudflare Turnstile site key for bot protection. The CSP innext.config.ts already names challenges.cloudflare.com in script-src, connect-src, and frame-src, so no config change is needed when the keys are ready.
Turnstile keys are added as environment variables when the /reportar form ships. The app runs without them — Turnstile is not required to stand up the deployment.