2026Solo developer — design, build and deployment
psico-yerma — Practice site & admin panel
Website and private admin panel for a child and teen psychology practice
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS v4
- Supabase
- Resend
- Zod
- Vitest
Problem
The practice needed a trustworthy Spanish-language home online: services, pricing guidance, FAQ and a contact channel that parents could actually reach — without hiring an agency or maintaining a CMS.
Every inquiry had to be spam-resistant and land somewhere the practice owner could see it, track it and turn into a client record.
Approach
Public site, Spanish-first
Next.js App Router with static prerendering, localized copy and SEO built in from day one: metadata, sitemap, robots and an Open Graph image.
Content sections designed for anxious parents: services, FAQ, contact form and a private letter page excluded from search engines.
Spam-resistant contact pipeline
Contact form posts to a server route with Zod validation and Cloudflare Turnstile verification, stores the inquiry in Supabase (Postgres) and sends an email notification through Resend.
Turnstile rejects bots before any email or database write happens, keeping the practice's inbox clean.
Private admin panel
Supabase Auth (email/password) protects every /admin route via proxy: unauthenticated requests redirect to /login.
Dashboard with inquiry stats by status and reason, a filterable contacts table with status changes, and a clients CRUD with validation, tests and Recharts-powered reporting.
Engineering rigor
TypeScript strict, Vitest suites around validation and CRUD logic, GitHub Actions CI and Conventional Commits.
Results
- Live in production at psico-yerma.vercel.app, maintained by the practice owner with zero developer involvement for day-to-day use.
- Runs on free tiers across Vercel, Supabase and Resend — the client pays nothing for hosting.
- Private admin panel with authenticated access, inquiry tracking and client management — previously handled over WhatsApp and notebook paper.